Browse Source

Merge branch 'Subject' into dev

outaozhen 2 years ago
parent
commit
3e0214375b

+ 1 - 1
config/proxy.ts

@@ -5,7 +5,7 @@ export default {
   dev: {
     '/api/': {
       // target: 'http://fabdev.com',
-      target: 'http://fab3h1qa.com',
+      target: 'http://fabqa.com',
       changeOrigin: true,
       pathRewrite: { '^': '' }
     }

+ 17 - 0
config/routes.ts

@@ -26,6 +26,23 @@ const routes: Route[] = [
     redirect: '/project/management'
   },
   {
+    path: 'subject',
+    name: 'subject',
+    icon: 'DeploymentUnitOutlined',
+    routes: [
+      {
+        path: '/subject',
+        redirect: '/subject/mainstay'
+      },
+      {
+        path: 'mainstay',
+        name: BackstagePermission.VIEW_SUBJECT_MAINSTAY,
+        // access: 'authRouteFilter',
+        component: './Subject/Mainstay'
+      }
+    ]
+  },
+  {
     path: '/project',
     name: 'project',
     icon: 'AppstoreOutlined',

+ 2 - 0
src/enums/access.ts

@@ -32,6 +32,8 @@ export enum FrontPermission {
 
 /** 后台-角色权限枚举 */
 export enum BackstagePermission {
+  /** 项业务主体设置-业务主体 */
+  VIEW_SUBJECT_MAINSTAY = 'viewSubjectMainstay',
   /** 项目管理-查看项目 */
   VIEW_PROJECT_MANAGEMENT = 'viewProjectManagement',
   /** 项目管理-查看审批角色 */

+ 2 - 0
src/locales/zh-CN/menu.ts

@@ -15,6 +15,8 @@ export default {
   'menu.account.settings': '个人设置',
   'menu.account.trigger': '触发报错',
   'menu.account.logout': '退出登录',
+  'menu.subject': '业务主体设置',
+  'menu.subject.viewSubjectMainstay': '业务主体',
   'menu.project': '项目审批设置',
   'menu.project.viewProjectManagement': '项目管理',
   'menu.project.viewProjectManagement.management-list': '项目列表',

+ 2 - 2
src/pages/Business/RuleCode/index.tsx

@@ -61,7 +61,7 @@ const RenderTags: React.FC<iTags> = ({ ruleArr, setRuleArr }) => {
         }}
         leave={{ opacity: 0, width: 0, scale: 0, duration: 200 }}
         appear={false}>
-        {ruleArr.map((tag, idx) => {
+        {ruleArr?.map((tag, idx) => {
           return (
             <span key={idx} style={{ display: 'inline-block', marginBottom: '4px' }}>
               {tag?.label ? (
@@ -210,7 +210,7 @@ const RulesCode = () => {
             <div className="flex items-center mb-3">
               <div className="w-100px text-right mr-1">编号预览:</div>
               <div className="min-h-32px leading-32px">
-                {ruleArr.map(item => item?.value).join(state.connector)}
+                {ruleArr?.map(item => item?.value).join(state.connector)}
               </div>
             </div>
             <div className="flex items-center mb-3">

+ 16 - 0
src/pages/Permission/BackRole/components/PermTabs/index.tsx

@@ -61,6 +61,22 @@ const PermTabs: React.FC<PermTabsProps> = ({ currentPermData: { ID } }) => {
       <div style={{ height: 'calc(100vh - 250px)' }} className="overflow-y-auto">
         <Spin spinning={loading}>
           <div className="shadow-md mb-4">
+            <Card size="small" type="inner" title="业务主体设置">
+              <div>
+                <h4>业务主体</h4>
+                <div className="my-2">
+                  <Checkbox
+                    onChange={e =>
+                      handleBackOnchange(e.target.checked, BackstagePermission.VIEW_SUBJECT_MAINSTAY)
+                    }
+                    checked={permission.includes(BackstagePermission.VIEW_SUBJECT_MAINSTAY)}>
+                    启用
+                  </Checkbox>
+                </div>
+              </div>
+            </Card>
+          </div>
+          <div className="shadow-md mb-4">
             <Card size="small" type="inner" title="项目审批设置">
               <div>
                 <h4>项目管理</h4>

+ 171 - 0
src/pages/Subject/Mainstay/index.tsx

@@ -0,0 +1,171 @@
+import { addSubject, delSubject, querySubject } from '@/services/api/subject'
+import consts from '@/utils/consts'
+import { PageContainer } from '@ant-design/pro-layout'
+import ProTable from '@ant-design/pro-table'
+import type { ProColumnType } from '@ant-design/pro-table'
+import React, { useEffect, useRef, useState } from 'react'
+import { Button, message, Modal } from 'antd'
+import { ModalForm, ProFormSelect } from '@ant-design/pro-form'
+import { useRequest } from '@umijs/max'
+import { queryInstitutionList } from '@/services/api/institution'
+import { DeleteOutlined } from '@ant-design/icons'
+
+const Mainstay = () => {
+  const tRef = useRef<ActionType>(null)
+  const formRef = useRef<ProFormInstance>(null)
+  const [state, setState] = useState<iRestrictProps>({
+    params: {
+      search: null
+    },
+    modalVisible: false,
+    institutionList: []
+  })
+
+  const { run: tryInstitutionList } = useRequest(
+    () => queryInstitutionList({ current: 1, pageSize: 214000, subject: true }),
+    {
+      manual: true,
+      onSuccess(result) {
+        setState({
+          ...state,
+          institutionList: result.items
+            .filter(item => !item.isSubjectBind)
+            .map(item => ({ label: item.name, value: item.ID }))
+        })
+      }
+    }
+  )
+  const { run: tryAddSubject } = useRequest(addSubject, {
+    manual: true,
+    onSuccess: () => {
+      message.success('添加成功')
+      tRef.current?.reload()
+    }
+  })
+  const handleDelSubject = ID => {
+    Modal.confirm({
+      title: '删除主体',
+      content: '确认删除该行数据?',
+      okButtonProps: {
+        danger: true
+      },
+      onOk: async () => {
+        // 进行删除的接口请求
+        const { code = -1 } = await delSubject({ ID })
+        if (code === consts.RET_CODE.SUCCESS) {
+          message.success('删除成功')
+          tRef.current?.reload()
+        }
+      }
+    })
+  }
+
+  useEffect(() => {
+    tryInstitutionList()
+  }, [])
+  const columns: ProColumnType<API.SubjectParams> = [
+    {
+      dataIndex: 'name',
+      key: 'name',
+      title: '名称',
+      width: 86,
+      onHeaderCell: () => ({ style: { textAlign: 'center' } })
+    },
+    {
+      title: '操作',
+      dataIndex: 'operate',
+      width: 61,
+      align: 'center',
+      onHeaderCell: () => ({ style: { textAlign: 'center' } }),
+      render: (_, record) => (
+        <div className="divide-x divide-bg-gray-400 flex flex-row justify-center">
+          <div
+            className="text-hex-fd3995 cursor-pointer hover:text-hex-e7026e"
+            onClick={() => handleDelSubject(record.ID)}>
+            <DeleteOutlined />
+          </div>
+        </div>
+      )
+    }
+  ]
+  return (
+    <PageContainer title={false}>
+      <ProTable<API.SubjectParams>
+        rowKey="ID"
+        actionRef={tRef}
+        params={state.params}
+        columns={columns}
+        search={false}
+        request={async (params, filter, sorter) => {
+          const { code = -1, data: { items = [], total = 0 } = {} } = await querySubject({
+            ...params,
+            ...filter,
+            ...sorter
+          })
+          return {
+            data: items,
+            success: code === consts.RET_CODE.SUCCESS,
+            total
+          }
+        }}
+        toolbar={{
+          search: {
+            onSearch: val => setState({ ...state, params: { ...state.params, search: val } }),
+            style: { width: '250px' },
+            placeholder: '请搜索业务主体名称'
+          },
+          actions: [
+            <Button
+              type="primary"
+              key="add_flow_btn"
+              onClick={() => {
+                tryInstitutionList()
+                setState({
+                  ...state,
+                  modalVisible: true
+                })
+              }}>
+              添加主体
+            </Button>
+          ]
+        }}
+      />
+      <ModalForm
+        visible={state.modalVisible}
+        isKeyPressSubmit
+        layout="horizontal"
+        labelCol={{ span: 4 }}
+        modalProps={{
+          width: '30%'
+        }}
+        onVisibleChange={visible => {
+          setState({ ...state, modalVisible: visible })
+          setTimeout(() => {
+            if (!visible) formRef.current?.resetFields()
+          }, 80)
+        }}
+        title={'添加主体'}
+        formRef={formRef}
+        onFinish={async values => {
+          try {
+            await tryAddSubject(values)
+            tRef.current?.reload()
+            return true
+          } catch (error) {
+            message.error(error)
+            return false
+          }
+        }}>
+        <ProFormSelect
+          label="单位选择"
+          tooltip="同步新增隶属该主体的审批业务、业务编号、步骤执行者、业务步骤、业务事项、审批角色、指标库、材价库业务。"
+          name="institutionIDs"
+          className="w-full"
+          options={state.institutionList}
+        />
+      </ModalForm>
+    </PageContainer>
+  )
+}
+
+export default Mainstay

+ 25 - 0
src/services/api/subject.ts

@@ -0,0 +1,25 @@
+import { request } from '@umijs/max'
+
+/** 新增业务主体 */
+export async function addSubject(params: API.AddSubjectParams) {
+  return request('/Subject/add', {
+    method: 'POST',
+    data: params
+  })
+}
+
+/** 获得业务主体列表 */
+export async function querySubject(params: API.SubjectParams) {
+  return request('/Subject/list', {
+    method: 'GET',
+    params
+  })
+}
+
+/** 删除业务主体 */
+export async function delSubject(params: API.DelSubjectParams) {
+  return request('/Subject/delete', {
+    method: 'POST',
+    params
+  })
+}

+ 0 - 12
src/services/api/typings.d.ts

@@ -417,16 +417,4 @@ declare namespace API {
     tab: string
     rules: any[]
   }
-
-  type ExecutorItem = {
-    ID?: string
-    name?: string
-    /** 设置方式: yz-预置成员,bz-步骤设置 */
-    setType?: 'yz' | 'bz'
-    /** 审批模式: user-指定用户, xx-会签, yy-或签 */
-    approvalType?: 'user'
-    step?: string
-    members?: string[]
-    businessType?: string
-  }
 }