Procházet zdrojové kódy

Merge remote-tracking branch 'origin/master'

jzp před 2 dny
rodič
revize
bcdfb22dbd

+ 3 - 0
.env.development

@@ -25,3 +25,6 @@ VUE_CLI_BABEL_TRANSPILE_MODULES = true
 VUE_APP_PATIENT_INFO = '客户信息'
 # 添加病人
 VUE_APP_ADD_PATIENT = '添加信息'
+
+#1、正常搜索下拉框 2、查询出200条数据,然后搜索这200条以内的
+VUE_APP_COURSE_COMPANY_NAME = 2

+ 4 - 1
.env.prod-sft

@@ -16,7 +16,10 @@ ENV = 'production'
 VUE_APP_BASE_API = '/prod-api'
 
 #默认 1、会员 2、企微
-VUE_APP_COURSE_DEFAULT = 2
+VUE_APP_COURSE_DEFAULT = 1
 
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true
+
+#1、正常搜索下拉框 2、查询出200条数据,然后搜索这200条以内的
+VUE_APP_COURSE_COMPANY_NAME = 2

+ 9 - 0
src/api/qw/qwUser.js

@@ -7,3 +7,12 @@ export function getQwUserAll() {
     method: 'get'
   })
 }
+
+// 根据条件查询企微用户列表
+export function getQwList(params) {
+  return request({
+    url: '/qw/user/qwList',
+    method: 'get',
+    params: params
+  })
+}

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

@@ -138,7 +138,13 @@ 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',

+ 35 - 8
src/views/course/courseWatchLog/deptWatchLog.vue

@@ -38,7 +38,7 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="所属销售" prop="companyUserId">
+      <el-form-item v-if="companyName === undefined || companyName === 1" label="所属销售" prop="companyUserId">
         <el-select v-model="queryParams.companyUserId" clearable filterable remote
                    placeholder="请输入关键词" :remote-method="loadCompanyUserOptions"
                    v-select-load-more="loadMoreCompanyUserOptions"
@@ -51,6 +51,19 @@
           </el-option>
         </el-select>
       </el-form-item>
+      <el-form-item v-if="companyName==2" label="所属销售" prop="companyUserId">
+        <el-select v-model="queryParams.companyUserId" clearable filterable remote
+                   placeholder="请输入关键词"
+                   v-select-load-more="loadMoreCompanyUserOptions"
+                   :loading="companyUserOptionsLoading">
+          <el-option
+            v-for="item in companyUserOptionsByAll"
+            :key="item.dictValue"
+            :label="item.dictLabel"
+            :value="item.dictValue">
+          </el-option>
+        </el-select>
+      </el-form-item>
       <el-form-item label="课程" prop="courseId">
         <el-select filterable  v-model="queryParams.courseId" placeholder="请选择课程"  clearable size="small" @change="courseChange(queryParams.courseId)">
           <el-option
