Quellcode durchsuchen

feature(bug、优化):
1、合并客户、编辑客户-客户来源问题
2、打卡记录
3、项目升级添加大数参数文件
4、关联联系人表格不刷新问题

ZZH-wl vor 2 Jahren
Ursprung
Commit
ca33766365

+ 8 - 0
src/api/plat/punchRecords.js

@@ -0,0 +1,8 @@
+import micro_request from '@/utils/micro_request'
+
+const basePath = process.env.VUE_APP_ParentPath
+export default {
+  getListByDay(query) {
+    return micro_request.postRequest(basePath, 'PunchRecords', 'GetListByDay', query)
+  },
+}

+ 4 - 1
src/api/proj/business.js

@@ -19,8 +19,11 @@ export default {
     return micro_request.postRequest(basePath, 'Business', 'DeleteByIds', query)
   },
   // 项目升级
+  // businessUpgrade(query) {
+  //   return micro_request.postRequest(basePath, 'Business', 'BusinessUpgrade', query)
+  // },
   businessUpgrade(query) {
-    return micro_request.postRequest(basePath, 'Business', 'BusinessUpgrade', query)
+    return micro_request.postFormDataRequest(basePath, 'BusinessHandler', 'BusinessUpgrade', query)
   },
   // 项目降级
   businessDowngrade(query) {

+ 6 - 4
src/components/select/SelectUser.vue

@@ -109,8 +109,9 @@
         }
         this.search()
       },
-      open() {
+      async open() {
         this.clear()
+        await this.search()
         if (this.ids.length) {
           for (const item of this.ids) {
             const index = this.options.findIndex((each) => each.id == item)
@@ -126,9 +127,9 @@
         this.innerVisible = false
         this.$emit('save', this.selected, this.property, this.label)
       },
-      search() {
+      async search() {
         this.queryForm.pageNum = 1
-        this.fetchData('new')
+        await this.fetchData('new')
       },
       async fetchData(type) {
         let query = Object.assign(this.queryForm, this.queryParams)
@@ -179,7 +180,8 @@
       },
       clear() {
         this.selected = []
-        this.options = [...this.list]
+        this.options = []
+        this.list = []
       },
     },
   }

+ 18 - 0
src/utils/index.js

@@ -305,3 +305,21 @@ export function getDictDefaultValue(datas) {
   })
   return actions.join('')
 }
+
+/**
+ * 对象转化为formdata
+ * @param {Object} object
+ */
+
+export function getFormData(object) {
+  const formData = new FormData()
+  Object.keys(object).forEach((key) => {
+    const value = object[key]
+    if (Array.isArray(value)) {
+      value.forEach((subValue, i) => formData.append(key + `[${i}]`, subValue))
+    } else {
+      formData.append(key, object[key])
+    }
+  })
+  return formData
+}

+ 27 - 11
src/utils/micro_request.js

@@ -3,6 +3,7 @@ import { Notification, MessageBox, Message } from 'element-ui'
 import store from '@/store'
 import { getToken } from '@/utils/token'
 import errorCode from '@/utils/errorCode'
+import { getFormData } from '@/utils/index'
 
 axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
 
@@ -73,16 +74,7 @@ service.postRequest = function postRequest(basePath, srvName, funcName, data) {
     data = nullParam
   }
 
-  // console.log(basePath, '   basePath   ')
-  var base_Path = ''
-  if (basePath == process.env.VUE_APP_FOSHAN_PATH) {
-    base_Path = process.env.VUE_APP_MicroSrvProxy_foshan_API + basePath
-  } else if (basePath == process.env.VUE_APP_AdminPath || process.env.VUE_APP_ParentPath) {
-    base_Path = process.env.VUE_APP_MicroSrvProxy_API + basePath
-  } else {
-    base_Path = process.env.VUE_APP_MicroSrvProxy_API + basePath
-  }
-  // console.log(base_Path, '   base_Path   ')
+  var base_Path = process.env.VUE_APP_MicroSrvProxy_API + basePath
   return service.request({
     url: base_Path,
     method: 'post',
@@ -96,6 +88,30 @@ service.postRequest = function postRequest(basePath, srvName, funcName, data) {
     data: data,
   })
 }
