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

1、新增替换头像即时同步;2、删除证件附件上传限制;3、解决覆盖问题

songxy 9 місяців тому
батько
коміт
9ccd5eed02

BIN
client/src/assets/imgs/OA/mine/girl.png


+ 10 - 1
client/src/store/modules/user.ts

@@ -64,6 +64,13 @@ export const useUserStore = defineStore('admin-user', {
       wsCache.set(CACHE_KEY.USER, userInfo)
       wsCache.set(CACHE_KEY.ROLE_ROUTERS, userInfo.menus)
     },
+    async updateUserInfoAction(userInfo) {
+      delete userInfo.isSetUser
+      this.user = userInfo.user
+      const _userInfo = wsCache.get(CACHE_KEY.USER)
+      Object.assign(_userInfo, userInfo)
+      wsCache.set(CACHE_KEY.USER, _userInfo)
+    },
     async loginOut() {
       await loginOut()
       removeToken()
@@ -77,7 +84,9 @@ export const useUserStore = defineStore('admin-user', {
       this.user = {
         id: 0,
         avatar: '',
-        nickname: ''
+        nickname: '',
+        deptId: '',
+        deptName: ''
       }
     }
   }

+ 1 - 0
client/src/views/OaSystem/mineCenter/components/CopperModal.vue

@@ -173,6 +173,7 @@ function handlerToolbar(event: string, arg?: number) {
 }
 
 async function handleOk() {
+  if (!previewSource.value) return
   const blob = dataURLtoBlob(previewSource.value)
   emit('uploadSuccess', { source: previewSource.value, data: blob, filename: filename })
 }

+ 15 - 10
client/src/views/OaSystem/mineCenter/components/leftInfo.vue

@@ -3,7 +3,7 @@
     <img class="leftImgs" src="@/assets/imgs/OA/mine/zsyg.png" alt="" />
 
     <div class="headImgs">
-      <ElAvatar :src="avatar" alt="" class="userIcon" />
+      <ElAvatar :src="user.user.avatar ?? avatarImg" alt="" class="userIcon" />
       <img
         @click="imgsChange()"
         class="imgsChange"
@@ -16,7 +16,8 @@
       <div class="contentBox">
         <p
           >{{ userName }}
-          <img src="@/assets/imgs/OA/mine/man.png" alt="" />
+          <img v-if="data?.sex == '1'" src="@/assets/imgs/OA/mine/man.png" alt="" />
+          <img v-else src="@/assets/imgs/OA/mine/girl.png" alt="" />
         </p>
         <h4>
           <span>工号:{{ data?.loginName }}</span>
@@ -63,20 +64,18 @@
 import CopperModal from './CopperModal.vue'
 import avatarImg from '@/assets/imgs/avatar.gif'
 import { uploadAvatar } from '@/api/system/user/profile'
-import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
 import { useQuery } from '@tanstack/vue-query'
 import { getRecordsDetail } from '@/api/oa/staffRecords'
 import { dateFormatter2 } from '@/utils/formatTime'
+import { useUserStoreWithOut } from '@/store/modules/user'
 import { DICT_TYPE, getDictLabel } from '@/utils/dict'
 
-const { wsCache } = useCache()
-const user = wsCache.get(CACHE_KEY.USER)
+const userStore = useUserStoreWithOut()
+const user = userStore.$state
 const message = useMessage()
-const avatar = user.user.avatar ? user.user.avatar : avatarImg
 const sourceValue = ref('')
 const cropperModelRef = ref()
 const userName = user.user.nickname ? user.user.nickname : 'Admin'
-
 const userId = user.user.id // 当前登录的编号
 
 const { data } = useQuery(['fetch-staff-detail-left', userId], async () => {
@@ -116,14 +115,16 @@ const contentList = ref([
 ])
 //更换头像点击事件
 const imgsChange = async () => {
-  sourceValue.value = avatar
+  sourceValue.value = user.user.avatar ?? avatarImg
   cropperModelRef.value.openModal()
 }
-const handleUploadSuccess = async ({ source, data, filename }) => {
+const handleUploadSuccess = async ({ data }) => {
   await uploadAvatar({ avatarFile: data }).then((res) => {
     if (res.data) {
       cropperModelRef.value.closeModal()
       message.success('上传成功!')
+      user.user.avatar = res.data
+      userStore.updateUserInfoAction(toRaw(user))
     }
   })
 }
@@ -194,7 +195,11 @@ onMounted(() => {})
         img {
           position: absolute;
           top: 0;
-          right: -17px;
+          bottom: 0px;
+          margin: auto;
+          width: 16px;
+          height: 16px;
+          right: -18px;
         }
       }
 

+ 18 - 25
client/src/views/OaSystem/mineCenter/rightChild/index.ts

@@ -12,7 +12,7 @@ export const formConfigList = [
           {
             required: true,
             message: '出生日期不能为空',
-            trigger: 'blur'
+            trigger: 'change'
           }
         ]
       },
@@ -24,7 +24,7 @@ export const formConfigList = [
           {
             required: true,
             message: '民族不能为空',
-            trigger: 'blur'
+            trigger: 'change'
           }
         ]
       },
@@ -35,7 +35,7 @@ export const formConfigList = [
           {
             required: true,
             message: '籍贯不能为空',
-            trigger: 'blur'
+            trigger: 'change'
           }
         ]
       },
@@ -47,7 +47,7 @@ export const formConfigList = [
           {
             required: true,
             message: '政治面貌不能为空',
-            trigger: 'blur'
+            trigger: 'change'
           }
         ],
         options: [
@@ -73,7 +73,7 @@ export const formConfigList = [
           {
             required: true,
             message: '婚姻状况不能为空',
-            trigger: 'blur'
+            trigger: 'change'
           }
         ],
         options: [
@@ -99,7 +99,7 @@ export const formConfigList = [
           {
             required: true,
             message: '健康状况不能为空',
-            trigger: 'blur'
+            trigger: 'change'
           }
         ],
         options: []
@@ -112,7 +112,7 @@ export const formConfigList = [
           {
             required: true,
             message: '参加工作时间不能为空',
-            trigger: 'blur'
+            trigger: 'change'
           }
         ]
       },
@@ -123,7 +123,7 @@ export const formConfigList = [
           {
             required: true,
             message: '现居住地址不能为空',
-            trigger: 'blur'
+            trigger: 'change'
           }
         ]
       },
@@ -135,7 +135,7 @@ export const formConfigList = [
           {
             required: true,
             message: '户口性质不能为空',
-            trigger: 'blur'
+            trigger: 'change'
           }
         ],
         options: []
@@ -147,7 +147,7 @@ export const formConfigList = [
           {
             required: true,
             message: '户口所在地不能为空',
-            trigger: 'blur'
+            trigger: 'change'
           }
         ]
       },
