Przeglądaj źródła

fix: 调整执行者列表members传值模式

fix: 编辑执行者切换用户模式报错
lanjianrong 3 lat temu
rodzic
commit
21fc698891

+ 21 - 32
src/pages/Business/Process/components/MemberItem.tsx

@@ -4,7 +4,7 @@ import consts from '@/utils/consts'
 import { isArray } from '@/utils/is'
 import { useRequest } from '@umijs/max'
 import { Select, TreeSelect } from 'antd'
-import { useEffect, useState } from 'react'
+import { useState } from 'react'
 
 enum AuditType {
   ACCOUNT = 'account',
@@ -12,11 +12,6 @@ enum AuditType {
   ROLE = 'role'
 }
 
-const auditAbbr = {
-  a_: AuditType.ACCOUNT,
-  i_: AuditType.INSTITUTION,
-  r_: AuditType.ROLE
-}
 const auditTypeOptions = [
   { label: '用户', value: AuditType.ACCOUNT },
   { label: '单位角色', value: AuditType.INSTITUTION }
@@ -24,14 +19,20 @@ const auditTypeOptions = [
 ]
 
 type MemberItemProps = {
-  value: string[]
-  onChange: (value?: string) => void
+  value: {
+    type: AuditType
+    value: string | string[]
+  }
+  onChange: (value?: { type: AuditType; value: string[] }) => void
 }
 
 type iState = {
   auditType: AuditType
   memberOptions: string[]
-  members: string[]
+  members: {
+    type: AuditType
+    value: string | string[]
+  }
 }
 
 const filterTreeNodes = (mode: AuditType, tree: string[]) =>
@@ -40,14 +41,14 @@ const filterTreeNodes = (mode: AuditType, tree: string[]) =>
     // 重新拼装id, 根据AuditType加上不同的前缀(后端同步前缀格式)
     switch (mode) {
       case AuditType.ACCOUNT:
-        newItem.value = `a_${item.ID}`
-        newItem.key = `a_${item.ID}`
+        newItem.value = item.ID
+        newItem.key = item.ID
         break
       case AuditType.INSTITUTION:
-        newItem.value = `i_${item.institutionID}`
+        newItem.value = item.institutionID
         break
       default:
-        newItem.value = `r_${item.ID}`
+        newItem.value = item.ID
         break
     }
     if (isArray(item.children)) {
@@ -59,19 +60,10 @@ const filterTreeNodes = (mode: AuditType, tree: string[]) =>
   })
 const MemberItem: React.FC<MemberItemProps> = ({ value, onChange }) => {
   const [state, setState] = useState<iState>({
-    auditType: AuditType.ACCOUNT,
+    auditType: value?.type || AuditType.ACCOUNT,
     memberOptions: [],
     members: value
   })
-  useEffect(() => {
-    const findAuditType = () => {
-      const abbr = value?.[0].slice(0, 2)
-      if (auditAbbr[abbr]) {
-        setState({ ...state, auditType: auditAbbr[abbr] })
-      }
-    }
-    findAuditType()
-  }, [])
   useRequest(
     () => {
       let requestFn: Nullable<() => Promise<void>> = null
@@ -90,10 +82,6 @@ const MemberItem: React.FC<MemberItemProps> = ({ value, onChange }) => {
     {
       refreshDeps: [state.auditType],
       onSuccess(data: { items: any[] }) {
-        console.log(
-          filterTreeNodes(state.auditType, state.auditType === AuditType.ACCOUNT ? data : data.items)
-        )
-
         setState({
           ...state,
           memberOptions: filterTreeNodes(
@@ -106,11 +94,12 @@ const MemberItem: React.FC<MemberItemProps> = ({ value, onChange }) => {
   )
   const toggleChange = value => {
     if (value) {
-      onChange?.(value)
+      onChange?.({ type: state.auditType, value })
     }
-    setState({ ...state, members: value })
+    setState({ ...state, members: { ...state.members, value } })
   }
-  const toggleAuditType = (value: AuditType) => setState({ ...state, auditType: value, members: [] })
+  const toggleAuditType = (value: AuditType) =>
+    setState({ ...state, auditType: value, members: { type: value, value: [] } })
 
   return (
     <div>
@@ -122,7 +111,7 @@ const MemberItem: React.FC<MemberItemProps> = ({ value, onChange }) => {
       />
       {state.auditType === AuditType.ACCOUNT ? (
         <TreeSelect
-          value={state.members}
+          value={state.members?.value.map(item => item.ID)}
           treeData={state.memberOptions}
           onChange={toggleChange}
           multiple
@@ -131,7 +120,7 @@ const MemberItem: React.FC<MemberItemProps> = ({ value, onChange }) => {
         />
       ) : (
         <Select
-          value={state.members}
+          value={state.members?.value.map(item => item.ID)}
           options={state.memberOptions}
           onChange={toggleChange}
           fieldNames={{ label: 'title' }}

+ 1 - 1
src/pages/Business/Process/index.tsx

@@ -51,7 +51,7 @@ const Process = () => {
       ellipsis: true,
       renderText: (_, record) => (
         <div className="children:mx-1">
-          {record?.members.map(item => (
+          {record?.members.value.map(item => (
             <span key={item?.ID}>{item?.name}</span>
           ))}
         </div>

+ 4 - 1
src/services/api/typings.d.ts

@@ -426,7 +426,10 @@ declare namespace API {
     /** 审批模式: user-指定用户, xx-会签, yy-或签 */
     approvalType?: 'user'
     step?: string
-    members?: string[]
+    members?: {
+      type: string
+      value: string | string[]
+    }
     businessType?: string
   }
 }