13 Revize 039159c52c ... 377f33e24d

Autor SHA1 Zpráva Datum
  yjwang 377f33e24d Merge remote-tracking branch 'origin/master' into ScrmStore před 2 dny
  yjwang 973f225a85 Merge remote-tracking branch 'origin/master' před 2 dny
  yjwang d2c1b5c04c 新增云联测试配置 před 2 dny
  dongdong.xiang 3bb1d2393e add před 2 dny
  三七 dc2fbf7ae0 评级7天 před 3 dny
  三七 4e387f9100 Merge remote-tracking branch 'origin/master' před 3 dny
  三七 b5e0ba6c8c Merge remote-tracking branch 'origin/master' před 3 dny
  吴树波 29938e5f9b Merge remote-tracking branch 'origin/master' před 3 dny
  三七 6883058b62 评级7天 před 3 dny
  Long 00cab48747 FIX:项目会员详情 před 3 dny
  吴树波 74302988b3 ab小程序 před 3 dny
  ct 761ebb75c4 修改订单添加收货人手机 před 3 dny
  ct f0debc620d 金牛需求 před 5 dny

+ 41 - 0
.env.prod-ylrz

@@ -0,0 +1,41 @@
+#该文本用于打包测试平台
+# 页面标题
+VUE_APP_TITLE =云联融智互联网医院管理系统
+# 首页菜单标题
+VUE_APP_TITLE_INDEX =云联融智互联网医院
+# 公司名称
+VUE_APP_COMPANY_NAME =云联融智科技有些公司
+# ICP备案号
+VUE_APP_ICP_RECORD =
+# ICP网站访问地址
+VUE_APP_ICP_URL =https://beian.miit.gov.cn
+# 网站LOG
+VUE_APP_LOG_URL =@/assets/logo/ylrz.png
+# 存储桶配置
+VUE_APP_OBS_ACCESS_KEY_ID = K2UTJGIN7UTZJR2XMXYG
+# 存储桶配置
+VUE_APP_OBS_SECRET_ACCESS_KEY = sbyeNJLbcYmH6copxeFP9pAoksM4NIT9Zw4x0SRX
+# 存储桶配置
+VUE_APP_OBS_SERVER = https://obs.cn-north-4.myhuaweicloud.com
+# 存储桶配置
+VUE_APP_OBS_BUCKET = jkj-hw079058881
+# 存储桶配置
+VUE_APP_COS_BUCKET = jkj-1323137866
+# 存储桶配置
+VUE_APP_COS_REGION = ap-chongqing
+# 线路一地址
+VUE_APP_VIDEO_LINE_1 = https://jkjtcpv.ylrzcloud.com
+# 线路二地址
+VUE_APP_VIDEO_LINE_2 = https://jkjobs.ylrztop.com
+
+# 开发环境配置
+ENV = 'production'
+
+# FS管理系统/开发环境
+VUE_APP_BASE_API = '/prod-api'
+
+#默认 1、会员 2、企微
+VUE_APP_COURSE_DEFAULT = 1
+
+# 路由懒加载
+VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 1 - 0
package.json

@@ -7,6 +7,7 @@
   "scripts": {
     "dev": "vue-cli-service serve",
     "build:prod": "vue-cli-service build",
+    "build:prod-ylrz": "vue-cli-service build --mode prod-ylrz",
     "build:prod-test": "vue-cli-service build --mode prod-test",
     "build:prod-hzyy": "vue-cli-service build --mode prod-hzyy",
     "build:prod-jzzx": "vue-cli-service build --mode prod-jzzx",

+ 16 - 0
src/api/his/storeOrder.js

@@ -15,6 +15,13 @@ export function importTemplate() {
     method: 'get'
   })
 }
