You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

448 lines
13 KiB

<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>