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.
418 lines
14 KiB
418 lines
14 KiB
<template>
|
|
<div>
|
|
<el-table
|
|
:data="doctorCheck.checkItemList"
|
|
style="width: 100%"
|
|
:height="
|
|
window.pageHeight < 600
|
|
? Math.floor(((420 - 40 - (isCheckPicture ? 110:0)) * 3) / 5)
|
|
: Math.floor(((window.pageHeight - 260 - 40 - (isCheckPicture ? 110:0)) * 3) / 5)
|
|
"
|
|
border highlight-current-row
|
|
@row-click="rowClick" size="small"
|
|
>
|
|
<el-table-column prop="itemName" label="项目" width="180" />
|
|
<el-table-column prop="result" label="结果" min-width="200">
|
|
<template slot-scope="scope">
|
|
<el-autocomplete
|
|
style="width: 100%;"
|
|
type="textarea"
|
|
v-model="scope.row.result"
|
|
:fetch-suggestions="querySearch"
|
|
placeholder="请输入结果值"
|
|
@select="handleSelect"
|
|
:disabled="scope.row.isCalculationItem == 'Y' ||
|
|
doctorCheck.RegisterCheckEdit.completeFlag == '1' ||
|
|
doctorCheck.RegisterCheckEdit.completeFlag == '2'
|
|
"
|
|
:autosize="{ minRows: 1, maxRows: 100 }"
|
|
:data-ismultiline="scope.row.isMultiLine"
|
|
@input="madeTooltips(scope.$index)"
|
|
v-bind:class="scope.row.class"
|
|
/>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column prop="unit" label="单位" width="80" align="center"/>
|
|
<el-table-column
|
|
prop="referenceRangeValue"
|
|
label="参考范围"
|
|
width="80" align="center"
|
|
/>
|
|
<el-table-column
|
|
prop="tooltips"
|
|
label="提示"
|
|
width="40" align="center"
|
|
/>
|
|
</el-table>
|
|
</div>
|
|
</template>
|
|
<script>
|
|
// 0-无参考范围,1-数字型,2-字符型,3-性激素
|
|
import { mapState } from "vuex";
|
|
import { getapi, postapi, putapi, deletapi } from "@/api/api";
|
|
import { deepCopy } from '../../utlis/proFunc'
|
|
|
|
export default {
|
|
components: {},
|
|
props:["isCheckPicture","registerCheckId"],
|
|
data() {
|
|
return {
|
|
resultStatus:[], //结果状态提示数据
|
|
tipsNormal:{
|
|
displayName: "正常",
|
|
dataInputPrompt: "正常",
|
|
reportPrompt: "正常",
|
|
reportBackgroundColor: 16777215,
|
|
reportFontColor: 0,
|
|
dataInputBackgroundColor: 16777215,
|
|
dataInputFontColor: 0,
|
|
}, //正常提示
|
|
tipsError:{}, //错误提示
|
|
tipsNegative:{}, //阴性提示
|
|
tipsLowPositive:{}, //弱阳性提示
|
|
tipsPositive:{}, //阳性提示
|
|
tipsLow:{}, //偏低提示
|
|
tipsHigh:{}, //偏高提示
|
|
tipsSuperLow:{}, //超低提示
|
|
tipsSuperHigh:{}, //超高提示
|
|
|
|
restaurants: [], //结果模版
|
|
currentRow: -1, //当前操作的行
|
|
};
|
|
},
|
|
|
|
created() {},
|
|
|
|
//挂载完成
|
|
mounted() {
|
|
this.dictInit()
|
|
},
|
|
|
|
computed: {
|
|
...mapState(["window","dataTransOpts", "dict", "doctorCheck"]),
|
|
},
|
|
|
|
methods: {
|
|
|
|
dictInit(){
|
|
//获取结果状态提示数据
|
|
getapi('/api/app/result-status').then(res =>{
|
|
if(res.code != -1){
|
|
this.resultStatus = res.data.items
|
|
this.resultStatus.forEach(e => {
|
|
if(e.displayName.indexOf("正常") > -1){
|
|
this.colorTrans(e,'tipsNormal')
|
|
}else if(e.displayName.indexOf("错误") > -1){
|
|
this.colorTrans(e,'tipsError')
|
|
}else if(e.displayName.indexOf("阴性") > -1){
|
|
this.colorTrans(e,'tipsNegative')
|
|
}else if(e.displayName.indexOf("弱阳性") > -1){
|
|
this.colorTrans(e,'tipsLowPositive')
|
|
}else if(e.displayName.indexOf("阳性") > -1){
|
|
this.colorTrans(e,'tipsPositive')
|
|
}else if(e.displayName.indexOf("偏低") > -1){
|
|
this.colorTrans(e,'tipsLow')
|
|
}else if(e.displayName.indexOf("偏高") > -1){
|
|
this.colorTrans(e,'tipsHigh')
|
|
}else if(e.displayName.indexOf("危急值下限") > -1){
|
|
this.colorTrans(e,'tipsSuperLow')
|
|
}else if(e.displayName.indexOf("危急值上限") > -1){
|
|
this.colorTrans(e,'tipsSuperHigh')
|
|
}
|
|
});
|
|
}
|
|
})
|
|
},
|
|
|
|
// 颜色转换
|
|
// displayName: "错误",
|
|
// dataInputPrompt: "×",
|
|
// reportPrompt: "×",
|
|
// reportBackgroundColor: 2427166,
|
|
// reportFontColor: 1070166,
|
|
// dataInputBackgroundColor: 321313,
|
|
// dataInputFontColor: 12991019,
|
|
colorTrans(dataColor,frontColor){
|
|
let tempColor = '000000' + Number(dataColor.dataInputBackgroundColor).toString(16)
|
|
let backgroundColor = '#' + tempColor.substring(tempColor.length - 6)
|
|
tempColor = '000000' + Number(dataColor.dataInputFontColor).toString(16)
|
|
let color = '#' + tempColor.substring(tempColor.length - 6)
|
|
this[frontColor] = Object.assign(
|
|
{},
|
|
dataColor,
|
|
{backgroundColor,color}
|
|
)
|
|
console.log(`this.${frontColor}`,this[frontColor])
|
|
},
|
|
|
|
// "referenceRangeValue": "15-55",
|
|
// "referenceRangeTypeFlag": "1",
|
|
// "criticalRangeValue": null,
|
|
// "result"
|
|
madeTooltips(index){
|
|
// let ts = confirm('提示')
|
|
let checkItem = this.doctorCheck.checkItemList[index]
|
|
let tooltips = 'tipsNormal'
|
|
checkItem.class = tooltips
|
|
let referenceRangeTypeFlag = checkItem.referenceRangeTypeFlag||'0' //参考范围类别0-无参考范围,1-数字型,2-字符型,3-性激素
|
|
// console.log('madeTooltips',index,referenceRangeTypeFlag)
|
|
switch (referenceRangeTypeFlag) {
|
|
case '3': // 1 是数字型,3 是性激素期
|
|
case '1':
|
|
// console.log('1、3')
|
|
if(checkItem.result && checkItem.referenceRangeValue){
|
|
let tempResult = checkItem.result.replaceAll('<','').replaceAll('>','').replaceAll('=','').replaceAll('≤','').replaceAll('≥','').replaceAll(' ','')
|
|
// console.log('tempResult',isNaN(tempResult),tempResult)
|
|
if(isNaN(tempResult)) break;
|
|
let result = Number(tempResult)
|
|
let criticalRangeValue = checkItem.criticalRangeValue
|
|
let valueArr = checkItem.referenceRangeValue.split('-')
|
|
if(valueArr.length == 1) valueArr.unshift(0)
|
|
// console.log('valueArr',checkItem.referenceRangeValue,valueArr)
|
|
if(criticalRangeValue){
|
|
let criticalArr = criticalRangeValue.split('-')
|
|
if(criticalArr.length == 1) criticalArr.unshift(0)
|
|
|
|
// console.log('criticalArr',checkItem.criticalRangeValue,criticalArr)
|
|
|
|
if(result < Number(criticalArr[0])){
|
|
tooltips = 'tipsSuperLow'
|
|
}else if(result > Number(criticalArr[1])){
|
|
tooltips = 'tipsSuperHigh'
|
|
}else if(result < Number(valueArr[0])){
|
|
tooltips = 'tipsLow'
|
|
}else if(result > Number(valueArr[1])){
|
|
tooltips = 'tipsHigh'
|
|
}
|
|
}else{
|
|
if(result < Number(valueArr[0])){
|
|
tooltips = 'tipsLow'
|
|
}else if(result > Number(valueArr[1])){
|
|
tooltips = 'tipsHigh'
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case '2':
|
|
if(checkItem.result){
|
|
if(checkItem.result.indexOf('阴性') > -1 || checkItem.result.indexOf('-') > -1){
|
|
tooltips = 'tipsNegative'
|
|
}else if(checkItem.result.indexOf('弱阳性') > -1 || checkItem.result.indexOf('±') > -1){
|
|
tooltips = 'tipsLowPositive'
|
|
}else if(checkItem.result.indexOf('阳性') > -1 || checkItem.result.indexOf('+') > -1){
|
|
tooltips = 'tipsPositive'
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
// 判断后重新赋值
|
|
checkItem.class = tooltips
|
|
checkItem.tooltips = this[tooltips].dataInputPrompt
|
|
|
|
// console.log('checkItem',checkItem)
|
|
// console.log(`this.${tooltips}`,this[tooltips])
|
|
},
|
|
|
|
//选择项目
|
|
rowClick(row) {
|
|
this.doctorCheck.checkItem = row;
|
|
this.restaurants = row.itemResultTemplates;
|
|
},
|
|
|
|
//检查组合项目下所包含的明细项目
|
|
checkItemList(RegisterCheckId) {
|
|
// this.doctorCheck.checkItem = null
|
|
if(!RegisterCheckId){
|
|
this.doctorCheck.checkItemList = []
|
|
return
|
|
}
|
|
console.log(
|
|
`/api/app/registercheckitem/getlistinregistercheckid?RegisterCheckId=${RegisterCheckId}`
|
|
);
|
|
getapi(
|
|
`/api/app/registercheckitem/getlistinregistercheckid?RegisterCheckId=${RegisterCheckId}`
|
|
)
|
|
.then((res) => {
|
|
// console.log("checkItemList", res.data);
|
|
if (res.code == 1) {
|
|
this.doctorCheck.checkItemList = res.data;
|
|
this.doctorCheck.checkItemList.forEach((e,i) => {
|
|
this.madeTooltips(i)
|
|
});
|
|
this.enterToTab();
|
|
}
|
|
})
|
|
.catch((err) => {
|
|
this.$message({ type: "error", message: `操作失败,原因:${err}` });
|
|
});
|
|
},
|
|
|
|
querySearch(queryString, cb) {
|
|
var restaurants = deepCopy(this.restaurants); //[{ value: '阴性' },{ value: '阳性' }]
|
|
restaurants.forEach((item) => {
|
|
return (item.value = item.result);
|
|
});
|
|
// console.log("restaurants", restaurants);
|
|
var results = queryString
|
|
? restaurants.filter(this.createFilter(queryString))
|
|
: restaurants;
|
|
// 调用 callback 返回建议列表的数据
|
|
cb(results);
|
|
},
|
|
|
|
createFilter(queryString) {
|
|
return (restaurant) => {
|
|
return (
|
|
restaurant["value"]
|
|
.toLowerCase()
|
|
.indexOf(queryString.toLowerCase()) === 0
|
|
);
|
|
};
|
|
},
|
|
handleSelect(item) {
|
|
console.log('item',item);
|
|
},
|
|
|
|
//回车替代tab键
|
|
enterToTab() {
|
|
// console.log('enterToTab');
|
|
this.$nextTick(() => {
|
|
let inputs = document.querySelectorAll(["textarea","input"]); //用数组可以读取多个标签的元素 //.inline-input
|
|
|
|
// 为每个输入框添加键盘事件监听器
|
|
inputs.forEach((input,i) => {
|
|
// console.log('input',input);
|
|
input.addEventListener('keydown', (event) => {
|
|
|
|
// 如果按下的是回车键
|
|
// console.log('data-ismultiline',input.getAttribute('data-ismultiline'));
|
|
|
|
if (event.keyCode === 13 && input.getAttribute('data-ismultiline') == '0') {
|
|
// 阻止回车键的默认行为(换行)
|
|
event.preventDefault();
|
|
// 获取当前输入框的下一个兄弟元素
|
|
// let nextInput = input.nextElementSibling();
|
|
// console.log('nextInput',nextInput,this);
|
|
// // 如果存在下一个兄弟元素,将焦点移到下一个输入框
|
|
// if (nextInput) {
|
|
// nextInput.focus();
|
|
// }
|
|
// console.log('inputs[i+1]',inputs[i+1]);
|
|
// console.log('disabled',inputs[i+1].getAttribute('disabled'));
|
|
// console.log('class',inputs[i+1].getAttribute('class'));
|
|
for(let j=i+1; j<inputs.length;j++){
|
|
if(inputs[j].getAttribute('disabled') != "disabled" ){
|
|
inputs[j].focus();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
});
|
|
});
|
|
});
|
|
},
|
|
|
|
},
|
|
|
|
//监听事件
|
|
watch: {
|
|
//检查项目切换
|
|
// "doctorCheck.RegisterCheckId":{
|
|
// immediate:true,
|
|
// handler(newVal, oldVal) {
|
|
// console.log(
|
|
// "watch doctorCheck.RegisterCheckId newVal:",
|
|
// newVal,
|
|
// " oldVal:",
|
|
// oldVal
|
|
// );
|
|
// this.checkItemList(newVal);
|
|
// }
|
|
// },
|
|
|
|
//检查项目未切换换时 也可以强制刷新数据
|
|
"dataTransOpts.refresh.register_check_item":{
|
|
immediate:true,
|
|
handler(newVal, oldVal) {
|
|
console.log(`watch dataTransOpts.refresh.register_check_item newVal:${newVal} oldVal:${oldVal} registerCheckId: ${this.registerCheckId}`);
|
|
this.checkItemList(this.registerCheckId);
|
|
}
|
|
},
|
|
},
|
|
};
|
|
</script>
|
|
<style lang="scss" scoped>
|
|
@import "../../assets/css/global.css";
|
|
|
|
::v-deep .el-table td.el-table__cell,
|
|
.el-table th.el-table__cell.is-leaf {
|
|
padding: 0;
|
|
}
|
|
|
|
::v-deep .el-textarea__inner {
|
|
min-height: 23px;
|
|
height: 23px;
|
|
line-height: 1.25;
|
|
padding: 2px 15px 2px 2px;
|
|
}
|
|
|
|
/*正常*/
|
|
::v-deep .tipsNormal .el-textarea__inner {
|
|
background-color: v-bind("tipsNormal.backgroundColor") !important;
|
|
color: v-bind("tipsNormal.color") !important;
|
|
}
|
|
/*错误*/
|
|
::v-deep .tipsError .el-textarea__inner {
|
|
background-color: v-bind("tipsError.backgroundColor") !important;
|
|
color: v-bind("tipsError.color") !important;
|
|
}
|
|
|
|
/*阴性 v-bind("(window.pageHeight > 600 ? (window.pageHeight - 250) : 350) + 'px'") */
|
|
::v-deep .tipsNegative .el-textarea__inner {
|
|
background-color: v-bind("tipsNegative.backgroundColor") !important;
|
|
color: v-bind("tipsNegative.color") !important;
|
|
}
|
|
|
|
/*弱阳性 v-bind("(window.pageHeight > 600 ? (window.pageHeight - 250) : 350) + 'px'") */
|
|
::v-deep .tipsLowPositive .el-textarea__inner {
|
|
background-color: v-bind("tipsLowPositive.backgroundColor") !important;
|
|
color: v-bind("tipsLowPositive.color") !important;
|
|
}
|
|
|
|
/*阳性 v-bind("(window.pageHeight > 600 ? (window.pageHeight - 250) : 350) + 'px'") */
|
|
::v-deep .tipsPositive .el-textarea__inner {
|
|
background-color: v-bind("tipsPositive.backgroundColor") !important;
|
|
color: v-bind("tipsPositive.color") !important;
|
|
}
|
|
|
|
/*偏低 v-bind("(window.pageHeight > 600 ? (window.pageHeight - 250) : 350) + 'px'") */
|
|
::v-deep .tipsLow .el-textarea__inner {
|
|
background-color: v-bind("tipsLow.backgroundColor") !important;
|
|
color: v-bind("tipsLow.color") !important;
|
|
}
|
|
|
|
/*偏高 v-bind("(window.pageHeight > 600 ? (window.pageHeight - 250) : 350) + 'px'") */
|
|
::v-deep .tipsHigh .el-textarea__inner {
|
|
background-color: v-bind("tipsHigh.backgroundColor") !important;
|
|
color: v-bind("tipsHigh.color") !important;
|
|
}
|
|
|
|
/*超低 v-bind("(window.pageHeight > 600 ? (window.pageHeight - 250) : 350) + 'px'") */
|
|
::v-deep .tipsSuperLow .el-textarea__inner {
|
|
background-color: v-bind("tipsSuperLow.backgroundColor") !important;
|
|
color: v-bind("tipsSuperLow.color") !important;
|
|
}
|
|
|
|
/*偏高 v-bind("(window.pageHeight > 600 ? (window.pageHeight - 250) : 350) + 'px'") */
|
|
::v-deep .tipsSuperHigh .el-textarea__inner {
|
|
background-color: v-bind("tipsSuperHigh.backgroundColor") !important;
|
|
color: v-bind("tipsSuperHigh.color") !important;
|
|
}
|
|
|
|
|
|
</style>
|
|
|
|
|