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

Merge remote-tracking branch 'origin/master'

xgb 3 днів тому
батько
коміт
7c0b7cd842
67 змінених файлів з 881 додано та 529 видалено
  1. 0 0
      .env.prod-czt
  2. 8 0
      src/api/course/courseFinishTemp.js
  3. 1 7
      src/api/hisStore/storeOrder.js
  4. 3 2
      src/api/qw/externalContactTransferAudit.js
  5. 7 0
      src/api/qw/sopUserLogs.js
  6. 10 0
      src/api/qw/user.js
  7. 1 7
      src/api/store/storeOrder.js
  8. 9 0
      src/main.js
  9. 1 0
      src/views/company/companyConfig/index.vue
  10. 10 6
      src/views/company/components/userSelect.vue
  11. 1 0
      src/views/components/course/userCourseCatalogDetails.vue
  12. 72 13
      src/views/course/courseFinishTemp/index.vue
  13. 2 1
      src/views/course/courseFinishTempParent/index.vue
  14. 3 3
      src/views/course/courseRedPacketLog/index.vue
  15. 3 3
      src/views/course/courseRedPacketLog/myCourseRedPacketLog.vue
  16. 19 8
      src/views/course/courseWatchLog/deptWatchLog.vue
  17. 78 27
      src/views/course/courseWatchLog/index.vue
  18. 2 0
      src/views/course/courseWatchLog/myCourseWatchLog.vue
  19. 1 1
      src/views/course/courseWatchLog/qw/myCourseWatchLog.vue
  20. 2 2
      src/views/course/courseWatchLog/qw/watchLog.vue
  21. 45 34
      src/views/course/courseWatchLog/watchLog.vue
  22. 2 0
      src/views/course/courseWatchLog/watchLogStatistics.vue
  23. 3 1
      src/views/course/userCourse/index.vue
  24. 16 11
      src/views/crm/customer/full.vue
  25. 5 0
      src/views/crm/customer/index.vue
  26. 2 0
      src/views/crm/customer/line.vue
  27. 21 15
      src/views/crm/customer/my.vue
  28. 9 7
      src/views/crm/customerVisit/index.vue
  29. 28 156
      src/views/hisStore/components/productOrder.vue
  30. 3 0
      src/views/hisStore/storeOrder/allList.vue
  31. 3 0
      src/views/hisStore/storeOrder/list.vue
  32. 3 0
      src/views/hisStore/storeOrder/myList.vue
  33. 6 0
      src/views/member/list.vue
  34. 6 0
      src/views/member/mylist.vue
  35. 22 5
      src/views/qw/autoTags/dayPartingIndex.vue
  36. 4 1
      src/views/qw/autoTags/dayPartingIndexDetails.vue
  37. 1 0
      src/views/qw/autoTags/groupIndex.vue
  38. 1 0
      src/views/qw/contactWay/index.vue
  39. 3 1
      src/views/qw/externalContact/deptIndex.vue
  40. 8 2
      src/views/qw/externalContact/index.vue
  41. 10 4
      src/views/qw/externalContact/myExternalContact.vue
  42. 12 0
      src/views/qw/externalContact/selectUser.vue
  43. 20 4
      src/views/qw/externalContactTransfer/companyTransfer.vue
  44. 13 21
      src/views/qw/externalContactTransfer/companyTransferQwUserSelect.vue
  45. 16 2
      src/views/qw/externalContactTransfer/deptTransferIndex.vue
  46. 15 2
      src/views/qw/externalContactTransfer/index.vue
  47. 47 20
      src/views/qw/externalContactTransferLog/companyTransferDetail.vue
  48. 11 0
      src/views/qw/externalContactTransferLog/deptTransferLogIndex.vue
  49. 12 0
      src/views/qw/externalContactTransferLog/index.vue
  50. 12 0
      src/views/qw/externalContactTransferLog/my.vue
  51. 20 4
      src/views/qw/externalContactUnassigned/companyUnassigned.vue
  52. 14 1
      src/views/qw/externalContactUnassigned/deptUnassignedIndex.vue
  53. 14 1
      src/views/qw/externalContactUnassigned/index.vue
  54. 2 2
      src/views/qw/friendWelcome/indexNew.vue
  55. 4 4
      src/views/qw/friendWelcome/myIndexNew.vue
  56. 81 17
      src/views/qw/friendWelcome/myWelcome.vue
  57. 1 0
      src/views/qw/groupMsg/index.vue
  58. 9 5
      src/views/qw/qwUserVoiceLog/index.vue
  59. 10 2
      src/views/qw/qwUserVoiceLogTotal/index.vue
  60. 1 0
      src/views/qw/sopLogs/sopLogsList.vue
  61. 1 1
      src/views/qw/sopTemp/index.vue
  62. 55 12
      src/views/qw/sopUserLogs/sopUserLogsSchedule.vue
  63. 1 1
      src/views/qw/user/cuDeptIdIndex.vue
  64. 4 5
      src/views/qw/user/index.vue
  65. 9 1
      src/views/qw/user/qwUserSelectOne.vue
  66. 20 31
      src/views/store/components/productOrder.vue
  67. 43 76
      src/views/store/components/storeOrderDetails.vue

+ 0 - 0
dev.prod-czt → .env.prod-czt


+ 8 - 0
src/api/course/courseFinishTemp.js

@@ -51,3 +51,11 @@ export function exportCourseFinishTemp(query) {
     params: query
   })
 }
+
+export function updateStatusBatch(data) {
+  return request({
+    url: '/course/courseFinishTemp/updateStatusBatch',
+    method: 'post',
+    data: data
+  })
+}

+ 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;
     });

+ 10 - 6
src/views/company/components/userSelect.vue

@@ -51,7 +51,7 @@
           </el-table-column>
         </el-table>
         <pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
-        
+
         <div class="btns">
           <el-button type="primary" @click="submit"  >确 定</el-button>
         </div>