+
+service.postFormDataRequest = function postRequest(basePath, srvName, funcName, data) {
+  if (data == undefined) {
+    let nullParam = {
+      nullparam: 0,
+    }
+    data = nullParam
+  }
+  console.log(getFormData(data))
+  var base_Path = process.env.VUE_APP_MicroSrvProxy_API + basePath
+  return service.request({
+    url: base_Path,
+    method: 'post',
+    headers: {
+      'Content-Type': 'multipart/form-data',
+      'X-RPCX-SerializeType': '1',
+      'X-RPCX-ServicePath': srvName,
+      'X-RPCX-ServiceMethod': funcName,
+      SrvEnv: 'dev',
+    },
+    data: getFormData(data),
+  })
+}
+
 // 发出请求并要求把客户端信息传输给后端(IP和User-Agent)
 service.postRequestWithClientInfo = function postRequest(basePath, srvName, funcName, data) {
   if (data == undefined) {
@@ -149,7 +165,7 @@ function processResponse(res) {
   const code = res.data.code || 200
   // 获取错误信息
   const message = errorCode[code] || res.data.msg || errorCode['default']
-  if (code === 401) {
+  if (code === 1010) {
     MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', {
       confirmButtonText: '重新登录',
       cancelButtonText: '取消',

+ 1 - 1
src/views/customer/components/Allocate.vue

@@ -9,7 +9,7 @@
 <template>
   <el-dialog title="分配客户" :visible.sync="visible" width="30%" @close="handleClose">
     <el-form label-width="80px" :model="form">
-      <el-form-item label="销售代表">
+      <el-form-item label="销售工程师">
         <el-input v-model="form.allocate" readonly suffix-icon="el-icon-search" @focus="choose" />
       </el-form-item>
     </el-form>

+ 6 - 6
src/views/customer/components/Edit.vue

@@ -29,9 +29,9 @@
           </el-form-item>
         </el-col> -->
         <el-col :span="12">
-          <el-form-item label="客户来源" prop="source">
-            <el-select v-model="editForm.source" placeholder="请选择客户来源" style="width: 100%">
-              <el-option v-for="item in sourceOptions" :key="item.value" :label="item.value" :value="item.value" />
+          <el-form-item label="客户来源" prop="custSource">
+            <el-select v-model="editForm.custSource" placeholder="请选择客户来源" style="width: 100%">
+              <el-option v-for="item in sourceOptions" :key="item.value" :label="item.value" :value="item.key" />
             </el-select>
           </el-form-item>
         </el-col>
@@ -161,7 +161,7 @@
           followUpDate: '', // 最后跟进时间
           custIndustry: '', // 客户类型  (没数据)
           custLevel: '', // 客户级别  (没数据)
-          source: '', //客户来源
+          custSource: '', //客户来源
           province: {}, //省
           city: {}, //市
           region: {}, //区
@@ -170,7 +170,7 @@
           custName: [{ required: true, validator: checkCustName, trigger: 'blur' }],
           custIndustry: [{ required: true, trigger: 'change', message: '请选择客户类型' }],
           // custLevel: [{ required: true, trigger: 'change', message: '请选择客户级别' }],
-          source: [{ required: true, trigger: 'change', message: '请选择客户来源' }],
+          custSource: [{ required: true, trigger: 'change', message: '请选择客户来源' }],
         },
         provinceOptions: [],
         provinceDetail: [],
@@ -287,7 +287,7 @@
           followUpDate: '', // 最后跟进时间
           custIndustry: '', // 客户类型  (没数据)
           custLevel: '', // 客户级别  (没数据)
-          source: '', //客户来源
+          custSource: '', //客户来源
           province: {}, //省
           city: {}, //市
           region: {}, //区

+ 25 - 8
src/views/customer/components/Merge.vue

@@ -20,7 +20,7 @@
         <li :class="{ differ: flag.custName }">目标客户</li>
         <li :class="{ differ: flag.abbrName }">助记名</li>
         <li :class="{ differ: flag.custIndustry }">客户类型</li>
-        <li :class="{ differ: flag.source }">客户来源</li>
+        <li :class="{ differ: flag.custSource }">客户来源</li>
         <li :class="{ differ: flag.followUpDate }">下次联系时间</li>
         <li :class="{ differ: flag.custProvince }">所在省</li>
         <li :class="{ differ: flag.custCity }">所在市</li>
@@ -37,10 +37,10 @@
           <el-radio v-model="form.abbrName" :label="item.abbrName" />
         </li>
         <li>
-          <el-radio v-model="form.custIndustry" :label="item.custIndustry" />
+          <el-radio v-model="form.custIndustry" :label="selectDictLabel(industryOptions, item.custIndustry)" />
         </li>
         <li>
-          <el-radio v-model="form.source" :label="item.source" />
+          <el-radio v-model="form.custSource" :label="selectDictLabel(sourceOptions, item.custSource)" />
         </li>
         <li>
           <el-radio v-model="form.followUpDate" :label="item.followUpDate" />
@@ -85,34 +85,50 @@
           id: '',
           custName: '', // 客户名称
           abbrName: '', // 助记名
-          custLocation: '', // 所在地区
+          custProvince: '', // 所在省
+          custCity: '', // 所在市
+          custRegion: '', // 所在地区
           custAddress: '', // 详细地址
           custStatus: '', // 客户状态(10正常20)
           followUpDate: '', // 最后跟进时间
           custIndustry: '', // 客户类型  (没数据)
           custLevel: '', // 客户级别  (没数据)
-          source: '', //客户来源
+          custSource: '', //客户来源
           salesId: '', //归属销售
           salesName: '', //销售名称
         },
         flag: {
           custName: false, // 客户名称
           abbrName: false, // 助记名
-          custLocation: false, // 所在地区
+          custProvince: false, // 所在省
+          custCity: false, // 所在市
+          custRegion: false, // 所在地区
           custAddress: false, // 详细地址
           custStatus: false, // 客户状态(10正常20)
           followUpDate: false, // 最后跟进时间
           custIndustry: false, // 客户类型  (没数据)
           custLevel: false, // 客户级别  (没数据)
-          source: false, //客户来源
+          custSource: false, //客户来源
           salesName: false,
         },
         list: [],
         width: '60%',
+        sourceOptions: [], //客户类型
+        industryOptions: [], //客户类型
       }
     },
-    mounted() {},
+    mounted() {
+      this.getOptions()
+    },
     methods: {
+      getOptions() {
+        Promise.all([this.getDicts('cust_source'), this.getDicts('cust_idy')])
+          .then(([source, industry]) => {
+            this.sourceOptions = source.data.values || []
+            this.industryOptions = industry.data.values || []
+          })
+          .catch((err) => console.log(err))
+      },
       init(res, ids) {
         this.list = res.data.list
         if (this.list.length > 4) this.width = '100%'
@@ -193,6 +209,7 @@
       flex: 1;
       min-width: 200px;
       overflow: hidden;
+
       li {
         padding-left: 10px;
       }

+ 276 - 0
src/views/plat/punchRecords/index.vue

@@ -0,0 +1,276 @@
+<template>
+  <div class="follow-container">
+    <el-row :gutter="10" style="margin-bottom: 10px">
+      <el-col :span="4">
+        <el-input v-model="queryForm.userNickName" placeholder="用户" />
+      </el-col>
+      <el-col :span="4">
+        <el-input v-model.number="queryForm.daysBeforeToday" placeholder="查询天数">
+          <template slot="append">天</template>
+        </el-input>
+      </el-col>
+      <el-col :span="4">
+        <el-date-picker
+          v-model="queryForm.date"
+          end-placeholder="结束日期"
+          placeholder="时间范围"
+          start-placeholder="开始日期"
+          style="width: 100%"
+          type="daterange"
+          value-format="yyyy-MM-dd" />
+      </el-col>
+      <el-col :span="4">
+        <el-button icon="el-icon-plus" type="primary" @click="fetchData">查询</el-button>
+        <el-button icon="el-icon-refresh-right" @click="reset">重置</el-button>
+      </el-col>
+    </el-row>
+    <div class="follow">
+      <ul
+        v-infinite-scroll="load"
+        class="records infinite-list"
+        :infinite-scroll-disabled="loadFlag"
+        :infinite-scroll-immediate-check="false">
+        <li v-for="(date, index) in records" :key="index">
+          <div class="date">
+            <h2>{{ date.punchTime.split('-')[2] }}</h2>
+            <h3>{{ date.punchTime.split('-').splice(0, 2).join('.') }}</h3>
+          </div>
+          <ul class="content">
+            <li v-for="(item, idx) in date.platPunchRecordsList" :key="idx">
+              <!-- <el-avatar class="user-avatar" :src="avatar" />-->
+              <vab-icon class="user-avatar" icon="account-circle-fill" />
+              <div class="text">
+                <p class="action">
+                  <span>
+                    {{ item.userNickName }}
+                    <span v-show="item.userPostName">({{ item.userPostName }})</span>
+                    打卡
+                  </span>
+                  <span>
+                    <vab-icon icon="time-line" />
+                    {{ item.punchTime }}
+                  </span>
+                </p>
+                <div class="footer">
+                  <p>
+                    打卡地点:
+                    <span @click="lookPunchImg(item.punchImg)">{{ item.punchLocation }}</span>
+                  </p>
+                </div>
+              </div>
+            </li>
+          </ul>
+        </li>
+      </ul>
+    </div>
+  </div>
+</template>
+
+<script>
+  import to from 'await-to-js'
+  import punchRecordsApi from '@/api/plat/punchRecords'
+
+  export default {
+    name: 'PunchRecords',
+
+    data() {
+      return {
+        listLoading: false,
+        queryForm: {
+          userNickName: '',
+          daysBeforeToday: 20,
+          date: [],
+          beginTime: undefined,
+          endTime: undefined,
+        },
+        loadFlag: true,
+        records: [],
+        visible: false,
+      }
+    },
+    mounted() {
+      this.fetchData()
+    },
+    methods: {
+      lookPunchImg(path) {
+        window.open(path, '_system')
+      },
+      async fetchData() {
+        let params = { ...this.queryForm }
+        if (this.queryForm.date && this.queryForm.date.length === 2) {
+          params.beginTime = this.queryForm.date[0]
+          params.endTime = this.queryForm.date[1]
+        }
+        const [err, res] = await to(punchRecordsApi.getListByDay(params))
+        if (err) return console.log(err, 'err')
+        this.records = res.data.list || []
+        await this.$nextTick()
+        this.loadFlag = false
+      },
+      load() {
+        this.queryForm.daysBeforeToday += 20
+        this.fetchData()
+      },
+      reset() {
+        this.queryForm = {
+          userNickName: '',
+          daysBeforeToday: 20,
+          date: [],
+          beginTime: undefined,
+          endTime: undefined,
+        }
+        this.fetchData()
+      },
+    },
+  }
+</script>
+
+<style lang="scss" scoped>
+  $base: '.follow';
+  .follow {
+    height: calc(100vh - 240px);
+    display: flex;
+
+    .comment {
+      width: 300px;
+      display: flex;
+      flex-direction: column;
+      border-radius: 4px;
+      border: 1px solid rgb(215, 232, 244);
+
+      ul {
+        flex: 1;
+        overflow-y: auto;
+        padding: 10px;
+
+        li {
+          display: flex;
+          border-bottom: 1px solid #e3e5e7;
+
+          .text {
+            flex: 1;
+            padding: 0 10px;
+
+            p {
+              font-weight: 500;
+              margin: 0;
+              line-height: 32px;
+            }
+
+            p:first-child {
+              line-height: 30px;
+              font-weight: bold;
+            }
+
+            p:last-child {
+              font-size: 12px;
+              color: #9499a0;
+              text-align: right;
+            }
+          }
+        }
+
+        .user-avatar {
+          font-size: 30px;
+        }
+      }
+
+      .form {
+        padding: 4px;
+        text-align: right;
+
+        .el-textarea {
+          margin-bottom: 4px;
+        }
+      }
+    }
+
+    .records {
+      flex: 1;
+      margin: 0;
+      height: 100%;
+      padding: 10px 20px;
+      list-style: none;
+      overflow: auto;
+
+      > li {
+        display: flex;
+
+        + li {
+          margin-top: 10px;
+        }
+      }
+
+      .date {
+        width: 100px;
+        display: flex;
+        flex-direction: column;
+        align-items: center;
+
+        h2,
+        h3 {
+          margin: 0;
+        }
+
+        h2 {
+          font-size: 26px;
+          line-height: 32px;
+        }
+      }
+
+      .content {
+        flex: 1;
+        list-style: none;
+
+        li {
+          display: flex;
+          cursor: pointer;
+          border: 1px solid rgb(215, 232, 244);
+          background: rgb(247, 251, 254);
+          border-radius: 4px;
+          padding: 8px;
+
+          + li {
+            margin-top: 10px;
+          }
+        }
+
+        .user-avatar {
+          font-size: 40px;
+        }
+
+        .text {
+          flex: 1;
+          padding-left: 20px;
+          padding-right: 10px;
+
+          p {
+            font-weight: 500;
+            margin: 0;
+            line-height: 32px;
+
+            span {
+              color: #1d66dc;
+            }
+          }
+
+          .action {
+            display: flex;
+            justify-content: space-between;
+
+            span:first-child {
+              font-weight: bold;
+              color: #333;
+            }
+          }
+
+          .footer {
+            display: flex;
+            justify-content: space-between;
+            align-items: center;
+          }
+        }
+      }
+    }
+  }
+</style>

+ 1 - 1
src/views/proj/business/components/BusinessEdit.vue

@@ -474,7 +474,7 @@
         }
         this.dialogFormVisible = true
         if (this.roleKeys.includes('SalesEngineer')) {
-          this.form.saleId = this.id
+          this.form.saleId = this.userId
           this.form.saleName = this.nickName
         }
       },

+ 54 - 6
src/views/proj/business/components/BusinessGradation.vue

@@ -17,7 +17,7 @@
       降级
     </el-button>
     <el-dialog append-to-body :title="title" :visible.sync="dialogFormVisible" width="60%" @close="close">
-      <el-form ref="form" :model="form" :rules="rules" style="margin-top: -20px">
+      <el-form ref="form" label-position="top" :model="form" :rules="rules" style="margin-top: -20px">
         <el-form-item label="项目类别" prop="nboType">
           <el-select v-model="form.nboType" placeholder="请选择项目类别" style="width: 100%">
             <el-option
@@ -74,14 +74,20 @@
                 v-model="form.technicalSupportTime"
                 placeholder="选择日期"
                 style="width: 100%"
-                type="datetime" />
+                type="datetime"
+                value-format="yyyy-MM-dd HH:mm:ss" />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row v-if="type === 'up' && form.nboType !== '30'" :gutter="20">
           <el-col :span="8">
             <el-form-item label="项目预算期限" prop="nboBudgetTime">
-              <el-date-picker v-model="form.nboBudgetTime" placeholder="选择日期" style="width: 100%" type="datetime" />
+              <el-date-picker
+                v-model="form.nboBudgetTime"
+                placeholder="选择日期"
+                style="width: 100%"
+                type="datetime"
+                value-format="yyyy-MM-dd HH:mm:ss" />
             </el-form-item>
           </el-col>
           <el-col :span="8">
@@ -110,7 +116,8 @@
                 v-model="form.purchasingTime"
                 placeholder="选择日期"
                 style="width: 100%"
-                type="datetime" />
+                type="datetime"
+                value-format="yyyy-MM-dd HH:mm:ss" />
             </el-form-item>
           </el-col>
           <el-col :span="8">
@@ -140,7 +147,7 @@
           </el-col>
           <el-col :span="8">
             <el-form-item
-              label="是否采纳大数技术参数   "
+              label="是否采纳大数技术参数"
               prop="isAdoptDashoo"
               :required="type === 'up' && form.nboType === '10'">
               <el-radio-group v-model="form.isAdoptDashoo" style="width: 100%">
@@ -149,6 +156,23 @@
               </el-radio-group>
             </el-form-item>
           </el-col>
+          <el-col v-if="form.isAdoptDashoo === '10'" :span="8">
+            <el-form-item label="文件" prop="file" :required="form.isAdoptDashoo === '10'">
+              <el-upload
+                ref="uploadRef"
+                action="#"
+                :auto-upload="false"
+                :file-list="fileList"
+                :limit="1"
+                :on-change="
+                  (file) => {
+                    return setFile(file)
+                  }
+                ">
+                <el-button size="mini" type="primary">点击上传</el-button>
+              </el-upload>
+            </el-form-item>
+          </el-col>
         </el-row>
 
         <el-form-item v-if="type === 'up' && form.nboType === '30'" label="转化原因" prop="projConversionReason">
@@ -229,6 +253,10 @@
         if (parseInt(value) <= 0) callback(new Error())
         else callback()
       }
