import RequireAuth from '@/components/RequireAuth' import { PERM_ROLE_NEW } from '@/config' import useAccountStore, { fetchPermissionList, fetchPermissionListByRoleId, fetchRoleList } from '@/stores/Account' import { isEmpty } from '@/utils/commons' import { SyncOutlined, } from '@ant-design/icons' import { App, Button, Col, Form, Input, Modal, Row, Space, Table, Tag, TreeSelect, Typography } from 'antd' import dayjs from 'dayjs' import { useEffect, useState } from 'react' import { useTranslation } from 'react-i18next' const { Title } = Typography function RoleList() { const { t } = useTranslation() const roleListColumns = [ { title: t('account:roleName'), dataIndex: 'role_name', }, { title: t('account:createdOn'), dataIndex: 'created_on', render: (text) => (isEmpty(text) ? '' : dayjs(text).format('YYYY-MM-DD HH:mm:ss')) }, { title: t('account:action'), dataIndex: 'account:action', render: actionRender }, ] function actionRender(_, role) { if (role.role_id == 1) { return (} color='warning'>不能修改) } else { return ( ) } } const onPermissionChange = (newValue) => { setPermissionValue(newValue) } function groupByParam(array, param) { return array.reduce((result, item) => { (result[item[param]] = result[item[param]] || []).push(item) return result }, {}) } useEffect(() => { setDataLoading(true) fetchRoleList() .then(r => { setRoleAllList(r) }) .finally(() => { setDataLoading(false) }) const categoryMap = new Map([ ['system', '系统管理'], ['oversea', '海外供应商'], ['domestic', '国内供应商'], ['air-ticket', '机票供应商'], ['train-ticket', '火车票供应商'], ['products', '产品价格'], ['page', '默认页面'], ]); const permissionTree = [] fetchPermissionList() .then(r => { const groupPermissionData = groupByParam(r, 'res_category') const categoryKeys = Object.keys(groupPermissionData) categoryKeys.forEach((categoryName) => { const permissisonList = groupPermissionData[categoryName] const categoryGroup = { title: categoryMap.get(categoryName), value: categoryName, key: categoryName, children: permissisonList.map(p => { return { disableCheckbox: p.res_id == 1, title: p.res_name, value: p.res_id, key: p.res_id, } }) } permissionTree.push(categoryGroup) }) setPermissionTreeData(permissionTree) }) }, []) const [permissionValue, setPermissionValue] = useState([]) const [permissionTreeData, setPermissionTreeData] = useState([]) const [isRoleModalOpen, setRoleModalOpen] = useState(false) const [dataLoading, setDataLoading] = useState(false) const [roleAllList, setRoleAllList] = useState([]) const [roleForm] = Form.useForm() const [saveOrUpdateRole, newEmptyRole] = useAccountStore((state) => [state.saveOrUpdateRole, state.newEmptyRole]) const { notification } = App.useApp() const onRoleSeleted = (role) => { fetchPermissionListByRoleId({ role_id: role.role_id }) .then(result => { role.res_array = result.map(r => r.res_id) roleForm.setFieldsValue(role) }) setRoleModalOpen(true) } const onNewRole = () => { const role = newEmptyRole() roleForm.setFieldsValue(role) setRoleModalOpen(true) } const onRoleFinish = (values) => { saveOrUpdateRole(values) .then(() => { setRoleModalOpen(false) fetchRoleList() .then(r => { setRoleAllList(r) }) }) .catch(ex => { notification.error({ message: 'Notification', description: ex.message, placement: 'top', duration: 4, }) }) } const onRoleFailed = (error) => { console.log('Failed:', error) // form.resetFields() } return ( <> setRoleModalOpen(false)} destroyOnClose forceRender modalRender={(dom) => (
{dom}
)} >
{t('account:roleList')} { return t('Total') + `:${total}` } }} columns={roleListColumns} dataSource={roleAllList} /> ) } export default RoleList