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.
 
 
 

552 lines
19 KiB

<template>
<div @contextmenu="onContextmenu">
<div style="display: flex; flex-wrap: wrap;height:70px; width: 100%;overflow-y: auto;">
<div>
<span class="query">条码号</span>
<el-input ref="tmh" placeholder="条码号" v-model="prBase.patientRegisterNo" size="small" style="width: 120px;"
clearable />
</div>
<div>
<el-tooltip content="点击显示该人员调查问卷信息" placement="top">
<el-button type="primary" style="margin-left: 5px;margin-top: 3px; height: 22px;padding: 2px 2px;"
@click="btnQuestion">档案号</el-button>
</el-tooltip>
<el-input placeholder="档案号" v-model="prBase.patientNo" size="small" style="width: 90px;" clearable />
</div>
<div>
<span class="query">姓名</span>
<el-input placeholder="姓名" v-model="prBase.patientName" size="small" style="width: 100px;" clearable />
</div>
<div>
<span class="query">检查条码</span>
<el-input placeholder="检查条码" v-model="prBase.pacsNo" size="small" style="width: 120px;" clearable />
</div>
<div>
<span class="query">检验条码</span>
<el-input placeholder="检验条码" v-model="prBase.lisNo" size="small" style="width: 120px;" clearable />
</div>
<div>
<el-button type="primary" style="margin-left: 5px;margin-top: 3px; height: 22px;padding: 2px 2px;"
@click="readIdCard">读身份证</el-button>
<el-input placeholder="身份证号" v-model="prBase.idNo" size="small" style="width: 150px;" clearable />
</div>
<div>
<span class="query">手机</span>
<el-input placeholder="手机号" v-model="prBase.mobileTelephone" style="width: 120px;" size="small" clearable />
</div>
<div>
<span class="query">性别</span>
<!--
<el-select v-model="prBase.sexId" style="width: 80px;" size="small" disabled>
<el-option v-for="item in dict.sex" :key="item.id" :label="item.displayName" :value="item.id" />
</el-select>
-->
<el-input v-model="prBase.sexName" size="small" style="width: 40px;" disabled />
</div>
<div>
<span class="query">年龄</span>
<el-input v-model="prBase.age" size="small" style="width: 40px;" disabled />
</div>
<div>
<span class="query">体检次数</span>
<el-input v-model="prBase.medicalTimes" size="small" style="width: 40px;" disabled />
</div>
<div>
<span class="query">婚姻</span>
<!--
<el-select v-model="prBase.maritalStatusId" style="width: 80px;" size="small" disabled>
<el-option v-for="item in dict.maritalStatus" :key="item.id" :label="item.displayName" :value="item.id" />
</el-select>
-->
<el-input v-model="prBase.maritalStatusName" size="small" style="width: 40px;" disabled />
</div>
<div>
<span class="query">体检日期</span>
<el-input :value="prBase.medicalStartDate ? lmoment(prBase.medicalStartDate, 'yyyy-MM-DD') : ''"
style="width: 100px;" size="small" disabled></el-input>
</div>
<div>
<span class="query">单位</span>
<el-input v-model="prBase.customerOrgParentName" style="width: 150px;" size="small" disabled />
</div>
<div>
<span class="query">部门</span>
<el-input v-model="prBase.customerOrgName" style="width: 120px;" size="small" disabled />
</div>
<div>
<span class="query">体检类别</span>
<!--
<el-select v-model="prBase.medicalTypeId" disabled style="width: 100px;" size="small">
<el-option v-for="item in dict.medicalType" :key="item.id" :label="item.displayName" :value="item.id" />
</el-select>
-->
<el-input v-model="prBase.medicalTypeName" style="width: 100px;" size="small" disabled />
</div>
<div>
<span class="query">人员类别</span>
<!--
<el-select v-model="prBase.personnelTypeId" disabled style="width: 100px;" size="small">
<el-option v-for="item in dict.personnelType" :key="item.id" :label="item.displayName" :value="item.id" />
</el-select>
-->
<el-input v-model="prBase.personnelTypeName" style="width: 100px;" size="small" disabled />
</div>
<div>
<span class="query">民族</span>
<!--
<el-select v-model="prBase.nationId" disabled style="width: 100px;" size="small">
<el-option v-for="item in dict.nation" :key="item.id" :label="item.displayName" :value="item.id" />
</el-select>
-->
<el-input v-model="prBase.nationName" style="width: 80px;" size="small" disabled />
</div>
</div>
<!-- 体检人员记录列表 -->
<el-dialog title="体检人员列表" :visible.sync="dialogWin.PatientRegisterForChoose" width="800px" :show-close="false"
:close-on-click-modal="false" :append-to-body="true">
<PatientRegisterForChoose :params="PatientRegisterList" @chooseBak="chooseBak" />
</el-dialog>
<el-dialog title="调查问卷" :visible.sync="dialogWin.question" width="800px" :close-on-click-modal="false"
:append-to-body="true">
<Question :refParams="questionParams" />
</el-dialog>
</div>
</template>
<script>
import moment from "moment";
import { mapState, mapMutations } from "vuex";
import { getapi, postapi, putapi, deletapi } from "@/api/api";
import { dddw, deepCopy, objCopy, opjCopy, parsIcCardtoLocal } from '../../utlis/proFunc'
import PatientRegisterForChoose from "../../components/patientRegister/PatientRegisterForChoose.vue";
import Question from "../../components/doctorCheck/Question.vue";
export default {
components: {
PatientRegisterForChoose, Question
},
props: ["refParams"],
data() {
return {
dialogVisible: false,
prBase: {
id: '', //体检登记ID
patientRegisterNo: '', //条码号
pacsNo: '', //
lisNo: '',
patientNo: '', //档案号
patientName: '', //姓名
sexId: '', //性别
sexName: '', //性别
idNo: '', // 身份证号
age: '', // 年龄
medicalTimes: '', //体检次数
maritalStatusId: '', //婚姻
maritalStatusName: '', //婚姻
medicalStartDate: '', //体检日期
customerOrgParentName: '', //单位
customerOrgName: '', //部门
medicalTypeId: '', //体检类别
medicalTypeName: '', //体检类别
personnelTypeId: '', //人员类别
personnelTypeName: '', //人员类别
nationId: '', //民族
nationName: '', //民族
mobileTelephone: '', //手机
},
prBaseInit: {},
PatientRegisterList: [], // 参数
userId: '',
// 调查问卷参数
questionParams: {
idNo: '', // 身份证号
refresh: 0, // 刷新调查问卷
}
};
},
created() {
this.prBaseInit = deepCopy(this.prBase)
},
//挂载完成
mounted() {
// 监听来自 Electron 的调用 右击事件
if (this.$peisAPI) {
try {
this.$peisAPI.onContextMenuAction((data) => {
this.onContextMenuDIY(data)
});
} catch (error) {
console.error(error)
}
}
// 回车替代查询
this.enterToQuery()
this.userId = window.sessionStorage.getItem("userId")
//获取体检登记信息 (检查医生诊台 与 总检医生诊台 切换时用到)
this.getPatientRegister(this.prBase.patientRegisterNo)
this.$nextTick(() => {
this.$refs['tmh'].focus(); //打开光标定位到条码栏里
});
},
computed: {
...mapState(["dict", "dialogWin", "dataTransOpts", "doctorCheck", "sumDoctorCheck"]),
},
methods: {
...mapMutations(['doctorCheckPrBaseInit', 'sumPREditInit']),
dddw, moment,
// 选择人员返回
chooseBak(chooseData) {
console.log('chooseBak', chooseData)
this.prBase.patientRegisterNo = chooseData.patientRegisterNo
this.onQueryByOnlyNo('patientRegisterNo')
},
//查询后触发相关信息处理
afterFind(rd) {
this.$emit("triggerQuery", rd)
},
btnQuestion() {
if (!this.prBase.idNo) {
this.$message.warning({ showClose: true, message: '该人员无身份证号,无调查问卷!' })
return
}
this.dialogWin.question = true
this.questionParams.idNo = this.prBase.idNo
this.questionParams.refresh++
},
//读身份证
readIdCard() {
if (!this.$peisAPI) {
this.$message.info({ showClose: true, message: "此功能,需要在壳客户端才可运行!" })
return
}
this.$peisAPI.peopleIcCard().then(res => {
console.log('peopleIcCard', res)
let lres = JSON.parse(res)
if (lres.code > -1) {
let idNos = parsIcCardtoLocal(lres.data, this.dict.sex, this.dict.nation)
this.prBase.patientName = idNos.Name
this.prBase.idNo = idNos.IDCode
this.onQueryByOnlyNo('idNo')
} else {
this.$message.error({ showClose: true, message: lres.message })
}
})
.catch(err => {
this.$message.error({ showClose: true, message: `读取身份证失败,原因:${err}` })
})
},
// 根据pacs条码查询
onQueryByPacsNo(checkRequestNo) {
postapi('/api/app/PatientRegister/GetPatientRegisterNoByCheckRequestNo', { checkRequestNo }).then(res => {
if (res.code > 0) {
this.prBase.patientRegisterNo = res.data.patientRegisterNo
this.onQueryByOnlyNo('patientRegisterNo', 'pacsNo')
}
})
},
// 根据lis条码查询
onQueryByLisNo(lisRequestNo) {
postapi('/api/app/PatientRegister/GetPatientRegisterNoByLisRequestNo', { lisRequestNo }).then(res => {
if (res.code > 0) {
this.prBase.patientRegisterNo = res.data.patientRegisterNo
this.onQueryByOnlyNo('patientRegisterNo', 'lisNo')
}
})
},
//按条码号、档案、身份证 查个人数据
// noType -- 查询关键值字段名
// storeCol -- 保留字段值不刷新(用检查条码与检验条码查时)
onQueryByOnlyNo(noType, storeCol) {
let noVal = this.prBase[noType] //唯一号的值
if (!noVal) return
let body = {}
if (noType == 'idNo') noVal = noVal.toUpperCase()
body[noType] = noVal
let storeObj = {}
let patientRegister = { id: '' }
if (storeCol) storeObj[storeCol] = this.prBase[storeCol]
patientRegister[noType] = noVal
this.prBase = deepCopy(patientRegister)
postapi('/api/app/patientregister/GetAlreadyRegisterPatientRegisterByNo', body)
.then((res) => {
if (res.code > -1) {
this.prBase = Object.assign({},this.prBase, res.data, storeObj)
// ---------- 如果是总检与审核医生不可选时,则总检与审核默认当前用户,此功能放至保存时触发
if (this.prBase.completeFlag != '3') this.prBase.summaryDoctorId = this.prBase.summaryDoctorId || this.userId
if (this.prBase.completeFlag == '3' && this.prBase.isAudit == 'N') {
this.prBase.auditDoctorId = this.prBase.auditDoctorId || this.userId
}
// ----------
console.log('res.data',res.data)
console.log('this.prBase',this.prBase)
console.log('storeObj',storeObj)
}
this.afterFind(this.prBase)
});
},
//按手机号或姓名查找客户信息
onQueryByNotOnlyNo(valType) {
let noVal = this.prBase[valType] //唯一号的值
if (!noVal) return
let body = {
isFilterPreRegistration: 'Y' //是否需要过滤预登记数据 Y=过滤预登记数据 N=不过滤 默认为N (备注:只有CompleteFlag参数的值不为0的情况才有效,null值也有效)
}
let noType = valType
if (valType == 'mobileTelephone') noType = 'phone'
body[noType] = noVal
let patientRegister = { id: '' }
patientRegister[valType] = noVal
this.prBase = deepCopy(patientRegister)
postapi('/api/app/patientregister/getlistinfilter', body)
.then(res => {
if (res.code > -1) {
if (res.data.items.length == 1) {
this.prBase = res.data.items[0]
if (this.prBase.completeFlag != '3') this.prBase.summaryDoctorId = this.userId
if (this.prBase.completeFlag == '3' && this.prBase.isAudit == 'N') {
this.prBase.auditDoctorId = this.userId
}
this.dataTransOpts.refresh.patient_register.S++
// this.getPatientRegister(res.data.items[0].id)
} else if (res.data.items.length > 1) {
this.PatientRegisterList = res.data.items
if (Array.isArray(this.PatientRegisterList) && this.PatientRegisterList.length > 0) {
this.PatientRegisterList.forEach(e => {
e.groupPack = e.medicalPackageName || e.customerOrgGroupName
e.org = e.customerOrgParentName || e.customerOrgName
e.dept = e.customerOrgParentName == e.customerOrgName ? '' : e.customerOrgName
});
}
this.dialogWin.PatientRegisterForChoose = true // 弹窗
this.dataTransOpts.plus.PatientRegisterForChoose++
} else {
this.afterFind(this.prBase)
}
}
})
},
//根据patientRegisterNo 获取 人员信息
getPatientRegister(patientRegisterNo) {
// this.afterFind({ id: '', patientRegisterNo: '' })
if (!patientRegisterNo) return
let body = { patientRegisterNo }
postapi('/api/app/patientregister/GetAlreadyRegisterPatientRegisterByNo', body)
.then((res) => {
if (res.code > -1) {
this.prBase = res.data
if (this.prBase.completeFlag != '3') this.prBase.summaryDoctorId = this.userId
if (this.prBase.completeFlag == '3' && this.prBase.isAudit == 'N') {
this.prBase.auditDoctorId = this.userId
}
}
})
.finally(() => {
this.afterFind(this.prBase)
});
},
lmoment(date, forMat) {
return moment(new Date(date)).format(forMat);
},
//回车替代查询
enterToQuery() {
// console.log('enterToTab');
this.$nextTick(() => {
let inputs = document.querySelectorAll(["input"]); //用数组可以读取多个标签的元素 //.inline-input
// 为每个输入框添加键盘事件监听器
inputs.forEach((input, i) => {
// console.log('input',input);
input.addEventListener('keydown', (event) => {
if (event.keyCode === 13) {
// 阻止回车键的默认行为(换行)
event.preventDefault();
// 如果按下的是回车查询
console.log(input.getAttribute('placeholder'), input.value)
let placeholder = input.getAttribute('placeholder')
switch (placeholder) {
case '条码号':
if (input.value) this.onQueryByOnlyNo('patientRegisterNo') //this.onQueryByPatientRegisterNo()
input.select()
break;
case '档案号':
if (input.value) this.onQueryByOnlyNo('patientNo') //this.onQueryByPatientNo()
input.select()
break;
case '身份证号':
if (input.value) this.onQueryByOnlyNo('idNo') //this.onQueryByPatientNo()
input.select()
break;
case '检查条码':
if (input.value) this.onQueryByPacsNo(input.value)
input.select()
break;
case '检验条码':
if (input.value) this.onQueryByLisNo(input.value)
input.select()
break;
case '姓名':
if (input.value) this.onQueryByNotOnlyNo('patientName') //this.getlistinfilterByName(input.value)
input.select()
break;
case '手机号':
if (input.value) this.onQueryByNotOnlyNo('mobileTelephone') //this.getlistinfilterByName(input.value)
input.select()
break;
}
}
});
input.addEventListener('click', (event) => {
let placeholder = input.getAttribute('placeholder')
switch (placeholder) {
case '条码号':
case '档案号':
case '姓名':
case '检查条码':
case '检验条码':
input.select()
break;
}
});
});
});
},
// 右击菜单
onContextmenu(event) {
if (!this.$peisAPI) {
return
}
let menus = [
// { type: 'separator' },
// { label: '测试菜单', itemId: '测试菜单', enabled: true },
// {
// label: '更多操作',
// submenu: [
// { label: '子菜单', itemId: '子菜单', enabled: true }
// ]
// }
]
this.$peisAPI.showContextMenu(menus)
.then(res => {
console.log('res', res)
})
.catch(err => {
console.log('err', err)
})
.finally(() => {
console.log('finally')
})
},
// 自定义右击事件
onContextMenuDIY(data) {
//this.$message({showClose:true,message:data})
}
},
watch: {
// "doctorCheck.prBase.id":{
// immediate:true,
// handler(newVal, oldVal) {
// // debugger
// // console.log("watch 2doctorCheck.prBase.id newVal:", newVal, " oldVal:", oldVal);
// // if (newVal != oldVal) {
// objCopy(this.doctorCheck.prBase,this.prBase)
// // this.prBase = Object.assign({},this.doctorCheck.prBase)
// // }
// // console.log(222);
// }
// },
// 强制刷新人员登记信息
"refParams.brushQueryDisp": {
// immediate:true,
handler(newVal, oldVal) {
console.log(`watch 组合项目列表 newVal: ${newVal} oldVal: ${oldVal} patientRegisterId: ${this.refParams.id}`);
if (newVal && newVal != oldVal) {
// this.getPatientRegister(this.prBase.patientRegisterNo)
// this.dataTransOpts.refresh.register_check.M++
this.prBase = Object.assign({}, this.prBase, this.refParams)
}
}
},
// 重置查询条件
"refParams.resetTimes": {
// immediate:true,
handler(newVal, oldVal) {
console.log(`watch.refParams.resetTimes newVal: ${newVal} oldVal: ${oldVal}`);
if (newVal && newVal != oldVal) {
this.prBase = Object.assign({}, this.prBase, this.prBaseInit)
this.$nextTick(() => {
this.$refs['tmh'].focus(); //打开光标定位到条码栏里
});
}
}
},
},
};
</script>
<style scoped>
.query {
margin-left: 10px;
margin-right: 2px;
padding: 1px 1px;
font-size: 14px;
}
::v-deep .test .el-input__inner {
background-color: yellow !important;
color: red !important;
}
</style>