Преглед изворни кода

bug-716: 协定方新增时的病名、证型、治法、西医诊断搜索问题以及更换开发环境和生产环境(去掉kd)

张田田 пре 2 дана
родитељ
комит
0ed8d344cb
5 измењених фајлова са 164 додато и 85 уклоњено
  1. 1 1
      .env.production
  2. 6 4
      src/request/api.illness.js
  3. 2 2
      src/views/Home.vue
  4. 153 77
      src/views/business/SuitableTech.vue
  5. 2 1
      vue.config.js

+ 1 - 1
.env.production

@@ -1,6 +1,6 @@
 NODE_ENV = 'production'
 BASE_URL = './'
-VUE_APP_BASE_API = '/kd'
+VUE_APP_BASE_API = '/'
 #appid
 
 VUE_APP_CODE_IMG='http://101.133.232.97:8063/'

+ 6 - 4
src/request/api.illness.js

@@ -9,9 +9,10 @@ export function getDiseaseListMethod(page = 1, size = 10, query = {}) {
     pagesize: size,
     ...query, keyword,
   }, {meta: {share: true}}).then(res => {
+    const data = res.data || {};
     return {
-      total: res.data.disnum,
-      list: getArray(res.data.diseases, item => Object.assign(item, {
+      total: data.disnum || 0,
+      list: getArray(data.diseases, item => Object.assign(item, {
         $uid: randomUUID(),
         $code: item.disCode,
         $name: item.disname,
@@ -28,9 +29,10 @@ export function getSymptomListMethod(page = 1, size = 10, query = {}) {
     pagesize: size,
     ...query, keyword,
   }, {meta: {share: true}}).then(res => {
+    const data = res.data || {};
     return {
-      total: res.data.sysnum,
-      list: getArray(res.data.sysptoms, item => Object.assign(item, {
+      total: data.sysnum || 0,
+      list: getArray(data.sysptoms, item => Object.assign(item, {
         $uid: randomUUID(),
         $code: item.symid,
         $name: item.symname,

+ 2 - 2
src/views/Home.vue

@@ -52,7 +52,7 @@ export default {
       code: "",
 
       checked: false,
-      src: process.env.VUE_APP_BASE_API + "/captchaImage"
+      src: process.env.VUE_APP_BASE_API + "captchaImage"
     };
   },
   created() {
@@ -67,7 +67,7 @@ export default {
     async getCodeimg() {
       let res = await getCodeimg();
       let time = new Date().getTime();
-      this.src = process.env.VUE_APP_BASE_API + "/captchaImage?time=" + time;
+      this.src = process.env.VUE_APP_BASE_API + "captchaImage?time=" + time;
     },
     async login() {
       localStorage.removeItem("token");

+ 153 - 77
src/views/business/SuitableTech.vue

@@ -342,28 +342,31 @@
               <span style="opacity:0">*</span>
               <div class="name">西医诊断:</div>
               <div class="input">
-                <el-select
+                <div class="western-disease-tags" v-if="editData.westernDisease.length">
+                  <el-tag
+                    v-for="code in editData.westernDisease"
+                    :key="code"
+                    size="mini"
+                    closable
+                    @close="removeWesternDisease(code)"
+                  >{{ westernDiseaseNameMap[code] || code }}</el-tag>
+                </div>
+                <el-autocomplete
                   size="mini"
-                  v-model="editData.westernDisease"
+                  v-model="westernDiseaseSearch"
+                  :fetch-suggestions="queryWesternDisease"
+                  value-key="westname"
                   placeholder="请搜索选择"
                   clearable
-                  filterable
-                  multiple
-                  remote
-                  :remote-method="searchWesternDisease"
-                  :loading="westernDiseaseLoading"
-                  loading-text="搜索中..."
-                  @change="onWesternDiseaseChange"
-                  popper-class="western-disease-select"
-                  @visible-change="onWesternDiseaseVisible"
+                  :trigger-on-focus="true"
+                  @select="onWesternDiseaseSelect"
                 >
-                  <el-option
-                    v-for="(item, idx) in westernDiseaseOptions"
-                    :key="idx"
-                    :label="item.westname"
-                    :value="String(item.westcode)"
-                  ></el-option>
-                </el-select>
+                  <template slot-scope="{ item }">
+                    <div :class="{ 'autocomplete-disabled': item._disabled }">
+                      {{ item.westname }}
+                    </div>
+                  </template>
+                </el-autocomplete>
               </div>
             </div>
             <div class="form-item flex flex-col-center form-item-half">
@@ -381,49 +384,46 @@
               <span style="opacity:0">*</span>
               <div class="name">证型:</div>
               <div class="input">
-                <el-select
+                <el-autocomplete
                   size="mini"
-                  v-model="editData.symptomid"
+                  v-model="editData.symptomName"
+                  :fetch-suggestions="querySymptom"
+                  value-key="symname"
                   placeholder="请搜索选择"
                   clearable
-                  filterable
-                  :loading="symptomLoading"
-                  loading-text="搜索中..."
-                  :filter-method="searchSymptom"
-                  @change="onSymptomChange"
-                  @focus="searchSymptom('')"
+                  :trigger-on-focus="true"
+                  @select="onSymptomSelect"
+                  @clear="onSymptomClear"
                 >
-                  <el-option
-                    v-for="(item, idx) in symptomOptions"
-                    :key="idx"
-                    :label="item.symname"
-                    :value="String(item.symid)"
-                  ></el-option>
-                </el-select>
+                  <template slot-scope="{ item }">
+                    <div :class="{ 'autocomplete-disabled': item._disabled }">
+                      {{ item.symname }}
+                    </div>
+                  </template>
+                </el-autocomplete>
               </div>
             </div>
             <div class="form-item flex flex-col-center">
               <span style="opacity:0">*</span>
               <div class="name">治法:</div>
               <div class="input">
-                <el-select
+                <el-autocomplete
                   size="mini"
-                  v-model="editData.therapyCode"
+                  v-model="editData.therapyName"
+                  :fetch-suggestions="queryTherapy"
+                  value-key="therapy"
                   placeholder="请搜索选择"
                   clearable
-                  filterable
-                  :loading="therapyLoading"
-                  loading-text="搜索中..."
-                  :filter-method="searchTherapy"
-                  @focus="searchTherapy('')"
+                  :trigger-on-focus="true"
+                  @select="onTherapySelect"
+                  @clear="onTherapyClear"
                 >
-                  <el-option
-                    v-for="(item, idx) in therapyOptions"
-                    :key="idx"
-                    :label="item.therapy"
-                    :value="String(item.therapyCode)"
-                  ></el-option>
-                </el-select>
+                  <template slot-scope="{ item }">
+                    <div :class="{ 'autocomplete-disabled': item._disabled }">
+                      {{ item.therapy }}
+                    </div>
+                  </template>
+                </el-autocomplete>
               </div>
             </div>
             <div class="form-item flex flex-col-center">
@@ -648,6 +648,7 @@ export default {
       therapyOptions: [],
       westernDiseaseOptions: [],
       westernDiseaseNameMap: {},
+      westernDiseaseSearch: "",
       westernDiseasePage: 1,
       westernDiseaseHasMore: true,
       projectOptions: [],
@@ -669,6 +670,10 @@ export default {
       editLoading: false,
       editData: {
         statistics: {},
+        westernDisease: [],
+        chineseDiseaseName: "",
+        symptomName: "",
+        therapyName: "",
       },
       // 查看详情弹窗
       showViewDialog: false,
@@ -745,7 +750,7 @@ export default {
       this.editData.therapyCode = "";
       this.editData.therapyName = "";
       this.therapyOptions = [];
-      this.searchSymptom("");
+      this.querySymptom("", () => {});
     },
     onDiseaseClear() {
       this.editData.chineseDisease = "";
@@ -758,54 +763,86 @@ export default {
       this.editData.therapyName = "";
       this.therapyOptions = [];
     },
-    // 证型变更联动
-    onSymptomChange(symid) {
-      const selected = this.symptomOptions.find((item) => item.symid === symid);
-      if (selected) {
-        this.editData.symptomName = selected.symname;
-        this.editData.symptomCode = selected.synCode || "";
-      }
-      // 联动清空治法并重新加载
-      this.editData.therapyCode = "";
-      this.editData.therapyName = "";
-      this.therapyOptions = [];
-      if (symid) {
-        this.searchTherapy("");
-      }
-    },
     // ========== 证型搜索 ==========
-    async searchSymptom(query) {
-      this.symptomLoading = true;
+    async querySymptom(queryString, cb) {
+      this._prevSymptomInput = queryString;
       try {
-        const params = { keyword: query || "" };
+        const params = { keyword: queryString || "" };
         if (this.editData.chineseDisease)
           params.disid = this.editData.chineseDisease;
         if (this.editData.disCode) params.disCode = this.editData.disCode;
         const { list } = await getSymptomListMethod(1, 9999, params);
-        this.symptomOptions = list || [];
+        if (list && list.length > 0) {
+          cb(list);
+        } else {
+          cb([{ symname: "暂无数据", _disabled: true }]);
+        }
       } catch (e) {
         console.error("搜索证型失败", e);
-      } finally {
-        this.symptomLoading = false;
+        cb([{ symname: "搜索失败,请重试", _disabled: true }]);
+      }
+    },
+    onSymptomSelect(item) {
+      if (item._disabled) {
+        this.$nextTick(() => {
+          this.editData.symptomName = this._prevSymptomInput || "";
+        });
+        return;
+      }
+      this.editData.symptomid = String(item.symid);
+      this.editData.symptomName = item.symname;
+      this.editData.symptomCode = item.synCode || "";
+      // 联动清空治法并重新加载
+      this.editData.therapyCode = "";
+      this.editData.therapyName = "";
+      this.therapyOptions = [];
+      if (item.symid) {
+        this.queryTherapy("", () => {});
       }
     },
+    onSymptomClear() {
+      this.editData.symptomid = "";
+      this.editData.symptomName = "";
+      this.editData.symptomCode = "";
+      // 联动清空治法
+      this.editData.therapyCode = "";
+      this.editData.therapyName = "";
+      this.therapyOptions = [];
+    },
     // ========== 治法搜索 ==========
-    async searchTherapy(query) {
-      this.therapyLoading = true;
+    async queryTherapy(queryString, cb) {
+      this._prevTherapyInput = queryString;
       try {
-        const params = { keyword: query || "" };
+        const params = { keyword: queryString || "" };
         if (this.editData.disCode) params.disCode = this.editData.disCode;
         if (this.editData.symptomid) {
           params.symptomCode = this.editData.symptomid;
           params.symid = this.editData.symptomid;
         }
         const { list } = await getTherapyListMethod(1, 9999, params);
-        this.therapyOptions = list || [];
+        if (list && list.length > 0) {
+          cb(list);
+        } else {
+          cb([{ therapy: "暂无数据", _disabled: true }]);
+        }
       } catch (e) {
         console.error("搜索治法失败", e);
-      } finally {
-        this.therapyLoading = false;
+        cb([{ therapy: "搜索失败,请重试", _disabled: true }]);
+      }
+    },
+    onTherapySelect(item) {
+      if (item._disabled) {
+        this.$nextTick(() => {
+          this.editData.therapyName = this._prevTherapyInput || "";
+        });
+        return;
       }
+      this.editData.therapyCode = String(item.therapyCode);
+      this.editData.therapyName = item.therapy;
+    },
+    onTherapyClear() {
+      this.editData.therapyCode = "";
+      this.editData.therapyName = "";
     },
     // ========== 西医诊断搜索(分页) ==========
     async searchWesternDisease(query) {
@@ -909,8 +946,38 @@ export default {
         }
       });
     },
-    onWesternDiseaseChange(codes) {
-      const names = codes
+    async queryWesternDisease(queryString, cb) {
+      await this.searchWesternDisease(queryString);
+      if (this.westernDiseaseOptions.length > 0) {
+        cb(this.westernDiseaseOptions);
+      } else {
+        cb([{ westname: "暂无数据", _disabled: true }]);
+      }
+    },
+    onWesternDiseaseSelect(item) {
+      if (item._disabled) {
+        this.$nextTick(() => {
+          this.westernDiseaseSearch = "";
+        });
+        return;
+      }
+      const code = String(item.westcode);
+      if (!this.editData.westernDisease.includes(code)) {
+        this.editData.westernDisease.push(code);
+        this.westernDiseaseNameMap[code] = item.westname;
+        this.updateWesternDiseaseName();
+      }
+      this.westernDiseaseSearch = "";
+      this.$nextTick(() => {
+        this.searchWesternDisease("");
+      });
+    },
+    removeWesternDisease(code) {
+      this.editData.westernDisease = this.editData.westernDisease.filter((c) => c !== code);
+      this.updateWesternDiseaseName();
+    },
+    updateWesternDiseaseName() {
+      const names = this.editData.westernDisease
         .map((code) => this.westernDiseaseNameMap[code] || "")
         .filter(Boolean);
       this.editData.westernDiseaseName = names.join(",");
@@ -1521,6 +1588,15 @@ export default {
 .autocomplete-disabled {
   color: #999 !important;
   cursor: not-allowed !important;
+  pointer-events: none;
+}
+
+.western-disease-tags {
+  margin-bottom: 4px;
+  .el-tag {
+    margin-right: 4px;
+    margin-bottom: 2px;
+  }
 }
 
 .dialog-scroll-area ::v-deep .recipe-acupoint {

+ 2 - 1
vue.config.js

@@ -18,7 +18,8 @@ module.exports = {
                 // target: `http://121.43.162.141:80/`, // [萧山] 测试环境的后端地址
                 // target: `https://wx.hzliuzhi.com:4433/fz/`, // [测试] 测试环境的后端
                 // target: `https://tcm2.hzliuzhi.com/`, // @six 演示环境 2.0
-                 target: `https://tcm.hzliuzhi.com/kd`, // @six kd演示环境
+                // target: `https://wx.hzliuzhi.com:4433/fz`, // @six kd演示环境
+                   target: `https://wx.hzliuzhi.com:4433/kd`,
                 // target: `http://192.168.1.5:8091/`,
                 // target: `https://tcm.hzliuzhi.com/`, // @six 演示环境
                 // target: `http://www.hzxunmai.com/`, // 正式域名