+      const validateAdoptDashoo = (rule, value, callback) => {
+        if (this.form.isAdoptDashoo === '10' && !value) callback(new Error())
+        else callback()
+      }
       return {
         title: '项目',
         type: '',
@@ -261,6 +289,7 @@
           accendant: undefined,
           projConversionReason: undefined,
           remark: undefined,
+          file: undefined,
         },
         rules: {
           nboType: [{ required: true, trigger: ['blur', 'change'], message: '请选择项目类别' }],
@@ -286,6 +315,7 @@
           purchasingTime: [{ validator: validateUpgradeA, trigger: ['blur', 'change'], message: '请选择采购时间' }],
           purchasingWay: [{ validator: validateUpgradeA, trigger: ['blur', 'change'], message: '请选择采购方式' }],
           isAdoptDashoo: [{ validator: validateUpgradeA, trigger: ['blur', 'change'], message: '请选择是或否' }],
+          file: [{ validator: validateAdoptDashoo, trigger: ['blur', 'change'], message: '请选择上传文件' }],
 
           remark: [{ validator: validateDowngrade, trigger: ['blur', 'change'], message: '请输入原因' }],
           projConversionReason: [{ required: true, trigger: ['blur', 'change'], message: '请输入转化原因' }],
@@ -293,7 +323,18 @@
         dialogFormVisible: false,
         yesOrNoOptions: [],
         purchasingWayOptions: [],
-
+        // 大数参数文件
+        fileList: [],
+        fileSettings: {
+          // 文件配置信息
+          fileSize: 52428800,
+          fileTypes: '.doc,.docx,.zip,.xls,.xlsx,.rar,.jpg,.jpeg,.gif,.png,.jfif,.txt',
+          pictureSize: 52428800,
+          pictureTypes: '.jpg,.jpeg,.gif,.png,.jfif,.txt',
+          types: '.doc,.docx,.zip,.xls,.xlsx,.rar,.jpg,.jpeg,.gif,.png,.jfif,.mp4,.txt',
+          videoSize: 104857600,
+          videoType: '.mp4',
+        },
         queryContact: {},
         customerInfo: {},
       }
