修改Laitool的软件控制权限

This commit is contained in:
lq1405 2025-01-14 14:44:22 +08:00
parent 6512858af4
commit ece7c82a80
5 changed files with 77 additions and 70 deletions

View File

@ -25,7 +25,7 @@ export default function access(initialState: { currentUser?: API.CurrentUser } |
canAddMachine: true, canAddMachine: true,
canEditMachine: false, canEditMachine: false,
canDeleteMachine: false, canDeleteMachine: false,
canUpgradeMachine: false, canUpgradeMachine: true,
canDisableMachine: true canDisableMachine: true
} as AccessType.AccessType; } as AccessType.AccessType;

View File

@ -2,7 +2,7 @@ import React, { useEffect, useState } from 'react';
import { Form, Input, Button, FormInstance, Spin, message, Select, DatePicker, InputNumber } from 'antd'; import { Form, Input, Button, FormInstance, Spin, message, Select, DatePicker, InputNumber } from 'antd';
import moment from 'moment'; import moment from 'moment';
import { AddMachineData } from '@/services/services/machine'; import { AddMachineData } from '@/services/services/machine';
import { useModel } from '@umijs/max'; import { useAccess, useModel } from '@umijs/max';
interface AddMachineModalProps { interface AddMachineModalProps {
setFormRef: (form: FormInstance) => void; setFormRef: (form: FormInstance) => void;
@ -13,6 +13,7 @@ const AddMachineForm: React.FC<AddMachineModalProps> = ({ setFormRef }) => {
const [loading, setLoading] = useState<boolean>(false); const [loading, setLoading] = useState<boolean>(false);
const [messageApi, messageHolder] = message.useMessage(); const [messageApi, messageHolder] = message.useMessage();
const { initialState } = useModel('@@initialState'); const { initialState } = useModel('@@initialState');
const access = useAccess();
useEffect(() => { useEffect(() => {
setFormRef(form); setFormRef(form);
@ -28,9 +29,8 @@ const AddMachineForm: React.FC<AddMachineModalProps> = ({ setFormRef }) => {
}, [form, setFormRef]); }, [form, setFormRef]);
const onFinish = async (values: MachineModel.AddMachineParams) => { const onFinish = async (values: MachineModel.AddMachineParams) => {
if (values.useStatus == 0 && !values.deactivationTime) { if (values.userId == null) {
messageApi.error("试用机器码需要设置停用时间") messageApi.error("请填写所属用户ID");
return;
} }
setLoading(true); setLoading(true);
try { try {
@ -60,48 +60,12 @@ const AddMachineForm: React.FC<AddMachineModalProps> = ({ setFormRef }) => {
> >
<Input /> <Input />
</Form.Item> </Form.Item>
<Form.Item<MachineModel.AddMachineParams>
label="使用状态"
name="useStatus"
rules={[{ required: true, message: 'Please input the role name!' }]}
>
<Select onChange={(value) => {
if (value == 1) {
form.setFieldsValue({ deactivationTime: null })
} else {
const currentDate = new Date();
const nextDayDate = new Date(currentDate);
nextDayDate.setDate(currentDate.getDate() + 1);
form.setFieldsValue({ deactivationTime: moment(nextDayDate) })
}
}}>
<Select.Option value={0}></Select.Option>
<Select.Option value={1}></Select.Option>
</Select>
</Form.Item>
<Form.Item<MachineModel.AddMachineParams>
label="状态"
name="status"
rules={[{ required: true, message: 'Please input the role name!' }]}
>
<Select >
<Select.Option value={0}></Select.Option>
<Select.Option value={1}></Select.Option>
</Select>
</Form.Item>
<Form.Item<MachineModel.AddMachineParams>
label="停用时间"
name="deactivationTime"
>
<DatePicker showTime />
</Form.Item>
<Form.Item<MachineModel.AddMachineParams> <Form.Item<MachineModel.AddMachineParams>
label="所属用户ID" label="所属用户ID"
name="userId" name="userId"
rules={[{ required: true, message: 'Please input the role name!' }]} rules={[{ required: true, message: 'Please input the role name!' }]}
> >
<InputNumber style={{ width: 200 }} keyboard={false} min={0} changeOnWheel={false} controls={false} /> <InputNumber disabled={!access.isAdminOrSuperAdmin} style={{ width: 200 }} keyboard={false} min={0} changeOnWheel={false} controls={false} />
</Form.Item> </Form.Item>
<Form.Item<MachineModel.AddMachineParams> <Form.Item<MachineModel.AddMachineParams>
label="备注" label="备注"

View File

@ -4,13 +4,13 @@ import TemplateContainer from "@/pages/TemplateContainer";
import { DeactivationMachine, MachinePermanent, QueryMachineList } from "@/services/services/machine"; import { DeactivationMachine, MachinePermanent, QueryMachineList } from "@/services/services/machine";
import { FormatDate } from "@/util/time"; import { FormatDate } from "@/util/time";
import { useAccess, useModel } from "@umijs/max"; import { useAccess, useModel } from "@umijs/max";
import { Button, Form, Input, message, Modal, Select, SelectProps, Spin, Table, Tag } from "antd"; import { Button, Dropdown, Form, Input, Menu, message, Modal, Select, SelectProps, Spin, Table, Tag } from "antd";
import { ColumnsType, TablePaginationConfig } from "antd/es/table"; import { ColumnsType, TablePaginationConfig } from "antd/es/table";
import { FilterValue, SorterResult, TableCurrentDataSource } from "antd/es/table/interface"; import { FilterValue, SorterResult, TableCurrentDataSource } from "antd/es/table/interface";
import { delay, set } from "lodash"; import { delay, set } from "lodash";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import ModifyMachine from "../ModifyMachine"; import ModifyMachine from "../ModifyMachine";
import { PlusOutlined } from "@ant-design/icons"; import { DownOutlined, EditOutlined, MenuOutlined, MoreOutlined, PlusOutlined, SafetyCertificateOutlined, StopOutlined } from "@ant-design/icons";
import AddMachineForm from "../AddMachineForm"; import AddMachineForm from "../AddMachineForm";
const MachineManagement: React.FC = () => { const MachineManagement: React.FC = () => {
@ -35,6 +35,7 @@ const MachineManagement: React.FC = () => {
const [openAddModal, setOpenAddModal] = useState<boolean>(false); const [openAddModal, setOpenAddModal] = useState<boolean>(false);
const [spinning, setSpinning] = useState<boolean>(false); const [spinning, setSpinning] = useState<boolean>(false);
const [spinTip, setSpinTip] = useState<string>(''); const [spinTip, setSpinTip] = useState<string>('');
const [modal, modalHolder] = Modal.useModal();
useEffect(() => { useEffect(() => {
QueryMachineList(tableParams, form.getFieldsValue()) QueryMachineList(tableParams, form.getFieldsValue())
@ -57,12 +58,23 @@ const MachineManagement: React.FC = () => {
}, []); }, []);
async function SetMachinePermanent(id: string): Promise<void> { async function SetMachinePermanent(id: string): Promise<void> {
setSpinning(true);
setSpinTip('正在设置为永久。。。');
try { try {
// let cofirmRes = await modal.confirm({
title: '激活提示',
content: '即将同步软件控制权限信息至绑定机器码,会消耗一次授权次数,是否继续?',
okText: '确定',
cancelText: '取消',
});
if (!cofirmRes) {
messageApi.warning("取消操作");
return;
}
setSpinning(true);
setSpinTip('正在激活/同步。。。');
await MachinePermanent(id); await MachinePermanent(id);
messageApi.success('设置为永久成功'); messageApi.success('激活同步信息成功');
setSpinning(false); setSpinning(false);
// 重新加载数据 // 重新加载数据
await QueryMachineBasic(form.getFieldsValue(), tableParams.pagination); await QueryMachineBasic(form.getFieldsValue(), tableParams.pagination);
@ -166,16 +178,14 @@ const MachineManagement: React.FC = () => {
render: (text) => FormatDate(text), render: (text) => FormatDate(text),
width: '160px', width: '160px',
}, },
{
title: '使用状态',
dataIndex: 'useStatus',
render: (text, record) => <Tag color={record.useStatus === 1 ? 'green' : 'red'}>{record.useStatus === 1 ? '永久' : '试用'}</Tag>,
width: '100px',
},
{ {
title: '状态', title: '状态',
dataIndex: 'status', dataIndex: 'status',
render: (text, record) => <Tag color={record.status === 1 ? 'blue' : 'red'}>{record.status === 1 ? '激活' : '冻结'}</Tag>, render: (text, record) => (
<Tag color={record.status === 1 ? 'blue' : 'red'}>
{record.status === 1 ? '激活' : '冻结'}
</Tag>
),
width: '100px', width: '100px',
}, },
{ {
@ -190,17 +200,45 @@ const MachineManagement: React.FC = () => {
}, },
{ {
title: '操作', title: '操作',
width: '200px', width: 100,
render: (text, record) => ( render: (text, record) => {
<div> const menuItems = [
<Button hidden={!access.canEditMachine} style={{ marginRight: 5 }} type="primary" size="small" {
onClick={() => { setOpenModal(true); setFormRef(form); setId(record.id) }}></Button> key: "edit",
<Button hidden={!access.canUpgradeMachine} type="primary" style={{ marginRight: 5 }} size="small" icon: <EditOutlined />,
onClick={async () => await SetMachinePermanent(record.id)}></Button> hidden: !access.isAdminOrSuperAdmin,
<Button hidden={!access.canDisableMachine} type="primary" danger size="small" label: "编辑",
onClick={async () => await ChangeDeactivationMachine(record.id)}></Button> onClick: () => {
</div> setOpenModal(true);
), setFormRef(form);
setId(record.id);
},
},
{
key: "permanent",
icon: <SafetyCertificateOutlined />,
hidden: !access.canUpgradeMachine,
style: {
color: '#4caaff'
},
label: "激活",
onClick: async () => await SetMachinePermanent(record.id),
},
{
key: "disable",
icon: <StopOutlined />,
hidden: !access.canDisableMachine,
danger: true,
label: "停用",
onClick: async () => await ChangeDeactivationMachine(record.id),
},
].filter(Boolean);
return (
<Dropdown menu={{ items: menuItems }} trigger={["hover"]}>
<Button type="text" color="primary" variant="filled" icon={<MenuOutlined />} />
</Dropdown>
);
},
}, },
]; ];
@ -268,6 +306,7 @@ const MachineManagement: React.FC = () => {
<AddMachineForm setFormRef={setFormRef} /> <AddMachineForm setFormRef={setFormRef} />
</Modal> </Modal>
{messageHolder} {messageHolder}
{modalHolder}
</TemplateContainer> </TemplateContainer>
); );
}; };

View File

@ -108,7 +108,7 @@ const ModifyMachine: React.FC<ModifyMachineProps> = ({ id, setFormRef, open }) =
name="useStatus" name="useStatus"
rules={[{ required: true, message: 'Please input your username!' }]} rules={[{ required: true, message: 'Please input your username!' }]}
> >
<Select> <Select disabled>
<Select.Option value={0}></Select.Option> <Select.Option value={0}></Select.Option>
<Select.Option value={1}></Select.Option> <Select.Option value={1}></Select.Option>
</Select> </Select>
@ -120,7 +120,7 @@ const ModifyMachine: React.FC<ModifyMachineProps> = ({ id, setFormRef, open }) =
name="status" name="status"
rules={[{ required: true, message: 'Please input your username!' }]} rules={[{ required: true, message: 'Please input your username!' }]}
> >
<Select> <Select disabled>
<Select.Option value={0}></Select.Option> <Select.Option value={0}></Select.Option>
<Select.Option value={1}></Select.Option> <Select.Option value={1}></Select.Option>
</Select> </Select>
@ -142,7 +142,7 @@ const ModifyMachine: React.FC<ModifyMachineProps> = ({ id, setFormRef, open }) =
name="deactivationTime" name="deactivationTime"
> >
<DatePicker <DatePicker
showTime showTime disabled
onChange={(value, dateString) => { onChange={(value, dateString) => {
}} }}
onOk={onOk} onOk={onOk}

View File

@ -92,8 +92,12 @@ async function AddMachineData(params: MachineModel.AddMachineParams) {
let deactivationTimeString = params.deactivationTime ? params.deactivationTime.toISOString() : undefined; let deactivationTimeString = params.deactivationTime ? params.deactivationTime.toISOString() : undefined;
let data = { let data = {
...params, ...params,
deactivationTime: deactivationTimeString deactivationTime: deactivationTimeString,
useStatus: 0, // 这边设置默认就是试用,然后状态时激活,不需要用户再次设置
status: 1,
} }
debugger
console.log(data)
let res = await request<ApiResponse.SuccessItem<null>>(`/lms/Machine/AddMachine`, { let res = await request<ApiResponse.SuccessItem<null>>(`/lms/Machine/AddMachine`, {
method: 'POST', method: 'POST',
data: data data: data