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

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