@@ -175,7 +175,7 @@ export const formConfigList = [
           {
             required: true,
             message: '开户行不能为空',
-            trigger: 'blur'
+            trigger: 'change'
           }
         ]
       },
@@ -186,7 +186,7 @@ export const formConfigList = [
           {
             required: true,
             message: '银行卡号不能为空',
-            trigger: 'blur'
+            trigger: 'change'
           }
         ]
       }
@@ -251,7 +251,7 @@ export const formConfigList = [
           {
             required: true,
             message: '证件号码不能为空',
-            trigger: 'blur'
+            trigger: 'change'
           }
         ]
       },
@@ -263,21 +263,14 @@ export const formConfigList = [
           {
             required: true,
             message: '有效期不能为空',
-            trigger: 'blur'
+            trigger: 'change'
           }
         ]
       },
       {
         name: 'sfyj',
         type: 'upload',
-        title: '上传附件',
-        validate: [
-          {
-            required: true,
-            message: '身份证证件不能为空',
-            trigger: 'blur'
-          }
-        ]
+        title: '上传附件'
       }
     ]
   },
@@ -291,7 +284,7 @@ export const formConfigList = [
           {
             required: true,
             message: '紧急联系人姓名不能为空',
-            trigger: 'blur'
+            trigger: 'change'
           }
         ]
       },
@@ -303,7 +296,7 @@ export const formConfigList = [
           {
             required: true,
             message: '与本人关系不能为空',
-            trigger: 'blur'
+            trigger: 'change'
           }
         ]
       },
@@ -314,7 +307,7 @@ export const formConfigList = [
           {
             required: true,
             message: '紧急联系人电话不能为空',
-            trigger: 'blur'
+            trigger: 'change'
           }
         ]
       }

+ 1 - 1
client/src/views/OaSystem/mineCenter/rightChild/wdda.vue

