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

Merge branch 'master' of http://119.23.210.103:3000/ZhuJiaHao/zdqy_firm_former

CHINAMI-P698360\Administrator 2 недель назад
Родитель
Сommit
ea63e5b506
2 измененных файлов с 126 добавлено и 34 удалено
  1. 40 22
      src/views/platform/risk/riskPeopleTableV3.vue
  2. 86 12
      src/views/platform/risk/riskV3.vue

+ 40 - 22
src/views/platform/risk/riskPeopleTableV3.vue

@@ -30,6 +30,7 @@
             readonly-text="text"
             :disabled="!isBianZhiRen"
             :multiple="false"
+            @change="(val) => onDeptChange(row, val)"
           />
         </template>
       </el-table-column>
@@ -86,6 +87,10 @@ export default {
       type: String,
       default: ''
     },
+    peopleDeptInfo: {
+      type: Array,
+      default: () => []
+    },
     culWays: {
       type: Object,
       default: () => ({})
@@ -106,32 +111,25 @@ export default {
     }
   },
   computed: {
-    // 判断当前用户是否为编制人
     isBianZhiRen() {
       return this.userId === this.bianZhiRen
     }
   },
-  watch: {
-    peopleIds: {
-      handler(val) {
-        this.getPeopleList()
-      }
-      // immediate: true
-    }
-  },
   mounted() {
+    // 初始加载,但实际数据可能还没传过来,不过没关系
     this.getPeopleList()
-    // this.initSortable()
   },
   methods: {
+    // 对外暴露的刷新方法,供父组件在数据完全准备好后调用
+    async refresh() {
+      await this.getPeopleList()
+    },
     sortableEnd(evt) {
       const { oldIndex, newIndex } = evt
-      // 处理数据交换
       const currRow = this.tableList.splice(oldIndex, 1)[0]
       this.tableList.splice(newIndex, 0, currRow)
       console.log('排序已变更', this.tableList)
     },
-    // 获取人员部门
     getPersonPosition(id) {
       const userList = this.$store.getters.userList
       const bianzhiUserid = userList.find((i) => i.userId === id)
@@ -171,9 +169,22 @@ export default {
         return result
       }
     },
+    onDeptChange(row, newDeptId) {
+      row.bian_zhi_bu_men_ = newDeptId
+      const newDeptInfo = this.tableList.map(item => ({
+        uid: item.bian_zhi_ren_,
+        did: item.bian_zhi_bu_men_
+      }))
+      this.$emit('update-people-dept-info', newDeptInfo)
+    },
+    getCurrentDeptInfo() {
+      return this.tableList.map(item => ({
+        uid: item.bian_zhi_ren_,
+        did: item.bian_zhi_bu_men_
+      }))
+    },
     async getPeopleList() {
       this.isZuZhang = this.userId === this.params.zu_chang_id_
-      console.log('watch peopleIds triggered, new value:');
       if (this.peopleIds) {
         const {
           variables: { data }
@@ -182,16 +193,26 @@ export default {
           params: [this.params.id_]
         })
         this.detail = data
-        console.log('detail-------------------------', this.detail);
+        
         const people = this.peopleIds.split(',')
         if (people.length > 0) {
+          const deptMap = new Map()
+          if (this.peopleDeptInfo && this.peopleDeptInfo.length) {
+            this.peopleDeptInfo.forEach(item => {
+              deptMap.set(item.uid, item.did)
+            })
+          }
           this.tableList = people.map((item) => {
-            
+            let dept = deptMap.get(item)
+            if (!dept) {
+              dept = this.detail.find((i) => i.bian_zhi_ren_ === item)?.bian_zhi_bu_men_
+            }
+            if (!dept) {
+              dept = this.getPersonPosition(item)
+            }
             return {
               bian_zhi_ren_: item,
-              bian_zhi_bu_men_:
-                this.detail.find((i) => i.bian_zhi_ren_ === item)
-                  ?.bian_zhi_bu_men_ || this.getPersonPosition(item),
+              bian_zhi_bu_men_: dept,
               shi_fou_guo_shen_: this.getPersonStatus(item),
               feng_xian_shu_: this.getRiskCount(item),
               feng_xian_c_: this.getRiskCategory(item)
@@ -226,7 +247,6 @@ export default {
           }
           console.log(params)
           await this.$common.request('update', params)
-          // 发消息给评估人退回消息
           await this.$common.sendMsg({
             subject: '风险评估与措施表单退回提醒',
             content: `您有一份评估与措施表单已退回,请前往-风险控制-风险评估与措施页面重新提交,计划编号:${this.params.ji_hua_bian_hao_},组长:${this.params.zu_chang_}。`,
@@ -234,11 +254,9 @@ export default {
             canreplay: '0',
             skipTypeMsg: JSON.stringify({
               skipType: 3,
-              pathInfo: '/tygl/fxkzV2/fxpgycslb' // 路由
+              pathInfo: '/tygl/fxkzV2/fxpgycslb'
             })
           })
-          console.log('退回提醒成功')
-          console.log('退回成功')
           this.$message({
             type: 'success',
             message: '退回成功!'

+ 86 - 12
src/views/platform/risk/riskV3.vue

@@ -301,9 +301,11 @@
             ref="RiskPeopleTableRef"
             :params="params"
             :people-ids="infoFxssbData.ping_gu_ren_yuan_"
+            :people-dept-info="infoFxssbData.ping_gu_bu_men_"
             :cul-ways="culWays"
-            :bian-zhi-ren="infoFxssbData.bian_zhi_ren_"  
+            :bian-zhi-ren="infoFxssbData.bian_zhi_ren_"
             @goBack="goRefresh"
+            @update-people-dept-info="handleUpdatePeopleDeptInfo"
           />
         </div>
       </div>
@@ -434,7 +436,8 @@ export default {
         shi_wu_shuo_ming_: '',
         ping_gu_ren_yuan_: '',
         ji_hua_bian_hao_: '',
-        ji_suan_fang_shi_: ''
+        ji_suan_fang_shi_: '',
+        ping_gu_bu_men_: []   // 新增字段,存储 [{uid: 'xxx', did: 'yyy'}, ...]
       },
       initWidth: '1280px',
       isEdit: false,
@@ -510,6 +513,14 @@ export default {
           }
         }
       }
+    },
+    // 监听评估人员变化,同步更新部门映射(保留已有部门)
+    'infoFxssbData.ping_gu_ren_yuan_': {
+      handler(newVal, oldVal) {
+        if (!this.isEdit && newVal !== oldVal) {
+          this.syncPeopleDeptInfo()
+        }
+      }
     }
   },
 
@@ -526,6 +537,35 @@ export default {
     }
   },
   methods: {
+    // 同步评估人员与部门映射(用于新增时)
+    syncPeopleDeptInfo() {
+      const userIds = this.infoFxssbData.ping_gu_ren_yuan_
+        ? this.infoFxssbData.ping_gu_ren_yuan_.split(',').filter(id => id)
+        : []
+      const currentMap = this.infoFxssbData.ping_gu_bu_men_ || []
+      const newMap = userIds.map(uid => {
+        const existing = currentMap.find(item => item.uid === uid)
+        if (existing) {
+          return existing
+        } else {
+          return { uid, did: this.getPersonPosition(uid) || '' }
+        }
+      })
+      this.infoFxssbData.ping_gu_bu_men_ = newMap
+    },
+    // 子组件部门更新事件
+    handleUpdatePeopleDeptInfo(newDeptInfo) {
+      this.infoFxssbData.ping_gu_bu_men_ = newDeptInfo
+    },
+    // 在保存前主动从子组件同步最新的部门映射,确保数据一致
+    syncDeptInfoFromChild() {
+      if (this.$refs.RiskPeopleTableRef) {
+        const latestDeptInfo = this.$refs.RiskPeopleTableRef.getCurrentDeptInfo()
+        if (latestDeptInfo) {
+          this.infoFxssbData.ping_gu_bu_men_ = latestDeptInfo
+        }
+      }
+    },
     // 获取最新数据
     async getNewData() {
       const {
@@ -565,7 +605,7 @@ export default {
           type: 'warning'
         })
           .then(async () => {
-            // 提交前自动保存
+            // 提交前自动保存,并先同步部门映射
             await this.goSave()
             // 判断每个评估人是否已完成识别项
             const pinGuRenNum = this.Ids.length
@@ -870,9 +910,14 @@ export default {
     },
     async goAdd() {
       try {
+        // 将部门映射数组转为 JSON 字符串
+        const toSave = { ...this.infoFxssbData }
+        if (toSave.ping_gu_bu_men_) {
+          toSave.ping_gu_bu_men_ = JSON.stringify(toSave.ping_gu_bu_men_)
+        }
         const addParamsRecord = {
           tableName: 't_fxpgjlb2',
-          paramWhere: [this.infoFxssbData]
+          paramWhere: [toSave]
         }
         const {
           variables: { cont }
@@ -891,7 +936,11 @@ export default {
         // 先检查状态
         await this.getIsFinish()
 
-        // 更新主表
+        // 更新主表,部门映射转为 JSON 字符串
+        const toUpdate = { ...this.infoFxssbData }
+        if (toUpdate.ping_gu_bu_men_) {
+          toUpdate.ping_gu_bu_men_ = JSON.stringify(toUpdate.ping_gu_bu_men_)
+        }
         const updateParamsRecord = {
           tableName: 't_fxpgjlb2',
           updList: [
@@ -899,7 +948,7 @@ export default {
               where: {
                 id_: this.params.id_
               },
-              param: this.infoFxssbData
+              param: toUpdate
             }
           ]
         }
@@ -957,6 +1006,8 @@ export default {
     },
     async goSave(flag) {
       try {
+        // 保存前同步最新的部门映射
+        this.syncDeptInfoFromChild()
         this.checkRequired()
         if (this.isEdit) {
           await this.goEdit(flag)
@@ -990,7 +1041,7 @@ export default {
       }
       await this.init()
       if (this.$refs.RiskPeopleTableRef) {
-        await this.$refs.RiskPeopleTableRef.getPeopleList()
+        await this.$refs.RiskPeopleTableRef.refresh()  // 改为调用 refresh 方法
       }
       this.loading = false
     },
@@ -1052,14 +1103,29 @@ export default {
     async init() {
       this.isEdit = !!(this.params && this.params.id_)
       if (this.isEdit) {
-        this.infoFxssbData = this.params
+        // 深拷贝 params,避免直接修改
+        this.infoFxssbData = JSON.parse(JSON.stringify(this.params))
+        // 从数据库获取最新的部门映射,避免外部传入旧数据
+        const latestData = await this.getNewData()
+        if (latestData.length && latestData[0].ping_gu_bu_men_) {
+          // 用最新的部门映射覆盖
+          this.infoFxssbData.ping_gu_bu_men_ = latestData[0].ping_gu_bu_men_
+        }
+        // 解析部门映射 JSON
+        if (this.infoFxssbData.ping_gu_bu_men_ && typeof this.infoFxssbData.ping_gu_bu_men_ === 'string') {
+          try {
+            this.infoFxssbData.ping_gu_bu_men_ = JSON.parse(this.infoFxssbData.ping_gu_bu_men_)
+          } catch (e) {
+            this.infoFxssbData.ping_gu_bu_men_ = []
+          }
+        } else if (!this.infoFxssbData.ping_gu_bu_men_) {
+          this.infoFxssbData.ping_gu_bu_men_ = []
+        }
         console.log('infoFxssbData', this.infoFxssbData)
         this.preParams = JSON.parse(JSON.stringify(this.params))
-        this.isPingGuRen =
-          this.params.ping_gu_ren_yuan_.indexOf(this.userId) >= 0
+        this.isPingGuRen = this.params.ping_gu_ren_yuan_.indexOf(this.userId) >= 0
         this.isZuZhang = this.userId === this.infoFxssbData.zu_chang_id_
-        this.isFinished =
-          this.params && this.params.shi_fou_guo_shen_ === '已完成'
+        this.isFinished = this.params && this.params.shi_fou_guo_shen_ === '已完成'
         this.readonly = !!(!this.isZuZhang || this.isFinished)
         if (this.params.ping_gu_ren_yuan_) {
           this.Ids = this.params.ping_gu_ren_yuan_.split(',')
@@ -1067,6 +1133,12 @@ export default {
           this.Ids = []
         }
         await this.showAlert()
+
+        // 强制子组件使用最新的部门映射重新加载(关键修复)
+        await this.$nextTick()
+        if (this.$refs.RiskPeopleTableRef) {
+          await this.$refs.RiskPeopleTableRef.refresh()
+        }
       } else {
         const { positions } = this.$store.getters.userInfo
         // 默认编制部门是主部门,没有主部门默认第一个部门
@@ -1096,6 +1168,8 @@ export default {
           this.infoFxssbData.shi_wu_shuo_ming_ = `年度:${this.infoFxssbData.nian_du_};组长:${this.infoFxssbData.zu_chang_};评估开始日期:${this.infoFxssbData.kai_shi_ri_qi_};风险类型:${this.infoFxssbData.feng_xian_lei_xin}`
         })
         this.infoFxssbData.ji_suan_fang_shi_ = Object.keys(this.culWays)[0]
+        // 新增模式默认部门映射为空数组,等评估人员选择后再同步
+        this.infoFxssbData.ping_gu_bu_men_ = []
       }
     }
   }