import { useModel, useRequest } from 'umi' import { Delete } from '@icon-park/react' import ProForm, { ProFormDependency, ProFormSwitch, ProFormCheckbox } from '@ant-design/pro-form' import type { FormInstance } from 'antd' import { message, Table, Tabs, Radio, Space, Popconfirm } from 'antd' import React, { useRef, useMemo, useState, useEffect } from 'react' import styles from '@/pages/Role/index.less' import classNames from 'classnames' import { fetchRoleStaffListByRoleId, updateRolePermission, getRolePermissions, updatePermDataByRoleId, deleteStaff } from '@/services/user/api' import type { ColumnsType } from 'antd/lib/table' import { formatPermission } from '@/utils/utils' import RoleMenu from '../System/components/RoleMenu' import ConnectModal from '../System/components/ConnectModal' import FormItem from 'antd/lib/form/FormItem' import { permData } from '../Customer' import { PieChartOutlined } from '@ant-design/icons' import { PageContainer } from '@ant-design/pro-layout' const Statistic = () => { const { TabPane } = Tabs const formRef = useRef(null) const formRef2 = useRef(null) const { initialState } = useModel('@@initialState') const menuId = useMemo(() => { return initialState?.menuList?.find(item => item.name === '统计')?.id }, initialState.menuList) const [state, setState] = useState({ id: '', roleStaff: [], rolePermission: {}, dataPermission: {}, activeKey: '' }) const onSelect = (id: string) => { setState({ ...state, id }) } const { run: tryGetRoleStaffList } = useRequest( (id: string) => fetchRoleStaffListByRoleId({ id }), { manual: true, onSuccess: result => { setState({ ...state, roleStaff: result }) } } ) const { run: tryGetRolePermissions } = useRequest((id: string) => getRolePermissions({ id }), { manual: true, onSuccess: (result: API.GetRolePermissionResultModel) => { const values = { client: [], company: [], business: [], ...formatPermission('init', result.permission) } if ( values['showSoftware-usage'] || values['showInvoice-aggregate'] || values['showInvoice-trends'] || values['showInvoice-receivables'] ) { values.showProduct = true delete values['showSoftware-usage'] delete values['showInvoice-aggregate'] delete values['showInvoice-trends'] delete values['showInvoice-receivables'] } if (values['showCustomer-additions']) { values.showCustomer = true delete values['showCustomer-additions'] } setState({ ...state, rolePermission: values, dataPermission: result.dataPermission ? JSON.parse(result.dataPermission) : null }) formRef.current?.setFieldsValue({ ...values }) formRef2.current?.setFieldsValue( result.dataPermission ? JSON.parse(result.dataPermission) : null ) } }) const { run: tryDeleteStaff } = useRequest( (params: API.DeleteStaff) => { return deleteStaff(params) }, { manual: true, onSuccess: () => { message.success('移除员工成功') tryGetRoleStaffList(state.id) } } ) useEffect(() => { if (state.id) { tryGetRoleStaffList(state.id) tryGetRolePermissions(state.id) } if (state.activeKey === '2') { formRef.current?.setFieldsValue({ ...state.rolePermission }) } if (state.activeKey === '3') { formRef2.current?.setFieldsValue({ ...state.dataPermission }) } }, [state.id, state.activeKey]) const columns: ColumnsType = [ { title: '用户', dataIndex: 'username', width: '15%' }, { title: '手机', dataIndex: 'phone', width: '20%' }, { title: '部门', dataIndex: 'departmentName', width: '20%' }, { title: '岗位', dataIndex: 'position', width: '15%' }, { title: '角色', dataIndex: 'age', width: '20%' }, { title: '操作', dataIndex: 'opreate', width: '20%', render: (_, record) => ( tryDeleteStaff({ id: state.id, staffId: record.staffId })}>
) } ] return (
{state.id && ( tryGetRoleStaffList(state.id)} /> )}
setState({ ...state, activeKey: key })}> dataSource={state.roleStaff} columns={columns} rowKey={row => row.staffId} />
{state.id && ( { const newValues = formatPermission('submit', values) await updateRolePermission({ permission: JSON.stringify(newValues), id: state.id }) message.success('设置成功') }}> 产品销售 } />
{({ showProduct }) => ( <> )}
客户数据 } />
{({ showCustomer }) => ( )}
)}
{state.id && ( { try { await updatePermDataByRoleId({ id: state.id, dataPermission: JSON.stringify(values) }) } catch (error) { return message.error(error.toString()) } message.success('设置成功') return true }}> {permData.map(item => ( {item.label} ))} )}
) } export default Statistic