|
|
@@ -290,77 +290,55 @@
|
|
|
<span style="opacity:0">*</span>
|
|
|
<div class="name">中医病名:</div>
|
|
|
<div class="input">
|
|
|
- <el-select
|
|
|
+ <el-autocomplete
|
|
|
size="mini"
|
|
|
- v-model="editData.chineseDisease"
|
|
|
+ v-model="editData.chineseDiseaseName"
|
|
|
+ :fetch-suggestions="queryDisease"
|
|
|
+ value-key="disname"
|
|
|
placeholder="请搜索选择"
|
|
|
clearable
|
|
|
- filterable
|
|
|
- :loading="diseaseLoading"
|
|
|
- loading-text="搜索中..."
|
|
|
- :filter-method="searchDisease"
|
|
|
- @change="onDiseaseChange"
|
|
|
- @focus="searchDisease('')"
|
|
|
+ :trigger-on-focus="true"
|
|
|
+ @select="onDiseaseSelect"
|
|
|
+ @clear="onDiseaseClear"
|
|
|
>
|
|
|
- <el-option
|
|
|
- v-for="(item, idx) in diseaseOptions"
|
|
|
- :key="idx"
|
|
|
- :label="item.disname"
|
|
|
- :value="String(item.disid)"
|
|
|
- ></el-option>
|
|
|
- </el-select>
|
|
|
+ <template slot-scope="{ item }">
|
|
|
+ <div :class="{ 'autocomplete-disabled': item._disabled }">
|
|
|
+ {{ item.disname }}
|
|
|
+ </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="name">共享至:</div>
|
|
|
<div class="input">
|
|
|
<el-select
|
|
|
size="mini"
|
|
|
- v-model="editData.symptomid"
|
|
|
- placeholder="请搜索选择"
|
|
|
- clearable
|
|
|
- filterable
|
|
|
- :loading="symptomLoading"
|
|
|
- loading-text="搜索中..."
|
|
|
- :filter-method="searchSymptom"
|
|
|
- @change="onSymptomChange"
|
|
|
- @focus="searchSymptom('')"
|
|
|
+ v-model="editData.showType"
|
|
|
+ placeholder="请选择"
|
|
|
>
|
|
|
<el-option
|
|
|
- v-for="(item, idx) in symptomOptions"
|
|
|
- :key="idx"
|
|
|
- :label="item.symname"
|
|
|
- :value="String(item.symid)"
|
|
|
+ v-for="opt in shareOptions"
|
|
|
+ :key="opt.value"
|
|
|
+ :label="opt.label"
|
|
|
+ :value="opt.value"
|
|
|
></el-option>
|
|
|
</el-select>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="form-item flex flex-col-center">
|
|
|
<span style="opacity:0">*</span>
|
|
|
- <div class="name">治法:</div>
|
|
|
+ <div class="name">处方出处:</div>
|
|
|
<div class="input">
|
|
|
- <el-select
|
|
|
+ <el-input
|
|
|
size="mini"
|
|
|
- v-model="editData.therapyCode"
|
|
|
- placeholder="请搜索选择"
|
|
|
- clearable
|
|
|
- filterable
|
|
|
- :loading="therapyLoading"
|
|
|
- loading-text="搜索中..."
|
|
|
- :filter-method="searchTherapy"
|
|
|
- @focus="searchTherapy('')"
|
|
|
- >
|
|
|
- <el-option
|
|
|
- v-for="(item, idx) in therapyOptions"
|
|
|
- :key="idx"
|
|
|
- :label="item.therapy"
|
|
|
- :value="String(item.therapyCode)"
|
|
|
- ></el-option>
|
|
|
- </el-select>
|
|
|
+ v-model="editData.source"
|
|
|
+ placeholder="请输入"
|
|
|
+ ></el-input>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div class="form-item flex flex-col-center">
|
|
|
+ <div class="form-item flex flex-col-center form-item-half">
|
|
|
<span style="opacity:0">*</span>
|
|
|
<div class="name">西医诊断:</div>
|
|
|
<div class="input">
|
|
|
@@ -371,12 +349,11 @@
|
|
|
clearable
|
|
|
filterable
|
|
|
multiple
|
|
|
- collapse-tags
|
|
|
+ remote
|
|
|
+ :remote-method="searchWesternDisease"
|
|
|
:loading="westernDiseaseLoading"
|
|
|
loading-text="搜索中..."
|
|
|
- :filter-method="searchWesternDisease"
|
|
|
@change="onWesternDiseaseChange"
|
|
|
- @focus="searchWesternDisease('')"
|
|
|
popper-class="western-disease-select"
|
|
|
@visible-change="onWesternDiseaseVisible"
|
|
|
>
|
|
|
@@ -389,7 +366,7 @@
|
|
|
</el-select>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div class="form-item flex flex-col-center">
|
|
|
+ <div class="form-item flex flex-col-center form-item-half">
|
|
|
<span style="opacity:0">*</span>
|
|
|
<div class="name">功效与适应症:</div>
|
|
|
<div class="input">
|
|
|
@@ -402,59 +379,77 @@
|
|
|
</div>
|
|
|
<div class="form-item flex flex-col-center">
|
|
|
<span style="opacity:0">*</span>
|
|
|
- <div class="name">共享至:</div>
|
|
|
+ <div class="name">证型:</div>
|
|
|
<div class="input">
|
|
|
<el-select
|
|
|
size="mini"
|
|
|
- v-model="editData.showType"
|
|
|
- placeholder="请选择"
|
|
|
+ v-model="editData.symptomid"
|
|
|
+ placeholder="请搜索选择"
|
|
|
+ clearable
|
|
|
+ filterable
|
|
|
+ :loading="symptomLoading"
|
|
|
+ loading-text="搜索中..."
|
|
|
+ :filter-method="searchSymptom"
|
|
|
+ @change="onSymptomChange"
|
|
|
+ @focus="searchSymptom('')"
|
|
|
>
|
|
|
<el-option
|
|
|
- v-for="opt in shareOptions"
|
|
|
- :key="opt.value"
|
|
|
- :label="opt.label"
|
|
|
- :value="opt.value"
|
|
|
+ v-for="(item, idx) in symptomOptions"
|
|
|
+ :key="idx"
|
|
|
+ :label="item.symname"
|
|
|
+ :value="String(item.symid)"
|
|
|
></el-option>
|
|
|
</el-select>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="form-item flex flex-col-center">
|
|
|
<span style="opacity:0">*</span>
|
|
|
- <div class="name">处方出处:</div>
|
|
|
+ <div class="name">治法:</div>
|
|
|
<div class="input">
|
|
|
- <el-input
|
|
|
+ <el-select
|
|
|
size="mini"
|
|
|
- v-model="editData.source"
|
|
|
- placeholder="请输入"
|
|
|
- ></el-input>
|
|
|
+ v-model="editData.therapyCode"
|
|
|
+ placeholder="请搜索选择"
|
|
|
+ clearable
|
|
|
+ filterable
|
|
|
+ :loading="therapyLoading"
|
|
|
+ loading-text="搜索中..."
|
|
|
+ :filter-method="searchTherapy"
|
|
|
+ @focus="searchTherapy('')"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="(item, idx) in therapyOptions"
|
|
|
+ :key="idx"
|
|
|
+ :label="item.therapy"
|
|
|
+ :value="String(item.therapyCode)"
|
|
|
+ ></el-option>
|
|
|
+ </el-select>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="form-item flex flex-col-center">
|
|
|
<span style="opacity:0">*</span>
|
|
|
<el-checkbox v-model="editData.isUnified" class="unified-checkbox">统建处方</el-checkbox>
|
|
|
</div>
|
|
|
- <template v-if="editData.isUnified">
|
|
|
- <div class="form-item flex flex-col-center">
|
|
|
- <div class="name"><span style="color: red">*</span> 医派:</div>
|
|
|
- <div class="input">
|
|
|
- <el-input
|
|
|
- size="mini"
|
|
|
- v-model="editData.medicalSchool"
|
|
|
- placeholder="请输入"
|
|
|
- ></el-input>
|
|
|
- </div>
|
|
|
+ <div class="form-item flex flex-col-center" v-if="editData.isUnified">
|
|
|
+ <div class="name"><span style="color: red">*</span> 医派:</div>
|
|
|
+ <div class="input">
|
|
|
+ <el-input
|
|
|
+ size="mini"
|
|
|
+ v-model="editData.medicalSchool"
|
|
|
+ placeholder="请输入"
|
|
|
+ ></el-input>
|
|
|
</div>
|
|
|
- <div class="form-item flex flex-col-center">
|
|
|
- <div class="name"><span style="color: red">*</span> 科室:</div>
|
|
|
- <div class="input">
|
|
|
- <el-input
|
|
|
- size="mini"
|
|
|
- v-model="editData.department"
|
|
|
- placeholder="请输入"
|
|
|
- ></el-input>
|
|
|
- </div>
|
|
|
+ </div>
|
|
|
+ <div class="form-item flex flex-col-center" v-if="editData.isUnified">
|
|
|
+ <div class="name"><span style="color: red">*</span> 科室:</div>
|
|
|
+ <div class="input">
|
|
|
+ <el-input
|
|
|
+ size="mini"
|
|
|
+ v-model="editData.department"
|
|
|
+ placeholder="请输入"
|
|
|
+ ></el-input>
|
|
|
</div>
|
|
|
- </template>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
|
|
|
<!-- 配穴表格 -->
|
|
|
@@ -703,34 +698,45 @@ export default {
|
|
|
if (has(0)) options.push({ label: "个人", value: "0" });
|
|
|
if (has(1) || has(2)) options.push({ label: "科室", value: "1" });
|
|
|
if (has(3)) options.push({ label: "医疗机构", value: "2" });
|
|
|
- console.log("共享选项", options);
|
|
|
return options;
|
|
|
},
|
|
|
+ defaultShareType() {
|
|
|
+ const options = this.shareOptions;
|
|
|
+ return options.length ? options[0].value : "0";
|
|
|
+ },
|
|
|
},
|
|
|
created() {
|
|
|
this.getList();
|
|
|
},
|
|
|
methods: {
|
|
|
// 中医病名搜索
|
|
|
- async searchDisease(query) {
|
|
|
- this.diseaseLoading = true;
|
|
|
+ async queryDisease(queryString, cb) {
|
|
|
+ this._prevDiseaseInput = queryString;
|
|
|
try {
|
|
|
const { list } = await getDiseaseListMethod(1, 9999, {
|
|
|
- keyword: query || "",
|
|
|
+ keyword: queryString || "",
|
|
|
});
|
|
|
- this.diseaseOptions = list || [];
|
|
|
+ if (list && list.length > 0) {
|
|
|
+ cb(list);
|
|
|
+ } else {
|
|
|
+ cb([{ disname: "暂无数据", _disabled: true }]);
|
|
|
+ }
|
|
|
} catch (e) {
|
|
|
console.error("搜索中医病名失败", e);
|
|
|
- } finally {
|
|
|
- this.diseaseLoading = false;
|
|
|
+ cb([{ disname: "搜索失败,请重试", _disabled: true }]);
|
|
|
}
|
|
|
},
|
|
|
- onDiseaseChange(disid) {
|
|
|
- const selected = this.diseaseOptions.find((item) => item.disid === disid);
|
|
|
- if (selected) {
|
|
|
- this.editData.chineseDiseaseName = selected.disname;
|
|
|
- this.editData.disCode = selected.disCode;
|
|
|
+ onDiseaseSelect(item) {
|
|
|
+ if (item._disabled) {
|
|
|
+ // 恢复为点击前的输入文字
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.editData.chineseDiseaseName = this._prevDiseaseInput || "";
|
|
|
+ });
|
|
|
+ return;
|
|
|
}
|
|
|
+ this.editData.chineseDisease = String(item.disid);
|
|
|
+ this.editData.chineseDiseaseName = item.disname;
|
|
|
+ this.editData.disCode = item.disCode || "";
|
|
|
// 联动加载证型
|
|
|
this.editData.symptomid = "";
|
|
|
this.editData.symptomName = "";
|
|
|
@@ -739,9 +745,18 @@ export default {
|
|
|
this.editData.therapyCode = "";
|
|
|
this.editData.therapyName = "";
|
|
|
this.therapyOptions = [];
|
|
|
- if (disid) {
|
|
|
- this.searchSymptom("");
|
|
|
- }
|
|
|
+ this.searchSymptom("");
|
|
|
+ },
|
|
|
+ onDiseaseClear() {
|
|
|
+ this.editData.chineseDisease = "";
|
|
|
+ this.editData.chineseDiseaseName = "";
|
|
|
+ this.editData.disCode = "";
|
|
|
+ this.editData.symptomid = "";
|
|
|
+ this.editData.symptomName = "";
|
|
|
+ this.symptomOptions = [];
|
|
|
+ this.editData.therapyCode = "";
|
|
|
+ this.editData.therapyName = "";
|
|
|
+ this.therapyOptions = [];
|
|
|
},
|
|
|
// 证型变更联动
|
|
|
onSymptomChange(symid) {
|
|
|
@@ -865,22 +880,34 @@ export default {
|
|
|
}
|
|
|
},
|
|
|
onWesternDiseaseVisible(show) {
|
|
|
- const wrap = document.querySelector(
|
|
|
- ".western-disease-select .el-scrollbar__wrap",
|
|
|
- );
|
|
|
- if (!wrap) return;
|
|
|
- if (show) {
|
|
|
- wrap.addEventListener(
|
|
|
- "scroll",
|
|
|
- (this._wdScroll = () => {
|
|
|
- if (wrap.scrollHeight - wrap.scrollTop <= wrap.clientHeight + 5) {
|
|
|
- this.loadMoreWesternDisease();
|
|
|
- }
|
|
|
- }),
|
|
|
+ if (!show) {
|
|
|
+ const wrap = document.querySelector(
|
|
|
+ ".western-disease-select .el-scrollbar__wrap",
|
|
|
);
|
|
|
- } else {
|
|
|
- wrap.removeEventListener("scroll", this._wdScroll);
|
|
|
+ if (wrap && this._wdScroll) {
|
|
|
+ wrap.removeEventListener("scroll", this._wdScroll);
|
|
|
+ }
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // 首次打开且无数据时加载初始列表
|
|
|
+ if (this.westernDiseaseOptions.length === 0) {
|
|
|
+ this.searchWesternDisease("");
|
|
|
}
|
|
|
+ this.$nextTick(() => {
|
|
|
+ const wrap = document.querySelector(
|
|
|
+ ".western-disease-select .el-scrollbar__wrap",
|
|
|
+ );
|
|
|
+ if (wrap) {
|
|
|
+ wrap.addEventListener(
|
|
|
+ "scroll",
|
|
|
+ (this._wdScroll = () => {
|
|
|
+ if (wrap.scrollHeight - wrap.scrollTop <= wrap.clientHeight + 5) {
|
|
|
+ this.loadMoreWesternDisease();
|
|
|
+ }
|
|
|
+ }),
|
|
|
+ );
|
|
|
+ }
|
|
|
+ });
|
|
|
},
|
|
|
onWesternDiseaseChange(codes) {
|
|
|
const names = codes
|
|
|
@@ -1053,7 +1080,7 @@ export default {
|
|
|
|
|
|
this.editData = {
|
|
|
...detail,
|
|
|
- showType: detail.showType || "0",
|
|
|
+ showType: String(detail.showType ?? "0"),
|
|
|
efficacy: detail.effect || "",
|
|
|
source: detail.provenance || "",
|
|
|
isUnified: String(detail.purposeType) === "1",
|
|
|
@@ -1099,7 +1126,7 @@ export default {
|
|
|
westernDisease: [],
|
|
|
westernDiseaseName: "",
|
|
|
efficacy: "",
|
|
|
- showType: "0",
|
|
|
+ showType: this.defaultShareType,
|
|
|
source: "",
|
|
|
isUnified: false,
|
|
|
medicalSchool: "",
|
|
|
@@ -1228,6 +1255,7 @@ export default {
|
|
|
const data = res.Data || {};
|
|
|
this.viewData = {
|
|
|
...data,
|
|
|
+ showType: String(data.showType ?? "0"),
|
|
|
isUnifiedChecked: data.purposeType || "0",
|
|
|
};
|
|
|
}
|
|
|
@@ -1446,6 +1474,10 @@ export default {
|
|
|
padding: 0 10px;
|
|
|
margin-bottom: 10px;
|
|
|
|
|
|
+ &.form-item-half {
|
|
|
+ width: 50%;
|
|
|
+ }
|
|
|
+
|
|
|
.name {
|
|
|
width: 110px;
|
|
|
min-width: 110px;
|
|
|
@@ -1486,6 +1518,11 @@ export default {
|
|
|
min-height: 0;
|
|
|
}
|
|
|
|
|
|
+.autocomplete-disabled {
|
|
|
+ color: #999 !important;
|
|
|
+ cursor: not-allowed !important;
|
|
|
+}
|
|
|
+
|
|
|
.dialog-scroll-area ::v-deep .recipe-acupoint {
|
|
|
flex: 1;
|
|
|
min-height: 0;
|