@@ -456,6 +469,7 @@ export default {
   name: "CourseWatchLog",
   data() {
     return {
+      companyName:process.env.VUE_APP_COURSE_COMPANY_NAME,
       sopSearchText: '', // SOP搜索框显示的文本
       selectedSopId: null, // 选中的SOP ID
       sendTypeOptions:[{
@@ -592,10 +606,11 @@ export default {
         name: undefined,
         hasNextPage: false,
         pageNum: 1,
-        pageSize: 10
+        pageSize: 200
       },
       companyUserOptionsLoading: false,
       companyUserOptions: [],
+      companyUserOptionsByAll: [],
     };
   },
   created() {
@@ -606,6 +621,7 @@ export default {
     this.getDicts("sys_course_watch_log_type").then(response => {
       this.logTypeOptions = response.data;
     });
+    this.getCompanyUserListLikeName(true);
   },
   methods: {
     handleSendTypeChange() {
@@ -1002,12 +1018,23 @@ export default {
     /**
      * 获取员工列表
      */
-    getCompanyUserListLikeName() {
-      getCompanyUserListLikeName(this.companyUserOptionsParams).then(response => {
-        this.companyUserOptions = [...this.companyUserOptions, ...response.data.list]
-        this.companyUserOptionsParams.hasNextPage = response.data.hasNextPage
-        this.companyUserOptionsLoading = false;
-      });
+    getCompanyUserListLikeName(isAll) {
+
+      if (isAll){
+
+        getCompanyUserListLikeName(this.companyUserOptionsParams).then(response => {
+          this.companyUserOptionsByAll = [...this.companyUserOptions, ...response.data.list]
+          this.companyUserOptionsParams.hasNextPage = response.data.hasNextPage
+          this.companyUserOptionsLoading = false;
+        });
+      }else {
+        getCompanyUserListLikeName(this.companyUserOptionsParams).then(response => {
+          this.companyUserOptions = [...this.companyUserOptions, ...response.data.list]
+          this.companyUserOptionsParams.hasNextPage = response.data.hasNextPage
+          this.companyUserOptionsLoading = false;
+        });
+      }
+
     },
     /**
      * 加载更多员工选项

+ 97 - 9
src/views/course/courseWatchLog/index.vue

@@ -68,7 +68,7 @@
           />
         </el-select>
       </el-form-item>
-      <el-form-item label="所属销售" prop="companyUserId">
+      <el-form-item v-if="companyName === undefined || companyName === 1" label="所属销售" prop="companyUserId">
         <el-select v-model="queryParams.companyUserId" clearable filterable remote
                    placeholder="请输入关键词" :remote-method="loadCompanyUserOptions"
                    v-select-load-more="loadMoreCompanyUserOptions"
@@ -81,6 +81,32 @@
           </el-option>
         </el-select>
       </el-form-item>
+      <el-form-item v-if="companyName==2" label="所属销售" prop="companyUserId">
+        <el-select v-model="queryParams.companyUserId" clearable filterable remote
+                   placeholder="请输入关键词"
+                   v-select-load-more="loadMoreCompanyUserOptions"
+                   :loading="companyUserOptionsLoading">
+          <el-option
+            v-for="item in companyUserOptionsByAll"
+            :key="item.dictValue"
+            :label="item.dictLabel"
+            :value="item.dictValue">
+          </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"
+                   :loading="qwUserOptionsLoading">
+          <el-option
+            v-for="item in qwUserOptions"
+            :key="item.qwUserId"
+            :label="item.qwUserName"
+            :value="item.qwUserName">
+          </el-option>
+        </el-select>
+      </el-form-item>
     <!-- sop名称 -->
     <el-form-item label="SOP名称" prop="sopId" v-if="queryParams.sendType == 2">
       <el-autocomplete
@@ -233,11 +259,11 @@
         </el-date-picker>
       </el-form-item>
 
-      <el-form-item label="是否为会员" prop="isVip">
+      <el-form-item label="是否注册" prop="isVip">
         <el-select
           filterable
           v-model="queryParams.isVip"
-          placeholder="请选择是否为会员"
+          placeholder="请选择是否注册"
           clearable size="small">
           <el-option
             v-for="dict in isVipList"
@@ -570,12 +596,14 @@ import Vue from 'vue'
 import Calendar from 'vue-mobile-calendar'
 import {infoSop} from "@/api/qw/sop";
 import {getCompanyUserListLikeName} from "../../../api/company/companyUser";
+import {getQwList} from "@/api/qw/qwUser";
 Vue.use(Calendar)
 
 export default {
   name: "CourseWatchLog",
   data() {
     return {
+      companyName:process.env.VUE_APP_COURSE_COMPANY_NAME,
       // 日历 key 控制刷新
       scheduleCalendarKey: 0,
       createCalendarKey: 0,
@@ -718,6 +746,7 @@ export default {
         externalUserName:null,
         duration: null,
         qwUserId: null,
+        qwUserName: null,
         companyUserId: null,
         companyId: null,
         courseId: null,
@@ -745,10 +774,21 @@ export default {
         name: undefined,
         hasNextPage: false,
         pageNum: 1,
-        pageSize: 10
+        pageSize: 200
       },
       companyUserOptions: [],
+      companyUserOptionsByAll: [],
       companyUserOptionsLoading: false,
+      // 企微信息
+      qwUserOptions: [],
+      // 员工选项列表
+      qwUserOptionsParams: {
+        name: undefined,
+        hasNextPage: false,
+        pageNum: 1,
+        pageSize: 10
+      },
+      qwUserOptionsLoading: false,
     };
   },
   created() {
@@ -762,6 +802,7 @@ export default {
     this.getDicts("sys_course_project").then(response => {
       this.projectOptions = response.data;
     });
+    this.getCompanyUserListLikeName(true);
   },
   methods: {
     /**
@@ -779,6 +820,21 @@ export default {
       this.companyUserOptionsLoading = true;
       this.getCompanyUserListLikeName()
     },
+    /**
+     * 根据条件查询企微列表
+     * @param query 参数
+     */
+    loadQwUserOptions(query) {
+      this.qwUserOptions = [];
+      if (query === '') {
+        return;
+      }
+      this.qwUserOptionsParams.pageNum = 1
+      // 将搜索关键词设置到queryParams中
+      this.queryParams.qwUserName = query
+      this.qwUserOptionsLoading = true;
+      this.getQwList()
+    },
     /**
      * 加载更多员工选项
      */
@@ -794,14 +850,46 @@ export default {
     /**
      * 获取员工列表
      */
-    getCompanyUserListLikeName() {
-      getCompanyUserListLikeName(this.companyUserOptionsParams).then(response => {
-        this.companyUserOptions = [...this.companyUserOptions, ...response.data.list]
-        this.companyUserOptionsParams.hasNextPage = response.data.hasNextPage
-        this.companyUserOptionsLoading = false;
+    getCompanyUserListLikeName(isAll) {
+
+      if (isAll){
+
+        getCompanyUserListLikeName(this.companyUserOptionsParams).then(response => {
+          this.companyUserOptionsByAll = [...this.companyUserOptions, ...response.data.list]
+          this.companyUserOptionsParams.hasNextPage = response.data.hasNextPage
+          this.companyUserOptionsLoading = false;
+        });
+      }else {
+        getCompanyUserListLikeName(this.companyUserOptionsParams).then(response => {
+          this.companyUserOptions = [...this.companyUserOptions, ...response.data.list]
+          this.companyUserOptionsParams.hasNextPage = response.data.hasNextPage
+          this.companyUserOptionsLoading = false;
+        });
+      }
+
+    },
+    getQwList() {
+      console.log("企微参数", this.queryParams);
+      getQwList(this.queryParams).then(response => {
+        this.qwUserOptions = [...this.qwUserOptions, ...response.rows]
+        // 根据实际返回的数据结构设置hasNextPage
+        this.qwUserOptionsParams.hasNextPage = response.rows && response.rows.length >= this.qwUserOptionsParams.pageSize
+        this.qwUserOptionsLoading = false;
       });
     },
 
+    /**
+     * 加载更多员工选项
+     */
+    loadMoreQwUserOptions() {
+      if (!this.qwUserOptionsParams.hasNextPage) {
+        return;
+      }
+
+      this.qwUserOptionsParams.pageNum += 1
+      this.getQwList()
+    },
+
     // 重置日历组件
     resetCalendars() {
       this.scheduleTime = [];

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

@@ -239,11 +239,11 @@
         </el-date-picker>
       </el-form-item>
 
-      <el-form-item label="是否为会员" prop="isVip">
+      <el-form-item label="是否注册" prop="isVip">
         <el-select
           filterable
           v-model="queryParams.isVip"
-          placeholder="请选择是否为会员"
+          placeholder="请选择是否注册"
           clearable size="small">
           <el-option
             v-for="dict in isVipList"

+ 5 - 2
src/views/qw/externalContact/collection.vue

@@ -15,9 +15,12 @@
                     <span style="font-size: 15px;font-weight: bold;    margin-left: 31px">{{ answer.title }}</span>
                 </div>
                 <div style="margin-left: 31px;">
-                    <el-radio-group :disabled="form.answers[index].flag" v-model="form.answers[index].value">
+                    <el-checkbox-group :disabled="form.answers[index].flag" v-model="form.answers[index].value" size="mini" >
+                        <el-checkbox v-for="dict in answer.options" :label="dict.value" >{{ dict.name }}</el-checkbox>
+                    </el-checkbox-group>
+                    <!-- <el-radio-group :disabled="form.answers[index].flag" v-model="form.answers[index].value">
                         <el-radio v-for="dict in answer.options" :label="dict.value">{{ dict.name }}</el-radio>
-                    </el-radio-group>
+                    </el-radio-group> -->
                 </div>
 
             </div>

+ 29 - 1
src/views/qw/externalContact/myExternalContact.vue

@@ -484,6 +484,14 @@
           >
             <span>初诊单</span>
           </el-button>
+          <el-button
+             size="mini"
+             type="text"
+             @click="handleMemberdetails(scope.row)"
+             v-if="scope.row.fsUserId"
+             >
+             <span>会员详情</span>
+          </el-button>
           <el-button
              size="mini"
              type="text"
@@ -913,6 +921,13 @@
         />
       </div>
     </el-drawer>
+    
+    <el-drawer
+        :with-header="false"
+        size="75%"
+          :title="member.title" :visible.sync="member.open">
+      <userDetails  ref="userDetails" />
+    </el-drawer>
 
     <!-- 绑定客户   -->
     <el-dialog :title="bindCustomer.title" :visible.sync="bindCustomer.open"  width="1200px" append-to-body>
@@ -991,11 +1006,16 @@ import {docList} from "@/api/doctor/doctor";
 import PaginationMore from "../../../components/PaginationMore/index.vue";
 import Collection from './collection.vue';
 import {courseList, videoList} from "@/api/course/courseRedPacketLog";
+import userDetails from '@/views/store/components/userDetails.vue';
 export default {
   name: "ExternalContact",
-  components:{PaginationMore, mycustomer,customerDetails,SopDialog,selectUser,info,Collection},
+  components:{PaginationMore, mycustomer,customerDetails,SopDialog,selectUser,info,Collection,userDetails},
   data() {
     return {
+      member:{
+        title:"客户详情",
+        open:false,
+      },
       projectOptions: [],
       courseLists: [],
       videoList: [],
@@ -1285,6 +1305,14 @@ export default {
         this.videoList = response.list
       });
     },
+
+    handleMemberdetails(row){
+            this.member.open=true;
+            setTimeout(() => {
+                 this.$refs.userDetails.getDetails(row.fsUserId);
+            }, 1);
+    },
+
     handleInfoCollection(row){
       this.collection.title = "信息采集";
       this.collection.open = true;

+ 31 - 20
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,12 +440,23 @@ 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 } from "@/api/store/storeOrder";
+import {
+  bindCustomer,
+  getExpress,
+  listStoreOrder,
+  getStoreOrder,
+  delStoreOrder,
+  addStoreOrder,
+  updateStoreOrder,
+  exportStoreOrder,
+  uploadCredentials,
+  updateAddressErpFsStoreOrder
+} 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 {
@@ -498,7 +509,7 @@ export default {
       },
       editAddressForm:{
         districtId:null,
-        
+
       },
       editAddressRules:{
 
@@ -553,7 +564,7 @@ export default {
     this.getDicts("store_order_create_type").then((response) => {
       this.createTypeOptions = response.data;
     });
-   
+
   },
   methods: {
     showImageDialog() {
@@ -576,7 +587,7 @@ export default {
       }
       var data={mobile:this.bindCustomerForm.mobile};
       getCustomerListBySearch(data).then(response => {
-          this.customers=response.data;        
+          this.customers=response.data;
       });
     },
     handleBindCustomer() {
@@ -621,7 +632,7 @@ export default {
           if(this.express!=null&&this.express.Traces!=null){
               this.traces=this.express.Traces
           }
-          
+
       });
 
     },
@@ -640,8 +651,8 @@ export default {
       })
       console.log(item)
       this.editAddressForm.city=item.name;
- 
-        
+
+
     },
     provinceChange(val){
       this.city=this.citys.filter(item => item.parentId===val )
@@ -675,7 +686,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 )
@@ -686,7 +697,7 @@ export default {
         if(district!=null){
           this.editAddressForm.districtId=district.cityId;
         }
-        
+
         this.editAddress.open = true;
     },
     /** 提交按钮 */
@@ -694,7 +705,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;
-            updateStoreOrder(this.editAddressForm).then(response => {
+            updateAddressErpFsStoreOrder(this.editAddressForm).then(response => {
               if (response.code === 200) {
                 this.msgSuccess("修改成功");
                 this.editAddress.open = false;
@@ -738,7 +749,7 @@ export default {
               this.getOrder(this.order.id);
             }
           });
-       
+
         }
       });
     },
@@ -757,7 +768,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;

+ 31 - 2
src/views/store/components/storeOrderDetails.vue

@@ -411,7 +411,36 @@
 </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} 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,
+  updateAddressErpFsStoreOrder
+} from "@/api/store/storeOrder";
 import packageOrderDetails from '../components/packageOrderDetails2.vue';
 import {getCustomerListBySearch } from "@/api/crm/customer";
 import { getTcmScheduleList } from "@/api/company/tcmScheduleReport";
@@ -778,7 +807,7 @@ import {getCitys} from "@/api/store/city";
           userAddress: addressModified ? this.buildFullAddress() : (this.originalAddress || this.item.userAddress || ''),
         };
 
-        updateStoreOrder(payload).then(response => {
+        updateAddressErpFsStoreOrder(payload).then(response => {
           if (response.code === 200) {
             this.msgSuccess("操作成功");
             this.edit.open = false;