Browse Source

Merge branch 'master' into bjcz_his_scrm

吴树波 2 weeks ago
parent
commit
e90f2182d9
43 changed files with 526 additions and 417 deletions
  1. 1 7
      src/api/hisStore/storeOrder.js
  2. 3 2
      src/api/qw/externalContactTransferAudit.js
  3. 7 0
      src/api/qw/sopUserLogs.js
  4. 10 0
      src/api/qw/user.js
  5. 1 7
      src/api/store/storeOrder.js
  6. 9 0
      src/main.js
  7. 1 0
      src/views/company/companyConfig/index.vue
  8. 1 0
      src/views/course/courseFinishTemp/index.vue
  9. 2 1
      src/views/course/courseFinishTempParent/index.vue
  10. 18 7
      src/views/course/courseWatchLog/deptWatchLog.vue
  11. 30 19
      src/views/course/courseWatchLog/index.vue
  12. 1 0
      src/views/course/courseWatchLog/myCourseWatchLog.vue
  13. 1 1
      src/views/course/courseWatchLog/qw/myCourseWatchLog.vue
  14. 1 1
      src/views/course/courseWatchLog/qw/watchLog.vue
  15. 43 33
      src/views/course/courseWatchLog/watchLog.vue
  16. 2 0
      src/views/course/courseWatchLog/watchLogStatistics.vue
  17. 3 1
      src/views/course/userCourse/index.vue
  18. 28 156
      src/views/hisStore/components/productOrder.vue
  19. 6 0
      src/views/member/list.vue
  20. 6 0
      src/views/member/mylist.vue
  21. 1 1
      src/views/qw/externalContact/deptIndex.vue
  22. 5 1
      src/views/qw/externalContact/index.vue
  23. 6 3
      src/views/qw/externalContact/myExternalContact.vue
  24. 12 0
      src/views/qw/externalContact/selectUser.vue
  25. 19 4
      src/views/qw/externalContactTransfer/companyTransfer.vue
  26. 13 21
      src/views/qw/externalContactTransfer/companyTransferQwUserSelect.vue
  27. 15 2
      src/views/qw/externalContactTransfer/deptTransferIndex.vue
  28. 15 2
      src/views/qw/externalContactTransfer/index.vue
  29. 47 20
      src/views/qw/externalContactTransferLog/companyTransferDetail.vue
  30. 11 0
      src/views/qw/externalContactTransferLog/deptTransferLogIndex.vue
  31. 12 0
      src/views/qw/externalContactTransferLog/index.vue
  32. 12 0
      src/views/qw/externalContactTransferLog/my.vue
  33. 19 4
      src/views/qw/externalContactUnassigned/companyUnassigned.vue
  34. 13 1
      src/views/qw/externalContactUnassigned/deptUnassignedIndex.vue
  35. 13 1
      src/views/qw/externalContactUnassigned/index.vue
  36. 8 4
      src/views/qw/qwUserVoiceLog/index.vue
  37. 9 2
      src/views/qw/qwUserVoiceLogTotal/index.vue
  38. 45 2
      src/views/qw/sopUserLogs/sopUserLogsSchedule.vue
  39. 1 1
      src/views/qw/user/cuDeptIdIndex.vue
  40. 4 5
      src/views/qw/user/index.vue
  41. 9 1
      src/views/qw/user/qwUserSelectOne.vue
  42. 20 31
      src/views/store/components/productOrder.vue
  43. 43 76
      src/views/store/components/storeOrderDetails.vue

+ 1 - 7
src/api/hisStore/storeOrder.js

@@ -85,13 +85,7 @@ export function updateStoreOrder(data) {
     data: data
   })
 }
-export function updateAddressErpFsStoreOrder(data) {
-  return request({
-    url: '/store/store/storeOrder/updateAddressErpFsStoreOrder',
-    method: 'put',
-    data: data
-  })
-}
+
 // 删除订单
 export function delStoreOrder(id) {
   return request({

+ 3 - 2
src/api/qw/externalContactTransferAudit.js

@@ -8,10 +8,11 @@ export function listExternalContactTransferAudit(query) {
   })
 }
 
-export function detail(id) {
+export function detail(id, query) {
   return request({
     url: '/qw/externalContactTransferCompanyAudit/detail/' + id,
-    method: 'get'
+    method: 'get',
+    params: query
   })
 }
 

+ 7 - 0
src/api/qw/sopUserLogs.js

@@ -69,6 +69,13 @@ export function updateLogDate(data) {
     data: data
   })
 }
+export function replaceUser(data) {
+  return request({
+    url: '/qwSop/sopUserLogs/replaceUser',
+    method: 'post',
+    data: data
+  })
+}
 // 修改sopUserLogs
 export function addGroupChat(data) {
   return request({

+ 10 - 0
src/api/qw/user.js

@@ -165,6 +165,16 @@ export function exportUser(query) {
     params: query
   })
 }
+
+// 导出企微员工
+export function exportStaff(query) {
+  return request({
+    url: '/qw/user/exportStaff',
+    method: 'get',
+    params: query
+  })
+}
+
 /**
  * 登录企业微信(发起登录)
  */

+ 1 - 7
src/api/store/storeOrder.js

@@ -138,13 +138,7 @@ export function updateStoreOrder(data) {
     data: data
   })
 }
