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