Переглянути джерело

fix: 个人/协作标签偶尔存在标签数据为空的bug

lanjianrong 5 роки тому
батько
коміт
05ffb18d19

+ 34 - 30
src/pages/Customer/Client/index.jsx

@@ -42,6 +42,11 @@ const Client = props => {
     tagCooperationIds: []
   })
 
+  const [state, setState] = useState({
+    params: {},
+    orderIds: []
+  })
+
   const tag = useMemo(() => {
     const personTagMap = {}
     const teamTagMap = {}
@@ -80,15 +85,29 @@ const Client = props => {
     return { personTagMap, teamTagMap, personOptions, teamOptions }
   }, [loading])
 
+  // 默认刷新一次列表请求数据
+  useEffect(() => {
+    if (!personTags.length) {
+      dispatch({
+        type: 'client/fetchPersonTags',
+        payload: { tagType: TagTypeEnum.PERSONTAG, tagColumn: TagDataTypeEnum.CLIENT }
+      })
+    }
+    if (!teamTags.length) {
+      dispatch({
+        type: 'client/fetchTeamTags',
+        payload: { tagType: TagTypeEnum.TEAMTAG, tagColumn: TagDataTypeEnum.CLIENT }
+      })
+    }
+    if (shouldUpdate) {
+      tRef.current.reload()
+    }
+  }, [shouldUpdate])
+
   const toolbarOptionsChange = (type, ids) => {
     setTagState({ ...tagState, [type]: ids })
   }
 
-  const [state, setState] = useState({
-    params: {},
-    orderIds: []
-  })
-
   const [defaultPermAuthCache] = getPermAuthCache(PermDataTypeEunm.CUSTOMER)
   // 重置到默认值,包括表单
   const initData = () => {
@@ -153,7 +172,8 @@ const Client = props => {
       render: (clientName, record) => (
         <span
           onClick={() => showDrawer(record.id)}
-          className="text-primary cursor-pointer hover:text-[#967bbd]">
+          className="text-primary cursor-pointer hover:text-[#967bbd]"
+        >
           {clientName}
         </span>
       ),
@@ -270,7 +290,8 @@ const Client = props => {
             tagType={TagTypeEnum.PERSONTAG}
             tagColumn={TagDataTypeEnum.CLIENT}
             checkCallBack={refreshData}
-            modeType={LabelModeType.column}>
+            modeType={LabelModeType.column}
+          >
             <Add theme="filled" size="20" fill="#868e96" className="cursor-pointer" />
           </PersonLabel>
         </div>
@@ -307,7 +328,8 @@ const Client = props => {
             tagType={TagTypeEnum.TEAMTAG}
             tagColumn={TagDataTypeEnum.CLIENT}
             checkCallBack={refreshData}
-            modeType={LabelModeType.column}>
+            modeType={LabelModeType.column}
+          >
             <Add theme="filled" size="20" fill="#868e96" className="cursor-pointer" />
           </PersonLabel>
         </div>
@@ -410,26 +432,6 @@ const Client = props => {
     }
   }
 
-  // 默认刷新一次列表请求数据
-  useEffect(() => {
-    // initData()
-    if (!personTags.length) {
-      dispatch({
-        type: 'client/fetchTags',
-        payload: { tagType: TagTypeEnum.PERSONTAG, tagColumn: TagDataTypeEnum.CLIENT }
-      })
-    }
-    if (!teamTags.length) {
-      dispatch({
-        type: 'client/fetchTags',
-        payload: { tagType: TagTypeEnum.TEAMTAG, tagColumn: TagDataTypeEnum.CLIENT }
-      })
-    }
-    if (shouldUpdate) {
-      tRef.current.reload()
-    }
-  }, [shouldUpdate])
-
   const handleSearch = value => {
     tRef.current.reset()
     setState({ ...state, params: { ...state.params, search: value } })
@@ -478,7 +480,8 @@ const Client = props => {
             tagType={TagTypeEnum.PERSONTAG}
             tagColumn={TagDataTypeEnum.CLIENT}
             checkCallBack={toolbarOptionsChange}
-            modeType={LabelModeType.toolbar}>
+            modeType={LabelModeType.toolbar}
+          >
             {tagState.tagIds.length ? (
               <Button>
                 {tagState.tagIds.map(item => (
@@ -503,7 +506,8 @@ const Client = props => {
             tagType={TagTypeEnum.TEAMTAG}
             tagColumn={TagDataTypeEnum.CLIENT}
             checkCallBack={toolbarOptionsChange}
-            modeType={LabelModeType.toolbar}>
+            modeType={LabelModeType.toolbar}
+          >
             {tagState.tagCooperationIds.length ? (
               <Button>
                 {tagState.tagCooperationIds.map(item => (

+ 28 - 7
src/pages/Customer/Client/model.js

@@ -1,8 +1,5 @@
 import consts from '@/consts'
-import {
-  LabelStatusColorMap,
-  TagTypeEnum
-} from '@/pages/Customer/Company/components/PersonLabel/const'
+import { LabelStatusColorMap } from '@/pages/Customer/Company/components/PersonLabel/const'
 import { queryTagList } from '@/services/customer'
 
 export default {
@@ -15,21 +12,45 @@ export default {
   },
   // 用于处理异步操作和业务逻辑,由action触发,但不能修改state
   effects: {
-    *fetchTags({ payload }, { call, put }) {
+    *fetchPersonTags({ payload }, { call, put }) {
       const response = yield call(queryTagList, payload)
       if (response?.code === consts.RET_CODE.SUCCESS) {
         const { tagType } = payload
         yield put({
           type: 'changeState',
           payload: {
-            key: tagType === TagTypeEnum.PERSONTAG ? 'personTags' : 'teamTags',
+            key: 'personTags',
             data: response.data || []
           }
         })
         yield put({
           type: 'changeState',
           payload: {
-            key: tagType === TagTypeEnum.PERSONTAG ? 'personTagColorMap' : 'teamTagColorMap',
+            key: 'personTagColorMap',
+            data:
+              response.data?.reduce((curr, prev, idx) => {
+                const item = { ...curr, [prev.id]: LabelStatusColorMap[tagType][idx] }
+                return item
+              }, {}) || {}
+          }
+        })
+      }
+    },
+    *fetchTeamTags({ payload }, { call, put }) {
+      const response = yield call(queryTagList, payload)
+      if (response?.code === consts.RET_CODE.SUCCESS) {
+        const { tagType } = payload
+        yield put({
+          type: 'changeState',
+          payload: {
+            key: 'teamTags',
+            data: response.data || []
+          }
+        })
+        yield put({
+          type: 'changeState',
+          payload: {
+            key: 'teamTagColorMap',
             data:
               response.data?.reduce((curr, prev, idx) => {
                 const item = { ...curr, [prev.id]: LabelStatusColorMap[tagType][idx] }

+ 36 - 29
src/pages/Customer/Company/index.jsx

@@ -40,6 +40,29 @@ const Company = props => {
     tagCooperationIds: []
   })
 
+  const [state, setState] = useState({
+    params: {},
+    orderIds: []
+  })
+
+  useEffect(() => {
+    if (!personTags.length) {
+      dispatch({
+        type: 'company/fetchPersonTags',
+        payload: { tagType: TagTypeEnum.PERSONTAG, tagColumn: TagDataTypeEnum.COMPANY }
+      })
+    }
+    if (!teamTags.length) {
+      dispatch({
+        type: 'company/fetchTeamTags',
+        payload: { tagType: TagTypeEnum.TEAMTAG, tagColumn: TagDataTypeEnum.COMPANY }
+      })
+    }
+    if (shouldUpdate) {
+      tRef.current.reload()
+    }
+  }, [shouldUpdate])
+
   const tag = useMemo(() => {
     const personTagMap = {}
     const teamTagMap = {}
@@ -87,10 +110,7 @@ const Company = props => {
     return { personTagMap, teamTagMap, natureMap, personOptions, teamOptions }
   }, [loading])
 
-  const [state, setState] = useState({
-    params: {},
-    orderIds: []
-  })
+  const [defaultPermAuthCache] = getPermAuthCache(PermDataTypeEunm.CUSTOMER)
 
   // 重置到默认值,包括表单
   const initData = () => {
@@ -110,24 +130,6 @@ const Company = props => {
       initData()
     }
   }
-
-  useEffect(() => {
-    if (!personTags.length) {
-      dispatch({
-        type: 'company/fetchTags',
-        payload: { tagType: TagTypeEnum.PERSONTAG, tagColumn: TagDataTypeEnum.COMPANY }
-      })
-    }
-    if (!teamTags.length) {
-      dispatch({
-        type: 'company/fetchTags',
-        payload: { tagType: TagTypeEnum.TEAMTAG, tagColumn: TagDataTypeEnum.COMPANY }
-      })
-    }
-    if (shouldUpdate) {
-      tRef.current.reload()
-    }
-  }, [shouldUpdate])
   const handleSearch = value => {
     tRef.current.reset()
     setState({ ...state, params: { ...state.params, search: value } })
@@ -165,7 +167,8 @@ const Company = props => {
       render: (companyName, record) => (
         <span
           onClick={() => showDrawer(record.id)}
-          className="text-primary cursor-pointer hover:text-[#967bbd]">
+          className="text-primary cursor-pointer hover:text-[#967bbd]"
+        >
           {companyName}
         </span>
       )
@@ -210,7 +213,8 @@ const Company = props => {
             tagType={TagTypeEnum.PERSONTAG}
             tagColumn={TagDataTypeEnum.COMPANY}
             checkCallBack={refreshData}
-            modeType={LabelModeType.column}>
+            modeType={LabelModeType.column}
+          >
             <Add theme="filled" size="20" fill="#868e96" className="cursor-pointer" />
           </PersonLabel>
         </div>
@@ -241,7 +245,8 @@ const Company = props => {
             tagType={TagTypeEnum.TEAMTAG}
             tagColumn={TagDataTypeEnum.COMPANY}
             checkCallBack={refreshData}
-            modeType={LabelModeType.column}>
+            modeType={LabelModeType.column}
+          >
             <Add theme="filled" size="20" fill="#868e96" className="cursor-pointer" />
           </PersonLabel>
         </div>
@@ -390,8 +395,6 @@ const Company = props => {
     requestSuccess && refreshData()
   }
 
-  const [defaultPermAuthCache] = getPermAuthCache(PermDataTypeEunm.CUSTOMER)
-
   const renderTableAlert = ({ selectedRowKeys }) => {
     return (
       <div className="flex flex-row">
@@ -400,7 +403,8 @@ const Company = props => {
             tagType={TagTypeEnum.PERSONTAG}
             tagColumn={TagDataTypeEnum.COMPANY}
             checkCallBack={toolbarOptionsChange}
-            modeType={LabelModeType.toolbar}>
+            modeType={LabelModeType.toolbar}
+          >
             {tagState.tagIds.length ? (
               <Button>
                 {tagState.tagIds.map(item => (
@@ -425,7 +429,8 @@ const Company = props => {
             tagType={TagTypeEnum.TEAMTAG}
             tagColumn={TagDataTypeEnum.COMPANY}
             checkCallBack={toolbarOptionsChange}
-            modeType={LabelModeType.toolbar}>
+            modeType={LabelModeType.toolbar}
+          >
             {tagState.tagCooperationIds.length ? (
               <Button>
                 {tagState.tagCooperationIds.map(item => (
@@ -453,6 +458,8 @@ const Company = props => {
     )
   }
 
+  if (!personTags?.length || !teamTags?.length) return null
+
   return (
     <div className={styles.companyContent}>
       <BasicTable

+ 28 - 7
src/pages/Customer/Company/model.js

@@ -1,8 +1,5 @@
 import consts from '@/consts'
-import {
-  LabelStatusColorMap,
-  TagTypeEnum
-} from '@/pages/Customer/Company/components/PersonLabel/const'
+import { LabelStatusColorMap } from '@/pages/Customer/Company/components/PersonLabel/const'
 import { queryNatures, queryTagList } from '@/services/customer'
 
 export default {
@@ -16,21 +13,45 @@ export default {
   },
   // 用于处理异步操作和业务逻辑,由action触发,但不能修改state
   effects: {
-    *fetchTags({ payload }, { call, put }) {
+    *fetchPersonTags({ payload }, { call, put }) {
       const response = yield call(queryTagList, payload)
       if (response?.code === consts.RET_CODE.SUCCESS) {
         const { tagType } = payload
         yield put({
           type: 'changeState',
           payload: {
-            key: tagType === TagTypeEnum.PERSONTAG ? 'personTags' : 'teamTags',
+            key: 'personTags',
             data: response.data || []
           }
         })
         yield put({
           type: 'changeState',
           payload: {
-            key: tagType === TagTypeEnum.PERSONTAG ? 'personTagColorMap' : 'teamTagColorMap',
+            key: 'personTagColorMap',
+            data:
+              response.data?.reduce((curr, prev, idx) => {
+                const item = { ...curr, [prev.id]: LabelStatusColorMap[tagType][idx] }
+                return item
+              }, {}) || {}
+          }
+        })
+      }
+    },
+    *fetchTeamTags({ payload }, { call, put }) {
+      const response = yield call(queryTagList, payload)
+      if (response?.code === consts.RET_CODE.SUCCESS) {
+        const { tagType } = payload
+        yield put({
+          type: 'changeState',
+          payload: {
+            key: 'teamTags',
+            data: response.data || []
+          }
+        })
+        yield put({
+          type: 'changeState',
+          payload: {
+            key: 'teamTagColorMap',
             data:
               response.data?.reduce((curr, prev, idx) => {
                 const item = { ...curr, [prev.id]: LabelStatusColorMap[tagType][idx] }