实现科室护士管理患者排队叫号队列,实现患者智能分诊、队列调整、叫号控制等功能
This commit is contained in:
@@ -1,55 +0,0 @@
|
||||
#\u9519\u8bef\u6d88\u606f
|
||||
not.null=* \u5fc5\u987b\u586b\u5199
|
||||
user.jcaptcha.error=\u9a8c\u8bc1\u7801\u9519\u8bef
|
||||
user.jcaptcha.expire=\u9a8c\u8bc1\u7801\u5df2\u5931\u6548
|
||||
user.not.exists=\u7528\u6237\u4e0d\u5b58\u5728/\u5bc6\u7801\u9519\u8bef
|
||||
user.password.not.match=\u7528\u6237\u4e0d\u5b58\u5728/\u5bc6\u7801\u9519\u8bef
|
||||
user.password.retry.limit.count=\u5bc6\u7801\u8f93\u5165\u9519\u8bef{0}\u6b21
|
||||
user.password.retry.limit.exceed=\u5bc6\u7801\u8f93\u5165\u9519\u8bef{0}\u6b21\uff0c\u5e10\u6237\u9501\u5b9a{1}\u5206\u949f
|
||||
user.password.delete=\u5bf9\u4e0d\u8d77\uff0c\u60a8\u7684\u8d26\u53f7\u5df2\u88ab\u5220\u9664
|
||||
user.blocked=\u7528\u6237\u5df2\u5c01\u7981\uff0c\u8bf7\u8054\u7cfb\u7ba1\u7406\u5458
|
||||
role.blocked=\u89d2\u8272\u5df2\u5c01\u7981\uff0c\u8bf7\u8054\u7cfb\u7ba1\u7406\u5458
|
||||
login.blocked=\u5f88\u9057\u61be\uff0c\u8bbf\u95eeIP\u5df2\u88ab\u5217\u5165\u7cfb\u7edf\u9ed1\u540d\u5355
|
||||
user.logout.success=\u9000\u51fa\u6210\u529f
|
||||
length.not.valid=\u957f\u5ea6\u5fc5\u987b\u5728{min}\u5230{max}\u4e2a\u5b57\u7b26\u4e4b\u95f4
|
||||
user.username.not.valid=* 2\u523020\u4e2a\u6c49\u5b57\u3001\u5b57\u6bcd\u3001\u6570\u5b57\u6216\u4e0b\u5212\u7ebf\u7ec4\u6210\uff0c\u4e14\u5fc5\u987b\u4ee5\u975e\u6570\u5b57\u5f00\u5934
|
||||
user.password.not.valid=* 5-50\u4e2a\u5b57\u7b26
|
||||
user.email.not.valid=\u90ae\u7bb1\u683c\u5f0f\u9519\u8bef
|
||||
user.mobile.phone.number.not.valid=\u624b\u673a\u53f7\u683c\u5f0f\u9519\u8bef
|
||||
user.login.success=\u767b\u5f55\u6210\u529f\u6210\u679c
|
||||
user.register.success=\u6ce8\u518c\u6210\u529f
|
||||
user.notfound=\u8bf7\u91cd\u65b0\u767b\u5f55
|
||||
user.forcelogout=\u7ba1\u7406\u5458\u5f3a\u5236\u9000\u51fa\uff0c\u8bf7\u91cd\u65b0\u767b\u5f55
|
||||
user.unknown.error=\u672a\u77e5\u9519\u8bef\uff0c\u8bf7\u91cd\u65b0\u767b\u5f55
|
||||
##\u6587\u4ef6\u4e0a\u4f20\u6d88\u606f
|
||||
upload.exceed.maxSize=\u4e0a\u4f20\u7684\u6587\u4ef6\u5927\u5c0f\u8d85\u51fa\u9650\u5236\u7684\u6587\u4ef6\u5927\u5c0f\uff01<br/>\u5141\u8bb8\u7684\u6587\u4ef6\u6700\u5927\u5927\u5c0f\u662f\uff1a{0}MB\uff01
|
||||
upload.filename.exceed.length=\u4e0a\u4f20\u7684\u6587\u4ef6\u540d\u6700\u957f{0}\u4e2a\u5b57\u7b26
|
||||
##\u6743\u9650
|
||||
no.permission=\u60a8\u6ca1\u6709\u6570\u636e\u7684\u6743\u9650\uff0c\u8bf7\u8054\u7cfb\u7ba1\u7406\u5458\u6dfb\u52a0\u6743\u9650 [{0}]
|
||||
no.create.permission=\u60a8\u6ca1\u6709\u521b\u5efa\u6570\u636e\u7684\u6743\u9650\uff0c\u8bf7\u8054\u7cfb\u7ba1\u7406\u5458\u6dfb\u52a0\u6743\u9650 [{0}]
|
||||
no.update.permission=\u60a8\u6ca1\u6709\u4fee\u6539\u6570\u636e\u7684\u6743\u9650\uff0c\u8bf7\u8054\u7cfb\u7ba1\u7406\u5458\u6dfb\u52a0\u6743\u9650 [{0}]
|
||||
no.delete.permission=\u60a8\u6ca1\u6709\u5220\u9664\u6570\u636e\u7684\u6743\u9650\uff0c\u8bf7\u8054\u7cfb\u7ba1\u7406\u5458\u6dfb\u52a0\u6743\u9650 [{0}]
|
||||
no.export.permission=\u60a8\u6ca1\u6709\u5bfc\u51fa\u6570\u636e\u7684\u6743\u9650\uff0c\u8bf7\u8054\u7cfb\u7ba1\u7406\u5458\u6dfb\u52a0\u6743\u9650 [{0}]
|
||||
no.view.permission=\u60a8\u6ca1\u6709\u67e5\u770b\u6570\u636e\u7684\u6743\u9650\uff0c\u8bf7\u8054\u7cfb\u7ba1\u7406\u5458\u6dfb\u52a0\u6743\u9650 [{0}]
|
||||
apl.common.M00001={0}\u6dfb\u52a0\u6210\u529f
|
||||
apl.common.M00002={0}\u4fdd\u5b58\u6210\u529f
|
||||
apl.common.M00003={0}\u5df2\u7ecf\u5b58\u5728
|
||||
apl.common.M00004={0}\u64cd\u4f5c\u6210\u529f
|
||||
apl.common.M00005={0}\u5220\u9664\u6210\u529f
|
||||
apl.common.M00006=\u64cd\u4f5c\u5931\u8d25,\u8be5\u6570\u636e\u5df2\u88ab\u4ed6\u4eba\u5220\u9664,\u8bf7\u5237\u65b0\u540e\u91cd\u8bd5
|
||||
apl.common.M00007=\u64cd\u4f5c\u5931\u8d25,\u8be5\u6570\u636e\u5df2\u88ab\u4ed6\u4eba\u66f4\u6539,\u8bf7\u5237\u65b0\u540e\u91cd\u8bd5
|
||||
apl.common.M00008=\u8bf7\u52ff\u91cd\u590d\u63d0\u4ea4
|
||||
apl.common.M00009=\u67e5\u8be2\u6210\u529f
|
||||
apl.common.M00010=\u64cd\u4f5c\u5931\u8d25,\u8bf7\u8054\u7cfb\u7ba1\u7406\u5458
|
||||
apl.chargeRefund.M00001=\u8be5\u6536\u8d39\u5355\u76f8\u5173{0}\u5df2\u7ecf\u53d1\u51fa\uff0c\u8bf7\u5148\u9000\u836f\u540e\u518d\u8fdb\u884c\u9000\u8d39
|
||||
apl.payment.M00001=\u5404\u7f34\u8d39\u6e20\u9053\u5b9e\u6536\u91d1\u989d\u5408\u8ba1\u4e0d\u7b49\u4e8e\u5b9e\u6536\u91d1\u989d
|
||||
apl.payment.M00002=\u5b9e\u6536\u91d1\u989d\u5408\u8ba1\u4e0d\u7b49\u4e8e\u5e94\u6536\u91d1\u989d
|
||||
apl.payment.M00003=\u8bf7\u9009\u62e9\u652f\u4ed8\u65b9\u5f0f
|
||||
apl.payment.M00004=\u67e5\u8be2\u6210\u529f
|
||||
apl.payment.M00005=\u64cd\u4f5c\u5931\u8d25,\u8bf7\u8054\u7cfb\u7ba1\u7406\u5458
|
||||
apl.payment.M00006=\u6210\u529f\u6536\u8d39
|
||||
apl.payment.M00007=\u672a\u67e5\u8be2\u5230\u6536\u8d39\u9879\u76ee
|
||||
apl.payment.M00008=\u672a\u67e5\u8be2\u5230{0}\u8d26\u6237\u4fe1\u606f
|
||||
apl.payment.M00009=\u672a\u67e5\u8be2\u5230\u6536\u8d39\u9879\u76ee\uff0c\u4e0d\u9700\u8981\u8f6c\u6362\u8d26\u6237
|
||||
apl.adjustPrice.M00001=\u6267\u884c\u5931\u8d25\uff0c\u672a\u52a0\u8f7d\u5230\u4efb\u4f55\u6570\u636e\uff01
|
||||
apl.adjustPrice.M00002=\u6267\u884c\u5931\u8d25\uff0c\u6539\u4ef7\u5355\u4e2d\u6709\u6b63\u5728\u5ba1\u6838\u4e2d\u7684\u8d27\u54c1\uff0c\u8bf7\u68c0\u67e5\u540e\u91cd\u65b0\u63d0\u4ea4\uff01
|
||||
@@ -0,0 +1,51 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.openhis.appointmentmanage.mapper.DoctorScheduleMapper">
|
||||
|
||||
<!-- 自定义插入方法,明确排除id字段(数据库GENERATED ALWAYS) -->
|
||||
<insert id="insertWithoutId" parameterType="com.openhis.appointmentmanage.domain.DoctorSchedule" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
|
||||
INSERT INTO adm_doctor_schedule (
|
||||
weekday,
|
||||
time_period,
|
||||
doctor,
|
||||
clinic,
|
||||
start_time,
|
||||
end_time,
|
||||
limit_number,
|
||||
call_sign_record,
|
||||
register_item,
|
||||
register_fee,
|
||||
diagnosis_item,
|
||||
diagnosis_fee,
|
||||
is_online,
|
||||
is_stopped,
|
||||
stop_reason,
|
||||
dept_id
|
||||
<if test="createTime != null">, create_time</if>
|
||||
<if test="updateTime != null">, update_time</if>
|
||||
) VALUES (
|
||||
#{weekday},
|
||||
#{timePeriod},
|
||||
#{doctor},
|
||||
#{clinic},
|
||||
#{startTime},
|
||||
#{endTime},
|
||||
#{limitNumber},
|
||||
#{callSignRecord},
|
||||
#{registerItem},
|
||||
#{registerFee},
|
||||
#{diagnosisItem},
|
||||
#{diagnosisFee},
|
||||
#{isOnline},
|
||||
#{isStopped},
|
||||
#{stopReason},
|
||||
#{deptId}
|
||||
<if test="createTime != null">, #{createTime}</if>
|
||||
<if test="updateTime != null">, #{updateTime}</if>
|
||||
)
|
||||
</insert>
|
||||
|
||||
</mapper>
|
||||
|
||||
@@ -81,11 +81,11 @@
|
||||
{{
|
||||
Object.keys(patientInfo).length !== 0
|
||||
? patientInfo.patientName +
|
||||
' / ' +
|
||||
patientInfo.age +
|
||||
' / ' +
|
||||
patientInfo.genderEnum_enumText +
|
||||
' / ' +
|
||||
' / ' +
|
||||
patientInfo.age +
|
||||
' / ' +
|
||||
patientInfo.genderEnum_enumText +
|
||||
' / ' +
|
||||
(patientInfo?.contractName ? patientInfo.contractName : '') +
|
||||
'/' +
|
||||
patientInfo.phone +
|
||||
@@ -137,9 +137,9 @@
|
||||
:patientInfo="patientInfo"
|
||||
ref="emrRef"
|
||||
@save="
|
||||
(value) => {
|
||||
saveStatus = value;
|
||||
}
|
||||
(value) => {
|
||||
saveStatus = value;
|
||||
}
|
||||
"
|
||||
/>
|
||||
</el-tab-pane> -->
|
||||
@@ -430,10 +430,10 @@ function getEnPrescription(encounterId) {
|
||||
type: 'error',
|
||||
message: '暂无处方单',
|
||||
});
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
prescriptionInfo.value = res.data.records;
|
||||
openPrescriptionDialog.value = true;
|
||||
openPrescriptionDialog.value = true;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -540,7 +540,7 @@ const onHospitalization = async () => {
|
||||
ElMessage({
|
||||
type: 'error',
|
||||
message: '该患者,已办理入院,不允许重复办理',
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
<el-option label="全部" value="0" />
|
||||
<el-option label="儿科" value="1" />
|
||||
<el-option label="神经内科" :value="2" />
|
||||
<el-option label="心内科" :value="3" />
|
||||
</el-select>
|
||||
<el-date-picker v-model="searchForm.endTime" v-if="searchForm.drugType == '1'" type="date" placeholder="截止时间"
|
||||
style="width: 100px" />
|
||||
|
||||
@@ -24,4 +24,104 @@ export function updateCallNumberVoiceConfig(data) {
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 分诊排队管理相关API
|
||||
// 获取智能候选池(已签到未入队)
|
||||
export function getCandidatePool(params) {
|
||||
return request({
|
||||
url: '/triage/queue/candidatePool',
|
||||
method: 'get',
|
||||
params: params,
|
||||
skipErrorMsg: true // 跳过错误提示,由组件处理
|
||||
}).catch(() => {
|
||||
// 返回一个 rejected promise,让组件可以捕获
|
||||
return Promise.reject(new Error('API未实现'))
|
||||
})
|
||||
}
|
||||
|
||||
// 获取智能队列(当前队列)
|
||||
export function getQueueList(params) {
|
||||
return request({
|
||||
url: '/triage/queue/list',
|
||||
method: 'get',
|
||||
params: params,
|
||||
skipErrorMsg: true // 跳过错误提示,由组件处理
|
||||
}).catch(() => {
|
||||
// 返回一个 rejected promise,让组件可以捕获
|
||||
return Promise.reject(new Error('API未实现'))
|
||||
})
|
||||
}
|
||||
|
||||
// 获取统计信息
|
||||
export function getQueueStatistics(params) {
|
||||
return request({
|
||||
url: '/triage/queue/statistics',
|
||||
method: 'get',
|
||||
params: params,
|
||||
skipErrorMsg: true // 跳过错误提示,由组件处理
|
||||
}).catch(() => {
|
||||
// 返回一个 rejected promise,让组件可以捕获
|
||||
return Promise.reject(new Error('API未实现'))
|
||||
})
|
||||
}
|
||||
|
||||
// 将患者加入队列
|
||||
export function addToQueue(data) {
|
||||
return request({
|
||||
url: '/triage/queue/add',
|
||||
method: 'post',
|
||||
data: data,
|
||||
skipErrorMsg: true
|
||||
}).catch(() => Promise.reject(new Error('API未实现')))
|
||||
}
|
||||
|
||||
// 调整队列顺序
|
||||
export function adjustQueueOrder(data) {
|
||||
return request({
|
||||
url: '/triage/queue/adjust',
|
||||
method: 'put',
|
||||
data: data,
|
||||
skipErrorMsg: true
|
||||
}).catch(() => Promise.reject(new Error('API未实现')))
|
||||
}
|
||||
|
||||
// 叫号控制
|
||||
export function callPatient(data) {
|
||||
return request({
|
||||
url: '/triage/queue/call',
|
||||
method: 'post',
|
||||
data: data,
|
||||
skipErrorMsg: true
|
||||
}).catch(() => Promise.reject(new Error('API未实现')))
|
||||
}
|
||||
|
||||
// 跳过患者
|
||||
export function skipPatient(data) {
|
||||
return request({
|
||||
url: '/triage/queue/skip',
|
||||
method: 'post',
|
||||
data: data,
|
||||
skipErrorMsg: true
|
||||
}).catch(() => Promise.reject(new Error('API未实现')))
|
||||
}
|
||||
|
||||
// 完成叫号
|
||||
export function completeCall(data) {
|
||||
return request({
|
||||
url: '/triage/queue/complete',
|
||||
method: 'post',
|
||||
data: data,
|
||||
skipErrorMsg: true
|
||||
}).catch(() => Promise.reject(new Error('API未实现')))
|
||||
}
|
||||
|
||||
// 过号重排
|
||||
export function requeuePatient(data) {
|
||||
return request({
|
||||
url: '/triage/queue/requeue',
|
||||
method: 'post',
|
||||
data: data,
|
||||
skipErrorMsg: true
|
||||
}).catch(() => Promise.reject(new Error('API未实现')))
|
||||
}
|
||||
57
迁移记录-DB变更记录/202512251200 add_table adm_doctor_schedule.sql
Normal file
57
迁移记录-DB变更记录/202512251200 add_table adm_doctor_schedule.sql
Normal file
@@ -0,0 +1,57 @@
|
||||
-- adm_doctor_schedule definition
|
||||
|
||||
-- Drop table
|
||||
|
||||
-- DROP TABLE adm_doctor_schedule;
|
||||
|
||||
CREATE TABLE adm_doctor_schedule (
|
||||
id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
||||
weekday VARCHAR(50) NULL,
|
||||
time_period VARCHAR(50) NULL,
|
||||
doctor VARCHAR(100) NULL,
|
||||
clinic VARCHAR(100) NULL,
|
||||
start_time TIME NULL,
|
||||
end_time TIME NULL,
|
||||
limit_number INTEGER NULL,
|
||||
call_sign_record VARCHAR(500) NOT NULL DEFAULT '',
|
||||
register_item VARCHAR(200) NULL,
|
||||
register_fee INTEGER NULL,
|
||||
diagnosis_item VARCHAR(200) NULL,
|
||||
diagnosis_fee INTEGER NULL,
|
||||
is_online BOOLEAN NULL,
|
||||
is_stopped BOOLEAN NULL,
|
||||
stop_reason VARCHAR(500) NULL,
|
||||
dept_id INTEGER NULL,
|
||||
create_time TIMESTAMPTZ(6) NULL,
|
||||
update_time TIMESTAMPTZ(6) NULL
|
||||
);
|
||||
|
||||
COMMENT ON TABLE adm_doctor_schedule IS '医生排班表';
|
||||
|
||||
-- Column comments
|
||||
|
||||
COMMENT ON COLUMN adm_doctor_schedule.id IS '主键ID(GENERATED ALWAYS)';
|
||||
COMMENT ON COLUMN adm_doctor_schedule.weekday IS '星期';
|
||||
COMMENT ON COLUMN adm_doctor_schedule.time_period IS '时段(上午/下午)';
|
||||
COMMENT ON COLUMN adm_doctor_schedule.doctor IS '医生姓名';
|
||||
COMMENT ON COLUMN adm_doctor_schedule.clinic IS '诊室';
|
||||
COMMENT ON COLUMN adm_doctor_schedule.start_time IS '开始时间';
|
||||
COMMENT ON COLUMN adm_doctor_schedule.end_time IS '结束时间';
|
||||
COMMENT ON COLUMN adm_doctor_schedule.limit_number IS '限号数量';
|
||||
COMMENT ON COLUMN adm_doctor_schedule.call_sign_record IS '号源记录';
|
||||
COMMENT ON COLUMN adm_doctor_schedule.register_item IS '挂号项目';
|
||||
COMMENT ON COLUMN adm_doctor_schedule.register_fee IS '挂号费';
|
||||
COMMENT ON COLUMN adm_doctor_schedule.diagnosis_item IS '诊查项目';
|
||||
COMMENT ON COLUMN adm_doctor_schedule.diagnosis_fee IS '诊疗费';
|
||||
COMMENT ON COLUMN adm_doctor_schedule.is_online IS '是否线上挂号';
|
||||
COMMENT ON COLUMN adm_doctor_schedule.is_stopped IS '是否停诊';
|
||||
COMMENT ON COLUMN adm_doctor_schedule.stop_reason IS '停诊原因';
|
||||
COMMENT ON COLUMN adm_doctor_schedule.dept_id IS '关联科室ID';
|
||||
COMMENT ON COLUMN adm_doctor_schedule.create_time IS '创建时间';
|
||||
COMMENT ON COLUMN adm_doctor_schedule.update_time IS '更新时间';
|
||||
|
||||
-- 插入迁移记录
|
||||
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
|
||||
VALUES ('202512251200 add_table adm_doctor_schedule', '1.0.0');
|
||||
|
||||
|
||||
Reference in New Issue
Block a user