Browse Source

room

master
pengjun 2 years ago
parent
commit
c508237b61
  1. 78
      src/components/common/LocalConfig.vue
  2. 150
      src/components/doctorCheck/QueueCheckList.vue
  3. 604
      src/components/occDisease/occReport.vue
  4. 179
      src/components/patientRegister/PatientRegisterEditDoctorBatch.vue
  5. 24
      src/components/patientRegister/PatientRegisterList.vue
  6. 6
      src/components/room/RoomEdit.vue
  7. 9
      src/components/room/room.vue
  8. 6
      src/router/index.js
  9. 2
      src/store/index.js
  10. 9
      src/views/doctorCheck/doctorCheck.vue

78
src/components/common/LocalConfig.vue

@ -45,7 +45,7 @@
<el-checkbox label="pacs">检查条码</el-checkbox>
<el-checkbox label="lis">检验条码</el-checkbox>
</el-checkbox-group>
</el-form-item>
</el-form-item>
</el-col>
</el-row>
<el-row>
@ -56,7 +56,8 @@
</el-col>
<el-col :span="12">
<el-form-item label="单位树显示编码">
<el-checkbox v-model="LocalConfig.patientRegister.dispCustomerOrgCode" true-label="Y" false-label="N" size="small" />
<el-checkbox v-model="LocalConfig.patientRegister.dispCustomerOrgCode" true-label="Y" false-label="N"
size="small" />
</el-form-item>
</el-col>
</el-row>
@ -83,14 +84,32 @@
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-col :span="6">
<el-form-item label="启用分诊排队">
<el-checkbox v-model="LocalConfig.doctorCheck.isQueue" size="small" true-label="Y" false-label="N" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-col :span="5">
<el-form-item label="默认分诊房间">
<el-input v-model="LocalConfig.doctorCheck.queueRoom" size="small" />
<el-select v-model="LocalConfig.doctorCheck.queueRoom" placeholder="分诊房间" clearable filterable
size="small" >
<el-option v-for="item in dict.room" :key="item.id" :label="item.displayName" :value="item.id" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="项目类别">
<el-cascader :options="dict.itemTypeTree" v-model="LocalConfig.doctorCheck.queueItemTypeIds"
popper-class="example" style="width:240px;" :props="{
checkStrictly: true, expandTrigger: 'hover', label: 'displayName',value: 'id',
id: 'id',children: 'treeChildren',multiple:true}"
clearable filterable size="small" collapse-tags>
</el-cascader>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="排队叫号播音">
<el-checkbox v-model="LocalConfig.doctorCheck.isBroadcast" size="small" true-label="Y" false-label="N" />
</el-form-item>
</el-col>
</el-row>
@ -106,13 +125,15 @@
</template>
<script>
import { deepCopy,objCopy } from "../../utlis/proFunc";
import { deepCopy, objCopy,tcdate } from "../../utlis/proFunc";
import { mapState } from "vuex";
import { getapi, postapi, putapi, deletapi } from "@/api/api";
export default {
data() {
return {
printGuideLabel:["guide", "pacs", "lis"],
printGuideLabel: ["guide", "pacs", "lis"],
LocalConfig: {
normal: {
isDevTool: false, //
@ -123,20 +144,26 @@ export default {
edit: 'standard', //standard/qztl
editHeight: 0, //
immediateToHisCharge: true, //
findPatientByName:true, //
findPatientByName: true, //
printGuideLabel: ["guide", "pacs", "lis"], //
dispCustomerOrgCode:'N', // -- customerOrgCode
dispCustomerOrgCode: 'N', // -- customerOrgCode
},
lisLabel: { //
MarginTop: 56, //
},
doctorCheck: { //
isCheckPicture: false, //
isQueue:'N', //
queueRoom:'', //
isQueue: 'N', //
queueRoom: '', //
queueItemTypeIds: [], //
isBroadcast: 'N', // 广
}
},
LocalConfigInit: {},
localDict: {
room: [], //
}
};
},
@ -149,9 +176,9 @@ export default {
this.LocalConfigInit = deepCopy(this.LocalConfig)
let LocalConfig = window.localStorage.getItem("LocalConfig") || null
try {
console.log('JSON.parse(LocalConfig)',JSON.parse(LocalConfig))
console.log('JSON.parse(LocalConfig)', JSON.parse(LocalConfig))
this.LocalConfig = Object.assign({}, this.LocalConfigInit, JSON.parse(LocalConfig) || {})
if(this.LocalConfig && this.LocalConfig.patientRegister && this.LocalConfig.patientRegister.printGuideLabel){
if (this.LocalConfig && this.LocalConfig.patientRegister && this.LocalConfig.patientRegister.printGuideLabel) {
this.printGuideLabel = deepCopy(this.LocalConfig.patientRegister.printGuideLabel)
}
} catch (error) {
@ -161,7 +188,7 @@ export default {
//
mounted() {
this.dictInit()
},
methods: {
@ -170,6 +197,25 @@ export default {
window.localStorage.setItem("LocalConfig", JSON.stringify(this.LocalConfig))
},
//
dictInit() {
//
postapi('/api/app/Room/GetList')
.then((res) => {
if (res.code > -1) {
this.dict.room = res.data
}
})
//
getapi("/api/app/item-type/by-code-all").then((res) => {
if (res.code != -1) {
this.dict.itemTypeTree = res.data;
tcdate(this.dict.itemTypeTree);
}
});
},
},
watch: {
@ -181,6 +227,4 @@ export default {
@import "../../assets/css/global_input.css";
@import "../../assets/css/global.css";
@import "../../assets/css/global_form.css";
</style>
</style>

150
src/components/doctorCheck/QueueCheckList.vue

@ -4,15 +4,25 @@
<div :style="`height: ${tableHeight}px;font-size:14px;z-index:10;background-color: #f4f8ff;`">
<div>
<span>分诊房间</span>
<el-select v-model="roomId" placeholder="分诊房间" clearable filterable style="width: 125px" size="small"
@change="getQueueRegisterListByRoomId">
<el-select v-model="LocalConfig.doctorCheck.queueRoom" placeholder="分诊房间" clearable filterable
style="width: 125px" size="small">
<el-option v-for="item in dict.room" :key="item.id" :label="item.displayName" :value="item.id" />
</el-select>
</div>
<div>
<el-cascader :options="dict.itemTypeTree" v-model="LocalConfig.doctorCheck.queueItemTypeIds"
popper-class="example" style="width: 195px" :props="{
checkStrictly: true, expandTrigger: 'hover', label: 'displayName', value: 'id',
id: 'id', children: 'treeChildren', multiple: true
}" clearable filterable size="small" collapse-tags>
</el-cascader>
</div>
<!--
<div>
<span>候诊人员</span>
<el-input placeholder="候诊人员" v-model="patientName" size="small" style="width: 125px;" clearable />
</div>
-->
<div style="display: flex;">
<el-table :data="waitDetail" style="width: 100%;" border highlight-current-row @row-click="rowClickWait"
:row-style="{ height: '28px' }" :height="Math.floor((tableHeight - 72) / 3)">
@ -28,11 +38,12 @@
</el-table>
<div style="margin-top: 20px;">
<div>
<el-button type="primary" class="commonbutton" @click="btnCall(waitQueueRegisterId,'1')"
<el-button type="primary" class="commonbutton" @click="btnCall(waitQueueRegisterId, '1')"
style="width: 40px;min-width: 40px;height: 26px;">呼叫</el-button>
</div>
<div style="margin: 10px 0;">
<el-button type="primary" class="commonbutton" @click="getQueueRegisterListByRoomId(roomId)"
<el-button type="primary" class="commonbutton"
@click="getQueueRegisterList(LocalConfig.doctorCheck.queueRoom, LocalConfig.doctorCheck.queueItemTypeIds)"
style="width: 40px;min-width: 40px;height: 26px;">刷新</el-button>
</div>
<div>
@ -43,8 +54,8 @@
</div>
<div style="margin-top: 6px;">已呼人员</div>
<div style="display: flex;">
<el-table :data="alreadyCalledDetail" style="width: 100%;" border highlight-current-row @row-click="rowClickAlready"
:row-style="{ height: '28px' }" :height="Math.floor((tableHeight - 72) / 3)">
<el-table :data="alreadyCalledDetail" style="width: 100%;" border highlight-current-row
@row-click="rowClickAlready" :row-style="{ height: '28px' }" :height="Math.floor((tableHeight - 72) / 3)">
<el-table-column prop="queueRegisterNumber" label="号" min-width="30" align="center" />
<el-table-column prop="patientName" label="姓名" min-width="80" align="center" />
<el-table-column prop="vip" label="vip" min-width="40" align="center">
@ -57,7 +68,7 @@
</el-table>
<div style="margin-top: 20px;">
<div>
<el-button type="primary" class="commonbutton" @click="btnCall(alreadyQueueRegisterId,'2')"
<el-button type="primary" class="commonbutton" @click="btnCall(alreadyQueueRegisterId, '2')"
style="width: 40px;min-width: 40px;height: 26px;">过号</el-button>
</div>
</div>
@ -78,11 +89,11 @@
</el-table>
<div style="margin-top: 20px;">
<div>
<el-button type="primary" class="commonbutton" @click="btnCall(overQueueRegisterId,'9')"
<el-button type="primary" class="commonbutton" @click="btnCall(overQueueRegisterId, '9')"
style="width: 40px;min-width: 40px;height: 26px;">重呼</el-button>
</div>
<div style="margin: 10px 0;">
<el-button type="primary" class="commonbutton" @click="btnCall(overQueueRegisterId,'1')"
<el-button type="primary" class="commonbutton" @click="btnCall(overQueueRegisterId, '1')"
style="width: 40px;min-width: 40px;height: 26px;">退回</el-button>
</div>
</div>
@ -122,14 +133,22 @@ export default {
alreadyQueueRegisterId: '',
overQueueRegisterId: '',
roomId: '', //
LocalConfig: {
doctorCheck: { //
doctorCheck: { //
isQueue: 'N', //
queueRoom: '', //
queueItemTypeIds: [], //
isBroadcast: 'N', // 广
}
},
LocalConfigInit: {}
LocalConfigInit: {},
isInterval: 'N', //
queue_refresh_interval: 15, // ()
queue_play_voice_repeate_times: 2, //
queue_play_voice_repeate_interval: 1, // ()
};
},
@ -139,23 +158,7 @@ export default {
//
mounted() {
this.dictInit().then(res => {
if (!this.roomId) {
this.LocalConfigInit = deepCopy(this.LocalConfig)
let LocalConfig = window.localStorage.getItem("LocalConfig") || null
try {
this.LocalConfig = Object.assign({}, this.LocalConfigInit, JSON.parse(LocalConfig) || {})
this.roomId = this.LocalConfig.doctorCheck.queueRoom
} catch (error) {
console.log('window.localStorage.getItem("LocalConfig")', error)
}
}
if (!this.roomId) {
if (res.data.length > 0) this.roomId = res.data[0].id
}
if (this.roomId) this.getQueueRegisterListByRoomId(this.roomId)
})
this.setQueueParams()
this.fnMounted()
},
computed: {
@ -181,6 +184,59 @@ export default {
},
async fnMounted() {
this.LocalConfigInit = deepCopy(this.LocalConfig)
let LocalConfig = window.localStorage.getItem("LocalConfig") || null
try {
this.LocalConfig = Object.assign({}, deepCopy(this.LocalConfigInit), JSON.parse(LocalConfig) || {})
} catch (error) {
console.log('window.localStorage.getItem("LocalConfig")', error)
}
if (this.LocalConfig.doctorCheck.isQueue == 'Y') {
this.dictInit().then(res => {
if (!this.LocalConfig.doctorCheck.queueRoom) {
if (res.data.length > 0) this.LocalConfig.doctorCheck.queueRoom = res.data[0].id
}
if (this.LocalConfig.doctorCheck.queueRoom) this.getQueueRegisterListByRoomId(this.LocalConfig.doctorCheck.queueRoom)
})
this.setQueueParams()
try {
let sysParam = await postapi('/api/app/SysParmValue/GetSysParmValueBySysParmId', { sysParmId: "queue_refresh_interval" })
this.queue_refresh_interval = Number(sysParam.data || 15)
} catch (error) {
console.log(error)
}
//
if (this.$peisAPI) {
postapi('/api/app/SysParmValue/GetSysParmValueBySysParmId', { sysParmId: "queue_play_voice_repeate_times" })
.then(res => {
if (res.code > -1) this.queue_play_voice_repeate_times = Number(res.data || 2)
})
postapi('/api/app/SysParmValue/GetSysParmValueBySysParmId', { sysParmId: "queue_play_voice_repeate_interval" })
.then(res => {
if (res.code > -1) this.queue_play_voice_repeate_interval = Number(res.data || 1)
})
}
if (this.isInterval == 'N') {
this.isInterval = 'Y'
setInterval(() => {
this.getQueueRegisterList(this.LocalConfig.doctorCheck.queueRoom, this.LocalConfig.doctorCheck.queueItemTypeIds)
}, this.queue_refresh_interval * 1000);
}
}
},
btnCall(queueRegisterId, completeFlag) {
switch (completeFlag) {
case "0": // 退
@ -202,7 +258,7 @@ export default {
postapi('/api/app/QueueRegister/UpdateQueueRegisterStatus', { queueRegisterId, completeFlag })
.then(res => {
if (res.code > -1) {
this.getQueueRegisterListByRoomId(this.roomId)
this.getQueueRegisterList(this.LocalConfig.doctorCheck.queueRoom, this.LocalConfig.doctorCheck.queueItemTypeIds)
}
})
}
@ -233,10 +289,9 @@ export default {
})
},
//
getQueueRegisterListByRoomId(roomId) {
getQueueRegisterList(roomId, itemType) {
return new Promise((resolve, reject) => {
if (!roomId) reject('请选择房间')
this.waitDetail = []
this.alreadyCalledDetail = []
@ -246,7 +301,14 @@ export default {
this.alreadyQueueRegisterId = ''
this.overQueueRegisterId = ''
postapi('/api/app/QueueRegister/GetQueueRegisterListByRoomId', { roomId })
let itemTypeIds = []
itemType.forEach(e => {
e.forEach(item => {
itemTypeIds.push(item)
});
});
postapi('/api/app/QueueRegister/GetQueueRegisterListByRoomId', { roomId, itemTypeIds })
.then(res => {
if (res.code > -1) {
this.waitDetail = res.data.waitDetail
@ -264,6 +326,21 @@ export default {
})
},
// ByRoomId
getQueueRegisterListByRoomId(roomId) {
if (!roomId) {
this.$message.warning({ showClose: true, message: '请选择房间' })
return
}
this.getQueueRegisterList(roomId, this.LocalConfig.doctorCheck.queueItemTypeIds)
},
// ByRoomId
getQueueRegisterListByItemTypeIds(itemTypeIds) {
this.getQueueRegisterList(this.LocalConfig.doctorCheck.queueRoom, itemTypeIds)
},
setQueueParams() {
this.queueParams.patientRegisterId = this.dataTransOpts.tableS.patient_register.id
},
@ -308,8 +385,7 @@ export default {
handler(newVal, oldVal) {
console.log(`watch 组合项目列表 newVal: ${newVal} oldVal: ${oldVal} patient_register.id: ${this.dataTransOpts.tableS.patient_register.id}`);
if (newVal != oldVal) {
this.dictInit()
this.setQueueParams()
this.fnMounted()
}
}
},

604
src/components/occDisease/occReport.vue

@ -0,0 +1,604 @@
<template>
<div class="box">
<div>
<div class="middlebox">
<div class="contenttitle">
客户报表 /
<span class="contenttitleBold">单位职业病汇总报表</span>
</div>
</div>
<div :style="'display: block;'">
<div style="
background-color: #fff;
padding: 15px;
border-radius: 8px;
display: flex;
flex-wrap: wrap;
margin-bottom: 10px;
height: 35px;
margin-top: 7px;
">
<div class="query">
<span>体检单位</span>
<el-input placeholder="请选择体检单位" v-model="patientRegister.query.cusOrgOCX" style="width: 240px" size="small"
disabled>
<el-button slot="append" icon="el-icon-search" @click="report.dialogCusOrgOCX = true"
style="font-size: 20px"></el-button>
</el-input>
</div>
<div class="query">
<span>报表格式</span>
<el-select v-model="format" placeholder="请选择" style="width: 80px" @change="changeValue" size="small">
<el-option label="疾控汇报" value="0" />
<el-option label="单位格式" value="1" />
</el-select>
</div>
<div class="query">
<el-button @click="btnQuery" size="small" class="commonbutton">查询</el-button>
</div>
<!--
<div class="query">
<el-button size="small" class="commonbutton" :disabled="format == 2" @click="handleExport">导出excel</el-button>
</div>
<div class="query">
<el-button size="small" class="commonbutton" :disabled="format == 2" @click="onPrint">打印</el-button>
</div>
-->
</div>
<div v-show="format == 3" ref="imageDom0">
<div style="background-color: #fff; padding: 15px; border-radius: 8px">
<el-table border :height="flag
? window.pageHeight < 600
? 415
: window.pageHeight - 185 - 20
: ''
" :data="tableData" id="standardTableData" ref="standardTableData" style="width: 100%"
:header-cell-class-name="headerStyle">
<el-table-column :label="reportTitle">
<el-table-column :label="`单位: ${customerOrgName||''} 体检次数 ${medicalTimes||''} 开始月份: ${startMonth||''} 结束月份: ${endMonth||''}`">
<template slot-scope="scope">
<el-table :data="scope.row.patientRegisterPositiveReports" border show-summary
:summary-method="summarizeRegisterCounts" :header-cell-class-name="headerStyle">
<el-table-column label="人员阳性结果清单">
<el-table-column :label="`${startDate||''}
${endDate||''}
体检人员共计
${sumMedicalNumber|| ''}
其中男
${maleMedicalNumber|| ''}
${femaleMedicalNumber||''}
其他
${otherMedicalNumber||''}
`">
<el-table-column prop="patientNo" label="档案号" width="120" />
<el-table-column prop="patientName" label="姓名" width="120" />
<el-table-column prop="sexName" label="性别" width="50" />
<el-table-column prop="age" label="年龄" width="80" />
<el-table-column prop="medicalTimes" label="次数" width="50" />
<el-table-column prop="mobileTelephone" label="手机号码" width="120" />
<el-table-column prop="diagnosisNames" label="诊断名称" />
</el-table-column>
</el-table-column>
</el-table>
<el-table :data="scope.row.positivePatientRegisterReportStandards" border
:header-cell-class-name="headerStyle" style="margin-top: 15px">
<el-table-column label="阳性结果人员清单">
<el-table-column :label="`${startDate||''}
${endDate||''}
体检人员共计
${sumMedicalNumber|| ''}
其中男
${maleMedicalNumber|| ''}
${femaleMedicalNumber||''}
其他
${otherMedicalNumber||''}
`">
<template slot-scope="scopes">
<el-table :data="scopes.row.patientRegisters" border show-summary
:summary-method="summarizeRegisterCounts">
<el-table-column :label="scopes.row.diagnosisName">
<el-table-column label="部门名称" prop="departmentName"></el-table-column>
<el-table-column label="姓名" prop="patientName"></el-table-column>
<el-table-column label="性别" prop="sexName"></el-table-column>
<el-table-column prop="age" label="年龄">
</el-table-column>
<el-table-column prop="patientRegisterNo" label="条码号">
</el-table-column>
<el-table-column prop="patientNo" label="档案号">
</el-table-column>
<el-table-column prop="medicalTimes" label="体检次数">
</el-table-column>
<el-table-column prop="telephone" label="电话">
</el-table-column>
<el-table-column prop="mobileTelephone" label="手机号">
</el-table-column>
</el-table-column>
</el-table>
</template>
</el-table-column>
</el-table-column>
</el-table>
<el-table :data="scope.row.diseaseCountStatisticsReports" border :header-cell-class-name="headerStyle"
show-summary :summary-method="summarizeRegisterCount" style="margin-top: 15px">
<el-table-column label="疾病人数统计">
<el-table-column :label="`${startDate||''}
${endDate||''}
体检人员共计
${sumMedicalNumber|| ''}
其中男
${maleMedicalNumber|| ''}
${femaleMedicalNumber||''}
其他
${otherMedicalNumber||''}
`">
<el-table-column label="序号" type="index">
</el-table-column>
<el-table-column prop="diagnosisName" label="疾病" />
<el-table-column prop="patientCount" label="人数" />
<el-table-column prop="percentage" label="占总检人员百分比" />
</el-table-column>
</el-table-column>
</el-table>
</template>
</el-table-column>
</el-table-column>
</el-table>
</div>
</div>
<div v-show="format == 4" ref="imageDom1">
<div style="background-color: #fff; padding: 15px; border-radius: 8px">
<el-table border :height="flag
? window.pageHeight < 600
? 415
: window.pageHeight - 185 - 20
: ''
" :data="reducetableData" id="reducetableData" ref="reducetableData" style="width: 100%"
:header-cell-class-name="headerStyle">
<el-table-column :label="reducereportTitle">
<el-table-column :label="`单位: ${customerOrgName||''} 体检次数 ${medicalTimes||''} 开始月份: ${startMonth||''} 结束月份: ${endMonth||''}`">
<template slot-scope="scope">
<el-table :data="scope.row.patientRegisterPositiveReports" border show-summary
:summary-method="summarizeRegisterCounts" :header-cell-class-name="headerStyle">
<el-table-column label="人员阳性结果清单">
<el-table-column :label="`${reducestartDate||''}
${reduceendDate||''}
体检人员共计
${reducesumMedicalNumber||''}
其中男
${reducemaleMedicalNumber||''}
${reducefemaleMedicalNumber||''}
其他
${reduceotherMedicalNumber||''}
`">
<el-table-column prop="patientNo" label="档案号" width="120" />
<el-table-column prop="patientName" label="姓名" width="120" />
<el-table-column prop="sexName" label="性别" width="50" />
<el-table-column prop="age" label="年龄" width="80" />
<el-table-column prop="medicalTimes" label="次数" width="50" />
<el-table-column prop="mobileTelephone" label="手机号码" width="120" />
<el-table-column prop="diagnosisNames" label="诊断名称" />
</el-table-column>
</el-table-column>
</el-table>
<el-table :data="scope.row.positivePatientRegisterReportReduces" border
:header-cell-class-name="headerStyle" show-summary :summary-method="summarizeRegisterCount"
style="margin-top: 15px">
<el-table-column label="阳性结果人员清单">
<el-table-column :label="`${reducestartDate||''}
${reduceendDate||''}
体检人员共计
${reducesumMedicalNumber||''}
其中男
${reducemaleMedicalNumber||''}
${reducefemaleMedicalNumber||''}
其他
${reduceotherMedicalNumber||''}
`">
<el-table-column label="序号" type="index">
</el-table-column>
<el-table-column prop="diagnosisName" label="诊断" />
<el-table-column prop="patientCount" label="人数" />
<el-table-column prop="percentage" label="占总检人员百分比" />
</el-table-column>
</el-table-column>
</el-table>
<el-table :data="scope.row.diseaseCountStatisticsReports" border :header-cell-class-name="headerStyle"
show-summary :summary-method="summarizeRegisterCount" style="margin-top: 15px">
<el-table-column label="疾病人数统计">
<el-table-column :label="`${reducestartDate||''}
${reduceendDate||''}
体检人员共计
${reducesumMedicalNumber||''}
其中男
${reducemaleMedicalNumber||''}
${reducefemaleMedicalNumber||''}
其他
${reduceotherMedicalNumber||''}
`">
<el-table-column label="序号" type="index">
</el-table-column>
<el-table-column prop="diagnosisName" label="疾病" />
<el-table-column prop="patientCount" label="人数" />
<el-table-column prop="percentage" label="占总检人员百分比" />
</el-table-column>
</el-table-column>
</el-table>
</template>
</el-table-column>
</el-table-column>
</el-table>
</div>
</div>
<div v-show="format == 0 || format == 1" ref="imageDom2">
<div style="background-color: #fff; padding: 15px; border-radius: 8px">
<div :style="'display: flex;justify-content: center;align-items: center;height:' +
(window.pageHeight < 600 ? 415 : window.pageHeight - 185 - 20) +
'px;'
">
<div v-show="reportUrl == ''">无数据</div>
<a :href="reportUrl" v-show="reportUrl != ''">
<el-button>下载Word报表</el-button>
</a>
</div>
</div>
</div>
</div>
</div>
<!--通用选单位体检次数分组的控件-->
<el-dialog title="体检单位选择" :visible.sync="report.dialogCusOrgOCX" :close-on-click-modal="false" width="880px"
height="600px">
<CusOrgOCX :useCustomerOrg="true" :initDateType="'creationTime'" :isUnit="true" />
</el-dialog>
</div>
</template>
<script>
import moment from "moment";
import { mapState, mapActions } from "vuex";
import { getapi, postapi, putapi, deletapi } from "@/api/api";
import {
dddw,
objCopy,
arrayReduce,
arrayExistObj,
tcdate,
} from "@/utlis/proFunc";
import CusOrgOCX from "../../components/report/CusOrgOCX.vue";
import { exportToExcel } from "../../utlis/Export2Excel";
import html2canvas from "html2canvas";
import printJs from "print-js";
export default {
components: {
CusOrgOCX,
},
data() {
return {
format: "0",
flag: true,
tableData: [],
reducetableData: [],
reportTitle: "",
customerOrgName: "",
medicalTimes: null,
startMonth: "",
endMonth: "",
startDate: "",
endDate: "",
sumMedicalNumber: null,
maleMedicalNumber: null,
femaleMedicalNumber: null,
otherMedicalNumber: null,
reducereportTitle: "",
reducecustomerOrgName: "",
reducemedicalTimes: null,
reducestartMonth: "",
reduceendMonth: "",
reducestartDate: "",
reduceendDate: "",
reducesumMedicalNumber: null,
reducemaleMedicalNumber: null,
reducefemaleMedicalNumber: null,
reduceotherMedicalNumber: null,
reportUrl: "",
};
},
created() {
// this.dictInit();
},
//
mounted() {
// this.btnQuery();
},
computed: {
...mapState(["window", "dict", "patientRegister", "report"]),
},
methods: {
btnQuery() {
let body = {},
customerOrgs = [];
if (this.report.dataCusOrgOCX.length > 0) {
this.report.dataCusOrgOCX.forEach((e) => {
let rd = {
startDate: moment(e.startDate).format("yyyy-MM-DD"),
endDate: moment(e.endDate).format("yyyy-MM-DD"),
dateType:
e.dateType == "summaryDate"
? "3"
: e.dateType == "medicalStartDate"
? "2"
: "1",
};
if (e.customerOrgId) {
rd.customerOrgId = e.customerOrgId;
if (e.customerOrgId == this.dict.personOrgId) {
rd.customerOrgRegisterId = null;
rd.customerOrgGroupId = [];
} else {
rd.customerOrgRegisterId = e.customerOrgRegister.id;
rd.customerOrgGroupId = e.customerOrgGroupIds;
}
}
customerOrgs.push(rd);
});
}
body.customerOrgs = customerOrgs;
if (this.completeFlag) body.completeFlag = this.completeFlag;
body.isAudit = this.classification;
if (this.format == 0) {
postapi(
"/api/customerreport/getunitphysicalexaminationreportstandard",
body
).then((res) => {
if (res.code != -1) {
this.tableData = [];
this.tableData.push(res.data);
this.reportTitle = res.data.reportTitle;
this.customerOrgName = res.data.customerOrgName;
this.medicalTimes = res.data.medicalTimes;
this.startMonth = res.data.startMonth;
this.endMonth = res.data.endMonth;
this.startDate = res.data.startDate;
this.endDate = res.data.endDate;
this.sumMedicalNumber = res.data.sumMedicalNumber;
this.maleMedicalNumber = res.data.maleMedicalNumber;
this.femaleMedicalNumber = res.data.femaleMedicalNumber;
this.otherMedicalNumber = res.data.otherMedicalNumber;
}
});
} else if (this.format == 1) {
postapi(
"/api/customerreport/getunitphysicalexaminationreportreduce",
body
).then((res) => {
if (res.code != -1) {
this.reducetableData = [];
this.reducetableData.push(res.data);
this.reducereportTitle = res.data.reportTitle;
this.reducecustomerOrgName = res.data.customerOrgName;
this.reducemedicalTimes = res.data.medicalTimes;
this.reducestartMonth = res.data.startMonth;
this.reduceendMonth = res.data.endMonth;
this.reducestartDate = res.data.startDate;
this.reduceendDate = res.data.endDate;
this.reducesumMedicalNumber = res.data.sumMedicalNumber;
this.reducemaleMedicalNumber = res.data.maleMedicalNumber;
this.reducefemaleMedicalNumber = res.data.femaleMedicalNumber;
this.reduceotherMedicalNumber = res.data.otherMedicalNumber;
}
});
} else {
postapi(
"/api/customerreport/getunitphysicalexaminationreportexportword",
body
).then((res) => {
if (res.code != -1) {
const sysConfig = JSON.parse(window.sessionStorage.getItem('sysConfig'))
this.reportUrl = sysConfig.apiurl + res.data.reportUrl;
}
});
}
},
summarizeRegisterCounts(param) {
const { columns, data } = param;
const sums = [];
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = "合计";
return;
}
if (index === 1) {
sums[index] = data.length + "人";
return;
}
});
return sums;
},
summarizeRegisterCount(param) {
const { columns, data } = param;
const sums = [];
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = "合计";
return;
}
const values = data.map((item) => Number(item[column.property]));
if (index === 2) {
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return prev + curr;
} else {
return prev;
}
}, 0);
sums[index] += " 人";
}
});
return sums;
},
headerStyle({ row, column, rowIndex, columnIndex }) {
if (rowIndex === 1) {
return "left-align";
}
},
changeValue(value) {
if (value == 0) {
this.$nextTick(() => {
this.$refs.standardTableData.doLayout();
});
} else if (value == 1) {
this.$nextTick(() => {
this.$refs.reducetableData.doLayout();
});
}
},
handleExport() {
if (this.format == 0) {
let name = "北京神豚软件开发有限公司体检报告";
if (this.reportTitle != "") {
name = this.reportTitle;
}
let index = 3;
let list = [];
list.push(index);
index += this.tableData[0].patientRegisterPositiveReports.length + 7;
list.push(index);
for (
let i = 0;
i <
this.tableData[0].positivePatientRegisterReportStandards.length - 1;
i++
) {
index +=
this.tableData[0].positivePatientRegisterReportStandards[i]
.patientRegisters.length + 4;
list.push(index);
}
exportToExcel("#standardTableData", name, true, list);
} else if (this.format == 1) {
let name = "北京神豚软件开发有限公司体检报告";
if (this.reducereportTitle != "") {
name = this.reducereportTitle;
}
let index = 3;
let list = [];
list.push(index);
exportToExcel("#reducetableData", name, true, list);
}
},
onPrint() {
this.flag = false;
let index = "";
if (this.format == 0) {
index = "imageDom0";
} else if (this.format == 1) {
index = "imageDom1";
} else {
index = "imageDom2";
}
this.$nextTick(() => {
let width = this.$refs[index].style.width;
let cloneDom = this.$refs[index].cloneNode(true);
let imageDom = this.$refs[index];
cloneDom.style.position = "absolute";
cloneDom.style.top = "0px";
cloneDom.style.zIndex = "-1";
cloneDom.style.width = width;
imageDom.appendChild(cloneDom);
html2canvas(cloneDom).then((canvas) => {
//
const url = canvas.toDataURL("image/png");
printJs({
printable: url,
type: "image",
documentTitle: "", //
style: `@media print { @page {size: auto; margin: 0 0 0 0; } body{margin:0 5px}canvas{page-break-after: always;page-break-inside: avoid;
page-break-after: avoid;
page-break-before: avoid;}}`, // 去除页眉页脚
});
});
cloneDom.style.display = "none";
this.flag = true;
});
},
},
};
</script>
<style scoped>
@import "../../assets/css/global_button.css";
@import "../../assets/css/global_dialog.css";
@import "../../assets/css/global_table.css";
@import "../../assets/css/global_form.css";
@import "../../assets/css/global_input.css";
@import "../../assets/css/global.css";
.query {
margin-right: 10px;
display: flex;
justify-content: center;
align-items: center;
font-size: 14px;
color: #232748;
font-size: 400;
font-family: "NotoSansSC-Regular";
}
.box {
display: flex;
flex-direction: column;
}
::v-deep .el-table__header-wrapper th.backcolor {
background-color: #f5f7fa;
}
:deep .left-align .cell {
text-align: left !important;
}
::v-deep .el-input__inner {
/*text-align: center;*/
padding-left: 5px;
padding-right: 15px;
}
::v-deep .el-input__icon {
width: 15px;
/* 输入框下拉箭头或清除图标 默认 25 */
}
::v-deep .el-input-group__append {
padding: 0 5px;
/* 控件默认 0 20px;*/
}
::v-deep .el-icon-search:before {
color: #00F;
}
.query:last-child{
margin-right: 0;
}
</style>

179
src/components/patientRegister/PatientRegisterEditDoctorBatch.vue

@ -0,0 +1,179 @@
<template>
<div>
<div>
<div style="color: red;">
检查项目不选医生表示不更新
</div>
<div style="display: flex; margin-top: 2px">
<el-table :data="tableData" height="400" width="400" show-summary size="small" highlight-current-row
border>
<el-table-column label="组合项目" min-width="150" prop="asbitemName" />
<el-table-column label="检查医生" prop="checkDoctorId" min-width="80">
<template slot-scope="scope">
<el-select v-model="scope.row.checkDoctorId" filterable clearable placeholder="请选择" size="small">
<el-option v-for="item in users" :key="item.id" :label="item.surname" :value="item.id" />
</el-select>
</template>
</el-table-column>
</el-table>
<div style="margin: 300px 0 0 10px;">
<div style="margin: 10px 0">
<el-button class="commonbutton" type="primary" @click="btnOk"> </el-button>
</div>
<div>
<el-button class="commonbutton" @click="dialogWin.PatientRegisterEditDoctorBatch = false"> </el-button>
</div>
</div>
</div>
</div>
<div>
<!-- 通用进度条 -->
<el-dialog title="数据处理中……" :visible.sync="elProgress.display" width="600px" height="400" :show-close="false"
:close-on-click-modal="false" :append-to-body="true">
<ElProgressOCX />
</el-dialog>
</div>
</div>
</template>
<script>
import moment from "moment";
import { mapState, mapActions } from "vuex";
import { getapi, postapi, putapi, deletapi } from "@/api/api";
import {
dddw,
arrayReduce,
arrayExistObj,
deepCopy,
} from "../../utlis/proFunc";
import ElProgressOCX from "../report/ElProgressOCX.vue";
export default {
components: {
ElProgressOCX,
},
props: ["multipleSelection"],
data() {
return {
tableData: [],
users: [],
patientRegisterIds: []
};
},
//
created() {
this.asbitemBatchInit = deepCopy(this.asbitemBatch)
},
//
mounted() {
//
this.dictInit()
},
computed: {
...mapState([
"window",
"dataTransOpts",
"dialogWin",
"dict",
"elProgress",
"patientRegister",
"customerOrg",
]),
},
methods: {
moment, dddw, deepCopy,
//()
btnOk() {
let checkDoctorDetail = []
this.tableData.forEach(e => {
if (e.checkDoctorId) checkDoctorDetail.push(e)
});
if (checkDoctorDetail.length == 0) {
this.$message.warning({ showClose: true, message: '没有可更新的数据记录!' })
return
}
postapi('/api/app/RegisterCheck/UpdateBatchCheckDoctor', { patientRegisterIds: this.patientRegisterIds, checkDoctorDetail })
.then(res => {
if (res.code > -1) {
this.dialogWin.PatientRegisterEditDoctorBatch = false;
}
})
},
//
dictInit() {
this.patientRegisterIds = []
this.multipleSelection.forEach(e => {
this.patientRegisterIds.push(e.id)
});
//
this.tableData = []
postapi('/api/app/RegisterCheck/GetRegisterCheckAsbitemsByPatientRegisterIds', { patientRegisterIds: this.patientRegisterIds }).then(res => {
if (res.code > -1) {
res.data.forEach(e => {
e.checkDoctorId = ''
});
this.tableData = res.data
}
});
//
postapi('/api/identity/users/GetListByOperatorType', { operatorTypes: ["1", "3"] })
.then(res => {
if (res.code > -1) {
this.users = res.data
}
})
},
},
//
watch: {
"dataTransOpts.plus.PatientRegisterEditDoctorBatch": {
// immediate: true, //
// deep: true, //
handler(newVal, oldVal) {
console.log(`watch: 刷新在用组合项目 newVal: ${newVal} oldVal:${oldVal}`)
if (newVal != oldVal) this.dictInit()
}
},
},
};
</script>
<style scoped>
@import "../../assets/css/global_input.css";
@import "../../assets/css/global_table.css";
@import "../../assets/css/global.css";
.box {
display: flex;
}
.listBtn {
margin-top: 5px;
text-align: center;
}
.btnClass {
width: 100px;
}
</style>

24
src/components/patientRegister/PatientRegisterList.vue

@ -80,7 +80,7 @@
{{ dddw(dict.personnelType, "id", scope.row[dragCol[index].prop], "displayName") }}
</div>
<div v-else-if="dragCol[index].prop == 'idNo'">
{{ scope.row[dragCol[index].prop] + '_' }}
{{ scope.row[dragCol[index].prop]}}&#031;
</div>
<div v-else-if="dragCol[index].prop == 'customerOrgName'">
{{ scope.row[dragCol[index].prop] == scope.row['customerOrgParentName'] ?
@ -277,6 +277,12 @@
<PatientRegisterEditItemBatch :multipleSelection="multipleSelection" />
</el-dialog>
<!-- 批量调整检查项目医生 -->
<el-dialog title="批量调整检查项目医生" :visible.sync="dialogWin.PatientRegisterEditDoctorBatch" width="610px"
:append-to-body="true" :close-on-click-modal="false">
<PatientRegisterEditDoctorBatch :multipleSelection="multipleSelection" />
</el-dialog>
<!-- 通用进度条 -->
<el-dialog title="数据处理中……" :visible.sync="elProgress.display" width="600px" height="400" :show-close="false"
:close-on-click-modal="false" :append-to-body="true">
@ -315,6 +321,7 @@ import PatientRegisterAsbItem from "../../components/patientRegister/patientRegi
import ElProgressOCX from "../../components/report/ElProgressOCX.vue";
import PatientRegisterEditGroupBatch from "./PatientRegisterEditGroupBatch.vue";
import PatientRegisterEditItemBatch from "./PatientRegisterEditItemBatch.vue";
import PatientRegisterEditDoctorBatch from "./PatientRegisterEditDoctorBatch.vue";
import ImportOrgData from "./ImportOrgData.vue";
import LocalConfig from "../../components/common/LocalConfig.vue";
import Queue from "../../components/queue/Queue.vue";
@ -324,8 +331,9 @@ export default {
PatientRegisterEdit,
Camera,
PatientRegisterAsbItem,
PatientRegisterEditGroupBatch, //
PatientRegisterEditItemBatch, //
PatientRegisterEditGroupBatch, //
PatientRegisterEditItemBatch, //
PatientRegisterEditDoctorBatch, //
ElProgressOCX,
LocalConfig,
ImportOrgData,
@ -1308,13 +1316,21 @@ export default {
this.importResult('lis', row);
},
})
if (checkPagePriv(this.pagePriv.privs, '批量更新组合项目明细'))
if (checkPagePriv(this.pagePriv.privs, '批量更新组合项目明细') && this.multipleSelection.length > 0)
items.push({
label: "批量更新组合项目明细",
onClick: () => {
this.btnItemBatch();
},
})
if (checkPagePriv(this.pagePriv.privs, '调整检查项目医生') && this.multipleSelection.length > 0)
items.push({
label: "调整检查项目医生",
onClick: () => {
this.dataTransOpts.plus.PatientRegisterEditDoctorBatch++ //
this.dialogWin.PatientRegisterEditDoctorBatch = true;
},
})
items.push({ label: "----------------", })
this.$contextmenu({
items,

6
src/components/room/RoomEdit.vue

@ -38,14 +38,16 @@
<el-col :span="8">
<el-form-item label="房间类别">
<el-select v-model="form.roomTypeFlag" placeholder="请选择" size="small">
<el-option v-for="item in dict.roomType" :key="item.id" :label="item.displayName" :value="item.id">
<el-option v-for="item in dict.roomType" :key="item.id" :label="item.displayName" :value="item.id">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="候诊时间">
<el-input type="number" v-model="form.queueTime" size="small" />
<el-input type="number" v-model="form.queueTime" size="small" style="margin-top: 5px;">
<template slot="append">分钟</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="8">

9
src/components/room/room.vue

@ -23,8 +23,9 @@
size="small" highlight-current-row :row-class-name="handleRowClassName" @row-click="rowClick">
<el-table-column type="index" label="序号" width="50" align="center" />
<el-table-column label="id" prop="id" min-width="200" align="center" />
<el-table-column label="房间号" prop="roomNo" min-width="60" align="center" />
<el-table-column prop="displayName" label="名称" min-width="150" />
<el-table-column v-show="!medicalCenterId" prop="medicalCenterId" label="体检中心" min-width="150">
<el-table-column prop="medicalCenterId" label="体检中心" min-width="150">
<template slot-scope="scope">
{{ dddw(dict.medicalCenter, "id", scope.row.medicalCenterId, "displayName") }}
</template>
@ -44,7 +45,11 @@
{{ dddw(dict.roomType, "id", scope.row.roomTypeFlag, "displayName") }}
</template>
</el-table-column>
<el-table-column prop="queueTime" label="候诊时间" min-width="80" align="center" />
<el-table-column prop="queueTime" label="候诊时间" min-width="80" align="center" >
<template slot-scope="scope">
<div>{{ scope.row.queueTime}} 分钟</div>
</template>
</el-table-column>
<el-table-column prop="isActive" label="启用" min-width="40" align="center">
<template slot-scope="scope">
<div style="font-family: 'Microsoft YaHei';">{{ scope.row.isActive == 'Y' ? '√' : '' }}</div>

6
src/router/index.js

@ -527,6 +527,12 @@ const routes = [{
component: () =>
import ("../views/doctorCheck/unitphysicalexamination.vue"),
},
{
path: "/occReport",
name: "单位职业病汇总报表",
component: () =>
import ("../components/occDisease/occReport.vue"),
},
{
path: "/personnelPositive",
name: "人员阳性结果",

2
src/store/index.js

@ -430,6 +430,7 @@ export default new Vuex.Store({
clearPatientRegisterQuery: 0, // 清空人员登记界面查询条件(重新赋值体检单位)
PatientRegisterEditGroupBatch: 0, // 刷新批量调整分组窗口
PatientRegisterEditItemBatch: 0, // 刷新批量调整项目窗口
PatientRegisterEditDoctorBatch:0, // 刷新批量调整项目检查医生窗口
PatientRegisterForChoose: 0, // 体检人员查询窗口
OccDisease: 0, // 职业病
WebBooking: 0, // 网上预约
@ -449,6 +450,7 @@ export default new Vuex.Store({
PatientRegisterForChoose: false, // 体检人员登记列表
PatientRegisterEditItemBatch: false, //批量调整项目
PatientRegisterEditGroupBatch: false, //批量调整分组
PatientRegisterEditDoctorBatch: false, // 批量调整检查项目医生
MenuPageSet: false, // 设置角色菜单权限
LocalConfig: false, // 设置窗口
AsbChargeRequest: false, // 收费申请

9
src/views/doctorCheck/doctorCheck.vue

@ -25,8 +25,8 @@
<el-tabs v-model="activeName" tab-position="bottom" style="width: 200px;">
<el-tab-pane label="组合项目" name="asbitem">
<RegisterCheckList />
</el-tab-pane>
<el-tab-pane v-show="LocalConfig.doctorCheck.isQueue == 'Y'" label="叫号" name="call">
</el-tab-pane>
<el-tab-pane :label="LocalConfig.doctorCheck.isQueue == 'Y' ? '叫号':''" name="call" :disabled="LocalConfig.doctorCheck.isQueue != 'Y'">
<QueueCheckList />
</el-tab-pane>
</el-tabs>
@ -99,6 +99,7 @@ export default {
queueRoom: '', //
}
},
LocalConfigInit: {},
doctor_check_check_charge: 'Y', //
};
},
@ -117,7 +118,7 @@ export default {
this.LocalConfigInit = deepCopy(this.LocalConfig)
let LocalConfig = window.localStorage.getItem("LocalConfig") || null
try {
this.LocalConfig = Object.assign({}, this.LocalConfigInit, JSON.parse(LocalConfig) || {})
this.LocalConfig = Object.assign({}, deepCopy(this.LocalConfigInit), JSON.parse(LocalConfig) || {})
} catch (error) {
console.log('window.localStorage.getItem("LocalConfig")', error)
@ -140,7 +141,7 @@ export default {
}
console.log('this.LocalConfig',this.LocalConfig)
},
//

Loading…
Cancel
Save