-export function updateAddressErpFsStoreOrder(data) {
-  return request({
-    url: '/store/storeOrder/updateAddressErpFsStoreOrder',
-    method: 'put',
-    data: data
-  })
-}
+
 export function bindCustomer(data) {
   return request({
     url: '/store/storeOrder/bindCustomer',

+ 9 - 0
src/main.js

@@ -14,6 +14,8 @@ import elementDirective from './directive/select'
 
 import './assets/icons' // icon
 import './permission' // permission control
+import { callNumber,callOff } from "@/utils/call";
+import { callMobile } from "@/api/company/companyVoiceApi"
 import { getDicts } from "@/api/system/dict/data";
 import { getConfigKey } from "@/api/system/config";
 import {cloneObject, parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels, download, handleTree } from "@/utils/common";
@@ -63,6 +65,13 @@ Vue.prototype.msgInfo = function (msg) {
   this.$message.info(msg);
 }
 
+// 拨打电话
+import audio from 'vue-mobile-audio'
+Vue.use(audio)
+Vue.prototype.callNumber = callNumber
+Vue.prototype.callOff = callOff
+Vue.prototype.callMobile = callMobile
+
 // 全局组件挂载
 Vue.component('DictTag', DictTag)
 Vue.component('Pagination', Pagination)

+ 1 - 0
src/views/company/companyConfig/index.vue

@@ -318,6 +318,7 @@ export default {
     this.getConfigKey("customer:config");
     this.getConfigKey("sys:AiKf:config");
     this.getConfigKey("company:admin:show");
+    this.getConfigKey("redPacket:config");
     this.getDicts("sys_company_status").then((response) => {
       this.statusOptions = response.data;
     });

+ 1 - 0
src/views/course/courseFinishTemp/index.vue

@@ -922,6 +922,7 @@ export default {
       this.setting = []
       this.chatSetting = []
       this.resetForm("form");
+      this.formType = 1
     },
     /** 搜索按钮操作 */
     handleQuery() {

+ 2 - 1
src/views/course/courseFinishTempParent/index.vue

@@ -742,7 +742,8 @@ export default {
         updateBy: null,
         updateTime: null,
         companyUserIds: null,
-        remark: null
+        remark: null,
+        isAllCompanyUser: 2
       };
       this.resetForm("form");
     },

+ 18 - 7
src/views/course/courseWatchLog/deptWatchLog.vue

@@ -175,16 +175,16 @@
           :key="createCalendarKey"
         />
       </el-form-item> -->
-        <el-form-item label="创建时间" prop="createTime">
+      <el-form-item label="创建时间" prop="createTime">
         <el-date-picker
           v-model="createTimeText"
-          type="daterange"
+          type="datetimerange"
           range-separator="至"
           start-placeholder="开始日期"
           end-placeholder="结束日期"
-          value-format="yyyy-MM-dd"
-          style="width: 240px"
-           @change="createChange"
+          value-format="yyyy-MM-dd HH:mm:ss"
+          @change="createChange"
+          :default-time="['00:00:00', '23:59:59']"
         />
       </el-form-item>
       <!-- 最新更新时间 -->
@@ -334,6 +334,16 @@
       <el-table-column label="完课时间" align="center" prop="finishTime" />
       <el-table-column label="营期时间" align="center" prop="campPeriodTime" />
       <el-table-column label="进线时间" align="center" prop="qecCreateTime" />
+      <el-table-column label="是否领奖" align="center" prop="rewardType" >
+        <template slot-scope="scope">
+          <el-tag
+            :type="scope.row.rewardType ? 'success' : 'info'"
+            effect="plain"
+          >
+            {{ scope.row.rewardType ? '已领取' : '未领取' }}
+          </el-tag>
+        </template>
+      </el-table-column>
       <el-table-column
         fixed="right"
         label="操作"
@@ -736,6 +746,7 @@ export default {
       this.queryParams.sopId = null; // 重置SOP ID
       this.scheduleTime=null;
       this.updateTime=null;
+      this.queryParams.externalUserName=null;
 
       // 重置SOP搜索
       this.handleSopClear();
@@ -878,8 +889,8 @@ export default {
     createChange(createTime) {
       if (createTime && createTime.length >= 2) {
         // this.createTimeText = this.formatDateRange(createTime);
-        this.queryParams.sTime = createTime[0] || null;
-        this.queryParams.eTime = createTime[1] || null;
+        this.queryParams.sTime = this.formatDate(createTime[0]) || null;
+        this.queryParams.eTime = this.formatDate(createTime[1]) || null;
       } else {
         this.createTimeText = '';
         this.queryParams.sTime = null;

+ 30 - 19
src/views/course/courseWatchLog/index.vue

@@ -182,13 +182,13 @@
       <el-form-item label="创建时间" prop="createTime">
         <el-date-picker
           v-model="createTimeText"
-          type="daterange"
+          type="datetimerange"
           range-separator="至"
           start-placeholder="开始日期"
           end-placeholder="结束日期"
-          value-format="yyyy-MM-dd"
-          style="width: 240px"
+          value-format="yyyy-MM-dd HH:mm:ss"
            @change="createChange"
+          :default-time="['00:00:00', '23:59:59']"
         />
       </el-form-item>
       <!-- 最新更新时间 -->
@@ -265,20 +265,20 @@
         </el-date-picker>
       </el-form-item>
 
-      <el-form-item label="是否注册" prop="isVip">
-        <el-select
-          filterable
-          v-model="queryParams.isVip"
-          placeholder="请选择是否注册"
-          clearable size="small">
-          <el-option
-            v-for="dict in isVipList"
-            :key="dict.dictValue"
-            :label="dict.dictLabel"
-            :value="dict.dictValue"
-          />
-        </el-select>
-      </el-form-item>
+<!--      <el-form-item label="是否注册" prop="isVip">-->
+<!--        <el-select-->
+<!--          filterable-->
+<!--          v-model="queryParams.isVip"-->
+<!--          placeholder="请选择是否注册"-->
+<!--          clearable size="small">-->
+<!--          <el-option-->
+<!--            v-for="dict in isVipList"-->
+<!--            :key="dict.dictValue"-->
+<!--            :label="dict.dictLabel"-->
+<!--            :value="dict.dictValue"-->
+<!--          />-->
+<!--        </el-select>-->
+<!--      </el-form-item>-->
 
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
@@ -372,6 +372,16 @@
       <el-table-column label="完课时间" align="center" prop="finishTime" />
       <el-table-column label="营期时间" align="center" prop="campPeriodTime" />
       <el-table-column label="进线时间" align="center" prop="qecCreateTime" />
+      <el-table-column label="是否领奖" align="center" prop="rewardType" >
+        <template slot-scope="scope">
+          <el-tag
+            :type="scope.row.rewardType ? 'success' : 'info'"
+            effect="plain"
+          >
+            {{ scope.row.rewardType ? '已领取' : '未领取' }}
+          </el-tag>
+        </template>
+      </el-table-column>
       <el-table-column
         fixed="right"
         label="操作"
@@ -1009,8 +1019,8 @@ export default {
     createChange(createTime) {
       if (createTime && createTime.length >= 2) {
         // this.createTimeText = this.formatDateRange(createTime);
-        this.queryParams.sTime = createTime[0] || null;
-        this.queryParams.eTime = createTime[1] || null;
+        this.queryParams.sTime = this.formatDate(createTime[0]) || null;
+        this.queryParams.eTime = this.formatDate(createTime[1]) || null;
       } else {
         this.createTimeText = '';
         this.queryParams.sTime = null;
@@ -1207,6 +1217,7 @@ export default {
       this.queryParams.qecETime = null;
       this.queryParams.periodSTime = null;
       this.queryParams.periodDTime = null;
+      this.queryParams.externalUserName=null;
       this.queryParams.scheduleStartTime = null;
       this.queryParams.scheduleEndTime = null;
       this.queryParams.sopId = null; // 重置SOP ID

+ 1 - 0
src/views/course/courseWatchLog/myCourseWatchLog.vue

@@ -490,6 +490,7 @@ export default {
       this.queryParams.qecSTime = null;
       this.queryParams.qecETime = null;
       this.queryParams.scheduleStartTime = null;
+      this.queryParams.externalUserName=null;
       this.queryParams.scheduleEndTime = null;
       this.scheduleTime=null;
       this.handleQuery();

+ 1 - 1
src/views/course/courseWatchLog/qw/myCourseWatchLog.vue

@@ -222,7 +222,7 @@ export default {
       this.courseLists = response.list;
     });
     this.getList();
-    this.getDicts("sys_course_watch_log_type").then(response => {
+    this.getDicts("sys_course_watch_log_type_new").then(response => {
       this.logTypeOptions = response.data;
     });
 

+ 1 - 1
src/views/course/courseWatchLog/qw/watchLog.vue

@@ -370,7 +370,7 @@ export default {
       this.courseLists = response.list;
     });
     this.getList();
-    this.getDicts("sys_course_watch_log_type").then(response => {
+    this.getDicts("sys_course_watch_log_type_new").then(response => {
       this.logTypeOptions = response.data;
     });
 

+ 43 - 33
src/views/course/courseWatchLog/watchLog.vue

@@ -11,16 +11,16 @@
           />
         </el-select>
       </el-form-item>
-      <el-form-item label="项目" prop="project">
-        <el-select  v-model="queryParams.project" placeholder="请选择项目" clearable size="small" >
-          <el-option
-            v-for="item in projectOptions"
-            :key="item.dictValue"
-            :label="item.dictLabel"
-            :value="item.dictValue"
-          />
-        </el-select>
-      </el-form-item>
+<!--      <el-form-item label="项目" prop="project">-->
+<!--        <el-select  v-model="queryParams.project" placeholder="请选择项目" clearable size="small" >-->
+<!--          <el-option-->
+<!--            v-for="item in projectOptions"-->
+<!--            :key="item.dictValue"-->
+<!--            :label="item.dictLabel"-->
+<!--            :value="item.dictValue"-->
+<!--          />-->
+<!--        </el-select>-->
+<!--      </el-form-item>-->
       <el-form-item label="企微账号" prop="qwUserId" v-if="queryParams.sendType == 2">
         <el-select v-model="queryParams.qwUserId" placeholder="企微账号" clearable size="small"
                    @change="updateQwuser()">
@@ -154,16 +154,16 @@
           :key="createCalendarKey"
         />
       </el-form-item> -->
-        <el-form-item label="创建时间" prop="createTime">
+      <el-form-item label="创建时间" prop="createTime">
         <el-date-picker
           v-model="createTimeText"
-          type="daterange"
+          type="datetimerange"
           range-separator="至"
           start-placeholder="开始日期"
           end-placeholder="结束日期"
-          value-format="yyyy-MM-dd"
-          style="width: 240px"
-           @change="createChange"
+          value-format="yyyy-MM-dd HH:mm:ss"
+          @change="createChange"
+          :default-time="['00:00:00', '23:59:59']"
         />
       </el-form-item>
       <!-- 最新更新时间 -->
@@ -239,20 +239,20 @@
         </el-date-picker>
       </el-form-item>
 
-      <el-form-item label="是否注册" prop="isVip">
-        <el-select
-          filterable
-          v-model="queryParams.isVip"
-          placeholder="请选择是否注册"
-          clearable size="small">
-          <el-option
-            v-for="dict in isVipList"
-            :key="dict.dictValue"
-            :label="dict.dictLabel"
-            :value="dict.dictValue"
-          />
-        </el-select>
-      </el-form-item>
+<!--      <el-form-item label="是否注册" prop="isVip">-->
+<!--        <el-select-->
+<!--          filterable-->
+<!--          v-model="queryParams.isVip"-->
+<!--          placeholder="请选择是否注册"-->
+<!--          clearable size="small">-->
+<!--          <el-option-->
+<!--            v-for="dict in isVipList"-->
+<!--            :key="dict.dictValue"-->
+<!--            :label="dict.dictLabel"-->
+<!--            :value="dict.dictValue"-->
+<!--          />-->
+<!--        </el-select>-->
+<!--      </el-form-item>-->
 
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
@@ -357,6 +357,16 @@
       <el-table-column label="更新时间" align="center" prop="updateTime" width="100px" />
       <el-table-column label="完课时间" align="center" prop="finishTime" width="100px" />
       <el-table-column label="营期时间" align="center" prop="campPeriodTime" />
+      <el-table-column label="是否领奖" align="center" prop="rewardType" >
+        <template slot-scope="scope">
+          <el-tag
+            :type="scope.row.rewardType ? 'success' : 'info'"
+            effect="plain"
+          >
+            {{ scope.row.rewardType ? '已领取' : '未领取' }}
+          </el-tag>
+        </template>
+      </el-table-column>
       <el-table-column
         fixed="right"
         label="操作"
@@ -765,7 +775,7 @@ export default {
       this.courseLists = response.list;
     });
     this.getList();
-    this.getDicts("sys_course_watch_log_type").then(response => {
+    this.getDicts("sys_course_watch_log_type_new").then(response => {
       this.logTypeOptions = response.data;
     });
 
@@ -879,8 +889,8 @@ export default {
     createChange(createTime) {
       if (createTime && createTime.length >= 2) {
         // this.createTimeText = this.formatDateRange(createTime);
-        this.queryParams.sTime = createTime[0] || null;
-        this.queryParams.eTime = createTime[1] || null;
+        this.queryParams.sTime = this.formatDate(createTime[0]) || null;
+        this.queryParams.eTime = this.formatDate(createTime[1]) || null;
       } else {
         this.createTimeText = [];
         this.queryParams.sTime = null;
@@ -1070,7 +1080,7 @@ export default {
       this.queryParams.sopId = null; // 重置SOP ID
       this.queryParams.isVip = null; // 重置 isVip 状态
       this.queryParams.qwUserId = null; // 重置 qwUserId
-
+      this.queryParams.externalUserName=null;
       // 重置SOP搜索
       this.handleSopClear();
       // 统一重置日历组件

+ 2 - 0
src/views/course/courseWatchLog/watchLogStatistics.vue

@@ -247,8 +247,10 @@ export default {
       this.queryParams.upETime = null;
       this.queryParams.scheduleStartTime = null;
       this.queryParams.scheduleEndTime = null;
+      this.queryParams.externalUserName=null;
       this.scheduleTime=null;
       this.updateTime=null;
+
       this.handleQuery();
     },
     // 多选框选中数据

+ 3 - 1
src/views/course/userCourse/index.vue

@@ -391,7 +391,8 @@ export default {
         likes:100000,
         shares:100000,
         favoriteNum:100000,
-        hotNum:100000
+        hotNum:100000,
+        companyIdsList:[]
       };
       this.tags=[];
       this.subCategoryOptions=[]
@@ -406,6 +407,7 @@ export default {
     /** 重置按钮操作 */
     resetQuery() {
       this.resetForm("queryForm");
+      this.queryParams.companyIdsList=null;
       this.queryParams.isShow=this.activeName
       this.handleQuery();
     },

+ 28 - 156
src/views/hisStore/components/productOrder.vue

@@ -356,10 +356,10 @@
     </el-dialog>
     <el-dialog :title="editAddress.title" :visible.sync="editAddress.open" width="600px" append-to-body>
       <el-form ref="editAddressForm" :model="editAddressForm" :rules="editAddressRules" label-width="100px">
-        <el-form-item label="收件人" prop="realName" required>
+        <el-form-item label="收件人" prop="realName">
           <el-input v-model="editAddressForm.realName" placeholder="请输入收件人" />
         </el-form-item>
-          <el-form-item label="联系电话" prop="userPhone" required>
+          <el-form-item label="联系电话" prop="source">
           <el-input v-model="editAddressForm.userPhone" placeholder="请输入联系电话" />
         </el-form-item>
         <el-form-item label="收货地址" prop="district">
@@ -396,7 +396,7 @@
           </el-col>
         </el-row>
         </el-form-item>
-        <el-form-item label="详细地址" prop="detail" required>
+        <el-form-item label="详细地址" prop="detail">
           <el-input v-model="editAddressForm.detail" placeholder="请输入收货人详细地址" />
         </el-form-item>
       </el-form>
@@ -494,20 +494,7 @@ import { getTcmScheduleList } from "@/api/company/tcmScheduleReport";
 import {getCustomerListBySearch } from "@/api/crm/customer";
 import ImageUpload from '@/components/ImageUpload'
 import Material from '@/components/Material'
-import {
-  bindCustomer,
-  getExpress,
-  listStoreOrder,
-  getStoreOrder,
-  delStoreOrder,
-  addStoreOrder,
-  updateStoreOrder,
-  exportStoreOrder,
-  uploadCredentials,
-  getStoreOrderAddress,
-  getUserPhone,
-  updateAddressErpFsStoreOrder
-} from "@/api/hisStore/storeOrder";
+import {bindCustomer,getExpress, listStoreOrder, getStoreOrder, delStoreOrder, addStoreOrder, updateStoreOrder, exportStoreOrder,uploadCredentials, getStoreOrderAddress,getUserPhone} from "@/api/hisStore/storeOrder";
 import {getCitys} from "@/api/hisStore/city";
 import customerDetails from '../../crm/components/customerDetails.vue';
 import addSms from '../../crm/components/addSms.vue';
@@ -770,157 +757,42 @@ export default {
           this.province=res.data.filter(item => item.level===0 )
         })
     },
-    flattenCityData(data, level = 0) {
-      let result = [];
-      data.forEach(item => {
-        // 转换字段名
-        const cityItem = {
-          cityId: item.value,
-          name: item.label,
-          parentId: item.pid,
-          level: level
-        };
-        result.push(cityItem);
-
-        // 递归处理子节点
-        if (item.children && item.children.length > 0) {
-          result = result.concat(this.flattenCityData(item.children, level + 1));
-        }
-      });
-      return result;
-    },
     handleEditAddress() {
-      let loading = this.$loading({
-        lock: true,
-        text: "请求中...",
-        background: "rgba(0, 0, 0, 0.7)",
-      });
-      const orderId = this.order.id;
-
-      getStoreOrderAddress(orderId).then(addressResponse => {
-        // 更新解密后的地址
-        this.order.userAddress = addressResponse.address;
-
-      }).then(res=>{
-        const id = this.order.id;
-        return getUserPhone(id).then(response =>{
-          this.order.userPhone = response.userPhone;
+        this.getCityList();
+        this.editAddressForm.id=this.order.id;
+        this.editAddressForm.realName=this.order.realName;
+        this.editAddressForm.userPhone=this.order.userPhone;
+        var address=this.order.userAddress.split(' ')
+        var province=this.citys.find((item)=>{
+          return item.name==address[0]&&item.level==0;
+        })
+        if(province!=null){
+          this.editAddressForm.provinceId=province.cityId;
+          this.city=this.citys.filter(item => item.parentId===province.cityId&&item.level==1 )
+        }
+        var city=this.citys.find((item)=>{
+          return item.name==address[1]&&item.level==1;
         })
-      }).then(res=>{
-        return getCitys();
-      }).then(res => {
-        this.citys = this.flattenCityData(res.data);
-        this.province = this.citys.filter(item => item.level === 0);
-
-        this.editAddressForm = {
-          id: this.order.id,
-          realName: this.order.realName,
-          userPhone: this.order.userPhone,
-          provinceId: null,
-          cityId: null,
-          districtId: null,
-          province: '',
-          city: '',
-          district: '',
-          detail: ''
-        };
-
-        // 解析地址
-        if (this.order.userAddress) {
-          var addressParts = this.order.userAddress.split(' ');
-
-          // 查找省份
-          if (addressParts.length > 0) {
-            var province = this.citys.find((item) => {
-              return item.name === addressParts[0] && item.level === 0;
-            });
-            if (province != null) {
-              this.editAddressForm.provinceId = province.cityId;
-              this.editAddressForm.province = province.name;
-
-              // 检查是否为直辖市(北京、上海、天津、重庆)
-              const isDirectMunicipality = ['北京市', '上海市', '天津市', '重庆市'].includes(province.name);
-
-              if (isDirectMunicipality) {
-                // 直辖市处理:先找到市级节点(市辖区)
-                if (addressParts.length > 1) {
-                  // 查找市级节点(第2部分,如"市辖区")
-                  var cityLevel = this.citys.find((item) => {
-                    return item.name === addressParts[1] && item.level === 1 && item.parentId === province.cityId;
-                  });
-
-                  if (cityLevel != null) {
-                    this.editAddressForm.cityId = cityLevel.cityId;
-                    this.editAddressForm.city = cityLevel.name;
-                    this.city = this.citys.filter(item => item.parentId === province.cityId && item.level === 1);
-
-                    // 使用市级节点的cityId作为parentId查找区县
-                    if (addressParts.length > 2) {
-                      var district = this.citys.find((item) => {
-                        return item.name === addressParts[2] && item.level === 2 && item.parentId === cityLevel.cityId;
-                      });
-
-                      if (district != null) {
-                        this.editAddressForm.districtId = district.cityId;
-                        this.editAddressForm.district = district.name;
-                        this.district = this.citys.filter(item => item.parentId === cityLevel.cityId && item.level === 2);
-                      }
-                    }
-
-                    // 提取详细地址(第4部分及之后)
-                    if (addressParts.length > 3) {
-                      this.editAddressForm.detail = addressParts.slice(3).join(' ');
-                    }
-                  }
-                }
-              } else {
-                // 普通省份处理:正常匹配市、区
-                this.city = this.citys.filter(item => item.parentId === province.cityId && item.level === 1);
 
-                // 查找城市
-                if (addressParts.length > 1) {
-                  var city = this.citys.find((item) => {
-                    return item.name === addressParts[1] && item.level === 1;
-                  });
-                  if (city != null) {
-                    this.editAddressForm.cityId = city.cityId;
-                    this.editAddressForm.city = city.name;
-                    this.district = this.citys.filter(item => item.parentId === city.cityId && item.level === 2);
-                  }
-                }
-                // 查找区县
-                if (addressParts.length > 2) {
-                  var district = this.citys.find((item) => {
-                    return item.name === addressParts[2] && item.level === 2;
-                  });
-                  if (district != null) {
-                    this.editAddressForm.districtId = district.cityId;
-                    this.editAddressForm.district = district.name;
-                  }
-                }
-                // 提取详细地址(第4部分及之后)
-                if (addressParts.length > 3) {
-                  this.editAddressForm.detail = addressParts.slice(3).join(' ');
-                }
-              }
-            }
-          }
+        if(city!=null){
+          this.editAddressForm.cityId=city.cityId;
+          this.district=this.citys.filter(item => item.parentId===city.cityId&&item.level==2 )
+        }
+        var district=this.citys.find((item)=>{
+          return item.name==address[2]&&item.level==2;
+        })
+        if(district!=null){
+          this.editAddressForm.districtId=district.cityId;
         }
 
         this.editAddress.open = true;
-      }).catch(error => {
-        this.msgError("加载数据失败");
-        console.error(error);
-      }).finally(()=>{
-        loading.close();
-      })
     },
     /** 提交按钮 */
     submitEditAddressForm() {
       this.$refs["editAddressForm"].validate(valid => {
         if (valid) {
            this.editAddressForm.userAddress=this.editAddressForm.province+" "+this.editAddressForm.city+" "+this.editAddressForm.district+" "+this.editAddressForm.detail;
-            updateAddressErpFsStoreOrder(this.editAddressForm).then(response => {
+            updateStoreOrder(this.editAddressForm).then(response => {
               if (response.code === 200) {
                 this.msgSuccess("修改成功");
                 this.editAddress.open = false;

+ 6 - 0
src/views/member/list.vue

@@ -197,6 +197,12 @@
       <el-table-column label="注册时间" align="center" prop="createTime" width="160" />
       <el-table-column label="备注" align="center" prop="remark" show-overflow-tooltip />
       <el-table-column label="所属员工" align="center" prop="companyUserNickName" />
+      <el-table-column label="会员积分" align="center" prop="integral" />
+      <el-table-column label="是否购买" align="center" prop="isBuy">
+        <template slot-scope="scope">
+          <span>{{ scope.row.isBuy === 1 ? '是' : '否' }}</span>
+        </template>
+      </el-table-column>
       <el-table-column label="操作" align="center" width="120" class-name="small-padding fixed-width">
         <template slot-scope="scope">
           <el-button

+ 6 - 0
src/views/member/mylist.vue

@@ -197,6 +197,12 @@
       <el-table-column label="注册时间" align="center" prop="createTime" width="160" />
       <el-table-column label="备注" align="center" prop="remark" show-overflow-tooltip />
       <el-table-column label="所属员工" align="center" prop="companyUserNickName" />
+      <el-table-column label="会员积分" align="center" prop="integral" />
+      <el-table-column label="是否购买" align="center" prop="isBuy">
+        <template slot-scope="scope">
+          <span>{{ scope.row.isBuy === 1 ? '是' : '否' }}</span>
+        </template>
+      </el-table-column>
       <el-table-column label="操作" align="center" width="120" class-name="small-padding fixed-width">
         <template slot-scope="scope">
           <el-button

+ 1 - 1
src/views/qw/externalContact/deptIndex.vue

@@ -57,7 +57,7 @@
       </el-form-item>
 
       <el-form-item label="性别" prop="gender">
-        <el-select v-model="queryParams.gender" placeholder="状态" clearable size="small">
+        <el-select v-model="queryParams.gender" placeholder="性别" clearable size="small">
           <el-option
             v-for="dict in genderOptions"
             :key="dict.dictValue"

+ 5 - 1
src/views/qw/externalContact/index.vue

@@ -74,7 +74,7 @@
         />
       </el-form-item>
       <el-form-item label="性别" prop="gender">
-        <el-select v-model="queryParams.gender" placeholder="状态" clearable size="small">
+        <el-select v-model="queryParams.gender" placeholder="性别" clearable size="small">
           <el-option
             v-for="dict in genderOptions"
             :key="dict.dictValue"
@@ -805,6 +805,7 @@
               />
             </el-select>
           </el-form-item>
+
           <el-form-item label="课程" prop="courseId">
             <el-select filterable v-model="log.queryParams.courseId" placeholder="请选择课程" clearable size="small"
                        @change="courseChange(log.queryParams.courseId)">
@@ -831,6 +832,9 @@
           </el-form-item>
         </el-form>
         <el-table v-loading="log.loading" :data="log.list">
+          <el-table-column label="编号" align="center" prop="id"/>
+          <el-table-column label="所属企微主体" align="center" prop="corpName"/>
+          <el-table-column label="所属企微" align="center" prop="qwUserName"/>
           <!--          <el-table-column label="企微" align="center" prop="qwUserName"/>-->
           <el-table-column label="项目" align="center" prop="projectName"/>
           <el-table-column label="课程" align="center" prop="courseName"/>

+ 6 - 3
src/views/qw/externalContact/myExternalContact.vue

@@ -34,7 +34,7 @@
       </el-form-item>
 
       <el-form-item label="性别" prop="gender">
-        <el-select v-model="queryParams.gender" placeholder="状态" clearable size="small">
+        <el-select v-model="queryParams.gender" placeholder="性别" clearable size="small">
           <el-option
             v-for="dict in genderOptions"
             :key="dict.dictValue"
@@ -898,7 +898,9 @@
           </el-form-item>
         </el-form>
         <el-table v-loading="log.loading" :data="log.list">
-          <!--          <el-table-column label="企微" align="center" prop="qwUserName"/>-->
+          <el-table-column label="编号" align="center" prop="id"/>
+          <el-table-column label="所属企微主体" align="center" prop="corpName"/>
+          <el-table-column label="所属企微" align="center" prop="qwUserName"/>
           <el-table-column label="项目" align="center" prop="projectName"/>
           <el-table-column label="课程" align="center" prop="courseName"/>
           <el-table-column label="小节" align="aligner" prop="videoName"/>
@@ -921,7 +923,7 @@
         />
       </div>
     </el-drawer>
-    
+
     <el-drawer
         :with-header="false"
         size="75%"
@@ -1280,6 +1282,7 @@ export default {
       this.log.loading = true;
       courseList().then(response => {
         this.courseLists = response.list;
+        this.log.queryParams.externalUserId = row.id;
         this.logList();
       })
     },

+ 12 - 0
src/views/qw/externalContact/selectUser.vue

@@ -28,6 +28,18 @@
     </el-form>
 
     <el-table  height="500" border v-loading="loading" :data="customerList" ref="customerList" >
+      <el-table-column label="用户ID" align="center" prop="userId" />
+      <el-table-column label="企微客户头像" align="center" prop="avatar" width="100px">
+        <template slot-scope="scope">
+          <el-popover
+            placement="right"
+            title=""
+            trigger="hover">
+            <img slot="reference" :src="scope.row.avatar" width="60px">
+            <img :src="scope.row.avatar" style="max-width: 200px;">
+          </el-popover>
+        </template>
+      </el-table-column>
       <el-table-column label="用户昵称" align="center" prop="nickName" />
       <el-table-column label="手机号码" align="center" prop="phone" />
       <el-table-column label="操作"   align="center" fixed="right" width="120px" class-name="small-padding fixed-width">

+ 19 - 4
src/views/qw/externalContactTransfer/companyTransfer.vue

@@ -213,6 +213,15 @@
             </template>
           </el-input>
         </el-form-item>
+        <el-form-item label="清除标签" prop="needClearTag">
+          <el-radio v-model="form.needClearTag" :label="0">不清除</el-radio>
+          <el-radio v-model="form.needClearTag" :label="1">清除</el-radio>
+          <div style="color: #999;font-size: 14px;display: flex;align-items: center;">
+            <i class="el-icon-info"></i>
+            <span v-if="form.needClearTag === 0">不清除标签:客户转接后会保留原标签,不会被清除。</span>
+            <span v-else>清除标签:客户转接后原标签不会保留,仅会存在自动添加的标签。</span>
+          </div>
+        </el-form-item>
         <el-form-item label="消息内容" prop="content">
           <el-input v-model="form.content" placeholder="请输入内容" />
           <div style="color: #999;font-size: 14px;display: flex;align-items: center;">
@@ -221,7 +230,7 @@
           </div>
         </el-form-item>
         <el-card>
-          <companyTransferQwUserSelect :corpId="queryParams.corpId" :companyId="companyId" @selectUser="selectUser"/>
+          <companyTransferQwUserSelect ref="companyTransferSelect" @selectUser="selectUser"/>
         </el-card>
       </el-form>
       <div slot="footer" class="dialog-footer">
@@ -279,7 +288,8 @@ export default {
       form: {
         qwUserId: null,
         nickName: null,
-        content: null
+        content: null,
+        needClearTag: 0
       },
       rules: {
         nickName: [
@@ -390,7 +400,8 @@ export default {
       this.form = {
         qwUserId: null,
         nickName: null,
-        content: null
+        content: null,
+        needClearTag: 0
       };
       this.resetForm("form");
     },
@@ -404,6 +415,9 @@ export default {
       this.submitLoading = false
       this.title = "分配客户"
       this.open = true
+      this.$nextTick(() => {
+        this.$refs.companyTransferSelect.load(this.queryParams.corpId, this.companyId)
+      })
     },
     selectUser(selection) {
       this.form.qwUserId = selection.id
@@ -426,7 +440,8 @@ export default {
             ids: this.ids,
             qwUserId: this.form.qwUserId,
             content: this.form.content,
-            transferType: 1
+            transferType: 1,
+            needClearTag: this.form.needClearTag
           }
 
           companyTransfer(params).then(() => {

+ 13 - 21
src/views/qw/externalContactTransfer/companyTransferQwUserSelect.vue

@@ -61,16 +61,6 @@ import { getCompanyListByCorId } from '@/api/company/company'
 
 export default {
   name: "companyTransferQwUserSelect",
-  props: {
-    corpId: {
-      type: String,
-      default: null
-    },
-    companyId: {
-      type: Number,
-      default: null
-    }
-  },
   data() {
     return {
       // 遮罩层
@@ -92,17 +82,19 @@ export default {
       },
     };
   },
-  created() {
-    getCompanyListByCorId(this.corpId).then(response => {
-      this.companyList = response.data.filter(item => item.dictValue !== this.companyId)
-      if (!Array.isArray(this.companyList) || this.companyList.length === 0) {
-        return
-      }
-      this.queryParams.companyId = this.companyList[0].dictValue;
-      this.handleQuery();
-    })
-  },
   methods: {
+    load(corpId, companyId) {
+      getCompanyListByCorId(corpId).then(response => {
+        this.companyList = response.data.filter(item => item.dictValue !== companyId)
+        if (!Array.isArray(this.companyList) || this.companyList.length === 0) {
+          this.userList = []
+          return
+        }
+        this.queryParams.corpId = corpId;
+        this.queryParams.companyId = this.companyList[0].dictValue;
+        this.handleQuery();
+      })
+    },
     /** 查询企微用户列表 */
     getList() {
       this.loading = true;
@@ -120,8 +112,8 @@ export default {
     /** 搜索按钮操作 */
     handleQuery() {
       this.queryParams.pageNum = 1;
-      this.queryParams.corpId = this.corpId;
       if (!Array.isArray(this.companyList) || this.companyList.length === 0) {
+        this.userList = []
         return
       }
       this.getList();

+ 15 - 2
src/views/qw/externalContactTransfer/deptTransferIndex.vue

@@ -245,6 +245,15 @@
               </el-button>
             </template>
           </el-input>
+        </el-form-item>
+        <el-form-item label="清除标签" prop="needClearTag">
+          <el-radio v-model="form.needClearTag" :label="0">不清除</el-radio>
+          <el-radio v-model="form.needClearTag" :label="1">清除</el-radio>
+          <div style="color: #999;font-size: 14px;display: flex;align-items: center;">
+            <i class="el-icon-info"></i>
+            <span v-if="form.needClearTag === 0">不清除标签:客户转接后会保留原标签,不会被清除。</span>
+            <span v-else>清除标签:客户转接后原标签不会保留,仅会存在自动添加的标签。</span>
+          </div>
         </el-form-item>
 		<el-form-item label="消息内容" prop="content">
 		  <el-input v-model="form.content" placeholder="请输入内容" />
@@ -333,7 +342,9 @@ export default {
         transferStatus:null
       },
       // 表单参数
-      form: {},
+      form: {
+        needClearTag: 0
+      },
       tagList:[],
       transferStatusOptions:[],
       statusOptions:[],
@@ -423,7 +434,8 @@ export default {
         addWay: null,
         operUserid: null,
         corpId: null,
-        companyId: null
+        companyId: null,
+        needClearTag: 0
       };
       this.resetForm("form");
     },
@@ -484,6 +496,7 @@ export default {
               userId:this.form.userId,
               corpId:this.queryParams.corpId,
 			  content:this.form.content,
+              needClearTag: 0
             }
             transfer(form).then(response => {
               this.msgSuccess(response.msg);

+ 15 - 2
src/views/qw/externalContactTransfer/index.vue

@@ -254,6 +254,15 @@
               </el-button>
             </template>
           </el-input>
+        </el-form-item>
+        <el-form-item label="清除标签" prop="needClearTag">
+          <el-radio v-model="form.needClearTag" :label="0">不清除</el-radio>
+          <el-radio v-model="form.needClearTag" :label="1">清除</el-radio>
+          <div style="color: #999;font-size: 14px;display: flex;align-items: center;">
+            <i class="el-icon-info"></i>
+            <span v-if="form.needClearTag === 0">不清除标签:客户转接后会保留原标签,不会被清除。</span>
+            <span v-else>清除标签:客户转接后原标签不会保留,仅会存在自动添加的标签。</span>
+          </div>
         </el-form-item>
 		<el-form-item label="消息内容" prop="content">
 		  <el-input v-model="form.content" placeholder="请输入内容" />
@@ -344,7 +353,9 @@ export default {
         transferStatus:null
       },
       // 表单参数
-      form: {},
+      form: {
+        needClearTag: 0
+      },
       tagList:[],
       transferStatusOptions:[],
       statusOptions:[],
@@ -434,7 +445,8 @@ export default {
         addWay: null,
         operUserid: null,
         corpId: null,
-        companyId: null
+        companyId: null,
+        needClearTag: 0
       };
       this.resetForm("form");
     },
@@ -505,6 +517,7 @@ export default {
               userId:this.form.userId,
               corpId:this.queryParams.corpId,
 			        content:this.form.content,
+              needClearTag: this.form.needClearTag
             }
             transfer(form).then(response => {
               this.msgSuccess(response.msg);

+ 47 - 20
src/views/qw/externalContactTransferLog/companyTransferDetail.vue

@@ -1,19 +1,20 @@
 <template>
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="企微公司" prop="corpId">
+        <el-select clearable v-model="queryParams.corpId" placeholder="请选择企微公司"  size="small" @change="updateCorpId()">
+          <el-option
+            v-for="dict in myQwCompanyList"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </el-select>
+      </el-form-item>
       <el-form-item label="公司名称" prop="companyName">
         <el-input
           v-model="queryParams.companyName"
-          placeholder="请输入销售公司名称"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="主体名称" prop="corpName">
-        <el-input
-          v-model="queryParams.corpName"
-          placeholder="请输入企微主体名称"
+          placeholder="请输入接替销售公司名称"
           clearable
           size="small"
           @keyup.enter.native="handleQuery"
@@ -22,7 +23,7 @@
       <el-form-item label="销售名称" prop="companyUserName">
         <el-input
           v-model="queryParams.companyUserName"
-          placeholder="请输入销售名称"
+          placeholder="请输入接替销售名称"
           clearable
           size="small"
           @keyup.enter.native="handleQuery"
@@ -40,12 +41,13 @@
         </el-select>
       </el-form-item>
       <el-form-item>
-        <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
       </el-form-item>
     </el-form>
 
     <el-table v-loading="loading" :data="list" border>
+      <el-table-column label="ID" align="center" prop="id" width="55"/>
       <el-table-column label="主体名称" align="center" prop="corpName" />
       <el-table-column label="接替公司名称" align="center" prop="companyName" />
       <el-table-column label="接替销售名称" align="center" prop="companyUserName" />
@@ -95,6 +97,7 @@
         </el-col>
       </el-row>
       <el-table v-loading="detailLoading" :data="userList" border>
+        <el-table-column label="ID" align="center" prop="id" />
         <el-table-column label="客户名称" align="center" prop="externalUserName" />
         <el-table-column label="原公司名称" align="center" prop="companyName" />
         <el-table-column label="原销售名称" align="center" prop="companyUserName" />
@@ -106,12 +109,21 @@
           </template>
         </el-table-column>
       </el-table>
+
+      <pagination
+        v-show="userTotal>0"
+        :total="userTotal"
+        :page.sync="userQueryParams.pageNum"
+        :limit.sync="userQueryParams.pageSize"
+        @pagination="getUserList"
+      />
     </el-drawer>
   </div>
 </template>
 
 <script>
 import { detail, listExternalContactTransferAudit, sync } from '@/api/qw/externalContactTransferAudit'
+import { getMyQwCompanyList } from '@/api/qw/user'
 
 export default {
   name: "companyTransferDetail",
@@ -126,6 +138,7 @@ export default {
         corpName: null,
         companyUserName: null,
         status: 0,
+        corpId: null,
       },
       total: 0,
       list: [],
@@ -134,12 +147,21 @@ export default {
       dialogAuditVisible: false,
       dialogViewVisible: false,
       detailLoading: false,
+      userQueryParams: {
+        pageNum: 1,
+        pageSize: 10,
+      },
       userList: [],
+      userTotal: 0,
       currentAudit: {},
       syncLoading: false,
+      myQwCompanyList:[],
     }
   },
   created() {
+    getMyQwCompanyList().then(response => {
+      this.myQwCompanyList = response.data;
+    });
     this.getDicts("sys_qw_transfer_audit_status").then((response) => {
       this.auditStatusOptions = response.data;
     });
@@ -149,6 +171,9 @@ export default {
     this.handleQuery()
   },
   methods: {
+    updateCorpId() {
+      this.handleQuery()
+    },
     handleQuery() {
       this.queryParams.pageNum = 1;
       this.getList();
@@ -161,6 +186,7 @@ export default {
         corpName: null,
         companyUserName: null,
         status: 0,
+        corpId: null,
       };
       this.resetForm("queryForm");
       this.handleQuery();
@@ -185,22 +211,23 @@ export default {
     },
     handleView(row) {
       this.currentAudit = row
+      this.userQueryParams.pageNum = 1
+      this.getUserList()
+      this.dialogViewVisible = true
+    },
+    getUserList() {
       this.detailLoading = true
-      detail(row.id).then(response => {
-        this.userList = response.data
+      detail(this.currentAudit.id, this.userQueryParams).then(response => {
+        this.userList = response.rows
+        this.userTotal = response.total
         this.detailLoading = false
       })
-      this.dialogViewVisible = true
     },
     sync() {
       const id = this.currentAudit.id
       this.syncLoading = true
       sync(id).then(() => {
-        this.detailLoading = true
-        detail(id).then(response => {
-          this.userList = response.data
-          this.detailLoading = false
-        })
+        this.getUserList()
         this.syncLoading = false
       })
     },

+ 11 - 0
src/views/qw/externalContactTransferLog/deptTransferLogIndex.vue

@@ -22,6 +22,16 @@
         />
       </el-form-item>
 
+      <el-form-item label="客户姓名" prop="name">
+        <el-input
+          style="width:220px"
+          v-model="queryParams.name"
+          placeholder="请输入客户姓名"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
 
 
       <el-form-item label="状态" prop="status">
@@ -172,6 +182,7 @@ export default {
         externalContactId: null,
         status: null,
         companyUserNickName:null,
+        name:null,
       },
       // 表单参数
       form: {},

+ 12 - 0
src/views/qw/externalContactTransferLog/index.vue

@@ -23,6 +23,17 @@
       </el-form-item>
 
 
+      <el-form-item label="客户姓名" prop="name">
+        <el-input
+          style="width:220px"
+          v-model="queryParams.name"
+          placeholder="请输入客户姓名"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+
 
       <el-form-item label="状态" prop="status">
         <el-select v-model="queryParams.status" placeholder="请选择状态" clearable size="small">
@@ -172,6 +183,7 @@ export default {
         externalContactId: null,
         status: null,
         companyUserNickName:null,
+        name:null,
       },
       // 表单参数
       form: {},

+ 12 - 0
src/views/qw/externalContactTransferLog/my.vue

@@ -22,6 +22,17 @@
         />
       </el-form-item>
 
+      <el-form-item label="客户姓名" prop="name">
+        <el-input
+          style="width:220px"
+          v-model="queryParams.name"
+          placeholder="请输入客户姓名"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+
 
 
       <el-form-item label="状态" prop="status">
@@ -172,6 +183,7 @@ export default {
         externalContactId: null,
         status: null,
         companyUserNickName:null,
+        name:null,
       },
       // 表单参数
       form: {},

+ 19 - 4
src/views/qw/externalContactUnassigned/companyUnassigned.vue

@@ -206,8 +206,17 @@
             </template>
           </el-input>
         </el-form-item>
+        <el-form-item label="清除标签" prop="needClearTag">
+          <el-radio v-model="form.needClearTag" :label="0">不清除</el-radio>
+          <el-radio v-model="form.needClearTag" :label="1">清除</el-radio>
+          <div style="color: #999;font-size: 14px;display: flex;align-items: center;">
+            <i class="el-icon-info"></i>
+            <span v-if="form.needClearTag === 0">不清除标签:客户转接后会保留原标签,不会被清除。</span>
+            <span v-else>清除标签:客户转接后原标签不会保留,仅会存在自动添加的标签。</span>
+          </div>
+        </el-form-item>
         <el-card>
-          <companyTransferQwUserSelect :corpId="queryParams.corpId" :companyId="companyId" @selectUser="selectUser"/>
+          <companyTransferQwUserSelect ref="companyTransferSelect" @selectUser="selectUser"/>
         </el-card>
       </el-form>
       <div slot="footer" class="dialog-footer">
@@ -266,7 +275,8 @@ export default {
         nickName: null,
         content: null,
         type: 0,
-        oldQwUserId: null
+        oldQwUserId: null,
+        needClearTag: 0
       },
       rules: {
         nickName: [
@@ -399,7 +409,8 @@ export default {
         nickName: null,
         content: null,
         type: 0,
-        oldQwUserId: null
+        oldQwUserId: null,
+        needClearTag: 0
       };
       this.resetForm("form");
     },
@@ -421,6 +432,9 @@ export default {
       this.submitLoading = false
       this.title = "分配该员工所有客户"
       this.open = true
+      this.$nextTick(() => {
+        this.$refs.companyTransferSelect.load(this.queryParams.corpId, this.companyId)
+      })
     },
     selectUser(selection) {
       this.form.qwUserId = selection.id
@@ -445,7 +459,8 @@ export default {
             content: this.form.content,
             type: this.form.type,
             transferType: 2,
-            oldQwUserId: this.form.oldQwUserId
+            oldQwUserId: this.form.oldQwUserId,
+            needClearTag: this.form.needClearTag
           }
 
           companyTransfer(params).then(() => {

+ 13 - 1
src/views/qw/externalContactUnassigned/deptUnassignedIndex.vue

@@ -207,6 +207,15 @@
           </el-input>
 
 
+        </el-form-item>
+        <el-form-item label="清除标签" prop="needClearTag">
+          <el-radio v-model="form.needClearTag" :label="0">不清除</el-radio>
+          <el-radio v-model="form.needClearTag" :label="1">清除</el-radio>
+          <div style="color: #999;font-size: 14px;display: flex;align-items: center;">
+            <i class="el-icon-info"></i>
+            <span v-if="form.needClearTag === 0">不清除标签:客户转接后会保留原标签,不会被清除。</span>
+            <span v-else>清除标签:客户转接后原标签不会保留,仅会存在自动添加的标签。</span>
+          </div>
         </el-form-item>
         <el-card>
         <qwUserSelectOne ref="qwUserSelectOne" @selectUser="selectUser"></qwUserSelectOne>
@@ -295,6 +304,7 @@ export default {
       nickName:null,
       // 表单参数
       form: {
+        needClearTag: 0
       },
       tagList:[],
       transferStatusOptions:[],
@@ -376,7 +386,8 @@ export default {
         addWay: null,
         operUserid: null,
         corpId: null,
-        companyId: null
+        companyId: null,
+        needClearTag: 0
       };
       this.resetForm("form");
     },
@@ -434,6 +445,7 @@ export default {
               ids:this.ids,
               userId:this.form.userId,
               corpId:this.queryParams.corpId,
+              needClearTag: this.form.needClearTag
             }
             resignedTransfer(form).then(response => {
               this.msgSuccess(response.msg);

+ 13 - 1
src/views/qw/externalContactUnassigned/index.vue

@@ -221,6 +221,15 @@
           </el-input>
 
 
+        </el-form-item>
+        <el-form-item label="清除标签" prop="needClearTag">
+          <el-radio v-model="form.needClearTag" :label="0">不清除</el-radio>
+          <el-radio v-model="form.needClearTag" :label="1">清除</el-radio>
+          <div style="color: #999;font-size: 14px;display: flex;align-items: center;">
+            <i class="el-icon-info"></i>
+            <span v-if="form.needClearTag === 0">不清除标签:客户转接后会保留原标签,不会被清除。</span>
+            <span v-else>清除标签:客户转接后原标签不会保留,仅会存在自动添加的标签。</span>
+          </div>
         </el-form-item>
         <el-card>
         <qwUserSelectOne ref="qwUserSelectOne" @selectUser="selectUser"></qwUserSelectOne>
@@ -306,6 +315,7 @@ export default {
       nickName:null,
       // 表单参数
       form: {
+        needClearTag: 0
       },
       tagList:[],
       transferStatusOptions:[],
@@ -404,7 +414,8 @@ export default {
         addWay: null,
         operUserid: null,
         corpId: null,
-        companyId: null
+        companyId: null,
+        needClearTag: 0
       };
       this.resetForm("form");
     },
@@ -480,6 +491,7 @@ export default {
               ids:this.ids,
               userId:this.form.userId,
               corpId:this.queryParams.corpId,
+              needClearTag: this.form.needClearTag
             }
             resignedTransfer(form).then(response => {
               this.msgSuccess(response.msg);

+ 8 - 4
src/views/qw/qwUserVoiceLog/index.vue

@@ -77,7 +77,7 @@
 
       <el-form-item label="标签" prop="tagIds">
         <div @click="hangleChangeTags()" style="cursor: pointer; border: 1px solid #e6e6e6; background-color: white; overflow: hidden; flex-grow: 1;width: 250px">
-          <div style="min-height: 35px; max-height: 200px; overflow-y: auto;">
+          <div style="min-height: 35px; max-height: 200px; overflow-y: auto;" :key="selectTags.length">
             <el-tag type="success"
                     closable
                     :disable-transitions="false"
@@ -560,19 +560,23 @@ export default {
       }else {
         this.queryParams.tagIds=null;
       }
-
-
       this.queryParams.pageNum = 1;
       this.getList();
     },
     /** 重置按钮操作 */
     resetQuery() {
       this.resetForm("queryForm");
-      this.queryParams.corpId= this.myQwCompanyList[0].dictValue;
+      if (this.myQwCompanyList && this.myQwCompanyList.length > 0) {
+        this.queryParams.corpId = this.myQwCompanyList[0].dictValue;
+      } else {
+        this.queryParams.corpId = null; // 或设置默认值
+      }
       this.selectTags=[];
       this.createTime=null;
       this.queryParams.sTime=null;
       this.queryParams.eTime=null;
+      this.queryParams.tagIds=null;
+      this.$forceUpdate();
       this.handleQuery();
     },
     // 多选框选中数据

+ 9 - 2
src/views/qw/qwUserVoiceLogTotal/index.vue

@@ -83,7 +83,7 @@
             </el-form-item>-->
       <el-form-item label="标签" prop="tagIds">
         <div @click="hangleChangeTags()" style="cursor: pointer; border: 1px solid #e6e6e6; background-color: white; overflow: hidden; flex-grow: 1;width: 250px">
-          <div style="min-height: 35px; max-height: 200px; overflow-y: auto;">
+          <div style="min-height: 35px; max-height: 200px; overflow-y: auto;" :key="selectTags.length">
             <el-tag type="success"
                     closable
                     :disable-transitions="false"
@@ -634,11 +634,18 @@ export default {
       this.createTime=null;
       this.queryParams.beginTime = null;
       this.queryParams.endTime = null;
-      this.queryParams.corpId= this.myQwCompanyList[0].dictValue;
+      this.queryParams.deptId = null;
+      if (this.myQwCompanyList && this.myQwCompanyList.length > 0) {
+        this.queryParams.corpId= this.myQwCompanyList[0].dictValue;
+      } else {
+        this.queryParams.corpId = null; // 或设置默认值
+      }
       this.selectTags=[];
       this.createTime=null;
       this.queryParams.sTime=null;
       this.queryParams.eTime=null;
+      this.queryParams.tagIds=null;
+      this.$forceUpdate();
       this.handleQuery();
     },
     // 多选框选中数据

+ 45 - 2
src/views/qw/sopUserLogs/sopUserLogsSchedule.vue

@@ -133,6 +133,17 @@
             v-hasPermi="['qw:sopUserLogs:remove']"
           >批量删除营期</el-button>
         </el-tooltip>
+      </el-col>
+                  <el-col :span="1.5">
+        <el-tooltip class="item" effect="dark" content="批量更换实际发送人" placement="top" >
+          <el-button
+            type="primary"
+            icon="el-icon-s-custom"
+            size="medium"
+            :disabled="multiple"
+            @click="handleUpdateSender"
+          >批量更换实际发送人</el-button>
+        </el-tooltip>
       </el-col>
     </el-row>
     <div style="color: #999;font-size: 14px;display: flex;align-items: center;margin-bottom: 5px" v-if="filterMode == 1">
@@ -152,6 +163,7 @@
       <el-table-column label="营期编号" align="center" prop="id" />
       <el-table-column label="企微员工账号" align="center" prop="qwUserId" />
       <el-table-column label="企微员工名称" align="center" prop="qwUserName" />
+      <el-table-column label="实际发送人" align="center" prop="actualQwUserName" />
       <el-table-column label="群聊" align="center" prop="chatName" v-if="filterMode == 2" />
       <el-table-column label="营期时间" align="center" prop="startTime" width="180">
         <template slot-scope="scope">
@@ -239,6 +251,10 @@
       <qwUserList ref="QwUserList" @selectUserList="selectUserList"></qwUserList>
     </el-dialog>
 
+        <el-dialog :title="listUser.title" :visible.sync="listUser.open" width="1300px"   append-to-body>
+      <qwUserSelectOne ref="QwUserListSender" @selectUser="selectSenderSingle"></qwUserSelectOne>
+    </el-dialog>
+
     <el-dialog title="追加群聊" :visible.sync="addGroupData.open"  width="800px" append-to-body>
       <el-form ref="msgForm" :model="addGroupData.form" label-width="100px">
         <el-form-item label="选择员工" prop="qwUserIds" style="margin-top: 2%">
@@ -292,7 +308,7 @@ import {
   repairSopUserLogs,
   getSelectChat,
   addGroupChat,
-  updateLogDate
+  updateLogDate,UpdateTimeSopUserLogs,replaceUser
 } from "../../../api/qw/sopUserLogs";
 import sopLogsDetails from "@/views/qw/sopLogs/sopLogsList.vue";
 import SopUserLogsInfoDetails from "@/views/qw/sopUserLogsInfo/sopUserLogsInfoDetails.vue";
@@ -300,11 +316,12 @@ import sendMsgOpenTool from "../../../views/qw/sopUserLogsInfo/sendMsgOpenTool.v
 import {listAll as chatListAll} from "@/api/qw/groupChat";
 import companyUserList from "@/views/company/companyUser/companyUserList.vue";
 import qwUserList from "@/views/qw/user/qwUserList.vue";
+import qwUserSelectOne from "@/views/qw/user/qwUserSelectOne.vue";
 import {getQwAllUserList, listUser} from "@/api/company/companyUser";
 
 export default {
   name: "sopUserLogsSchedule",
-  components: {qwUserList, companyUserList, SopUserLogsInfoDetails, sopLogsDetails,sendMsgOpenTool},
+  components: {qwUserList, qwUserSelectOne, companyUserList, SopUserLogsInfoDetails, sopLogsDetails,sendMsgOpenTool},
   props:{
     rowDetailFrom:{},
   },
@@ -316,6 +333,10 @@ export default {
       companyUserLists:[],
       sopName:'',
       tempId:'',
+      listUser: {
+        title: '选择发送人',
+        open: false
+      },
       // 遮罩层
       loading: true,
       // 导出遮罩层
@@ -420,6 +441,19 @@ export default {
 
   },
   methods: {
+        selectSenderSingle(user){
+      this.listUser.open=false;
+      const data = { ids: this.ids };
+      // 仅在选中员工时携带 actualQwUserId 与 actualQwId,否则两字段均不传,后端按清空处理
+      if (user && user.qwUserId) {
+        data.actualQwUserId = user.qwUserId;
+        data.actualQwId     = user.id;   
+      }
+      replaceUser(data).then(res => {
+        this.msgSuccess(user && user.qwUserId ? "修改成功" : "已清空实际发送人");
+        this.getList();
+      })
+    },
     /** 查询sopUserLogs列表 */
     getList() {
       this.loading = true;
@@ -470,6 +504,15 @@ export default {
 
     },
 
+        /**
+     * 批量更换实际发送人
+     */
+    handleUpdateSender() {
+      this.listUser.open = true;
+      this.$nextTick(() => {
+        this.$refs.QwUserListSender.getDetails(this.queryParams.corpId);
+      })
+    },
     /**
      *  删除营期
      */

+ 1 - 1
src/views/qw/user/cuDeptIdIndex.vue

@@ -77,7 +77,7 @@
       <el-table-column label="企微账号" align="center" prop="qwUserId" />
       <el-table-column label="企微昵称" align="center" prop="qwUserName" />
       <el-table-column label="员工称呼" align="center" prop="welcomeText" />
-      <el-table-column label="所属部门" align="center" prop="isDel">
+      <el-table-column label="员工状态" align="center" prop="isDel">
         <template slot-scope="scope">
           <el-tag v-if="scope.row.isDel == 0" type="success">正常</el-tag>
           <el-tag v-else type="error">离职</el-tag>

+ 4 - 5
src/views/qw/user/index.vue

@@ -89,7 +89,7 @@
       <el-table-column label="企微账号" align="center" prop="qwUserId" />
       <el-table-column label="企微昵称" align="center" prop="qwUserName" />
       <el-table-column label="员工称呼" align="center" prop="welcomeText" />
-      <el-table-column label="所属部门" align="center" prop="isDel">
+      <el-table-column label="员工状态" align="center" prop="isDel">
         <template slot-scope="scope">
           <el-tag v-if="scope.row.isDel == 0" type="success">正常</el-tag>
           <el-tag v-else type="error">离职</el-tag>
@@ -538,7 +538,6 @@
 import {
   updateIsAuto,
   updateUser,
-  exportUser,
   getMyQwCompanyList,
   relieveFastGptRoleById,
   loginQwIpad,
@@ -553,7 +552,7 @@ import {
   outLoginQwIpad,
   changeVideoStatus,
   handleAllocateRemoteHost,
-  qwBindCloudHost, qwUnbindCloudHost, handleAuthAppKey, handleInputAuthAppKey, selectCloudAP, staffListUser
+  qwBindCloudHost, qwUnbindCloudHost, handleAuthAppKey, handleInputAuthAppKey, selectCloudAP, staffListUser, exportStaff
 } from '../../../api/qw/user'
 import fastGptRole from "@/views/fastGpt/fastGptRole/fastGptRole";
 
@@ -1204,13 +1203,13 @@ export default {
     /** 导出按钮操作 */
     handleExport() {
       const queryParams = this.queryParams;
-      this.$confirm('是否确认导出所有企微用户数据项?', "警告", {
+      this.$confirm('是否确认导出所有企微员工数据项?', "警告", {
         confirmButtonText: "确定",
         cancelButtonText: "取消",
         type: "warning"
       }).then(() => {
         this.exportLoading = true;
-        return exportUser(queryParams);
+        return exportStaff(queryParams);
       }).then(response => {
         this.download(response.msg);
         this.exportLoading = false;

+ 9 - 1
src/views/qw/user/qwUserSelectOne.vue

@@ -41,6 +41,11 @@
       @pagination="handlePaginationChange"
     />
 
+        <div style="margin-top: 30px;display: flex;justify-content: center;gap: 12px">
+      <el-button plain @click="handleClear">不选(清空发送人)</el-button>
+      <el-button type="warning" icon="el-icon-check" @click="confirmSelect">确定选择</el-button>
+    </div>
+
   </div>
 </template>
 
@@ -167,7 +172,10 @@ export default {
     handleSelectionChange(selection) {
       this.$emit("selectUser",selection);
     },
-
+    // 用户点击“不选”
+    handleClear() {
+      this.$emit("selectUser",{});   // 传空对象,表示清空
+    },
   }
 };
 </script>

+ 20 - 31
src/views/store/components/productOrder.vue

@@ -15,14 +15,14 @@
         <span  style="margin-left: 20px" class="color-danger">订单状态:
            <el-tag prop="status" v-for="(item, index) in statusOptions"    v-if="order.status==item.dictValue">{{item.dictLabel}}</el-tag>
         </span>
-
+       
         <div class="operate-button-container" >
           <el-button size="mini" @click="handleCertificates()"  v-hasPermi="['store:storeOrder:uploadCredentials']" >上传凭证</el-button>
           <el-button size="mini" @click="handleEditAddress()" v-if="order.status==0||order.status==1"  v-hasPermi="['store:storeOrder:editAddress']" >修改收货地址</el-button>
           <el-button size="mini" @click="handleBindCustomer()"  v-hasPermi="['store:storeOrder:bindCustomer']" >关联客户</el-button>
           <el-button size="mini" @click="editOrder()"  v-hasPermi="['store:storeOrder:edit']" >修改订单</el-button>
           <!-- <el-button size="mini" @click="handleEditUser()"  v-hasPermi="['users:user:edit']" >修改会员修改</el-button> -->
-          <el-button size="mini" v-if="order.customerId!=null&&order.customerId>0"  @click="handleCustomer()"    >查看客户详情</el-button>
+          <el-button size="mini" v-if="order.customerId!=null&&order.customerId>0"  @click="handleCustomer()"    >查看客户详情</el-button>         
         </div>
         <div class="operate-button-container"  v-hasPermi="['store:storeOrder:express']"  >
           <el-button size="mini" @click="showExpress()" >查看物流</el-button>
@@ -48,7 +48,7 @@
             </el-descriptions-item>
             <!-- <el-descriptions-item label="进线时间"  >
                 <span v-if="user!=null">
-                  {{user.registerDate}}
+                  {{user.registerDate}} 
                 </span>
             </el-descriptions-item>
             <el-descriptions-item label="推线编码"  >
@@ -56,7 +56,7 @@
                   {{user.registerCode}}
                 </span>
             </el-descriptions-item> -->
-
+             
             <el-descriptions-item label="收货人"  >
                 <span v-if="order!=null ">
                   {{order.realName }}
@@ -123,7 +123,7 @@
                   {{customerInfo.registerDate }}
                 </span>
             </el-descriptions-item>
-
+        
       </el-descriptions>
       <div style="margin: 20px 0px"  v-if="order!=null">
         <span class="font-small">
@@ -286,7 +286,7 @@
     <el-dialog :title="editUser.title" :visible.sync="editUser.open" width="600px" append-to-body>
       <el-form ref="editUserForm" :model="editUserForm" :rules="editUserRules" label-width="100px">
          <el-form-item label="进线时间" prop="registerDate">
-          <el-date-picker clearable size="small"
+          <el-date-picker clearable size="small"  
             v-model="editUserForm.registerDate"
             type="date"
             value-format="yyyy-MM-dd"
@@ -386,7 +386,7 @@
               <el-button type="primary" @click="searchCustomer">查看</el-button>
             </el-col>
           </el-row>
-
+          
         </el-form-item>
         <el-form-item label="客户选择"  prop="customerIds">
           <el-table   @selection-change="handleSelectionChange"
@@ -440,23 +440,12 @@ import {updateUser,getUser } from "@/api/users/user";
 
 import {getCustomerListBySearch } from "@/api/crm/customer";
 import ImageUpload from '@/components/ImageUpload'
-import {
-  bindCustomer,
-  getExpress,
-  listStoreOrder,
-  getStoreOrder,
-  delStoreOrder,
-  addStoreOrder,
-  updateStoreOrder,
-  exportStoreOrder,
-  uploadCredentials,
-  updateAddressErpFsStoreOrder
-} from "@/api/store/storeOrder";
+import {bindCustomer,getExpress, listStoreOrder, getStoreOrder, delStoreOrder, addStoreOrder, updateStoreOrder, exportStoreOrder,uploadCredentials } from "@/api/store/storeOrder";
 import {getAllList} from "@/api/store/city";
 import customerDetails from '../../crm/components/customerDetails.vue';
 export default {
   name: "order",
-  components: {customerDetails,
+  components: {customerDetails, 
     ImageUpload },
   data() {
     return {
@@ -509,7 +498,7 @@ export default {
       },
       editAddressForm:{
         districtId:null,
-
+        
       },
       editAddressRules:{
 
@@ -564,7 +553,7 @@ export default {
     this.getDicts("store_order_create_type").then((response) => {
       this.createTypeOptions = response.data;
     });
-
+   
   },
   methods: {
     showImageDialog() {
@@ -587,7 +576,7 @@ export default {
       }
       var data={mobile:this.bindCustomerForm.mobile};
       getCustomerListBySearch(data).then(response => {
-          this.customers=response.data;
+          this.customers=response.data;        
       });
     },
     handleBindCustomer() {
@@ -632,7 +621,7 @@ export default {
           if(this.express!=null&&this.express.Traces!=null){
               this.traces=this.express.Traces
           }
-
+          
       });
 
     },
@@ -651,8 +640,8 @@ export default {
       })
       console.log(item)
       this.editAddressForm.city=item.name;
-
-
+ 
+        
     },
     provinceChange(val){
       this.city=this.citys.filter(item => item.parentId===val )
@@ -686,7 +675,7 @@ export default {
         var city=this.citys.find((item)=>{
           return item.name==address[1]&&item.level==1;
         })
-
+        
         if(city!=null){
           this.editAddressForm.cityId=city.cityId;
           this.district=this.citys.filter(item => item.parentId===city.cityId&&item.level==2 )
@@ -697,7 +686,7 @@ export default {
         if(district!=null){
           this.editAddressForm.districtId=district.cityId;
         }
-
+        
         this.editAddress.open = true;
     },
     /** 提交按钮 */
@@ -705,7 +694,7 @@ export default {
       this.$refs["editAddressForm"].validate(valid => {
         if (valid) {
            this.editAddressForm.userAddress=this.editAddressForm.province+" "+this.editAddressForm.city+" "+this.editAddressForm.district+" "+this.editAddressForm.detail;
-            updateAddressErpFsStoreOrder(this.editAddressForm).then(response => {
+            updateStoreOrder(this.editAddressForm).then(response => {
               if (response.code === 200) {
                 this.msgSuccess("修改成功");
                 this.editAddress.open = false;
@@ -749,7 +738,7 @@ export default {
               this.getOrder(this.order.id);
             }
           });
-
+       
         }
       });
     },
@@ -768,7 +757,7 @@ export default {
             this.order = response.order;
             if(response.order.certificates != null){
               this.certificates = response.order.certificates;
-            }
+            }  
             this.user = response.user;
             this.logs = response.logs;
             this.items = response.items;

+ 43 - 76
src/views/store/components/storeOrderDetails.vue

@@ -411,36 +411,7 @@
 </template>
 
 <script>
-import {
-  bindCustomer,
-  msgList,
-  getMsgFollow,
-  updateMoney,
-  getGoods,
-  getEroOrder,
-  editTuiMoney,
-  updateDelivery,
-  createErpOrder,
-  updateExpress,
-  afterSales,
-  sendgoods,
-  logList,
-  listOrder,
-  getExpress,
-  syncExpress,
-  listOrderitem,
-  getOrder,
-  getOrderAddress,
-  getUserPhone,
-  delOrder,
-  addOrder,
-  updateStoreOrder,
-  exportOrder,
-  payment,
-  tuiOrder,
-  getPrescribe,
-  updateAddressErpFsStoreOrder
-} from "@/api/store/storeOrder";
+import {bindCustomer, msgList,getMsgFollow,updateMoney,getGoods,getEroOrder,editTuiMoney,updateDelivery,createErpOrder,updateExpress, afterSales,sendgoods,logList,listOrder,getExpress,syncExpress, listOrderitem,getOrder,getOrderAddress,getUserPhone, delOrder, addOrder, updateStoreOrder, exportOrder,payment,tuiOrder ,getPrescribe} from "@/api/store/storeOrder";
 import packageOrderDetails from '../components/packageOrderDetails2.vue';
 import {getCustomerListBySearch } from "@/api/crm/customer";
 import { getTcmScheduleList } from "@/api/company/tcmScheduleReport";
@@ -741,13 +712,13 @@ import {getCitys} from "@/api/store/city";
       },
       handlePhone(){
         const orderId = this.item.orderId;
-        return getUserPhone(orderId).then(response =>{
+        getUserPhone(orderId).then(response =>{
             this.item.userPhone = response.userPhone;
         })
       },
       handleAddress(){
         const orderId = this.item.orderId;
-        return getOrderAddress(orderId).then(response =>{
+        getOrderAddress(orderId).then(response =>{
             this.item.userAddress = response.address;
         })
       },
@@ -807,7 +778,7 @@ import {getCitys} from "@/api/store/city";
           userAddress: addressModified ? this.buildFullAddress() : (this.originalAddress || this.item.userAddress || ''),
         };
 
-        updateAddressErpFsStoreOrder(payload).then(response => {
+        updateStoreOrder(payload).then(response => {
           if (response.code === 200) {
             this.msgSuccess("操作成功");
             this.edit.open = false;
@@ -821,52 +792,48 @@ import {getCitys} from "@/api/store/city";
       });
     },
     editOrder() {
-      this.handlePhone().then(res=>{
-        return this.handleAddress()
-      }).then(res=>{
-        this.edit.open = true;
-        this.editForm.orderId = this.item.orderId;
-        this.editForm.remark = this.item.remark;
-        this.editForm.userPhone = this.item.userPhone != null ? this.item.userPhone.toString() : "";
-        if (this.item.orderBuyType != null) {
-          this.editForm.orderBuyType = this.item.orderBuyType.toString();
-        }
-        this.editForm.orderChannel = this.item.orderChannel;
-        this.editForm.qwSubject = this.item.qwSubject;
-        this.editForm.scheduleId = this.item.scheduleId;
+      this.edit.open = true;
+      this.editForm.orderId = this.item.orderId;
+      this.editForm.remark = this.item.remark;
+      this.editForm.userPhone = this.item.userPhone != null ? this.item.userPhone.toString() : "";
+      if (this.item.orderBuyType != null) {
+        this.editForm.orderBuyType = this.item.orderBuyType.toString();
+      }
+      this.editForm.orderChannel = this.item.orderChannel;
+      this.editForm.qwSubject = this.item.qwSubject;
+      this.editForm.scheduleId = this.item.scheduleId;
 
-        const currentAddress = (this.item.userAddress || "").toString().trim();
-        // 记录原始完整地址
-        this.originalAddress = currentAddress;
+      const currentAddress = (this.item.userAddress || "").toString().trim();
+      // 记录原始完整地址
+      this.originalAddress = currentAddress;
 
-        this.getCitys().then(() => {
-          if (!currentAddress) {
-            this.cityIds = [];
-            this.editForm.userAddress = "";
-            this.originalDetail = "";
-            return;
-          }
-          // 按“省 市 区 详细地址(空格分隔)”进行拆分。若无区或无市也不报错。
-          const parts = currentAddress.split(/\s+/);
-          const detail = parts.pop() || "";           // 末尾作为详细地址
-          const provLabel = parts[0];
-          const cityLabel = parts[1];
-          const areaLabel = parts[2];
+      this.getCitys().then(() => {
+        if (!currentAddress) {
+          this.cityIds = [];
+          this.editForm.userAddress = "";
+          this.originalDetail = "";
+          return;
+        }
+        // 按“省 市 区 详细地址(空格分隔)”进行拆分。若无区或无市也不报错。
+        const parts = currentAddress.split(/\s+/);
+        const detail = parts.pop() || "";           // 末尾作为详细地址
+        const provLabel = parts[0];
+        const cityLabel = parts[1];
+        const areaLabel = parts[2];
 
-          const province = this.citys.find(p => p.label === provLabel);
-          if (province) {
-            // 只回显省,不预选市/区
-            this.cityIds = [province.value];
-          } else {
-            console.warn("未匹配到省:", { provLabel });
-            this.cityIds = [];
-          }
-          // 输入框只放“详细地址(不含省市区)”
-          this.editForm.userAddress = detail;
-          // 记录原始详细地址(用于判断有无修改)
-          this.originalDetail = detail;
-        });
-      })
+        const province = this.citys.find(p => p.label === provLabel);
+        if (province) {
+          // 只回显省,不预选市/区
+          this.cityIds = [province.value];
+        } else {
+          console.warn("未匹配到省:", { provLabel });
+          this.cityIds = [];
+        }
+        // 输入框只放“详细地址(不含省市区)”
+        this.editForm.userAddress = detail;
+        // 记录原始详细地址(用于判断有无修改)
+        this.originalDetail = detail;
+      });
     },
     updateExpress(){
       var that=this;