Browse Source

Merge remote-tracking branch 'origin/master'

yuhongqi 10 hours ago
parent
commit
fd223c5569

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

+ 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',

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

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

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

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

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

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

+ 10 - 0
src/views/course/courseWatchLog/deptWatchLog.vue

@@ -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="操作"

+ 24 - 14
src/views/course/courseWatchLog/index.vue

@@ -265,20 +265,20 @@
         </el-date-picker>
       </el-form-item>
 
-      <el-form-item label="是否注册" prop="isVip">
-        <el-select
-          filterable
-          v-model="queryParams.isVip"
-          placeholder="请选择是否注册"
-          clearable size="small">
-          <el-option
-            v-for="dict in isVipList"
-            :key="dict.dictValue"
-            :label="dict.dictLabel"
-            :value="dict.dictValue"
-          />
-        </el-select>
-      </el-form-item>
+<!--      <el-form-item label="是否注册" prop="isVip">-->
+<!--        <el-select-->
+<!--          filterable-->
+<!--          v-model="queryParams.isVip"-->
+<!--          placeholder="请选择是否注册"-->
+<!--          clearable size="small">-->
+<!--          <el-option-->
+<!--            v-for="dict in isVipList"-->
+<!--            :key="dict.dictValue"-->
+<!--            :label="dict.dictLabel"-->
+<!--            :value="dict.dictValue"-->
+<!--          />-->
+<!--        </el-select>-->
+<!--      </el-form-item>-->
 
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
@@ -372,6 +372,16 @@
       <el-table-column label="完课时间" align="center" prop="finishTime" />
       <el-table-column label="营期时间" align="center" prop="campPeriodTime" />
       <el-table-column label="进线时间" align="center" prop="qecCreateTime" />
+      <el-table-column label="是否领奖" align="center" prop="rewardType" >
+        <template slot-scope="scope">
+          <el-tag
+            :type="scope.row.rewardType ? 'success' : 'info'"
+            effect="plain"
+          >
+            {{ scope.row.rewardType ? '已领取' : '未领取' }}
+          </el-tag>
+        </template>
+      </el-table-column>
       <el-table-column
         fixed="right"
         label="操作"

+ 24 - 14
src/views/course/courseWatchLog/watchLog.vue

@@ -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="操作"

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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