@@ -75,7 +75,7 @@ import {
 import { treeselect } from "@/api/company/companyDept";
 export default {
   name: "User",
-  
+
   data() {
     return {
       selectUser:[],
@@ -180,8 +180,8 @@ export default {
       this.queryParams.deptId = data.id;
       this.getList();
     },
-     
-     
+
+
     /** 搜索按钮操作 */
     handleQuery() {
       this.queryParams.page = 1;
@@ -199,6 +199,10 @@ export default {
       this.ids = selection.map((item) => item.userId);
     },
     addUser(){
+      if(this.selectUser.length < 1) {
+        this.$message.warning("请选择员工")
+        return
+      }
       var that=this;
       this.selectUser.forEach(element => {
         var flag= that.users.some(item => item.userId === element.userId)
@@ -215,11 +219,11 @@ export default {
 };
 </script>
 <style >
- 
+
 .btns{
   padding-top: 15px;
   display: flex;
   align-content: center;
   justify-content: flex-end;
 }
-</style>
+</style>

+ 1 - 0
src/views/components/course/userCourseCatalogDetails.vue

@@ -385,6 +385,7 @@ import request from '@/utils/request'
       /** 重置按钮操作 */
       resetQuery() {
         this.resetForm("queryForm");
+        this.queryParams.title = null;
         this.handleQuery();
       },
       // 多选框选中数据

+ 72 - 13
src/views/course/courseFinishTemp/index.vue

@@ -56,18 +56,18 @@
         >新增
         </el-button>
       </el-col>
-<!--      <el-col :span="1.5">-->
-<!--        <el-button-->
-<!--          type="success"-->
-<!--          plain-->
-<!--          icon="el-icon-edit"-->
-<!--          size="mini"-->
-<!--          :disabled="multiple"-->
-<!--          @click="handleUpdate"-->
-<!--          v-hasPermi="['courseFinishTemp:course:edit']"-->
-<!--        >修改状态-->
-<!--        </el-button>-->
-<!--      </el-col>-->
+     <el-col :span="1.5">
+       <el-button
+         type="success"
+         plain
+         icon="el-icon-edit"
+         size="mini"
+         :disabled="multiple"
+         @click="handleUpdateStatusBatch"
+         v-hasPermi="['courseFinishTemp:course:edit']"
+       >批量修改状态
+       </el-button>
+     </el-col>
       <el-col :span="1.5">
         <el-button
           type="danger"
@@ -578,6 +578,25 @@
         <el-button @click="cancel">取 消</el-button>
       </div>
     </el-dialog>
+
+    <el-dialog title="批量修改状态" :visible.sync="batchOpen" width="400px" append-to-body>
+      <el-form ref="form" :model="statusForm">
+         <el-form-item label="状态">
+          <el-radio-group v-model="statusForm.status">
+            <el-radio
+              v-for="dict in statusOptions"
+              :key="dict.dictValue"
+              :label="parseInt(dict.dictValue)"
+            >{{ dict.dictLabel }}
+            </el-radio>
+          </el-radio-group>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer" v-if="formType==1">
+        <el-button type="primary" @click="submitFormBatchStatus" :loading="submitFormBatchStatusLoading">确 定</el-button>
+        <el-button @click="batchOpen = false">取 消</el-button>
+      </div>
+    </el-dialog>
     <el-dialog :title="videoNumOptions.title" :visible.sync="videoNumOptions.open" width="1500px" append-to-body>
       <userVideo ref="QwUserVideo" @videoResult="qwUserVideoResult"></userVideo>
     </el-dialog>
@@ -591,7 +610,8 @@ import {
   exportCourseFinishTemp,
   getCourseFinishTemp,
   listCourseFinishTemp,
-  updateCourseFinishTemp
+  updateCourseFinishTemp,
+  updateStatusBatch
 } from '@/api/course/courseFinishTemp'
 import { getUserList } from '@/api/company/companyUser'
 import { courseList, videoList } from '@/api/qw/sop'
@@ -649,6 +669,8 @@ export default {
       title: "",
       // 是否显示弹出层
       open: false,
+      batchOpen:false,
+      submitFormBatchStatusLoading:false,
       // 查询参数
       queryParams: {
         pageNum: 1,
@@ -675,6 +697,9 @@ export default {
         videoIdSet: null,
         courseIdSet: null,
       },
+      statusForm:{
+        status:null
+      },
       // 表单校验
       rules: {}
     };
@@ -922,6 +947,7 @@ export default {
       this.setting = []
       this.chatSetting = []
       this.resetForm("form");
+      this.formType = 1
     },
     /** 搜索按钮操作 */
     handleQuery() {
@@ -979,6 +1005,15 @@ export default {
 
       });
     },
+    // 批量修改状态
+    handleUpdateStatusBatch(){
+      console.log(this.ids);
+      if(this.ids == null || this.ids == undefined || this.ids.length == 0 ){
+        return this.$message.error("请选择数据")
+      }
+      this.statusForm.status = null;
+      this.batchOpen = true;
+    },
     /** 修改按钮操作 */
     handleUpdate(row) {
       this.reset();
@@ -1014,6 +1049,30 @@ export default {
         this.formType = 1;
       });
     },
+    submitFormBatchStatus(){
+      if(this.statusForm.status==null){
+        return this.$message.error("状态不能为空,请选择状态")
+      }
+      if(this.ids == null || this.ids == undefined || this.ids.length == 0 ){
+        return this.$message.error("请选择数据")
+      }
+      let _this = this;
+      _this.submitFormBatchStatusLoading = true;
+      let param ={
+        ids:_this.ids,
+        status:_this.statusForm.status
+      }
+      updateStatusBatch(param).then(res=>{
+        _this.submitFormBatchStatusLoading = false;
+        _this.msgSuccess("修改成功");
+        _this.batchOpen = false;
+        _this.getList();
+      }).catch(res=>{
+        console.log(res);
+        _this.submitFormBatchStatusLoading = false;
+      })
+
+    },
     /** 提交按钮 */
     submitForm() {
       this.$refs["form"].validate(valid => {

+ 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");
     },

+ 3 - 3
src/views/course/courseRedPacketLog/index.vue

@@ -136,7 +136,7 @@
       <el-table-column label="所属销售" align="center" prop="companyUserName" />
       <el-table-column label="所属公司" align="center" prop="companyName" />
       <el-table-column label="企微员工名称" align="center" prop="qwUserName" />
-      <el-table-column label="转金额" align="center" prop="amount" />
+      <el-table-column label="转金额" align="center" prop="amount" />
       <el-table-column label="状态" align="center" prop="status" >
         <template slot-scope="scope">
           <el-tag>{{ scope.row.status === 0 ? "发送中" : scope.row.status === 1 ? "已完成" : "待补发" }}</el-tag>
@@ -181,8 +181,8 @@
         <el-form-item label="公司id" prop="companyId">
           <el-input v-model="form.companyId" placeholder="请输入公司id" />
         </el-form-item>
-        <el-form-item label="转金额" prop="amount">
-          <el-input v-model="form.amount" placeholder="请输入转金额" />
+        <el-form-item label="转金额" prop="amount">
+          <el-input v-model="form.amount" placeholder="请输入转金额" />
         </el-form-item>
         <el-form-item label="企微userid" prop="qwUserId">
           <el-input v-model="form.qwUserId" placeholder="请输入分享企微userid" />

+ 3 - 3
src/views/course/courseRedPacketLog/myCourseRedPacketLog.vue

@@ -126,7 +126,7 @@
       <el-table-column label="会员电话" align="center" prop="phone" />
       <el-table-column label="所属销售" align="center" prop="companyUserName" />
       <el-table-column label="所属公司" align="center" prop="companyName" />
-      <el-table-column label="转金额" align="center" prop="amount" />
+      <el-table-column label="转金额" align="center" prop="amount" />
       <el-table-column label="状态" align="center" prop="status" >
         <template slot-scope="scope">
           <el-tag>{{ scope.row.status === 0 ? "发送中" : scope.row.status === 1 ? "已完成" : "待补发" }}</el-tag>
@@ -171,8 +171,8 @@
         <el-form-item label="公司id" prop="companyId">
           <el-input v-model="form.companyId" placeholder="请输入公司id" />
         </el-form-item>
-        <el-form-item label="转金额" prop="amount">
-          <el-input v-model="form.amount" placeholder="请输入转金额" />
+        <el-form-item label="转金额" prop="amount">
+          <el-input v-model="form.amount" placeholder="请输入转金额" />
         </el-form-item>
         <el-form-item label="企微userid" prop="qwUserId">
           <el-input v-model="form.qwUserId" placeholder="请输入分享企微userid" />

+ 19 - 8
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="操作"
@@ -424,7 +434,7 @@
 <!--        <el-table-column label="会员电话" align="center" prop="phone" />-->
 <!--        <el-table-column label="所属销售" align="center" prop="companyUserName" />-->
 <!--        <el-table-column label="所属公司" align="center" prop="companyName" />-->
-        <el-table-column label="转金额" align="center" prop="amount" />
+        <el-table-column label="转金额" align="center" prop="amount" />
         <el-table-column label="状态" align="center" prop="status" >
           <template slot-scope="scope">
             <el-tag>
@@ -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;

+ 78 - 27
src/views/course/courseWatchLog/index.vue

@@ -73,7 +73,9 @@
                    placeholder="请输入关键词" :remote-method="loadCompanyUserOptions"
                    v-select-load-more="loadMoreCompanyUserOptions"
                    @change="handleCompanyUserChange"
-                   :loading="companyUserOptionsLoading">
+                   :loading="companyUserOptionsLoading"
+                   @visible-change="handleCompanyUserDropdownVisible"
+        >
           <el-option
             v-for="item in companyUserOptions"
             :key="item.dictValue"
@@ -87,6 +89,7 @@
                    placeholder="请输入关键词"
                    v-select-load-more="loadMoreCompanyUserOptions"
                    @change="handleCompanyUserChange"
+                   @visible-change="handleQwUserDropdownVisible"
                    :loading="companyUserOptionsLoading">
           <el-option
             v-for="item in companyUserOptionsByAll"
@@ -96,10 +99,11 @@
           </el-option>
         </el-select>
       </el-form-item>
-      <el-form-item label="所属企微" prop="qwUserName">
-        <el-select v-model="queryParams.qwUserName" clearable filterable remote
-                   placeholder="请输入关键词" :remote-method="loadQwUserOptions"
-                   v-select-load-more="loadMoreQwUserOptions"
+      <el-form-item label="所属企微" prop="qwUserName" v-if="queryParams.companyUserId">
+        <el-select v-model="queryParams.qwUserName"
+                   clearable filterable
+                   placeholder="请输入关键词"
+                   @visible-change="handleQwUserDropdownVisible"
                    :loading="qwUserOptionsLoading">
           <el-option
             v-for="item in qwUserOptions"
@@ -178,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>
       <!-- 最新更新时间 -->
@@ -261,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>
@@ -368,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="操作"
@@ -458,7 +472,7 @@
 <!--        <el-table-column label="会员电话" align="center" prop="phone" />-->
 <!--        <el-table-column label="所属销售" align="center" prop="companyUserName" />-->
 <!--        <el-table-column label="所属公司" align="center" prop="companyName" />-->
-        <el-table-column label="转金额" align="center" prop="amount" />
+        <el-table-column label="转金额" align="center" prop="amount" />
         <el-table-column label="状态" align="center" prop="status" >
           <template slot-scope="scope">
             <el-tag>
@@ -605,6 +619,10 @@ export default {
   name: "CourseWatchLog",
   data() {
     return {
+      companyUserFirstLoad: true, // 首次加载标志
+      qwUserFirstLoad: true,     // 首次加载标志
+      companyUserDropdownVisible: false, // 下拉框显示状态
+      qwUserDropdownVisible: false,     // 下拉框显示状态
       companyName:process.env.VUE_APP_COURSE_COMPANY_NAME,
       // 日历 key 控制刷新
       scheduleCalendarKey: 0,
@@ -807,6 +825,35 @@ export default {
     this.getCompanyUserListLikeName(true);
   },
   methods: {
+    /**
+     * 处理所属销售下拉框显示状态变化
+     */
+    handleCompanyUserDropdownVisible(visible) {
+      this.companyUserDropdownVisible = visible;
+      if (visible && this.companyUserFirstLoad) {
+        // 首次展开下拉框时加载数据
+        this.companyUserFirstLoad = false;
+        this.loadCompanyUserOptions('');
+      } else if (visible && this.companyUserOptions.length === 0) {
+        // 下拉框显示但无数据时重新加载
+        this.loadCompanyUserOptions('');
+      }
+    },
+    /**
+     * 处理所属企微下拉框显示状态变化
+     */
+    handleQwUserDropdownVisible(visible) {
+      this.qwUserDropdownVisible = visible;
+      if (visible && this.qwUserFirstLoad) {
+        // 首次展开下拉框时加载数据
+        this.qwUserFirstLoad = false;
+        this.loadQwUserOptions('');
+      } else if (visible && this.qwUserOptions.length === 0) {
+        // 下拉框显示但无数据时重新加载
+        this.loadQwUserOptions('');
+      }
+    },
+
     /**
      * 当销售被选择
      * 级联更新企微列表
@@ -825,7 +872,6 @@ export default {
         this.queryParams.qwUserName = "";
         this.qwUserOptions = [];
         this.qwUserOptionsParams.pageNum = 1;
-        this.getQwList(); // 重新加载所有企微
       }
     },
     /**
@@ -902,7 +948,9 @@ export default {
           this.qwUserOptions = [...this.qwUserOptions, ...(response.rows || [])];
         }
         this.qwUserOptionsParams.hasNextPage = response.rows && response.rows.length >= this.qwUserOptionsParams.pageSize;
-      });
+      }).finally(()=>{
+        this.qwUserOptionsLoading = false;
+      })
     },
 
     /**
@@ -971,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;
@@ -1169,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
@@ -1352,6 +1401,7 @@ export default {
 
       searchTags(this.queryTagParams).then(response => {
         this.tagGroupList = response.rows;
+        this.tagTotal = response.total;
       });
 
       // searchTags({name:name,corpId:this.queryParams.corpId}).then(response => {
@@ -1368,6 +1418,7 @@ export default {
     },
 
     resetSearchQueryTag(){
+      this.tagChange.tagName=null;
 
       this.queryTagParams= {
         pageNum: 1,

+ 2 - 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();
@@ -631,6 +632,7 @@ export default {
 
       searchTags(this.queryTagParams).then(response => {
         this.tagGroupList = response.rows;
+        this.tagTotal = response.total;
       });
 
       // searchTags({name:name,corpId:this.queryParams.corpId}).then(response => {

+ 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;
     });
 

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

@@ -247,7 +247,7 @@
         <el-table-column label="会员电话" align="center" prop="phone" />
         <el-table-column label="所属销售" align="center" prop="companyUserName" />
         <el-table-column label="所属公司" align="center" prop="companyName" />
-        <el-table-column label="转金额" align="center" prop="amount" />
+        <el-table-column label="转金额" align="center" prop="amount" />
         <el-table-column label="状态" align="center" prop="status" >
           <template slot-scope="scope">
             <el-tag>{{ scope.row.status === 0 ? "发送中" : "已完成" }}</el-tag>
@@ -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;
     });
 

+ 45 - 34
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>
@@ -371,6 +371,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="操作"
@@ -462,7 +472,7 @@
 <!--        <el-table-column label="会员电话" align="center" prop="phone" />-->
 <!--        <el-table-column label="所属销售" align="center" prop="companyUserName" />-->
 <!--        <el-table-column label="所属公司" align="center" prop="companyName" />-->
-        <el-table-column label="转金额" align="center" prop="amount" />
+        <el-table-column label="转金额" align="center" prop="amount" />
         <el-table-column label="状态" align="center" prop="status" >
           <template slot-scope="scope">
             <el-tag>
@@ -779,7 +789,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;
     });
 
@@ -893,8 +903,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;
@@ -1084,7 +1094,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();
       // 统一重置日历组件
@@ -1258,6 +1268,7 @@ export default {
 
       searchTags(this.queryTagParams).then(response => {
         this.tagGroupList = response.rows;
+        this.tagTotal = response.total;
       });
 
       // searchTags({name:name,corpId:this.queryParams.corpId}).then(response => {

+ 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();
     },

+ 16 - 11
src/views/crm/customer/full.vue

@@ -54,7 +54,7 @@
                   />
             </el-select>
           </el-form-item>
-          
+
           <el-form-item label="客户类型" prop="customerType">
             <el-select multiple filterable v-model="ctsTypeArr" placeholder="请选择客户类型" clearable size="small">
               <el-option
@@ -65,7 +65,7 @@
                   />
             </el-select>
           </el-form-item>
-          
+
           <el-form-item label="客户标签" prop="tags">
             <el-select multiple  filterable v-model="tagIds" placeholder="请选择客户标签" clearable size="small">
               <el-option
@@ -76,7 +76,7 @@
                   />
             </el-select>
           </el-form-item>
-          
+
           <!-- <el-form-item label="是否认领" prop="isReceive">
             <el-select v-model="queryParams.isReceive" placeholder="请选择是否认领" clearable size="small">
               <el-option
@@ -87,7 +87,7 @@
                   />
             </el-select>
           </el-form-item> -->
-          
+
           <el-form-item label="创建时间" prop="createTime">
             <el-date-picker
               style="width:205.4px"
@@ -215,7 +215,7 @@
             </template>
           </el-table-column>
         </el-table>
-        
+
         <pagination
           v-show="total>0"
           :total="total"
@@ -224,8 +224,8 @@
           @pagination="getList"
         />
 
-    
- 
+
+
     <el-drawer
       size="75%"
       :title="show.title" :visible.sync="show.open"
@@ -238,13 +238,13 @@
     <el-dialog :title="assign.title" :visible.sync="assign.open" width="800px" append-to-body>
         <assign-user  ref="assignUser" @close="closeAssign"   />
     </el-dialog>
-   
- 
+
+
   </div>
 </template>
 
 <script>
- 
+
 import { assignToUser,receive,getFullCustomerList,addCustomer,updateCustomer,getCustomerDetails,exportCustomer  } from "@/api/crm/customer";
 import customerDetails from '../components/customerDetails.vue';
 import {getCitys} from "@/api/store/city";
@@ -434,7 +434,7 @@ export default {
           else if(that.queryParams.isReceive=="1"){
             that.$refs.assignUser.init(ids,3);
           }
-          
+
       }, 200);
     },
     closeAssign(){
@@ -582,6 +582,11 @@ export default {
     /** 重置按钮操作 */
     resetQuery() {
       this.resetForm("queryForm");
+      this.visitStatusArr =  [];
+      this.tagIds =  [];
+      this.dateRange = [];
+      this.sourceArr  =  [];
+      this.ctsTypeArr =  [];
       this.handleQuery();
     },
     // 多选框选中数据

+ 5 - 0
src/views/crm/customer/index.vue

@@ -752,6 +752,11 @@ export default {
     /** 重置按钮操作 */
     resetQuery() {
       this.resetForm("queryForm");
+      this.sourceArr =  [];
+      this.visitStatusArr =  [];
+      this.tagIds =  [];
+      this.ctsTypeArr =  [];
+      this.dateRange = [];
       this.handleQuery();
     },
     // 多选框选中数据

+ 2 - 0
src/views/crm/customer/line.vue

@@ -583,6 +583,8 @@ export default {
     /** 重置按钮操作 */
     resetQuery() {
       this.resetForm("queryForm");
+      this.tagIds = [];
+      this.dateRange = null;
       this.handleQuery();
     },
     // 多选框选中数据

+ 21 - 15
src/views/crm/customer/my.vue

@@ -154,7 +154,7 @@
       </el-col>
 	  <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
-    
+
     <el-table  height="500" border v-loading="loading" :data="customerList" @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55" align="center" />
       <el-table-column label="客户编码" align="center" prop="customerCode" />
@@ -220,7 +220,7 @@
             v-hasPermi="['crm:customer:recover']"
           >回收公海</el-button>
           <!-- <el-button
-         
+
             size="mini"
             type="text"
             @click="handleAssign(scope.row)"
@@ -242,13 +242,13 @@
     <el-dialog :title="addSms.title" :visible.sync="addSms.open" width="1000px" append-to-body>
        <add-batch-sms ref="sms" @close="closeSms()"></add-batch-sms>
     </el-dialog>
- 
- 
+
+
     <el-dialog :title="source.title" :visible.sync="source.open" width="1000px" append-to-body>
        <edit-source ref="editSource" @close="closeSource()"></edit-source>
     </el-dialog>
- 
-    <el-dialog :title="visit.title" :visible.sync="visit.open" width="600px" append-to-body> 
+
+    <el-dialog :title="visit.title" :visible.sync="visit.open" width="600px" append-to-body>
       <add-visit @closeVisit="closeVisit"   ref="addVisit" />
     </el-dialog>
     <el-dialog :title="customer.title" :visible.sync="customer.open" width="1000px" append-to-body>
@@ -462,7 +462,7 @@ export default {
         setTimeout(() => {
             that.$refs.visitStatus.reset(row);
         }, 500);
-        
+
     },
     closeCustomerType(){
         this.addCustomerType.open=false;
@@ -474,7 +474,7 @@ export default {
         setTimeout(() => {
             that.$refs.customerType.reset(row);
         }, 500);
-        
+
     },
     closeRemark(){
         this.addRemark.open=false;
@@ -486,7 +486,7 @@ export default {
         setTimeout(() => {
             that.$refs.remark.reset(row);
         }, 500);
-        
+
     },
     closeTag(){
         this.addTag.open=false;
@@ -498,7 +498,7 @@ export default {
         setTimeout(() => {
             that.$refs.tag.reset(row);
         }, 500);
-        
+
     },
     handleShow(row){
       this.show.open=true;
@@ -549,7 +549,7 @@ export default {
       setTimeout(() => {
         that.$refs.editSource.handleEdit(that.ids);
       }, 200);
-      
+
     },
     closeSource(){
         this.source.open=false;
@@ -593,7 +593,7 @@ export default {
           this.citys=res.data;
         })
     },
-    
+
     /** 查询客户列表 */
     getList() {
       this.loading = true;
@@ -649,6 +649,12 @@ export default {
     /** 重置按钮操作 */
     resetQuery() {
       this.resetForm("queryForm");
+      this.statusArr=[];
+      this.ctsTypeArr=[];
+      this.tagIds=[];
+      this.sourceArr=[];
+      this.createTimeRange=null;
+      this.dateRange = null;
       this.handleQuery();
     },
     // 多选框选中数据
@@ -657,9 +663,9 @@ export default {
       this.single = selection.length!==1
       this.multiple = !selection.length
     },
-    
-    
-     
+
+
+
     /** 删除按钮操作 */
     handleDelete(row) {
       const customerIds = row.customerId || this.ids;

+ 9 - 7
src/views/crm/customerVisit/index.vue

@@ -1,6 +1,6 @@
 <template>
     <div class="app-container">
- 
+
         <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
           <el-form-item label="客户编码" prop="customerCode">
             <el-input
@@ -133,13 +133,13 @@
             <template slot-scope="scope">
               <el-image  v-for="(img) in parsePhoto(scope.row.photos)"
                 style="width: 30px; height: 30px;margin-right:5px"
-                :src="img" 
+                :src="img"
                 :preview-src-list="parsePhoto(scope.row.photos)">
               </el-image>
             </template>
           </el-table-column>
           <el-table-column label="跟进时间" align="center" prop="createTime" />
-          
+
           <el-table-column label="下次联系时间" align="center" prop="nextTime" width="180">
             <template slot-scope="scope">
               <span>{{ parseTime(scope.row.nextTime, '{y}-{m}-{d}') }}</span>
@@ -164,7 +164,7 @@
             </template>
           </el-table-column>
         </el-table>
-        
+
         <pagination
           v-show="total>0"
           :total="total"
@@ -172,7 +172,7 @@
           :limit.sync="queryParams.pageSize"
           @pagination="getList"
         />
-  
+
       <el-drawer
        size="75%"
         :title="show.title" :visible.sync="show.open"
@@ -181,7 +181,7 @@
       </el-drawer>
     </div>
   </template>
-  
+
   <script>
   import { listCustomerVisit, getCustomerVisit, delCustomerVisit, addCustomerVisit, updateCustomerVisit, exportCustomerVisit } from "@/api/crm/customerVisit";
   import customerDetails from '../components/customerDetails.vue';
@@ -358,6 +358,9 @@
       /** 重置按钮操作 */
       resetQuery() {
         this.resetForm("queryForm");
+        this.dateRange = [];
+        this.createTimeRange=[];
+        this.receiveTimeRange=[];
         this.handleQuery();
       },
       // 多选框选中数据
@@ -436,4 +439,3 @@
     }
   };
   </script>
-  

+ 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;

+ 3 - 0
src/views/hisStore/storeOrder/allList.vue

@@ -679,6 +679,9 @@ export default {
     /** 重置按钮操作 */
     resetQuery() {
       this.resetForm("queryForm");
+      this.createTimeRange = null;
+      this.payTimeRange = null;
+      this.deliveryImportTimeRange = null;
       this.handleQuery();
     },
     // 多选框选中数据

+ 3 - 0
src/views/hisStore/storeOrder/list.vue

@@ -837,6 +837,9 @@ export default {
     /** 重置按钮操作 */
     resetQuery() {
       this.resetForm("queryForm");
+      this.createTimeRange = null;
+      this.payTimeRange = null;
+      this.deliveryImportTimeRange = null;
       this.handleQuery();
     },
     // 多选框选中数据

+ 3 - 0
src/views/hisStore/storeOrder/myList.vue

@@ -573,6 +573,9 @@ export default {
     /** 重置按钮操作 */
     resetQuery() {
       this.resetForm("queryForm");
+      this.createTimeRange = null;
+      this.payTimeRange = null;
+      this.deliveryImportTimeRange = null;
       this.handleQuery();
     },
     // 多选框选中数据

+ 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

+ 22 - 5
src/views/qw/autoTags/dayPartingIndex.vue

@@ -174,13 +174,29 @@
             <div style="background-color: #fbfbfb;padding: 10px;  border: 1px solid #e6e6e6; margin-bottom: 10px;">
               <el-form ref="rulesTagsFrom" :rules="rulesTagsRules" :model="item" >
                 <div>
+                  <el-form-item label="执行规则" prop="dayOrWeek" style="width: 500px;margin:5px 0 0 8%">
+                    <el-radio-group v-model="item.dayOrWeek">
+                      <el-radio :label="0">星期</el-radio>
+                      <el-radio :label="1">日期</el-radio>
+                    </el-radio-group>
+                  </el-form-item>
                   <div style="display: flex; align-items: center; flex-wrap: nowrap;">
                     <span style="margin-right: 10px;">规则 {{ index + 1 }}:</span>
-                    <el-form-item label="为每:" prop="week" style="flex: 8;margin-bottom: 0">
+                    <el-form-item label="为每:" prop="week" style="flex: 8;margin-bottom: 0" v-if="item.dayOrWeek == 0">
                       <el-select v-model="item.week" remote multiple placeholder="请选择时间" filterable style="width: 350px;">
                         <el-option v-for="dict in weekOptions" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
                       </el-select>
                     </el-form-item>
+                    <el-form-item label="为每:" prop="days" style="flex: 8;margin-bottom: 0" v-if="item.dayOrWeek == 1">
+                      <el-date-picker
+                        clearable size="small"
+                        v-model="item.days"
+                        type="daterange"
+                        value-format="yyyy-MM-dd"
+                        start-placeholder="开始日期"
+                        end-placeholder="结束日期">
+                      </el-date-picker>
+                    </el-form-item>
                     <el-form-item prop="startTime" style="margin:0 5px 0 5px">
                       <el-time-select style="width: 120px;" placeholder="起始时间" v-model="item.startTime" :picker-options="{
                               start: '00:00',
@@ -523,7 +539,7 @@ export default {
         // 遍历 tagListFormIndex 并将 tagId 放入对应位置的 tags
         newList.forEach((tags, index) => {
           if (!this.form.rulesTags[index]) {
-            this.$set(this.form.rulesTags, index, {tags:[],week:[1,2,3,4,5,6,7],startTime:null,endTime:null,remarks:null});
+            this.$set(this.form.rulesTags, index, {tags:[],week:[1,2,3,4,5,6,7],startTime:null,endTime:null,remarks:null,dayOrWeek:0,days:null});
           }
 
           // 确保清空原来的 tags 数组
@@ -651,6 +667,7 @@ export default {
       this.queryTagParams.corpId=this.queryParams.corpId;
       searchTags(this.queryTagParams).then(response => {
         this.tagGroupList = response.rows;
+        this.tagTotal = response.total;
       });
 
     },
@@ -726,7 +743,7 @@ export default {
       if (this.form.rulesTags.length >=7) {
         return this.$message.error('当前规则已达上限,无法添加规则');
       }
-      this.form.rulesTags.push({tags:[],week:[1,2,3,4,5,6,7],startTime:null,endTime:null,remarks:null})
+      this.form.rulesTags.push({tags:[],week:[1,2,3,4,5,6,7],startTime:null,endTime:null,remarks:null,dayOrWeek:0,days:null})
     },
 
     //选择标签弹窗
@@ -814,7 +831,7 @@ export default {
         createName: null,
         applyUsers: null,
         ruleName: null,
-        rulesTags: [{tags:[],week:[1,2,3,4,5,6,7],startTime:null,endTime:null,remarks:null}],
+        rulesTags: [{tags:[],week:[1,2,3,4,5,6,7],startTime:null,endTime:null,remarks:null,dayOrWeek:0,days:null}],
         totalNumTags: null,
         numTagsTaday: null,
         isApply: null,
@@ -828,7 +845,7 @@ export default {
       this.tagListFormIndex=[];
 
       //规则
-      this.form.rulesTags=[{tags:[],week:[1,2,3,4,5,6,7],startTime:null,endTime:null,remarks:null}];
+      this.form.rulesTags=[{tags:[],week:[1,2,3,4,5,6,7],startTime:null,endTime:null,remarks:null,dayOrWeek:0,days:null}];
       this.resetForm("form");
     },
     /** 搜索按钮操作 */

+ 4 - 1
src/views/qw/autoTags/dayPartingIndexDetails.vue

@@ -51,9 +51,12 @@
                 <div style="margin-left: 10%;margin-top: 1%">
                   <span class="spanSize">|规则 {{index +1}} </span>
                   <div class="spanSize">客户在 每
-                    <span v-for="id in rtList.week" :key="id" style="display: inline;">
+                    <span v-for="id in rtList.week" :key="id" style="display: inline;" v-if="rtList.dayOrWeek == 0">
                       <el-tag :disable-transitions="false"  v-for="list in weekOptions" :key="list.value" style="margin: 3px;" v-if="list.value==id">{{list.label}}</el-tag>
                     </span>
+                    <span style="display: inline;" v-if="rtList.dayOrWeek == 1">
+                      <el-tag>{{rtList.days[0]}}</el-tag> 到 <el-tag>{{rtList.days[1]}}</el-tag>
+                    </span>
                     <span>【{{rtList.startTime}}~{{rtList.endTime}}】</span>
                     时,打上标签
                     <span v-for="tagId in rtList.tags" :key="tagId" style="display: inline;">

+ 1 - 0
src/views/qw/autoTags/groupIndex.vue

@@ -518,6 +518,7 @@ export default {
       this.queryTagParams.corpId=this.queryParams.corpId;
       searchTags(this.queryTagParams).then(response => {
         this.tagGroupList = response.rows;
+        this.tagTotal = response.total;
       });
 
     },

+ 1 - 0
src/views/qw/contactWay/index.vue

@@ -933,6 +933,7 @@ export default {
 
       searchTags(this.queryTagParams).then(response => {
         this.tagGroupList = response.rows;
+        this.tagTotal = response.total;
       });
       // searchTags({name:name,corpId:this.queryParams.corpId}).then(response => {
       //   this.tagGroupList = response.rows;

+ 3 - 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"
@@ -1602,6 +1602,7 @@ export default {
 
       searchTags(this.queryTagParams).then(response => {
         this.tagGroupList = response.rows;
+        this.tagTotal = response.total;
       });
 
       // searchTags({name:name,corpId:this.queryParams.corpId}).then(response => {
@@ -1700,6 +1701,7 @@ export default {
     resetQuery() {
       this.resetForm("queryForm");
       this.queryParams.corpId= this.myQwCompanyList[0].dictValue;
+      this.queryParams.transferStatus = null;
       this.selectTags=[];
       this.createTime=null;
       this.queryParams.sTime=null;

+ 8 - 2
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"
@@ -524,7 +524,7 @@
              size="mini"
              type="text"
              @click="handleInfoCollection(scope.row)"
-             v-if="scope.row.fsUserId"
+             v-if="false"
              >
              <span>信息采集</span>
           </el-button>
@@ -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"/>
@@ -1750,6 +1754,7 @@ export default {
 
       searchTags(this.queryTagParams).then(response => {
         this.tagGroupList = response.rows;
+        this.tagTotal = response.total;
       });
 
     },
@@ -1807,6 +1812,7 @@ export default {
     /** 重置按钮操作 */
     resetQuery() {
       this.resetForm("queryForm");
+      this.queryParams.transferStatus=null;
       this.queryParams.corpId= this.myQwCompanyList[0].dictValue;
       this.selectTags=[];
 	   this.createTime=null;

+ 10 - 4
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"
@@ -493,10 +493,11 @@
              <span>会员详情</span>
           </el-button>
           <el-button
+
              size="mini"
              type="text"
              @click="handleInfoCollection(scope.row)"
-             v-if="scope.row.fsUserId"
+          v-if="false"
              >
              <span>信息采集</span>
           </el-button>
@@ -898,7 +899,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 +924,7 @@
         />
       </div>
     </el-drawer>
-    
+
     <el-drawer
         :with-header="false"
         size="75%"
@@ -1280,6 +1283,7 @@ export default {
       this.log.loading = true;
       courseList().then(response => {
         this.courseLists = response.list;
+        this.log.queryParams.externalUserId = row.id;
         this.logList();
       })
     },
@@ -1548,6 +1552,7 @@ export default {
 
       searchTags(this.queryTagParams).then(response => {
         this.tagGroupList = response.rows;
+        this.tagTotal = response.total;
       });
 
       // searchTags({name:name,corpId:this.queryParams.corpId}).then(response => {
@@ -1887,6 +1892,7 @@ export default {
       this.resetForm("queryForm");
       this.queryParams.qwUserId=this.myQwUserList[0].dictValue;
       this.queryParams.corpId=this.myQwUserList[0].corpId;
+      this.queryParams.transferStatus = null;
       this.selectTags=[];
 	   this.createTime=null;
 	  this.queryParams.sTime=null;

+ 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">

+ 20 - 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: [
@@ -339,6 +349,7 @@ export default {
       };
       this.selectTags=[];
       this.resetForm("queryForm");
+      this.queryParams.transferStatus = null;
       this.queryParams.corpId = this.myQwCompanyList?.[0]?.dictValue || null
       this.getList();
     },
@@ -390,7 +401,8 @@ export default {
       this.form = {
         qwUserId: null,
         nickName: null,
-        content: null
+        content: null,
+        needClearTag: 0
       };
       this.resetForm("form");
     },
@@ -404,6 +416,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 +441,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();

+ 16 - 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");
     },
@@ -443,6 +455,7 @@ export default {
     resetQuery() {
       this.selectTags=[];
       this.resetForm("queryForm");
+      this.queryParams.transferStatus = null;
       this.handleQuery();
     },
     // 多选框选中数据
@@ -484,6 +497,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: {},

+ 20 - 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: [
@@ -322,6 +332,7 @@ export default {
       this.qwUserNameList = null
       this.isQwUserISNull = false
       this.resetForm("queryForm")
+      this.queryParams.transferStatus = null;
       this.queryParams.corpId = this.myQwCompanyList?.[0]?.dictValue || null
       this.getList()
     },
@@ -399,7 +410,8 @@ export default {
         nickName: null,
         content: null,
         type: 0,
-        oldQwUserId: null
+        oldQwUserId: null,
+        needClearTag: 0
       };
       this.resetForm("form");
     },
@@ -421,6 +433,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 +460,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(() => {

+ 14 - 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");
     },
@@ -394,6 +405,7 @@ export default {
     /** 重置按钮操作 */
     resetQuery() {
       this.resetForm("queryForm");
+      this.queryParams.transferStatus = null;
       this.queryParams.corpId= this.myQwCompanyList[0].dictValue
       this.handleQuery();
     },
@@ -434,6 +446,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);

+ 14 - 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");
     },
@@ -425,6 +436,7 @@ export default {
        this.isQwUserISNull = false;
       this.resetForm("queryForm");
       this.queryParams.corpId= this.myQwCompanyList[0].dictValue
+      this.queryParams.transferStatus = null;
       this.handleQuery();
     },
     // 多选框选中数据
@@ -480,6 +492,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);

+ 2 - 2
src/views/qw/friendWelcome/indexNew.vue

@@ -28,7 +28,7 @@
       </el-form-item>
       <el-form-item label="创建时间" prop="createdTime">
         <el-date-picker clearable size="small"
-          v-model="queryParams.createdTime"
+          v-model="queryParams.createTime"
           type="date"
           value-format="yyyy-MM-dd"
           placeholder="选择创建时间">
@@ -36,7 +36,7 @@
       </el-form-item>
       <el-form-item label="更新时间" prop="updateTieme">
         <el-date-picker clearable size="small"
-          v-model="queryParams.updateTieme"
+          v-model="queryParams.updateTime"
           type="date"
           value-format="yyyy-MM-dd"
           placeholder="选择更新时间">

+ 4 - 4
src/views/qw/friendWelcome/myIndexNew.vue

@@ -27,17 +27,17 @@
                      :value="dict.dictValue"/>
         </el-select>
       </el-form-item>
-      <el-form-item label="创建时间" prop="createdTime">
+      <el-form-item label="创建时间" prop="createTime">
         <el-date-picker clearable size="small"
-                        v-model="queryParams.createdTime"
+                        v-model="queryParams.createTime"
                         type="date"
                         value-format="yyyy-MM-dd"
                         placeholder="选择创建时间">
         </el-date-picker>
       </el-form-item>
-      <el-form-item label="更新时间" prop="updateTieme">
+      <el-form-item label="更新时间" prop="updateTime">
         <el-date-picker clearable size="small"
-                        v-model="queryParams.updateTieme"
+                        v-model="queryParams.updateTime"
                         type="date"
                         value-format="yyyy-MM-dd"
                         placeholder="选择更新时间">

+ 81 - 17
src/views/qw/friendWelcome/myWelcome.vue

@@ -26,22 +26,22 @@
           <el-option v-for="dict in allowSelectOptions" :key="dict.dictValue" :label="dict.dictLabel"  :value="dict.dictValue"/>
         </el-select>
       </el-form-item>
-      <el-form-item label="创建时间" prop="createdTime">
-        <el-date-picker clearable size="small"
-          v-model="queryParams.createdTime"
-          type="date"
-          value-format="yyyy-MM-dd"
-          placeholder="选择创建时间">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="更新时间" prop="updateTieme">
-        <el-date-picker clearable size="small"
-          v-model="queryParams.updateTieme"
-          type="date"
-          value-format="yyyy-MM-dd"
-          placeholder="选择更新时间">
-        </el-date-picker>
-      </el-form-item>
+<!--      <el-form-item label="创建时间" prop="createTime">-->
+<!--        <el-date-picker clearable size="small"-->
+<!--          v-model="queryParams.createTime"-->
+<!--          type="date"-->
+<!--          value-format="yyyy-MM-dd"-->
+<!--          placeholder="选择创建时间">-->
+<!--        </el-date-picker>-->
+<!--      </el-form-item>-->
+<!--      <el-form-item label="更新时间" prop="updateTime">-->
+<!--        <el-date-picker clearable size="small"-->
+<!--          v-model="queryParams.updateTime"-->
+<!--          type="date"-->
+<!--          value-format="yyyy-MM-dd"-->
+<!--          placeholder="选择更新时间">-->
+<!--        </el-date-picker>-->
+<!--      </el-form-item>-->
       <el-form-item label="是否发送欢迎语" prop="isSendMsg">
         <el-select v-model="queryParams.isSendMsg" placeholder="请选择" clearable size="small" >
           <el-option v-for="dict in allowSelectOptions" :key="dict.dictValue" :label="dict.dictLabel"  :value="dict.dictValue"/>
@@ -196,6 +196,7 @@
                   <div slot="header" style="display: flex;justify-content: space-between;align-items: center; ">
                     <div style="flex: 1;">
                     <span v-if="item.msgtype === 'image'">【图片】: {{ item.image.pic_url }}</span>
+                     <span v-if="item.msgtype === 'video'">【视频】: {{ item.video.url }}</span>
                     <span v-if="item.msgtype === 'link'">【链接】: {{ item.link.title }}-{{item.link.desc}}</span>
                     <span v-if="item.msgtype === 'miniprogram'">【小程序】: {{ item.miniprogram.title }}</span>
                     </div>
@@ -225,6 +226,9 @@
                 <el-dropdown-item command="image">
                   <i class="el-icon-picture" style="margin-right: 10px;"></i>图片
                 </el-dropdown-item>
+                <el-dropdown-item command="video">
+                  <i class="el-icon-video-camera" style="margin-right: 10px;"></i>视频
+                </el-dropdown-item>
                 <el-dropdown-item command="link">
                   <i class="el-icon-link" style="margin-right: 10px;"></i>链接
                 </el-dropdown-item>
@@ -349,6 +353,9 @@
                               <el-dropdown-item command="image">
                                 <i class="el-icon-picture" style="margin-right: 10px;"></i>图片
                               </el-dropdown-item>
+                              <el-dropdown-item command="video">
+                                <i class="el-icon-video-camera" style="margin-right: 10px;"></i>视频
+                              </el-dropdown-item>
                               <el-dropdown-item command="link">
                                 <i class="el-icon-link" style="margin-right: 10px;"></i>链接
                               </el-dropdown-item>
@@ -397,6 +404,25 @@
           <el-form-item label="图片:" prop="imagePicUrl">
             <ImageUpload v-model="fileFrom.imagePicUrl"  type="image" :num="10" :width="150" :height="150"  disabled/>
           </el-form-item>
+        </div>
+          <div v-if="welcomeItem.type==='video'">
+          <el-form-item label="视频:" prop="videoUrl">
+
+            <el-upload
+              v-model="fileFrom.videoUrl"
+              class="avatar-uploader"
+              :action="uploadUrl"
+              :show-file-list="false"
+              :on-success="(res, file) => handleAvatarSuccessVideo(res, file, fileFrom)"
+              :before-upload="beforeAvatarUploadVideo">
+              <i class="el-icon-plus avatar-uploader-icon"></i>
+            </el-upload>
+            {{fileFrom.videoUrl}}
+            <video v-if="fileFrom.videoUrl"
+                   :src="fileFrom.videoUrl"
+                   controls style="width: 200px;height: 100px">
+            </video>
+          </el-form-item>
         </div>
         <div v-if="welcomeItem.type==='link'">
 
@@ -524,6 +550,8 @@ export default {
   components: { ImageUpload, qwUserList,ImageUploadWeclome},
   data() {
     return {
+      
+      uploadUrl: process.env.VUE_APP_BASE_API + "/common/uploadOSS2",
       // 遮罩层
       loading: true,
       // 导出遮罩层
@@ -798,6 +826,8 @@ export default {
       switch (command) {
         case 'image':
           return '添加图片';
+        case 'video':
+          return '添加视频';
         case 'link':
           return '添加链接';
         case 'miniprogram':
@@ -899,6 +929,8 @@ export default {
       };
       if (item.msgtype === 'image') {
         this.fileFrom.imagePicUrl = item.image.pic_url;
+      } else if (item.msgtype === 'video') {
+        this.fileFrom.videoUrl = item.video.url;
       } else if (item.msgtype === 'link') {
         this.fileFrom.linkTitle = item.link.title;
         this.fileFrom.linkPicUrl = item.link.picurl;
@@ -977,6 +1009,13 @@ export default {
             pic_url: this.fileFrom.imagePicUrl
           }
         };
+      } else if (type === 'video') {
+        attachment = {
+          msgtype: 'video',
+          video: {
+            url:this.fileFrom.videoUrl,
+          }
+        };
       } else if (type === 'link') {
         attachment = {
           msgtype: 'link',
@@ -1275,7 +1314,32 @@ export default {
           this.download(response.msg);
           this.exportLoading = false;
         }).catch(() => {});
-    }
+    },
+     handleAvatarSuccessVideo(res, file, content) {
+      if (res.code == 200) {
+        // 使用 $set 确保响应式更新
+        this.$set(content, 'videoUrl', res.url);
+      } else {
+        this.msgError(res.msg);
+      }
+
+    },
+    beforeAvatarUploadVideo(file) {
+      const isLt30M = file.size / 1024 / 1024 < 10;
+      const isMP4 = file.type === 'video/mp4';
+
+      if (!isMP4) {
+        this.$message.error('仅支持上传 MP4 格式的视频文件!');
+        return false;
+      }
+
+      if (!isLt30M) {
+        this.$message.error('上传大小不能超过 10MB!');
+        return false;
+      }
+
+      return true;
+    },
   }
 };
 </script>

+ 1 - 0
src/views/qw/groupMsg/index.vue

@@ -918,6 +918,7 @@ export default {
 
       searchTags(this.queryTagParams).then(response => {
         this.tagGroupList = response.rows;
+        this.tagTotal = response.total;
       });
       // searchTags({name:name,corpId:this.queryParams.corpId}).then(response => {
       //   this.tagGroupList = response.rows;

+ 9 - 5
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"
@@ -415,7 +415,6 @@ export default {
       this.$forceUpdate();
     },
     handleSearchTags(name){
-
       if (!name){
         return this.$message.error("请输入要搜索的标签")
       }
@@ -424,6 +423,7 @@ export default {
 
       searchTags(this.queryTagParams).then(response => {
         this.tagGroupList = response.rows;
+        this.tagTotal = response.total;
       });
 
       // searchTags({name:name,corpId:this.queryParams.corpId}).then(response => {
@@ -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();
     },
     // 多选框选中数据

+ 10 - 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"
@@ -431,6 +431,7 @@ export default {
 
       searchTags(this.queryTagParams).then(response => {
         this.tagGroupList = response.rows;
+        this.tagTotal = response.total;
       });
 
       // searchTags({name:name,corpId:this.queryParams.corpId}).then(response => {
@@ -634,11 +635,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();
     },
     // 多选框选中数据

+ 1 - 0
src/views/qw/sopLogs/sopLogsList.vue

@@ -569,6 +569,7 @@ export default {
       this.resetForm("queryForm");
       this.queryParams.scheduleStartTime=null;
       this.queryParams.scheduleEndTime=null;
+      this.scheduleTime = null;
       this.handleQuery();
     },
     // 多选框选中数据

+ 1 - 1
src/views/qw/sopTemp/index.vue

@@ -111,7 +111,7 @@
     <el-table v-loading="loading" border :data="sopTempList" @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55" align="center"/>
       <el-table-column label="模板编号" align="center" prop="id"/>
-      <el-table-column label="模板编号" align="center">
+      <el-table-column label="公司名称" align="center">
         <template slot-scope="scope">
           <el-tag v-for="item in companys" v-if="scope.row.companyId == item.companyId">{{item.companyName}}</el-tag>
         </template>

+ 55 - 12
src/views/qw/sopUserLogs/sopUserLogsSchedule.vue

@@ -35,16 +35,16 @@
                         placeholder="选择营期时间">
         </el-date-picker>
       </el-form-item>
-      <el-form-item label="状态" prop="status">
-        <el-select v-model="queryParams.status" placeholder="请选择状态" clearable size="small">
-          <el-option
-            v-for="dict in sopUserLogsDelStatus"
-            :key="dict.dictValue"
-            :label="dict.dictLabel"
-            :value="dict.dictValue"
-          />
-        </el-select>
-      </el-form-item>
+<!--      <el-form-item label="状态" prop="status">-->
+<!--        <el-select v-model="queryParams.status" placeholder="请选择状态" clearable size="small">-->
+<!--          <el-option-->
+<!--            v-for="dict in sopUserLogsDelStatus"-->
+<!--            :key="dict.dictValue"-->
+<!--            :label="dict.dictLabel"-->
+<!--            :value="dict.dictValue"-->
+<!--          />-->
+<!--        </el-select>-->
+<!--      </el-form-item>-->
       <el-form-item label="客户名称" prop="externalUserName">
         <el-input
           v-model="queryParams.externalUserName"
@@ -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;