浏览代码

Merge branch 'master' of http://1.14.104.71:10880/root/ylrz_his_scrm_adminUI

ct 1 天之前
父节点
当前提交
5e4fbe6eb5

+ 2 - 2
.env.prod-bjyjb

@@ -1,7 +1,7 @@
 # 页面标题
-VUE_APP_TITLE =医健宝互联网医院管理系统
+VUE_APP_TITLE =医健宝医药管理系统
 # 首页菜单标题
-VUE_APP_TITLE_INDEX =医健宝互联网医院
+VUE_APP_TITLE_INDEX =医健宝医药
 # 公司名称
 VUE_APP_COMPANY_NAME =医健宝智慧(北京)医药科技有限公司
 # ICP备案号

+ 9 - 0
src/api/company/traffic.js

@@ -16,3 +16,12 @@ export function listTrafficRecords(query) {
   })
 }
 
+///trafficConversion
+export function trafficConversion(data) {
+  return request({
+    url: '/company/traffic/trafficConversion',
+    method: 'get',
+    params: data
+  })
+}
+

+ 3 - 2
src/api/course/coursePlaySourceConfig.js

@@ -38,9 +38,10 @@ export function del(id) {
   })
 }
 
-export function listAll() {
+export function listAll(companyId) {
   return request({
     url: '/course/playSourceConfig/listAll',
-    method: 'get'
+    method: 'get',
+    params: {companyId}
   })
 }

+ 2 - 2
src/api/hisStore/store.js

@@ -53,8 +53,8 @@ export function delStore(storeId) {
 
 export function refreshPasWod(storeId) {
   return request({
-    url: '/store/his/store/refresh'+ storeId,
-    method: 'get'
+    url: '/store/his/store/refresh/'+ storeId,
+    method: 'put'
   })
 }
 

+ 14 - 14
src/api/statistics/statistics.js

@@ -33,11 +33,11 @@ export function analysisPreview(param) {
  * @param query
  * @returns {AxiosPromise}
  */
-export function dealerAggregated() {
+export function dealerAggregated(param) {
   return request({
     url: '/index/statistics/dealerAggregated',
     method: 'get',
-    params: {}
+    params: param
   })
 }
 
@@ -45,22 +45,22 @@ export function dealerAggregated() {
  * 消费余额
  * @returns {AxiosPromise}
  */
-export function rechargeComsumption(){
+export function rechargeComsumption(param){
   return request({
     url: '/index/statistics/rechargeComsumption',
     method: 'get',
-    params: {}
+    params: param
   })
 }
 /**
  * 获取统计流量
  * @returns {AxiosPromise}
  */
-export function trafficLog(){
+export function trafficLog(param){
   return request({
     url: '/index/statistics/trafficLog',
     method: 'get',
-    params: {}
+    params: param
   })
 }
 
@@ -71,11 +71,11 @@ export function trafficLog(){
  * @param query
  * @returns {AxiosPromise}
  */
-export function smsBalance() {
+export function smsBalance(query) {
   return request({
     url: '/index/statistics/smsBalance',
     method: 'get',
-    params: {}
+    params: query
   })
 }
 
@@ -83,11 +83,11 @@ export function smsBalance() {
  * 授权信息
  * @returns {*}
  */
-export function authorizationInfo() {
+export function authorizationInfo(param) {
   return request({
     url: '/index/statistics/authorizationInfo',
     method: 'get',
-    params: {}
+    params: param
   })
 }
 
@@ -290,11 +290,11 @@ export function rewardMoneyTrend(param){
  * 获取当月订单数
  * @returns {*}
  */
-export function thisMonthOrderCount(){
+export function thisMonthOrderCount(param){
   return request({
     url: '/index/statistics/thisMonthOrderCount',
     method: 'get',
-    params: {}
+    params: param
   })
 }
 
@@ -302,10 +302,10 @@ export function thisMonthOrderCount(){
  * 获取当月收款数
  * @returns {*}
  */
-export function thisMonthRecvCount(){
+export function thisMonthRecvCount(param){
   return request({
     url: '/index/statistics/thisMonthRecvCount',
     method: 'get',
-    params: {}
+    params: param
   })
 }

+ 35 - 0
src/api/system/resourceManagement.js

@@ -0,0 +1,35 @@
+import request from '@/utils/request'
+
+// 查询部门资源
+export function getDeptResource(deptId) {
+  return request({
+    url: '/system/resourceM/getDeptResource/'+deptId,
+    method: 'get'
+  })
+}
+
+// 查询部门列表
+export function getCompanyResource(companyId) {
+  return request({
+    url: '/system/resourceM/getCompanyResource/'+companyId,
+    method: 'get'
+  })
+}
+
+//更新部门资源
+export function addOrEditDeptResource(data) {
+  return request({
+    url: '/system/resourceM/updateDeptResource',
+    method: 'put',
+    data: data
+  })
+}
+
+//更新公司资源
+export function addOrEditCompanyResource(data) {
+  return request({
+    url: '/system/resourceM/updateCompanyResource',
+    method: 'put',
+    data: data
+  })
+}

+ 8 - 2
src/store/modules/user.js

@@ -8,7 +8,9 @@ const user = {
     user:undefined,
     avatar: '',
     roles: [],
-    permissions: []
+    permissions: [],
+    isAdmin: false,
+    medicalMallConfig: {isMedicalMall: "0",statics: "0",isAudit:"0",isResource:"0"}
   },
 
   mutations: {
@@ -32,6 +34,9 @@ const user = {
     },
     SET_ISADMIN: (state, isAdmin) => {
       state.isAdmin = isAdmin
+    },
+    SET_MEDICALMALL: (state, medicalMallConfig) => {
+      state.medicalMallConfig = medicalMallConfig
     }
   },
 
@@ -69,13 +74,14 @@ const user = {
           commit('SET_AVATAR', avatar)
           commit('SET_USER', user)
           commit('SET_ISADMIN', res.isAdmin)
+          commit('SET_MEDICALMALL', res.medicalMallConfig)
           resolve(res)
         }).catch(error => {
           reject(error)
         })
       })
     },
-    
+
     // 退出系统
     LogOut({ commit, state }) {
       return new Promise((resolve, reject) => {

+ 42 - 9
src/views/company/companyTraffic/index.vue

@@ -126,7 +126,9 @@
             placeholder="请输入充值金额(元)"
             controls-position="right"
             style="width: 100%"
+            @input="chargeAmountInput"
           />
+          <span v-if="this.amountToTraffic" class="el-form-item__error"> 约充值 {{ this.amountToTraffic }}流量 </span>
         </el-form-item>
 
         <el-form-item label="备注" prop="remark">
@@ -149,7 +151,7 @@
 </template>
 
 <script>
-import { listTrafficRecords, rechargeTraffic } from "@/api/company/traffic";
+import { listTrafficRecords, rechargeTraffic, trafficConversion } from '@/api/company/traffic'
 import { allList } from '@/api/company/company'
 import { resetForm } from '@/utils/common'
 import { delAdIqiyiAccount } from '@/api/ad/AdIqiyiAccount'
@@ -158,6 +160,7 @@ export default {
   name: "CompanyTraffic",
   data() {
     return {
+      amountToTraffic: 0,
       // 遮罩层
       loading: true,
       // 选中数组
@@ -232,6 +235,35 @@ export default {
         this.loading = false;
       });
     },
+    /** 流量计算*/
+    chargeAmountInput() {
+      if(!this.rechargeForm.chargeAmount){
+        this.amountToTraffic = 0;
+        return;
+      }
+      trafficConversion({traffic:this.rechargeForm.chargeAmount}).then(
+        response => {
+          this.amountToTraffic = response.data;
+          //对流量值进行判断,换算成GB或TB
+          if(!this.amountToTraffic){
+            this.amountToTraffic =  "0 KB";
+          }
+          if(this.amountToTraffic < 1024){
+            this.amountToTraffic =  this.amountToTraffic + " KB";
+          }
+          else if(this.amountToTraffic < 1024 * 1024){
+            this.amountToTraffic = (this.amountToTraffic / 1024).toFixed(2) + " MB";
+          }
+          else if(this.amountToTraffic < 1024 * 1024 * 1024){
+            this.amountToTraffic = (this.amountToTraffic / (1024 * 1024)).toFixed(2) + " GB";
+          }
+          else{
+            this.amountToTraffic = (this.amountToTraffic / (1024 * 1024 * 1024)).toFixed(2) + " TB";
+          }
+        }
+      )
+    }
+    ,
     /** 搜索公司 */
     searchCompanies( query) {
       allList().then(response => {
@@ -263,19 +295,20 @@ export default {
     formatBalance(row){
       //对流量值进行判断,换算成GB或TB
       if(!row.balance){
-        return "0KB";
+        return "0 KB";
       }
-      if(row.balance < 1024){
-        return row.balance + "KB";
+      const absBalance = Math.abs(row.balance); // 获取绝对值
+      if(absBalance < 1024){
+        return row.balance + " KB";
       }
-      else if(row.balance < 1024 * 1024){
-        return (row.balance / 1024).toFixed(2) + "MB";
+      else if(absBalance < 1024 * 1024){
+        return (row.balance / 1024).toFixed(2) + " MB";
       }
-      else if(row.balance < 1024 * 1024 * 1024){
-        return (row.balance / (1024 * 1024)).toFixed(2) + "GB";
+      else if(absBalance < 1024 * 1024 * 1024){
+        return (row.balance / (1024 * 1024)).toFixed(2) + " GB";
       }
       else{
-        return (row.balance / (1024 * 1024 * 1024)).toFixed(2) + "TB";
+        return (row.balance / (1024 * 1024 * 1024)).toFixed(2) + " TB";
       }
     },
 

+ 42 - 9
src/views/company/companyTrafficLog/index.vue

@@ -6,18 +6,13 @@
         <el-select
           v-model="queryParams.companyIds"
           multiple
-          filterable
-          remote
-          reserve-keyword
           placeholder="请输入公司名称搜索"
-          :remote-method="searchCompanies"
-          :loading="companySearchLoading"
           style="width: 220px"
           clearable
           size="small"
         >
           <el-option
-            v-for="item in companyOptions"
+            v-for="item in formatterCompanyOptions"
             :key="item.dictValue"
             :label="item.dictLabel"
             :value="item.dictValue"
@@ -91,15 +86,15 @@
         </template>
       </el-table-column>
 
-      <el-table-column label="流量数量(KB)" align="center" prop="trafficAmount">
+      <el-table-column label="流量数量" align="center" prop="trafficAmount" >
         <template slot-scope="scope">
           <span :class="scope.row.operationType === 1 ? 'recharge' : 'deduction'">
-            {{ scope.row.operationType === 1 ? '+' : '-' }}{{ scope.row.trafficAmount }}
+            {{ scope.row.operationType === 1 ? '+' : '-' }}{{ formatTrafficAmount(scope.row)}}
           </span>
         </template>
       </el-table-column>
 
-      <el-table-column label="操作后余额(KB)" align="center" prop="balance" />
+      <el-table-column label="操作后余额" align="center" prop="balance" :formatter="formatBalance"/>
 
       <el-table-column label="操作人员" align="center" prop="userName" />
 
@@ -193,6 +188,44 @@ export default {
         this.loading = false;
       });
     },
+    formatBalance(row){
+      //对流量值进行判断,换算成GB或TB
+      if(!row.balance){
+        return "0 KB";
+      }
+      const absBalance = Math.abs(row.balance); // 获取绝对值
+      if(absBalance < 1024){
+        return row.balance + " KB";
+      }
+      else if(absBalance < 1024 * 1024){
+        return (row.balance / 1024).toFixed(2) + " MB";
+      }
+      else if(absBalance < 1024 * 1024 * 1024){
+        return (row.balance / (1024 * 1024)).toFixed(2) + " GB";
+      }
+      else{
+        return (row.balance / (1024 * 1024 * 1024)).toFixed(2) + " TB";
+      }
+    },
+    formatTrafficAmount(row){
+      //对流量值进行判断,换算成GB或TB
+      if(!row.trafficAmount){
+        return "0 KB";
+      }
+      const absBalance = Math.abs(row.trafficAmount); // 获取绝对值
+      if(absBalance < 1024){
+        return row.trafficAmount + " KB";
+      }
+      else if(absBalance < 1024 * 1024){
+        return (row.trafficAmount / 1024).toFixed(2) + " MB";
+      }
+      else if(absBalance < 1024 * 1024 * 1024){
+        return (row.trafficAmount / (1024 * 1024)).toFixed(2) + " GB";
+      }
+      else{
+        return (row.trafficAmount / (1024 * 1024 * 1024)).toFixed(2) + " TB";
+      }
+    },
 
     /** 搜索公司 */
     searchCompanies(query) {

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

@@ -460,6 +460,7 @@ export default {
           ...response.data,
           type: response.data.type.toString()
         }
+        this.searchCompanies("");
         this.open = true
         this.title = "修改小程序配置"
       })

+ 10 - 14
src/views/his/company/index.vue

@@ -118,9 +118,9 @@
       </el-table-column>
       <el-table-column label="管理员账号" align="center" prop="userName"/>
       <el-table-column label="限制用户数量" align="center" prop="limitUserCount"/>
-      <el-table-column label="限制pad数量" align="center" prop="maxPadNum" :formatter="padNumFormatter"/>
-      <el-table-column label="占用pad数量" align="center" prop="usedNum"/>
-      <el-table-column label="所属部门" align="center" prop="deptId">
+      <el-table-column label="限制pad数量" align="center" prop="maxPadNum" :formatter="padNumFormatter" v-if="this.$store.state.user.medicalMallConfig.isResource"/>
+      <el-table-column label="占用pad数量" align="center" prop="usedNum" v-if="this.$store.state.user.medicalMallConfig.isResource"/>
+      <el-table-column label="所属部门" align="center" prop="deptId" v-if="this.$store.state.user.medicalMallConfig.isResource">
         <template slot-scope="scope">
           <el-tag prop="deptId" v-for="(item, index) in deptOptions" :key="'deptId'+index"
                   v-if="scope.row.deptId===item.deptId"
@@ -212,7 +212,7 @@
           </el-select>
         </el-form-item>
         <!-- 所属部门 -->
-        <el-form-item label="所属部门" prop="deptId">
+        <el-form-item label="所属部门" prop="deptId" v-if="this.$store.state.user.medicalMallConfig.isResource">
           <el-select
             v-model="form.deptId"
             placeholder="请选择"
@@ -239,7 +239,7 @@
         <el-form-item label="员工数量" prop="limitUserCount">
           <el-input-number v-model="form.limitUserCount" :min="1" :max="10000"></el-input-number>
         </el-form-item>
-        <el-form-item label="pad数量" prop="maxPadNum">
+        <el-form-item label="pad数量" prop="maxPadNum" v-if="this.$store.state.user.medicalMallConfig.isResource">
           <el-input-number v-model="form.maxPadNum" :min="-1" :max="10000"></el-input-number>
           <span class="pad-tips">
             注:-1表示不做限制
@@ -419,9 +419,6 @@
             />
           </el-select>
         </el-form-item>
-        <el-form-item label="PAD分配数量" prop="maxPadNum">
-          <el-input-number v-model="form.maxPadNum" placeholder="默认-1不限制"/>
-        </el-form-item>
         <el-form-item label="备注" prop="remark">
           <el-input v-model="form.remark" type="textarea" :rows="2" placeholder="请输入备注"/>
         </el-form-item>
@@ -797,17 +794,17 @@ export default {
     /** 新增按钮操作 */
     handleAdd() {
       this.reset()
-      this.getAppList()
+      this.getAppList(null)
       this.open = true
       this.doctorIds = []
       this.title = '添加公司'
     },
     /** 修改按钮操作 */
     handleUpdate(row) {
+      const companyId = row.companyId || this.ids
       this.reset()
-      this.getAppList()
+      this.getAppList(companyId)
       this.doctorIds = []
-      const companyId = row.companyId || this.ids
       getCompany(companyId).then(response => {
         this.form = response.data
         this.form.usedNum = row.usedNum
@@ -830,12 +827,11 @@ export default {
         }
       })
     },
-    getAppList() {
+    getAppList(companyId) {
       this.maAppList = []
       this.miniAppList = []
       this.customAppList = []
-      const key = 'courseMa.config'
-      listAll(key).then(response => {
+      listAll().then(response => {
         const { code, data } = response
         if (code === 200) {
           if (data) {

+ 34 - 31
src/views/hisStore/components/storeDetails.vue

@@ -98,6 +98,7 @@
         <el-descriptions-item label="营业执照有效期" >
           <span v-if="item!=null">{{item.businessLicenseExpireStart}} - {{item.businessLicenseExpireEnd}}</span>
         </el-descriptions-item>
+        <div v-if="this.$store.state.user.medicalMallConfig.isMedicalMall">
         <el-descriptions-item label="药品经营许可证" >
           <el-image
             style="width: 100px"
@@ -158,6 +159,7 @@
         <el-descriptions-item label="药品许可证有效期" >
           <span v-if="item!=null">{{item.medicalLicenseExpiryStart}} - {{item.medicalLicenseExpiryEnd}}</span>
         </el-descriptions-item>
+        </div>
 
 
 
@@ -178,7 +180,7 @@
           <el-button type="primary" @click="handleUpdate(-1)">审核退回</el-button>
         </div>
       </div>
-      <div v-if="item.isAudit!==0" class="dialog">
+      <div v-if="item.isAudit!==0 && this.$store.state.user.medicalMallConfig.isMedicalMall" class="dialog">
         <el-divider content-position="left">审核记录</el-divider>
         <el-table :data="item.auditLogs" border >
           <el-table-column label="描述" align="center" prop="des" :show-overflow-tooltip="true" />
@@ -210,8 +212,8 @@
 <script>
 import { audit, getStore, getStoreAuditLog } from '@/api/hisStore/store'
 export default {
-  name: "user",
-  props:["data"],
+  name: 'user',
+  props:['data'],
   data() {
     return {
       showAudit: true,
@@ -221,27 +223,27 @@ export default {
       item:null,
       logoUrl:[],
       form: {
-        sreason: '',
+        sreason: ''
       },
       form1: {},
       rules1: {
         auditReason: [
-          { required: true, message: "审核理由不能为空", trigger: "blur" }
+          { required: true, message: '审核理由不能为空', trigger: 'blur' }
         ]
-      },
+      }
     }
   },
   created() {
-    this.getDicts("sys_company_status").then(response => {
-      this.statusOptions = response.data;
-    });
-    this.getDicts("sys_company_isaudit").then(response => {
-      this.isAuditOptions = response.data;
-    });
+    this.getDicts('sys_company_status').then(response => {
+      this.statusOptions = response.data
+    })
+    this.getDicts('sys_company_isaudit').then(response => {
+      this.isAuditOptions = response.data
+    })
   },
   destroyed() {
-    this.item = null;
-    this.form1 = {};
+    this.item = null
+    this.form1 = {}
   },
   methods: {
     getDetails(orderId,showAudit) {
@@ -251,24 +253,25 @@ export default {
       this.item = null
       Promise.all([getStore(orderId), getStoreAuditLog(orderId)])
         .then(([storeResponse, auditResponse]) => {
-          this.item = storeResponse.data;
+          this.item = storeResponse.data
           // 确保 item 不为 null 后再设置 auditLogs
-          this.$set(this.item, 'auditLogs', auditResponse.auditLog);
-        });
+          this.$set(this.item, 'auditLogs', auditResponse.auditLog)
+
+        })
     },
     handleUpdate(oper) {
-      let operStr = oper === 1 ? "审核通过" : "审核退回";
-      this.$confirm("是否确认"+operStr+"店铺?", "警告", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        type: "warning"
+      let operStr = oper === 1 ? '审核通过' : '审核退回'
+      this.$confirm('是否确认'+operStr+'店铺?', '警告', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
       }).then(()=> {
         let param = {}
-        param.storeId = this.item.storeId;
-        param.reason = this.form1.reason;
-        param.attachImage = this.form1.attachImage;
-        param.isAudit=oper;
-        return audit(param);
+        param.storeId = this.item.storeId
+        param.reason = this.form1.reason
+        param.attachImage = this.form1.attachImage
+        param.isAudit=oper
+        return audit(param)
       }).then(res => {
         if(res.code === 200){
           this.$message.success("审核成功");
@@ -280,10 +283,10 @@ export default {
       }).catch(function() {
 
       }).finally(()=>{
-        this.form1.auditReason = null;
-        this.form1.attachment = null;
-      });
-    },
+        this.form1.auditReason = null
+        this.form1.attachment = null
+      })
+    }
   }
 }
 </script>

+ 13 - 1
src/views/hisStore/store/audit.vue

@@ -116,7 +116,7 @@
 
       <el-table-column label="登录帐号" align="center" prop="account" width="150px" />
       <el-table-column label="创建时间" align="center" prop="createTime"  width="150px"/>
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" width="130px">
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" width="130px" v-if="this.$store.state.user.medicalMallConfig.isMedicalMall">
         <template slot-scope="scope">
           <el-button
             size="mini"
@@ -129,6 +129,18 @@
           </el-button>
         </template>
       </el-table-column>
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" width="130px" v-else>
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-s-promotion"
+            @click="handleUpdate(scope.row)"
+          >
+            <span>审核</span>
+          </el-button>
+        </template>
+      </el-table-column>
     </el-table>
 
     <pagination

+ 167 - 166
src/views/hisStore/store/index.vue

@@ -313,169 +313,170 @@
             </el-form-item>
           </el-col>
         </el-row>
-        <el-row>
-          <el-col :span="12">
-            <el-form-item label="药品经营许可证上传" prop="drugLicense">
-              <el-upload
-                class="avatar-uploader"
-                :action="uploadUrl"
-                :show-file-list="false"
-                :on-success="(response, file) => handleFileSuccess(response, file, 'drugLicense')"
-                :before-upload="beforeAvatarUpload">
-                <img v-if="form.drugLicense" :src="form.drugLicense" class="avatar" width="100px">
-                <i v-else class="el-icon-plus avatar-uploader-icon"></i>
-              </el-upload>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="药品经营许可证有效期" prop="drugLicenseExpiry">
-              <el-date-picker
-                v-model="form.drugLicenseExpiry"
-                type="daterange"
-                value-format="yyyy-MM-dd"
-                range-separator="至"
-                start-placeholder="开始日期"
-                end-placeholder="结束日期">
-              </el-date-picker>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12">
-            <el-form-item label="1类器械生产备案上传" prop="medicalDevice1">
-              <el-upload
-                class="avatar-uploader"
-                :action="uploadUrl"
-                :show-file-list="false"
-                :on-success="(response, file) => handleFileSuccess(response, file, 'medicalDevice1')"
-                :before-upload="beforeAvatarUpload">
-                <img v-if="form.medicalDevice1" :src="form.medicalDevice1" class="avatar" width="100px">
-                <i v-else class="el-icon-plus avatar-uploader-icon"></i>
-              </el-upload>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="1类生产备案有效期" prop="medicalDevice1Expiry">
-              <el-date-picker
-                v-model="form.medicalDevice1Expiry"
-                type="daterange"
-                value-format="yyyy-MM-dd"
-                range-separator="至"
-                start-placeholder="开始日期"
-                end-placeholder="结束日期">
-              </el-date-picker>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12">
-            <el-form-item label="2类医疗器械备案证书上传" prop="medicalDevice2">
-              <el-upload
-                class="avatar-uploader"
-                :action="uploadUrl"
-                :show-file-list="false"
-                :on-success="(response, file) => handleFileSuccess(response, file, 'medicalDevice2')"
-                :before-upload="beforeAvatarUpload">
-                <img v-if="form.medicalDevice2" :src="form.medicalDevice2" class="avatar" width="100px">
-                <i v-else class="el-icon-plus avatar-uploader-icon"></i>
-              </el-upload>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="2类医疗器械备案有效期" prop="medicalDevice2Expiry">
-              <el-date-picker
-                v-model="form.medicalDevice2Expiry"
-                type="daterange"
-                value-format="yyyy-MM-dd"
-                range-separator="至"
-                start-placeholder="开始日期"
-                end-placeholder="结束日期">
-              </el-date-picker>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12">
-            <el-form-item label="3类器械经营许可证上传" prop="medicalDevice3">
-              <el-upload
-                class="avatar-uploader"
-                :action="uploadUrl"
-                :show-file-list="false"
-                :on-success="(response, file) => handleFileSuccess(response, file, 'medicalDevice3')"
-                :before-upload="beforeAvatarUpload">
-                <img v-if="form.medicalDevice3" :src="form.medicalDevice3" class="avatar" width="100px">
-                <i v-else class="el-icon-plus avatar-uploader-icon"></i>
-              </el-upload>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="3类器械经营许可证有效期" prop="medicalDevice3Expiry">
-              <el-date-picker
-                v-model="form.medicalDevice3Expiry"
-                type="daterange"
-                value-format="yyyy-MM-dd"
-                range-separator="至"
-                start-placeholder="开始日期"
-                end-placeholder="结束日期">
-              </el-date-picker>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12">
-            <el-form-item label="食品经营许可证上传" prop="foodLicense">
-              <el-upload
-                class="avatar-uploader"
-                :action="uploadUrl"
-                :show-file-list="false"
-                :on-success="(response, file) => handleFileSuccess(response, file, 'foodLicense')"
-                :before-upload="beforeAvatarUpload">
-                <img v-if="form.foodLicense" :src="form.foodLicense" class="avatar" width="100px">
-                <i v-else class="el-icon-plus avatar-uploader-icon"></i>
-              </el-upload>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="食品经营许可证有效期" prop="foodLicenseExpiry">
-              <el-date-picker
-                v-model="form.foodLicenseExpiry"
-                type="daterange"
-                value-format="yyyy-MM-dd"
-                range-separator="至"
-                start-placeholder="开始日期"
-                end-placeholder="结束日期">
-              </el-date-picker>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12">
-            <el-form-item label="医疗机构执业许可证上传" prop="medicalLicense">
-              <el-upload
-                class="avatar-uploader"
-                :action="uploadUrl"
-                :show-file-list="false"
-                :on-success="(response, file) => handleFileSuccess(response, file, 'medicalLicense')"
-                :before-upload="beforeAvatarUpload">
-                <img v-if="form.medicalLicense" :src="form.medicalLicense" class="avatar" width="100px">
-                <i v-else class="el-icon-plus avatar-uploader-icon"></i>
-              </el-upload>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="医疗机构执业许可证有效期" prop="medicalLicenseExpiry">
-              <el-date-picker
-                v-model="form.medicalLicenseExpiry"
-                type="daterange"
-                value-format="yyyy-MM-dd"
-                range-separator="至"
-                start-placeholder="开始日期"
-                end-placeholder="结束日期">
-              </el-date-picker>
-            </el-form-item>
-          </el-col>
-        </el-row>
-
+        <div v-if="this.$store.state.user.medicalMallConfig.isMedicalMall">
+          <el-row>
+            <el-col :span="12">
+              <el-form-item label="药品经营许可证上传" prop="drugLicense">
+                <el-upload
+                  class="avatar-uploader"
+                  :action="uploadUrl"
+                  :show-file-list="false"
+                  :on-success="(response, file) => handleFileSuccess(response, file, 'drugLicense')"
+                  :before-upload="beforeAvatarUpload">
+                  <img v-if="form.drugLicense" :src="form.drugLicense" class="avatar" width="100px">
+                  <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+                </el-upload>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="药品经营许可证有效期" prop="drugLicenseExpiry">
+                <el-date-picker
+                  v-model="form.drugLicenseExpiry"
+                  type="daterange"
+                  value-format="yyyy-MM-dd"
+                  range-separator="至"
+                  start-placeholder="开始日期"
+                  end-placeholder="结束日期">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="12">
+              <el-form-item label="1类器械生产备案上传" prop="medicalDevice1">
+                <el-upload
+                  class="avatar-uploader"
+                  :action="uploadUrl"
+                  :show-file-list="false"
+                  :on-success="(response, file) => handleFileSuccess(response, file, 'medicalDevice1')"
+                  :before-upload="beforeAvatarUpload">
+                  <img v-if="form.medicalDevice1" :src="form.medicalDevice1" class="avatar" width="100px">
+                  <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+                </el-upload>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="1类生产备案有效期" prop="medicalDevice1Expiry">
+                <el-date-picker
+                  v-model="form.medicalDevice1Expiry"
+                  type="daterange"
+                  value-format="yyyy-MM-dd"
+                  range-separator="至"
+                  start-placeholder="开始日期"
+                  end-placeholder="结束日期">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="12">
+              <el-form-item label="2类医疗器械备案证书上传" prop="medicalDevice2">
+                <el-upload
+                  class="avatar-uploader"
+                  :action="uploadUrl"
+                  :show-file-list="false"
+                  :on-success="(response, file) => handleFileSuccess(response, file, 'medicalDevice2')"
+                  :before-upload="beforeAvatarUpload">
+                  <img v-if="form.medicalDevice2" :src="form.medicalDevice2" class="avatar" width="100px">
+                  <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+                </el-upload>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="2类医疗器械备案有效期" prop="medicalDevice2Expiry">
+                <el-date-picker
+                  v-model="form.medicalDevice2Expiry"
+                  type="daterange"
+                  value-format="yyyy-MM-dd"
+                  range-separator="至"
+                  start-placeholder="开始日期"
+                  end-placeholder="结束日期">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="12">
+              <el-form-item label="3类器械经营许可证上传" prop="medicalDevice3">
+                <el-upload
+                  class="avatar-uploader"
+                  :action="uploadUrl"
+                  :show-file-list="false"
+                  :on-success="(response, file) => handleFileSuccess(response, file, 'medicalDevice3')"
+                  :before-upload="beforeAvatarUpload">
+                  <img v-if="form.medicalDevice3" :src="form.medicalDevice3" class="avatar" width="100px">
+                  <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+                </el-upload>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="3类器械经营许可证有效期" prop="medicalDevice3Expiry">
+                <el-date-picker
+                  v-model="form.medicalDevice3Expiry"
+                  type="daterange"
+                  value-format="yyyy-MM-dd"
+                  range-separator="至"
+                  start-placeholder="开始日期"
+                  end-placeholder="结束日期">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="12">
+              <el-form-item label="食品经营许可证上传" prop="foodLicense">
+                <el-upload
+                  class="avatar-uploader"
+                  :action="uploadUrl"
+                  :show-file-list="false"
+                  :on-success="(response, file) => handleFileSuccess(response, file, 'foodLicense')"
+                  :before-upload="beforeAvatarUpload">
+                  <img v-if="form.foodLicense" :src="form.foodLicense" class="avatar" width="100px">
+                  <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+                </el-upload>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="食品经营许可证有效期" prop="foodLicenseExpiry">
+                <el-date-picker
+                  v-model="form.foodLicenseExpiry"
+                  type="daterange"
+                  value-format="yyyy-MM-dd"
+                  range-separator="至"
+                  start-placeholder="开始日期"
+                  end-placeholder="结束日期">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="12">
+              <el-form-item label="医疗机构执业许可证上传" prop="medicalLicense">
+                <el-upload
+                  class="avatar-uploader"
+                  :action="uploadUrl"
+                  :show-file-list="false"
+                  :on-success="(response, file) => handleFileSuccess(response, file, 'medicalLicense')"
+                  :before-upload="beforeAvatarUpload">
+                  <img v-if="form.medicalLicense" :src="form.medicalLicense" class="avatar" width="100px">
+                  <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+                </el-upload>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="医疗机构执业许可证有效期" prop="medicalLicenseExpiry">
+                <el-date-picker
+                  v-model="form.medicalLicenseExpiry"
+                  type="daterange"
+                  value-format="yyyy-MM-dd"
+                  range-separator="至"
+                  start-placeholder="开始日期"
+                  end-placeholder="结束日期">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </div>
 
         <el-divider content-position="left">店铺配置信息</el-divider>
         <el-form-item label="退货地址" prop="refundAddress">
@@ -551,7 +552,7 @@
           <el-input v-model="form.account" placeholder="请输入登录帐号" />
         </el-form-item>
         <!--        tips-->
-        <span class="tip-text" v-if="title !== '修改店铺管理'">请牢记登录账号,初试密码123456,请及时修改密码</span>
+        <span class="tip-text" v-if="title !== '修改店铺管理'">请及时修改密码,初试密码XyzAbc~12</span>
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" @click="submitForm">确 定</el-button>
@@ -1046,7 +1047,7 @@ export default {
     },
     handleRefresh(row) {
       const storeIds = row.storeId || this.ids;
-      this.$confirm('是否确认重置店铺管理编号为"' + storeIds + '"的密码为123456?', "警告", {
+      this.$confirm('是否确认重置店铺管理编号为"' + storeIds + '"的密码为XyzAbc~12 ', "警告", {
         confirmButtonText: "确定",
         cancelButtonText: "取消",
         type: "warning"
@@ -1054,7 +1055,7 @@ export default {
         return refreshPasWod(storeIds);
       }).then(() => {
         this.getList();
-        this.msgSuccess("删除成功");
+        this.msgSuccess("修改成功");
       }).catch(() => {
       });
     },

+ 2 - 2
src/views/hisStore/store/recommend.vue

@@ -92,7 +92,7 @@
       <el-table-column label="推荐店铺ID" align="center" prop="storeId" />
       <el-table-column label="推荐店铺名称" align="center" prop="storeName" />
       <el-table-column label="排序" align="center" prop="sortOrder" />
-      <el-table-column label="开始时间" align="center" prop="beginTime" width="180">
+<!--      <el-table-column label="开始时间" align="center" prop="beginTime" width="180">
         <template slot-scope="scope">
           <span>{{ parseTime(scope.row.beginTime) }}</span>
         </template>
@@ -101,7 +101,7 @@
         <template slot-scope="scope">
           <span>{{ parseTime(scope.row.endTime) }}</span>
         </template>
-      </el-table-column>
+      </el-table-column>-->
       <el-table-column label="状态" align="center" prop="status">
         <template slot-scope="scope">
           <dict-tag :options="statusOptions" :value="scope.row.status"/>

+ 11 - 2
src/views/hisStore/storeProduct/index.vue

@@ -57,6 +57,7 @@
           />
         </el-select>
       </el-form-item>
+      <div v-if="this.isMedicalMall">
       <el-form-item label="审核状态">
         <el-select style="width: 240px" v-model="queryParams.isAudit" placeholder="请选择审核状态" size="small" >
           <el-option value="0" label="待审核" key="isAudit0">待审核</el-option>
@@ -202,6 +203,7 @@
 
         />
       </el-form-item>
+      </div>
       <!-- <el-form-item label="状态" prop="isShow">
          <el-select style="width: 240px" v-model="queryParams.isShow" placeholder="请选择状态" clearable size="small" >
          <el-option
@@ -438,11 +440,11 @@
             </el-form-item>
           </el-col>
         </el-row>
-        <div v-if="form.isDrug === '1'">
+        <div v-if="form.isDrug === '1' ">
           <el-form-item label="药品展示图" prop="drugImage">
             <Material v-model="drugImageArr" type="image" :num="1" :width="150" :height="150" />
           </el-form-item>
-
+          <div v-if="this.isMedicalMall">
           <el-row>
             <el-col :span="12">
               <el-form-item label="药品注册证书编号" prop="drugRegCertNo">
@@ -528,6 +530,7 @@
             <el-input v-model="form.precautions" type="textarea" placeholder="请输入注意事项" />
           </el-form-item>
         </div>
+        </div>
         <el-row>
           <el-col :span="24">
             <el-form-item label="商品简介" prop="productInfo">
@@ -937,6 +940,7 @@ export default {
   },
   data() {
     return {
+      isMedicalMall: this.$store.state.user.medicalMallConfig.isMedicalMall,
       companyId: null,
       storeId: null,
       isAudit: null,
@@ -1164,6 +1168,11 @@ export default {
     });
     this.getDicts("store_product_type").then((response) => {
       this.productTypeOptions = response.data;
+      if(!this.isMedicalMall &&
+      this.productTypeOptions.length === 4){
+        //删除后两项
+        this.productTypeOptions.splice(2,2);
+      }
     });
     this.getDicts("store_product_is_show").then((response) => {
       this.isShowOptions = response.data;

+ 198 - 119
src/views/index.vue

@@ -59,7 +59,12 @@
               <div class="card-value highlight1">
                 <count-to :start-val="0" :end-val="padUsedNum" :duration="3600" class="card-panel-num companynumber" />
                 /
-                <count-to :start-val="0" :end-val="padTotalNum" :duration="1800" class="card-panel-num companynumber" />
+                <template v-if="typeof padTotalNum === 'number'">
+                  <count-to :start-val="0" :end-val="padTotalNum" :duration="1800" class="card-panel-num companynumber" />
+                </template>
+                <template v-else>
+                  <span class="card-panel-num companynumber">{{ padTotalNum }}</span>
+                </template>
               </div>
             </div>
           </div>
@@ -148,7 +153,7 @@
                   <count-to :start-val="0" :end-val="versionLimit" :duration="3600" class="card-panel-num" />
                 </span>
               </div>
-              <el-progress :percentage="todayWatchUserCount/versionLimit" :show-text="false"
+              <el-progress :percentage="versionLimitPercent" :show-text="false"
                            color="#409EFF"></el-progress>
             </div>
             <div class="operatetitle-card">
@@ -230,7 +235,7 @@
 
         <div class="action-group">
           <!-- 选择部门 -->
-          <el-select v-model="deptId" placeholder="请选择部门" size="small" @change="handleDeptChange" style="width: 100px">
+          <el-select v-model="deptId" placeholder="请选择部门" size="small" @change="handleDeptChange" style="width: 150px">
             <el-option
               v-for="company in deptOptions"
               :key="company.deptId"
@@ -877,9 +882,12 @@ export default {
   components: {CountTo},
   data() {
     return {
+      deptInitOptions:[],
       deptOptions:[],
-      deptId:this.$store.state.user.deptId,
-      companyInitOptions:[],
+      intiDeptId:this.$store.state.user.user.deptId,
+      deptId:this.$store.state.user.user.deptId,
+      staticParam : {companyId:null,deptId:this.$store.state.user.user.deptId},
+      companyIntiOptions:[],
       companyOptions:[],
       companyId:null,
       percentage: 0,
@@ -938,6 +946,7 @@ export default {
       queryTime: '今日',
       todayWatchUserCount: 0,
       versionLimit: 0,
+      versionLimitPercent : 0.0,
       /// 选中的分析概览
       selectedDiv: 0,
       filterType: 0,
@@ -983,32 +992,77 @@ export default {
   created() {
     this.refresh();
     listDept().then(res => {
-      this.deptOptions = res.data;
-    });
-    listCompany().then(res => {
-      this.companyIntiOptions = res.rows;
-      this.companyOptions = this.companyIntiOptions.filter(item => item.deptId === this.deptId);
+      this.deptInitOptions = res.data;
+      listCompany().then(res => {
+        this.companyIntiOptions = res.rows;
+        this.getDeptOptions(this.intiDeptId);
+        this.getCompanyOptions(this.intiDeptId);
+      });
     });
   },
   methods: {
-    //首页统计选择部门、销售公司
-    handleDeptChange(){
-        this.companyOptions = this.companyIntiOptions.filter(item => item.deptId === this.deptId);
-        this.companyId = null;
-        this.refresh();
+    getDeptOptions(deptId) {
+      const deptInitOptions = this.deptInitOptions;
+      // 部门本身节点
+      let deptNode = deptInitOptions.filter(item => item.deptId === deptId);
+
+      // 递归查找所有子节点
+      function findChildren(parentId) {
+        //部门的子部门
+        let deptChildren = deptInitOptions.filter(item => item.parentId === parentId);
+        //添加子部门
+        deptChildren.forEach(child => {
+          deptNode.push(child);
+          findChildren(child.deptId); // 递归查找子节点的子节点
+        });
+      }
+
+      // 从目标节点开始查找子节点
+      findChildren(deptId);
+      this.deptOptions = deptNode;
     },
-    handleCompanyChange(){
-      if(this.companyId){
-        this.deptId = this.companyOptions.filter(item => item.companyId === this.companyId)[0].deptId;
-        this.refresh();
-      }else{
-        this.refresh();
+    getCompanyOptions(deptId) {
+      this.companyId = null;
+      //修改选择后清空查询参数
+      this.staticParam.companyId = null;
+      this.staticParam.deptId = deptId;
+      const deptInitOptions = this.deptInitOptions;
+      const companyInitOptions = this.companyIntiOptions;
+      // 部门下的公司
+      let companyNode = companyInitOptions.filter(item => item.deptId === deptId);
+
+      // 递归查找所有子节点
+      function findChildren(parentId) {
+        //部门的子部门
+        let deptChildren = deptInitOptions.filter(item => item.parentId === parentId);
+        //添加子部门
+        deptChildren.forEach(child => {
+          //子部门下的销售公司
+          let companyChildren = companyInitOptions.filter(item => item.deptId === child.deptId);
+          companyChildren.forEach(companyChild => {
+            companyNode.push(companyChild);
+          })
+          findChildren(child.deptId); // 递归查找子节点的子节点
+        });
       }
+
+      // 从目标节点开始查找子节点
+      findChildren(deptId);
+      this.companyOptions = companyNode;
+    },
+    //首页统计选择部门、销售公司
+    handleDeptChange() {
+      this.getCompanyOptions(this.deptId);
+      this.refresh();
     },
-    handleUserType(){
-      if(this.userTypeText === '会员'){
+    handleCompanyChange() {
+      this.staticParam.companyId = this.companyId;
+      this.refresh();
+    },
+    handleUserType() {
+      if (this.userTypeText === '会员') {
         this.userType = 1
-      }else{
+      } else {
         this.userType = 2
       }
 
@@ -1080,11 +1134,15 @@ export default {
       const sizes = ['Byte', 'KB', 'MB', 'GB', 'TB'];
 
       // 计算合适的单位级别
-      const i = Math.floor(Math.log(bytes) / Math.log(k));
+      let i = Math.floor(Math.log(bytes) / Math.log(k));
 
       // 转换为对应单位的值
       const value = bytes / Math.pow(k, i);
 
+
+      if(this.deptId !== 1 ||  this.companyId !== null){
+        i += 1;
+      }
       // 格式化为指定小数位的字符串
       const result = parseFloat(value.toFixed(decimals)) + ' ' + sizes[Math.min(i, sizes.length - 1)];
 
@@ -1118,43 +1176,49 @@ export default {
       }
     },
     refresh() {
-      rechargeComsumption().then(res=>{
-        if(res.code === 200){
+      rechargeComsumption(this.staticParam).then(res => {
+        if (res.code === 200) {
           this.balance = res.data.balance;
           this.todayComsumption = res.data.todayComsumption;
           this.yesterdayComsumption = res.data.yesterdayComsumption;
-          let calculateRemainingDays1 = this.calculateRemainingDays(this.balance,this.todayComsumption,this.yesterdayComsumption);
+          let calculateRemainingDays1 = this.calculateRemainingDays(this.balance, this.todayComsumption, this.yesterdayComsumption);
           this.percentage = calculateRemainingDays1.percentage;
           this.remainMessage = calculateRemainingDays1.message;
         }
       });
 
-      trafficLog().then(res=>{
-        if(res.code === 200) {
+      trafficLog(this.staticParam).then(res => {
+        if (res.code === 200) {
           this.todayTraffic = res.data.today;
           this.thisMonthTraffic = res.data.thisMonth;
           this.trafficCount = res.data.traffic;
         }
       })
 
-      dealerAggregated().then(res=>{
-        if(res.code === 200){
-          this.dealderCount = res.data.dealderCount??0;
-          this.groupMgrCount = res.data.groupMgrCount??0;
-          this.memberCount = res.data.memberCount??0;
-          this.qwMemberNum = res.data.qwMemberNum??0;
-          this.padTotalNum = res.data.padTotalNum??0;
-          this.padUsedNum = res.data.padUsedNum??0;
+      dealerAggregated(this.staticParam).then(res => {
+        if (res.code === 200) {
+          this.dealderCount = res.data.dealderCount ?? 0;
+          this.groupMgrCount = res.data.groupMgrCount ?? 0;
+          this.memberCount = res.data.memberCount ?? 0;
+          this.qwMemberNum = res.data.qwMemberNum ?? 0;
+          const totalNum = res.data.padTotalNum;
+          //-1 不限 null 未设置
+          if(totalNum != null && totalNum !== -1 && totalNum > 0){
+            this.padTotalNum = totalNum;
+          }else{
+            this.padTotalNum = '不限';
+          }
+          this.padUsedNum = res.data.padUsedNum ?? 0;
           this.padInfo = res.data.padInfo;
-          this.normalNum = res.data.normalNum??0;
-          this.blackNum = res.data.blackNum??0;
-          this.todayIncreaseUserNum = res.data.todayIncreaseUserNum??0;
-          this.orderTotalNum = res.data.orderTotalNum??0;
-          this.todayOrderNum = res.data.todayOrderNum??0;
-          this.recvTotalNum = res.data.recvTotalNum??0;
-          this.recvTodayNum = res.data.recvTodayNum??0;
-          this.goodsTotalNum = res.data.goodsTotalNum??0;
-          this.todayGoodsNum = res.data.todayGoodsNum??0;
+          this.normalNum = res.data.normalNum ?? 0;
+          this.blackNum = res.data.blackNum ?? 0;
+          this.todayIncreaseUserNum = res.data.todayIncreaseUserNum ?? 0;
+          this.orderTotalNum = res.data.orderTotalNum ?? 0;
+          this.todayOrderNum = res.data.todayOrderNum ?? 0;
+          this.recvTotalNum = res.data.recvTotalNum ?? 0;
+          this.recvTodayNum = res.data.recvTodayNum ?? 0;
+          this.goodsTotalNum = res.data.goodsTotalNum ?? 0;
+          this.todayGoodsNum = res.data.todayGoodsNum ?? 0;
         }
       })
       let param = this.getParam();
@@ -1163,8 +1227,8 @@ export default {
       const today = dayjs();
       param.startTime = this.formatDate(today);
       param.endTime = this.formatDate(today);
-      analysisPreview(param).then(res=>{
-        if(res.code === 200){
+      analysisPreview(param).then(res => {
+        if (res.code === 200) {
           this.watchUserCount = res.data.watchUserCount;
           this.completedUserCount = res.data.completedUserCount;
           this.completedRate = res.data.completedRate;
@@ -1178,19 +1242,22 @@ export default {
           this.watchRate = res.data.watchRate;
         }
       })
-      smsBalance().then(res=>{
-        if(res.code === 200){
-          if(res.data == null) {
+      smsBalance(this.staticParam).then(res => {
+        if (res.code === 200) {
+          if (res.data == null) {
             this.smsRemainCount = 0;
           } else {
             this.smsRemainCount = res.data;
           }
         }
       })
-      authorizationInfo().then(res=>{
-        if(res.code === 200){
+      authorizationInfo(this.staticParam).then(res => {
+        if (res.code === 200 && res.data != null) {
           this.todayWatchUserCount = res.data.todayWatchUserCount;
           this.versionLimit = res.data.versionLimit;
+          if(this.versionLimit){
+            this.versionLimitPercent = this.todayWatchUserCount/this.versionLimit;
+          }
         }
       })
 
@@ -1243,8 +1310,7 @@ export default {
           } else {
           }
         });
-      }
-      else if (selected === 0) {
+      } else if (selected === 0) {
         this.$nextTick(() => {
           if (this.viewerChart) this.viewerChart.resize();
           if (this.dealerChart) this.dealerChart.resize();
@@ -1269,11 +1335,13 @@ export default {
       return dayjs(date).format('YYYY-MM-DD');
     },
 
-    getParam(){
+    getParam() {
       let param = {
         startTime: '',
         endTime: '',
-        userType: this.userType
+        userType: this.userType,
+        companyId: this.companyId,
+        deptId: this.deptId
       };
       // 获取当前日期时间
       const today = dayjs();
@@ -1340,18 +1408,18 @@ export default {
         this.handleAnswerRedPackMoneyViewerChart()
       }
     },
-    handleAnswerRedPackViewerChart(){
+    handleAnswerRedPackViewerChart() {
       let param = this.getParam();
-      param = {...param,statisticalType:this.viewerType,dataType: this.dataType};
-      rewardMoneyTopTen(param).then(res=>{
-        if(res.code === 200){
+      param = { ...param, statisticalType: this.viewerType, dataType: this.dataType };
+      rewardMoneyTopTen(param).then(res => {
+        if (res.code === 200) {
           let data = res.data;
-          let companyNameList = data.map(e=>e.companyName)
-          let courseNameList = data.map(e=>e.courseName)
-          let rewardMoneyList = data.map(e=>e.rewardMoney)
-          if(this.dataType === '0'){
+          let companyNameList = data.map(e => e.companyName)
+          let courseNameList = data.map(e => e.courseName)
+          let rewardMoneyList = data.map(e => e.rewardMoney)
+          if (this.dataType === '0') {
             redPackageOption.xAxis.data = companyNameList;
-          }else{
+          } else {
             redPackageOption.xAxis.data = courseNameList;
           }
           redPackageOption.series[0].data = rewardMoneyList;
@@ -1360,13 +1428,13 @@ export default {
         }
       })
     },
-    handleAnswerRedPackMoneyViewerChart(){
+    handleAnswerRedPackMoneyViewerChart() {
       let param = this.getParam();
-      param = {...param,statisticalType:this.viewerType,dataType: this.dataType};
-      rewardMoneyTrend(param).then(res=>{
-        if(res.code === 200){
+      param = { ...param, statisticalType: this.viewerType, dataType: this.dataType };
+      rewardMoneyTrend(param).then(res => {
+        if (res.code === 200) {
           let data = res.data;
-          let option = data.map(e=>[e.x,e.rewardMoney])
+          let option = data.map(e => [e.x, e.rewardMoney])
           lineChartOption.series[0].data = option;
 
           this.answerRedPackMoneyViewerChart.setOption(lineChartOption)
@@ -1375,15 +1443,15 @@ export default {
     },
     handleCourseWatchChart() {
       let param = this.getParam();
-      param = {...param,statisticalType:this.viewerType};
-      watchCourseTopTen(param).then(res=>{
-        if(res.code === 200){
+      param = { ...param, statisticalType: this.viewerType };
+      watchCourseTopTen(param).then(res => {
+        if (res.code === 200) {
           let data = res.data;
-          let watchUserCountList = data.map(e=>e.watchUserCount);
-          let completedUserCountList = data.map(e=>e.completedUserCount);
-          let answerUserCountList = data.map(e=>e.answerUserCount);
-          let correctUserCountList = data.map(e=>e.correctUserCount);
-          let courseNameList = data.map(e=>e.courseName);
+          let watchUserCountList = data.map(e => e.watchUserCount);
+          let completedUserCountList = data.map(e => e.completedUserCount);
+          let answerUserCountList = data.map(e => e.answerUserCount);
+          let correctUserCountList = data.map(e => e.correctUserCount);
+          let courseNameList = data.map(e => e.courseName);
           courseWatchOption.xAxis.data = courseNameList;
           courseWatchOption.series[0].data = watchUserCountList;
           courseWatchOption.series[1].data = completedUserCountList;
@@ -1393,15 +1461,15 @@ export default {
         }
       })
     },
-    handleDealerChartData(){
+    handleDealerChartData() {
       let param = this.getParam();
 
       // 经销商会员观看TOP10
-      deaMemberTopTen({...param,statisticalType: this.viewerType}).then(res=>{
-        if(res.code === 200){
+      deaMemberTopTen({ ...param, statisticalType: this.viewerType }).then(res => {
+        if (res.code === 200) {
           let data = res.data;
-          let companyNameList = data.map(e=>e.companyName);
-          let watchUserList = data.map(e=>e.watchUserCount);
+          let companyNameList = data.map(e => e.companyName);
+          let watchUserList = data.map(e => e.watchUserCount);
           dealerOption.yAxis.data = companyNameList;
           dealerOption.series[0].data = watchUserList;
 
@@ -1410,9 +1478,9 @@ export default {
       })
 
     },
-    handleThisMonthOrderCount(){
-      thisMonthOrderCount().then(res=>{
-        if(res.code === 200){
+    handleThisMonthOrderCount() {
+      thisMonthOrderCount(this.staticParam).then(res => {
+        if (res.code === 200) {
           let dates = res.dates;
           let orderCount = res.orderCount;
           let payPrice = res.payPrice;
@@ -1425,9 +1493,9 @@ export default {
         }
       })
     },
-    handleThisMonthRecvCount(){
-      thisMonthRecvCount().then(res=>{
-        if(res.code === 200){
+    handleThisMonthRecvCount() {
+      thisMonthRecvCount(this.staticParam).then(res => {
+        if (res.code === 200) {
           let dates = res.dates;
           let orderCount = res.orderCount;
           let payMoney = res.payMoney;
@@ -1439,15 +1507,15 @@ export default {
         }
       })
     },
-    handleViewChartData(){
+    handleViewChartData() {
       let param = this.getParam();
 
-      watchEndPlayTrend({...param}).then(res=>{
-        if(res.code === 200){
+      watchEndPlayTrend({ ...param }).then(res => {
+        if (res.code === 200) {
           let data = res.data;
-          let watchUserCountList = data.map(e=>e.watchUserCount);
-          let completedUserCountList = data.map(e=>e.completedUserCount);
-          let xAxis = data.map(e=>e.x);
+          let watchUserCountList = data.map(e => e.watchUserCount);
+          let completedUserCountList = data.map(e => e.completedUserCount);
+          let xAxis = data.map(e => e.x);
           viewCharOption.series[0].data = watchUserCountList;
           viewCharOption.series[1].data = completedUserCountList;
           viewCharOption.xAxis.data = xAxis;
@@ -1457,11 +1525,11 @@ export default {
       })
 
     },
-    initThisMonthOrderChart(){
+    initThisMonthOrderChart() {
       this.thisMonthOrderChart = echarts.init(this.$refs.viewerOrderChart)
       this.thisMonthOrderChart.setOption(thisMonthOrderCountOption)
     },
-    initThisMonthRecvChart(){
+    initThisMonthRecvChart() {
       this.thisMonthRecvChart = echarts.init(this.$refs.viewerReceiveChart)
       this.thisMonthRecvChart.setOption(thisMonthOrderCountOption)
     },
@@ -1479,12 +1547,12 @@ export default {
 
       this.courseWatchChart.setOption(courseWatchOption)
     },
-    initAnswerRedPackViewerChart(){
+    initAnswerRedPackViewerChart() {
       this.answerRedPackViewerChart = echarts.init(this.$refs.answerRedPackViewerChart)
 
       this.answerRedPackViewerChart.setOption(redPackageOption)
     },
-    initAnswerRedPackMoneyViewerChart(){
+    initAnswerRedPackMoneyViewerChart() {
       this.answerRedPackMoneyViewerChart = echarts.init(this.$refs.answerRedPackMoneyViewerChart)
 
       this.answerRedPackMoneyViewerChart.setOption(lineChartOption)
@@ -1518,7 +1586,7 @@ export default {
   transform: scale(.9);
 }
 
-.action-group .el-button+.el-button,
+.action-group .el-button + .el-button,
 .action-group .el-dropdown {
   margin-left: 10px;
 }
@@ -1848,7 +1916,6 @@ export default {
 }
 
 
-
 .companynumber {
   color: white;
 }
@@ -1882,8 +1949,6 @@ export default {
 }
 
 
-
-
 .propertyboxtitle {
   background-image: url(../assets/images/zcgl_bg.png);
   height: 100px;
@@ -1946,11 +2011,12 @@ export default {
   line-height: 50px;
 }
 
-.operatetitle-col{
+.operatetitle-col {
   display: flex;
   justify-content: space-between;
   padding-bottom: 20px;
   padding-right: 5px;
+
   .operatetitle-card {
     width: 24%;
     border: 1px solid transparent;
@@ -1981,6 +2047,7 @@ export default {
   border-radius: 6px;
   padding: 2px 5px 15px 5px;
   width: 100%;
+
   .internet-cardtop {
     background-color: white;
     border-radius: 3px;
@@ -2024,28 +2091,33 @@ export default {
 
   }
 
-  .internetbox-messge{
+  .internetbox-messge {
     color: white;
     display: flex;
     justify-content: space-between;
     padding: 15px 10px 10px 10px;
-    .internet-card{
+
+    .internet-card {
       display: flex;
       font-size: 14px;
       align-items: center;
-      img{
+
+      img {
         height: 18px;
         width: 18px;
       }
-      span{
+
+      span {
         padding-left: 5px;
       }
     }
-    .internet-number{
+
+    .internet-number {
       font-size: 25px;
 
     }
   }
+
   .internetbox {
     display: flex;
     color: white;
@@ -2065,9 +2137,10 @@ export default {
 }
 
 .company {
-  background-color: 006CFF;
+  background-color: #006CFF;
 }
-.highlight-red{
+
+.highlight-red {
   text-align: center;
   margin-top: 1em;
   font-family: BebasNeue;
@@ -2077,7 +2150,8 @@ export default {
   font-weight: 600;
   margin-top: 8px;
 }
-.highlight-black{
+
+.highlight-black {
   text-align: center;
   margin-top: 1em;
   font-family: BebasNeue;
@@ -2088,26 +2162,31 @@ export default {
   margin-top: 8px;
 
 }
-.operatetitle-card:hover{
+
+.operatetitle-card:hover {
   border: 1px solid #4592ff;
   background-color: #e7f1ff;
 }
-.icon-img{
+
+.icon-img {
   height: 14px;
   width: 14px;
 }
-.progress{
+
+.progress {
   transform: rotate(180deg);
   margin-top: 20px;
 }
-.progress ::v-deep .el-progress-bar__outer{
+
+.progress ::v-deep .el-progress-bar__outer {
   background-color: rgba(247, 152, 11, 0.2);
 }
+
 ::v-deep .el-progress {
 
   .el-progress-bar {
     .el-progress-bar__inner {
-      background: linear-gradient(to right, #FF6300,#FF9F01)
+      background: linear-gradient(to right, #FF6300, #FF9F01)
     }
   }
 }

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

@@ -2,7 +2,7 @@
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px" style="border: 1px solid transparent">
       <el-form-item label="销售公司" prop="companyId">
-        <el-select v-model="queryParams.companyId" placeholder="销售公司"  size="small" @change="getAllUserlist(queryParams.companyId)" clearable>
+        <el-select v-model="queryParams.companyId" placeholder="销售公司"  size="small" @change="getAllUserlist(queryParams.companyId)">
           <el-option
               v-for="dict in qwCompanyList"
               :key="dict.companyId"

+ 25 - 0
src/views/qw/qwCompany/index.vue

@@ -223,6 +223,7 @@
 <script>
 import { listQwCompany, getQwCompany, delQwCompany, addQwCompany, updateQwCompany, exportQwCompany } from "@/api/qw/qwCompany";
 import { getCompanyList } from "@/api/company/company";
+import { listAll } from '@/api/course/coursePlaySourceConfig'
 export default {
   name: "QwCompany",
   watch: {
@@ -288,6 +289,9 @@ export default {
       // 表单参数
       form: {},
       companys:[],
+      maAppList:[],
+      miniAppList:[],
+      customAppList:[],
       // 表单校验
       rules: {
         corpId: [{ required: true, message: '请输入企业CorpID', trigger: 'blur' }],
@@ -358,6 +362,27 @@ export default {
       this.resetForm("queryForm");
       this.handleQuery();
     },
+    getAppList() {
+      this.maAppList = []
+      this.miniAppList = []
+      this.customAppList = []
+      listAll().then(response => {
+        const { code, data } = response
+        if (code === 200) {
+          if (data) {
+            this.maAppList = data.filter(v => v.type == 2).map(v => {
+              return { appId: v.appid, appName: v.name }
+            })
+            this.miniAppList = data.filter(v => v.type == 1).map(v => {
+              return { appId: v.appid, appName: v.name }
+            })
+            this.customAppList = data.filter(v => v.type == 3).map(v => {
+              return { appId: v.appid, appName: v.name }
+            })
+          }
+        }
+      })
+    },
     // 多选框选中数据
     handleSelectionChange(selection) {
       this.ids = selection.map(item => item.id)

文件差异内容过多而无法显示
+ 542 - 508
src/views/system/config/config.vue


+ 164 - 0
src/views/system/dept/index.vue

@@ -64,6 +64,9 @@
           <dict-tag :options="statusOptions" :value="scope.row.status"/>
         </template>
       </el-table-column>
+      <el-table-column prop="red" label="红包配额" width="200" v-if="this.isResource"></el-table-column>
+      <el-table-column prop="traffic" label="流量配额" width="200" v-if="this.isResource"></el-table-column>
+      <el-table-column prop="pad" label="坐席配额" width="200" v-if="this.isResource"></el-table-column>
       <el-table-column label="创建时间" align="center" prop="createTime" width="200">
         <template slot-scope="scope">
           <span>{{ parseTime(scope.row.createTime) }}</span>
@@ -78,6 +81,14 @@
             @click="handleUpdate(scope.row)"
             v-hasPermi="['system:dept:edit']"
           >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdateResource(scope.row)"
+            v-hasPermi="['system:dept:resource']"
+            v-if="scope.row.deptId !== 1"
+          >资源配置</el-button>
           <el-button
             size="mini"
             type="text"
@@ -96,6 +107,90 @@
         </template>
       </el-table-column>
     </el-table>
+    <!-- 资源配置对话框 -->
+    <el-dialog title="部门资源配置" :visible.sync="openResource" width="600px" append-to-body>
+      <el-form ref="resourceForm" :model="resourceForm" :rules="resourceRules" label-width="80px">
+        <el-form-item label="部门名称">
+          <el-input v-model="this.targetDeptName"  disabled/>
+        </el-form-item>
+        <el-row :gutter="10">
+          <el-col :span="8">
+            <el-form-item label="红包配额" prop="red" >
+              <el-input-number v-model="resourceForm.red" controls-position="right" disabled/>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="充值配额" prop="pad" >
+              <el-input-number v-model="resourceForm.redCharge" controls-position="right" :min=0 />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <!-- 有效时间 时间选择器-->
+            <el-form-item label="有效时间" prop="redEffectiveTime" >
+              <el-date-picker
+                v-model="resourceForm.redEffectiveTime"
+                type="date"
+                placeholder="选择日期"
+                value-format="yyyy-MM-dd"
+                style="width: 100%;"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="10">
+          <el-col :span="8">
+            <el-form-item label="流量配额" prop="traffic" >
+              <el-input-number v-model="resourceForm.traffic" controls-position="right" disabled/>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="充值配额" prop="trafficCharge" >
+              <el-input-number v-model="resourceForm.trafficCharge" controls-position="right" :min=0 />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <!-- 有效时间 时间选择器-->
+            <el-form-item label="有效时间" prop="trafficEffectiveTime" >
+              <el-date-picker
+                v-model="resourceForm.trafficEffectiveTime"
+                type="date"
+                placeholder="选择日期"
+                value-format="yyyy-MM-dd"
+                style="width: 100%;"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="10">
+          <el-col :span="8">
+            <el-form-item label="坐席配额" prop="pad" >
+              <el-input-number v-model="resourceForm.pad" controls-position="right" disabled/>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="充值配额" prop="padCharge" >
+              <el-input-number v-model="resourceForm.padCharge" controls-position="right" :min=0 />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <!-- 有效时间 时间选择器-->
+            <el-form-item label="有效时间" prop="padEffectiveTime" >
+              <el-date-picker
+                v-model="resourceForm.padEffectiveTime"
+                type="date"
+                placeholder="选择日期"
+                value-format="yyyy-MM-dd"
+                style="width: 100%;"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitResourceForm">确 定</el-button>
+        <el-button @click="cancelResource">取 消</el-button>
+      </div>
+    </el-dialog>
 
     <!-- 添加或修改部门对话框 -->
     <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
@@ -156,6 +251,7 @@
 import { listDept, getDept, delDept, addDept, updateDept, listDeptExcludeChild } from "@/api/system/dept";
 import Treeselect from "@riophae/vue-treeselect";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import { addOrEditDeptResource, getDeptResource } from '@/api/system/resourceManagement'
 
 export default {
   name: "Dept",
@@ -174,6 +270,10 @@ export default {
       title: "",
       // 是否显示弹出层
       open: false,
+      // 是否显示资源弹出层
+      openResource: false,
+      // 操作的部门名称
+      targetDeptName: "",
       // 是否展开,默认全部展开
       isExpandAll: true,
       // 重新渲染表格状态
@@ -189,6 +289,8 @@ export default {
       },
       // 表单参数
       form: {},
+      // 资源配置参数
+      resourceForm: {},
       // 表单校验
       rules: {
         parentId: [
@@ -214,6 +316,18 @@ export default {
             trigger: "blur"
           }
         ]
+      },
+      // 资源表单参数
+      resourceRules: {
+        red: [
+          { required: true, message: "红包配额不能为空", trigger: "blur" }
+        ],
+        traffic: [
+          { required: true, message: "流量配额不能为空", trigger: "blur" }
+        ],
+        pad: [
+          { required: true, message: "坐席配额不能为空", trigger: "blur" }
+        ]
       }
     };
   },
@@ -223,6 +337,11 @@ export default {
       this.statusOptions = response.data;
     });
   },
+  computed: {
+    isResource() {
+      return this.$store.state.user.medicalMallConfig?.isResource === '1' || false;
+    }
+  },
   methods: {
     /** 查询部门列表 */
     getList() {
@@ -248,6 +367,11 @@ export default {
       this.open = false;
       this.reset();
     },
+    // 资源配置取消按钮
+    cancelResource() {
+      this.openResource = false;
+      this.resetResource();
+    },
     // 表单重置
     reset() {
       this.form = {
@@ -262,6 +386,22 @@ export default {
       };
       this.resetForm("form");
     },
+    // 表单重置
+    resetResource() {
+      this.resourceForm = {
+        id: undefined,
+        red: undefined,
+        redCharge: undefined,
+        redEffectiveTime: undefined,
+        pad: undefined,
+        padCharge: undefined,
+        padEffectiveTime: undefined,
+        traffic: undefined,
+        trafficCharge: undefined,
+        trafficEffectiveTime: undefined
+      };
+      this.resetForm("resourceForm");
+    },
     /** 搜索按钮操作 */
     handleQuery() {
       this.getList();
@@ -303,6 +443,14 @@ export default {
 	        this.deptOptions = this.handleTree(response.data, "deptId");
       });
     },
+    /** 修改按钮操作 */
+    handleUpdateResource(row) {
+      this.resetResource();
+      getDeptResource(row.deptId).then(response => {
+        this.resourceForm = response.data;
+        this.openResource = true;
+      });
+    },
     /** 提交按钮 */
     submitForm: function() {
       this.$refs["form"].validate(valid => {
@@ -323,6 +471,22 @@ export default {
         }
       });
     },
+    /** 资源配置提交*/
+    submitResourceForm: function() {
+      this.$refs["resourceForm"].validate(valid => {
+        if (valid) {
+          addOrEditDeptResource(this.resourceForm).then(response => {
+            if(response.code === 200 && response.data === true){
+              this.msgSuccess("修改成功");
+              this.openResource = false;
+              this.getList();
+            }else{
+              this.msgError(response.msg);
+            }
+          });
+        }
+      });
+    },
     /** 删除按钮操作 */
     handleDelete(row) {
       this.$confirm('是否确认删除名称为"' + row.deptName + '"的数据项?', "警告", {

部分文件因为文件数量过多而无法显示