From 0699196eb84d5659826ea1c5734644eaee792402 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=80=A1?= Date: Sat, 26 Jul 2025 11:29:50 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BE=9B=E5=BA=94?= =?UTF-8?q?=E5=95=86=E8=B4=A6=E5=8F=B7=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=EF=BC=8C=E5=8C=85=E6=8B=AC=E4=BE=9B=E5=BA=94=E5=95=86=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E5=88=97=E8=A1=A8=E3=80=81=E7=94=A8=E6=88=B7=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E6=9B=B4=E6=96=B0=E5=92=8C=E5=AF=86=E7=A0=81=E9=87=8D?= =?UTF-8?q?=E7=BD=AE=E5=8A=9F=E8=83=BD=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/router.config.ts | 6 + .../SupplierUser/components/UpdateForm.tsx | 99 ++++++++++ src/pages/System/SupplierUser/data.d.ts | 30 +++ src/pages/System/SupplierUser/index.tsx | 178 ++++++++++++++++++ src/pages/System/SupplierUser/service.ts | 23 +++ src/pages/System/User/index.tsx | 139 +++++++++++++- src/pages/System/User/service.ts | 57 ++---- 7 files changed, 480 insertions(+), 52 deletions(-) create mode 100644 src/pages/System/SupplierUser/components/UpdateForm.tsx create mode 100644 src/pages/System/SupplierUser/data.d.ts create mode 100644 src/pages/System/SupplierUser/index.tsx create mode 100644 src/pages/System/SupplierUser/service.ts diff --git a/config/router.config.ts b/config/router.config.ts index d66c0a2..05d1f16 100644 --- a/config/router.config.ts +++ b/config/router.config.ts @@ -140,6 +140,12 @@ export default [ path: '/biddingAnnouncement/BiddingAnnoStructureForm', component: './Bid/BiddingAnnouncement/structure/BiddingAnnoStructureForm', }, + //供应商账号管理 + { + name: '供应商', + path: '/SupplierUser', + component: './System/SupplierUser', + }, //==============================================================引入的业务路由 ...approvalForm,//审批单 ...juryRoom,//评标室内所有路由 diff --git a/src/pages/System/SupplierUser/components/UpdateForm.tsx b/src/pages/System/SupplierUser/components/UpdateForm.tsx new file mode 100644 index 0000000..ef7ab09 --- /dev/null +++ b/src/pages/System/SupplierUser/components/UpdateForm.tsx @@ -0,0 +1,99 @@ +import React from 'react'; +import { Modal, Form, Input, Select } from 'antd'; +import type { SupplierUserListItem } from '../data.d'; + +export interface UpdateFormProps { + onCancel: () => void; + onSubmit: (values: SupplierUserListItem) => void; + updateModalVisible: boolean; + values: Partial; +} + +const FormItem = Form.Item; +const { Option } = Select; + +const UpdateForm: React.FC = (props) => { + const [form] = Form.useForm(); + const { updateModalVisible, onCancel, onSubmit, values } = props; + + const handleSubmit = async () => { + const fieldsValue = await form.validateFields(); + onSubmit({ ...values, ...fieldsValue }); + }; + + return ( + +
+ + + + + + + + + + + + + + + + + + +
+
+ ); +}; + +export default UpdateForm; \ No newline at end of file diff --git a/src/pages/System/SupplierUser/data.d.ts b/src/pages/System/SupplierUser/data.d.ts new file mode 100644 index 0000000..9f17c90 --- /dev/null +++ b/src/pages/System/SupplierUser/data.d.ts @@ -0,0 +1,30 @@ +export interface SupplierUserListItem { + userId: string; + username: string; + name: string; + mobile: string; + supplierName: string; + creditCode: string; + status: number; + email?: string; + remark?: string; +} + +export interface TableListPagination { + total: number; + pageSize: number; + current: number; +} + +export interface TableListData { + list: SupplierUserListItem[]; + pagination: Partial; +} + +export interface TableListParams { + pageSize?: number; + current?: number; + keyword?: string; + status?: number; + sorter?: string; +} \ No newline at end of file diff --git a/src/pages/System/SupplierUser/index.tsx b/src/pages/System/SupplierUser/index.tsx new file mode 100644 index 0000000..638cae0 --- /dev/null +++ b/src/pages/System/SupplierUser/index.tsx @@ -0,0 +1,178 @@ +import { PlusOutlined } from '@ant-design/icons'; +import { Button, message, Popconfirm } from 'antd'; +import React, { useState, useRef, useEffect } from 'react'; +import { PageContainer } from '@ant-design/pro-layout'; +import type { ProColumns, ActionType } from '@ant-design/pro-table'; +import ProTable from '@ant-design/pro-table'; +import type { SupplierUserListItem } from './data.d'; +import { getSupplierUserList, updateSupplierUser, resetPassword } from './service'; +import UpdateForm from './components/UpdateForm'; + +const SupplierUser: React.FC = () => { + const actionRef = useRef(); + const [updateModalVisible, handleUpdateModalVisible] = useState(false); + const [formValues, setFormValues] = useState({}); + + // 从URL查询参数获取并保存必要的参数 + useEffect(() => { + const query = new URLSearchParams(window.location.search); + const token = query.get('token'); + const roleCode = query.get('roleCode'); + const mall3Check = query.get('mall3Check'); + + // 如果参数存在,保存到sessionStorage中 + if (token) { + sessionStorage.setItem('Authorization', token); + } + + if (roleCode) { + // 保存roleCode到sessionStorage + try { + const currentRoleData = sessionStorage.getItem('roleData'); + if (currentRoleData) { + const roleDataObj = JSON.parse(currentRoleData); + roleDataObj.roleCode = roleCode; + sessionStorage.setItem('roleData', JSON.stringify(roleDataObj)); + } else { + // 如果没有roleData,创建一个基本对象 + sessionStorage.setItem('roleData', JSON.stringify({ roleCode })); + } + } catch (e) { + // 如果解析失败,直接创建新对象 + sessionStorage.setItem('roleData', JSON.stringify({ roleCode })); + } + } + + if (mall3Check) { + sessionStorage.setItem('Mall3Check', mall3Check); + } + }, []); + + const handleUpdate = async (fields: SupplierUserListItem) => { + const hide = message.loading('正在更新'); + try { + await updateSupplierUser(fields); + hide(); + message.success('更新成功'); + return true; + } catch (error) { + hide(); + message.error('更新失败请重试!'); + return false; + } + }; + + const handleResetPassword = async (username: string) => { + const hide = message.loading('正在重置密码'); + try { + await resetPassword(username); + hide(); + message.success('密码重置成功,新密码已通过邮件发送,请注意查收'); + return true; + } catch (error) { + hide(); + message.error('密码重置失败,请重试'); + return false; + } + }; + + const columns: ProColumns[] = [ + { + title: '用户名', + dataIndex: 'username', + sorter: true, + }, + { + title: '姓名', + dataIndex: 'name', + sorter: true, + }, + { + title: '供应商名称', + dataIndex: 'supplierName', + sorter: true, + }, + { + title: '统一信用代码', + dataIndex: 'creditCode', + }, + { + title: '手机号', + dataIndex: 'mobile', + }, + { + title: '状态', + dataIndex: 'status', + valueEnum: { + 0: { text: '无效', status: 'Default' }, + 1: { text: '有效', status: 'Processing' }, + }, + }, + { + title: '操作', + dataIndex: 'option', + valueType: 'option', + render: (_, record) => [ + { + handleUpdateModalVisible(true); + setFormValues(record); + }} + > + 修改 + , + handleResetPassword(record.username)} + key="reset" + > + 重置密码 + , + ], + }, + ]; + + return ( + + + headerTitle="供应商用户列表" + actionRef={actionRef} + rowKey="userId" + search={{ + labelWidth: 120, + }} + request={(params) => + getSupplierUserList(params).then((res) => { + return { + data: res.data.records, + success: true, + total: res.data.total, + }; + }) + } + columns={columns} + /> + { + const success = await handleUpdate(value); + if (success) { + handleUpdateModalVisible(false); + setFormValues({}); + if (actionRef.current) { + actionRef.current.reload(); + } + } + }} + onCancel={() => { + handleUpdateModalVisible(false); + setFormValues({}); + }} + updateModalVisible={updateModalVisible} + values={formValues} + /> + + ); +}; + +export default SupplierUser; \ No newline at end of file diff --git a/src/pages/System/SupplierUser/service.ts b/src/pages/System/SupplierUser/service.ts new file mode 100644 index 0000000..198f4f7 --- /dev/null +++ b/src/pages/System/SupplierUser/service.ts @@ -0,0 +1,23 @@ +import request from '@/utils/request'; +import type { SupplierUserListItem, TableListParams } from './data.d'; + +export async function getSupplierUserList(params: TableListParams) { + return request('/sys/supplier/user/list', { + method: 'GET', + params, + }); +} + +export async function updateSupplierUser(params: SupplierUserListItem) { + return request('/sys/supplier/user/update', { + method: 'POST', + data: params, + }); +} + +export async function resetPassword(username: string) { + return request('/sys/supplier/user/reset-password', { + method: 'POST', + data: { username }, + }); +} \ No newline at end of file diff --git a/src/pages/System/User/index.tsx b/src/pages/System/User/index.tsx index 5edbf69..dcab4d7 100644 --- a/src/pages/System/User/index.tsx +++ b/src/pages/System/User/index.tsx @@ -1,10 +1,12 @@ import React, { useState, useRef, useMemo, useEffect } from 'react'; -import { message, Modal, Input, Form, PageHeader, Button, Spin, Tree, Checkbox, Row, Col } from 'antd'; +import { message, Modal, Input, Form, PageHeader, Button, Spin, Tree, Checkbox, Row, Col, Upload } from 'antd'; import ProTable, { ProColumns, ActionType } from '@ant-design/pro-table'; import tableProps from '@/utils/tableProps'; import { getPage, getDataById, allocationIF, assignsRoles, updateRole } from './service'; import { fetchAllDepartment } from '../Department/service'; import { getDicData } from '@/utils/session'; +import { fetchIamUsers, syncIamUser } from './service'; +import { UploadOutlined, DownloadOutlined } from '@ant-design/icons'; const { Search } = Input; const entrust: React.FC<{}> = () => { const [roleModalForm] = Form.useForm(); @@ -21,6 +23,12 @@ const entrust: React.FC<{}> = () => { labelCol: { span: 6 }, wrapperCol: { span: 13 }, }; + const [syncModalOpen, setSyncModalOpen] = useState(false); + const [iamUsers, setIamUsers] = useState([]); + const [iamLoading, setIamLoading] = useState(false); + const [iamTotal, setIamTotal] = useState(0); + const [iamPage, setIamPage] = useState({ pageNo: 1, pageSize: 10 }); + const [iamSearch, setIamSearch] = useState(''); useEffect(() => { getDepartmentList(); }, []); @@ -168,7 +176,7 @@ const entrust: React.FC<{}> = () => { for (let i = 0; i < tree.length; i++) { const node = tree[i]; if (node.children) { - if (node.children.some((item) => item.key === key)) { + if (node.children.some((item: { key: any }) => item.key === key)) { parentKey = node.key; } else if (getParentKey(key, node.children)) { parentKey = getParentKey(key, node.children); @@ -191,7 +199,7 @@ const entrust: React.FC<{}> = () => { const loop = (data: any): any[] => { console.log('data', data); let res: any[] = []; - data.map((item: any, i: any) => { + data.map((item: { title: string; key: any; children?: any[] }, i: number) => { const strTitle = item.title as string; const index = strTitle.indexOf(searchValue); const beforeStr = strTitle.substring(0, index); @@ -223,6 +231,48 @@ const entrust: React.FC<{}> = () => { return allData; } }, [searchValue, allData]); + // IAM用户加载 + const loadIamUsers = async (pageNo: number, pageSize: number, search: string) => { + setIamLoading(true); + try { + const res = await fetchIamUsers({ + pageNo, + pageSize, + search, + }); + setIamUsers(res.data || []); + setIamTotal(res.total || 0); + } finally { + setIamLoading(false); + } + }; + + useEffect(() => { + if (syncModalOpen) { + loadIamUsers(iamPage.pageNo, iamPage.pageSize, iamSearch); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [syncModalOpen, iamPage.pageNo, iamPage.pageSize, iamSearch]); + + const handleSyncUser = async (user: any) => { + Modal.confirm({ + title: '确认同步该用户信息到主表?', + content: `姓名:${user.name},工号:${user.employeeNo}`, + okText: '确认', + cancelText: '取消', + onOk: async () => { + try { + await syncIamUser(user); + message.success('同步成功'); + loadIamUsers(iamPage.pageNo, iamPage.pageSize, iamSearch); + // 同步后刷新主表 + actionRef.current?.reload(); + } catch (e) { + message.error('同步失败'); + } + }, + }); + }; return (
@@ -266,11 +316,36 @@ const entrust: React.FC<{}> = () => { }) } toolBarRender={() => [ - // , - ] - } + , + , + { + if (info.file.status === 'done') { + message.success('导入成功'); + //导入后刷新主表 + actionRef.current?.reload(); + } else if (info.file.status === 'error') { + message.error('导入失败'); + } + }} + > + + + ]} pagination={{ ...tableProps.pagination, onChange: (page, pageSize) => pageDataSet({ pageNo: page, pageSize: pageSize }), @@ -279,10 +354,56 @@ const entrust: React.FC<{}> = () => { onReset={() => { pageDataSet({ pageNo: 1, pageSize: 10 }); setOrgId(''); }} /> {setRoleModal} + {/* IAM用户同步Modal */} + setSyncModalOpen(false)} + footer={null} + width={900} + > + { setIamSearch(v); setIamPage({ ...iamPage, pageNo: 1 }); }} + style={{ marginBottom: 16, width: 300 }} + allowClear + /> + ( + + ), + }, + ]} + dataSource={iamUsers} + loading={iamLoading} + pagination={{ + current: iamPage.pageNo, + pageSize: iamPage.pageSize, + total: iamTotal, + onChange: (page, pageSize) => setIamPage({ pageNo: page, pageSize }), + }} + search={false} + options={false} + size="small" + /> +
- {/* 查看 */}
) }; diff --git a/src/pages/System/User/service.ts b/src/pages/System/User/service.ts index 1722a17..318c3d4 100644 --- a/src/pages/System/User/service.ts +++ b/src/pages/System/User/service.ts @@ -43,47 +43,18 @@ export async function assignsRoles(params: any) { data: params, }); } -// import { TreeDataNode } from 'antd'; +// IAM用户列表查询 +export async function fetchIamUsers(params: any) { + return request('/api/sys-manager-ebtp-project/v1/sysuser/iam/users', { + method: 'post', + data: params, + }); +} -// export function userList(options?: { [key: string]: any }): Promise<{ data: any }> { -// return request('/api/system/userList', { -// method: 'GET', -// ...(options || {}), -// }); -// } - -// export function treeData(options?: { [key: string]: any }): Promise<{ data: TreeDataNode[] }> { -// return request('/api/system/treeData', { -// method: 'GET', -// ...(options || {}), -// }); -// } - -// export function fetchUserList(options?: any) { -// return request('/api/sysuser/getPage', { -// method: 'POST', -// data: options, -// }); -// } -// //获取用户数据 -// export function getUser(userId?: any) { -// return request(`/api/sysuser/${userId}`, { -// method: 'get', -// }); -// } - -// export function assignsRoles(options?: { [key: string]: any }): Promise { -// return request('/api/sysuser/assignsRoles', { -// method: 'post', -// ...(options || {}), -// }); -// } - -// //查询用户详情 -// export function getOneUserAll(options?: { [key: string]: any }): Promise<{ data: TreeDataNode[] }> { -// return request(`/api/sysuser/getOneUserAll/${options?.id}`, { -// method: 'GET', -// params: options, -// ...(options || {}), -// }); -// } +// 同步IAM用户到主表 +export async function syncIamUser(user: any) { + return request('/api/sys-manager-ebtp-project/v1/sysuser/sync', { + method: 'post', + data: user, + }); +} From 5594a0adc3ff0965b9357f7e5054e8b4de0cbb1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=80=A1?= Date: Sat, 26 Jul 2025 22:14:55 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E6=9B=B4=E6=96=B0package.json=EF=BC=8C?= =?UTF-8?q?=E6=96=B0=E5=A2=9E@umijs/yorkie=E4=BE=9D=E8=B5=96=EF=BC=8C?= =?UTF-8?q?=E8=A7=A3=E5=86=B3=E6=8F=90=E4=BA=A4=E6=97=B6=E6=8A=A5=E9=94=99?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 9567b17..3000c2e 100644 --- a/package.json +++ b/package.json @@ -67,6 +67,7 @@ "@ant-design/pro-table": "2.34.0", "@material-ui/core": "4.11.3", "@types/react-cookies": "0.1.0", + "@umijs/max": "^4.0.0", "@umijs/route-utils": "1.0.37", "antd": "latest-4", "array-move": "3.0.1", @@ -90,7 +91,6 @@ "react-signature-canvas": "^1.0.3", "react-sortable-hoc": "^1.11.0", "sm-crypto": "0.2.5", - "@umijs/max": "^4.0.0", "umi-request": "^1.3.5", "use-merge-value": "1.0.2", "wangeditor": "4.7.5" @@ -109,6 +109,7 @@ "@types/react-helmet": "^6.1.0", "@types/react-signature-canvas": "^1.0.2", "@umijs/lint": "^4.0.0", + "@umijs/yorkie": "^2.0.5", "carlo": "^0.9.46", "chalk": "^4.0.0", "cross-env": "^7.0.3", From 85de5dcc2ff5d741ff2e7fa68635e520c5080b01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=80=A1?= Date: Sat, 26 Jul 2025 22:19:34 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E5=9C=A8=E8=AF=B7=E6=B1=82=E6=8B=A6?= =?UTF-8?q?=E6=88=AA=E5=99=A8=E4=B8=AD=E6=96=B0=E5=A2=9E=E5=AF=B9=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E6=8E=A5=E5=8F=A3=E7=9A=84=E6=94=AF=E6=8C=81=EF=BC=8C?= =?UTF-8?q?=E4=BB=A5=E4=BE=BF=E5=A4=84=E7=90=86=E8=B4=A6=E6=88=B7=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E8=AF=B7=E6=B1=82=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/request.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/utils/request.ts b/src/utils/request.ts index 99b1e59..e628a8f 100644 --- a/src/utils/request.ts +++ b/src/utils/request.ts @@ -77,6 +77,7 @@ request.interceptors.request.use(async (url, options) => { url.startsWith('/api/api/mall-expe') || url == '/api/sys-manager-ebtp-project/v1/userpassword/validatePassword' || url.startsWith('/api/notification') || + url.startsWith('/api/sys-manager-ebtp-project/v1/login/accountLogin') || url == '/api/sys-manager-ebtp-project/outer/v1/ebtp/face/faceCompare' || url == '/api/sys-manager-ebtp-project/outer/v1/ebtp/face/rgbArray2Base64' || url == '/api/notification/v1/notification/savaSmsByPhoneNew' From d6c3afdb96cc31918d16b8f737def95aaa67e429 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=80=A1?= Date: Wed, 30 Jul 2025 15:08:34 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/System/User/index.tsx | 127 ++++++++++++++++++++++++++++++-- 1 file changed, 121 insertions(+), 6 deletions(-) diff --git a/src/pages/System/User/index.tsx b/src/pages/System/User/index.tsx index dcab4d7..89f3d0b 100644 --- a/src/pages/System/User/index.tsx +++ b/src/pages/System/User/index.tsx @@ -1,19 +1,24 @@ import React, { useState, useRef, useMemo, useEffect } from 'react'; -import { message, Modal, Input, Form, PageHeader, Button, Spin, Tree, Checkbox, Row, Col, Upload } from 'antd'; +import { message, Modal, Input, Form, PageHeader, Button, Spin, Tree, Checkbox, Row, Col, Upload, TreeSelect } from 'antd'; import ProTable, { ProColumns, ActionType } from '@ant-design/pro-table'; import tableProps from '@/utils/tableProps'; import { getPage, getDataById, allocationIF, assignsRoles, updateRole } from './service'; import { fetchAllDepartment } from '../Department/service'; import { getDicData } from '@/utils/session'; import { fetchIamUsers, syncIamUser } from './service'; -import { UploadOutlined, DownloadOutlined } from '@ant-design/icons'; +import { UploadOutlined, DownloadOutlined, EditOutlined } from '@ant-design/icons'; const { Search } = Input; + const entrust: React.FC<{}> = () => { const [roleModalForm] = Form.useForm(); + const [editModalForm] = Form.useForm(); const [open, setOpen] = useState(false); + const [editOpen, setEditOpen] = useState(false); const actionRef = useRef(); const [spin, spinSet] = useState(false); const [roles, setRoles] = useState([]); + const [departments, setDepartments] = useState([]); + const [departmentTreeData, setDepartmentTreeData] = useState([]); //查询分页数据 const [pageData, pageDataSet] = useState({ pageNo: 1, @@ -29,6 +34,8 @@ const entrust: React.FC<{}> = () => { const [iamTotal, setIamTotal] = useState(0); const [iamPage, setIamPage] = useState({ pageNo: 1, pageSize: 10 }); const [iamSearch, setIamSearch] = useState(''); + const [currentUser, setCurrentUser] = useState(null); + useEffect(() => { getDepartmentList(); }, []); @@ -42,15 +49,58 @@ const entrust: React.FC<{}> = () => { { title: '部门', dataIndex: 'orgName', hideInSearch: true }, { title: '邮箱', dataIndex: 'email' }, { - title: '操作', width: '9%', + title: '操作', width: '12%', valueType: 'option', render: (_, record) => [ - - // , - // + , + ] }, ]; + + // 处理修改用户 + const handleEdit = (record: any) => { + setCurrentUser(record); + editModalForm.resetFields(); + editModalForm.setFieldsValue({ + userId: record.userId, + name: record.name, + employeeNumber: record.employeeNumber, + email: record.email, + orgId: record.orgId, + orgName: record.orgName + }); + setEditOpen(true); + }; + + // 关闭修改Modal + const closeEditModal = () => { + editModalForm.resetFields(); + setEditOpen(false); + setCurrentUser(null); + }; + + // 提交修改 + const onEditSubmit = async () => { + try { + const values = await editModalForm.validateFields(); + const { success } = await updateRole(values); + if (success) { + message.success('修改成功!'); + closeEditModal(); + actionRef.current?.reload(); + } + } catch (error) { + console.error(error); + } + }; + + // 部门选择变化 + const handleDepartmentChange = (value: string, labelList: any) => { + const selectedLabel = labelList[labelList.length - 1]; + editModalForm.setFieldsValue({ orgName: selectedLabel }); + }; + //分配角色查询数据 const chooseRole = (record: any) => { roleModalForm.resetFields(); @@ -89,6 +139,68 @@ const entrust: React.FC<{}> = () => { console.error(error); } }; + + // 修改用户Modal + const editUserModal = ( + +
+ + + + + + + + + + + + + + +
+
+ ); + const setRoleModal = ( = () => { }; generateList(data); treeDataListSet(dataList); + setDepartments(dataList); + setDepartmentTreeData(data); } catch (e) { } }; @@ -354,6 +468,7 @@ const entrust: React.FC<{}> = () => { onReset={() => { pageDataSet({ pageNo: 1, pageSize: 10 }); setOrgId(''); }} /> {setRoleModal} + {editUserModal} {/* IAM用户同步Modal */}