Просмотр исходного кода

fix(部门管理): 添加上级部门

xieyonghong 3 лет назад
Родитель
Сommit
09721f77b0

+ 43 - 2
src/pages/system/Department/index.tsx

@@ -21,6 +21,7 @@ import { model } from '@formily/reactive';
 import Save from './save';
 import SearchComponent from '@/components/SearchComponent';
 import { getMenuPathByParams, MENUS_CODE } from '@/utils/menu';
+import * as React from 'react';
 
 export const service = new Service('organization');
 
@@ -39,7 +40,9 @@ export default observer(() => {
   const actionRef = useRef<ActionType>();
   const intl = useIntl();
   const [param, setParam] = useState({});
-
+  const [expandedRowKeys, setExpandedRowKeys] = useState<React.Key[]>([]);
+  const [treeData, setTreeData] = useState<any[]>([]);
+  const rowKeys = useRef<React.Key[]>([]);
   /**
    * 根据部门ID删除数据
    * @param id
@@ -173,6 +176,26 @@ export default observer(() => {
   const schema: ISchema = {
     type: 'object',
     properties: {
+      parentId: {
+        type: 'string',
+        title: '上级部门',
+        required: true,
+        'x-decorator': 'FormItem',
+        'x-component': 'TreeSelect',
+        'x-validator': [
+          {
+            required: true,
+            message: '请输入名称',
+          },
+        ],
+        'x-component-props': {
+          fieldNames: {
+            label: 'name',
+            value: 'id',
+          },
+        },
+        enum: treeData,
+      },
       name: {
         type: 'string',
         title: intl.formatMessage({
@@ -199,10 +222,15 @@ export default observer(() => {
           id: 'pages.device.instanceDetail.detail.sort',
           defaultMessage: '排序',
         }),
+        required: true,
         'x-decorator': 'FormItem',
         'x-component': 'NumberPicker',
         'x-validator': [
           {
+            required: true,
+            message: '请输入排序',
+          },
+          {
             pattern: /^[0-9]*[1-9][0-9]*$/,
             message: '请输入大于0的整数',
           },
@@ -246,6 +274,7 @@ export default observer(() => {
             ...params,
             sorts: [{ name: 'createTime', order: 'desc' }],
           });
+          setTreeData(response.result);
           return {
             code: response.message,
             result: {
@@ -258,6 +287,13 @@ export default observer(() => {
           };
         }}
         rowKey="id"
+        expandable={{
+          expandedRowKeys: [...rowKeys.current],
+          onExpandedRowsChange: (keys) => {
+            rowKeys.current = keys as React.Key[];
+            setExpandedRowKeys(keys as React.Key[]);
+          },
+        }}
         pagination={false}
         search={false}
         params={param}
@@ -289,7 +325,12 @@ export default observer(() => {
             : undefined
         }
         service={service}
-        onCancel={(type) => {
+        onCancel={(type, pId) => {
+          if (pId) {
+            expandedRowKeys.push(pId);
+            rowKeys.current.push(pId);
+            setExpandedRowKeys(expandedRowKeys);
+          }
           if (type) {
             actionRef.current?.reload();
           }

+ 8 - 5
src/pages/system/Department/save.tsx

@@ -16,6 +16,7 @@ import {
   Switch,
   Upload,
   Checkbox,
+  TreeSelect,
 } from '@formily/antd';
 import { message, Modal } from 'antd';
 import { useIntl } from '@@/plugin-locale/localeExports';
@@ -32,7 +33,7 @@ export interface SaveModalProps<T> extends Omit<ModalProps, 'onOk' | 'onCancel'>
    * Model关闭事件
    * @param type 是否为请求接口后关闭,用于外部table刷新数据
    */
-  onCancel?: (type: boolean) => void;
+  onCancel?: (type: boolean, id?: React.Key) => void;
   schema: ISchema;
 }
 
@@ -55,6 +56,7 @@ const Save = <T extends object>(props: SaveModalProps<T>) => {
       NumberPicker,
       FUpload,
       Checkbox,
+      TreeSelect,
     },
     scope: {
       icon(name: any) {
@@ -71,10 +73,11 @@ const Save = <T extends object>(props: SaveModalProps<T>) => {
   /**
    * 关闭Modal
    * @param type 是否需要刷新外部table数据
+   * @param id 传递上级部门id,用于table展开父节点
    */
-  const modalClose = (type: boolean) => {
+  const modalClose = (type: boolean, id?: string) => {
     if (typeof onCancel === 'function') {
-      onCancel(type);
+      onCancel(type, id);
     }
   };
 
@@ -89,7 +92,7 @@ const Save = <T extends object>(props: SaveModalProps<T>) => {
 
     if (response.status === 200) {
       message.success('操作成功!');
-      modalClose(true);
+      modalClose(true, response.result.parentId);
       if ((window as any).onTabSaveSuccess) {
         (window as any).onTabSaveSuccess(response.result);
         setTimeout(() => window.close(), 300);
@@ -116,7 +119,7 @@ const Save = <T extends object>(props: SaveModalProps<T>) => {
         modalClose(false);
       }}
     >
-      <Form form={form} labelCol={5} wrapperCol={16}>
+      <Form form={form} layout={'vertical'}>
         <SchemaField schema={schema} />
       </Form>
     </Modal>

+ 2 - 1
src/utils/menu/router.ts

@@ -92,6 +92,7 @@ export const MENUS_CODE = {
   'link/AccessConfig/Detail': 'link/AccessConfig/Detail',
   'system/Menu/Detail': 'system/Menu/Detail',
   'system/Department/Detail': 'system/Department/Detail',
+  '/link/Type/Detail': '/link/Type/Detail',
 };
 
 export const getDetailNameByCode = {
@@ -100,6 +101,6 @@ export const getDetailNameByCode = {
   'device/Instance/Detail': '设备详情',
   'device/Firmware/Detail': '固件详情',
   'system/Department/Detail': '部门详情',
-  'link/Type/Save': '网络组件详情',
+  'link/Type/Detail': '网络组件详情',
   'link/AccessConfig/Detail': '配置详情',
 };