فهرست منبع

task-285 药房配置 代煎 & 配送 displayAgency | displayDelivery 字段更改配置: (label:value,)

cc12458 3 ماه پیش
والد
کامیت
a3b9636210

+ 10 - 1
src/api/business.js

@@ -1,4 +1,5 @@
 import request from '@/utils/request.js'
+import {analysisAgency, analysisDelivery} from '@/model/transition';
 
 // 获取处方列表
 export function getRecipeList(data) {
@@ -123,7 +124,15 @@ export function getPharmacyMsg(data) {
     return request({
         url: `/basis/pharmacyMgr/${data}`,
         method: 'get'
-    })
+    }).then((res) => {
+      if (!res.Data) return res;
+      res.Data = {
+        ...res.Data,
+        ...analysisAgency(res.Data),
+        ...analysisDelivery(res.Data),
+      }
+      return res;
+    });
 };
 
 // 修改药房信息

+ 4 - 1
src/api/city.js

@@ -25,7 +25,10 @@ export function getSelectType(data) {
     })
 };
 
-// 获取药房详细信息
+/**
+ * 获取药房详细信息
+ * @deprecated {@link @/api/business.js#getPharmacyMsg}
+ */
 export function getPharmacyMsg(data) {
     return request({
         url: `/basis/pharmacyMgr/${data}`,

+ 1 - 1
src/components/ChineseMedicine.vue

@@ -976,9 +976,9 @@ import {
   getProver,
   getArea,
   getSelectType,
-  getPharmacyMsg,
   getPatAddress
 } from "@/api/city.js";
+import { getPharmacyMsg } from "@/api/business.js";
 import {
   getTableDrug,
   getAddressForHospital,

+ 85 - 0
src/model/transition.js

@@ -0,0 +1,85 @@
+const optionsAgency = [
+  {label: '代配', value: '0'},
+  {label: '代煎', value: '1'},
+  {label: '自煎', value: '2'},
+];
+const optionsDelivery = [
+  {label: '配送到本院(站)', value: '1'},
+  {label: '快递配送', value: '0'},
+];
+
+export const analysisAgency = (data) => {
+  const defaultAgency = (data.defaultAgency || '').toString().trim();
+  const displayAgency = (data.displayAgency || '').toString().trim();
+  // 保留原有逻辑
+  if (/^\d+/.test(displayAgency)) return {
+    // 默认代煎 0是 1否
+    defaultAgency: defaultAgency === '0' ? '1' : '2',
+    // 显示代煎 0显示 1隐藏
+    displayAgency: displayAgency === '1' ? [] : optionsAgency.filter(option => option.value !== '2').map(option => option.value),
+    optionsAgency: [...optionsAgency],
+  };
+  // 存在新值 (label:value,label:value)
+  if (displayAgency) {
+    const options = [...optionsAgency];
+    const values = [];
+    for (const string of displayAgency.split(',').filter(Boolean)) {
+      const [label, value] = string.split(':');
+      const option = options.find((option) => option.value === value);
+      if (label) {
+        if (option) option.label = label;
+        else options.push({ label, value });
+      }
+      values.push(value);
+    }
+    return {
+      defaultAgency: defaultAgency,
+      displayAgency: values,
+      optionsAgency: options,
+    };
+  }
+  // 默认配置
+  return {
+    defaultAgency: defaultAgency,
+    displayAgency: [],
+    optionsAgency,
+  };
+};
+
+export const analysisDelivery = (data) => {
+  const defaultDelivery = (data.defaultDelivery || '').toString().trim();
+  const displayDelivery = (data.displayDelivery || '').toString().trim();
+  // 保留原有逻辑
+  if (/^\d+/.test(displayDelivery)) return {
+    // 默认配送  0是 1否
+    defaultDelivery: defaultDelivery,
+    // 显示配送 0显示 1隐藏
+    displayDelivery: displayDelivery === '1' ? [] : optionsDelivery.map(option => option.value),
+    optionsDelivery: optionsDelivery,
+  };
+  // 存在新值 (label:value,label:value)
+  if (displayDelivery) {
+    const options = [...optionsDelivery];
+    const values = [];
+    for (const string of displayDelivery.split(',').filter(Boolean)) {
+      const [label, value] = string.split(':');
+      const option = options.find((option) => option.value === value);
+      if (label) {
+        if (option) option.label = label;
+        else options.push({ label, value });
+      }
+      values.push(value);
+    }
+    return {
+      defaultDelivery: defaultDelivery,
+      displayDelivery: values,
+      optionsDelivery: options,
+    };
+  }
+  // 默认配置
+  return {
+    defaultDelivery: defaultDelivery,
+    displayDelivery: [],
+    optionsDelivery,
+  };
+}

+ 13 - 6
src/utils/minix/prescribing.js

@@ -32,6 +32,9 @@ export default {
 
             isShowDj: true, // 是否展示代煎
             isShowPs: true, // 是否展示配送
+            optionsAgency: [], // 代煎选项
+            optionsDelivery: [], // 配送选项
+
 
             showAddress: false, // 展示选择代煎 地址
 
@@ -147,12 +150,16 @@ export default {
         },
         // 切换药房时 监听煎 配送是否显示
         onUpdateDp(e) {
-
-            let isShowDj = e.displayAgency == 0 ? true : false // 是否展示代煎 0 展示 1不展示
-            let isShowPs = e.displayDelivery == 0 ? true : false // 是否展示配送 0 展示 1不展示
-            this.isDaiJian = e.defaultAgency == 0 ? 1 : 2
-            this.isShowDj = isShowDj
-            this.isShowPs = isShowPs
+            const displayAgency = Array.isArray(e.displayAgency) ? e.displayAgency : [];
+            const displayDelivery = Array.isArray(e.displayDelivery) ? e.displayDelivery : [];
+            const optionsAgency = Array.isArray(e.optionsAgency) ? e.optionsAgency : [];
+            const optionsDelivery = Array.isArray(e.optionsDelivery) ? e.optionsDelivery : [];
+
+            this.isDaiJian = e.defaultAgency;
+            this.isShowDj = displayAgency.length > 0
+            this.isShowPs = displayDelivery.length > 0
+            this.optionsAgency = optionsAgency.filter(option => displayAgency.includes(option.value));
+            this.optionsDelivery = optionsDelivery.filter(option => displayDelivery.includes(option.value));
 
             this.openAddress()
 

+ 50 - 95
src/views/business/PharmacyD.vue

@@ -193,9 +193,8 @@
           <div>代煎:</div>
         </div>
         <div class="right">
-          <el-select size="mini" v-model="form.daijian" placeholder="请选择">
-            <el-option label="显示" value="0"></el-option>
-            <el-option label="不显示" value="1"></el-option>
+          <el-select size="mini" v-model="form.daijian" placeholder="请选择" multiple clearable>
+            <el-option v-for="item in optionsAgency" :key="item.value" v-bind="item" />
           </el-select>
         </div>
       </div>
@@ -205,9 +204,8 @@
           <div>默认代煎:</div>
         </div>
         <div class="right">
-          <el-select size="mini" v-model="form.ddaijian" placeholder="请选择">
-            <el-option label="是" value="0"></el-option>
-            <el-option label="否" value="1"></el-option>
+          <el-select size="mini" v-model="form.ddaijian" placeholder="请选择" clearable>
+            <el-option v-for="item in optionsAgency" :key="item.value" v-bind="item" />
           </el-select>
         </div>
       </div>
@@ -226,9 +224,8 @@
           <div>配送:</div>
         </div>
         <div class="right">
-          <el-select size="mini" v-model="form.peisong" placeholder="请选择">
-            <el-option label="显示" value="0"></el-option>
-            <el-option label="不显示" value="1"></el-option>
+          <el-select size="mini" v-model="form.peisong" placeholder="请选择" multiple clearable>
+            <el-option v-for="item in optionsDelivery" :key="item.value" v-bind="item" />
           </el-select>
         </div>
       </div>
@@ -238,9 +235,8 @@
           <div>默认配送:</div>
         </div>
         <div class="right">
-          <el-select size="mini" v-model="form.dpeisong" placeholder="请选择">
-            <el-option label="是" value="0"></el-option>
-            <el-option label="否" value="1"></el-option>
+          <el-select size="mini" v-model="form.dpeisong" placeholder="请选择" clearable>
+            <el-option v-for="item in optionsDelivery" :key="item.value" v-bind="item" />
           </el-select>
         </div>
       </div>
@@ -305,6 +301,8 @@ import {
 export default {
   data() {
     return {
+      optionsAgency: [],
+      optionsDelivery: [],
       form: {
         area: "",
         medName: "", // 医疗结构
@@ -437,11 +435,7 @@ export default {
         });
         return;
       }
-      if (this.type == "add") {
-        this.addPharmacyData();
-      } else if (this.type == "edit") {
-        this.editPharmacMsg();
-      }
+      this.setPharmacyMsg();
     },
 
     // 获取医共体选择器
@@ -526,72 +520,13 @@ export default {
         }
       }
     },
-    //提交数据
-    async addPharmacyData() {
-      let ksIds = JSON.stringify(this.form.departName);
-      let departmentidSelsource = [];
-      let list = this.form.departName;
-
-      let departIds = [];
-      list.forEach(item => {
-        departIds = [...departIds, ...item];
-      });
-
-      departmentidSelsource = this.removalID(departIds);
-
-      let params = {
-        agencyPrice: this.form.daijianPrice,
-        areaCode: this.form.addressCode,
-        defaultAgency: this.form.ddaijian,
-        defaultDelivery: this.form.dpeisong,
-        defaultSpecialDeployment: this.form.dtiaopei,
-        defaultSystemOfCream: this.form.dzhigao,
-        deliveryPrice: this.form.peisongPrice,
-        departmentidSelsource: departmentidSelsource.join(","),
-        ksIds,
-        displayAgency: this.form.daijian,
-        displayDelivery: this.form.peisong,
-        displayName: this.form.showName,
-        displaySpecialDeployment: this.form.tiaopei,
-        displaySystemOfCream: this.form.zhigao,
-        dosageForms: this.form.doseType.join(","),
-        pharmacyId: this.form.id,
-        pharmacyName: this.form.name,
-        pharmacyProperties: this.form.attribute,
-        seqn: this.form.sqen,
-        specialDeploymentPrice: this.form.tiaopeiPrice,
-        // stitutionsId: this.getuserinfo.sititutionid,
-        systemOfCreamPrice: this.form.zhigaoPrice,
-        usableRange: this.form.area,
-        stitutionsId: this.form.medName
-      };
-      const loading = this.$loading({
-        lock: true,
-        text: "Loading",
-        spinner: "el-icon-loading",
-        background: "rgba(0, 0, 0, 0.7)"
-      });
-
-      let res = await addPharmacyData(params).catch(err => {
-        loading.close();
-      });
-      if (res.ResultCode == 0) {
-        this.$message({
-          message: "提交成功",
-          showClose: true,
-          type: "success"
-        });
-        loading.close();
-        setTimeout(() => {
-          this.$router.back();
-        }, 2000);
-      }
-    },
     // 获取详细数据
     async getPharmacyMsg() {
       let res = await getPharmacyMsg(this.pid);
       if (res.ResultCode == 0) {
         let data = res.Data;
+        this.optionsAgency = data.optionsAgency;
+        this.optionsDelivery = data.optionsDelivery;
         this.form = {
           area: data.usableRange,
           sqen: data.seqn,
@@ -623,8 +558,8 @@ export default {
         this.getDepartList(this.form.medName, data.ksIds ? "auto" : "1");
       }
     },
-    // 修改数据
-    async editPharmacMsg() {
+    // 设置详细数据
+    async setPharmacyMsg() {
       let ksIds = JSON.stringify(this.form.departName);
       let departmentidSelsource = [];
       let list = this.form.departName;
@@ -635,6 +570,21 @@ export default {
       });
 
       departmentidSelsource = this.removalID(departIds);
+
+      let displayAgency = '';
+      let displayDelivery = '';
+      if (Array.isArray(this.form.daijian)) {
+        displayAgency = this.form.daijian.map(value => {
+          const option = this.optionsAgency.find(option => option.value === value);
+          return option ? `${option.label}:${option.value}` : void 0;
+        }).filter(Boolean).join(',');
+      }
+      if (Array.isArray(this.form.peisong)) {
+        displayDelivery = this.form.peisong.map(value => {
+          const option = this.optionsDelivery.find(option => option.value === value);
+          return option ? `${option.label}:${option.value}` : void 0;
+        }).filter(Boolean).join(',');
+      }
       let params = {
         agencyPrice: this.form.daijianPrice,
         areaCode: this.form.addressCode,
@@ -645,8 +595,8 @@ export default {
         deliveryPrice: this.form.peisongPrice,
         departmentidSelsource: departmentidSelsource.join(","),
         ksIds,
-        displayAgency: this.form.daijian,
-        displayDelivery: this.form.peisong,
+        displayAgency,
+        displayDelivery,
         displayName: this.form.showName,
         displaySpecialDeployment: this.form.tiaopei,
         displaySystemOfCream: this.form.zhigao,
@@ -668,20 +618,25 @@ export default {
         spinner: "el-icon-loading",
         background: "rgba(0, 0, 0, 0.7)"
       });
-
-      let res = await editPharmacMsg(params).catch(err => {
-        loading.close();
-      });
-      if (res.ResultCode == 0) {
-        this.$message({
-          message: "提交成功",
-          showClose: true,
-          type: "success"
-        });
+      let request = Promise.reject();
+      if (this.type === 'edit') {
+        params.pid = this.pid;
+        request = editPharmacMsg(params);
+      } else if (this.type === 'add') {
+        request = addPharmacyData(params);
+      }
+      try {
+        const res = await request;
+        if (+res.ResultCode === 0) {
+          this.$message({
+            message: '提交成功',
+            showClose: true,
+            type: 'success',
+          });
+          setTimeout(() => { this.$router.back(); }, 1000);
+        }
+      } finally {
         loading.close();
-        setTimeout(() => {
-          this.$router.back();
-        }, 2000);
       }
     }
   },

+ 4 - 2
src/views/diagnosis/Prescribing.vue

@@ -398,7 +398,7 @@
           :showSubmit="showSubmit"
           :isShrink="isShrink"
           :isDaiJian="Number(isDaiJian)"
-          :isPs="isPs"
+          :isPs="Number(isPs)"
           @updateDp="onUpdateDp"
         ></chinese-medicine>
 
@@ -411,7 +411,7 @@
           @clear="clearContainer('1')"
           :totalAllMoney.sync="medicineC.allMoney"
           :showSubmit="showSubmit"
-          :isPs="isPs"
+          :isPs="Number(isPs)"
         ></medicineChinese>
         <suitScience
           @find="find($event)"
@@ -1126,6 +1126,8 @@
           :isPs="Number(isPs)"
           :isShowDj="isShowDj"
           :isShowPs="isShowPs"
+          :optionsAgency="optionsAgency"
+          :optionsDelivery="optionsDelivery"
         ></medAdressNew>
       </div>
     </Popup>

+ 28 - 35
src/views/diagnosis/components/medAddressNew.vue

@@ -3,34 +3,28 @@
     <div class="address-item" v-if="isShowDj">
       <div class="name">代煎信息</div>
       <div class="value">
-        <div class="daijiao-check flex flex-row-left flex-col-center" @click="changeDaijian(0)">
-          <div :class="['img-body',form.isDaiJian===0?'active':'']">
-            <img src="~@/assets/new-icon/checked.png" alt v-if="form.isDaiJian===0" />
+        <div class="daijiao-check flex flex-row-left flex-col-center"
+             v-for="item in optionsAgency" :key="item.value"
+             @click="changeDaijian(+item.value)">
+          <div v-if="+item.value === form.isDaiJian" class="img-body active">
+            <img src="~@/assets/new-icon/checked.png" alt />
           </div>
-          <span>代配</span>
-        </div>
-        <div class="daijiao-check flex flex-row-left flex-col-center" @click="changeDaijian(1)">
-          <div :class="['img-body',form.isDaiJian==1?'active':'']">
-            <img src="~@/assets/new-icon/checked.png" alt v-if="form.isDaiJian==1" />
-          </div>
-          <span>代煎</span>
+          <div v-else class="img-body"></div>
+          <span>{{ item.label }}</span>
         </div>
       </div>
     </div>
     <div class="address-item" v-if="isShowPs">
       <div class="name">配送信息</div>
       <div class="value">
-        <div class="daijiao-check flex flex-row-left flex-col-center" @click="changeKd(1)">
-          <div :class="['img-body',form.iskD==1?'active':'']">
-            <img src="~@/assets/new-icon/checked.png" alt v-if="form.iskD==1" />
-          </div>
-          <span>配送到本院(站)</span>
-        </div>
-        <div class="daijiao-check flex flex-row-left flex-col-center" @click="changeKd(0)">
-          <div :class="['img-body',form.iskD==0?'active':'']">
-            <img src="~@/assets/new-icon/checked.png" alt v-if="form.iskD==0" />
+        <div class="daijiao-check flex flex-row-left flex-col-center"
+             v-for="item in optionsDelivery" :key="item.value"
+             @click="changeKd(+item.value)">
+          <div v-if="+item.value === form.iskD" class="img-body active">
+            <img src="~@/assets/new-icon/checked.png" alt />
           </div>
-          <span>快递配送</span>
+          <div v-else class="img-body"></div>
+          <span>{{ item.label }}</span>
         </div>
       </div>
     </div>
@@ -115,6 +109,14 @@ export default {
       type: Number,
       default: 0
     },
+    optionsAgency: {
+      type: Array,
+      default: () => [],
+    },
+    optionsDelivery: {
+      type: Array,
+      default: () => [],
+    },
     isShowDj: {
       type: Boolean,
       default: true
@@ -200,31 +202,22 @@ export default {
   methods: {
     changeKd(data) {
       this.form.iskD = data;
-      if (data == 0) {
+      if (data === 0) {
         this.getAddressForHospital();
       } else {
         this.getPatAddress();
       }
       this.$emit("psChange", this.form.iskD);
     },
-    //   配送点击
-    changePeiSong(data = null) {
-      if (data === null) {
-        this.form.radio = this.form.radio == 1 ? 0 : 1;
-      } else {
-        this.form.radio = data;
-      }
-
-      // this.getaddress(this.form.radio);
-      this.$emit("psChange", this.form.radio);
-    },
     // 代煎选项点击
     changeDaijian(data = null) {
       if (data === null) {
-        this.form.isDaiJian = this.form.isDaiJian == 1 ? 0 : 1;
+        this.form.isDaiJian = this.form.isDaiJian === 1 ? 0 : 1;
       } else {
-        if (this.form.isDaiJian == data) {
-          this.form.isDaiJian = 2;
+        if (this.form.isDaiJian === data) {
+          // 有 自费 选项
+          if (this.optionsAgency.find(option => option.value === '2')) this.form.isDaiJian = data;
+          else this.form.isDaiJian = 2;
         } else {
           this.form.isDaiJian = data;
         }