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.
356 lines
13 KiB
356 lines
13 KiB
<template>
|
|
<div style="display: flex;">
|
|
<div :style="`width: 258px;height:${mainHeight}px;border: 1px solid #EEE;`">
|
|
<div style="margin:2px 2px 2px 2px;">
|
|
<el-input placeholder="输入关键字进行过滤" v-model="filterText" size="small" />
|
|
</div>
|
|
<div>
|
|
<el-tree :style="`overflow: scroll;width: 200px;height:${mainHeight - 40}px;`" :data="pacsTemplateTree"
|
|
:props="treeprops" @node-click="handleNode" :filter-node-method="filterNode" :expand-on-click-node="false"
|
|
highlight-current ref="ref_tree">
|
|
<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:${window.pageWidth - 200 - 30}px; margin-left: 5px;`">
|
|
<div style="display: flex;">
|
|
<div :style="`width: ${window.pageWidth - 200 - 30 - 250}px;`">
|
|
<el-table :data="description" border :height="tableHeight" highlight-current-row
|
|
@selection-change="selectionChangeDes" size="small" ref="ref_description">
|
|
<el-table-column type="selection" width="40" align="center" />
|
|
<el-table-column prop="description" label="描述" min-width="400" />
|
|
<el-table-column prop="conclusion" label="结论" min-width="150" align="center" />
|
|
</el-table>
|
|
</div>
|
|
<div style="width: 240px;margin-left: 5px;">
|
|
<el-table :data="conclusionAll" border :height="tableHeight" highlight-current-row
|
|
@selection-change="selectionChangeCon" size="small" ref="ref_conclusion">
|
|
<el-table-column type="selection" width="40" align="center" />
|
|
<el-table-column prop="conclusion" label="结论" min-width="150" />
|
|
</el-table>
|
|
</div>
|
|
</div>
|
|
<div style="margin-top: 5px;">
|
|
<span>检查结果:</span>
|
|
<el-input style="width: 100%;" type="textarea" v-model="result" placeholder="请输入描述"
|
|
:autosize="{ minRows: 6, maxRows: 6 }" />
|
|
</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: 4, maxRows: 4 }" />
|
|
</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-button type="primary" @click="btnClear" class="commonbutton">清除</el-button>
|
|
<el-button type="primary" @click="btnDefault" class="commonbutton">默认结果</el-button>
|
|
<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",
|
|
}, //树形组件的数据结构
|
|
newQuery: 0, // 0 表示新查询,新查询不执行 selectionChangeDes 的取消查询动作
|
|
};
|
|
},
|
|
//<el-tree :data="$store.state.customerOrg.ref_tree" :props="$store.state.customerOrg.treeprops" @node-click="treeclick"></el-tree>
|
|
computed: {
|
|
...mapState(["window", "dialogWin"]),
|
|
|
|
mainHeight() {
|
|
return this.window.pageHeight - 118;
|
|
},
|
|
|
|
tableHeight() {
|
|
return this.mainHeight - 120 - 80 - 80;
|
|
},
|
|
},
|
|
//创建组件后
|
|
created() {
|
|
|
|
},
|
|
|
|
|
|
//挂载组件完成
|
|
mounted() {
|
|
//获取体检单位列表树信息
|
|
this.getPacsTemplateTree();
|
|
this.init()
|
|
},
|
|
|
|
methods: {
|
|
// 初始化数据
|
|
init() {
|
|
this.btnClear()
|
|
this.description = []
|
|
this.result = this.refParams.result || ''
|
|
this.summary = this.refParams.summary || ''
|
|
},
|
|
|
|
//树过滤
|
|
filterNode(value, data) {
|
|
//console.log(value,data)
|
|
if (!value) return true;
|
|
return data['displayName'].indexOf(value) > -1;
|
|
},
|
|
|
|
//获取pacs结果模板
|
|
getPacsTemplateTree() {
|
|
let resultType = [], resultTemplate = [], treeData = []
|
|
|
|
postapi('/api/app/BigtextResultType/GetList')
|
|
.then(res => {
|
|
if (res.code > -1) {
|
|
resultType = res.data
|
|
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)
|
|
}
|
|
})
|
|
},
|
|
|
|
//点击树节点
|
|
handleNode(data, node, prop) {
|
|
let ids = getTreeAllChildIdsById(this.pacsTemplateTree, "children", "id", data.id)
|
|
ids.unshift(data.id) // 加入自身节点
|
|
|
|
// hadoopPost('pacsApi', '/api/app/BigtextResultTemplate/GetBigtextResultTemplateDetail', { bigtextResultTemplateIds: ids })
|
|
postapi('/api/app/BigtextResultTemplate/GetBigtextResultTemplateDetail', { bigtextResultTemplateIds: ids })
|
|
.then(res => {
|
|
if (res.code > -1) {
|
|
this.newQuery = 0
|
|
this.description = res.data.descriptionDetail
|
|
this.conclusion = res.data.conclusionDetail
|
|
let lfind = -1
|
|
this.description.forEach((e, i) => {
|
|
let conclusion = this.conclusion.filter(c => {
|
|
return c.bigtextResultTemplateId == e.bigtextResultTemplateId
|
|
})
|
|
e["conclusion"] = ""
|
|
e["conclusionList"] = []
|
|
conclusion.forEach(c => {
|
|
e["conclusionList"].push(c)
|
|
});
|
|
if (conclusion.length == 1) e["conclusion"] = conclusion[0].conclusion
|
|
|
|
// 初始选中状态
|
|
lfind = arrayExistObj(this.descriptionChoosed, "description", e.description)
|
|
if (lfind > -1) {
|
|
// console.log('this.descriptionChoosed refresh', deepCopy(this.descriptionChoosed))
|
|
this.$nextTick(() => {
|
|
this.$refs['ref_description'].toggleRowSelection(this.description[i], true)
|
|
})
|
|
}
|
|
});
|
|
}
|
|
})
|
|
|
|
},
|
|
|
|
|
|
// 选择描述
|
|
selectionChangeDes(v) {
|
|
this.newQuery++
|
|
let lfind = 0
|
|
v.forEach(e => {
|
|
lfind = arrayExistObj(this.descriptionChoosed, "description", e.description)
|
|
if (lfind == -1) {
|
|
this.descriptionChoosed.push(e)
|
|
}
|
|
|
|
e.conclusionList.forEach(c => {
|
|
lfind = arrayExistObj(this.conclusionAll, "conclusion", c.conclusion)
|
|
if (lfind == -1) this.conclusionAll.push(c)
|
|
});
|
|
// 单个结论时,直接选中结论,多个则将结论添加至待选结论
|
|
if (e.conclusion) {
|
|
lfind = arrayExistObj(this.conclusionAll, "conclusion", e.conclusion)
|
|
// console.log(lfind, e)
|
|
if (lfind > -1) {
|
|
this.$refs['ref_conclusion'].toggleRowSelection(this.conclusionAll[lfind], true)
|
|
}
|
|
}
|
|
|
|
if (this.result) {
|
|
if (!this.result.includes(e.description)) this.result += ';' + e.description
|
|
} else {
|
|
this.result = e.description
|
|
}
|
|
});
|
|
|
|
// 这一次没选中的在上一次的选中当中,说明取消选择
|
|
if (this.newQuery > 1) {
|
|
let unChooseed = arrayReduce(deepCopy(this.description), v, "description=description")
|
|
// console.log('this.descriptionChoosedPre,unChooseed', deepCopy(this.descriptionChoosedPre), unChooseed)
|
|
unChooseed.forEach(e => {
|
|
lfind = arrayExistObj(this.descriptionChoosedPre, "description", e.description)
|
|
if (lfind > -1) {
|
|
lfind = arrayExistObj(this.descriptionChoosed, "description", e.description)
|
|
if (lfind > -1) this.descriptionChoosed.splice(lfind, 1)
|
|
|
|
if (this.result.includes(e.description)) this.result = this.result.replaceAll(e.description + ";", "").replaceAll(e.description, "")
|
|
if (e.conclusion) {
|
|
lfind = arrayExistObj(this.conclusionAll, "conclusion", e.conclusion)
|
|
if (lfind > -1) this.$refs['ref_conclusion'].toggleRowSelection(this.conclusionAll[lfind], false)
|
|
}
|
|
}
|
|
});
|
|
}
|
|
this.descriptionChoosedPre = deepCopy(v)
|
|
if (this.result) {
|
|
if (this.result.substring(this.result.length - 1, this.result.length) == ";") this.result = this.result.substring(0, this.result.length - 1)
|
|
}
|
|
},
|
|
|
|
// 选择结论(取消选择)
|
|
selectionChangeCon(v) {
|
|
let summarys = []
|
|
v.forEach(e => {
|
|
if (this.summary) {
|
|
summarys = this.summary.split(";")
|
|
if (summarys.indexOf(e.conclusion) == -1) this.summary += ';' + e.conclusion
|
|
} else {
|
|
this.summary = e.conclusion
|
|
}
|
|
});
|
|
// if(this.summary && this.summary.substring())
|
|
|
|
// 取消选择时
|
|
let lfind = -1
|
|
let unChooseed = arrayReduce(deepCopy(this.conclusionAll), v, "conclusion=conclusion")
|
|
unChooseed.forEach(e => {
|
|
if (this.summary) {
|
|
summarys = this.summary.split(";")
|
|
lfind = summarys.indexOf(e.conclusion)
|
|
if (lfind > -1) summarys.splice(lfind, 1)
|
|
this.summary = ''
|
|
summarys.forEach((c, i) => {
|
|
if (i == 0) {
|
|
this.summary = c
|
|
} else {
|
|
this.summary += ";" + c
|
|
}
|
|
});
|
|
}
|
|
});
|
|
},
|
|
|
|
btnTest() {
|
|
console.log('this.descriptionChoosed', this.descriptionChoosed)
|
|
console.log('this.conclusionChoosed', this.conclusionChoosed)
|
|
},
|
|
|
|
// 清除所选描述与结论
|
|
btnClear() {
|
|
this.result = ''
|
|
this.summary = ''
|
|
this.descriptionChoosed = []
|
|
this.$refs['ref_description'].clearSelection();
|
|
|
|
this.conclusionChoosed = []
|
|
this.conclusionAll = []
|
|
this.$refs['ref_conclusion'].clearSelection();
|
|
},
|
|
|
|
// 默认结果
|
|
btnDefault() {
|
|
this.btnClear()
|
|
this.result = this.refParams.row.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.row.itemId"(newVal, oldVal) {
|
|
if (newVal != oldVal) this.init();
|
|
},
|
|
|
|
"refParams.result"(newVal, oldVal) {
|
|
if (newVal != oldVal){
|
|
console.log("refParams.result",newVal, oldVal)
|
|
this.result = newVal
|
|
}
|
|
},
|
|
|
|
"refParams.summary"(newVal, oldVal) {
|
|
if (newVal != oldVal){
|
|
console.log("refParams.summary",newVal, oldVal)
|
|
this.summary = newVal
|
|
}
|
|
},
|
|
},
|
|
};
|
|
</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>
|