feat(前端):user and device list

master
shaot 2025-08-13 16:30:40 +08:00
parent 3ed1ee5549
commit 46263f8d0d
5 changed files with 143 additions and 91 deletions

View File

@ -45,7 +45,7 @@ export default defineConfig({
npmClient: 'pnpm', npmClient: 'pnpm',
proxy: { proxy: {
'/api/nex/v1/': { '/api/nex/v1/': {
target: 'http://10.100.51.85:8112', target: 'http://10.100.51.85:8113',
// changeOrigin: true, // changeOrigin: true,
}, },
'/api/files': { '/api/files': {

View File

@ -7,9 +7,9 @@ import { deleteUserGroup, getGroupTree } from '@/services/userList';
import { import {
DeleteOutlined, DeleteOutlined,
DownOutlined, DownOutlined,
GoldOutlined,
PlusOutlined, PlusOutlined,
RedoOutlined, RedoOutlined,
GoldOutlined,
} from '@ant-design/icons'; } from '@ant-design/icons';
import { import {
Button, Button,
@ -387,19 +387,41 @@ const UserListPage: React.FC = () => {
}; };
const onDeleteGroup = async () => { const onDeleteGroup = async () => {
if (selectedOrg) { if (selectedOrg) {
try { const params: any = {
const params = { page_size: pageSize,
id: selectedOrg, page_num: currentPage,
}; };
const res = await deleteUserGroup(params); if (selectedOrg) {
const { code } = res || {}; params.device_group_id = selectedOrg;
if (code === ERROR_CODE) {
message.success('分组删除成功');
getGroupList();
}
} catch (error) {
message.error('分组删除失败');
} }
try {
const result: any = await getTerminalList(params);
const { data } = result || {};
const { total = 0 } = data || {};
if (total > 0) {
message.info("该分组下有终端,请先删除该分组下的所有终端");
} else {
onDeleteGroupSave();
}
} catch (err) {
console.log(err);
}
}
};
const onDeleteGroupSave = async () => {
try {
const params = {
id: selectedOrg,
};
const res = await deleteUserGroup(params);
const { code } = res || {};
if (code === ERROR_CODE) {
message.success('分组删除成功');
getGroupList();
}
} catch (error) {
message.error('分组删除失败');
} }
}; };
@ -486,7 +508,7 @@ const UserListPage: React.FC = () => {
showIcon={true} showIcon={true}
selectedKeys={selectedOrg ? [selectedOrg] : []} selectedKeys={selectedOrg ? [selectedOrg] : []}
// switcherIcon={<TeamOutlined style={{ fontSize: '15px' }}/>} // switcherIcon={<TeamOutlined style={{ fontSize: '15px' }}/>}
icon={<GoldOutlined style={{ fontSize: '15px' }} />} icon={<GoldOutlined style={{ fontSize: '15px' }} />}
/> />
</Spin> </Spin>
</div> </div>

View File

@ -61,30 +61,27 @@ const BindUserModal: React.FC<UserEditModalProps> = ({
const handleOk = async () => { const handleOk = async () => {
try { try {
const values = await form.validateFields(); const values = await form.validateFields();
const { image_list } = values || {}; const { image_list = [] } = values || {};
console.log('image_list=====', image_list); console.log('image_list=====', image_list);
if (image_list && image_list.length > 0) { const list: any[] = [];
const list: any[] = []; image_list.forEach((item: any) => {
image_list.forEach((item: any) => { const obj: any = {
const obj: any = { device_id: device_id,
device_id: device_id, image_id: item.id,
image_id: item.id,
};
const newData = dataSource.filter(
(record) => record.image_id === item.id,
);
if (newData && newData.length === 1) {
obj.id = newData[0].id;
}
list.push({ ...obj });
});
const payload: any = {
data: list,
}; };
onBind(payload); const newData = dataSource.filter(
} else { (record) => record.image_id === item.id,
message.info('请先选择绑定的镜像'); );
} if (newData && newData.length === 1) {
obj.id = newData[0].id;
}
list.push({ ...obj });
});
const payload: any = {
data: list,
device_id:device_id,
};
onBind(payload);
} catch (error) { } catch (error) {
message.error('请检查表单字段'); message.error('请检查表单字段');
} }
@ -131,7 +128,7 @@ const BindUserModal: React.FC<UserEditModalProps> = ({
<Form.Item <Form.Item
name="image_list" name="image_list"
label="选择镜像" label="选择镜像"
rules={[{ required: true, message: '请输入终端型号' }]} rules={[{ required: false, message: '请输入终端型号' }]}
> >
<SelectedTable /> <SelectedTable />
</Form.Item> </Form.Item>

View File

@ -112,46 +112,45 @@ const BindUserModal: React.FC<UserEditModalProps> = ({
const values = await form.validateFields(); const values = await form.validateFields();
const { user_list = [] } = values || {}; const { user_list = [] } = values || {};
const list: any[] = []; const list: any[] = [];
if (user_list && user_list.length > 0) { user_list.forEach((item: any) => {
user_list.forEach((item: any) => { const { type, id } = item || {};
const { type, id } = item || {}; if (type === 1) {
if (type === 1) { // 用户
// 用户 const obj: any = {
const obj: any = { device_id,
device_id, device_group_id,
device_group_id, type: type,
type: type, user_id: id,
user_id: id, };
}; const newData = userDataSource.filter(
const newData = userDataSource.filter( (record) => record.user_id === item.id && record.type === 1,
(record) => record.user_id === item.id && record.type === 1, );
); if (newData && newData.length === 1) {
if (newData && newData.length === 1) { obj.id = newData[0].id;
obj.id = newData[0].id;
}
list.push(obj);
} else {
//用户分组
const obj: any = {
device_id,
device_group_id,
type: type,
user_group_id: id,
};
const newData = userDataSource.filter(
(record) => record.user_group_id === item.id && record.type === 2,
);
if (newData && newData.length === 1) {
obj.id = newData[0].id;
}
list.push(obj);
} }
}); list.push(obj);
const payload = { } else {
data: list, //用户分组
}; const obj: any = {
onBind(payload); device_id,
} device_group_id,
type: type,
user_group_id: id,
};
const newData = userDataSource.filter(
(record) => record.user_group_id === item.id && record.type === 2,
);
if (newData && newData.length === 1) {
obj.id = newData[0].id;
}
list.push(obj);
}
});
const payload = {
data: list,
device_id:device_id,
};
onBind(payload);
} catch (error) { } catch (error) {
message.error('请检查表单字段'); message.error('请检查表单字段');
} }
@ -198,7 +197,7 @@ const BindUserModal: React.FC<UserEditModalProps> = ({
<Form.Item <Form.Item
name="user_list" name="user_list"
label="选择用户" label="选择用户"
rules={[{ required: true, message: '请选择绑定用户' }]} rules={[{ required: false, message: '请选择绑定用户' }]}
> >
<SelectedTable orgTreeData={orgTreeData} /> <SelectedTable orgTreeData={orgTreeData} />
</Form.Item> </Form.Item>

View File

@ -394,20 +394,54 @@ const UserListPage: React.FC = () => {
const onDeleteGroup = async () => { const onDeleteGroup = async () => {
if (selectedOrg) { if (selectedOrg) {
try { // try {
const params = { // const params = {
id: selectedOrg, // id: selectedOrg,
}; // };
const res = await deleteUserGroup(params); // const res = await deleteUserGroup(params);
const { code } = res || {}; // const { code } = res || {};
if (code === ERROR_CODE) { // if (code === ERROR_CODE) {
message.success('分组删除成功'); // message.success('分组删除成功');
setSelectedOrg(null); // setSelectedOrg(null);
getUserGroupList(); // getUserGroupList();
} // }
} catch (error) { // } catch (error) {
message.error('分组删除失败'); // message.error('分组删除失败');
// }
const params: any = {
page_size: pageSize,
page_num: currentPage,
};
if (selectedOrg) {
params.user_group_id = selectedOrg;
} }
try {
const result = await getUserList(params);
const { data = {} } = result || {};
const { total = 0 } = data || {};
if (total > 0) {
message.info('当前分组下有用户,请先删除用户', 5);
} else {
ondeleteCroupSave();
}
} catch (err) {}
}
};
const ondeleteCroupSave = async () => {
try {
const params = {
id: selectedOrg,
};
const res = await deleteUserGroup(params);
const { code } = res || {};
if (code === ERROR_CODE) {
message.success('分组删除成功');
setSelectedOrg(null);
getUserGroupList();
}
} catch (error) {
message.error('分组删除失败');
} }
}; };