Bläddra i källkod

医健宝-医健宝功能开关优化。首页统计展示调整

chenguo 2 dagar sedan
förälder
incheckning
2b5c54d052

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

+ 4 - 14
src/store/modules/user.js

@@ -10,9 +10,7 @@ const user = {
     roles: [],
     permissions: [],
     isAdmin: false,
-    isMedicalMall: false,
-    isPadLimit: false,
-    isStores: false
+    medicalMallConfig: {isMedicalMall: "0",statics: "0",isAudit:"0",isResource:"0"}
   },
 
   mutations: {
@@ -37,14 +35,8 @@ const user = {
     SET_ISADMIN: (state, isAdmin) => {
       state.isAdmin = isAdmin
     },
-    SET_MEDICALMALL: (state, isMedicalMall) => {
-      state.isMedicalMall = isMedicalMall
-    },
-    SET_PADLIMIT: (state, isPadLimit) => {
-      state.isPadLimit = isPadLimit
-    },
-    SET_ISSTORES: (state, isStores) => {
-      state.isStores = isStores
+    SET_MEDICALMALL: (state, medicalMallConfig) => {
+      state.medicalMallConfig = medicalMallConfig
     }
   },
 
@@ -82,9 +74,7 @@ const user = {
           commit('SET_AVATAR', avatar)
           commit('SET_USER', user)
           commit('SET_ISADMIN', res.isAdmin)
-          commit('SET_MEDICALMALL', res.isMedicalMall)
-          commit('SET_PADLIMIT', res.isPadLimit)
-          commit('SET_ISSTORES', res.isStores)
+          commit('SET_MEDICALMALL', res.medicalMallConfig)
           resolve(res)
         }).catch(error => {
           reject(error)

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

+ 5 - 5
src/views/his/company/index.vue

@@ -114,9 +114,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" v-if="this.$store.state.user.isPadLimit"/>
-      <el-table-column label="占用pad数量" align="center" prop="usedNum" v-if="this.$store.state.user.isPadLimit"/>
-      <el-table-column label="所属部门" align="center" prop="deptId" v-if="this.$store.state.user.isStores">
+      <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">{{item.deptName}}</el-tag>
         </template>
@@ -200,7 +200,7 @@
             </el-select>
         </el-form-item>
       <!-- 所属部门 -->
-        <el-form-item label="所属部门" prop="deptId" v-if="this.$store.state.user.isStores">
+        <el-form-item label="所属部门" prop="deptId" v-if="this.$store.state.user.medicalMallConfig.isResource">
           <el-select
             v-model="form.deptId"
             placeholder="请选择"
@@ -227,7 +227,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" v-if="this.$store.state.user.isPadLimit">
+        <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表示不做限制

+ 1 - 1
src/views/hisStore/store/index.vue

@@ -313,7 +313,7 @@
             </el-form-item>
           </el-col>
         </el-row>
-        <div v-if="this.$store.state.user.isMedicalMall">
+        <div v-if="this.$store.state.user.medicalMallConfig.isMedicalMall">
           <el-row>
             <el-col :span="12">
               <el-form-item label="药品经营许可证上传" prop="drugLicense">

+ 1 - 1
src/views/hisStore/storeProduct/index.vue

@@ -940,7 +940,7 @@ export default {
   },
   data() {
     return {
-      isMedicalMall: this.$store.state.user.isMedicalMall,
+      isMedicalMall: this.$store.state.user.medicalMallConfig.isMedicalMall,
       companyId: null,
       storeId: null,
       isAudit: null,

+ 18 - 4
src/views/index.vue

@@ -153,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">
@@ -946,6 +946,7 @@ export default {
       queryTime: '今日',
       todayWatchUserCount: 0,
       versionLimit: 0,
+      versionLimitPercent : 0.0,
       /// 选中的分析概览
       selectedDiv: 0,
       filterType: 0,
@@ -1133,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)];
 
@@ -1196,7 +1201,13 @@ export default {
           this.groupMgrCount = res.data.groupMgrCount ?? 0;
           this.memberCount = res.data.memberCount ?? 0;
           this.qwMemberNum = res.data.qwMemberNum ?? 0;
-          this.padTotalNum = (res.data.padTotalNum ?? 0) === -1 ? '不限' : res.data.padTotalNum;
+          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;
@@ -1241,9 +1252,12 @@ export default {
         }
       })
       authorizationInfo(this.staticParam).then(res => {
-        if (res.code === 200) {
+        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;
+          }
         }
       })
 

+ 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 + '"的数据项?', "警告", {