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