diff --git a/src/locales/lang/zh-CN.ts b/src/locales/lang/zh-CN.ts index 3e5ec17..837c9ca 100644 --- a/src/locales/lang/zh-CN.ts +++ b/src/locales/lang/zh-CN.ts @@ -63,6 +63,7 @@ export default { success: '提交成功', fail: '提交失败', saveSuccess: '保存成功', + editSuccess: '修改成功', deleteSuccess: '删除成功', saveFail: '保存失败', emptyData: '暂无数据', diff --git a/src/pages/system/menus/components/MenuTree.tsx b/src/pages/system/menus/components/MenuTree.tsx index d5bb025..d79d638 100644 --- a/src/pages/system/menus/components/MenuTree.tsx +++ b/src/pages/system/menus/components/MenuTree.tsx @@ -36,6 +36,7 @@ const MenuTree = ({ form }: { form: FormInstance }) => { return () => { setCurrentMenu({} as MenuItem) + setIds([]) } }, [ data, isLoading ]) diff --git a/src/pages/system/menus/index.tsx b/src/pages/system/menus/index.tsx index 534ae77..39389e5 100644 --- a/src/pages/system/menus/index.tsx +++ b/src/pages/system/menus/index.tsx @@ -33,7 +33,6 @@ const Menus = () => { description: (error as any).message ?? t('message.saveFail', '保存失败'), }) } - }, [ isError, isSuccess ]) return ( diff --git a/src/pages/system/menus/store.ts b/src/pages/system/menus/store.ts index c06c7ea..5a32a6d 100644 --- a/src/pages/system/menus/store.ts +++ b/src/pages/system/menus/store.ts @@ -60,7 +60,8 @@ export const saveOrUpdateMenuAtom = atomWithMutation>((get) => return await systemServ.menus.update(data) }, onSuccess: (res) => { - message.success(t('message.saveSuccess', '保存成功')) + const isAdd = !!res.data?.id + message.success(t( isAdd ? 'message.saveSuccess': 'message.editSuccess', '保存成功')) const menu = get(selectedMenuAtom) store.set(selectedMenuAtom, { ...menu, @@ -69,7 +70,7 @@ export const saveOrUpdateMenuAtom = atomWithMutation>((get) => //更新列表 // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore fix - get(queryClientAtom).refetchQueries([ 'menus', get(menuPageAtom) ]).then() + get(queryClientAtom).invalidateQueries([ 'menus', get(menuPageAtom) ]).then() } } }) @@ -85,7 +86,7 @@ export const deleteMenuAtom = atomWithMutation((get) => { onSuccess: () => { message.success(t('message.deleteSuccess', '删除成功')) store.set(batchIdsAtom, []) - get(queryClientAtom).refetchQueries([ 'menus', get(menuPageAtom) ]).then() + get(queryClientAtom).invalidateQueries([ 'menus', get(menuPageAtom) ]).then() } } }) \ No newline at end of file diff --git a/src/pages/system/roles/index.tsx b/src/pages/system/roles/index.tsx index 0344fe8..b34dbdd 100644 --- a/src/pages/system/roles/index.tsx +++ b/src/pages/system/roles/index.tsx @@ -1,33 +1,89 @@ -import { ActionType, PageContainer, ProColumns, ProTable,BetaSchemaForm } from '@ant-design/pro-components' +import { + ActionType, + PageContainer, + ProColumns, + ProTable, + BetaSchemaForm, +} from '@ant-design/pro-components' import { createLazyFileRoute } from '@tanstack/react-router' import { useStyle } from './style.ts' -import { useMemo, useRef, useState } from 'react' -import { useAtom, useAtomValue } from 'jotai' -import { roleAtom, rolesAtom } from './store.ts' +import { useEffect, useMemo, useRef, useState } from 'react' +import { useAtom, useAtomValue, useSetAtom } from 'jotai' +import { pageAtom, roleAtom, rolesAtom, saveOrUpdateRoleAtom, searchAtom } from './store.ts' import { useTranslation } from '@/i18n.ts' -import { Button, Form, Space, Table } from 'antd' +import { Button, Form, Space, Spin, Table, Tree } from 'antd' import { PlusOutlined } from '@ant-design/icons' +import { menuDataAtom } from '@/pages/system/menus/store.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 + + +} const Roles = () => { const { t } = useTranslation() const { styles } = useStyle() - const [form] = Form.useForm() + const [ form ] = Form.useForm() const actionRef = useRef() - const { data, isLoading } = useAtomValue(rolesAtom) - const [ role, setRole ] = useAtom(roleAtom) - const [ open, setOpen] = useState(false) + const [ page, setPage ] = useAtom(pageAtom) + const setSearch = useSetAtom(searchAtom) + const { data, isLoading, isFetching, refetch } = useAtomValue(rolesAtom) + const { isPending, mutate, isSuccess } = useAtomValue(saveOrUpdateRoleAtom) + const [ , setRole ] = useAtom(roleAtom) + const [ open, setOpen ] = useState(false) const columns = useMemo(() => { return [ - { title: 'id', dataIndex: 'id', hideInTable: true, hideInSearch: true, hideInForm: true,}, - { title: '名称', dataIndex: 'name', valueType: 'text',}, - { title: '别名', dataIndex: 'code', valueType: 'text', }, + { + title: 'id', dataIndex: 'id', + hideInTable: true, + hideInSearch: true, + // hideInForm: true, + }, + { + title: '名称', dataIndex: 'name', valueType: 'text', + formItemProps: { + rules: [ { required: true, message: '请输入角色名称' } ] + } + }, + { + title: '别名', dataIndex: 'code', valueType: 'text', + formItemProps: { + rules: [ { required: true, message: '请输入别名' } ] + } + }, { title: '状态', dataIndex: 'status', valueType: 'switch', }, - { title: '排序', dataIndex: 'sort', valueType: 'indexBorder', }, - { title: '备注', dataIndex: 'remark' ,valueType: 'textarea' }, - { title: '权限', dataIndex: 'permissions', valueType: 'treeSelect', }, + { + title: '排序', dataIndex: 'sort', valueType: 'digit', + }, + { title: '备注', dataIndex: 'description', valueType: 'textarea' }, + { + title: '权限', dataIndex: 'menu_ids', + valueType: 'text', + renderFormItem: (item, config, form) => { + return + } + }, { title: '操作', valueType: 'option', key: 'option', @@ -35,7 +91,6 @@ const Roles = () => { { - // action?.startEditable?.(record.id) setRole(record) setOpen(true) form.setFieldsValue(record) @@ -51,6 +106,12 @@ const Roles = () => { ] as ProColumns[] }, []) + useEffect(() => { + if (isSuccess) { + setOpen(false) + } + }, [ isSuccess ]) + return ( { actionRef={actionRef} headerTitle={t('system.roles.title', '角色管理')} columns={columns} - loading={isLoading} + loading={isLoading || isFetching} dataSource={data?.rows} search={false} rowSelection={{ - selections: [Table.SELECTION_ALL, Table.SELECTION_INVERT], + selections: [ Table.SELECTION_ALL, Table.SELECTION_INVERT ], }} tableAlertOptionRender={() => { return ( 批量删除 - ); + ) + }} + options={{ + reload: () => { + refetch() + }, }} toolbar={{ search: { onSearch: (value: string) => { - alert(value) + setSearch({ name: value }) }, }, - onSearch: (value) => { - console.log('value', value) - }, actions: [ -