@@ -304,6 +345,11 @@
       })
     },
     methods: {
+      // 上传图片
+      setFile(file) {
+        this.form.file = file.raw
+        return true
+      },
       handleSelectContact() {
         if (!this.queryContact.custId) {
           this.$message.warning('请先选择客户')
@@ -357,10 +403,12 @@
         this.dialogFormVisible = false
       },
       save() {
+        console.log(this.form.file, '------------')
         this.$refs['form'].validate(async (valid) => {
           if (valid) {
             this.$baseConfirm('你确定要对当前项目' + this.title + '吗', null, async () => {
               if (this.type === 'up') {
+                console.log(this.form)
                 const { msg } = await businessApi.businessUpgrade(this.form)
                 this.$baseMessage(msg, 'success')
               }

+ 9 - 1
src/views/proj/business/components/DetailsContact.vue

@@ -19,7 +19,12 @@
         </el-button>
       </vab-query-form-right-panel>
     </vab-query-form>
-    <el-table v-loading="listLoading" :data="contactList" height="calc(100% - 42px)" @selection-change="setSelectRows">
+    <el-table
+      :key="uuid"
+      v-loading="listLoading"
+      :data="contactList"
+      height="calc(100% - 42px)"
+      @selection-change="setSelectRows">
       <el-table-column align="center" type="selection" />
       <el-table-column align="center" label="姓名" prop="cuctName" show-overflow-tooltip />
       <el-table-column align="center" label="岗位" prop="postion" show-overflow-tooltip />
@@ -62,6 +67,7 @@
   import businessContactApi from '@/api/proj/businessContact'
   import SelectContact from '@/components/select/SelectCustomerContact'
   import CustomerContact from '@/views/customer/components/Contact'
+  import { getUUID } from '@/utils'
 
   export default {
     name: 'Records',
@@ -87,6 +93,7 @@
     },
     data() {
       return {
+        uuid: '',
         queryForm: {
           cuctName: undefined,
           pageNum: 1,
@@ -164,6 +171,7 @@
         } = await businessContactApi.getList(this.queryForm)
         this.contactList = list
         this.listLoading = false
+        this.uuid = getUUID()
       },
     },
   }