3 changed files with 516 additions and 238 deletions
-
2src/components/doctorCheck/CheckItemList.vue
-
304src/components/doctorCheck/PacsTemplate.vue
-
448src/components/doctorCheck/PacsTemplateBak.vue
@ -0,0 +1,448 @@ |
|||
<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> |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue