Browse Source

queue

master
pengjun 1 year ago
parent
commit
71ff285173
  1. 14
      src/components/common/LocalConfig.vue
  2. 231
      src/components/doctorCheck/QueueCheckList.vue
  3. 31
      src/components/patientRegister/PatientRegisterList.vue
  4. 252
      src/components/queue/Queue.vue
  5. 2
      src/store/index.js
  6. 4
      src/views/doctorCheck/doctorCheck.vue

14
src/components/common/LocalConfig.vue

@ -82,6 +82,18 @@
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<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-form-item label="默认分诊房间">
<el-input v-model="LocalConfig.doctorCheck.queueRoom" size="small" />
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-tab-pane>
</el-tabs>
@ -120,6 +132,8 @@ export default {
},
doctorCheck: { //
isCheckPicture: false, //
isQueue:'N', //
queueRoom:'', //
}
},
LocalConfigInit: {},

231
src/components/doctorCheck/QueueCheckList.vue

@ -0,0 +1,231 @@
<template>
<div :style="`height: ${tableHeight}px;font-size:14px;z-index:10;background-color: #f4f8ff;`">
<div>
<span>候诊人员</span>
<el-input placeholder="候诊人员" v-model="patientName" size="small" style="width: 125px;" clearable />
</div>
<div style="display: flex;">
<el-table :data="queue1" style="width: 100%;" border highlight-current-row @row-click="rowClick"
:row-style="{ height: '28px' }" :height="Math.floor((tableHeight - 72) / 3)">
<el-table-column prop="seq" label="号" min-width="30">
<template slot-scope="scope">
<div :style="`padding: 0 5px;color: ${setCheckStatusColor(scope.row.completeFlag)};`">
{{ scope.row.asbitemName }}
</div>
</template>
</el-table-column>
<el-table-column prop="patientName" label="姓名" min-width="80" />
<el-table-column prop="vip" label="vip" min-width="40" />
</el-table>
<div style="margin-top: 20px;">
<div>
<el-button type="primary" class="commonbutton" @click="refuseItem"
style="width: 40px;min-width: 40px;height: 26px;">呼叫</el-button>
</div>
<div style="margin: 10px 0;">
<el-button type="primary" class="commonbutton" @click="refuseItem"
style="width: 40px;min-width: 40px;height: 26px;">刷新</el-button>
</div>
<div>
<el-button type="primary" class="commonbutton" @click="refuseItem"
style="width: 40px;min-width: 40px;height: 26px;">排队</el-button>
</div>
</div>
</div>
<div style="margin-top: 6px;">已呼人员</div>
<div style="display: flex;">
<el-table :data="queue1" style="width: 100%;" border highlight-current-row @row-click="rowClick"
:row-style="{ height: '28px' }" :height="Math.floor((tableHeight - 72) / 3)">
<el-table-column prop="seq" label="号" min-width="30">
<template slot-scope="scope">
<div :style="`padding: 0 5px;color: ${setCheckStatusColor(scope.row.completeFlag)};`">
{{ scope.row.asbitemName }}
</div>
</template>
</el-table-column>
<el-table-column prop="patientName" label="姓名" min-width="80" />
<el-table-column prop="vip" label="vip" min-width="40" />
</el-table>
<div style="margin-top: 20px;">
<div>
<el-button type="primary" class="commonbutton" @click="refuseItem"
style="width: 40px;min-width: 40px;height: 26px;">过号</el-button>
</div>
</div>
</div>
<div style="margin-top: 6px;">过号人员</div>
<div style="display: flex;">
<el-table :data="queue1" style="width: 100%;" border highlight-current-row @row-click="rowClick"
:row-style="{ height: '28px' }" :height="Math.floor((tableHeight - 72) / 3)">
<el-table-column prop="seq" label="号" min-width="30">
<template slot-scope="scope">
<div :style="`padding: 0 5px;color: ${setCheckStatusColor(scope.row.completeFlag)};`">
{{ scope.row.asbitemName }}
</div>
</template>
</el-table-column>
<el-table-column prop="patientName" label="姓名" min-width="80" />
<el-table-column prop="vip" label="vip" min-width="40" />
</el-table>
<div style="margin-top: 20px;">
<div>
<el-button type="primary" class="commonbutton" @click="refuseItem"
style="width: 40px;min-width: 40px;height: 26px;">重呼</el-button>
</div>
<div style="margin: 10px 0;">
<el-button type="primary" class="commonbutton" @click="refuseItem"
style="width: 40px;min-width: 40px;height: 26px;">退回</el-button>
</div>
</div>
</div>
</div>
</template>
<script>
import { mapState } from 'vuex';
import { getapi, postapi, putapi, deletapi } from "@/api/api";
import { listOrderBy, setCheckStatusColor } from "../../utlis/proFunc"
export default {
components: {},
data() {
return {
patientName: '',
queue1: [{ patientName: '张三' }],
queue2: [],
queue3: [],
activeNames: ['0', '1', '2', '3'],
};
},
created() { },
//
mounted() {
this.registerCheckList(this.dataTransOpts.tableS.patient_register.id)
},
computed: {
...mapState(['window', 'dataTransOpts', 'dict', 'doctorCheck']),
tableHeight() {
return this.window.pageHeight < 600 ? 400 : this.window.pageHeight - 200
},
registerCheckList0() {
return this.doctorCheck.RegisterCheckList.filter(e => { return e.checkTypeFlag == '0' })
},
registerCheckList1() {
return this.doctorCheck.RegisterCheckList.filter(e => { return e.checkTypeFlag == '1' })
},
registerCheckList2() {
return this.doctorCheck.RegisterCheckList.filter(e => { return e.checkTypeFlag == '2' })
},
registerCheckList3() {
return this.doctorCheck.RegisterCheckList.filter(e => { return e.checkTypeFlag == '3' })
},
},
methods: {
setCheckStatusColor,
tableRowClassName({ row, rowIndex }) {
//console.log('tableRowClassName',rowIndex,row)
if (row.completeFlag === '0') {
return 'danger'; //
} else if (row.completeFlag === '2') {
return 'info'; //
}
return '';
},
refuseItem() {
},
//
rowClick(row) {
console.log('rowClick')
this.doctorCheck.RegisterCheckId = row.id
this.dataTransOpts.tableS.register_check.id = row.id
this.dataTransOpts.refresh.register_check.S++
this.dataTransOpts.refresh.register_check_item.M++
},
//
registerCheckList(patientRegisterId) {
if (!patientRegisterId) {
this.doctorCheck.RegisterCheckList = []
this.doctorCheck.RegisterCheckId = ''
this.dataTransOpts.tableS.register_check.id = ''
this.dataTransOpts.refresh.register_check.S++
this.dataTransOpts.refresh.register_check_item.M++
return
}
postapi('/api/app/RegisterCheck/GetRegisterCheckWithAsbitems', { patientRegisterId })
.then((res) => {
// console.log("registerCheckList res.data", res.data);
if (res.code != -1) {
//
this.handleRegisterCheckList(res.data)
// 1
if (res.data.length > 0) {
this.doctorCheck.RegisterCheckId = res.data[0].id
this.dataTransOpts.tableS.register_check.id = res.data[0].id
// this.doctorCheck.RegisterCheckEdit = res.data[0]
// this.$refs['doctorCheck_RegisterCheckList'].setCurrentRow(res.data[0])
} else {
this.dataTransOpts.tableS.register_check.id = ''
}
this.dataTransOpts.refresh.register_check.S++ //
this.dataTransOpts.refresh.register_check_item.M++ //
}
})
.catch((err) => {
this.$message.error({ showClose: true, message: `操作失败,原因:${err}` });
});
},
handleRegisterCheckList(registerCheckList) {
this.doctorCheck.RegisterCheckList = listOrderBy(registerCheckList, [{ colName: 'checkTypeFlag', sortType: 'A' }, { colName: 'itemTypeDisplayOrder', sortType: 'A' }, { colName: 'asbitemDisplayOrder', sortType: 'A' }])
}
},
//
watch: {
//
"dataTransOpts.refresh.register_check.M": {
// immediate:true,
handler(newVal, oldVal) {
console.log(`watch 组合项目列表 newVal: ${newVal} oldVal: ${oldVal} patient_register.id: ${this.dataTransOpts.tableS.patient_register.id}`);
this.registerCheckList(this.dataTransOpts.tableS.patient_register.id)
}
},
}
};
</script>
<style scoped>
::v-deep .el-collapse-item__header {
height: 32px;
line-height: 32px;
background-color: #f4f8ff;
color: #303133;
cursor: pointer;
font-size: 14px;
font-weight: 700;
text-align: center;
padding: 0 0 0 50px;
}
</style>

31
src/components/patientRegister/PatientRegisterList.vue

@ -232,6 +232,12 @@
</div>
</el-dialog>
<!-- 修改信息 -->
<el-dialog title="分诊排队" :visible.sync="dialogWin.queue" width="800px"
:append-to-body="true" :close-on-click-modal="false">
<Queue :refParams="queueParams"/>
</el-dialog>
<!-- 拍照 -->
<el-dialog title="拍照" :visible.sync="patientRegister.cameraVisble" width="400" height="800" :show-close="false"
:append-to-body="true" :close-on-click-modal="false">
@ -281,7 +287,6 @@
:append-to-body="true" width="800px" height="600px">
<LocalConfig />
</el-dialog>
</div>
</div>
</template>
@ -311,11 +316,10 @@ import PatientRegisterEditGroupBatch from "./PatientRegisterEditGroupBatch.vue";
import PatientRegisterEditItemBatch from "./PatientRegisterEditItemBatch.vue";
import ImportOrgData from "./ImportOrgData.vue";
import LocalConfig from "../../components/common/LocalConfig.vue";
import Queue from "../../components/queue/Queue.vue";
export default {
components: {
PatientRegisterEdit,
Camera,
PatientRegisterAsbItem,
@ -324,6 +328,7 @@ export default {
ElProgressOCX,
LocalConfig,
ImportOrgData,
Queue,
},
data() {
return {
@ -409,7 +414,9 @@ export default {
value: "",
colName: "patientName",
patientRegisterId: ""
}
},
queueParams:{}, //
};
},
@ -1195,6 +1202,15 @@ export default {
},
//
fnQueue(row){
this.queueParams = {
patientRegisterId:row.id
}
this.dataTransOpts.plus.queue++
this.dialogWin.queue = true
},
//
onCellRightClick(row, column) {
this.rClickRow = { ...row }; //
@ -1228,6 +1244,13 @@ export default {
this.fnUpBaseInfo(row, 'idNo');
},
})
if (checkPagePriv(this.pagePriv.privs, '分诊排队') && row.completeFlag != '0')
items.push({
label: "分诊排队",
onClick: () => {
this.fnQueue(row);
},
})
if (checkPagePriv(this.pagePriv.privs, '发送检验申请') && row.completeFlag != '0')
items.push({
label: "发送检验申请",

252
src/components/queue/Queue.vue

@ -0,0 +1,252 @@
<template>
<div style="margin-top: -15px;display: flex;">
<div style="width: 300px;">
<div>排队信息</div>
<el-table :data="roomQueueList" border style="width: 100%" row-key="id" height="565" highlight-current-row
size="small" ref="roomQueueList">
<el-table-column label="科室" min-width="130" prop="itemTypeName" />
<el-table-column label="房间" min-width="60" prop="roomName" align="center" />
<el-table-column label="候诊人数" min-width="80" prop="waitCount" align="center" />
</el-table>
</div>
<div style="width: 360px;margin: 0 5px;">
<div>未分诊组合项目</div>
<el-table :data="notTriageAsbitemList" border style="width: 100%" row-key="id" height="270" highlight-current-row
size="small" @row-click="rowClick" ref="notTriageAsbitemList">
<el-table-column label="科室" min-width="130" prop="itemTypeName" align="center" />
<el-table-column label="组合项目" min-width="150" prop="asbitemName" align="center" />
</el-table>
<div style="margin-top: 5px;">已分诊科室</div>
<el-table :data="yesTriageAsbitemList" border style="width: 100%" row-key="id" height="270" highlight-current-row
size="small" ref="yesTriageAsbitemList">
<el-table-column label="科室" min-width="130" prop="asbitemName">
<template slot-scope="scope">
<div>
{{ scope.row.asbitemName }}
</div>
</template>
</el-table-column>
<el-table-column label="房间" prop="standardPrice" min-width="60" align="center" />
<el-table-column label="状态" prop="discount" min-width="60">
<template slot-scope="scope">
<el-input type="number" v-model="scope.row.discount" size="small" disabled />
</template>
</el-table-column>
<el-table-column label="排号人" prop="amount" min-width="80">
<template slot-scope="scope">
<el-select v-model="scope.row.payTypeFlag" size="small" disabled>
<el-option v-for="item in dict.payType" :key="item.id" :label="item.displayName" :value="item.id" />
</el-select>
</template>
</el-table-column>
</el-table>
</div>
<div style="width: 150px;">
<div>房间</div>
<el-table :data="roomsForAsbitem" border style="width: 100%" row-key="id" height="270" highlight-current-row
size="small" @row-click="rowClickRoom" ref="roomsForAsbitem">
<el-table-column label="房间" min-width="80" prop="roomName" align="center" />
</el-table>
<div style="margin: 25px 0 10px 0;">
<el-button class="commonbutton" @click="btnQueue">人工排队</el-button>
</div>
<div>
<el-button class="commonbutton" @click="btnQueueAuto">自动排队</el-button>
</div>
<div style="margin: 10px 0;">当前排队房间</div>
<div style="height: 40px;margin-left: 40px;">
{{ queueRegister.roomName }}
</div>
<div style="margin: 5px 0;">当前候诊人数</div>
<div style="height: 50px;margin-left: 40px;">
{{ queueRegister.queueCount }}
</div>
<div>
<el-button class="commonbutton" @click="dialogWin.queue = false">关闭</el-button>
</div>
</div>
</div>
</template>
<script>
import { mapState } from "vuex";
import { getapi, postapi, putapi, deletapi } from "@/api/api";
import { dddw, deepCopy } from "../../utlis/proFunc";
import moment from "moment";
export default {
components: {
},
props: ["refParams"],
data() {
return {
queueRegister: {}, // /api/app/QueueRegister/GetQueueRegisterByPatientRegisterId
roomQueueList: [], // /api/app/QueueRegister/GetRoomQueueList
notTriageAsbitemList: [], // /api/app/QueueRegister/GetNotTriageAsbitemList
yesTriageAsbitemList: [], // /api/app/QueueRegister/GetYesTriageAsbitemList
roomsForAsbitem: [], // /api/app/QueueRegister/GetRoomListByAsbitemId
curAsbitemId: '', //
curRoomId: '', //
};
},
created() {
},
updated() {
},
//
mounted() {
this.funMounted()
},
computed: {
...mapState([
"window",
"dict",
"dataTransOpts",
"dialogWin"
]),
},
methods: {
funMounted() {
this.dictInit()
.then(res => {
//this.btnQuery()
})
.catch(err => {
console.log(err)
this.$message.warning({ showClose: true, message: `${err}` })
})
},
//
dictInit() {
return new Promise((resolve, reject) => {
let patientRegisterId = this.refParams.patientRegisterId // id
let medicalCenterId = window.sessionStorage.getItem('peisid');
postapi('/api/app/QueueRegister/GetRoomQueueList', { medicalCenterId })
.then(res => {
if (res.code > -1) {
this.roomQueueList = res.data
this.roomsForAsbitem = []
return postapi('/api/app/QueueRegister/GetNotTriageAsbitemList', { patientRegisterId })
} else {
reject(res.message)
}
})
.then(res => {
if (res && res.code > -1) {
this.notTriageAsbitemList = res.data
return postapi('/api/app/QueueRegister/GetYesTriageAsbitemList', { patientRegisterId })
} else {
reject(res.message)
}
})
.then(res => {
if (res && res.code > -1) {
this.yesTriageAsbitemList = res.data
return postapi('/api/app/QueueRegister/GetQueueRegisterByPatientRegisterId', { patientRegisterId })
} else {
reject(res.message)
}
})
.then(res => {
if (res && res.code > -1) {
if (res.code == 1) {
this.queueRegister = res.data
} else {
this.queueRegister = { roomName: '无', queueCount: '' }
}
resolve(res)
} else {
reject(res.message)
}
})
.catch(err => {
reject(err)
});
})
},
btnTest() {
console.log('this.thirdInterfaces', this.thirdInterfaces)
console.log('this.tableData', this.tableData)
console.log('this.currRowData', this.currRowData)
console.log('this.tableDataDetails', this.tableDataDetails)
console.log('this.query', this.query)
},
//
rowClick(row) {
this.curAsbitemId = row.asbitemId
this.roomsForAsbitem = []
this.curRoomId = ''
postapi('/api/app/QueueRegister/GetRoomListByAsbitemId', {
asbitemId: this.curAsbitemId
}).then(res => {
if (res.code > -1) {
this.roomsForAsbitem = res.data
}
})
},
//
rowClickRoom(row) {
this.curRoomId = row.asbitemId
},
//
btnQueue() {
},
//
btnQueueAuto() {
},
},
//()
watch: {
"dataTransOpts.plus.queue": {
// immediate:true,
handler(newVal, oldVal) {
console.log(`watch 职业病 newVal: ${newVal}, oldVal: ${oldVal} `);
if (newVal != oldVal) this.funMounted()
}
},
},
};
</script>
<style scoped>
@import '../../assets/css/global_card.css';
@import '../../assets/css/global_input.css';
@import '../../assets/css/global_table.css';
@import '../../assets/css/global.css';
.query {
margin-right: 10px;
font-size: 14px;
color: #232748;
font-weight: 400;
font-family: "NotoSansSC-Regular";
}
.spanClass {
font-size: 14px;
padding: 0 2px 0 0;
}
</style>

2
src/store/index.js

@ -429,6 +429,7 @@ export default new Vuex.Store({
OccDisease: 0, // 职业病
WebBooking: 0, // 网上预约
ImportOrgData: 0, // 导入企业(青藏公司)数据
queue:0, // 排队信息
}
},
@ -451,6 +452,7 @@ export default new Vuex.Store({
WebBooking: false, // 网上预约
ImportOrgData: false, // 导入企业(青藏公司)数据
RoomEdit:false, //房间
queue:false, // 排队信息
}
},

4
src/views/doctorCheck/doctorCheck.vue

@ -27,7 +27,7 @@
<RegisterCheckList />
</el-tab-pane>
<el-tab-pane label="叫号" name="call">
<div :style="`height:${window.pageHeight < 600 ? 400 : window.pageHeight - 200}px;`">叫号</div>
<QueueCheckList />
</el-tab-pane>
</el-tabs>
@ -69,6 +69,7 @@ import PatientRegisterBase from "../../components/doctorCheck/PatientRegisterBas
import ButtonList from "../../components/doctorCheck/ButtonList.vue";
import CheckPicture from "../../components/doctorCheck/CheckPicture.vue";
import RegisterCheckList from "../../components/doctorCheck/RegisterCheckList.vue";
import QueueCheckList from "../../components/doctorCheck/QueueCheckList.vue";
import CheckItemList from "../../components/doctorCheck/CheckItemList.vue";
import CheckSumSug from "../../components/doctorCheck/CheckSumSug.vue";
import RegisterCheckEdit from "../../components/doctorCheck/RegisterCheckEdit.vue";
@ -77,6 +78,7 @@ import moment from 'moment';
export default {
components: {
RegisterCheckList,
QueueCheckList,
PatientRegisterBase,
ButtonList,
CheckPicture,

Loading…
Cancel
Save