+// 下载导入模板
+export function importUpdateOrderTemplate() {
+  return request({
+    url: '/his/storeOrder/importUpdateOrderTemplate',
+    method: 'get'
+  })
+}
 // 查询订单详细
 export function getOrder(orderId) {
   return request({
@@ -149,6 +156,15 @@ export function updateOrder(data) {
     data: data
   })
 }
+// 修改订单
+export function updateStoreOrder(data) {
+  return request({
+    url: '/his/storeOrder/updateStoreOrder',
+    method: 'put',
+    data: data
+  })
+}
+
 export function updateDelivery(data) {
   return request({
     url: '/his/storeOrder/updateDelivery',

+ 9 - 3
src/views/components/his/storeOrderDetails.vue

@@ -299,6 +299,7 @@
                         <el-option key="SF"  label="顺丰" value="SF" />
                         <el-option key="EMS"  label="邮政" value="EMS" />
                          <el-option key="ZTO"  label="中通" value="ZTO" />
+                         <el-option key="STO"  label="申通" value="ZTO" />
                          <el-option key="JD"  label="京东" value="JD" />
                          <el-option key="DBL"  label="德邦" value="DBL" />
 						 <el-option key="YD"  label="韵达" value="YD" />
@@ -366,7 +367,10 @@
                    </el-form-item>
                    <el-form-item label="详情地址" prop="userAddress"  >
                     <el-input v-model="editForm.userAddress" placeholder="请输入" />
-                  </el-form-item>
+                   </el-form-item>
+                   <el-form-item label="收货人电话" prop="userPhone"  >
+                    <el-input v-model="editForm.userPhone" placeholder="请输入" />
+                   </el-form-item>
                   <el-form-item label="备注" prop="remark"  >
                     <el-input v-model="editForm.remark" placeholder="请输入备注" />
                   </el-form-item>
@@ -418,7 +422,7 @@
 </template>
 
 <script>
-import {getMsgFollow,sendMsg,msgList,updateMoney,getGoods,getEroOrder,editTuiMoney,updateDelivery,createErpOrder,updateExpress,updateErp, afterSales,sendgoods,logList,listOrder,getExpress,syncExpress, listOrderitem,getOrder, delOrder, addOrder, updateOrder, exportOrder,payment,tuiOrder ,getPrescribe,getOrderUserPhone,returnCost} from "@/api/his/storeOrder";
+import {getMsgFollow,sendMsg,msgList,updateMoney,getGoods,getEroOrder,editTuiMoney,updateDelivery,createErpOrder,updateExpress,updateErp, afterSales,sendgoods,logList,listOrder,getExpress,syncExpress, listOrderitem,getOrder, delOrder, addOrder, updateStoreOrder, exportOrder,payment,tuiOrder ,getPrescribe,getOrderUserPhone,returnCost} from "@/api/his/storeOrder";
 import inquiryOrderDetails from '../his/inquiryOrderDetails.vue';
 import packageOrderDetails from '../his/packageOrderDetails2.vue';
 import prescribeDetails from '../his/prescribeDetails.vue';
@@ -515,6 +519,7 @@ import { getTcmScheduleList } from "@/api/company/schedule";
           userAddress:null,
           deliveryStatus:null,
           deliveryType:null,
+          userPhone:null,
           remark:"",
         },
         editDyRules:{
@@ -706,7 +711,7 @@ import { getTcmScheduleList } from "@/api/company/schedule";
     submitEditForm(){
         this.$refs["editForm"].validate(valid => {
         if (valid) {
-          updateOrder(this.editForm).then(response => {
+          updateStoreOrder(this.editForm).then(response => {
             if (response.code === 200) {
               this.msgSuccess("操作成功");
                this.edit.open = false;
@@ -725,6 +730,7 @@ import { getTcmScheduleList } from "@/api/company/schedule";
         this.editForm.orderId=this.item.orderId;
         this.editForm.remark=this.item.remark;
         this.editForm.userAddress = this.item.userAddress.toString();
+        this.editForm.userPhone = this.item.userPhone.toString();
         this.editForm.status = this.item.status.toString();
         this.editForm.deliveryType = this.item.deliveryType.toString();
         this.editForm.deliveryStatus = this.item.deliveryStatus.toString();

+ 43 - 0
src/views/his/company/index.vue

@@ -308,6 +308,38 @@
             :value="item.appId"
           />
         </el-select>
+      </el-form-item>
+      <el-form-item label="主要小程序" prop="miniAppMaster" >
+        <el-select
+          v-model="form.miniAppMaster"
+          multiple
+          :multiple-limit="1"
+          placeholder="请选择"
+          clearable
+          size="small">
+          <el-option
+            v-for="item in miniAppList"
+            :key="item.appId"
+            :label="item.appName"
+            :value="item.appId"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="备用小程序" prop="miniAppServer" >
+        <el-select
+          v-model="form.miniAppServer"
+          multiple
+          :multiple-limit="1"
+          placeholder="请选择"
+          clearable
+          size="small">
+          <el-option
+            v-for="item in miniAppList"
+            :key="item.appId"
+            :label="item.appName"
+            :value="item.appId"
+          />
+        </el-select>
       </el-form-item>
          <el-form-item label="备注" prop="remark">
           <el-input v-model="form.remark" type="textarea"  :rows="2" placeholder="请输入备注" />
@@ -436,6 +468,8 @@ export default {
         restartTime: '13:10',
         courseMaAppId: null,
         courseMiniAppId: null,
+        miniAppMaster: [],
+        miniAppList: [],
       },
       // 表单校验
      rules: {
@@ -523,6 +557,13 @@ export default {
     cateList().then((response) => {
       this.cateList = response.rows;
     });
+    // getConfigByKey("courseMa.config").then(response => {
+    //   if(response.data && response.data.configValue) {
+    //     this.miniAppList = JSON.parse(response.data.configValue);
+    //   } else {
+    //     this.miniAppList = [];
+    //   }
+    // });
 	docList().then(response => {
 	    this.doctor=response.rows;
 	});
@@ -607,6 +648,8 @@ export default {
         remark: null,
         linkName: null,
         limitUserCount: null,
+        miniAppMaster: [],
+        miniAppList: [],
         isDel: null,
         courseMaAppId: null,
         courseMiniAppId: null,

+ 91 - 21
src/views/his/storeOrder/order1.vue

@@ -310,7 +310,7 @@
       <el-form-item label="ERP账户" prop="erpAccount" v-if="SFDFopen">
         <el-select v-model="queryParams.erpAccount" placeholder="ERP账户" clearable size="small">
           <el-option
-            v-for="dict in erpAccountList"
+            v-for="dict in erpAccountQueryList"
             :key="dict"
             :label="dict"
             :value="dict"
@@ -364,6 +364,16 @@
             v-hasPermi="['his:storeOrder:exportDeliver']"
           >导入发货</el-button>
         </el-col>
+        <el-col :span="1.5">
+          <el-button
+            type="info"
+            plain
+            icon="el-icon-upload2"
+            size="mini"
+            @click="handleImportStatus"
+            v-hasPermi="['his:storeOrder:editImport']"
+          >导入订单状态</el-button>
+        </el-col>
         <el-col :span="1.5">
           <el-button
             type="info"
@@ -589,6 +599,34 @@
         <el-button @click="upload.open = false">取 消</el-button>
       </div>
     </el-dialog>
+
+    <el-dialog :title="uploadStatus.title" :visible.sync="uploadStatus.open" width="400px" append-to-body>
+        <el-upload
+          ref="uploadStatus"
+          :limit="1"
+          accept=".xlsx, .xls"
+          :headers="uploadStatus.headers"
+          :action="uploadStatus.url + '?updateSupport=' + upload.updateSupport"
+          :disabled="uploadStatus.isUploading"
+          :on-progress="handleFileUploadProgressOrder"
+          :on-success="handleFileSuccessOrder"
+          :auto-upload="false"
+          drag
+        >
+          <i class="el-icon-upload"></i>
+          <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+          <div class="el-upload__tip text-center" slot="tip">
+            <div class="el-upload__tip" slot="tip">
+            </div>
+            <span>仅允许导入xls、xlsx格式文件。</span>
+            <el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" @click="importUpdateOrderTemplate">下载模板</el-link>
+          </div>
+        </el-upload>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitOrderStatusFileForm">确 定</el-button>
+        <el-button @click="uploadStatus.open = false">取 消</el-button>
+      </div>
+    </el-dialog>
     
     <!-- 设置推送手机对话框 -->
     <el-dialog :title="erpPhone.title" :visible.sync="erpPhone.open" width="600px" append-to-body>
@@ -721,7 +759,7 @@
 
 <script>
 import { listOrder, getOrder, delOrder, addOrder,importExpressTemplate, updateOrder, exportOrder,importTemplate,exportOrder2,queryErpPhone,
-  saveErpPhone,editErpPhone,batchCreateErpOrder,getErpAccount,batchSetErpOrder } from "@/api/his/storeOrder";
+  saveErpPhone,editErpPhone,batchCreateErpOrder,getErpAccount,batchSetErpOrder,importUpdateOrderTemplate } from "@/api/his/storeOrder";
 import storeOrderDetails from '../../components/his/storeOrderDetails.vue';
 import { getToken } from "@/utils/auth";
 import {listStore} from "@/api/his/storeProduct";
@@ -738,13 +776,6 @@ export default {
     // 监听deptId
     'deptId': 'currDeptChange'
   },
-  // computed: {
-  //   // 计算选中账户的详细信息
-  //   selectedAccountInfo() {
-  //     if (!this.erpAccountForm.selectedAccount) return null;
-  //     return this.erpAccountList.find(account => account.id === this.erpAccountForm.selectedAccount);
-  //   }
-  // },
   data() {
     return {
       // 新增排序相关数据
@@ -784,6 +815,7 @@ export default {
         submitting: false
       },
       erpAccountList: [], // ERP账户列表
+      erpAccountQueryList:[], // ERP账户查询条件列表
       erpAccountForm: {
         selectedAccount: null // 选中的账户ID
       },
@@ -837,6 +869,20 @@ export default {
         // 上传的地址
         url: process.env.VUE_APP_BASE_API + "/his/storeOrder/importData"
       },
+      uploadStatus: {
+        // 是否显示弹出层
+        open: false,
+        // 弹出层标题
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: { Authorization: "Bearer " + getToken() },
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/his/storeOrder/importOrderStatusData"
+      },
       // 遮罩层
       loading: true,
       // 导出遮罩层
@@ -924,7 +970,7 @@ export default {
         isFirst:null,
 		    source:null,
         companyId:null,
-        companyIds:null
+        companyIds:null,
       },
       // 表单参数
       form: {},
@@ -1008,7 +1054,6 @@ export default {
           this.deliveryStatusOptions = response.data;
     });
     this.getErpAccountList();
-
   },
   methods: {
     // 新增排序处理方法
@@ -1243,32 +1288,33 @@ export default {
     // 设置erp账户
     showErpAccountSetDialog() {
       this.erpAccountDialog.open = true;
-      // this.erpAccountDialog.loading = true;
       this.erpSettingType = 'set'
-      // this.getErpAccountList();
       this.calculateOrderSummary();
     },
     //显示ERP账户选择对话框
     showErpAccountDialog() {
       this.erpAccountDialog.open = true;
-      // this.erpAccountDialog.loading = true;
       this.erpSettingType = 'push'
-      // this.getErpAccountList();
       this.calculateOrderSummary();
     },
     
     //获取ERP账户列表
     async getErpAccountList() {
-    // getErpAccountList() {  
       try {
         const response = await getErpAccount();
-        // const response = getErpAccount();
         if (response.code === 200) {
-          this.erpAccountList = response.data || [];
+          const list = response.data || [];
+          this.erpAccountList = [...list];
+          this.erpAccountQueryList = [...list, '未分拣'];
+          // 设置默认值:第一条真实账户
+          if (list.length && !this.queryParams.erpAccount) {
+              this.$set(this.queryParams, 'erpAccount', list[0]);
+          }
         } else {
           this.$message.error(response.msg || '获取ERP账户列表失败');
           this.erpAccountList = [];
         }
+        
       } catch (error) {
         console.error('获取ERP账户列表失败:', error);
         this.$message.error('获取ERP账户列表失败');
@@ -1663,6 +1709,10 @@ export default {
         handleFileUploadProgressExpress(event, file, fileList) {
           this.upload.isUploading = true;
         },
+        // 文件上传中处理
+        handleFileUploadProgressOrder(event, file, fileList) {
+          this.uploadStatus.isUploading = true;
+        },
         // 文件上传成功处理
         handleFileSuccessExpress(response, file, fileList) {
           this.importExpress.open = false;
@@ -1671,14 +1721,26 @@ export default {
           this.$alert(response.msg, "导入结果", { dangerouslyUseHTMLString: true });
           this.getList();
         },
+         // 文件上传成功处理
+         handleFileSuccessOrder(response, file, fileList) {
+          this.uploadStatus.open = false;
+          this.uploadStatus.isUploading = false;
+          this.$refs.uploadStatus.clearFiles();
+          this.$alert(response.msg, "导入结果", { dangerouslyUseHTMLString: true });
+          this.getList();
+        },
+        
         // 提交上传文件
         submitFileFormExpress() {
           this.$refs.importExpress.submit();
         },
 
-
-    /** 导入按钮操作 */
-    handleImport() {
+      handleImportStatus() {
+        this.uploadStatus.title = "导入";
+        this.uploadStatus.open = true;
+       },
+      /** 导入按钮操作 */
+      handleImport() {
         this.upload.title = "导入";
         this.upload.open = true;
        },
@@ -1689,6 +1751,11 @@ export default {
           this.download(response.msg);
         });
       },
+      importUpdateOrderTemplate(){
+        importUpdateOrderTemplate().then(response => {
+          this.download(response.msg);
+        });
+      },
       // 文件上传中处理
       handleFileUploadProgress(event, file, fileList) {
         this.upload.isUploading = true;
@@ -1705,6 +1772,9 @@ export default {
       submitFileForm() {
         this.$refs.upload.submit();
       },
+      submitOrderStatusFileForm(){
+        this.$refs.uploadStatus.submit();
+      },
     handledetails(row){
         this.show.open=true;
         setTimeout(() => {

+ 1 - 1
src/views/his/user/indexProject.vue

@@ -693,7 +693,7 @@ export default {
       var that=this;
       that.show.open=true;
       setTimeout(() => {
-        that.$refs.storeUserDetails.getDetails(row.userId);
+        that.$refs.userDetailsByNew.getDetails(row.userId);
       }, 200);
     },
     /** 更换会员归属按钮操作 */

+ 7 - 0
src/views/system/config/config.vue

@@ -1390,6 +1390,12 @@
              </el-tooltip>
            </el-form-item>
 
+           <el-form-item label="超过多少天的客户没看课评E级" prop="levelDay">
+             <el-tooltip class="item" effect="dark" content="超过多少天的客户没看课评E级,且不生成sop执行记录了,不发了" placement="top-end">
+               <el-input-number v-model="form20.notStudyDays" :min="7" :max="365"></el-input-number>
+             </el-tooltip>
+           </el-form-item>
+
            <!-- A级范围 -->
            <el-form-item label="A级范围(%)" prop="aLevelMin">
              <el-tooltip class="item" effect="dark" content="A级客户范围最小值(%)" placement="top-end">
@@ -1597,6 +1603,7 @@ export default {
       },
       form20:{
         levelDay: 7,
+        notStudyDays:7,
         aLevelMin: 80,
         aLevelMax: 100,
         bLevelMin: 40,

+ 7 - 0
src/views/system/config/config2.vue

@@ -1176,6 +1176,12 @@
              </el-tooltip>
            </el-form-item>
 
+           <el-form-item label="超过多少天的客户没看课评E级" prop="levelDay">
+             <el-tooltip class="item" effect="dark" content="超过多少天的客户没看课评E级,且不生成sop执行记录了,不发了" placement="top-end">
+               <el-input-number v-model="form20.notStudyDays" :min="7" :max="365"></el-input-number>
+             </el-tooltip>
+           </el-form-item>
+
            <!-- A级范围 -->
            <el-form-item label="A级范围(%)" prop="aLevelMin">
              <el-tooltip class="item" effect="dark" content="A级客户范围最小值(%)" placement="top-end">
@@ -1361,6 +1367,7 @@ export default {
       },
       form20:{
         levelDay: 7,
+        notStudyDays:7,
         aLevelMin: 80,
         aLevelMax: 100,
         bLevelMin: 40,

+ 13 - 0
src/views/system/role/index.vue

@@ -189,6 +189,18 @@
             >{{dict.dictLabel}}</el-radio>
           </el-radio-group>
         </el-form-item>
+        <el-form-item label="是否可以查看手机全号" >
+          <span slot="label">
+            <el-tooltip content="是否可以查看手机全号" placement="top">
+              <i class="el-icon-question"></i>
+            </el-tooltip>
+            号码权限
+          </span>
+          <el-radio-group v-model="form.isCheckPhone">
+            <el-radio :label=0>否</el-radio>
+            <el-radio :label=1>是</el-radio>
+          </el-radio-group>
+        </el-form-item>
         <el-form-item label="菜单权限">
           <el-checkbox v-model="menuExpand" @change="handleCheckedTreeExpand($event, 'menu')">展开/折叠</el-checkbox>
           <el-checkbox v-model="menuNodeAll" @change="handleCheckedTreeNodeAll($event, 'menu')">全选/全不选</el-checkbox>
@@ -454,6 +466,7 @@ export default {
         roleKey: undefined,
         roleSort: 0,
         status: "0",
+        isCheckPhone:0,
         menuIds: [],
         deptIds: [],
         menuCheckStrictly: true,