|
|
<template> <div style="display: flex"> <div :style="`width: 300px;height:550px;border: 1px solid #EEE;`"> <div style="margin: 2px 2px 2px 2px"> <el-input placeholder="输入关键字进行过滤" v-model="filterText" size="small" /> </div> <div> <!-- default-expand-all --> <el-tree :style="`overflow: scroll;width: 280px;height:510px;`" :data="pacsTemplateTree" :props="treeprops" :filter-node-method="filterNode" :expand-on-click-node="false" highlight-current ref="ref_tree" show-checkbox @check-change="handleCheckChange" > <span class="custom-tree-node" slot-scope="{ node, data }"> <div> <span class="treeicons"> <img style="width: 20px; height: 20px; vertical-align: sub" src="@/assets/images/order.png" v-if="!data.parentId" /> </span> <span :class="!data.parentId ? 'maxtitle' : 'mintitle'" >{{ node.label }} </span> </div> </span> </el-tree> </div> </div> <div :style="`display: block;width:620px; margin-left: 5px;`"> <div> <!-- 多个检查明细 --> <div> <span>检查结果:</span> <el-radio-group v-model="tabPosition"> <el-radio :label="'top'">横排</el-radio> <el-radio :label="'left'">纵排</el-radio> </el-radio-group> </div> <el-tabs :tab-position="tabPosition" v-model="tabChoosed"> <el-tab-pane v-for="(item, seq) in doctorCheck.checkItemList" :label="dispLabel(item.itemName)" :name="seq + ''" :key="seq" > <el-input style="width: 100%" type="textarea" v-model="item.result" placeholder="请输入检查结果" :autosize="{ minRows: decLineCount, maxRows: decLineCount }" /> <div style="display: flex; justify-content: space-between"> <div></div> <div> <el-tooltip :content="`给 ${item.itemName} 项目,赋默认结果`" placement="top" > <i class="el-icon-edit" @click="btnDefResult(seq)" style=" font-size: 18px; color: blue; cursor: pointer; margin-right: 10px; " ></i> </el-tooltip> <el-tooltip :content="`清除 ${item.itemName} 项目的检查结果`" placement="top" > <i class="el-icon-delete" @click="btnClear(seq)" style=" font-size: 18px; color: red; cursor: pointer; margin-right: 10px; " ></i> </el-tooltip> </div> </div> </el-tab-pane> </el-tabs> </div> <div style="margin-top: 5px"> <span>检查结论:</span> <div style="display: flex; justify-content: space-between"> <el-input style="width: 100%" type="textarea" v-model="summary" placeholder="请输入结论" :autosize="{ minRows: conLineCount, maxRows: conLineCount }" /> </div> </div> <div style="display: flex; justify-content: space-between; margin-top: 10px" > <div></div> <div> <!-- <el-button type="primary" @click="btnTest" class="commonbutton">测试</el-button> --> <el-tooltip content="清除所有检查项目描述及结论" placement="top"> <el-button type="primary" @click="btnClearAll" class="commonbutton" >清除</el-button > </el-tooltip> <el-tooltip content="所有检查项目赋默认描述及结论" placement="top"> <el-button type="primary" @click="btnDefault" class="commonbutton" >默认结果</el-button > </el-tooltip> <el-button type="primary" @click="btnOk" class="commonbutton" >确定</el-button > </div> </div> </div> </div></template><script>import moment from "moment";import { mapState } from "vuex";import { getapi, postapi, putapi, deletapi } from "@/api/api";import { hadoopGet, hadoopPost, hadoopPut, hadoopDel,} from "../../api/hadoopApi";import { arrayReduce, arrayExistObj, deepCopy, reMadeOrgTree,} from "../../utlis/proFunc";import { getTreePids, getTreeAllChildIdsById, madeTree,} from "../../utlis/tree";
export default { components: {}, props: ["refParams", "refFuncOther"], data() { return { filterText: "", description: [], // 描述
conclusion: [], // 结论
descriptionChoosedPre: [], // 前次选中
descriptionChoosed: [], // 所有选中的描述的集合,切换部位时可用于描述初始化选择
conclusionChoosed: [], // 选中的结论
conclusionAll: [], // 所有选中的描述,对应的结论
result: "", // 检查结果
summary: "", // 小结
pacsTemplateTree: [], //类别 + 模板树
treeprops: { label: "displayName", // label/displayName
value: "id", id: "id", children: "children", }, //树形组件的数据结构
tabChoosed: "0", tabPosition: "top", // 多个明细检查排列方式
}; }, //<el-tree :data="$store.state.customerOrg.ref_tree" :props="$store.state.customerOrg.treeprops" @node-click="treeclick"></el-tree>
computed: { ...mapState(["window", "dialogWin", "doctorCheck"]),
mainHeight() { return this.window.pageHeight - 118; },
tableHeight() { return this.mainHeight - 120 - 80 - 80; },
decLineCount() { return this.refParams.from == "dcm" ? 14 : 16; },
conLineCount() { return this.refParams.from == "dcm" ? 7 : 8; }, }, //创建组件后
created() {},
//挂载组件完成
mounted() { //获取体检单位列表树信息
this.init(); },
methods: { // 初始化数据
init() { this.description = []; this.result = this.refParams.result || ""; this.summary = this.refParams.summary || ""; this.tabChoosed = this.refParams.index + ""; this.tabPosition = this.doctorCheck.checkItemList.length > 5 ? "left" : "top"; console.log("init"); this.getPacsTemplateTree(); },
// 显示tab标签名称,过长处理
dispLabel(itemName) { return itemName.length > 5 ? itemName.substring(0, 4) + "…" : itemName; },
//勾选节点
handleCheckChange(data, checked, indeterminate) { // console.log('data, checked, indeterminate,this.menuInfoSet',data, checked, indeterminate,this.menuInfoSet);
this.description = []; this.conclusion = []; postapi("/api/app/BigtextResultTemplate/GetBigtextResultTemplateDetail", { bigtextResultTemplateIds: [data.id], }).then((res) => { if (res.code > -1) { this.description = res.data.descriptionDetail; this.conclusion = res.data.conclusionDetail; let opraType = false; if (checked) { // 勾选
opraType = true; } else if (!indeterminate) { // 取消勾选
opraType = false; } this.chooseDescription(opraType); this.chooseConclusion(opraType); } }); },
//树过滤
filterNode(value, data) { //console.log(value,data)
if (!value) return true; return ( data["displayName"].indexOf(value) > -1 || data["simpleCode"].indexOf(value.toUpperCase()) > -1 ); },
// 选择true或取消false 描述
chooseDescription(opraType) { let bfind = false; let result = this.doctorCheck.checkItemList[parseInt(this.tabChoosed)].result; this.description.forEach((e) => { bfind = result.includes(e.description); if (opraType) { if (!bfind) { if (result) { if ( result == this.doctorCheck.checkItemList[parseInt(this.tabChoosed)] .defaultResult ) { result = e.description; } else { result += ";" + e.description; } } else { result = e.description; } } } else { if (bfind) result = result .replaceAll(e.description + ";", "") .replaceAll(e.description, ""); } });
// 去掉 最后的 ;
if (result.substring(result.length - 1) == ";") { result = result.substring(0, result.length - 1); } this.doctorCheck.checkItemList[parseInt(this.tabChoosed)].result = result; },
// 选择true或取消false 结论
chooseConclusion(opraType) { let lfind = 0; let summarys = this.summary.split(";"); this.conclusion.forEach((e) => { lfind = summarys.indexOf(e.conclusion); if (opraType) { if (lfind == -1 && e.isAbnormal == "Y") summarys.push(e.conclusion); } else { if (lfind > -1) summarys.splice(lfind, 1); } }); let summary = "";
// 再次过滤 未见异常 或 未见明显异常
summarys.forEach((e) => { if (!(e.includes("未见异常") || e.includes("未见明显异常"))) { if (summary) { summary += ";" + e; } else { summary = e; } } }); this.summary = summary;
// 没有结论时(取描述)
if(!this.summary){ if(this.doctorCheck.checkItemList.length > 0) this.summary = this.doctorCheck.checkItemList[0].result; } },
//获取pacs结果模板
getPacsTemplateTree() { let resultType = [], resultTemplate = [], treeData = []; postapi("/api/app/BigtextResultType/GetList", { itemTypeId: this.refParams.row.itemTypeId, }) .then((res) => { if (res.code > -1) { resultType = res.data; resultType.forEach((e) => { e.disabled = true; }); return postapi("/api/app/BigtextResultTemplate/GetList", {}); } }) .then((res) => { if (res && res.code > -1) { res.data.forEach((e) => { resultTemplate.push( Object.assign({}, e, { parentId: e.bigtextResultTypeId }) ); }); treeData = resultType.concat(resultTemplate); // console.log('treeData',treeData,resultType,)
this.pacsTemplateTree = madeTree( treeData, "children", "parentId", "id", null ); } }); },
btnTest() { console.log("this.descriptionChoosed", this.descriptionChoosed); console.log("this.conclusionChoosed", this.conclusionChoosed); },
// 清除所有描述与结论
btnClearAll() { this.doctorCheck.checkItemList.forEach((e) => { e.result = ""; }); this.summary = ""; },
// 清除结果
btnClear(seq) { this.doctorCheck.checkItemList[seq].result = ""; },
// 默认结果
btnDefResult(seq) { this.doctorCheck.checkItemList[seq].result = this.doctorCheck.checkItemList[seq].defaultResult; },
// 默认结果
btnDefault() { this.doctorCheck.checkItemList.forEach((e) => { e.result = e.defaultResult; }); this.summary = "未见异常"; },
// 确定
btnOk() { this.refFuncOther(this.refParams.row, this.refParams.index, { result: this.result, summary: this.summary, }); this.dialogWin.PacsTemplate = false; }, },
watch: { filterText(newVal, oldVal) { if (newVal != oldVal) this.$refs["ref_tree"].filter(newVal); },
"refParams.refresh"(newVal, oldVal) { if (newVal && newVal != oldVal) this.init(); },
// 检查明细改变
tabChoosed(newVal, oldVal) { if (newVal && newVal != oldVal) this.conclusion = []; }, },};</script><style lang="scss" scoped>@import "../../assets/css/global_dialog.css";@import "../../assets/css/global_table.css";@import "../../assets/css/global_input.css";@import "../../assets/css/global.css";@import "../../assets/css/global_tree.css";
:deep .el-tree-node > .el-tree-node__children { overflow: visible;}</style>
|