From 7e9be02d617041bc746ac87e0543e84acd6c89f6 Mon Sep 17 00:00:00 2001 From: shaot Date: Tue, 12 Aug 2025 15:07:41 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E5=89=8D=E7=AB=AF):=E7=BB=88=E7=AB=AF?= =?UTF-8?q?=E7=BB=91=E5=AE=9A=E9=95=9C=E5=83=8F=E3=80=81=E7=94=A8=E6=88=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../terminal/mod/ImageSelectedTable/index.tsx | 85 +++++++++++------- .../terminal/mod/ImageSelectedTable/table.tsx | 10 ++- .../pages/terminal/mod/bindImage/index.tsx | 61 ++++++++----- .../src/pages/terminal/mod/bindUser/index.tsx | 81 +++++++++++------ .../pages/terminal/mod/eidtDevice/index.tsx | 2 +- .../terminal/mod/selectedTable/index.tsx | 89 ++++++++++--------- .../terminal/mod/selectedTable/table.tsx | 1 - 7 files changed, 198 insertions(+), 131 deletions(-) diff --git a/web-fe/src/pages/terminal/mod/ImageSelectedTable/index.tsx b/web-fe/src/pages/terminal/mod/ImageSelectedTable/index.tsx index fbbc90b..4b71bf5 100644 --- a/web-fe/src/pages/terminal/mod/ImageSelectedTable/index.tsx +++ b/web-fe/src/pages/terminal/mod/ImageSelectedTable/index.tsx @@ -23,7 +23,7 @@ const SelectedTable: React.FC = (props) => { const [open, setOpen] = useState(false); const [tableData, setTableData] = useState([]); //镜像选择 - const [selectedRowKeys, setSelectedRowKeys] = useState<[]>([]); + const [selectedRowKeys, setSelectedRowKeys] = useState([]); const [selectedRows, setSelectedRows] = useState([]); // 已绑定用户列表选择 @@ -37,6 +37,7 @@ const SelectedTable: React.FC = (props) => { list.push(item); idList.push(item.id); }); + setTableData(formValue); setSelectedRowKeys(idList); setSelectedRows(list); } @@ -53,7 +54,7 @@ const SelectedTable: React.FC = (props) => { // 镜像 (selectedRows || []).forEach((item) => { list.push({ - record_id: item.id, + id: item.id, image_name: item.image_name, }); }); @@ -74,17 +75,27 @@ const SelectedTable: React.FC = (props) => { const handleDelete = (record?: any) => { if (record) { // 单个删除 - const { record_id } = record || {}; - const newData = tableData.filter((item) => item.record_id !== record_id); + const { id } = record || {}; + const newData = tableData.filter((item) => item.id !== id); + const ids: any[] = []; + newData.map((item) => ids.push(item.id)); setTableData(newData); + setSelectedRowKeys(ids); + setSelectedRows(newData); + onBindImageChange(newData); + setBindTableKeys([]); } else { // 批量删除 const newData = tableData.filter( - (item) => !bindTableKeys.includes(item.record_id), + (item) => !bindTableKeys.includes(item.id), ); + const ids: any[] = []; + newData.map((item) => ids.push(item.id)); setTableData(newData); - setSelectedRowKeys([]); - setSelectedRows([]); + setBindTableKeys([]); + setSelectedRowKeys(ids); + setSelectedRows(newData); + onBindImageChange(newData); } }; @@ -136,10 +147,20 @@ const SelectedTable: React.FC = (props) => { title: '操作', key: 'action', width: 150, + align: 'center', render: (_, record) => ( - + handleDelete(record)} + okText="删除" + cancelText="取消" + > + + ), }, ]; @@ -154,37 +175,37 @@ const SelectedTable: React.FC = (props) => { title="" trigger="click" open={open} - // onOpenChange={setOpen} + onOpenChange={setOpen} placement={placement} > -
- - handleDelete()} - disabled={bindTableKeys.length === 0} - okText="删除" - cancelText="取消" - > - - -
+ + + handleDelete()} + disabled={bindTableKeys.length === 0} + okText="删除" + cancelText="取消" + > + + = ({ { title: '镜像名称', dataIndex: 'image_name', - render: (text: any) => {text || ''}, + render: (text) => { + return {text || '--'}; + }, }, ]; @@ -92,7 +94,7 @@ const TablePage: React.FC = ({ onSearch={handleSearch} enterButton allowClear - style={{ width: '200px', marginLeft: '10px' }} + style={{ width: '300px', marginLeft: '10px' }} /> @@ -102,7 +104,7 @@ const TablePage: React.FC = ({ rowKey="id" loading={loading} rowSelection={{ - selectedRowKeys, + selectedRowKeys:selectedRowKeys, preserveSelectedRowKeys: true, onChange: onUserTableSelect, }} diff --git a/web-fe/src/pages/terminal/mod/bindImage/index.tsx b/web-fe/src/pages/terminal/mod/bindImage/index.tsx index bdd7da9..efcad8b 100644 --- a/web-fe/src/pages/terminal/mod/bindImage/index.tsx +++ b/web-fe/src/pages/terminal/mod/bindImage/index.tsx @@ -2,16 +2,15 @@ import { ERROR_CODE } from '@/constants/constants'; import { getBindImageAdd, getBindImageList } from '@/services/terminal'; import { Button, Form, message, Modal } from 'antd'; -import React, { useEffect } from 'react'; +import React, { useEffect, useState } from 'react'; import SelectedTable from '../ImageSelectedTable/index'; import styles from './index.less'; interface UserEditModalProps { onCancel: () => void; - onOk: (values: any) => void; + onOk: (values?: any) => void; confirmLoading?: boolean; dataDetial?: Termial.ModalBaseNode; - selectedOrg?: number; } const BindUserModal: React.FC = ({ @@ -20,9 +19,10 @@ const BindUserModal: React.FC = ({ confirmLoading = false, dataDetial, }) => { - const { recordData, visible, selectedOrg } = dataDetial || {}; + const { recordData, visible } = dataDetial || {}; const { device_id } = recordData || {}; const [form] = Form.useForm(); + const [dataSource, setDataSource] = useState([]); useEffect(() => { const params = { device_id: device_id }; @@ -30,44 +30,61 @@ const BindUserModal: React.FC = ({ const { code, data = [] } = res || {}; if (code === ERROR_CODE) { if (data && data.length) { - const initialValues = { image_list: data }; + const imageList: any[] = []; + data.forEach((item: any) => { + imageList.push({ + id: item.image_id, + image_name: item.image_name, + // current_id: item.id, + }); + }); + setDataSource(data); + const initialValues = { image_list: imageList }; form.setFieldsValue(initialValues); } } }); - }, [visible, form, recordData, selectedOrg]); + }, [visible, form, recordData]); + + const onBind = (payload: any) => { + getBindImageAdd(payload).then((res: any) => { + const { code } = res || {}; + if (code === ERROR_CODE) { + message.success('绑定成功'); + if (onOk) onOk(); + } else { + message.error('绑定失败'); + } + }); + }; const handleOk = async () => { try { const values = await form.validateFields(); const { image_list } = values || {}; + console.log('image_list=====', image_list); if (image_list && image_list.length > 0) { const list: any[] = []; image_list.forEach((item: any) => { - list.push({ - id: item.id, + const obj: any = { device_id: device_id, - image_id: item.record_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, }; - - getBindImageAdd(payload).then((res: any) => { - const { code } = res || {}; - if (code === ERROR_CODE) { - message.success('绑定成功'); - onOk(); - } else { - message.error('绑定失败'); - } - }); + onBind(payload); } else { message.info('请先选择绑定的镜像'); } - console.log('values=====', values); - // onOk(values); } catch (error) { message.error('请检查表单字段'); } diff --git a/web-fe/src/pages/terminal/mod/bindUser/index.tsx b/web-fe/src/pages/terminal/mod/bindUser/index.tsx index ecd6166..5ced28e 100644 --- a/web-fe/src/pages/terminal/mod/bindUser/index.tsx +++ b/web-fe/src/pages/terminal/mod/bindUser/index.tsx @@ -24,8 +24,10 @@ const BindUserModal: React.FC = ({ dataDetial, }) => { const { recordData, visible } = dataDetial || {}; - const { device_id,device_group_id } = recordData || {}; + const { device_id, device_group_id } = recordData || {}; const [orgTreeData, setOrgTreeData] = useState([]); + const [userDataSource, setUserDataSource] = useState([]); + // const [groupDataSource, setGroupDataSource] = useState([]); const [form] = Form.useForm(); const getGroupList = async () => { @@ -57,7 +59,6 @@ const BindUserModal: React.FC = ({ if (!device_id) return; const payload = { device_id: device_id }; getBindUserList(payload).then((res: any) => { - console.log('res========', res); const { code, data = [] } = res || {}; if (code === ERROR_CODE) { if (data && data.length > 0) { @@ -65,23 +66,47 @@ const BindUserModal: React.FC = ({ data.map((item: any) => { const { type, user_id, user_name, user_group_id, user_group_name } = item || {}; + const obj: any = { ...item }; + delete obj.id; if (type === 1) { - list.push({ record_id: user_id, name: user_name, ...item }); + list.push({ + table_id: `user_${user_id}`, + id: user_id, + name: user_name, + user_name: user_name, + type: type, + }); } else { list.push({ - record_id: user_group_id, + table_id: `group_${user_group_id}`, + id: user_group_id, name: user_group_name, - ...item, + type: type, }); } }); - const initialValues = { user_list: list, status: 1 }; + setUserDataSource(data); + const initialValues = { user_list: list }; form.setFieldsValue(initialValues); } } }); }, [visible, form, recordData]); + const onBind = (payload: any) => { + bindUserAdd(payload) + .then((res: any) => { + const { code } = res || {}; + if (code === ERROR_CODE) { + message.success('绑定成功'); + onOk(); + } else { + message.error('绑定失败'); + } + }) + .catch(() => {}); + }; + const handleOk = async () => { try { const values = await form.validateFields(); @@ -89,41 +114,43 @@ const BindUserModal: React.FC = ({ const list: any[] = []; if (user_list && user_list.length > 0) { user_list.forEach((item: any) => { - const { record_id, type, id } = item || {}; + const { type, id } = item || {}; if (type === 1) { // 用户 - list.push({ - user_id: record_id, - id: id, + const obj: any = { device_id, device_group_id, type: type, - }); + user_id: id, + }; + const newData = userDataSource.filter( + (record) => record.user_id === item.id && record.type === 1, + ); + if (newData && newData.length === 1) { + obj.id = newData[0].id; + } + list.push(obj); } else { //用户分组 - list.push({ - user_group_id: record_id, - id: id, - device_id: device_id, + 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); } }); const payload = { data: list, }; - bindUserAdd(payload) - .then((res: any) => { - const { code } = res || {}; - if (code === ERROR_CODE) { - message.success('绑定成功'); - onOk(); - } else { - message.error('绑定失败'); - } - }) - .catch(() => {}); + onBind(payload); } } catch (error) { message.error('请检查表单字段'); diff --git a/web-fe/src/pages/terminal/mod/eidtDevice/index.tsx b/web-fe/src/pages/terminal/mod/eidtDevice/index.tsx index b6a8915..5834cf9 100644 --- a/web-fe/src/pages/terminal/mod/eidtDevice/index.tsx +++ b/web-fe/src/pages/terminal/mod/eidtDevice/index.tsx @@ -134,7 +134,7 @@ const UserEditModal: React.FC = ({