@@ -309,7 +309,7 @@ const saveTechCertificateList = (newData: any[]) => {
     top: 0px;
     background: #fff;
     padding: 10px 0px;
-    z-index: 9999;
+    z-index: 999;
   }
 
   .my-portrait-item {

+ 4 - 7
client/src/views/OaSystem/oaLayout/menus.vue

@@ -2,7 +2,7 @@
   <div class="oa_menus">
     <div class="menus-user">
       <div class="userImg" @click="userImgClick">
-        <ElAvatar :src="avatar" alt="" class="userIcon" />
+        <ElAvatar :src="user.user.avatar ?? avatarImg" alt="" class="userIcon" />
         <div class="glBox" v-show="data?.sl">
           <span>司龄{{ data?.sl }}年</span>
         </div>
@@ -52,7 +52,6 @@
 import { Icon } from '@/components/Icon'
 import { useRouter } from 'vue-router'
 import { ElMessageBox } from 'element-plus'
-import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
 import avatarImg from '@/assets/imgs/avatar.gif'
 import { useUserStore } from '@/store/modules/user'
 import { useTagsViewStore } from '@/store/modules/tagsView'
@@ -62,19 +61,17 @@ import { getRecordsDetail } from '@/api/oa/staffRecords'
 import { getAttendCount } from '@/api/oa/index'
 import subscribe from '@/utils/Subscribe'
 import request from '@/config/axios'
+import { useUserStoreWithOut } from '@/store/modules/user'
 
 defineOptions({ name: 'Header' })
 const { t } = useI18n()
 
-const { wsCache } = useCache()
-
 const { push, replace } = useRouter()
 const router = useRouter()
-const userStore = useUserStore()
 const tagsViewStore = useTagsViewStore()
 
-const user = wsCache.get(CACHE_KEY.USER)
-const avatar = user.user.avatar ? user.user.avatar : avatarImg
+const userStore = useUserStoreWithOut()
+const user = userStore.$state
 
 const userName = user.user.nickname ? user.user.nickname : 'Admin'
 

+ 0 - 4
client/src/views/OaSystem/personnelManagement/ygdaPage/SchoolTable.vue

@@ -227,10 +227,6 @@ const ruleFields = [
   {
     name: 'xl',
     message: '学历不能为空!'
-  },
-  {
-    name: 'filePath',
-    message: '附件不能为空!'
   }
 ]
 // 保存行

+ 0 - 630
client/src/views/OaSystem/personnelManagement/ygdaPage/index copy.ts

@@ -1,630 +0,0 @@
-import { getDictOptions } from '@/utils/dict'
-import { cloneDeep } from 'lodash-es'
-export const getDictList = () => {
-  const dictOptionsObj: any = {}
-  // 性别
-  const sex = getDictOptions('sex_type')
-  // 状态
-  const state = getDictOptions('staff_state_type')
-  // 在岗职位
-  const drzw = getDictOptions('post_type')
-  // 民族
-  const nation = getDictOptions('nation_type')
-  // 婚姻情况
-  const hyzk = getDictOptions('hy_type')
-  // 户口性质
-  const hkxz = getDictOptions('hk_type')
-  // 政治面貌
-  const zzmm = getDictOptions('polity_type')
-  // 能力等级
-  const nldj = getDictOptions('ABILITY_LEVEL')
-  // 最高学历
-  const zgxl = getDictOptions('xl_type')
-  // 紧急联系人关系
-  const jjlxrgx = getDictOptions('contact_type')
-  //家庭成员关系
-  const jtcygx = getDictOptions('family_type')
-
-  dictOptionsObj.sex = sex
-  dictOptionsObj.state = state
-  dictOptionsObj.drzw = drzw
-  dictOptionsObj.nation = nation
-  dictOptionsObj.hyzk = hyzk
-  dictOptionsObj.hkxz = hkxz
-  dictOptionsObj.zzmm = zzmm
-  dictOptionsObj.nldj = nldj
-  dictOptionsObj.zgxl = zgxl
-  dictOptionsObj.jjlxrgx = jjlxrgx
-  dictOptionsObj.jtcygx = jtcygx
-  return dictOptionsObj
-}
-
-export const formConfigList = [
-  {
-    title: '基本信息',
-    children: [
-      {
-        name: 'nickname',
-        title: '员工名称'
-      },
-      {
-        name: 'sex',
-        title: '性别',
-        type: 'select',
-        options: [
-          {
-            value: 0,
-            label: '女'
-          },
-          {
-            value: 1,
-            label: '男'
-          }
-        ]
-      },
-      {
-        name: 'mobilePhone',
-        title: '手机'
-      },
-      {
-        name: 'state',
-        title: '状态',
-        type: 'select',
-        options: [
-          {
-            value: 1,
-            label: '实习'
-          },
-          {
-            value: 2,
-            label: '试用'
-          },
-          {
-            value: 3,
-            label: '正式'
-          },
-          {
-            value: 4,
-            label: '离职'
-          }
-        ]
-      },
-      {
-        name: 'drzw',
-        title: '在岗职位',
-        type: 'select',
-        options: [
-          {
-            value: '1',
-            label: 'JAVA工程师'
-          },
-          {
-            value: '2',
-            label: '前端工程师'
-          }
-        ]
-      },
-      {
-        name: 'nation',
-        title: '民族',
-        type: 'select',
-        options: [
-          {
-            value: '1',
-            label: '汉族'
-          },
-          {
-            value: '2',
-            label: '其他'
-          }
-        ]
-      },
-      {
-        name: 'loginName',
-        title: '员工工号',
-        type: 'button'
-      },
-      {
-        name: 'deptName',
-        title: '所属部门',
-        type: 'dept-select'
-      },
-      {
-        name: 'qdgs',
-        title: '签订公司'
-      },
-      {
-        name: 'birthday',
-        title: '出生日期',
-        type: 'time'
-      },
-
-      {
-        name: 'hyzk',
-        title: '婚姻状况',
-        type: 'select',
-        options: [
-          {
-            value: 1,
-            label: '已婚'
-          },
-          {
-            value: 2,
-            label: '未婚'
-          }
-        ]
-      },
-      {
-        name: 'hkxz',
-        title: '户口性质',
-        type: 'select',
-        options: [
-          {
-            value: 1,
-            label: '城镇'
-          },
-          {
-            value: 2,
-            label: '农村'
-          }
-        ]
-      },
-      {
-        name: 'zzmm',
-        title: '政治面貌',
-        type: 'select',
-        options: [
-          {
-            value: 1,
-            label: '群众'
-          },
-          {
-            value: 2,
-            label: '团员'
-          },
-          {
-            value: 3,
-            label: '党员'
-          }
-        ]
-      },
-      {
-        name: 'xjzdz',
-        title: '现居住地址'
-      },
-      {
-        name: 'hkszd',
-        title: '户口所在地'
-      },
-      {
-        name: 'rgssj',
-        title: '入职时间',
-        type: 'time'
-      },
-      {
-        name: 'cjgzsj',
-        title: '参加工作时间',
-        type: 'time'
-      },
-      {
-        name: 'nldj',
-        title: '能力等级',
-        type: 'select',
-        options: [
-          {
-            value: '1',
-            label: 'L1'
-          },
-          {
-            value: '2',
-            label: 'L2'
-          },
-          {
-            value: '3',
-            label: 'L3'
-          },
-          {
-            value: '4',
-            label: 'L4'
-          },
-          {
-            value: '5',
-            label: 'L5'
-          },
-          {
-            value: '6',
-            label: 'L6'
-          },
-          {
-            value: '7',
-            label: 'L7'
-          },
-          {
-            value: '8',
-            label: 'L8'
-          },
-          {
-            value: '9',
-            label: 'L9'
-          },
-          {
-            value: '10',
-            label: 'L10'
-          }
-        ]
-      },
-      {
-        name: 'htqdsj',
-        title: '合同签订时间',
-        type: 'time'
-      },
-      {
-        name: 'htdqs',
-        title: '合同到期时间',
-        type: 'time'
-      },
-      {
-        name: 'xqah',
-        title: '兴趣爱好'
-      },
-      {
-        name: 'jntc',
-        title: '技能特长'
-      },
-      {
-        name: 'cgjl',
-        title: '成果奖励'
-      }
-    ]
-  },
-  {
-    title: '工资卡信息',
-    children: [
-      {
-        name: 'khyh',
-        title: '开户行'
-      },
-      {
-        name: 'yhzh',
-        title: '银行卡号'
-      }
-    ]
-  },
-  // {
-  //   title: '教育信息',
-  //   children: [
-  //     {
-  //       name: 'byxx',
-  //       title: '毕业院校'
-  //     },
-  //     {
-  //       name: 'bysj',
-  //       title: '毕业时间',
-  //       type: 'time'
-  //     },
-  //     {
-  //       name: 'zgxl',
-  //       title: '最高学历',
-  //       type: 'select',
-  //       options: [
-  //         {
-  //           value: 1,
-  //           label: '高中'
-  //         },
-  //         {
-  //           value: 2,
-  //           label: '中专'
-  //         },
-  //         {
-  //           value: 3,
-  //           label: '大专'
-  //         },
-  //         {
-  //           value: 4,
-  //           label: '本科'
-  //         },
-  //         {
-  //           value: 5,
-  //           label: '硕士'
-  //         },
-  //         {
-  //           value: 6,
-  //           label: '博士'
-  //         }
-  //       ]
-  //     },
-  //     {
-  //       name: 'major',
-  //       title: '专业'
-  //     }
-  //   ]
-  // },
-  {
-    title: '紧急联系人信息',
-    children: [
-      {
-        name: 'jjlxrxm',
-        title: '紧急联系人姓名'
-      },
-      {
-        name: 'jjlxrhm',
-        title: '紧急联系人电话'
-      },
-      {
-        name: 'jjlxrgx',
-        title: '紧急联系人关系',
-        type: 'select',
-        options: []
-      }
-    ]
-  }
-]
-
-export const getConfigDict = () => {
-  const dictList = getDictList()
-  const configList = cloneDeep(formConfigList)
-  // const numberType = ['sex', 'state', 'hyzk', 'hkxz', 'zzmm', 'zgxl', 'jjlxrgx']
-  configList.forEach((item) => {
-    item.children.forEach((child: any) => {
-      if (child.type == 'select' && dictList[child.name]) {
-        const options = dictList[child.name].map((item) => {
-          return {
-            label: item.label,
-            // value: numberType.includes(child.name) ? Number(item.value) : item.value
-            value: item.value
-          }
-        })
-        child.options = options
-      }
-    })
-  })
-
-  return configList
-}
-
-export const formRules = {
-  nickname: [{ required: true, message: '名称不能为空', trigger: 'blur' }]
-}
-
-// 表格
-export const tableColumnConfig = [
-  {
-    name: 'deptName',
-    title: '所属部门'
-  },
-
-  {
-    name: 'state',
-    title: '状态',
-    type: 'select',
-    options: [
-      {
-        value: 1,
-        label: '实习'
-      },
-      {
-        value: 2,
-        label: '试用'
-      },
-      {
-        value: 3,
-        label: '正式'
-      },
-      {
-        value: 4,
-        label: '离职'
-      }
-    ]
-  },
-  {
-    name: 'zzmm',
-    title: '政治面貌',
-    type: 'select',
-    options: [
-      {
-        value: 1,
-        label: '群众'
-      },
-      {
-        value: 2,
-        label: '团员'
-      },
-      {
-        value: 3,
-        label: '党员'
-      }
-    ]
-  },
-  {
-    name: 'hkxz',
-    title: '户口性质',
-    type: 'select',
-    options: [
-      {
-        value: 1,
-        label: '城镇'
-      },
-      {
-        value: 2,
-        label: '农村'
-      }
-    ]
-  },
-  {
-    name: 'byxx',
-    title: '毕业院校'
-  },
-  {
-    name: 'bysj',
-    title: '毕业时间',
-    type: 'time'
-  },
-  {
-    name: 'zgxl',
-    title: '最高学历',
-    type: 'select',
-    options: [
-      {
-        value: 1,
-        label: '高中'
-      },
-      {
-        value: 2,
-        label: '中专'
-      },
-      {
-        value: 3,
-        label: '大专'
-      },
-      {
-        value: 4,
-        label: '本科'
-      },
-      {
-        value: 5,
-        label: '硕士'
-      },
-      {
-        value: 6,
-        label: '博士'
-      }
-    ]
-  },
-  {
-    name: 'major',
-    title: '专业'
-  },
-
-  {
-    name: 'cjgzsj',
-    title: '参加工作时间',
-    type: 'time'
-  },
-  {
-    name: 'rgssj',
-    title: '入职时间',
-    type: 'time'
-  },
-  {
-    name: 'htdqs',
-    title: '合同到期时间',
-    type: 'time'
-  },
-  {
-    name: 'zzsj',
-    title: '转正时间',
-    type: 'time'
-  }
-]
-//搜索
-export const searchConfig = [
-  {
-    name: 'nickname',
-    title: '员工名称'
-  },
-  // {
-  //   name: 'loginName',
-  //   title: '员工工号'
-  // },
-  {
-    name: 'deptName',
-    title: '所属部门',
-    type: 'dept-select'
-  },
-  {
-    name: 'state',
-    title: '状态',
-    type: 'select',
-    options: [
-      {
-        value: 1,
-        label: '实习'
-      },
-      {
-        value: 2,
-        label: '试用'
-      },
-      {
-        value: 3,
-        label: '正式'
-      },
-      {
-        value: 4,
-        label: '离职'
-      }
-    ]
-  },
-  {
-    name: 'zzmm',
-    title: '政治面貌',
-    type: 'select',
-    options: [
-      {
-        value: 1,
-        label: '群众'
-      },
-      {
-        value: 2,
-        label: '团员'
-      },
-      {
-        value: 3,
-        label: '党员'
-      }
-    ]
-  },
-  {
-    name: 'major',
-    title: '专业'
-  },
-
-  {
-    name: 'zgxl',
-    title: '最高学历',
-    type: 'select',
-    options: [
-      {
-        value: 1,
-        label: '高中'
-      },
-      {
-        value: 2,
-        label: '中专'
-      },
-      {
-        value: 3,
-        label: '大专'
-      },
-      {
-        value: 4,
-        label: '本科'
-      },
-      {
-        value: 5,
-        label: '硕士'
-      },
-      {
-        value: 6,
-        label: '博士'
-      }
-    ]
-  }
-]
-
-export const getTableConfigDict = (dataSource) => {
-  const dictList = getDictList()
-  const configList = cloneDeep(dataSource)
-  const numberType = ['sex', 'state', 'hyzk', 'hkxz', 'zzmm', 'zgxl', 'jjlxrgx']
-  configList.forEach((item) => {
-    if (item.type == 'select' && dictList[item.name]) {
-      const options = dictList[item.name].map((item) => {
-        return {
-          label: item.label,
-          value: numberType.includes(item.name) ? Number(item.value) : item.value
-        }
-      })
-      item.options = options
-    }
-  })
-  return configList
-}

+ 4 - 2
client/src/views/OaSystem/personnelManagement/ygdaPage/index.ts

@@ -130,7 +130,8 @@ export const formConfigList = [
       },
       {
         name: 'xjzdz',
-        title: '现居住地址'
+        title: '现居住地址',
+        tip: true
       },
       {
         name: 'hkxz',
@@ -149,7 +150,8 @@ export const formConfigList = [
       },
       {
         name: 'hkszd',
-        title: '户口所在地'
+        title: '户口所在地',
+        tip: true
       },
       {
         name: 'xqah',

+ 5 - 1
client/src/views/OaSystem/personnelManagement/ygdaPage/staffDetail.vue

@@ -244,6 +244,7 @@ const saveTechCertificateList = (data: any[]) => {
                   <el-input
                     v-if="child?.type === undefined"
                     v-model="formData[child?.name]"
+                    :title="child?.tip ? formData[child?.name] : ''"
                     placeholder=""
                   />
                   <div v-if="child?.type === 'button'" class="generate-num">
@@ -699,7 +700,10 @@ const saveTechCertificateList = (data: any[]) => {
         background-color: unset;
         box-shadow: none;
       }
-
+      .el-input-group__append {
+        border: 0px;
+        box-shadow: none;
+      }
       .el-input.is-disabled .el-input__inner {
         color: #000000;
         -webkit-text-fill-color: #000000;

+ 3 - 2
client/src/views/OaSystem/projectCenter/projectTrack/index.vue

@@ -84,7 +84,7 @@
               {{ getDictLabel(DICT_TYPE.TRACKING_PROJECT_STATE, scope.row.zt) }}
             </template>
           </el-table-column>
-          <el-table-column prop="xzqmc" label="区域" width="120">
+          <el-table-column prop="xzqmc" label="区域" width="160">
             <template #default="scope">
               {{ formatDistrict(scope.row.xzqmc)[0] }}
             </template>
@@ -106,7 +106,7 @@
             </template>
           </el-table-column>
           <el-table-column prop="gzry" label="跟踪人员" width="120" />
-          <el-table-column prop="gzry" label="区域总监" width="120" />
+          <el-table-column prop="qyzj" label="区域总监" width="120" />
           <el-table-column prop="sfjc" label="是否进场" width="120">
             <template #default="scope">
               {{ scope.row.sfjc == '0' ? '是' : '否' }}
@@ -123,6 +123,7 @@
             </template>
           </el-table-column>
           <el-table-column prop="jf" label="甲方单位" width="220" :show-overflow-tooltip="true" />
+          <el-table-column prop="jfks" label="甲方科室" width="180" :show-overflow-tooltip="true" />
           <el-table-column
             prop="jfdjr"
             label="甲方对接人"