import Switch from '@/components/switch' import { usePageStoreOptions } from '@/store' import { IMenu } from '@/types/menus' import { ActionType, PageContainer, ProColumns, ProTable, BetaSchemaForm, ProFormColumnsType, } from '@ant-design/pro-components' import { useStyle } from './style.ts' import { memo, useEffect, useMemo, useRef, useState } from 'react' import { useAtom, useAtomValue } from 'jotai' import { deleteRoleAtom, pageAtom, roleAtom, roleIdsAtom, rolesAtom, saveOrUpdateRoleAtom, searchAtom } from '@/store/role.ts' import { useTranslation } from '@/i18n.ts' import { Button, Form, Space, Spin, Table, Tree, Popconfirm } from 'antd' import { PlusOutlined } from '@ant-design/icons' import { menuDataAtom } from '@/store/menu.ts' import { getTreeCheckedStatus } from '@/utils/tree.ts' const MenuTree = (props: any) => { const { data: menuList, isLoading: menuLoading } = useAtomValue(menuDataAtom) const { value, onChange, form, id, mode } = props const onCheck = (checkedKeys: any, info: any) => { if (onChange) { onChange([ ...checkedKeys, ...info.halfCheckedKeys ]) } else { form.setFieldsValue({ [id]: [ ...checkedKeys, ...info.halfCheckedKeys ] }) } } if (menuLoading) { return } return (menuList!, value)}/> } const Roles = memo(() => { const { t } = useTranslation() const { styles } = useStyle() const [ form ] = Form.useForm() const actionRef = useRef() const [ page, setPage ] = useAtom(pageAtom, usePageStoreOptions()) const [ search, setSearch ] = useAtom(searchAtom, usePageStoreOptions()) const [ roleIds, setRoleIds ] = useAtom(roleIdsAtom, usePageStoreOptions()) const { data, isLoading, isFetching, refetch } = useAtomValue(rolesAtom, usePageStoreOptions()) const { isPending, mutate, isSuccess } = useAtomValue(saveOrUpdateRoleAtom, usePageStoreOptions()) const { mutate: deleteRole, isPending: isDeleting } = useAtomValue(deleteRoleAtom, usePageStoreOptions()) const [ , setRole ] = useAtom(roleAtom, usePageStoreOptions()) const [ open, setOpen ] = useState(false) const columns = useMemo(() => { return [ { title: 'id', dataIndex: 'id', hideInTable: true, hideInSearch: true, formItemProps: { hidden: true } }, { title: t('system.roles.columns.name'), dataIndex: 'name', valueType: 'text', formItemProps: { rules: [ { required: true, message: t('message.required') } ] } }, { title: t('system.roles.columns.code'), dataIndex: 'code', valueType: 'text', formItemProps: { rules: [ { required: true, message: t('message.required') } ] } }, { title: t('system.roles.columns.status'), dataIndex: 'status', valueType: 'switch', render: (text) => { return } }, { title: t('system.roles.columns.sort'), dataIndex: 'sort', valueType: 'digit', }, { title: t('system.roles.columns.description'), dataIndex: 'description', valueType: 'textarea' }, { title: t('system.roles.columns.menu_ids'), hideInTable: true, hideInSearch: true, dataIndex: 'menu_ids', valueType: 'text', renderFormItem: (item, config, form) => { return } }, { title: t('system.roles.columns.option'), valueType: 'option', key: 'option', render: (_, record) => [ { setRole(record) setOpen(true) form.setFieldsValue(record) }} > {t('actions.edit', '编辑')} , { deleteRole([ record.id ]) }} title={t('message.deleteConfirm')}> {t('actions.delete', '删除')} , ], }, ] as ProColumns[] }, []) useEffect(() => { if (isSuccess) { setOpen(false) } }, [ isSuccess ]) return ( { setRoleIds(selectedRowKeys as number[]) }, selectedRowKeys: roleIds, selections: [ Table.SELECTION_ALL, Table.SELECTION_INVERT ], }} tableAlertOptionRender={() => { return ( { deleteRole(roleIds) }} title={t('message.batchDelete')}> ) }} options={{ reload: () => { refetch() }, }} toolbar={{ search: { loading: isFetching && !!search.key, onSearch: (value: string) => { setSearch({ key: value }) }, placeholder: t('system.roles.search.placeholder') }, actions: [ , ] }} pagination={{ total: data?.total, current: page.page, pageSize: page.pageSize, onChange: (page) => { setPage((prev) => { return { ...prev, page } }) } }} /> { setOpen(open) }} loading={isPending} onFinish={async (values) => { // console.log('values', values) mutate(values) return true }} columns={columns as ProFormColumnsType[]}/> ) }) export default Roles