Explorar o código

fix: 调整步骤执行者列表数据存储逻辑

lanjianrong %!s(int64=3) %!d(string=hai) anos
pai
achega
efb3371afc

+ 18 - 6
src/pages/Business/Process/hooks/useScripts.tsx

@@ -9,6 +9,7 @@ import { Form, message, Tooltip } from 'antd'
 import ProForm, { ProFormDependency, ProFormRadio, ProFormSelect, ProFormText } from '@ant-design/pro-form'
 
 import type { ModalAction } from '@/components/Modal'
+import { useDispatch } from '@umijs/max'
 
 const setTypeOptions = [
   {
@@ -36,19 +37,30 @@ const setTypeOptions = [
 ]
 
 type iState = {
-  items: API.ExecutorItem[]
   total: number
 }
 
 export default function useScripts(modal: ModalAction) {
+  const dispatch = useDispatch()
   const [state, seState] = useState<iState>({
-    items: [],
     total: 0
   })
-  const { run: query, loading } = useRequest(queryExecutorList, {
+  const {
+    run: query,
+    refresh,
+    loading
+  } = useRequest(queryExecutorList, {
     manual: true,
-    onSuccess: result => {
-      seState(result.data)
+    onSuccess: (result, params) => {
+      const { subjectID, businessType } = params[0]
+      seState({ total: result.data.total })
+      dispatch({
+        type: 'business/updateProcessMap',
+        payload: {
+          ID: `${subjectID}_${businessType}`,
+          process: result.data.items
+        }
+      })
     }
   })
 
@@ -127,5 +139,5 @@ export default function useScripts(modal: ModalAction) {
       }
     })
   }
-  return { query, data: state, loading, addOrEdit, del }
+  return { query, total: state.total, loading, addOrEdit, del }
 }

+ 21 - 15
src/pages/Business/Process/index.tsx

@@ -1,5 +1,5 @@
 import useModal from '@/components/Modal'
-import { startTransition, useState } from 'react'
+import { startTransition, useMemo, useState } from 'react'
 import { PageContainer } from '@ant-design/pro-layout'
 import { BusinessType, ExecutorSetType } from '@/enums/gc'
 import useScripts from './hooks/useScripts'
@@ -7,19 +7,28 @@ import { Button } from 'antd'
 import ProTable, { ProColumnType } from '@ant-design/pro-table'
 import LeftMenu from '../RuleCode/components/LeftMenu'
 import { connect } from '@umijs/max'
+import { BusinessModelState } from '../model'
 
 export const menuOptions = [{ label: '预算业务审批', value: BusinessType.BUDGET }]
 
-type iProcessProps = {
-  activeKey: BusinessType
+type ProcessProps = {
+  processMap: {
+    [key: string]: API.ExecutorItem[]
+  }
 }
 
-const Process = ({ dispatch, processList }) => {
-  const [state, setState] = useState<iProcessProps>({
-    activeKey: null
+const Process: React.FC<ProcessProps> = ({ processMap }) => {
+  const [state, setState] = useState({
+    activeKey: ''
   })
+
   const [modal, ModalDOM] = useModal()
-  const { data, loading, addOrEdit, del } = useScripts(modal)
+  const { total, query, loading, addOrEdit, del } = useScripts(modal)
+
+  const list = useMemo(() => {
+    if (!state.activeKey) return []
+    return processMap?.[state.activeKey] || []
+  }, [state.activeKey, processMap])
 
   const columns: ProColumnType<API.ExecutorItem>[] = [
     {
@@ -78,10 +87,7 @@ const Process = ({ dispatch, processList }) => {
     const [subjectID, businessType] = key.split('_')
     setState({ ...state, activeKey: key })
     startTransition(() => {
-      dispatch({
-        type: 'business/queryExecutor',
-        payload: { subjectID, businessType }
-      })
+      !processMap?.[state.activeKey] && query({ subjectID, businessType, pageSize: 214000 })
     })
   }
   return (
@@ -100,9 +106,9 @@ const Process = ({ dispatch, processList }) => {
             rowKey="ID"
             search={false}
             columns={columns}
-            dataSource={processList}
+            dataSource={list}
             loading={loading}
-            pagination={{ total: data.total }}
+            pagination={{ total }}
           />
         </div>
       </div>
@@ -111,6 +117,6 @@ const Process = ({ dispatch, processList }) => {
   )
 }
 
-export default connect(({ business }: { processList: BusinessModelState }) => ({
-  processList: business.processList
+export default connect(({ business }: { business: BusinessModelState }) => ({
+  processMap: business.processMap
 }))(Process)

+ 17 - 2
src/pages/Business/model.ts

@@ -9,7 +9,9 @@ import type { Effect, Reducer } from '@umijs/max'
 export interface BusinessModelState {
   institutionList: API.InstitutionList[]
   subjectList: API.SubjectParams[]
-  processList: API.ExecutorItem[]
+  processMap: {
+    [key: string]: API.ExecutorItem[]
+  }
 }
 
 export interface BusinessModelType {
@@ -32,7 +34,7 @@ const BusinessModel: BusinessModelType = {
   state: {
     institutionList: [],
     subjectList: [],
-    processList: []
+    processMap: {}
   },
   effects: {
     *queryInstitution({ payload }, { call, put }) {
@@ -67,6 +69,12 @@ const BusinessModel: BusinessModelType = {
           }
         })
       }
+    },
+    *updateProcessMap({ payload }, { put }) {
+      yield put({
+        type: 'saveProcessMap',
+        payload
+      })
     }
   },
   reducers: {
@@ -75,6 +83,13 @@ const BusinessModel: BusinessModelType = {
         ...state,
         ...action.payload
       }
+    },
+    saveProcessMap(state: BusinessModelState, action) {
+      const { ID, process } = action.payload as { ID: string; process: API.ExecutorItem }
+      return {
+        ...state,
+        processMap: { ...state.processMap, [ID]: process }
+      }
     }
     // 启用 immer 之后
     // save(state, action) {

+ 7 - 3
src/services/api/business.ts

@@ -73,9 +73,11 @@ export async function updateRuleCode(params: API.RuleCodeUpdateParams) {
 }
 
 /** 获取执行者列表 */
-export async function queryExecutorList(params: { subjectID: string; businessType: BusinessType }) {
-  console.log(params)
-
+export async function queryExecutorList(params: {
+  subjectID: string
+  businessType: BusinessType
+  pageSize: number
+}) {
   return request('/executor/list', {
     params
   })
@@ -88,6 +90,7 @@ export async function addExecutor(params: Omit<API.ExecutorItem, 'ID'>) {
     data: params
   })
 }
+
 /** 更新执行者 */
 export async function updateExecutor(params: Omit<API.ExecutorItem>) {
   return request('/executor/update', {
@@ -95,6 +98,7 @@ export async function updateExecutor(params: Omit<API.ExecutorItem>) {
     data: params
   })
 }
+
 /** 删除执行者 */
 export async function delExecutor(params: { ID: string }) {
   return request('/executor/delete', {