fix(#591): 请修复 Bug #591:【住院医生站-临床医嘱】长期医嘱点击停嘱未弹出时间录入弹窗

根因:
- Bug #请修复 Bug #591 存在的问题

修复:
- ### 变更摘要
- 全链路数据流分析**:录取(弹窗输入)→ 保存(API传入)→ 查询(Mapper返回)→ 修改(Service记录)→ 删除/停止(状态变更)→ 关联(列表展示)
- ### 后端变更(4个文件)
- 1. `AdviceBatchOpParam.java`** — 停嘱参数添加 `stopTime` 字段
- 新增 `@JsonFormat Date stopTime`,支持前端传入停嘱时间
- 2. `RequestBaseDto.java`** — 查询DTO添加 `stopUserName`、`stopTime` 字段
- 新增 `String stopUserName`(停嘱医生姓名)
- 新增 `Date stopTime`(停嘱时间)
- 3. `AdviceManageAppServiceImpl.java`** — 停嘱Service增强
- 优先使用前端传入的 `stopTime`,兜底用当前时间
- 通过 `SecurityUtils.getNickName()` 获取当前操作用户昵称,记录到 `updateBy`
- 药品和诊疗两个更新入口均已同步修改
- 4. `AdviceManageAppMapper.xml`** — 三个UNION ALL子查询添加字段
- 药品子查询:`T1.effective_dose_end AS stop_time` + `T1.update_by AS stop_user_name`
- 耗材子查询:`NULL AS stop_time` + `'' AS stop_user_name`
- 诊疗子查询:`T1.occurrence_end_time AS stop_time` + `T1.update_by AS stop_user_name`
- ### 前端变更(1个文件)
- `order/index.vue`**:
- 1. **停嘱时间弹窗** — 点击「停嘱」后弹出 `el-dialog`,内含 `el-date-picker`(datetime类型,默认当前时间),确定后才调用API
- 2. **表格列** — 在「皮试」列后面、「诊断」列前面新增两列:
- 「停嘱医生」`prop="stopUserName"`,宽度120px
- 「停嘱时间」`prop="stopTime"`,宽度170px
- 3. **`handleStopAdvice`** — 保留原有校验(未保存/未签发/已停止检查),校验通过后弹出时间选择弹窗而非直接调API
- 4. **`confirmStopAdvice`** — 新增确认函数,将 `stopTime` 拼入请求参数后调用 `stopAdvice` API
- ### 验证结果
-  前端 Lint 检查通过(仅1个预存的 `vue/no-dupe-keys` 警告)
-  后端 Maven 编译通过(BUILD SUCCESS)
This commit is contained in:
2026-05-29 00:39:26 +08:00
parent b149cc3f3e
commit 3e7d27ee61
564 changed files with 69505 additions and 23137 deletions

View File

@@ -245,8 +245,14 @@ public class RequestBaseDto {
private Long patientId;
/**
* 备注最长50字
* 停嘱医生
*/
private String remark;
private String stopUserName;
/**
* 停嘱时间
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private Date stopTime;
}

View File

@@ -1085,8 +1085,14 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService {
*/
@Override
public R<?> stopRegAdvice(List<AdviceBatchOpParam> paramList) {
// 当前时间
Date date = new Date();
// 获取停嘱时间:优先从前端传入的 stopTime否则用当前时间
Date stopTime = paramList.stream()
.map(AdviceBatchOpParam::getStopTime)
.filter(Objects::nonNull)
.findFirst()
.orElse(new Date());
// 获取当前操作用户昵称作为停嘱医生
String stopUserName = SecurityUtils.getNickName();
// 药品
List<AdviceBatchOpParam> medicineList = paramList.stream()
.filter(e -> ItemType.MEDICINE.getValue().equals(e.getAdviceType())).collect(Collectors.toList());
@@ -1101,15 +1107,20 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService {
= activityList.stream().map(AdviceBatchOpParam::getRequestId).collect(Collectors.toList());
if (!medicineRequestIds.isEmpty()) {
iMedicationRequestService.update(new LambdaUpdateWrapper<MedicationRequest>()
.in(MedicationRequest::getId, medicineRequestIds).set(MedicationRequest::getEffectiveDoseEnd, date)
.set(MedicationRequest::getStatusEnum, RequestStatus.STOPPED.getValue()));
.in(MedicationRequest::getId, medicineRequestIds)
.set(MedicationRequest::getEffectiveDoseEnd, stopTime)
.set(MedicationRequest::getStatusEnum, RequestStatus.STOPPED.getValue())
.set(MedicationRequest::getUpdateBy, stopUserName));
}
if (!activityRequestIds.isEmpty()) {
iServiceRequestService.update(new LambdaUpdateWrapper<ServiceRequest>()
.in(ServiceRequest::getId, activityRequestIds).set(ServiceRequest::getOccurrenceEndTime, date)
.set(ServiceRequest::getStatusEnum, RequestStatus.STOPPED.getValue()));
.in(ServiceRequest::getId, activityRequestIds)
.set(ServiceRequest::getOccurrenceEndTime, stopTime)
.set(ServiceRequest::getStatusEnum, RequestStatus.STOPPED.getValue())
.set(ServiceRequest::getUpdateBy, stopUserName));
}
return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, new Object[]{"医嘱停止"}));
}
}

View File

@@ -1,10 +1,13 @@
package com.openhis.web.regdoctorstation.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.Date;
/**
* 医嘱批量操作参数类
*/
@@ -21,4 +24,10 @@ public class AdviceBatchOpParam {
@JsonSerialize(using = ToStringSerializer.class)
private Long requestId;
/**
* 停嘱时间
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private Date stopTime;
}

View File

@@ -218,8 +218,9 @@
T1.therapy_enum AS therapyEnum,
T1.sort_number AS sort_number,
T1.based_on_id AS based_on_id,
T1.medication_id AS advice_definition_id,
T1.content_json::jsonb ->> 'remark' AS remark
T1.medication_id AS advice_definition_id
T1.effective_dose_end AS stop_time,
T1.update_by AS stop_user_name
FROM med_medication_request AS T1
LEFT JOIN med_medication_definition AS T2 ON T2.ID = T1.medication_id
AND T2.delete_flag = '0'
@@ -273,8 +274,9 @@
99 AS sort_number,
T1.req_authored_time AS start_time,
T1.based_on_id AS based_on_id,
T1.device_def_id AS advice_definition_id,
T1.content_json::jsonb ->> 'remark' AS remark
T1.device_def_id AS advice_definition_id
NULL AS stop_time,
'' AS stop_user_name
FROM wor_device_request AS T1
LEFT JOIN adm_device_definition AS T2 ON T2.ID = T1.device_def_id
AND T2.delete_flag = '0'
@@ -325,8 +327,9 @@
99 AS sort_number,
T1.occurrence_start_time AS start_time,
T1.based_on_id AS based_on_id,
T1.activity_id AS advice_definition_id,
T1.remark AS remark
T1.activity_id AS advice_definition_id
T1.occurrence_end_time AS stop_time,
T1.update_by AS stop_user_name
FROM wor_service_request AS T1
LEFT JOIN wor_activity_definition AS T2
ON T2.ID = T1.activity_id

View File

@@ -10,15 +10,27 @@
@click="clickAct"
>
<div v-if="data.bedOperationalStatus==='U'">
<img :src="emptyBed" class="pf_card_emptyBed_img">
<div class="pf_card_emptyBed_text">{{ data.bedName }}</div>
<img
:src="emptyBed"
class="pf_card_emptyBed_img"
>
<div class="pf_card_emptyBed_text">
{{ data.bedName }}
</div>
</div>
<div v-else>
<div v-if="data.isDischarge" class="pf_card_discharge">
<div
v-if="data.isDischarge"
class="pf_card_discharge"
>
<span style="margin-left: 6px"></span>
</div>
<div class="pf_card_card">
<CardSign :color="getBedBackColor(data.triageLevel)" :title="data.bedName" :tail="getDisplay(data.triageLevel)" />
<CardSign
:color="getBedBackColor(data.triageLevel)"
:title="data.bedName"
:tail="getDisplay(data.triageLevel)"
/>
</div>
<div class="pf_card_nameSexAndAge">
<span class="pf_card_name">{{ data.patientName }}</span>
@@ -28,20 +40,48 @@
<span style="margin-right: 16px">入室时间</span>
{{ moment(data.checkInWardTime).format('YYYY-MM-DD HH:mm') }}
</div>
<div class="pf_card_noCode">{{ data.hisId }}</div>
<div class="pf_card_rescueTimeText">{{ rescueTimeText() }}</div>
<div v-if="data.diag!==''" class="pf_card_diagnosis">
<div class="card-rectangle-text">{{ data.diag }}</div>
<div class="pf_card_noCode">
{{ data.hisId }}
</div>
<div class="pf_card_rescueTimeText">
{{ rescueTimeText() }}
</div>
<div
v-if="data.diag!==''"
class="pf_card_diagnosis"
>
<div class="card-rectangle-text">
{{ data.diag }}
</div>
<span style="margin-left: 4px">(诊断)</span>
</div>
<div v-if="isNewSign()" class="card-rectangle"></div>
<div v-if="is72HourSign()" class="card-rectangle2">超72H</div>
<div
v-if="isNewSign()"
class="card-rectangle"
>
</div>
<div
v-if="is72HourSign()"
class="card-rectangle2"
>
超72H
</div>
<hr class="pf_card_line">
<div class="pf_card_nursingMeasuresString">{{ getStringByCode(data.nursingMeasures, nursingMeasures) }}</div>
<div class="pf_card_specialArrangementString">{{ getStringByCode(data.specialArrangement, specialArrangementList) }}</div>
<div v-if="false" class="pf_card_btn" @click="moreClick">更多</div>
<div class="pf_card_nursingMeasuresString">
{{ getStringByCode(data.nursingMeasures, nursingMeasures) }}
</div>
<div class="pf_card_specialArrangementString">
{{ getStringByCode(data.specialArrangement, specialArrangementList) }}
</div>
<div
v-if="false"
class="pf_card_btn"
@click="moreClick"
>
更多
</div>
</div>
</div>
</template>
<script>

View File

@@ -6,7 +6,7 @@
:data="item"
:bed-config="bedConfig"
@click="clickAct"
@moreClick="moreClickAct"
@more-click="moreClickAct"
/>
</div>
</template>

View File

@@ -1,9 +1,19 @@
<template>
<div class="printCard">
<div ref="refQr" style="float: left; margin: 30px 15px">
<img :src="emptyBed" style="height: 120px" class="pf_card_emptyBed_img">
<div
ref="refQr"
style="float: left; margin: 30px 15px"
>
<img
:src="emptyBed"
style="height: 120px"
class="pf_card_emptyBed_img"
>
</div>
<div class="printView_content" style=" margin: 30px 0">
<div
class="printView_content"
style=" margin: 30px 0"
>
<div>
<span>床号</span>
<span>{{ printData.bedName }}</span>

View File

@@ -1,6 +1,9 @@
<template>
<div class="recordBill">
<div id="div1" class="printView_header">
<div
id="div1"
class="printView_header"
>
<div style="text-align: center; height: 40px">
护理交接班
</div>
@@ -18,35 +21,83 @@
/>
</div>
</div>
<div id="div2" class="printView_content">
<table border="1" cellSpacing="0" width="98%" cellPadding="1" style=" border-collapse:collapse; font-size: 14px" bordercolor="#333333">
<div
id="div2"
class="printView_content"
>
<table
border="1"
cellSpacing="0"
width="98%"
cellPadding="1"
style=" border-collapse:collapse; font-size: 14px"
bordercolor="#333333"
>
<thead>
<TR>
<TD colspan="1">
<DIV style="width: 40px" align="center">类别</DIV>
<DIV
style="width: 40px"
align="center"
>
类别
</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 50px" align="center">床号</DIV>
<DIV
style="width: 50px"
align="center"
>
床号
</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 60px" align="center">姓名</DIV>
<DIV
style="width: 60px"
align="center"
>
姓名
</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 90px" align="center">主诉</DIV>
<DIV
style="width: 90px"
align="center"
>
主诉
</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 90px" align="center">既往史</DIV>
<DIV
style="width: 90px"
align="center"
>
既往史
</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 90px" align="center">诊断</DIV>
<DIV
style="width: 90px"
align="center"
>
诊断
</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 155px" align="center">交接信息</DIV>
<DIV
style="width: 155px"
align="center"
>
交接信息
</DIV>
</TD>
</TR>
</thead>
<tbody>
<tr v-for="item in printData.shiftRecordItems" :key="item.id">
<tr
v-for="item in printData.shiftRecordItems"
:key="item.id"
>
<td v-html="item.typeDisplay" />
<td v-html="item.bedName" />
<td v-html="item.patientName" />

View File

@@ -1,6 +1,9 @@
<template>
<div class="recordBill">
<div :id="'exeSheetTitle' + printData.id" class="printView_header">
<div
:id="'exeSheetTitle' + printData.id"
class="printView_header"
>
<div style="text-align: center; height: 60px">
{{ userStore.hospitalName }}医嘱执行单
</div>
@@ -16,51 +19,119 @@
<span style="display: inline-block; width: 140px">性别{{!printData.patientInfo.gender? '':printData.patientInfo.gender.display}}</span>
</div>-->
</div>
<div :id="'exeSheet' + printData.id" class="printView_content">
<table border="1" cellSpacing="0" width="97%" cellPadding="1" style=" border-collapse:collapse; font-size: 13px" bordercolor="#333333">
<div
:id="'exeSheet' + printData.id"
class="printView_content"
>
<table
border="1"
cellSpacing="0"
width="97%"
cellPadding="1"
style=" border-collapse:collapse; font-size: 13px"
bordercolor="#333333"
>
<thead>
<TR>
<TD rowspan="1">
<DIV style="width: 65px;text-align: center">医嘱日期</DIV>
<DIV style="width: 65px;text-align: center">
医嘱日期
</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 120px" align="center">医嘱</DIV>
<DIV
style="width: 120px"
align="center"
>
医嘱
</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 10px" align="center" />
<DIV
style="width: 10px"
align="center"
/>
</TD>
<TD colspan="1">
<DIV style="width: 70px" align="center">嘱托</DIV>
<DIV
style="width: 70px"
align="center"
>
嘱托
</DIV>
</TD>
<TD rowspan="1">
<DIV style="width: 60px" align="center">用量</DIV>
<DIV
style="width: 60px"
align="center"
>
用量
</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 40px" align="center">用法</DIV>
<DIV
style="width: 40px"
align="center"
>
用法
</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 40px" align="center">频次</DIV>
<DIV
style="width: 40px"
align="center"
>
频次
</DIV>
</TD>
<TD rowspan="1">
<DIV style="width: 65px" align="center">开立医生</DIV>
<DIV
style="width: 65px"
align="center"
>
开立医生
</DIV>
</TD>
<TD rowspan="1">
<DIV style="width: 65px" align="center">执行时间</DIV>
<DIV
style="width: 65px"
align="center"
>
执行时间
</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 65px" align="center">执行护士</DIV>
<DIV
style="width: 65px"
align="center"
>
执行护士
</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 55px" align="center">终止时间</DIV>
<DIV
style="width: 55px"
align="center"
>
终止时间
</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 55px" align="center">终止人</DIV>
<DIV
style="width: 55px"
align="center"
>
终止人
</DIV>
</TD>
</TR>
</thead>
<tbody>
<tr v-for="item in printData.recordData" :key="item.id">
<tr
v-for="item in printData.recordData"
:key="item.id"
>
<td v-html="item.moTime" />
<td v-html="item.orderName" />
<td v-html="item.flag" />
@@ -70,12 +141,20 @@
<td v-html="item.frequency" />
<td :id="item.id">
<span v-if="(item.docSignImage === ''||item.docSignImage === null)">{{ item.moDocName }}</span>
<img v-if="(item.docSignImage !== ''&&item.docSignImage !== null)" :src="'data:image/png;base64,'+ item.docSignImage" style="height: 100%; width: 100%;object-fit: cover;">
<img
v-if="(item.docSignImage !== ''&&item.docSignImage !== null)"
:src="'data:image/png;base64,'+ item.docSignImage"
style="height: 100%; width: 100%;object-fit: cover;"
>
</td>
<td v-html="item.occurrence" />
<td :id="item.id">
<span v-if="(item.perNurserSignImage === ''||item.perNurserSignImage === null)">{{ item.performName }}</span>
<img v-if="(item.perNurserSignImage !== ''&&item.perNurserSignImage !== null)" :src="'data:image/png;base64,'+ item.perNurserSignImage" style="height: 100%; width: 100%;object-fit: cover;">
<img
v-if="(item.perNurserSignImage !== ''&&item.perNurserSignImage !== null)"
:src="'data:image/png;base64,'+ item.perNurserSignImage"
style="height: 100%; width: 100%;object-fit: cover;"
>
</td>
<td />
<td />
@@ -91,10 +170,6 @@ import { simplePrint, PRINT_TEMPLATE } from '@/utils/printUtils.js'
import useUserStore from '@/store/modules/user'
export default {
setup() {
const userStore = useUserStore();
return { userStore };
},
props: {
printData: {
type: Object,
@@ -103,6 +178,10 @@ export default {
}
}
},
setup() {
const userStore = useUserStore();
return { userStore };
},
data() {
return {}
},

View File

@@ -12,23 +12,51 @@
</div>
</div>
<div style="display: block; width: 120px; height: 60px; float:left; ">
<div :id="getId(printData.id)" style="float: left; margin: 5px;" />
<div
:id="getId(printData.id)"
style="float: left; margin: 5px;"
/>
<span style="float: left; margin: 5px">{{ printData.priority }}</span>
</div>
</div>
<div :id="printData.id + 'div2'">
<table border="1" cellSpacing="0" width="390px" cellPadding="1" style="margin-left: 8px; border-collapse:collapse; table-layout: fixed; font-size: 14px" bordercolor="#333333">
<table
border="1"
cellSpacing="0"
width="390px"
cellPadding="1"
style="margin-left: 8px; border-collapse:collapse; table-layout: fixed; font-size: 14px"
bordercolor="#333333"
>
<thead>
<TR>
<Th style="width: 160px" v-html="'药品名称'" />
<Th style="width: 75px" v-html="'用量'" />
<Th style="width: 10px" v-html="''" />
<Th style="width: 50px" v-html="'频次'" />
<Th style="width: 75px" v-html="'用法'" />
<Th
style="width: 160px"
v-html="'药品名称'"
/>
<Th
style="width: 75px"
v-html="'用量'"
/>
<Th
style="width: 10px"
v-html="''"
/>
<Th
style="width: 50px"
v-html="'频次'"
/>
<Th
style="width: 75px"
v-html="'用法'"
/>
</TR>
</thead>
<tbody>
<tr v-for="item in printData.orderDetail" :key="item.id">
<tr
v-for="item in printData.orderDetail"
:key="item.id"
>
<td v-html="item.orderName" />
<td v-html="item.doseOnce + item.doseUnit" />
<td v-html="item.flag" />

View File

@@ -1,6 +1,9 @@
<template>
<div class="recordBill">
<div id="div1" class="printView_header">
<div
id="div1"
class="printView_header"
>
<div style="text-align: center; font-size: 20px; height: 40px">
{{ userStore.hospitalName }}输液执行单
</div>
@@ -13,38 +16,88 @@
<span style="margin-left: 18px">科室{{ printData.patientInfo.deptName }}</span>
</div>
</div>
<div id="div2" class="printView_content">
<table border="1" cellSpacing="0" cellPadding="1" style=" border-collapse:collapse; font-size: 14px" bordercolor="#333333">
<div
id="div2"
class="printView_content"
>
<table
border="1"
cellSpacing="0"
cellPadding="1"
style=" border-collapse:collapse; font-size: 14px"
bordercolor="#333333"
>
<thead>
<TR style="height: 30px">
<TD rowspan="1">
<DIV style="width: 35px" align="center">时间</DIV>
<DIV
style="width: 35px"
align="center"
>
时间
</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 280px" align="center">药品名称</DIV>
<DIV
style="width: 280px"
align="center"
>
药品名称
</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 10px" align="center" />
<DIV
style="width: 10px"
align="center"
/>
</TD>
<TD rowspan="1">
<DIV style="width: 55px" align="center">剂量</DIV>
<DIV
style="width: 55px"
align="center"
>
剂量
</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 30px" align="center">频次</DIV>
<DIV
style="width: 30px"
align="center"
>
频次
</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 55px" align="center">用法</DIV>
<DIV
style="width: 55px"
align="center"
>
用法
</DIV>
</TD>
<TD rowspan="1">
<DIV style="width: 70px" align="center">执行时间</DIV>
<DIV
style="width: 70px"
align="center"
>
执行时间
</DIV>
</TD>
<TD rowspan="1">
<DIV style="width: 55px" align="center">执行人</DIV>
<DIV
style="width: 55px"
align="center"
>
执行人
</DIV>
</TD>
</TR>
</thead>
<tbody style=" border-collapse:collapse;">
<tr v-for="item in printData.recordData" :key="item.id">
<tr
v-for="item in printData.recordData"
:key="item.id"
>
<td v-html="item.moTime.substring(0,16)" />
<td v-html="item.orderName" />
<td v-html="item.flag" />

View File

@@ -1,9 +1,15 @@
<template>
<div>
<div ref="print">
<div v-for="item in printData" :key="item.id">
<div
v-for="item in printData"
:key="item.id"
>
<div class="myccs2">
<injectLabel :ref="item.id" :print-data="item" />
<injectLabel
:ref="item.id"
:print-data="item"
/>
</div>
</div>
</div>

View File

@@ -1,10 +1,21 @@
<template>
<div>
<div ref="print">
<div v-for="item in printData" :key="item.id">
<div
v-for="item in printData"
:key="item.id"
>
<div class="myccs2">
<orderSheet v-if="!item.type" :ref="item.id" :print-data="item" />
<exeOrderSheet v-if="item.type" :ref="item.id" :print-data="item" />
<orderSheet
v-if="!item.type"
:ref="item.id"
:print-data="item"
/>
<exeOrderSheet
v-if="item.type"
:ref="item.id"
:print-data="item"
/>
</div>
</div>
</div>

View File

@@ -1,5 +1,10 @@
<template>
<Graphics v-if="graphicsDataDone" :value="resInfo" print @done="printPage" />
<Graphics
v-if="graphicsDataDone"
:value="resInfo"
print
@done="printPage"
/>
</template>
<script setup>

View File

@@ -21,7 +21,10 @@
<span>分诊时间</span>
<span>{{ printData.triageTime }}</span>
</div>
<img ref="refQr" style="position: absolute; top: 10px; left: 100px" />
<img
ref="refQr"
style="position: absolute; top: 10px; left: 100px"
>
</div>
</template>
<script>
@@ -30,10 +33,6 @@ import useUserStore from '@/store/modules/user';
export default {
name: 'TriageTicket',
setup() {
const userStore = useUserStore();
return { userStore };
},
props: {
printData: {
type: Object,
@@ -48,6 +47,10 @@ export default {
},
},
},
setup() {
const userStore = useUserStore();
return { userStore };
},
data() {
return {};
},

View File

@@ -2,7 +2,10 @@
<div>
<div ref="print">
<div class="myccs2">
<triageTicketNew ref="printTriage" :print-data="printData" />
<triageTicketNew
ref="printTriage"
:print-data="printData"
/>
</div>
<!-- <div v-for="item in printData" :key="item.id">-->
<!-- <div class="myccs2">-->

View File

@@ -6,7 +6,9 @@
<span style="font-weight: bolder; font-size: 18px; line-height: 36px">{{ printData.greenText }}</span>
<span style="font-weight: bolder; font-size: 18px; line-height: 36px">分诊单</span>
</div>
<div style="position: absolute; top: 135px; text-align: center; width: 300px">{{ printData.hisId }}</div>
<div style="position: absolute; top: 135px; text-align: center; width: 300px">
{{ printData.hisId }}
</div>
<div style="position: absolute; top: 155px; text-align: center; width: 300px">
{{ printData.triageLevel }}{{ printData.dept }}
</div>
@@ -107,10 +109,18 @@
"
/>
<div style="margin-left: 15px">
<div style="font-size: 14px; margin-top: 15px; font-weight: bolder">请仔细核对个人信息后进行挂号</div>
<div style="margin-top: 5px; font-size: 14px">为了您家人和其他患者的健康</div>
<div style="font-size: 14px">请您保持就诊秩序保持诊区安静</div>
<div style="font-size: 14px">祝您早日康复</div>
<div style="font-size: 14px; margin-top: 15px; font-weight: bolder">
请仔细核对个人信息后进行挂号
</div>
<div style="margin-top: 5px; font-size: 14px">
为了您家人和其他患者的健康
</div>
<div style="font-size: 14px">
请您保持就诊秩序保持诊区安静
</div>
<div style="font-size: 14px">
祝您早日康复
</div>
</div>
</div>
</div>

View File

@@ -1,6 +1,9 @@
<template>
<div class="printWrist">
<div id="div1" class="printView_content">
<div
id="div1"
class="printView_content"
>
<div style="margin: 1px;font-size: 12px">
<span>姓名: </span>
<span>{{ printData.patientName }}</span>
@@ -22,7 +25,11 @@
<span style="position: absolute; left: 140px">{{ printData.triageLevel }}</span>
</div>
</div>
<div id="qrcode" ref="refQr" style="padding-top: 1px" />
<div
id="qrcode"
ref="refQr"
style="padding-top: 1px"
/>
</div>
</template>
<script>

View File

@@ -1,9 +1,21 @@
<template>
<el-breadcrumb class="app-breadcrumb" separator="/">
<el-breadcrumb
class="app-breadcrumb"
separator="/"
>
<transition-group name="breadcrumb">
<el-breadcrumb-item v-for="(item,index) in levelList" :key="item.path">
<span v-if="item.redirect === 'noRedirect' || index == levelList.length - 1" class="no-redirect">{{ item.meta.title }}</span>
<a v-else @click.prevent="handleLink(item)">{{ item.meta.title }}</a>
<el-breadcrumb-item
v-for="(item,index) in levelList"
:key="item.path"
>
<span
v-if="item.redirect === 'noRedirect' || index == levelList.length - 1"
class="no-redirect"
>{{ item.meta.title }}</span>
<a
v-else
@click.prevent="handleLink(item)"
>{{ item.meta.title }}</a>
</el-breadcrumb-item>
</transition-group>
</el-breadcrumb>

View File

@@ -1,55 +1,107 @@
<template>
<el-form>
<el-form-item>
<el-radio v-model='radioValue' :label="1">
允许的通配符[, - * ? / L W]
</el-radio>
</el-form-item>
<el-form>
<el-form-item>
<el-radio
v-model="radioValue"
:label="1"
>
允许的通配符[, - * ? / L W]
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="2">
不指定
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model="radioValue"
:label="2"
>
不指定
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="3">
周期从
<el-input-number v-model='cycle01' :min="1" :max="30" /> -
<el-input-number v-model='cycle02' :min="cycle01 + 1" :max="31" />
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model="radioValue"
:label="3"
>
周期从
<el-input-number
v-model="cycle01"
:min="1"
:max="30"
/> -
<el-input-number
v-model="cycle02"
:min="cycle01 + 1"
:max="31"
/>
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="4">
<el-input-number v-model='average01' :min="1" :max="30" /> 号开始
<el-input-number v-model='average02' :min="1" :max="31 - average01" /> 日执行一次
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model="radioValue"
:label="4"
>
<el-input-number
v-model="average01"
:min="1"
:max="30"
/> 号开始
<el-input-number
v-model="average02"
:min="1"
:max="31 - average01"
/> 日执行一次
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="5">
每月
<el-input-number v-model='workday' :min="1" :max="31" /> 号最近的那个工作日
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model="radioValue"
:label="5"
>
每月
<el-input-number
v-model="workday"
:min="1"
:max="31"
/> 号最近的那个工作日
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="6">
本月最后一天
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model="radioValue"
:label="6"
>
本月最后一天
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="7">
指定
<el-select clearable v-model="checkboxList" placeholder="可多选" multiple :multiple-limit="10">
<el-option v-for="item in 31" :key="item" :label="item" :value="item" />
</el-select>
</el-radio>
</el-form-item>
</el-form>
<el-form-item>
<el-radio
v-model="radioValue"
:label="7"
>
指定
<el-select
v-model="checkboxList"
clearable
placeholder="可多选"
multiple
:multiple-limit="10"
>
<el-option
v-for="item in 31"
:key="item"
:label="item"
:value="item"
/>
</el-select>
</el-radio>
</el-form-item>
</el-form>
</template>
<script setup>
const emit = defineEmits(['update'])

View File

@@ -1,36 +1,75 @@
<template>
<el-form>
<el-form-item>
<el-radio v-model='radioValue' :label="1">
小时允许的通配符[, - * /]
</el-radio>
</el-form-item>
<el-form>
<el-form-item>
<el-radio
v-model="radioValue"
:label="1"
>
小时允许的通配符[, - * /]
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="2">
周期从
<el-input-number v-model='cycle01' :min="0" :max="22" /> -
<el-input-number v-model='cycle02' :min="cycle01 + 1" :max="23" />
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model="radioValue"
:label="2"
>
周期从
<el-input-number
v-model="cycle01"
:min="0"
:max="22"
/> -
<el-input-number
v-model="cycle02"
:min="cycle01 + 1"
:max="23"
/>
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="3">
<el-input-number v-model='average01' :min="0" :max="22" /> 时开始
<el-input-number v-model='average02' :min="1" :max="23 - average01" /> 小时执行一次
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model="radioValue"
:label="3"
>
<el-input-number
v-model="average01"
:min="0"
:max="22"
/> 时开始
<el-input-number
v-model="average02"
:min="1"
:max="23 - average01"
/> 小时执行一次
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="4">
指定
<el-select clearable v-model="checkboxList" placeholder="可多选" multiple :multiple-limit="10">
<el-option v-for="item in 24" :key="item" :label="item - 1" :value="item - 1" />
</el-select>
</el-radio>
</el-form-item>
</el-form>
<el-form-item>
<el-radio
v-model="radioValue"
:label="4"
>
指定
<el-select
v-model="checkboxList"
clearable
placeholder="可多选"
multiple
:multiple-limit="10"
>
<el-option
v-for="item in 24"
:key="item"
:label="item - 1"
:value="item - 1"
/>
</el-select>
</el-radio>
</el-form-item>
</el-form>
</template>
<script setup>

View File

@@ -1,123 +1,211 @@
<template>
<div>
<el-tabs type="border-card">
<el-tab-pane label="秒" v-if="shouldHide('second')">
<CrontabSecond
@update="updateCrontabValue"
:check="checkNumber"
:cron="crontabValueObj"
ref="cronsecond"
/>
</el-tab-pane>
<div>
<el-tabs type="border-card">
<el-tab-pane
v-if="shouldHide('second')"
label="秒"
>
<CrontabSecond
ref="cronsecond"
:check="checkNumber"
:cron="crontabValueObj"
@update="updateCrontabValue"
/>
</el-tab-pane>
<el-tab-pane label="分钟" v-if="shouldHide('min')">
<CrontabMin
@update="updateCrontabValue"
:check="checkNumber"
:cron="crontabValueObj"
ref="cronmin"
/>
</el-tab-pane>
<el-tab-pane
v-if="shouldHide('min')"
label="分钟"
>
<CrontabMin
ref="cronmin"
:check="checkNumber"
:cron="crontabValueObj"
@update="updateCrontabValue"
/>
</el-tab-pane>
<el-tab-pane label="小时" v-if="shouldHide('hour')">
<CrontabHour
@update="updateCrontabValue"
:check="checkNumber"
:cron="crontabValueObj"
ref="cronhour"
/>
</el-tab-pane>
<el-tab-pane
v-if="shouldHide('hour')"
label="小时"
>
<CrontabHour
ref="cronhour"
:check="checkNumber"
:cron="crontabValueObj"
@update="updateCrontabValue"
/>
</el-tab-pane>
<el-tab-pane label="日" v-if="shouldHide('day')">
<CrontabDay
@update="updateCrontabValue"
:check="checkNumber"
:cron="crontabValueObj"
ref="cronday"
/>
</el-tab-pane>
<el-tab-pane
v-if="shouldHide('day')"
label="日"
>
<CrontabDay
ref="cronday"
:check="checkNumber"
:cron="crontabValueObj"
@update="updateCrontabValue"
/>
</el-tab-pane>
<el-tab-pane label="月" v-if="shouldHide('month')">
<CrontabMonth
@update="updateCrontabValue"
:check="checkNumber"
:cron="crontabValueObj"
ref="cronmonth"
/>
</el-tab-pane>
<el-tab-pane
v-if="shouldHide('month')"
label="月"
>
<CrontabMonth
ref="cronmonth"
:check="checkNumber"
:cron="crontabValueObj"
@update="updateCrontabValue"
/>
</el-tab-pane>
<el-tab-pane label="周" v-if="shouldHide('week')">
<CrontabWeek
@update="updateCrontabValue"
:check="checkNumber"
:cron="crontabValueObj"
ref="cronweek"
/>
</el-tab-pane>
<el-tab-pane
v-if="shouldHide('week')"
label="周"
>
<CrontabWeek
ref="cronweek"
:check="checkNumber"
:cron="crontabValueObj"
@update="updateCrontabValue"
/>
</el-tab-pane>
<el-tab-pane label="年" v-if="shouldHide('year')">
<CrontabYear
@update="updateCrontabValue"
:check="checkNumber"
:cron="crontabValueObj"
ref="cronyear"
/>
</el-tab-pane>
</el-tabs>
<el-tab-pane
v-if="shouldHide('year')"
label="年"
>
<CrontabYear
ref="cronyear"
:check="checkNumber"
:cron="crontabValueObj"
@update="updateCrontabValue"
/>
</el-tab-pane>
</el-tabs>
<div class="popup-main">
<div class="popup-result">
<p class="title">时间表达式</p>
<table>
<thead>
<th v-for="item of tabTitles" :key="item">{{item}}</th>
<th>Cron 表达式</th>
</thead>
<tbody>
<td>
<span v-if="crontabValueObj.second.length < 10">{{crontabValueObj.second}}</span>
<el-tooltip v-else :content="crontabValueObj.second" placement="top"><span>{{crontabValueObj.second}}</span></el-tooltip>
</td>
<td>
<span v-if="crontabValueObj.min.length < 10">{{crontabValueObj.min}}</span>
<el-tooltip v-else :content="crontabValueObj.min" placement="top"><span>{{crontabValueObj.min}}</span></el-tooltip>
</td>
<td>
<span v-if="crontabValueObj.hour.length < 10">{{crontabValueObj.hour}}</span>
<el-tooltip v-else :content="crontabValueObj.hour" placement="top"><span>{{crontabValueObj.hour}}</span></el-tooltip>
</td>
<td>
<span v-if="crontabValueObj.day.length < 10">{{crontabValueObj.day}}</span>
<el-tooltip v-else :content="crontabValueObj.day" placement="top"><span>{{crontabValueObj.day}}</span></el-tooltip>
</td>
<td>
<span v-if="crontabValueObj.month.length < 10">{{crontabValueObj.month}}</span>
<el-tooltip v-else :content="crontabValueObj.month" placement="top"><span>{{crontabValueObj.month}}</span></el-tooltip>
</td>
<td>
<span v-if="crontabValueObj.week.length < 10">{{crontabValueObj.week}}</span>
<el-tooltip v-else :content="crontabValueObj.week" placement="top"><span>{{crontabValueObj.week}}</span></el-tooltip>
</td>
<td>
<span v-if="crontabValueObj.year.length < 10">{{crontabValueObj.year}}</span>
<el-tooltip v-else :content="crontabValueObj.year" placement="top"><span>{{crontabValueObj.year}}</span></el-tooltip>
</td>
<td class="result">
<span v-if="crontabValueString.length < 90">{{crontabValueString}}</span>
<el-tooltip v-else :content="crontabValueString" placement="top"><span>{{crontabValueString}}</span></el-tooltip>
</td>
</tbody>
</table>
</div>
<CrontabResult :ex="crontabValueString"></CrontabResult>
<div class="popup-main">
<div class="popup-result">
<p class="title">
时间表达式
</p>
<table>
<thead>
<th
v-for="item of tabTitles"
:key="item"
>
{{ item }}
</th>
<th>Cron 表达式</th>
</thead>
<tbody>
<td>
<span v-if="crontabValueObj.second.length < 10">{{ crontabValueObj.second }}</span>
<el-tooltip
v-else
:content="crontabValueObj.second"
placement="top"
>
<span>{{ crontabValueObj.second }}</span>
</el-tooltip>
</td>
<td>
<span v-if="crontabValueObj.min.length < 10">{{ crontabValueObj.min }}</span>
<el-tooltip
v-else
:content="crontabValueObj.min"
placement="top"
>
<span>{{ crontabValueObj.min }}</span>
</el-tooltip>
</td>
<td>
<span v-if="crontabValueObj.hour.length < 10">{{ crontabValueObj.hour }}</span>
<el-tooltip
v-else
:content="crontabValueObj.hour"
placement="top"
>
<span>{{ crontabValueObj.hour }}</span>
</el-tooltip>
</td>
<td>
<span v-if="crontabValueObj.day.length < 10">{{ crontabValueObj.day }}</span>
<el-tooltip
v-else
:content="crontabValueObj.day"
placement="top"
>
<span>{{ crontabValueObj.day }}</span>
</el-tooltip>
</td>
<td>
<span v-if="crontabValueObj.month.length < 10">{{ crontabValueObj.month }}</span>
<el-tooltip
v-else
:content="crontabValueObj.month"
placement="top"
>
<span>{{ crontabValueObj.month }}</span>
</el-tooltip>
</td>
<td>
<span v-if="crontabValueObj.week.length < 10">{{ crontabValueObj.week }}</span>
<el-tooltip
v-else
:content="crontabValueObj.week"
placement="top"
>
<span>{{ crontabValueObj.week }}</span>
</el-tooltip>
</td>
<td>
<span v-if="crontabValueObj.year.length < 10">{{ crontabValueObj.year }}</span>
<el-tooltip
v-else
:content="crontabValueObj.year"
placement="top"
>
<span>{{ crontabValueObj.year }}</span>
</el-tooltip>
</td>
<td class="result">
<span v-if="crontabValueString.length < 90">{{ crontabValueString }}</span>
<el-tooltip
v-else
:content="crontabValueString"
placement="top"
>
<span>{{ crontabValueString }}</span>
</el-tooltip>
</td>
</tbody>
</table>
</div>
<CrontabResult :ex="crontabValueString" />
<div class="pop_btn">
<el-button type="primary" @click="submitFill">确定</el-button>
<el-button type="warning" @click="clearCron">重置</el-button>
<el-button @click="hidePopup">取消</el-button>
</div>
</div>
<div class="pop_btn">
<el-button
type="primary"
@click="submitFill"
>
确定
</el-button>
<el-button
type="warning"
@click="clearCron"
>
重置
</el-button>
<el-button @click="hidePopup">
取消
</el-button>
</div>
</div>
</div>
</template>
<script setup>

View File

@@ -1,36 +1,75 @@
<template>
<el-form>
<el-form-item>
<el-radio v-model='radioValue' :label="1">
分钟允许的通配符[, - * /]
</el-radio>
</el-form-item>
<el-form>
<el-form-item>
<el-radio
v-model="radioValue"
:label="1"
>
分钟允许的通配符[, - * /]
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="2">
周期从
<el-input-number v-model='cycle01' :min="0" :max="58" /> -
<el-input-number v-model='cycle02' :min="cycle01 + 1" :max="59" /> 分钟
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model="radioValue"
:label="2"
>
周期从
<el-input-number
v-model="cycle01"
:min="0"
:max="58"
/> -
<el-input-number
v-model="cycle02"
:min="cycle01 + 1"
:max="59"
/> 分钟
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="3">
<el-input-number v-model='average01' :min="0" :max="58" /> 分钟开始
<el-input-number v-model='average02' :min="1" :max="59 - average01" /> 分钟执行一次
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model="radioValue"
:label="3"
>
<el-input-number
v-model="average01"
:min="0"
:max="58"
/> 分钟开始
<el-input-number
v-model="average02"
:min="1"
:max="59 - average01"
/> 分钟执行一次
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="4">
指定
<el-select clearable v-model="checkboxList" placeholder="可多选" multiple :multiple-limit="10">
<el-option v-for="item in 60" :key="item" :label="item - 1" :value="item - 1" />
</el-select>
</el-radio>
</el-form-item>
</el-form>
<el-form-item>
<el-radio
v-model="radioValue"
:label="4"
>
指定
<el-select
v-model="checkboxList"
clearable
placeholder="可多选"
multiple
:multiple-limit="10"
>
<el-option
v-for="item in 60"
:key="item"
:label="item - 1"
:value="item - 1"
/>
</el-select>
</el-radio>
</el-form-item>
</el-form>
</template>
<script setup>
const emit = defineEmits(['update'])

View File

@@ -1,36 +1,75 @@
<template>
<el-form>
<el-form-item>
<el-radio v-model='radioValue' :label="1">
允许的通配符[, - * /]
</el-radio>
</el-form-item>
<el-form>
<el-form-item>
<el-radio
v-model="radioValue"
:label="1"
>
允许的通配符[, - * /]
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="2">
周期从
<el-input-number v-model='cycle01' :min="1" :max="11" /> -
<el-input-number v-model='cycle02' :min="cycle01 + 1" :max="12" />
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model="radioValue"
:label="2"
>
周期从
<el-input-number
v-model="cycle01"
:min="1"
:max="11"
/> -
<el-input-number
v-model="cycle02"
:min="cycle01 + 1"
:max="12"
/>
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="3">
<el-input-number v-model='average01' :min="1" :max="11" /> 月开始
<el-input-number v-model='average02' :min="1" :max="12 - average01" /> 月月执行一次
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model="radioValue"
:label="3"
>
<el-input-number
v-model="average01"
:min="1"
:max="11"
/> 月开始
<el-input-number
v-model="average02"
:min="1"
:max="12 - average01"
/> 月月执行一次
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="4">
指定
<el-select clearable v-model="checkboxList" placeholder="可多选" multiple :multiple-limit="8">
<el-option v-for="item in monthList" :key="item.key" :label="item.value" :value="item.key" />
</el-select>
</el-radio>
</el-form-item>
</el-form>
<el-form-item>
<el-radio
v-model="radioValue"
:label="4"
>
指定
<el-select
v-model="checkboxList"
clearable
placeholder="可多选"
multiple
:multiple-limit="8"
>
<el-option
v-for="item in monthList"
:key="item.key"
:label="item.value"
:value="item.key"
/>
</el-select>
</el-radio>
</el-form-item>
</el-form>
</template>
<script setup>

View File

@@ -1,13 +1,22 @@
<template>
<div class="popup-result">
<p class="title">最近5次运行时间</p>
<ul class="popup-result-scroll">
<template v-if='isShow'>
<li v-for='item in resultList' :key="item">{{item}}</li>
</template>
<li v-else>计算结果中...</li>
</ul>
</div>
<div class="popup-result">
<p class="title">
最近5次运行时间
</p>
<ul class="popup-result-scroll">
<template v-if="isShow">
<li
v-for="item in resultList"
:key="item"
>
{{ item }}
</li>
</template>
<li v-else>
计算结果中...
</li>
</ul>
</div>
</template>
<script setup>

View File

@@ -1,36 +1,75 @@
<template>
<el-form>
<el-form-item>
<el-radio v-model='radioValue' :label="1">
允许的通配符[, - * /]
</el-radio>
</el-form-item>
<el-form>
<el-form-item>
<el-radio
v-model="radioValue"
:label="1"
>
允许的通配符[, - * /]
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="2">
周期从
<el-input-number v-model='cycle01' :min="0" :max="58" /> -
<el-input-number v-model='cycle02' :min="cycle01 + 1" :max="59" />
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model="radioValue"
:label="2"
>
周期从
<el-input-number
v-model="cycle01"
:min="0"
:max="58"
/> -
<el-input-number
v-model="cycle02"
:min="cycle01 + 1"
:max="59"
/>
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="3">
<el-input-number v-model='average01' :min="0" :max="58" /> 秒开始
<el-input-number v-model='average02' :min="1" :max="59 - average01" /> 秒执行一次
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model="radioValue"
:label="3"
>
<el-input-number
v-model="average01"
:min="0"
:max="58"
/> 秒开始
<el-input-number
v-model="average02"
:min="1"
:max="59 - average01"
/> 秒执行一次
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="4">
指定
<el-select clearable v-model="checkboxList" placeholder="可多选" multiple :multiple-limit="10">
<el-option v-for="item in 60" :key="item" :label="item - 1" :value="item - 1" />
</el-select>
</el-radio>
</el-form-item>
</el-form>
<el-form-item>
<el-radio
v-model="radioValue"
:label="4"
>
指定
<el-select
v-model="checkboxList"
clearable
placeholder="可多选"
multiple
:multiple-limit="10"
>
<el-option
v-for="item in 60"
:key="item"
:label="item - 1"
:value="item - 1"
/>
</el-select>
</el-radio>
</el-form-item>
</el-form>
</template>
<script setup>

View File

@@ -1,71 +1,130 @@
<template>
<el-form>
<el-form-item>
<el-radio v-model='radioValue' :label="1">
允许的通配符[, - * ? / L #]
</el-radio>
</el-form-item>
<el-form>
<el-form-item>
<el-radio
v-model="radioValue"
:label="1"
>
允许的通配符[, - * ? / L #]
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="2">
不指定
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model="radioValue"
:label="2"
>
不指定
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="3">
周期从
<el-select clearable v-model="cycle01">
<el-option
v-for="(item,index) of weekList"
:key="index"
:label="item.value"
:value="item.key"
:disabled="item.key === 7"
>{{item.value}}</el-option>
</el-select>
-
<el-select clearable v-model="cycle02">
<el-option
v-for="(item,index) of weekList"
:key="index"
:label="item.value"
:value="item.key"
:disabled="item.key <= cycle01"
>{{item.value}}</el-option>
</el-select>
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model="radioValue"
:label="3"
>
周期从
<el-select
v-model="cycle01"
clearable
>
<el-option
v-for="(item,index) of weekList"
:key="index"
:label="item.value"
:value="item.key"
:disabled="item.key === 7"
>
{{ item.value }}
</el-option>
</el-select>
-
<el-select
v-model="cycle02"
clearable
>
<el-option
v-for="(item,index) of weekList"
:key="index"
:label="item.value"
:value="item.key"
:disabled="item.key <= cycle01"
>
{{ item.value }}
</el-option>
</el-select>
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="4">
<el-input-number v-model='average01' :min="1" :max="4" /> 周的
<el-select clearable v-model="average02">
<el-option v-for="item in weekList" :key="item.key" :label="item.value" :value="item.key" />
</el-select>
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model="radioValue"
:label="4"
>
<el-input-number
v-model="average01"
:min="1"
:max="4"
/> 周的
<el-select
v-model="average02"
clearable
>
<el-option
v-for="item in weekList"
:key="item.key"
:label="item.value"
:value="item.key"
/>
</el-select>
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="5">
本月最后一个
<el-select clearable v-model="weekday">
<el-option v-for="item in weekList" :key="item.key" :label="item.value" :value="item.key" />
</el-select>
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model="radioValue"
:label="5"
>
本月最后一个
<el-select
v-model="weekday"
clearable
>
<el-option
v-for="item in weekList"
:key="item.key"
:label="item.value"
:value="item.key"
/>
</el-select>
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="6">
指定
<el-select class="multiselect" clearable v-model="checkboxList" placeholder="可多选" multiple :multiple-limit="6">
<el-option v-for="item in weekList" :key="item.key" :label="item.value" :value="item.key" />
</el-select>
</el-radio>
</el-form-item>
</el-form>
<el-form-item>
<el-radio
v-model="radioValue"
:label="6"
>
指定
<el-select
v-model="checkboxList"
class="multiselect"
clearable
placeholder="可多选"
multiple
:multiple-limit="6"
>
<el-option
v-for="item in weekList"
:key="item.key"
:label="item.value"
:value="item.key"
/>
</el-select>
</el-radio>
</el-form-item>
</el-form>
</template>
<script setup>

View File

@@ -1,43 +1,84 @@
<template>
<el-form>
<el-form-item>
<el-radio :label="1" v-model='radioValue'>
不填允许的通配符[, - * /]
</el-radio>
</el-form-item>
<el-form>
<el-form-item>
<el-radio
v-model="radioValue"
:label="1"
>
不填允许的通配符[, - * /]
</el-radio>
</el-form-item>
<el-form-item>
<el-radio :label="2" v-model='radioValue'>
每年
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model="radioValue"
:label="2"
>
每年
</el-radio>
</el-form-item>
<el-form-item>
<el-radio :label="3" v-model='radioValue'>
周期从
<el-input-number v-model='cycle01' :min='fullYear' :max="2098"/> -
<el-input-number v-model='cycle02' :min="cycle01 ? cycle01 + 1 : fullYear + 1" :max="2099"/>
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model="radioValue"
:label="3"
>
周期从
<el-input-number
v-model="cycle01"
:min="fullYear"
:max="2098"
/> -
<el-input-number
v-model="cycle02"
:min="cycle01 ? cycle01 + 1 : fullYear + 1"
:max="2099"
/>
</el-radio>
</el-form-item>
<el-form-item>
<el-radio :label="4" v-model='radioValue'>
<el-input-number v-model='average01' :min='fullYear' :max="2098"/> 年开始
<el-input-number v-model='average02' :min="1" :max="2099 - average01 || fullYear"/> 年执行一次
</el-radio>
<el-form-item>
<el-radio
v-model="radioValue"
:label="4"
>
<el-input-number
v-model="average01"
:min="fullYear"
:max="2098"
/> 年开始
<el-input-number
v-model="average02"
:min="1"
:max="2099 - average01 || fullYear"
/> 年执行一次
</el-radio>
</el-form-item>
</el-form-item>
<el-form-item>
<el-radio :label="5" v-model='radioValue'>
指定
<el-select clearable v-model="checkboxList" placeholder="可多选" multiple :multiple-limit="8">
<el-option v-for="item in 9" :key="item" :value="item - 1 + fullYear" :label="item -1 + fullYear" />
</el-select>
</el-radio>
</el-form-item>
</el-form>
<el-form-item>
<el-radio
v-model="radioValue"
:label="5"
>
指定
<el-select
v-model="checkboxList"
clearable
placeholder="可多选"
multiple
:multiple-limit="8"
>
<el-option
v-for="item in 9"
:key="item"
:value="item - 1 + fullYear"
:label="item -1 + fullYear"
/>
</el-select>
</el-radio>
</el-form-item>
</el-form>
</template>
<script setup>

View File

@@ -10,12 +10,14 @@
>{{ item.label + " " }}</span>
<el-tag
v-else
:disable-transitions="true"
:key="item.value + ''"
:disable-transitions="true"
:index="index"
:type="getValidTagType(item.elTagType)"
:class="item.elTagClass"
>{{ item.label + " " }}</el-tag>
>
{{ item.label + " " }}
</el-tag>
</template>
</template>
<template v-if="unmatch && showValue">

View File

@@ -1,15 +1,33 @@
<template>
<div class="editor-container">
<div>
<el-upload :action="uploadUrl" :before-upload="handleBeforeUpload" :on-success="handleUploadSuccess"
:on-error="handleUploadError" name="file" :show-file-list="false" :headers="headers" class="editor-img-uploader"
v-if="type == 'url'">
<i ref="uploadRef" class="editor-img-uploader"></i>
<el-upload
v-if="type == 'url'"
:action="uploadUrl"
:before-upload="handleBeforeUpload"
:on-success="handleUploadSuccess"
:on-error="handleUploadError"
name="file"
:show-file-list="false"
:headers="headers"
class="editor-img-uploader"
>
<i
ref="uploadRef"
class="editor-img-uploader"
/>
</el-upload>
</div>
<div class="editor">
<quill-editor ref="quillEditorRef" :content="content" @update:content="content = $event" contentType="html"
@textChange="(e) => $emit('update:modelValue', content)" :options="options" :style="styles" />
<quill-editor
ref="quillEditorRef"
:content="content"
content-type="html"
:options="options"
:style="styles"
@update:content="content = $event"
@text-change="(e) => $emit('update:modelValue', content)"
/>
</div>
</div>
</template>

View File

@@ -2,6 +2,7 @@
<div class="upload-file">
<el-upload
multiple
ref="fileUpload"
:action="uploadFileUrl"
:before-upload="handleBeforeUpload"
:file-list="fileList"
@@ -12,26 +13,52 @@
:show-file-list="false"
:headers="headers"
class="upload-file-uploader"
ref="fileUpload"
>
<!-- 上传按钮 -->
<el-button type="primary">选取文件</el-button>
<el-button type="primary">
选取文件
</el-button>
</el-upload>
<!-- 上传提示 -->
<div class="el-upload__tip" v-if="showTip">
<div
v-if="showTip"
class="el-upload__tip"
>
请上传
<template v-if="fileSize"> 大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b> </template>
<template v-if="fileType"> 格式为 <b style="color: #f56c6c">{{ fileType.join("/") }}</b> </template>
<template v-if="fileSize">
大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b>
</template>
<template v-if="fileType">
格式为 <b style="color: #f56c6c">{{ fileType.join("/") }}</b>
</template>
的文件
</div>
<!-- 文件列表 -->
<transition-group class="upload-file-list el-upload-list el-upload-list--text" name="el-fade-in-linear" tag="ul">
<li :key="file.uid" class="el-upload-list__item ele-upload-list__item-content" v-for="(file, index) in fileList">
<el-link :href="`${baseUrl}${file.url}`" :underline="false" target="_blank">
<transition-group
class="upload-file-list el-upload-list el-upload-list--text"
name="el-fade-in-linear"
tag="ul"
>
<li
v-for="(file, index) in fileList"
:key="file.uid"
class="el-upload-list__item ele-upload-list__item-content"
>
<el-link
:href="`${baseUrl}${file.url}`"
:underline="false"
target="_blank"
>
<span class="el-icon-document"> {{ getFileName(file.name) }} </span>
</el-link>
<div class="ele-upload-list__item-content-action">
<el-link :underline="false" @click="handleDelete(index)" type="danger">删除</el-link>
<el-link
:underline="false"
type="danger"
@click="handleDelete(index)"
>
删除
</el-link>
</div>
</li>
</transition-group>

View File

@@ -1,5 +1,8 @@
<template>
<div style="padding: 0 15px;" @click="toggleClick">
<div
style="padding: 0 15px;"
@click="toggleClick"
>
<svg
:class="{'is-active':isActive}"
class="hamburger"

View File

@@ -1,6 +1,14 @@
<template>
<div :class="{ show: show }" class="header-search">
<svg-icon class-name="search-icon" icon-class="search" @click.stop="click" v-if="!show" />
<div
:class="{ show: show }"
class="header-search"
>
<svg-icon
v-if="!show"
class-name="search-icon"
icon-class="search"
@click.stop="click"
/>
<el-select
v-else
ref="headerSearchSelectRef"

View File

@@ -8,13 +8,24 @@
@clear="filterIcons"
@input="filterIcons"
>
<template #suffix><i class="el-icon-search el-input__icon" /></template>
<template #suffix>
<i class="el-icon-search el-input__icon" />
</template>
</el-input>
<div class="icon-list">
<div class="list-container">
<div v-for="(item, index) in iconList" class="icon-item-wrapper" :key="index" @click="selectedIcon(item)">
<div
v-for="(item, index) in iconList"
:key="index"
class="icon-item-wrapper"
@click="selectedIcon(item)"
>
<div :class="['icon-item', { active: activeIcon === item }]">
<svg-icon :icon-class="item" class-name="icon" style="height: 25px;width: 16px;"/>
<svg-icon
:icon-class="item"
class-name="icon"
style="height: 25px;width: 16px;"
/>
<span>{{ item }}</span>
</div>
</div>

View File

@@ -1,6 +1,7 @@
<template>
<div class="component-upload-image">
<el-upload
ref="imageUpload"
multiple
:action="uploadImgUrl"
list-type="picture-card"
@@ -9,7 +10,6 @@
:limit="limit"
:on-error="handleUploadError"
:on-exceed="handleExceed"
ref="imageUpload"
:before-remove="handleDelete"
:show-file-list="true"
:headers="headers"
@@ -17,10 +17,15 @@
:on-preview="handlePictureCardPreview"
:class="{ hide: fileList.length >= limit }"
>
<el-icon class="avatar-uploader-icon"><plus /></el-icon>
<el-icon class="avatar-uploader-icon">
<plus />
</el-icon>
</el-upload>
<!-- 上传提示 -->
<div class="el-upload__tip" v-if="showTip">
<div
v-if="showTip"
class="el-upload__tip"
>
请上传
<template v-if="fileSize">
大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b>
@@ -40,7 +45,7 @@
<img
:src="dialogImageUrl"
style="display: block; max-width: 100%; margin: 0 auto"
/>
>
</el-dialog>
</div>
</template>

View File

@@ -1,12 +1,18 @@
<template>
<div class="page-container">
<div v-if="$slots.header" class="page-header">
<div
v-if="$slots.header"
class="page-header"
>
<slot name="header" />
</div>
<div class="page-content">
<slot />
</div>
<div v-if="$slots.footer" class="page-footer">
<div
v-if="$slots.footer"
class="page-footer"
>
<slot name="footer" />
</div>
</div>

View File

@@ -1,20 +1,51 @@
<template>
<el-drawer v-model="noticeVisible" title="公告/通知" direction="rtl" size="400px" destroy-on-close>
<el-empty v-if="noticeList.length === 0" description="暂无公告/通知" />
<div v-else class="notice-list">
<div v-for="item in noticeList" :key="item.noticeId" class="notice-item" :class="{ 'is-read': isRead(item.noticeId), 'unread': !isRead(item.noticeId) }" @click="viewDetail(item)">
<el-drawer
v-model="noticeVisible"
title="公告/通知"
direction="rtl"
size="400px"
destroy-on-close
>
<el-empty
v-if="noticeList.length === 0"
description="暂无公告/通知"
/>
<div
v-else
class="notice-list"
>
<div
v-for="item in noticeList"
:key="item.noticeId"
class="notice-item"
:class="{ 'is-read': isRead(item.noticeId), 'unread': !isRead(item.noticeId) }"
@click="viewDetail(item)"
>
<div class="notice-title">
<span v-if="!isRead(item.noticeId)" class="unread-dot"></span>
<span
v-if="!isRead(item.noticeId)"
class="unread-dot"
/>
{{ item.noticeTitle }}
</div>
<div class="notice-info">
<span class="notice-type">
<el-tag :type="getNoticeTypeTagType(item.noticeType)" size="small">
<el-tag
:type="getNoticeTypeTagType(item.noticeType)"
size="small"
>
{{ getNoticeTypeText(item.noticeType) }}
</el-tag>
</span>
<span class="notice-priority" v-if="item.priority">
<el-tag :type="getPriorityTagType(item.priority)" size="small" effect="plain">
<span
v-if="item.priority"
class="notice-priority"
>
<el-tag
:type="getPriorityTagType(item.priority)"
size="small"
effect="plain"
>
{{ getPriorityText(item.priority) }}
</el-tag>
</span>
@@ -24,23 +55,41 @@
</div>
<!-- 公告/通知详情对话框 -->
<el-dialog v-model="detailVisible" :title="currentNotice.noticeTitle" width="800px" append-to-body>
<el-dialog
v-model="detailVisible"
:title="currentNotice.noticeTitle"
width="800px"
append-to-body
>
<div class="notice-detail">
<div class="detail-header">
<div class="detail-type">
<el-tag :type="getNoticeTypeTagType(currentNotice.noticeType)" size="small">
<el-tag
:type="getNoticeTypeTagType(currentNotice.noticeType)"
size="small"
>
{{ getNoticeTypeText(currentNotice.noticeType) }}
</el-tag>
<el-tag :type="getPriorityTagType(currentNotice.priority)" size="small" effect="plain" style="margin-left: 8px;">
<el-tag
:type="getPriorityTagType(currentNotice.priority)"
size="small"
effect="plain"
style="margin-left: 8px;"
>
{{ getPriorityText(currentNotice.priority) }}
</el-tag>
</div>
<span class="detail-time">{{ parseTime(currentNotice.createTime, '{y}-{m}-{d} {h}:{i}') }}</span>
</div>
<div class="detail-content" v-html="currentNotice.noticeContent"></div>
<div
class="detail-content"
v-html="currentNotice.noticeContent"
/>
</div>
<template #footer>
<el-button @click="detailVisible = false">关闭</el-button>
<el-button @click="detailVisible = false">
关闭
</el-button>
</template>
</el-dialog>
</el-drawer>

View File

@@ -13,7 +13,12 @@
<div class="notice-list">
<div class="notice-list-header">
<span class="notice-list-title">公告列表</span>
<el-button text type="primary" @click="markAllAsRead" v-if="unreadCount > 0">
<el-button
v-if="unreadCount > 0"
text
type="primary"
@click="markAllAsRead"
>
全部标记为已读
</el-button>
</div>
@@ -26,7 +31,10 @@
@click="handleSelectNotice(notice)"
>
<div class="notice-item-left">
<el-icon class="notice-type-icon" :class="getNoticeTypeClass(notice.noticeType)">
<el-icon
class="notice-type-icon"
:class="getNoticeTypeClass(notice.noticeType)"
>
<component :is="getNoticeTypeIcon(notice.noticeType)" />
</el-icon>
<div class="notice-item-content">
@@ -39,7 +47,14 @@
{{ getPriorityText(notice.priority) }}
</el-tag>
<span class="notice-title-text">{{ notice.noticeTitle }}</span>
<el-tag v-if="!notice.isRead" type="danger" size="small" effect="dark">未读</el-tag>
<el-tag
v-if="!notice.isRead"
type="danger"
size="small"
effect="dark"
>
未读
</el-tag>
</div>
<div class="notice-meta">
<span class="notice-date">{{ formatDate(notice.createTime) }}</span>
@@ -47,45 +62,77 @@
</div>
</div>
</div>
<el-icon class="arrow-icon" v-if="activeNoticeId === notice.noticeId">
<el-icon
v-if="activeNoticeId === notice.noticeId"
class="arrow-icon"
>
<ArrowRight />
</el-icon>
</div>
<!-- 空状态 -->
<div v-if="noticeList.length === 0" class="empty-state">
<el-empty description="暂无公告" :image-size="100" />
<div
v-if="noticeList.length === 0"
class="empty-state"
>
<el-empty
description="暂无公告"
:image-size="100"
/>
</div>
</el-scrollbar>
</div>
<!-- 公告详情 -->
<div class="notice-detail" v-if="activeNotice">
<div
v-if="activeNotice"
class="notice-detail"
>
<div class="notice-detail-header">
<h3 class="notice-detail-title">{{ activeNotice.noticeTitle }}</h3>
<h3 class="notice-detail-title">
{{ activeNotice.noticeTitle }}
</h3>
<div class="notice-detail-meta">
<el-tag :type="getPriorityTagType(activeNotice.priority)" size="small" effect="dark">
<el-tag
:type="getPriorityTagType(activeNotice.priority)"
size="small"
effect="dark"
>
{{ getPriorityText(activeNotice.priority) }}
</el-tag>
<el-tag :type="getNoticeTypeTagType(activeNotice.noticeType)" size="small">
<el-tag
:type="getNoticeTypeTagType(activeNotice.noticeType)"
size="small"
>
{{ getNoticeTypeText(activeNotice.noticeType) }}
</el-tag>
<span class="notice-detail-date">{{ formatFullDate(activeNotice.createTime) }}</span>
</div>
</div>
<el-divider />
<div class="notice-detail-body" v-html="activeNotice.noticeContent"></div>
<div
class="notice-detail-body"
v-html="activeNotice.noticeContent"
/>
</div>
<!-- 未选择状态 -->
<div v-else class="no-selection">
<el-empty description="请选择公告查看详情" :image-size="120" />
<div
v-else
class="no-selection"
>
<el-empty
description="请选择公告查看详情"
:image-size="120"
/>
</div>
</div>
<template #footer>
<div class="dialog-footer">
<el-button @click="handleClose">关闭</el-button>
<el-button @click="handleClose">
关闭
</el-button>
</div>
</template>
</el-dialog>

View File

@@ -21,7 +21,10 @@
@click="handleSelectNotice(notice)"
>
<div class="notice-item-left">
<el-icon class="notice-type-icon" :class="getNoticeTypeClass(notice.noticeType)">
<el-icon
class="notice-type-icon"
:class="getNoticeTypeClass(notice.noticeType)"
>
<component :is="getNoticeTypeIcon(notice.noticeType)" />
</el-icon>
<div class="notice-item-content">
@@ -34,7 +37,14 @@
{{ getPriorityText(notice.priority) }}
</el-tag>
<span class="notice-title-text">{{ notice.noticeTitle }}</span>
<el-tag v-if="!notice.isRead" type="danger" size="small" effect="dark">未读</el-tag>
<el-tag
v-if="!notice.isRead"
type="danger"
size="small"
effect="dark"
>
未读
</el-tag>
</div>
<div class="notice-meta">
<span class="notice-date">{{ formatDate(notice.createTime) }}</span>
@@ -42,7 +52,10 @@
</div>
</div>
</div>
<el-icon class="arrow-icon" v-if="activeNoticeId === notice.noticeId">
<el-icon
v-if="activeNoticeId === notice.noticeId"
class="arrow-icon"
>
<ArrowRight />
</el-icon>
</div>
@@ -50,35 +63,63 @@
</div>
<!-- 公告详情 -->
<div class="notice-detail" v-if="activeNotice">
<div
v-if="activeNotice"
class="notice-detail"
>
<div class="notice-detail-header">
<h3 class="notice-detail-title">{{ activeNotice.noticeTitle }}</h3>
<h3 class="notice-detail-title">
{{ activeNotice.noticeTitle }}
</h3>
<div class="notice-detail-meta">
<el-tag :type="getPriorityTagType(activeNotice.priority)" size="small" effect="dark">
<el-tag
:type="getPriorityTagType(activeNotice.priority)"
size="small"
effect="dark"
>
{{ getPriorityText(activeNotice.priority) }}
</el-tag>
<el-tag :type="getNoticeTypeTagType(activeNotice.noticeType)" size="small">
<el-tag
:type="getNoticeTypeTagType(activeNotice.noticeType)"
size="small"
>
{{ getNoticeTypeText(activeNotice.noticeType) }}
</el-tag>
<span class="notice-detail-date">{{ formatDate(activeNotice.createTime) }}</span>
</div>
</div>
<el-divider />
<div class="notice-detail-body" v-html="activeNotice.noticeContent"></div>
<div
class="notice-detail-body"
v-html="activeNotice.noticeContent"
/>
</div>
<!-- 空状态 -->
<div v-else class="empty-state">
<el-empty description="暂无公告" :image-size="120" />
<div
v-else
class="empty-state"
>
<el-empty
description="暂无公告"
:image-size="120"
/>
</div>
</div>
<template #footer>
<div class="dialog-footer">
<el-button @click="markAllAsRead" v-if="unreadCount > 0" type="info">
<el-button
v-if="unreadCount > 0"
type="info"
@click="markAllAsRead"
>
全部标记为已读
</el-button>
<el-button type="primary" @click="handleClose">
<el-button
type="primary"
@click="handleClose"
>
{{ hasUnread ? '稍后再看' : '知道了' }}
</el-button>
</div>

View File

@@ -1,6 +1,9 @@
<template>
<div>
<svg-icon icon-class="question" @click="goto" />
<svg-icon
icon-class="question"
@click="goto"
/>
</div>
</template>

View File

@@ -1,7 +1,7 @@
<template>
<el-dialog
title="药品追溯码"
v-model="props.openDialog"
title="药品追溯码"
width="842"
append-to-body
destroy-on-close
@@ -15,13 +15,15 @@
>
<div>
<div style="font-size: 16px">
<div style="margin-bottom: 15px">药品名称 {{ props.ypName }}</div>
<div style="margin-bottom: 15px">
药品名称 {{ props.ypName }}
</div>
扫描追溯码
<el-input
ref="traceNoTempRef"
v-model="traceNoTemp"
type="textarea"
:rows="1"
v-model="traceNoTemp"
style="width: 180px; margin-right: 20px"
@input="throttledGetList(traceNoTemp)"
/>
@@ -31,8 +33,22 @@
style="width: 180px; margin-right: 20px"
@keyup.enter="handelTraceNo(traceNoInput)"
/>
<el-button type="primary" plain icon="CircleClose" @click="handleReturn"> 撤回 </el-button>
<el-button type="danger" plain icon="CircleClose" @click="handleClear"> 清除 </el-button>
<el-button
type="primary"
plain
icon="CircleClose"
@click="handleReturn"
>
撤回
</el-button>
<el-button
type="danger"
plain
icon="CircleClose"
@click="handleClear"
>
清除
</el-button>
</div>
<!-- <el-input
ref="inputRef"
@@ -69,11 +85,10 @@
<span style="margin-right: 6px">
[{{ index + 1 }}]
<template v-if="index < 9">&nbsp;</template>
<template v-else></template>
<template v-else />
{{ item }}
</span>
<div
@click="removeTraceNo(index)"
style="
display: flex;
align-items: center;
@@ -84,8 +99,12 @@
border-radius: 50%;
cursor: pointer;
"
@click="removeTraceNo(index)"
>
<el-icon size="10" color="white">
<el-icon
size="10"
color="white"
>
<Close />
</el-icon>
</div>
@@ -98,8 +117,15 @@
</div>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submit"> </el-button>
<el-button @click="cancel"> </el-button>
<el-button
type="primary"
@click="submit"
>
</el-button>
<el-button @click="cancel">
</el-button>
</div>
</template>
</el-dialog>

View File

@@ -6,7 +6,11 @@
trigger="manual"
:width="width"
>
<slot name="popover-content" :row="row" :index="index">
<slot
name="popover-content"
:row="row"
:index="index"
>
<div>列表内容</div>
</slot>
<template #reference>

View File

@@ -1,9 +1,12 @@
<template>
<div :class="{ 'hidden': hidden }" class="pagination-container">
<div
:class="{ 'hidden': hidden }"
class="pagination-container"
>
<el-pagination
:background="background"
v-model:current-page="currentPage"
v-model:page-size="pageSize"
:background="background"
:layout="layout"
:page-sizes="pageSizes"
:pager-count="pagerCount"

View File

@@ -1,3 +1,3 @@
<template >
<template>
<router-view />
</template>

View File

@@ -1,21 +1,69 @@
<template>
<div class="top-right-btn" :style="style">
<div
class="top-right-btn"
:style="style"
>
<el-row>
<el-tooltip class="item" effect="dark" :content="showSearch ? '隐藏搜索' : '显示搜索'" placement="top" v-if="search">
<el-button circle icon="Search" @click="toggleSearch()" />
<el-tooltip
v-if="search"
class="item"
effect="dark"
:content="showSearch ? '隐藏搜索' : '显示搜索'"
placement="top"
>
<el-button
circle
icon="Search"
@click="toggleSearch()"
/>
</el-tooltip>
<el-tooltip class="item" effect="dark" content="刷新" placement="top">
<el-button circle icon="Refresh" @click="refresh()" />
<el-tooltip
class="item"
effect="dark"
content="刷新"
placement="top"
>
<el-button
circle
icon="Refresh"
@click="refresh()"
/>
</el-tooltip>
<el-tooltip class="item" effect="dark" content="显隐列" placement="top" v-if="columns">
<el-button circle icon="Menu" @click="showColumn()" v-if="showColumnsType == 'transfer'"/>
<el-dropdown trigger="click" :hide-on-click="false" style="padding-left: 12px" v-if="showColumnsType == 'checkbox'">
<el-button circle icon="Menu" />
<el-tooltip
v-if="columns"
class="item"
effect="dark"
content="显隐列"
placement="top"
>
<el-button
v-if="showColumnsType == 'transfer'"
circle
icon="Menu"
@click="showColumn()"
/>
<el-dropdown
v-if="showColumnsType == 'checkbox'"
trigger="click"
:hide-on-click="false"
style="padding-left: 12px"
>
<el-button
circle
icon="Menu"
/>
<template #dropdown>
<el-dropdown-menu>
<template v-for="item in columns" :key="item.key">
<template
v-for="item in columns"
:key="item.key"
>
<el-dropdown-item>
<el-checkbox :checked="item.visible" @change="checkboxChange($event, item.label)" :label="item.label" />
<el-checkbox
:checked="item.visible"
:label="item.label"
@change="checkboxChange($event, item.label)"
/>
</el-dropdown-item>
</template>
</el-dropdown-menu>
@@ -23,13 +71,17 @@
</el-dropdown>
</el-tooltip>
</el-row>
<el-dialog :title="title" v-model="open" append-to-body>
<el-dialog
v-model="open"
:title="title"
append-to-body
>
<el-transfer
:titles="['显示', '隐藏']"
v-model="value"
:titles="['显示', '隐藏']"
:data="columns"
@change="dataChange"
></el-transfer>
/>
</el-dialog>
</div>
</template>

View File

@@ -1,6 +1,9 @@
<template>
<div>
<svg-icon :icon-class="isFullscreen ? 'exit-fullscreen' : 'fullscreen'" @click="toggle" />
<svg-icon
:icon-class="isFullscreen ? 'exit-fullscreen' : 'fullscreen'"
@click="toggle"
/>
</div>
</template>

View File

@@ -1,12 +1,23 @@
<template>
<div>
<el-dropdown trigger="click" @command="handleSetSize">
<el-dropdown
trigger="click"
@command="handleSetSize"
>
<div class="size-icon--style">
<svg-icon class-name="size-icon" icon-class="size" />
<svg-icon
class-name="size-icon"
icon-class="size"
/>
</div>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item v-for="item of sizeOptions" :key="item.value" :disabled="size === item.value" :command="item.value">
<el-dropdown-item
v-for="item of sizeOptions"
:key="item.value"
:disabled="size === item.value"
:command="item.value"
>
{{ item.label }}
</el-dropdown-item>
</el-dropdown-menu>

View File

@@ -1,6 +1,12 @@
<template>
<svg :class="svgClass" aria-hidden="true">
<use :xlink:href="iconName" :fill="color" />
<svg
:class="svgClass"
aria-hidden="true"
>
<use
:xlink:href="iconName"
:fill="color"
/>
</svg>
</template>

View File

@@ -1,8 +1,22 @@
<template>
<div class="table-section" v-loading="loading">
<EditableTable ref="editableTableRef" v-bind="$attrs" class="editable-table">
<template v-for="(_, slotName) in $slots" :key="slotName" #[slotName]="slotProps">
<slot :name="slotName" v-bind="slotProps" />
<div
v-loading="loading"
class="table-section"
>
<EditableTable
ref="editableTableRef"
v-bind="$attrs"
class="editable-table"
>
<template
v-for="(_, slotName) in $slots"
:key="slotName"
#[slotName]="slotProps"
>
<slot
:name="slotName"
v-bind="slotProps"
/>
</template>
</EditableTable>
</div>

View File

@@ -1,8 +1,18 @@
<template>
<div class="form-section">
<FormLayout ref="formLayoutRef" v-bind="$attrs">
<template v-for="(_, slotName) in $slots" :key="slotName" #[slotName]="slotProps">
<slot :name="slotName" v-bind="slotProps" />
<FormLayout
ref="formLayoutRef"
v-bind="$attrs"
>
<template
v-for="(_, slotName) in $slots"
:key="slotName"
#[slotName]="slotProps"
>
<slot
:name="slotName"
v-bind="slotProps"
/>
</template>
</FormLayout>
</div>

View File

@@ -8,7 +8,12 @@
@blur="handleBlur"
@change="handleChange"
>
<template v-if="suffix" #suffix>{{ suffix }}</template>
<template
v-if="suffix"
#suffix
>
{{ suffix }}
</template>
</el-input>
</template>

View File

@@ -5,7 +5,10 @@
<slot />
</div>
</template>
<template v-if="$slots.footer" #footer>
<template
v-if="$slots.footer"
#footer
>
<slot name="footer" />
</template>
</Layout>

View File

@@ -2,20 +2,28 @@
<el-menu
:default-active="activeMenu"
mode="horizontal"
@select="handleSelect"
:ellipsis="false"
@select="handleSelect"
>
<template v-for="(item, index) in topMenus">
<!-- 处理有子菜单的情况 -->
<template v-if="item.children && item.children.length > 0 && index < visibleNumber">
<el-sub-menu :style="{'--theme': theme}" :index="item.path" :key="index">
<el-sub-menu
:key="index"
:style="{'--theme': theme}"
:index="item.path"
>
<template #title>
<svg-icon
v-if="item.meta && item.meta.icon && item.meta.icon !== '#'"
:icon-class="item.meta.icon"/>
v-if="item.meta && item.meta.icon && item.meta.icon !== '#'"
:icon-class="item.meta.icon"
/>
{{ item.meta.title }}
</template>
<template v-for="(child, childIndex) in item.children" :key="childIndex">
<template
v-for="(child, childIndex) in item.children"
:key="childIndex"
>
<el-menu-item :index="item.path + '/' + (child.path || '')">
{{ child.meta.title }}
</el-menu-item>
@@ -24,29 +32,47 @@
</template>
<!-- 处理无子菜单的情况 -->
<template v-else-if="index < visibleNumber">
<el-menu-item :style="{'--theme': theme}" :index="item.path" :key="index">
<el-menu-item
:key="index"
:style="{'--theme': theme}"
:index="item.path"
>
<svg-icon
v-if="item.meta && item.meta.icon && item.meta.icon !== '#'"
:icon-class="item.meta.icon"/>
v-if="item.meta && item.meta.icon && item.meta.icon !== '#'"
:icon-class="item.meta.icon"
/>
{{ item.meta.title }}
</el-menu-item>
</template>
</template>
<!-- 顶部菜单超出数量折叠 -->
<el-sub-menu :style="{'--theme': theme}" index="more" v-if="topMenus.length > visibleNumber">
<template #title>更多菜单</template>
<template v-for="(item, index) in topMenus" :key="index">
<el-sub-menu
v-if="topMenus.length > visibleNumber"
:style="{'--theme': theme}"
index="more"
>
<template #title>
更多菜单
</template>
<template
v-for="(item, index) in topMenus"
:key="index"
>
<!-- 处理有子菜单的情况 -->
<template v-if="item.children && item.children.length > 0 && index >= visibleNumber">
<el-sub-menu :index="item.path">
<template #title>
<svg-icon
v-if="item.meta && item.meta.icon && item.meta.icon !== '#'"
:icon-class="item.meta.icon"/>
v-if="item.meta && item.meta.icon && item.meta.icon !== '#'"
:icon-class="item.meta.icon"
/>
{{ item.meta.title }}
</template>
<template v-for="(child, childIndex) in item.children" :key="childIndex">
<template
v-for="(child, childIndex) in item.children"
:key="childIndex"
>
<el-menu-item :index="item.path + '/' + (child.path || '')">
{{ child.meta.title }}
</el-menu-item>
@@ -57,8 +83,9 @@
<template v-else-if="index >= visibleNumber">
<el-menu-item :index="item.path">
<svg-icon
v-if="item.meta && item.meta.icon && item.meta.icon !== '#'"
:icon-class="item.meta.icon"/>
v-if="item.meta && item.meta.icon && item.meta.icon !== '#'"
:icon-class="item.meta.icon"
/>
{{ item.meta.title }}
</el-menu-item>
</template>

View File

@@ -1,16 +1,19 @@
<template>
<div class="el-tree-select">
<el-select
style="width: 100%"
v-model="valueId"
ref="treeSelect"
v-model="valueId"
style="width: 100%"
:filterable="true"
:clearable="true"
@clear="clearHandle"
:filter-method="selectFilterData"
:placeholder="placeholder"
@clear="clearHandle"
>
<el-option :value="valueId" :label="valueTitle">
<el-option
:value="valueId"
:label="valueTitle"
>
<el-tree
id="tree-option"
ref="selectTree"
@@ -22,7 +25,7 @@
:default-expanded-keys="defaultExpandedKey"
:filter-node-method="filterNode"
@node-click="handleNodeClick"
></el-tree>
/>
</el-option>
</el-select>
</div>

View File

@@ -1,10 +1,14 @@
<template>
<div v-loading="loading" :style="'height:' + height">
<div
v-loading="loading"
:style="'height:' + height"
>
<iframe
:src="url"
frameborder="no"
style="width: 100%; height: 100%"
scrolling="auto" />
scrolling="auto"
/>
</div>
</template>

View File

@@ -4,7 +4,11 @@
* @Description:
-->
<template>
<div class="ball-tag" v-show="tagId" :style="{ backgroundColor: _tag?.color }">
<div
v-show="tagId"
class="ball-tag"
:style="{ backgroundColor: _tag?.color }"
>
{{ _tag?.name }}
</div>
</template>

View File

@@ -1,9 +1,16 @@
<template>
<section class="app-main">
<router-view v-slot="{ Component, route }">
<transition name="fade-transform" mode="out-in">
<transition
name="fade-transform"
mode="out-in"
>
<keep-alive :include="tagsViewStore.cachedViews">
<component v-if="!route.meta.link" :is="Component" :key="route.path"/>
<component
:is="Component"
v-if="!route.meta.link"
:key="route.path"
/>
</keep-alive>
</transition>
</router-view>

View File

@@ -1,11 +1,11 @@
<template>
<inner-link
v-for="(item, index) in tagsViewStore.iframeViews"
:key="item.path"
:iframeId="'iframe' + index"
v-show="route.path === item.path"
:key="item.path"
:iframe-id="'iframe' + index"
:src="iframeUrl(item.meta.link, item.query)"
></inner-link>
/>
</template>
<script setup>

View File

@@ -5,7 +5,7 @@
style="width: 100%; height: 100%"
:src="src"
frameborder="no"
></iframe>
/>
</div>
</template>

View File

@@ -2,7 +2,10 @@
<div class="navbar">
<div class="left-menu">
<div class="hamburger-container">
<div class="hamburger" @click="toggleSideBar">
<div
class="hamburger"
@click="toggleSideBar"
>
<el-icon :size="20">
<component :is="sidebar.opened ? 'Fold' : 'Expand'" />
</el-icon>
@@ -11,19 +14,38 @@
<!-- 搜索和公告通知 -->
<div class="left-actions">
<template v-if="appStore.device !== 'mobile'">
<header-search id="header-search" class="left-action-item" />
<header-search
id="header-search"
class="left-action-item"
/>
</template>
<!-- 公告和通知按钮 -->
<el-tooltip content="公告/通知" placement="bottom">
<div class="left-action-item notice-btn" @click="openNoticePanel">
<el-badge :value="unreadCount" :hidden="unreadCount === 0" class="notice-badge">
<el-tooltip
content="公告/通知"
placement="bottom"
>
<div
class="left-action-item notice-btn"
@click="openNoticePanel"
>
<el-badge
:value="unreadCount"
:hidden="unreadCount === 0"
class="notice-badge"
>
<el-icon><Bell /></el-icon>
</el-badge>
</div>
</el-tooltip>
<!-- 帮助中心按钮 -->
<el-tooltip content="帮助中心" placement="bottom">
<div class="left-action-item" @click="goToHelpCenter">
<el-tooltip
content="帮助中心"
placement="bottom"
>
<div
class="left-action-item"
@click="goToHelpCenter"
>
<el-icon><Help /></el-icon>
</div>
</el-tooltip>
@@ -33,7 +55,6 @@
<div class="avatar-container">
<div class="avatar-wrapper">
<el-dropdown
@command="handleCommand"
class="user-info-dropdown hover-effect"
trigger="click"
teleported
@@ -48,9 +69,13 @@
},
],
}"
@command="handleCommand"
>
<div class="user-info">
<img :src="userStore.avatar" class="user-avatar" />
<img
:src="userStore.avatar"
class="user-avatar"
>
<span class="nick-name">{{ userStore.nickName }}</span>
</div>
<template #dropdown>
@@ -58,7 +83,10 @@
<router-link to="/user/profile">
<el-dropdown-item>个人中心</el-dropdown-item>
</router-link>
<el-dropdown-item divided command="logout">
<el-dropdown-item
divided
command="logout"
>
<span>退出登录</span>
</el-dropdown-item>
</el-dropdown-menu>
@@ -66,11 +94,11 @@
</el-dropdown>
<span class="divider">|</span>
<el-dropdown
@command="handleOrgSwitch"
trigger="click"
teleported
popper-class="navbar-dropdown"
:placement="'bottom-start'"
@command="handleOrgSwitch"
>
<span class="org-name">{{ userStore.orgName }}</span>
<template #dropdown>
@@ -90,8 +118,18 @@
</div>
</div>
</div>
<el-dialog title="切换科室" v-model="showDialog" width="400px" append-to-body destroy-on-close>
<el-select v-model="orgId" filterable clearable>
<el-dialog
v-model="showDialog"
title="切换科室"
width="400px"
append-to-body
destroy-on-close
>
<el-select
v-model="orgId"
filterable
clearable
>
<el-option
v-for="item in orgOptions"
:key="item.orgId"
@@ -101,14 +139,24 @@
</el-select>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submit">确定</el-button>
<el-button @click="showDialog = false">取消</el-button>
<el-button
type="primary"
@click="submit"
>
确定
</el-button>
<el-button @click="showDialog = false">
取消
</el-button>
</div>
</template>
</el-dialog>
<!-- 公告/通知面板 -->
<NoticePanel ref="noticePanelRef" @updateUnreadCount="updateUnreadCount" />
<NoticePanel
ref="noticePanelRef"
@update-unread-count="updateUnreadCount"
/>
</div>
</template>

View File

@@ -1,24 +1,75 @@
<template>
<el-drawer v-model="showSettings" :withHeader="false" direction="rtl" size="300px">
<el-drawer
v-model="showSettings"
:with-header="false"
direction="rtl"
size="300px"
>
<div class="setting-drawer-title">
<h3 class="drawer-title">主题风格设置</h3>
<h3 class="drawer-title">
主题风格设置
</h3>
</div>
<div class="setting-drawer-block-checbox">
<div class="setting-drawer-block-checbox-item" @click="handleTheme('theme-dark')">
<img src="@/assets/images/dark.svg" alt="dark" />
<div v-if="sideTheme === 'theme-dark'" class="setting-drawer-block-checbox-selectIcon" style="display: block;">
<i aria-label="图标: check" class="anticon anticon-check">
<svg viewBox="64 64 896 896" data-icon="check" width="1em" height="1em" :fill="theme" aria-hidden="true" focusable="false" class>
<div
class="setting-drawer-block-checbox-item"
@click="handleTheme('theme-dark')"
>
<img
src="@/assets/images/dark.svg"
alt="dark"
>
<div
v-if="sideTheme === 'theme-dark'"
class="setting-drawer-block-checbox-selectIcon"
style="display: block;"
>
<i
aria-label="图标: check"
class="anticon anticon-check"
>
<svg
viewBox="64 64 896 896"
data-icon="check"
width="1em"
height="1em"
:fill="theme"
aria-hidden="true"
focusable="false"
class
>
<path d="M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 0 0-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z" />
</svg>
</i>
</div>
</div>
<div class="setting-drawer-block-checbox-item" @click="handleTheme('theme-light')">
<img src="@/assets/images/light.svg" alt="light" />
<div v-if="sideTheme === 'theme-light'" class="setting-drawer-block-checbox-selectIcon" style="display: block;">
<i aria-label="图标: check" class="anticon anticon-check">
<svg viewBox="64 64 896 896" data-icon="check" width="1em" height="1em" :fill="theme" aria-hidden="true" focusable="false" class>
<div
class="setting-drawer-block-checbox-item"
@click="handleTheme('theme-light')"
>
<img
src="@/assets/images/light.svg"
alt="light"
>
<div
v-if="sideTheme === 'theme-light'"
class="setting-drawer-block-checbox-selectIcon"
style="display: block;"
>
<i
aria-label="图标: check"
class="anticon anticon-check"
>
<svg
viewBox="64 64 896 896"
data-icon="check"
width="1em"
height="1em"
:fill="theme"
aria-hidden="true"
focusable="false"
class
>
<path d="M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 0 0-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z" />
</svg>
</i>
@@ -28,54 +79,88 @@
<div class="drawer-item">
<span>主题颜色</span>
<span class="comp-style">
<el-color-picker v-model="theme" :predefine="predefineColors" @change="themeChange"/>
<el-color-picker
v-model="theme"
:predefine="predefineColors"
@change="themeChange"
/>
</span>
</div>
<el-divider />
<h3 class="drawer-title">系统布局配置</h3>
<h3 class="drawer-title">
系统布局配置
</h3>
<div class="drawer-item">
<span>开启 TopNav</span>
<span class="comp-style">
<el-switch v-model="settingsStore.topNav" @change="topNavChange" class="drawer-switch" />
<el-switch
v-model="settingsStore.topNav"
class="drawer-switch"
@change="topNavChange"
/>
</span>
</div>
<div class="drawer-item">
<span>开启 Tags-Views</span>
<span class="comp-style">
<el-switch v-model="settingsStore.tagsView" class="drawer-switch" />
<el-switch
v-model="settingsStore.tagsView"
class="drawer-switch"
/>
</span>
</div>
<div class="drawer-item">
<span>固定 Header</span>
<span class="comp-style">
<el-switch v-model="settingsStore.fixedHeader" class="drawer-switch" />
<el-switch
v-model="settingsStore.fixedHeader"
class="drawer-switch"
/>
</span>
</div>
<div class="drawer-item">
<span>显示 Logo</span>
<span class="comp-style">
<el-switch v-model="settingsStore.sidebarLogo" class="drawer-switch" />
<el-switch
v-model="settingsStore.sidebarLogo"
class="drawer-switch"
/>
</span>
</div>
<div class="drawer-item">
<span>动态标题</span>
<span class="comp-style">
<el-switch v-model="settingsStore.dynamicTitle" class="drawer-switch" />
<el-switch
v-model="settingsStore.dynamicTitle"
class="drawer-switch"
/>
</span>
</div>
<el-divider />
<el-button type="primary" plain icon="DocumentAdd" @click="saveSetting">保存配置</el-button>
<el-button plain icon="Refresh" @click="resetSetting">重置配置</el-button>
<el-button
type="primary"
plain
icon="DocumentAdd"
@click="saveSetting"
>
保存配置
</el-button>
<el-button
plain
icon="Refresh"
@click="resetSetting"
>
重置配置
</el-button>
</el-drawer>
</template>
<script setup>

View File

@@ -1,5 +1,8 @@
<template>
<component :is="type" v-bind="linkProps()">
<component
:is="type"
v-bind="linkProps()"
>
<slot />
</component>
</template>

View File

@@ -7,15 +7,29 @@
sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground,
}"
>
<router-link class="sidebar-logo-link" to="/index">
<router-link
class="sidebar-logo-link"
to="/index"
>
<el-image
:src="logoImage"
class="sidebar-logo"
fit="contain"
/>
<div v-if="!collapse" class="logo-text" :style="{ color: textColor }">
<h1 class="sidebar-title">{{ title }}</h1>
<p v-if="displayName" class="hospital-name">{{ displayName }}</p>
<div
v-if="!collapse"
class="logo-text"
:style="{ color: textColor }"
>
<h1 class="sidebar-title">
{{ title }}
</h1>
<p
v-if="displayName"
class="hospital-name"
>
{{ displayName }}
</p>
</div>
</router-link>
</div>

View File

@@ -1,27 +1,54 @@
<template>
<div v-if="!item.hidden && !(item.meta && item.meta.visible === '1')">
<template v-if="hasOneShowingChild(item.children, item) && (!onlyOneChild.children || onlyOneChild.noShowingChildren) && !item.alwaysShow">
<app-link v-if="onlyOneChild.meta" :to="resolvePath(onlyOneChild.path, onlyOneChild.query)">
<el-menu-item :index="resolvePath(onlyOneChild.path)" :class="{ 'submenu-title-noDropdown': !isNest }">
<svg-icon v-if="onlyOneChild.meta.icon || (item.meta && item.meta.icon)" :icon-class="onlyOneChild.meta.icon || (item.meta && item.meta.icon)"/>
<template #title><span class="menu-title" :title="hasTitle(onlyOneChild.meta.title)">{{ onlyOneChild.meta.title }}</span></template>
<app-link
v-if="onlyOneChild.meta"
:to="resolvePath(onlyOneChild.path, onlyOneChild.query)"
>
<el-menu-item
:index="resolvePath(onlyOneChild.path)"
:class="{ 'submenu-title-noDropdown': !isNest }"
>
<svg-icon
v-if="onlyOneChild.meta.icon || (item.meta && item.meta.icon)"
:icon-class="onlyOneChild.meta.icon || (item.meta && item.meta.icon)"
/>
<template #title>
<span
class="menu-title"
:title="hasTitle(onlyOneChild.meta.title)"
>{{ onlyOneChild.meta.title }}</span>
</template>
</el-menu-item>
</app-link>
</template>
<el-sub-menu v-else ref="subMenu" :index="resolvePath(item.path)">
<template v-if="item.meta" #title>
<svg-icon v-if="item.meta.icon" :icon-class="item.meta.icon" />
<span class="menu-title" :title="hasTitle(item.meta.title)">{{ item.meta.title }}</span>
<el-sub-menu
v-else
ref="subMenu"
:index="resolvePath(item.path)"
>
<template
v-if="item.meta"
#title
>
<svg-icon
v-if="item.meta.icon"
:icon-class="item.meta.icon"
/>
<span
class="menu-title"
:title="hasTitle(item.meta.title)"
>{{ item.meta.title }}</span>
</template>
<sidebar-item
v-for="(child, index) in item.children"
:key="child.path + index"
:is-nest="true"
:item="child"
:base-path="resolvePath(child.path)"
class="nest-menu"
v-for="(child, index) in item.children"
:key="child.path + index"
:is-nest="true"
:item="child"
:base-path="resolvePath(child.path)"
class="nest-menu"
/>
</el-sub-menu>
</div>

View File

@@ -10,7 +10,10 @@
sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground,
}"
>
<logo v-if="showLogo" :collapse="isCollapse" />
<logo
v-if="showLogo"
:collapse="isCollapse"
/>
<el-scrollbar class="sidebar-scrollbar">
<el-menu
:default-active="activeMenu"

View File

@@ -1,6 +1,13 @@
<template>
<div id="tags-view-container" class="tags-view-container">
<scroll-pane ref="scrollPaneRef" class="tags-view-wrapper" @scroll="handleScroll">
<div
id="tags-view-container"
class="tags-view-container"
>
<scroll-pane
ref="scrollPaneRef"
class="tags-view-wrapper"
@scroll="handleScroll"
>
<router-link
v-for="tag in visitedViews"
:key="tag.path"
@@ -13,23 +20,44 @@
@contextmenu.prevent="openMenu(tag, $event)"
>
{{ tag.title }}
<span v-if="!isAffix(tag)" @click.prevent.stop="closeSelectedTag(tag)">
<close class="el-icon-close" style="width: 1em; height: 1em; vertical-align: middle" />
<span
v-if="!isAffix(tag)"
@click.prevent.stop="closeSelectedTag(tag)"
>
<close
class="el-icon-close"
style="width: 1em; height: 1em; vertical-align: middle"
/>
</span>
</router-link>
</scroll-pane>
<ul v-show="visible" :style="{ left: left + 'px', top: top + 'px' }" class="contextmenu">
<ul
v-show="visible"
:style="{ left: left + 'px', top: top + 'px' }"
class="contextmenu"
>
<li @click="refreshSelectedTag(selectedTag)">
<refresh-right style="width: 1em; height: 1em" /> 刷新页面
</li>
<li v-if="!isAffix(selectedTag)" @click="closeSelectedTag(selectedTag)">
<li
v-if="!isAffix(selectedTag)"
@click="closeSelectedTag(selectedTag)"
>
<close style="width: 1em; height: 1em" /> 关闭当前
</li>
<li @click="closeOthersTags"><circle-close style="width: 1em; height: 1em" /> 关闭其他</li>
<li v-if="!isFirstView()" @click="closeLeftTags">
<li @click="closeOthersTags">
<circle-close style="width: 1em; height: 1em" /> 关闭其他
</li>
<li
v-if="!isFirstView()"
@click="closeLeftTags"
>
<back style="width: 1em; height: 1em" /> 关闭左侧
</li>
<li v-if="!isLastView()" @click="closeRightTags">
<li
v-if="!isLastView()"
@click="closeRightTags"
>
<right style="width: 1em; height: 1em" /> 关闭右侧
</li>
<li @click="closeAllTags(selectedTag)">

View File

@@ -11,11 +11,17 @@
<!-- 右侧主容器 -->
<div class="main-wrapper">
<!-- 顶部导航栏 -->
<navbar @setLayout="setLayout" />
<navbar @set-layout="setLayout" />
<!-- 内容区 -->
<div :class="{ 'hasTagsView': needTagsView }" class="content-wrapper">
<div
:class="{ 'hasTagsView': needTagsView }"
class="content-wrapper"
>
<!-- 标签栏 -->
<div v-if="needTagsView" :class="{ 'fixed-header': fixedHeader }">
<div
v-if="needTagsView"
:class="{ 'fixed-header': fixedHeader }"
>
<tags-view />
</div>
<!-- 主内容 -->

View File

@@ -117,7 +117,7 @@ app.use(router);
app.use(store);
app.use(plugins);
app.use(elementIcons);
app.component('svg-icon', SvgIcon);
app.component('SvgIcon', SvgIcon);
directive(app);
// 全局禁止点击遮罩层关闭弹窗
ElDialog.props.closeOnClickModal.default = false;

View File

@@ -5,8 +5,12 @@
patient?.busNo || '未知'
}}
</div>
<h2 style="text-align: center">{{ userStore.hospitalName }}</h2>
<h2 style="text-align: center">出院诊断病历</h2>
<h2 style="text-align: center">
{{ userStore.hospitalName }}
</h2>
<h2 style="text-align: center">
出院诊断病历
</h2>
<!-- 滚动内容区域 -->
<div class="form-scroll-container">
@@ -18,42 +22,86 @@
label-align="left"
class="medical-full-form"
>
<h4 class="section-title">基础信息</h4>
<h4 class="section-title">
基础信息
</h4>
<!-- 1. 基础信息单行自适应排列 -->
<el-form-item class="form-section">
<div class="single-row-layout">
<el-form-item label="姓名" prop="patientName" class="row-item">
<el-form-item
label="姓名"
prop="patientName"
class="row-item"
>
<div class="input-with-unit">
<el-input
disabled
v-model="formData.patientName"
disabled
type="text"
placeholder="请输入"
/>
</div>
</el-form-item>
<el-form-item label="年龄" prop="age" class="row-item">
<el-form-item
label="年龄"
prop="age"
class="row-item"
>
<div class="input-with-unit">
<el-input disabled v-model="formData.age" type="text" placeholder="请输入" />
<el-input
v-model="formData.age"
disabled
type="text"
placeholder="请输入"
/>
</div>
</el-form-item>
<el-form-item label="性别" prop="gender" class="row-item">
<el-form-item
label="性别"
prop="gender"
class="row-item"
>
<div class="input-with-unit">
<el-input v-model="formData.gender" type="text" placeholder="请输入" />
<el-input
v-model="formData.gender"
type="text"
placeholder="请输入"
/>
</div>
</el-form-item>
<el-form-item label="住院号" prop="busNo" class="row-item">
<el-form-item
label="住院号"
prop="busNo"
class="row-item"
>
<div class="input-with-unit">
<el-input disabled v-model="formData.busNo" type="text" placeholder="请输入" />
<el-input
v-model="formData.busNo"
disabled
type="text"
placeholder="请输入"
/>
</div>
</el-form-item>
<el-form-item label="职业" prop="temperature" class="row-item">
<el-form-item
label="职业"
prop="temperature"
class="row-item"
>
<div class="input-with-unit">
<el-input v-model="formData.temperature" type="text" placeholder="请输入" />
<el-input
v-model="formData.temperature"
type="text"
placeholder="请输入"
/>
</div>
</el-form-item>
<el-form-item label="入院日期" prop="admissionDate" class="row-item">
<el-form-item
label="入院日期"
prop="admissionDate"
class="row-item"
>
<el-date-picker
v-model="formData.admissionDate"
type="date"
@@ -62,7 +110,11 @@
style="width: 100%"
/>
</el-form-item>
<el-form-item label="出院日期" prop="dischargeDate" class="row-item">
<el-form-item
label="出院日期"
prop="dischargeDate"
class="row-item"
>
<el-date-picker
v-model="formData.dischargeDate"
type="date"
@@ -71,17 +123,31 @@
style="width: 100%"
/>
</el-form-item>
<el-form-item label="住院天数" prop="hospitalDays" class="row-item">
<el-form-item
label="住院天数"
prop="hospitalDays"
class="row-item"
>
<div class="input-with-unit">
<el-input disabled v-model="formData.hospitalDays" placeholder="请输入" />
<el-input
v-model="formData.hospitalDays"
disabled
placeholder="请输入"
/>
</div>
</el-form-item>
</div>
</el-form-item>
<h4 class="section-title">诊断</h4>
<h4 class="section-title">
诊断
</h4>
<!-- 3. 出院诊断必填 -->
<el-form-item label="出院诊断" prop="DischargeDiagnosis" class="required form-item-single">
<el-form-item
label="出院诊断"
prop="DischargeDiagnosis"
class="required form-item-single"
>
<el-input
v-model="formData.DischargeDiagnosis"
type="textarea"
@@ -135,7 +201,10 @@
</el-form>
</div>
</div>
<DisDiagnMedicalRecord v-if="isShowprintDom" ref="recordPrintRef"></DisDiagnMedicalRecord>
<DisDiagnMedicalRecord
v-if="isShowprintDom"
ref="recordPrintRef"
/>
</template>
<script setup>

View File

@@ -36,9 +36,17 @@
</el-table-column>
</el-table> -->
<div name="跌倒/坠床评估护理记录单" class="changeMajor" style="width: 99.9%">
<div
name="跌倒/坠床评估护理记录单"
class="changeMajor"
style="width: 99.9%"
>
<div>
<el-form ref="formRef" :model="form" style="width: 99.9%">
<el-form
ref="formRef"
:model="form"
style="width: 99.9%"
>
<el-form-item style="text-align: center">
<div
style="
@@ -54,9 +62,16 @@
</div>
</el-form-item>
<el-form-item label="日期:" class="changeMajorFromItem" style="width: 100%">
<el-form-item
label="日期:"
class="changeMajorFromItem"
style="width: 100%"
>
<el-row :span="20">
<el-col :span="8" style="padding-left: 0px !important">
<el-col
:span="8"
style="padding-left: 0px !important"
>
<el-form-item>
<el-date-picker
v-model="form.ZKDATE"
@@ -115,9 +130,17 @@
:label="column.title"
align="center"
/>
<el-table-column prop="id" label="选择" width="80" align="center">
<el-table-column
prop="id"
label="选择"
width="80"
align="center"
>
<template #default="{ row }">
<el-checkbox v-model="row.checked" @change="handleDangerChange(row)" />
<el-checkbox
v-model="row.checked"
@change="handleDangerChange(row)"
/>
</template>
</el-table-column>
</el-table>
@@ -150,9 +173,17 @@
:label="column.title"
align="center"
/>
<el-table-column prop="id" label="选择" width="80" align="center">
<el-table-column
prop="id"
label="选择"
width="80"
align="center"
>
<template #default="{ row }">
<el-checkbox v-model="row.checked" @change="handleNursingChange(row)" />
<el-checkbox
v-model="row.checked"
@change="handleNursingChange(row)"
/>
</template>
</el-table-column>
</el-table>
@@ -185,7 +216,12 @@
</el-row>
<el-form-item label-width="15px">
<ul class="instructions-list">
<li v-for="(item, index) in instructions" :key="index">{{ item }}</li>
<li
v-for="(item, index) in instructions"
:key="index"
>
{{ item }}
</li>
</ul>
</el-form-item>
</el-form-item>
@@ -610,11 +646,11 @@ const handleUpdate = (row) => {
totalScore.value = row.content.totalScore;
// 评估项目
dangerData.forEach((item) => {
dangerData.value.forEach((item) => {
item.checked = form.bedFallRiskAssessmentList.includes(item.id);
});
nursingData.forEach((item) => {
nursingData.value.forEach((item) => {
item.checked = form.patientCareSessionsCheckedList.includes(item.id);
});
@@ -634,12 +670,12 @@ const reset = () => {
});
// 初始化评估项目
dangerData.forEach((session) => {
dangerData.value.forEach((session) => {
session.checked = false;
});
// 初始化护理措施
nursingData.forEach((session) => {
nursingData.value.forEach((session) => {
session.checked = false;
});

View File

@@ -1,32 +1,52 @@
<template>
<div class="hospital-record-form">
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="病案首页(一)" name="first">
<el-tabs
v-model="activeName"
@tab-click="handleClick"
>
<el-tab-pane
label="病案首页(一)"
name="first"
>
<medicalRecordFirst
ref="firstRef"
:formData="formData"
@onCaseFirst="updateCaseFirstDatas"
></medicalRecordFirst>
:form-data="formData"
@on-case-first="updateCaseFirstDatas"
/>
</el-tab-pane>
<el-tab-pane label="病案首页(二)" name="second">
<el-tab-pane
label="病案首页(二)"
name="second"
>
<medicalRecordSecond
:formData="formData"
@onCaseSecond="updateCaseFirstDatas"
></medicalRecordSecond>
:form-data="formData"
@on-case-second="updateCaseFirstDatas"
/>
</el-tab-pane>
<el-tab-pane label="病案附页(三)" name="third">
<el-tab-pane
label="病案附页(三)"
name="third"
>
<medicalRecordThird
:formData="formData"
@onCaseThird="updateCaseFirstDatas"
></medicalRecordThird>
:form-data="formData"
@on-case-third="updateCaseFirstDatas"
/>
</el-tab-pane>
</el-tabs>
<div class="form-footer">
<!-- <button @click="printForm" class="print-btn">打印表单</button> -->
<button @click="resetForm" class="reset-btn">重置表单</button>
<button
class="reset-btn"
@click="resetForm"
>
重置表单
</button>
</div>
<medicalRecordPrint v-if="isShowprintDom" ref="recordPrintRef"></medicalRecordPrint>
<medicalRecordPrint
v-if="isShowprintDom"
ref="recordPrintRef"
/>
<!-- <el-drawer v-model="drawer" size="100%">
<medicalRecordPrint ref="recordPrintRef"></medicalRecordPrint>
</el-drawer> -->

View File

@@ -8,81 +8,147 @@
</h1>
</div>
<!-- 页面标题 -->
<h2 class="form-title">住院病人风险评估表</h2>
<h2 class="form-title">
住院病人风险评估表
</h2>
<!-- 表单卡片 -->
<el-form :model="formData" label-width="100px">
<el-form
:model="formData"
label-width="100px"
>
<el-row>
<el-col :span="8">
<el-form-item label="科室" label-position="top">
<el-input v-model="formData.department" readonly="true"></el-input>
<el-form-item
label="科室"
label-position="top"
>
<el-input
v-model="formData.department"
readonly="true"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="床号" label-position="top" class="comment-padding">
<el-input v-model="formData.bedNo" readonly="true"></el-input>
<el-form-item
label="床号"
label-position="top"
class="comment-padding"
>
<el-input
v-model="formData.bedNo"
readonly="true"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="住院号" label-position="top" class="comment-padding">
<el-input v-model="formData.busNo" readonly="true"></el-input>
<el-form-item
label="住院号"
label-position="top"
class="comment-padding"
>
<el-input
v-model="formData.busNo"
readonly="true"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="姓名" label-position="top">
<el-form-item
label="姓名"
label-position="top"
>
<el-input
v-model="formData.patientName"
readonly="true"
class="auto-resize-input"
></el-input>
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="性别" label-position="top" class="comment-padding">
<el-form-item
label="性别"
label-position="top"
class="comment-padding"
>
<el-input
v-model="formData.gender"
readonly="true"
class="auto-resize-input"
></el-input>
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="年龄" label-position="top" class="comment-padding">
<el-input v-model="formData.age" readonly="true" class="auto-resize-input"></el-input>
<el-form-item
label="年龄"
label-position="top"
class="comment-padding"
>
<el-input
v-model="formData.age"
readonly="true"
class="auto-resize-input"
/>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="病情简介" label-position="top">
<el-form-item
label="病情简介"
label-position="top"
>
<el-input
type="textarea"
v-model="formData.adm_cond"
:autosize="{ minRows: 1, maxRows: 100 }"
class="full-width-textarea"
></el-input>
</el-form-item>
<el-form-item label="可能发生的不良后果及预后" label-position="top">
<el-input
type="textarea"
v-model="formData.effectless"
:autosize="{ minRows: 1, maxRows: 100 }"
class="full-width-textarea"
></el-input>
/>
</el-form-item>
<el-form-item label="评估等级" label-position="top">
<el-form-item
label="可能发生的不良后果及预后"
label-position="top"
>
<el-input
v-model="formData.effectless"
type="textarea"
:autosize="{ minRows: 1, maxRows: 100 }"
class="full-width-textarea"
/>
</el-form-item>
<el-form-item
label="评估等级"
label-position="top"
>
<el-radio-group v-model="formData.evalLevel">
<el-radio label="一般">一般</el-radio>
<el-radio label="病重">病重</el-radio>
<el-radio label="病危">病危</el-radio>
<el-radio label="一般">
一般
</el-radio>
<el-radio label="病重">
病重
</el-radio>
<el-radio label="病危">
病危
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="护理等级" label-position="top">
<el-form-item
label="护理等级"
label-position="top"
>
<el-radio-group v-model="formData.nurseLevel">
<el-radio label="特级护理">特级护理</el-radio>
<el-radio label="一级护理">一级护理</el-radio>
<el-radio label="二级护理">二级护理</el-radio>
<el-radio label="级护理">三级护理</el-radio>
<el-radio label="特级护理">
特级护理
</el-radio>
<el-radio label="级护理">
一级护理
</el-radio>
<el-radio label="二级护理">
二级护理
</el-radio>
<el-radio label="三级护理">
三级护理
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="收集资料时间:">
@@ -92,36 +158,45 @@
<el-col :span="8">
<el-form-item label="评估医师签名:">
<el-input
disabled
v-model="formData.sign_doc"
disabled
:autosize="{ minRows: 1 }"
class="auto-resize-input"
></el-input>
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="主治医师签名:" class="comment-padding">
<el-form-item
label="主治医师签名:"
class="comment-padding"
>
<el-input
v-model="formData.sign_maindoc"
:autosize="{ minRows: 1 }"
class="auto-resize-input"
></el-input>
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="科主任签名:" class="comment-padding">
<el-form-item
label="科主任签名:"
class="comment-padding"
>
<el-input
v-model="formData.sign_leader"
:autosize="{ minRows: 1 }"
class="auto-resize-input"
></el-input>
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</div>
<inAssessmentForm v-if="isShowprintDom" ref="recordPrintRef"></inAssessmentForm>
<inAssessmentForm
v-if="isShowprintDom"
ref="recordPrintRef"
/>
</template>
<script setup>

View File

@@ -15,48 +15,129 @@
class="medical-full-form"
>
<!-- 1. 基础信息区域自适应两列布局 -->
<h4 class="section-title">基础信息</h4>
<h4 class="section-title">
基础信息
</h4>
<div class="adaptive-grid form-section">
<el-form-item label="姓名" prop="patientName" class="grid-item required">
<el-input v-model="formData.patientName" placeholder="请输入姓名" clearable />
<el-form-item
label="姓名"
prop="patientName"
class="grid-item required"
>
<el-input
v-model="formData.patientName"
placeholder="请输入姓名"
clearable
/>
</el-form-item>
<el-form-item label="住院号" prop="hospitalNo" class="grid-item required">
<el-input v-model="formData.hospitalNo" placeholder="请输入住院号" clearable />
<el-form-item
label="住院号"
prop="hospitalNo"
class="grid-item required"
>
<el-input
v-model="formData.hospitalNo"
placeholder="请输入住院号"
clearable
/>
</el-form-item>
<el-form-item label="性别" prop="gender" class="grid-item required">
<el-select v-model="formData.gender" placeholder="请选择" style="width: 100%">
<el-option label="男" value="男"></el-option>
<el-option label="女" value="女"></el-option>
<el-form-item
label="性别"
prop="gender"
class="grid-item required"
>
<el-select
v-model="formData.gender"
placeholder="请选择"
style="width: 100%"
>
<el-option
label="男"
value="男"
/>
<el-option
label="女"
value="女"
/>
</el-select>
</el-form-item>
<el-form-item label="年龄" prop="age" class="grid-item required">
<el-form-item
label="年龄"
prop="age"
class="grid-item required"
>
<div class="input-with-unit">
<el-input v-model.number="formData.age" placeholder="请输入年龄" clearable />
<el-input
v-model.number="formData.age"
placeholder="请输入年龄"
clearable
/>
<span class="unit"></span>
</div>
</el-form-item>
<el-form-item label="民族" prop="nation" class="grid-item">
<el-input v-model="formData.nation" placeholder="请输入民族" clearable />
<el-form-item
label="民族"
prop="nation"
class="grid-item"
>
<el-input
v-model="formData.nation"
placeholder="请输入民族"
clearable
/>
</el-form-item>
<el-form-item label="职业" prop="occupation" class="grid-item">
<el-input v-model="formData.occupation" placeholder="请输入职业" clearable />
<el-form-item
label="职业"
prop="occupation"
class="grid-item"
>
<el-input
v-model="formData.occupation"
placeholder="请输入职业"
clearable
/>
</el-form-item>
<el-form-item label="婚姻状况" prop="marriage" class="grid-item">
<el-form-item
label="婚姻状况"
prop="marriage"
class="grid-item"
>
<el-select
v-model="formData.marriage"
placeholder="请选择"
clearable
style="width: 100%"
>
<el-option label="已婚" value="已婚"></el-option>
<el-option label="婚" value="未婚"></el-option>
<el-option label="离异" value="离异"></el-option>
<el-option
label="婚"
value="已婚"
/>
<el-option
label="未婚"
value="未婚"
/>
<el-option
label="离异"
value="离异"
/>
</el-select>
</el-form-item>
<el-form-item label="出生地" prop="birthplace" class="grid-item">
<el-input v-model="formData.birthplace" placeholder="请输入出生地" clearable />
<el-form-item
label="出生地"
prop="birthplace"
class="grid-item"
>
<el-input
v-model="formData.birthplace"
placeholder="请输入出生地"
clearable
/>
</el-form-item>
<el-form-item label="入院时间" prop="admissionTime" class="grid-item required">
<el-form-item
label="入院时间"
prop="admissionTime"
class="grid-item required"
>
<el-date-picker
v-model="formData.admissionTime"
type="datetime"
@@ -65,7 +146,11 @@
style="width: 100%"
/>
</el-form-item>
<el-form-item label="记录时间" prop="recordTime" class="grid-item required">
<el-form-item
label="记录时间"
prop="recordTime"
class="grid-item required"
>
<el-date-picker
v-model="formData.recordTime"
type="datetime"
@@ -74,22 +159,53 @@
style="width: 100%"
/>
</el-form-item>
<el-form-item label="病史陈述者" prop="historyReporter" class="grid-item">
<el-input v-model="formData.historyReporter" placeholder="请输入陈述者" clearable />
<el-form-item
label="病史陈述者"
prop="historyReporter"
class="grid-item"
>
<el-input
v-model="formData.historyReporter"
placeholder="请输入陈述者"
clearable
/>
</el-form-item>
<el-form-item label="可靠程度" prop="reliability" class="grid-item">
<el-select v-model="formData.reliability" placeholder="请选择" style="width: 100%">
<el-option label="可靠" value="可靠"></el-option>
<el-option label="基本可靠" value="基本可靠"></el-option>
<el-option label="不可靠" value="不可靠"></el-option>
<el-form-item
label="可靠程度"
prop="reliability"
class="grid-item"
>
<el-select
v-model="formData.reliability"
placeholder="请选择"
style="width: 100%"
>
<el-option
label="可靠"
value="可靠"
/>
<el-option
label="基本可靠"
value="基本可靠"
/>
<el-option
label="不可靠"
value="不可靠"
/>
</el-select>
</el-form-item>
</div>
<!-- 2. 病史信息 -->
<h4 class="section-title">病史信息</h4>
<h4 class="section-title">
病史信息
</h4>
<div class="form-section">
<el-form-item label="主诉" prop="complaint" class="history-item required">
<el-form-item
label="主诉"
prop="complaint"
class="history-item required"
>
<el-input
v-model="formData.complaint"
type="textarea"
@@ -100,7 +216,11 @@
/>
</el-form-item>
<el-form-item label="现病史" prop="presentIllness" class="history-item">
<el-form-item
label="现病史"
prop="presentIllness"
class="history-item"
>
<el-input
v-model="formData.presentIllness"
type="textarea"
@@ -111,7 +231,11 @@
/>
</el-form-item>
<el-form-item label="既往史" prop="pastHistory" class="history-item">
<el-form-item
label="既往史"
prop="pastHistory"
class="history-item"
>
<el-input
v-model="formData.pastHistory"
type="textarea"
@@ -122,7 +246,11 @@
/>
</el-form-item>
<el-form-item label="个人史" prop="personalHistory" class="history-item">
<el-form-item
label="个人史"
prop="personalHistory"
class="history-item"
>
<el-input
v-model="formData.personalHistory"
type="textarea"
@@ -133,7 +261,11 @@
/>
</el-form-item>
<el-form-item label="婚育史" prop="maritalHistory" class="history-item">
<el-form-item
label="婚育史"
prop="maritalHistory"
class="history-item"
>
<el-input
v-model="formData.maritalHistory"
type="textarea"
@@ -144,7 +276,11 @@
/>
</el-form-item>
<el-form-item label="月经史" prop="menstrualHistory" class="history-item">
<el-form-item
label="月经史"
prop="menstrualHistory"
class="history-item"
>
<el-input
v-model="formData.menstrualHistory"
type="textarea"
@@ -155,7 +291,11 @@
/>
</el-form-item>
<el-form-item label="家族史" prop="familyHistory" class="history-item">
<el-form-item
label="家族史"
prop="familyHistory"
class="history-item"
>
<el-input
v-model="formData.familyHistory"
type="textarea"
@@ -168,9 +308,15 @@
</div>
<!-- 3. 中医望闻问切 -->
<h4 class="section-title">中医望闻问切</h4>
<h4 class="section-title">
中医望闻问切
</h4>
<div class="form-section">
<el-form-item label="望闻问切" prop="tcmInfo" class="history-item">
<el-form-item
label="望闻问切"
prop="tcmInfo"
class="history-item"
>
<el-input
v-model="formData.tcmInfo"
type="textarea"
@@ -183,10 +329,16 @@
</div>
<!-- 4. 体格检查 -->
<h4 class="section-title">体格检查</h4>
<h4 class="section-title">
体格检查
</h4>
<div class="form-section">
<div class="adaptive-grid">
<el-form-item label="体温" prop="temp" class="grid-item">
<el-form-item
label="体温"
prop="temp"
class="grid-item"
>
<div class="input-with-unit">
<el-input
v-model.number="formData.temp"
@@ -199,7 +351,11 @@
</div>
</el-form-item>
<el-form-item label="脉搏" prop="pulse" class="grid-item">
<el-form-item
label="脉搏"
prop="pulse"
class="grid-item"
>
<div class="input-with-unit">
<el-input
v-model.number="formData.pulse"
@@ -211,7 +367,11 @@
</div>
</el-form-item>
<el-form-item label="呼吸" prop="respiration" class="grid-item">
<el-form-item
label="呼吸"
prop="respiration"
class="grid-item"
>
<div class="input-with-unit">
<el-input
v-model.number="formData.respiration"
@@ -223,7 +383,11 @@
</div>
</el-form-item>
<el-form-item label="血压" prop="bp" class="grid-item">
<el-form-item
label="血压"
prop="bp"
class="grid-item"
>
<div class="input-with-unit">
<el-input
v-model="formData.bp"
@@ -235,7 +399,11 @@
</div>
</el-form-item>
<el-form-item label="身高" prop="height" class="grid-item">
<el-form-item
label="身高"
prop="height"
class="grid-item"
>
<div class="input-with-unit">
<el-input
v-model.number="formData.height"
@@ -247,7 +415,11 @@
</div>
</el-form-item>
<el-form-item label="体重" prop="weight" class="grid-item">
<el-form-item
label="体重"
prop="weight"
class="grid-item"
>
<div class="input-with-unit">
<el-input
v-model.number="formData.weight"
@@ -259,15 +431,27 @@
</div>
</el-form-item>
<el-form-item label="BMI" prop="bmi" class="grid-item">
<el-form-item
label="BMI"
prop="bmi"
class="grid-item"
>
<div class="input-with-unit">
<el-input v-model="formData.bmi" placeholder="如29.02" readonly />
<el-input
v-model="formData.bmi"
placeholder="如29.02"
readonly
/>
<span class="unit">kg/</span>
</div>
</el-form-item>
</div>
<el-form-item label="一般情况" prop="general" class="history-item">
<el-form-item
label="一般情况"
prop="general"
class="history-item"
>
<el-input
v-model="formData.general"
type="textarea"
@@ -278,7 +462,11 @@
/>
</el-form-item>
<el-form-item label="皮肤粘膜" prop="skin" class="history-item">
<el-form-item
label="皮肤粘膜"
prop="skin"
class="history-item"
>
<el-input
v-model="formData.skin"
type="textarea"
@@ -289,7 +477,11 @@
/>
</el-form-item>
<el-form-item label="胸部(心、肺)" prop="chest" class="history-item">
<el-form-item
label="胸部(心、肺)"
prop="chest"
class="history-item"
>
<el-input
v-model="formData.chest"
type="textarea"
@@ -300,7 +492,11 @@
/>
</el-form-item>
<el-form-item label="腹部" prop="abdomen" class="history-item">
<el-form-item
label="腹部"
prop="abdomen"
class="history-item"
>
<el-input
v-model="formData.abdomen"
type="textarea"
@@ -311,7 +507,11 @@
/>
</el-form-item>
<el-form-item label="四肢/神经系统" prop="limbsNervous" class="history-item">
<el-form-item
label="四肢/神经系统"
prop="limbsNervous"
class="history-item"
>
<el-input
v-model="formData.limbsNervous"
type="textarea"
@@ -324,9 +524,15 @@
</div>
<!-- 5. 辅助检查 -->
<h4 class="section-title">辅助检查</h4>
<h4 class="section-title">
辅助检查
</h4>
<div class="form-section">
<el-form-item label="检查结果" prop="auxExam" class="history-item">
<el-form-item
label="检查结果"
prop="auxExam"
class="history-item"
>
<el-input
v-model="formData.auxExam"
type="textarea"
@@ -339,9 +545,15 @@
</div>
<!-- 6. 初步诊断 -->
<h4 class="section-title">初步诊断</h4>
<h4 class="section-title">
初步诊断
</h4>
<div class="form-section">
<el-form-item label="中医诊断" prop="tcmDiagnosis" class="history-item">
<el-form-item
label="中医诊断"
prop="tcmDiagnosis"
class="history-item"
>
<el-input
v-model="formData.tcmDiagnosis"
type="textarea"
@@ -352,7 +564,11 @@
/>
</el-form-item>
<el-form-item label="西医诊断" prop="westernDiagnosis" class="history-item">
<el-form-item
label="西医诊断"
prop="westernDiagnosis"
class="history-item"
>
<el-input
v-model="formData.westernDiagnosis"
type="textarea"
@@ -365,17 +581,42 @@
</div>
<!-- 7. 签名信息三列布局 -->
<h4 class="section-title">签名信息</h4>
<div class="adaptive-grid form-section" style="grid-template-columns: repeat(3, 1fr)">
<el-form-item label="医师签名" prop="doctorSign" class="grid-item">
<el-input v-model="formData.doctorSign" placeholder="请签名" clearable />
<h4 class="section-title">
签名信息
</h4>
<div
class="adaptive-grid form-section"
style="grid-template-columns: repeat(3, 1fr)"
>
<el-form-item
label="医师签名"
prop="doctorSign"
class="grid-item"
>
<el-input
v-model="formData.doctorSign"
placeholder="请签名"
clearable
/>
</el-form-item>
<el-form-item label="上级医师签名" prop="superiorSign" class="grid-item">
<el-input v-model="formData.superiorSign" placeholder="请签名" clearable />
<el-form-item
label="上级医师签名"
prop="superiorSign"
class="grid-item"
>
<el-input
v-model="formData.superiorSign"
placeholder="请签名"
clearable
/>
</el-form-item>
<el-form-item label="记录日期" prop="signDate" class="grid-item">
<el-form-item
label="记录日期"
prop="signDate"
class="grid-item"
>
<el-date-picker
v-model="formData.signDate"
type="datetime"
@@ -388,12 +629,20 @@
<!-- 新增表单操作按钮组重置按钮 -->
<div class="form-btn-group">
<el-button type="warning" @click="handleReset">重置表单</el-button>
<el-button
type="warning"
@click="handleReset"
>
重置表单
</el-button>
</div>
</el-form>
</div>
</div>
<admissionRecord v-if="isShowprintDom" ref="recordPrintRef"></admissionRecord>
<admissionRecord
v-if="isShowprintDom"
ref="recordPrintRef"
/>
</template>
<script setup>

View File

@@ -2,8 +2,12 @@
<div class="medical-document">
<!-- 标题区域 -->
<div class="doc-header">
<h1 class="doc-title">{{ hospitalName }} 住院手术记录单</h1>
<div class="doc-subtitle">住院号: {{ formData.busNo || '待填写' }}</div>
<h1 class="doc-title">
{{ hospitalName }} 住院手术记录单
</h1>
<div class="doc-subtitle">
住院号: {{ formData.busNo || '待填写' }}
</div>
</div>
<!-- 内容区域 -->
@@ -18,34 +22,84 @@
>
<!-- 患者与手术基础信息 -->
<section class="doc-section">
<h2 class="section-title">患者与手术基本信息</h2>
<h2 class="section-title">
患者与手术基本信息
</h2>
<div class="adaptive-grid">
<el-form-item label="患者姓名" prop="patientName" class="grid-item required">
<el-input v-model="formData.patientName" placeholder="请输入患者姓名" clearable />
<el-form-item
label="患者姓名"
prop="patientName"
class="grid-item required"
>
<el-input
v-model="formData.patientName"
placeholder="请输入患者姓名"
clearable
/>
</el-form-item>
<el-form-item label="性别" prop="gender" class="grid-item required">
<el-select v-model="formData.gender" placeholder="请选择性别">
<el-option label="男" value="男" />
<el-option label="女" value="女" />
<el-form-item
label="性别"
prop="gender"
class="grid-item required"
>
<el-select
v-model="formData.gender"
placeholder="请选择性别"
>
<el-option
label="男"
value="男"
/>
<el-option
label="女"
value="女"
/>
</el-select>
</el-form-item>
<el-form-item label="年龄" prop="age" class="grid-item required">
<el-form-item
label="年龄"
prop="age"
class="grid-item required"
>
<div class="input-with-unit">
<el-input v-model.number="formData.age" placeholder="请输入年龄" />
<el-input
v-model.number="formData.age"
placeholder="请输入年龄"
/>
<span class="unit"></span>
</div>
</el-form-item>
<el-form-item label="科室" prop="department" class="grid-item required">
<el-input v-model="formData.department" placeholder="如:普外科" clearable />
<el-form-item
label="科室"
prop="department"
class="grid-item required"
>
<el-input
v-model="formData.department"
placeholder="如:普外科"
clearable
/>
</el-form-item>
<el-form-item label="病房/床号" prop="bedNo" class="grid-item required">
<el-input v-model="formData.bedNo" placeholder="如502-03" clearable />
<el-form-item
label="病房/床号"
prop="bedNo"
class="grid-item required"
>
<el-input
v-model="formData.bedNo"
placeholder="如502-03"
clearable
/>
</el-form-item>
<el-form-item label="手术日期/时间" prop="operationDateTime" class="grid-item required">
<el-form-item
label="手术日期/时间"
prop="operationDateTime"
class="grid-item required"
>
<el-date-picker
v-model="formData.operationDateTime"
type="datetime"
@@ -58,39 +112,95 @@
<!-- 手术团队信息 -->
<section class="doc-section">
<h2 class="section-title">手术团队信息</h2>
<h2 class="section-title">
手术团队信息
</h2>
<div class="adaptive-grid">
<el-form-item label="手术者" prop="surgeon" class="grid-item required">
<el-input v-model="formData.surgeon" placeholder="主刀医师姓名" clearable />
<el-form-item
label="手术者"
prop="surgeon"
class="grid-item required"
>
<el-input
v-model="formData.surgeon"
placeholder="主刀医师姓名"
clearable
/>
</el-form-item>
<el-form-item label="第一助手" prop="firstAssistant" class="grid-item required">
<el-input v-model="formData.firstAssistant" placeholder="第一助手姓名" clearable />
<el-form-item
label="第一助手"
prop="firstAssistant"
class="grid-item required"
>
<el-input
v-model="formData.firstAssistant"
placeholder="第一助手姓名"
clearable
/>
</el-form-item>
<el-form-item label="第二助手" prop="secondAssistant" class="grid-item">
<el-input v-model="formData.secondAssistant" placeholder="第二助手姓名" clearable />
<el-form-item
label="第二助手"
prop="secondAssistant"
class="grid-item"
>
<el-input
v-model="formData.secondAssistant"
placeholder="第二助手姓名"
clearable
/>
</el-form-item>
<el-form-item label="麻醉医师" prop="anesthesiologist" class="grid-item required">
<el-input v-model="formData.anesthesiologist" placeholder="麻醉医师姓名" clearable />
<el-form-item
label="麻醉医师"
prop="anesthesiologist"
class="grid-item required"
>
<el-input
v-model="formData.anesthesiologist"
placeholder="麻醉医师姓名"
clearable
/>
</el-form-item>
<el-form-item label="巡回护士" prop="circulatingNurse" class="grid-item required">
<el-input v-model="formData.circulatingNurse" placeholder="巡回护士姓名" clearable />
<el-form-item
label="巡回护士"
prop="circulatingNurse"
class="grid-item required"
>
<el-input
v-model="formData.circulatingNurse"
placeholder="巡回护士姓名"
clearable
/>
</el-form-item>
<el-form-item label="器械护士" prop="scrubNurse" class="grid-item required">
<el-input v-model="formData.scrubNurse" placeholder="器械护士姓名" clearable />
<el-form-item
label="器械护士"
prop="scrubNurse"
class="grid-item required"
>
<el-input
v-model="formData.scrubNurse"
placeholder="器械护士姓名"
clearable
/>
</el-form-item>
</div>
</section>
<!-- 手术详情 -->
<section class="doc-section">
<h2 class="section-title">手术详情</h2>
<h2 class="section-title">
手术详情
</h2>
<el-form-item label="手术名称" prop="operationName" class="full-width-item required">
<el-form-item
label="手术名称"
prop="operationName"
class="full-width-item required"
>
<el-input
v-model="formData.operationName"
placeholder="规范手术名称(如:腹腔镜下胆囊切除术)"
@@ -98,15 +208,35 @@
/>
</el-form-item>
<el-form-item label="手术方式" prop="operationMethod" class="full-width-item required">
<el-select v-model="formData.operationMethod" placeholder="选择手术方式">
<el-option label="开放手术" value="开放手术" />
<el-option label="微创手术" value="微创手术" />
<el-option label="介入手术" value="介入手术" />
<el-form-item
label="手术方式"
prop="operationMethod"
class="full-width-item required"
>
<el-select
v-model="formData.operationMethod"
placeholder="选择手术方式"
>
<el-option
label="开放手术"
value="开放手术"
/>
<el-option
label="微创手术"
value="微创手术"
/>
<el-option
label="介入手术"
value="介入手术"
/>
</el-select>
</el-form-item>
<el-form-item label="手术入路" prop="surgicalApproach" class="full-width-item required">
<el-form-item
label="手术入路"
prop="surgicalApproach"
class="full-width-item required"
>
<el-input
v-model="formData.surgicalApproach"
placeholder="如:右上腹经腹直肌切口"
@@ -128,7 +258,11 @@
show-word-limit
/>
</el-form-item>
<el-form-item label="手术过程" prop="operationProcess" class="full-width-item required">
<el-form-item
label="手术过程"
prop="operationProcess"
class="full-width-item required"
>
<el-input
v-model="formData.operationProcess"
type="textarea"
@@ -142,9 +276,15 @@
<!-- 术后情况 -->
<section class="doc-section">
<h2 class="section-title">术后情况</h2>
<h2 class="section-title">
术后情况
</h2>
<div class="adaptive-grid">
<el-form-item label="术中出血量" prop="bloodLoss" class="grid-item required">
<el-form-item
label="术中出血量"
prop="bloodLoss"
class="grid-item required"
>
<div class="input-with-unit">
<el-input
v-model.number="formData.bloodLoss"
@@ -155,18 +295,43 @@
</div>
</el-form-item>
<el-form-item label="输血情况" prop="bloodTransfusion" class="grid-item">
<el-select v-model="formData.bloodTransfusion" placeholder="是否输血">
<el-option label="是" value="是" />
<el-option label="否" value="否" />
<el-form-item
label="输血情况"
prop="bloodTransfusion"
class="grid-item"
>
<el-select
v-model="formData.bloodTransfusion"
placeholder="是否输血"
>
<el-option
label="是"
value="是"
/>
<el-option
label="否"
value="否"
/>
</el-select>
</el-form-item>
<el-form-item label="引流管放置" prop="drainageTube" class="grid-item">
<el-input v-model="formData.drainageTube" placeholder="如腹腔引流管1根" clearable />
<el-form-item
label="引流管放置"
prop="drainageTube"
class="grid-item"
>
<el-input
v-model="formData.drainageTube"
placeholder="如腹腔引流管1根"
clearable
/>
</el-form-item>
<el-form-item label="标本处理" prop="specimenDisposal" class="grid-item required">
<el-form-item
label="标本处理"
prop="specimenDisposal"
class="grid-item required"
>
<el-input
v-model="formData.specimenDisposal"
placeholder="如:胆囊标本送病理检查"
@@ -174,7 +339,11 @@
/>
</el-form-item>
<el-form-item label="手术结束时间" prop="operationEndTime" class="grid-item required">
<el-form-item
label="手术结束时间"
prop="operationEndTime"
class="grid-item required"
>
<el-date-picker
v-model="formData.operationEndTime"
type="datetime"
@@ -182,10 +351,23 @@
value-format="YYYY-MM-DD HH:mm"
/>
</el-form-item>
<el-form-item label="患者去向" prop="patientDestination" class="grid-item required">
<el-select v-model="formData.patientDestination" placeholder="选择去向">
<el-option label="ICU" value="ICU" />
<el-option label="普通病房" value="普通病房" />
<el-form-item
label="患者去向"
prop="patientDestination"
class="grid-item required"
>
<el-select
v-model="formData.patientDestination"
placeholder="选择去向"
>
<el-option
label="ICU"
value="ICU"
/>
<el-option
label="普通病房"
value="普通病房"
/>
</el-select>
</el-form-item>
</div>
@@ -193,20 +375,46 @@
<!-- 签署区域 -->
<section class="doc-section">
<h2 class="section-title">签署确认</h2>
<h2 class="section-title">
签署确认
</h2>
<div
class="adaptive-grid signature-area"
style="grid-template-columns: repeat(auto-fit, minmax(240px, 1fr))"
>
<el-form-item label="手术者签名" prop="surgeonSignature" class="grid-item required">
<el-input v-model="formData.surgeonSignature" placeholder="主刀医师签字" clearable />
<div class="signature-tip">请手术者亲笔签名</div>
<el-form-item
label="手术者签名"
prop="surgeonSignature"
class="grid-item required"
>
<el-input
v-model="formData.surgeonSignature"
placeholder="主刀医师签字"
clearable
/>
<div class="signature-tip">
请手术者亲笔签名
</div>
</el-form-item>
<el-form-item label="记录者签名" prop="recorderSignature" class="grid-item required">
<el-input v-model="formData.recorderSignature" placeholder="记录者签" clearable />
<div class="signature-tip">请记录者如第一助手签字</div>
<el-form-item
label="记录者签"
prop="recorderSignature"
class="grid-item required"
>
<el-input
v-model="formData.recorderSignature"
placeholder="记录者签字"
clearable
/>
<div class="signature-tip">
请记录者如第一助手签字
</div>
</el-form-item>
<el-form-item label="记录日期" prop="recordDate" class="grid-item required">
<el-form-item
label="记录日期"
prop="recordDate"
class="grid-item required"
>
<el-date-picker
v-model="formData.recordDate"
type="date"
@@ -221,12 +429,30 @@
<!-- 操作按钮 -->
<div class="btn-group">
<el-button type="primary" @click="submit">保存记录</el-button>
<el-button type="success" @click="handlePrint">打印记录</el-button>
<el-button type="warning" @click="handleReset">重置表单</el-button>
<el-button
type="primary"
@click="submit"
>
保存记录
</el-button>
<el-button
type="success"
@click="handlePrint"
>
打印记录
</el-button>
<el-button
type="warning"
@click="handleReset"
>
重置表单
</el-button>
</div>
</div>
<intOperRecordSheet v-if="isShowprintDom" ref="recordPrintRef"></intOperRecordSheet>
<intOperRecordSheet
v-if="isShowprintDom"
ref="recordPrintRef"
/>
</template>
<script setup>
@@ -242,7 +468,7 @@ const recordPrintRef = ref();
// 医院名称
const hospitalName = userStore.hospitalName;
defineOptions({
name: 'iInHospitalSurgicalRecord',
name: 'IInHospitalSurgicalRecord',
});
// 表单引用
const formRef = ref(null);

View File

@@ -2,8 +2,12 @@
<div class="medical-document">
<!-- 标题区域 -->
<div class="doc-header">
<h1 class="doc-title">{{ hospitalName }} 住院患者入院沟通记录单</h1>
<div class="doc-subtitle">住院号: {{ formData.hospitalNo || '待填写' }}</div>
<h1 class="doc-title">
{{ hospitalName }} 住院患者入院沟通记录单
</h1>
<div class="doc-subtitle">
住院号: {{ formData.hospitalNo || '待填写' }}
</div>
</div>
<!-- 内容区域 -->
@@ -17,34 +21,85 @@
>
<!-- 患者基础信息 -->
<section class="doc-section">
<h2 class="section-title">患者基础信息</h2>
<h2 class="section-title">
患者基础信息
</h2>
<div class="adaptive-grid">
<el-form-item label="姓名" prop="patientName" class="grid-item required">
<el-input v-model="formData.patientName" placeholder="请输入患者姓名" clearable />
<el-form-item
label="姓名"
prop="patientName"
class="grid-item required"
>
<el-input
v-model="formData.patientName"
placeholder="请输入患者姓名"
clearable
/>
</el-form-item>
<el-form-item label="性别" prop="gender" class="grid-item required">
<el-select v-model="formData.gender" placeholder="请选择性别">
<el-option label="男" value="男" />
<el-option label="女" value="女" />
<el-form-item
label="性别"
prop="gender"
class="grid-item required"
>
<el-select
v-model="formData.gender"
placeholder="请选择性别"
>
<el-option
label="男"
value="男"
/>
<el-option
label="女"
value="女"
/>
</el-select>
</el-form-item>
<el-form-item label="年龄" prop="age" class="grid-item required">
<el-form-item
label="年龄"
prop="age"
class="grid-item required"
>
<div class="input-with-unit">
<el-input v-model.number="formData.age" placeholder="请输入年龄" clearable />
<el-input
v-model.number="formData.age"
placeholder="请输入年龄"
clearable
/>
<span class="unit"></span>
</div>
</el-form-item>
<el-form-item label="科室/病区" prop="department" class="grid-item required">
<el-input v-model="formData.department" placeholder="如:内科疗区" clearable />
<el-form-item
label="科室/病区"
prop="department"
class="grid-item required"
>
<el-input
v-model="formData.department"
placeholder="如:内科疗区"
clearable
/>
</el-form-item>
<el-form-item label="病房/床号" prop="bedNo" class="grid-item required">
<el-input v-model="formData.bedNo" placeholder="如307-12" clearable />
<el-form-item
label="病房/床号"
prop="bedNo"
class="grid-item required"
>
<el-input
v-model="formData.bedNo"
placeholder="如307-12"
clearable
/>
</el-form-item>
<el-form-item label="入院日期" prop="admissionDate" class="grid-item required">
<el-form-item
label="入院日期"
prop="admissionDate"
class="grid-item required"
>
<el-date-picker
v-model="formData.admissionDate"
type="date"
@@ -57,26 +112,58 @@
<!-- 医疗团队信息 -->
<section class="doc-section">
<h2 class="section-title">医疗团队信息</h2>
<h2 class="section-title">
医疗团队信息
</h2>
<div class="adaptive-grid">
<el-form-item label="经治医师" prop="treatingDoctor" class="grid-item required">
<el-input v-model="formData.treatingDoctor" placeholder="请输入医师姓名" clearable />
<el-form-item
label="经治医师"
prop="treatingDoctor"
class="grid-item required"
>
<el-input
v-model="formData.treatingDoctor"
placeholder="请输入医师姓名"
clearable
/>
</el-form-item>
<el-form-item label="主治医师" prop="attendingDoctor" class="grid-item required">
<el-input v-model="formData.attendingDoctor" placeholder="请输入医师姓名" clearable />
<el-form-item
label="主治医师"
prop="attendingDoctor"
class="grid-item required"
>
<el-input
v-model="formData.attendingDoctor"
placeholder="请输入医师姓名"
clearable
/>
</el-form-item>
<el-form-item label="科主任" prop="departmentHead" class="grid-item required">
<el-input v-model="formData.departmentHead" placeholder="请输入主任姓名" clearable />
<el-form-item
label="科主任"
prop="departmentHead"
class="grid-item required"
>
<el-input
v-model="formData.departmentHead"
placeholder="请输入主任姓名"
clearable
/>
</el-form-item>
</div>
</section>
<!-- 病情与诊断 -->
<section class="doc-section">
<h2 class="section-title">病情与诊断</h2>
<el-form-item label="病情状况" prop="condition" class="full-width-item required">
<h2 class="section-title">
病情与诊断
</h2>
<el-form-item
label="病情状况"
prop="condition"
class="full-width-item required"
>
<el-input
v-model="formData.condition"
type="textarea"
@@ -87,7 +174,11 @@
/>
</el-form-item>
<div class="diagnosis-container">
<el-form-item label="中医诊断" prop="tcmDiagnosis" class="diagnosis-item">
<el-form-item
label="中医诊断"
prop="tcmDiagnosis"
class="diagnosis-item"
>
<el-input
v-model="formData.tcmDiagnosis"
type="textarea"
@@ -97,7 +188,11 @@
show-word-limit
/>
</el-form-item>
<el-form-item label="西医诊断" prop="westernDiagnosis" class="diagnosis-item">
<el-form-item
label="西医诊断"
prop="westernDiagnosis"
class="diagnosis-item"
>
<el-input
v-model="formData.westernDiagnosis"
type="textarea"
@@ -112,8 +207,14 @@
<!-- 治疗与检查计划 -->
<section class="doc-section">
<h2 class="section-title">治疗与检查计划</h2>
<el-form-item label="治疗方案" prop="treatmentPlan" class="full-width-item required">
<h2 class="section-title">
治疗与检查计划
</h2>
<el-form-item
label="治疗方案"
prop="treatmentPlan"
class="full-width-item required"
>
<el-input
v-model="formData.treatmentPlan"
type="textarea"
@@ -142,8 +243,14 @@
<!-- 风险告知 -->
<section class="doc-section">
<h2 class="section-title">风险告知</h2>
<el-form-item label="告知内容" prop="riskNotification" class="full-width-item required">
<h2 class="section-title">
风险告知
</h2>
<el-form-item
label="告知内容"
prop="riskNotification"
class="full-width-item required"
>
<el-input
v-model="formData.riskNotification"
type="textarea"
@@ -157,17 +264,33 @@
<!-- 签署区域优化后三列自适应+细节样式 -->
<section class="doc-section">
<h2 class="section-title">签署确认</h2>
<h2 class="section-title">
签署确认
</h2>
<div
class="adaptive-grid signature-area"
style="grid-template-columns: repeat(auto-fit, minmax(240px, 1fr))"
>
<el-form-item label="患者或家属签字" prop="patientSignature" class="grid-item required">
<el-input v-model="formData.patientSignature" placeholder="请签字" clearable />
<div class="signature-tip">请填写患者或家属签字</div>
<el-form-item
label="患者或家属签字"
prop="patientSignature"
class="grid-item required"
>
<el-input
v-model="formData.patientSignature"
placeholder="请签字"
clearable
/>
<div class="signature-tip">
请填写患者或家属签字
</div>
</el-form-item>
<el-form-item label="与患者关系" prop="relationship" class="grid-item">
<el-form-item
label="与患者关系"
prop="relationship"
class="grid-item"
>
<el-input
v-model="formData.relationship"
placeholder="如:本人、配偶、子女"
@@ -175,7 +298,11 @@
/>
</el-form-item>
<el-form-item label="签字日期" prop="signatureDate" class="grid-item required">
<el-form-item
label="签字日期"
prop="signatureDate"
class="grid-item required"
>
<el-date-picker
v-model="formData.signatureDate"
type="date"
@@ -185,11 +312,25 @@
/>
</el-form-item>
<el-form-item label="沟通医师签字" prop="doctorSignature" class="grid-item required">
<el-input v-model="formData.doctorSignature" placeholder="请签字" clearable />
<div class="signature-tip">请填写沟通医师签字</div>
<el-form-item
label="沟通医师签字"
prop="doctorSignature"
class="grid-item required"
>
<el-input
v-model="formData.doctorSignature"
placeholder="请签字"
clearable
/>
<div class="signature-tip">
请填写沟通医师签字
</div>
</el-form-item>
<el-form-item label="沟通日期" prop="communicationDate" class="grid-item required">
<el-form-item
label="沟通日期"
prop="communicationDate"
class="grid-item required"
>
<el-date-picker
v-model="formData.communicationDate"
type="datetime"
@@ -204,9 +345,24 @@
<!-- 操作按钮 -->
<div class="btn-group">
<el-button type="primary" @click="submit">保存记录</el-button>
<el-button type="success" @click="handlePrint">打印记录</el-button>
<el-button type="warning" @click="handleReset">重置表单</el-button>
<el-button
type="primary"
@click="submit"
>
保存记录
</el-button>
<el-button
type="success"
@click="handlePrint"
>
打印记录
</el-button>
<el-button
type="warning"
@click="handleReset"
>
重置表单
</el-button>
</div>
</div>
</template>

View File

@@ -6,40 +6,69 @@
<template>
<div class="container">
<div class="header">
<h2 class="title">{{ userStore.hospitalName }}</h2>
<h3 class="subtitle">患者护理记录单</h3>
<h2 class="title">
{{ userStore.hospitalName }}
</h2>
<h3 class="subtitle">
患者护理记录单
</h3>
</div>
<el-form :model="state.formData" label-position="top" class="nursing-form">
<el-form
:model="state.formData"
label-position="top"
class="nursing-form"
>
<!-- 患者基本信息 -->
<div class="patient-info">
<el-row :gutter="20">
<el-col :span="2">
<el-form-item label="姓名">
<el-input v-model="state.formData.name" placeholder="请输入姓名"></el-input>
<el-input
v-model="state.formData.name"
placeholder="请输入姓名"
/>
</el-form-item>
</el-col>
<el-col :span="2">
<el-form-item label="年龄">
<el-input v-model="state.formData.age" placeholder="请输入年龄"></el-input>
<el-input
v-model="state.formData.age"
placeholder="请输入年龄"
/>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="性别">
<el-select v-model="state.formData.gender" placeholder="请选择性别">
<el-option label="男" value="male"></el-option>
<el-option label="女" value="female"></el-option>
<el-select
v-model="state.formData.gender"
placeholder="请选择性别"
>
<el-option
label="男"
value="male"
/>
<el-option
label="女"
value="female"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="病区">
<el-input v-model="state.formData.ward" placeholder="请输入病区"></el-input>
<el-input
v-model="state.formData.ward"
placeholder="请输入病区"
/>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="床号">
<el-input v-model="state.formData.bedNumber" placeholder="请输入床号"></el-input>
<el-input
v-model="state.formData.bedNumber"
placeholder="请输入床号"
/>
</el-form-item>
</el-col>
<el-col :span="4">
@@ -47,12 +76,15 @@
<el-input
v-model="state.formData.hospitalNumber"
placeholder="请输入住院号"
></el-input>
/>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="入院诊断">
<el-input v-model="state.formData.diagnosis" placeholder="请输入入院诊断"></el-input>
<el-input
v-model="state.formData.diagnosis"
placeholder="请输入入院诊断"
/>
</el-form-item>
</el-col>
</el-row>
@@ -60,8 +92,15 @@
<!-- 基本信息记录表格 -->
<div class="vital-signs-table">
<el-table :data="state.formData.vitalSigns" border style="width: 100%">
<el-table-column label="日期" width="100">
<el-table
:data="state.formData.vitalSigns"
border
style="width: 100%"
>
<el-table-column
label="日期"
width="100"
>
<template #default="scope">
<el-date-picker
v-model="scope.row.date"
@@ -70,10 +109,13 @@
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
style="width: 100%"
></el-date-picker>
/>
</template>
</el-table-column>
<el-table-column label="时间" width="100">
<el-table-column
label="时间"
width="100"
>
<template #default="scope">
<el-time-picker
v-model="scope.row.time"
@@ -81,133 +123,290 @@
format="HH:mm"
value-format="HH:mm"
style="width: 100%"
></el-time-picker>
/>
</template>
</el-table-column>
<el-table-column label="基本信息">
<el-table-column label="意识" width="80">
<el-table-column
label="意识"
width="80"
>
<template #default="scope">
<el-select v-model="scope.row.consciousness" placeholder="选择">
<el-option label="清醒" value="清醒"></el-option>
<el-option label="嗜睡" value="嗜睡"></el-option>
<el-option label="昏迷" value="昏迷"></el-option>
<el-select
v-model="scope.row.consciousness"
placeholder="选择"
>
<el-option
label="清醒"
value="清醒"
/>
<el-option
label="嗜睡"
value="嗜睡"
/>
<el-option
label="昏迷"
value="昏迷"
/>
</el-select>
</template>
</el-table-column>
<el-table-column label="体温℃" width="80">
<el-table-column
label="体温℃"
width="80"
>
<template #default="scope">
<el-input v-model="scope.row.temperature" placeholder="体温"></el-input>
<el-input
v-model="scope.row.temperature"
placeholder="体温"
/>
</template>
</el-table-column>
<el-table-column label="心率次/分" width="100">
<el-table-column
label="心率次/分"
width="100"
>
<template #default="scope">
<el-input v-model="scope.row.heartRate" placeholder="心率"></el-input>
<el-input
v-model="scope.row.heartRate"
placeholder="心率"
/>
</template>
</el-table-column>
<el-table-column label="脉搏次/分" width="100">
<el-table-column
label="脉搏次/分"
width="100"
>
<template #default="scope">
<el-input v-model="scope.row.heartRate" placeholder="心率"></el-input>
<el-input
v-model="scope.row.heartRate"
placeholder="心率"
/>
</template>
</el-table-column>
<el-table-column label="呼吸次/分" width="100">
<el-table-column
label="呼吸次/分"
width="100"
>
<template #default="scope">
<el-input v-model="scope.row.respiratoryRate" placeholder="呼吸"></el-input>
<el-input
v-model="scope.row.respiratoryRate"
placeholder="呼吸"
/>
</template>
</el-table-column>
<el-table-column label="血压mmHg" width="120">
<el-table-column
label="血压mmHg"
width="120"
>
<template #default="scope">
<el-input v-model="scope.row.bloodPressure" placeholder="血压"></el-input>
<el-input
v-model="scope.row.bloodPressure"
placeholder="血压"
/>
</template>
</el-table-column>
<el-table-column label="血氧饱和度" width="120">
<el-table-column
label="血氧饱和度"
width="120"
>
<template #default="scope">
<el-input v-model="scope.row.bloodPressure" placeholder="血压"></el-input>
<el-input
v-model="scope.row.bloodPressure"
placeholder="血压"
/>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="氧疗L/min" width="200">
<el-table-column label="方式" >
<el-table-column
label="氧疗L/min"
width="200"
>
<el-table-column label="方式">
<template #default="scope">
<el-select v-model="scope.row.intake" placeholder="选择">
<el-option label="鼻导管" value="鼻导管"></el-option>
<el-option label="面罩" value="面罩"></el-option>
<el-option label="无" value="无"></el-option>
<el-select
v-model="scope.row.intake"
placeholder="选择"
>
<el-option
label="鼻导管"
value="鼻导管"
/>
<el-option
label="面罩"
value="面罩"
/>
<el-option
label="无"
value="无"
/>
</el-select>
</template>
</el-table-column>
<el-table-column label="流量" width="80">
<el-table-column
label="流量"
width="80"
>
<template #default="scope">
<el-input v-model="scope.row.flowRate" placeholder="流量"></el-input>
<el-input
v-model="scope.row.flowRate"
placeholder="流量"
/>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="入量" width="200">
<el-table-column label="名称" >
<el-table-column
label="入量"
width="200"
>
<el-table-column label="名称">
<template #default="scope">
<el-select v-model="scope.row.intake" placeholder="选择">
<el-option label="鼻导管" value="鼻导管"></el-option>
<el-option label="面罩" value="面罩"></el-option>
<el-option label="无" value="无"></el-option>
<el-select
v-model="scope.row.intake"
placeholder="选择"
>
<el-option
label="鼻导管"
value="鼻导管"
/>
<el-option
label="面罩"
value="面罩"
/>
<el-option
label="无"
value="无"
/>
</el-select>
</template>
</el-table-column>
<el-table-column label="ml" width="80">
<el-table-column
label="ml"
width="80"
>
<template #default="scope">
<el-input v-model="scope.row.flowRate" placeholder="流量"></el-input>
<el-input
v-model="scope.row.flowRate"
placeholder="流量"
/>
</template>
</el-table-column>
<el-table-column label="途径" width="80">
<el-table-column
label="途径"
width="80"
>
<template #default="scope">
<el-input v-model="scope.row.flowRate" placeholder="流量"></el-input>
<el-input
v-model="scope.row.flowRate"
placeholder="流量"
/>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="出量" width="200">
<el-table-column label="名称" >
<el-table-column
label="出量"
width="200"
>
<el-table-column label="名称">
<template #default="scope">
<el-select v-model="scope.row.intake" placeholder="选择">
<el-option label="鼻导管" value="鼻导管"></el-option>
<el-option label="面罩" value="面罩"></el-option>
<el-option label="无" value="无"></el-option>
<el-select
v-model="scope.row.intake"
placeholder="选择"
>
<el-option
label="鼻导管"
value="鼻导管"
/>
<el-option
label="面罩"
value="面罩"
/>
<el-option
label="无"
value="无"
/>
</el-select>
</template>
</el-table-column>
<el-table-column label="ml" width="80">
<el-table-column
label="ml"
width="80"
>
<template #default="scope">
<el-input v-model="scope.row.flowRate" placeholder="流量"></el-input>
<el-input
v-model="scope.row.flowRate"
placeholder="流量"
/>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="皮肤情况" width="80">
<template #default="scope">
<el-input v-model="scope.row.flowRate" placeholder="流量"></el-input>
</template>
</el-table-column>
<el-table-column label="管路护理" width="80">
<template #default="scope">
<el-input v-model="scope.row.flowRate" placeholder="流量"></el-input>
</template>
</el-table-column>
<el-table-column label="病情与措施" width="80">
<template #default="scope">
<el-input v-model="scope.row.flowRate" placeholder="流量"></el-input>
</template>
</el-table-column>
<el-table-column label="护士签名" width="100">
<el-table-column
label="皮肤情况"
width="80"
>
<template #default="scope">
<el-input v-model="scope.row.nurseSignature" placeholder="签名"></el-input>
<el-input
v-model="scope.row.flowRate"
placeholder="流量"
/>
</template>
</el-table-column>
<el-table-column label="操作" width="120" fixed="right">
<el-table-column
label="管路护理"
width="80"
>
<template #default="scope">
<el-button type="danger" size="small" @click="removeVitalSign(scope.$index)"
>删除</el-button
<el-input
v-model="scope.row.flowRate"
placeholder="流量"
/>
</template>
</el-table-column>
<el-table-column
label="病情与措施"
width="80"
>
<template #default="scope">
<el-input
v-model="scope.row.flowRate"
placeholder="流量"
/>
</template>
</el-table-column>
<el-table-column
label="护士签名"
width="100"
>
<template #default="scope">
<el-input
v-model="scope.row.nurseSignature"
placeholder="签名"
/>
</template>
</el-table-column>
<el-table-column
label="操作"
width="120"
fixed="right"
>
<template #default="scope">
<el-button
type="danger"
size="small"
@click="removeVitalSign(scope.$index)"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<div class="add-row">
<el-button type="primary" @click="addVitalSign">添加记录</el-button>
<el-button
type="primary"
@click="addVitalSign"
>
添加记录
</el-button>
</div>
</div>
@@ -216,13 +415,13 @@
<div>
意识:①清醒②嗜睡③意识模糊④昏睡⑤谗妄⑥浅昏迷⑦中度昏迷⑧深昏迷⑨全麻未醒⑩镇静
</div>
<div>
<div>
氧疗方式:①鼻导管②面罩③HFNC④HIPPV⑤IMV
</div>
<div>
<div>
皮肤情况:①完好②压疮③出血点④破损⑤水肿⑥瘀斑⑦过敏⑧其他
</div>
<div>
<div>
管路护理:①胃管②尿导管③静脉置管④吸氧管T⑥胸腔引流管⑦腹腔引流管⑧伤口引流管⑨脑室引流管⑩其他
</div>
</div>
@@ -330,7 +529,7 @@ onMounted(() => {
});
const submit = () => {
// ElMessage.success('提交成功');
emits('submitOk', state.formData);
emits('submitOk', state.value.formData);
};
const setFormData = (data) => {
if (data) {

View File

@@ -5,8 +5,12 @@
patient?.busNo || '未知'
}}
</div>
<h2 style="text-align: center">{{ userStore.hospitalName }}</h2>
<h2 style="text-align: center">门诊病历</h2>
<h2 style="text-align: center">
{{ userStore.hospitalName }}
</h2>
<h2 style="text-align: center">
门诊病历
</h2>
<!-- 滚动内容区域 -->
<div class="form-scroll-container">
@@ -18,35 +22,73 @@
label-align="left"
class="medical-full-form"
>
<h4 class="section-title">基础信息</h4>
<h4 class="section-title">
基础信息
</h4>
<!-- 1. 基础信息单行自适应排列 -->
<el-form-item class="form-section">
<div class="single-row-layout">
<el-form-item label="身高" prop="height" class="row-item">
<el-form-item
label="身高"
prop="height"
class="row-item"
>
<div class="input-with-unit">
<el-input v-model="formData.height" type="text" placeholder="请输入" />
<el-input
v-model="formData.height"
type="text"
placeholder="请输入"
/>
<span class="unit">cm</span>
</div>
</el-form-item>
<el-form-item label="体重" prop="weight" class="row-item">
<el-form-item
label="体重"
prop="weight"
class="row-item"
>
<div class="input-with-unit">
<el-input v-model="formData.weight" type="text" placeholder="请输入" />
<el-input
v-model="formData.weight"
type="text"
placeholder="请输入"
/>
<span class="unit">kg</span>
</div>
</el-form-item>
<el-form-item label="体温" prop="temperature" class="row-item">
<el-form-item
label="体温"
prop="temperature"
class="row-item"
>
<div class="input-with-unit">
<el-input v-model="formData.temperature" type="text" placeholder="请输入" />
<el-input
v-model="formData.temperature"
type="text"
placeholder="请输入"
/>
<span class="unit"></span>
</div>
</el-form-item>
<el-form-item label="脉搏" prop="pulse" class="row-item">
<el-form-item
label="脉搏"
prop="pulse"
class="row-item"
>
<div class="input-with-unit">
<el-input v-model="formData.pulse" type="text" placeholder="请输入" />
<el-input
v-model="formData.pulse"
type="text"
placeholder="请输入"
/>
<span class="unit">/</span>
</div>
</el-form-item>
<el-form-item label="发病日期" prop="onsetDate" class="row-item">
<el-form-item
label="发病日期"
prop="onsetDate"
class="row-item"
>
<el-date-picker
v-model="formData.onsetDate"
type="date"
@@ -58,11 +100,17 @@
</el-form-item>
</div>
</el-form-item>
<h4 class="section-title">病史信息</h4>
<h4 class="section-title">
病史信息
</h4>
<!-- 2. 病史信息单行自适应排列新增调整 -->
<el-form-item class="form-section">
<div class="single-row-layout">
<el-form-item label="现病史" prop="presentIllness" class="row-item history-item">
<el-form-item
label="现病史"
prop="presentIllness"
class="row-item history-item"
>
<el-input
v-model="formData.presentIllness"
type="textarea"
@@ -70,10 +118,23 @@
autosize
/>
</el-form-item>
<el-form-item label="既往史" prop="pastIllness" class="row-item history-item">
<el-input v-model="formData.pastIllness" type="textarea" placeholder="无" autosize />
<el-form-item
label="既往史"
prop="pastIllness"
class="row-item history-item"
>
<el-input
v-model="formData.pastIllness"
type="textarea"
placeholder="无"
autosize
/>
</el-form-item>
<el-form-item label="个人史" prop="personalHistory" class="row-item history-item">
<el-form-item
label="个人史"
prop="personalHistory"
class="row-item history-item"
>
<el-input
v-model="formData.personalHistory"
type="textarea"
@@ -81,7 +142,11 @@
autosize
/>
</el-form-item>
<el-form-item label="过敏史" prop="allergyHistory" class="row-item history-item">
<el-form-item
label="过敏史"
prop="allergyHistory"
class="row-item history-item"
>
<el-input
v-model="formData.allergyHistory"
type="textarea"
@@ -89,7 +154,11 @@
autosize
/>
</el-form-item>
<el-form-item label="家族史" prop="familyHistory" class="row-item history-item">
<el-form-item
label="家族史"
prop="familyHistory"
class="row-item history-item"
>
<el-input
v-model="formData.familyHistory"
type="textarea"
@@ -99,9 +168,15 @@
</el-form-item>
</div>
</el-form-item>
<h4 class="section-title">主诉查体(治疗)处置辅助检查</h4>
<h4 class="section-title">
主诉查体(治疗)处置辅助检查
</h4>
<!-- 3. 主诉必填 -->
<el-form-item label="主诉" prop="complaint" class="required form-item-single">
<el-form-item
label="主诉"
prop="complaint"
class="required form-item-single"
>
<el-input
v-model="formData.complaint"
type="textarea"
@@ -111,7 +186,11 @@
/>
</el-form-item>
<!-- 4. 查体处理辅助检查 -->
<el-form-item label="查体(治疗)" prop="physicalExam" class="form-item-single">
<el-form-item
label="查体(治疗)"
prop="physicalExam"
class="form-item-single"
>
<el-input
v-model="formData.physicalExam"
type="textarea"
@@ -121,7 +200,11 @@
/>
</el-form-item>
<el-form-item label="处置" prop="treatment" class="form-item-single">
<el-form-item
label="处置"
prop="treatment"
class="form-item-single"
>
<el-input
v-model="formData.treatment"
type="textarea"
@@ -131,7 +214,11 @@
/>
</el-form-item>
<el-form-item label="辅助检查" prop="auxiliaryExam" class="form-item-single">
<el-form-item
label="辅助检查"
prop="auxiliaryExam"
class="form-item-single"
>
<el-input
v-model="formData.auxiliaryExam"
type="textarea"

View File

@@ -5,9 +5,13 @@
patient?.busNo || '未知'
}}
</div>
<h2 style="text-align: center">{{ userStore.hospitalName }}</h2>
<h2 style="text-align: center">
{{ userStore.hospitalName }}
</h2>
<h2 style="text-align: center">门诊病历</h2>
<h2 style="text-align: center">
门诊病历
</h2>
<!-- 滚动内容区域 -->
<div class="form-scroll-container">
@@ -19,13 +23,23 @@
label-align="left"
class="medical-full-form"
>
<h4 class="section-title">基础信息</h4>
<h4 class="section-title">
基础信息
</h4>
<!-- 1. 基础信息单行自适应排列 -->
<el-form-item class="form-section">
<div class="single-row-layout">
<el-form-item label="呼吸" prop="breathe" class="row-item">
<el-form-item
label="呼吸"
prop="breathe"
class="row-item"
>
<div class="input-with-unit">
<el-input v-model="formData.breathe" type="text" placeholder="请输入" />
<el-input
v-model="formData.breathe"
type="text"
placeholder="请输入"
/>
<span class="unit">/</span>
</div>
</el-form-item>
@@ -35,7 +49,11 @@
<span class="unit">mmHg</span>
</div>
</el-form-item> -->
<el-form-item label="血压" prop="blood" class="row-item">
<el-form-item
label="血压"
prop="blood"
class="row-item"
>
<div class="input-with-unit blood-input-group">
<el-input
v-model="formData.bloodHigh"
@@ -53,19 +71,39 @@
<span class="unit">(/)mmHg</span>
</div>
</el-form-item>
<el-form-item label="体温" prop="temperature" class="row-item">
<el-form-item
label="体温"
prop="temperature"
class="row-item"
>
<div class="input-with-unit">
<el-input v-model="formData.temperature" type="text" placeholder="请输入" />
<el-input
v-model="formData.temperature"
type="text"
placeholder="请输入"
/>
<span class="unit"></span>
</div>
</el-form-item>
<el-form-item label="脉搏" prop="pulse" class="row-item">
<el-form-item
label="脉搏"
prop="pulse"
class="row-item"
>
<div class="input-with-unit">
<el-input v-model="formData.pulse" type="text" placeholder="请输入" />
<el-input
v-model="formData.pulse"
type="text"
placeholder="请输入"
/>
<span class="unit">/</span>
</div>
</el-form-item>
<el-form-item label="就诊日期" prop="onsetDate" class="row-item">
<el-form-item
label="就诊日期"
prop="onsetDate"
class="row-item"
>
<el-date-picker
v-model="formData.onsetDate"
type="date"
@@ -77,11 +115,17 @@
</el-form-item>
</div>
</el-form-item>
<h4 class="section-title">病史信息</h4>
<h4 class="section-title">
病史信息
</h4>
<!-- 2. 病史信息单行自适应排列新增调整 -->
<el-form-item class="form-section">
<div class="single-row-layout">
<el-form-item label="现病史" prop="presentIllness" class="row-item history-item">
<el-form-item
label="现病史"
prop="presentIllness"
class="row-item history-item"
>
<el-input
v-model="formData.presentIllness"
type="textarea"
@@ -89,10 +133,23 @@
autosize
/>
</el-form-item>
<el-form-item label="既往史" prop="pastIllness" class="row-item history-item">
<el-input v-model="formData.pastIllness" type="textarea" placeholder="无" autosize />
<el-form-item
label="既往史"
prop="pastIllness"
class="row-item history-item"
>
<el-input
v-model="formData.pastIllness"
type="textarea"
placeholder="无"
autosize
/>
</el-form-item>
<el-form-item label="个人史" prop="personalHistory" class="row-item history-item">
<el-form-item
label="个人史"
prop="personalHistory"
class="row-item history-item"
>
<el-input
v-model="formData.personalHistory"
type="textarea"
@@ -100,7 +157,11 @@
autosize
/>
</el-form-item>
<el-form-item label="过敏史" prop="allergyHistory" class="row-item history-item">
<el-form-item
label="过敏史"
prop="allergyHistory"
class="row-item history-item"
>
<el-input
v-model="formData.allergyHistory"
type="textarea"
@@ -108,7 +169,11 @@
autosize
/>
</el-form-item>
<el-form-item label="家族史" prop="familyHistory" class="row-item history-item">
<el-form-item
label="家族史"
prop="familyHistory"
class="row-item history-item"
>
<el-input
v-model="formData.familyHistory"
type="textarea"
@@ -118,9 +183,15 @@
</el-form-item>
</div>
</el-form-item>
<h4 class="section-title">主诉处置辅助检查</h4>
<h4 class="section-title">
主诉处置辅助检查
</h4>
<!-- 3. 主诉必填 -->
<el-form-item label="主诉" prop="complaint" class="required form-item-single">
<el-form-item
label="主诉"
prop="complaint"
class="required form-item-single"
>
<el-input
v-model="formData.complaint"
type="textarea"
@@ -140,7 +211,11 @@
/>
</el-form-item> -->
<el-form-item label="处置" prop="treatment" class="form-item-single">
<el-form-item
label="处置"
prop="treatment"
class="form-item-single"
>
<el-input
v-model="formData.treatment"
type="textarea"
@@ -150,7 +225,11 @@
/>
</el-form-item>
<el-form-item label="辅助检查" prop="auxiliaryExam" class="form-item-single">
<el-form-item
label="辅助检查"
prop="auxiliaryExam"
class="form-item-single"
>
<el-input
v-model="formData.auxiliaryExam"
type="textarea"

View File

@@ -7,66 +7,99 @@
<div class="surgicalPatientHandover-container">
<div class="handover-form">
<div class="form-header">
<h1 class="hospital-name">{{ userStore.hospitalName }}</h1>
<h2 class="form-title">手术患者交接单</h2>
<h1 class="hospital-name">
{{ userStore.hospitalName }}
</h1>
<h2 class="form-title">
手术患者交接单
</h2>
</div>
<div class="patient-info">
<el-row :gutter="20">
<el-col :span="6">
<div class="info-item">日期{{ state.formData.date }}</div>
<div class="info-item">
日期{{ state.formData.date }}
</div>
</el-col>
<el-col :span="6">
<div class="info-item">姓名{{ state.formData.patientName }}</div>
<div class="info-item">
姓名{{ state.formData.patientName }}
</div>
</el-col>
<el-col :span="6">
<div class="info-item">性别{{ state.formData.sex }}</div>
<div class="info-item">
性别{{ state.formData.sex }}
</div>
</el-col>
<el-col :span="6">
<div class="info-item">年龄{{ state.formData.age }}</div>
<div class="info-item">
年龄{{ state.formData.age }}
</div>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="6">
<div class="info-item">科室{{ state.formData.department }}</div>
<div class="info-item">
科室{{ state.formData.department }}
</div>
</el-col>
<el-col :span="6">
<div class="info-item">床号{{ state.formData.bedNumber }}</div>
<div class="info-item">
床号{{ state.formData.bedNumber }}
</div>
</el-col>
<el-col :span="6">
<div class="info-item">住院号{{ state.formData.hospitalNumber }}</div>
<div class="info-item">
住院号{{ state.formData.hospitalNumber }}
</div>
</el-col>
<el-col :span="6">
<div class="info-item">术前诊断{{ state.formData.preDiagnosis }}</div>
<div class="info-item">
术前诊断{{ state.formData.preDiagnosis }}
</div>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="24">
<div class="info-item">拟行手术方式{{ state.formData.surgeryMethod }}</div>
<div class="info-item">
拟行手术方式{{ state.formData.surgeryMethod }}
</div>
</el-col>
</el-row>
</div>
<el-form :model="state.formData" label-width="0" class="handover-form-content">
<el-form
:model="state.formData"
label-width="0"
class="handover-form-content"
>
<!-- 病房护士与手术室护士交接记录 -->
<div class="form-section">
<div class="section-title">病房护士与手术室护士交接记录</div>
<div class="section-title">
病房护士与手术室护士交接记录
</div>
<el-row :gutter="20">
<el-col :span="12">
<div class="form-item">
<span class="item-label">药物过敏史</span>
<el-radio-group v-model="state.formData.drugAllergy">
<el-radio :label="1"></el-radio>
<el-radio :label="2"></el-radio>
<el-radio :label="1">
</el-radio>
<el-radio :label="2">
</el-radio>
</el-radio-group>
</div>
</el-col>
<el-col :span="12">
<div class="form-item">
<span v-if="state.formData.drugAllergy === 2"
>药物名称
<el-input v-model="state.formData.allergyDrugName" class="inline-input"
/></span>
<span v-if="state.formData.drugAllergy === 2">药物名称
<el-input
v-model="state.formData.allergyDrugName"
class="inline-input"
/></span>
</div>
</el-col>
</el-row>
@@ -76,9 +109,15 @@
<div class="form-item">
<span class="item-label">身份确认</span>
<el-checkbox-group v-model="state.formData.identityConfirm">
<el-checkbox :label="1">患者姓名核实</el-checkbox>
<el-checkbox :label="2">病例核实</el-checkbox>
<el-checkbox :label="3">腕带核</el-checkbox>
<el-checkbox :label="1">
患者姓名核实
</el-checkbox>
<el-checkbox :label="2">
病例核实
</el-checkbox>
<el-checkbox :label="3">
腕带核
</el-checkbox>
</el-checkbox-group>
</div>
</el-col>
@@ -93,8 +132,9 @@
v-for="item in getStatisticsOptionList('surgeryMark')"
:key="item.dictValue"
:label="item.dictValue"
>{{ item.dictLabel }}</el-radio
>
{{ item.dictLabel }}
</el-radio>
</el-radio-group>
</div>
</el-col>
@@ -123,29 +163,35 @@
<div class="form-item">
<span class="item-label">生命体征</span>
<span>
<el-input v-model="state.formData.temperature" class="inline-input">
<el-input
v-model="state.formData.temperature"
class="inline-input"
>
<template #prepend>T</template>
<template #append></template>
</el-input>
</span>
<span class="ml-20"
><el-input v-model="state.formData.pulse" class="inline-input">
<template #prepend>P</template>
<template #append>/</template>
</el-input></span
<span class="ml-20"><el-input
v-model="state.formData.pulse"
class="inline-input"
>
<span class="ml-20"
><el-input v-model="state.formData.respiration" class="inline-input">
<template #prepend>R</template>
<template #append>/</template>
</el-input></span
<template #prepend>P</template>
<template #append>/</template>
</el-input></span>
<span class="ml-20"><el-input
v-model="state.formData.respiration"
class="inline-input"
>
<span class="ml-20"
><el-input v-model="state.formData.respiration" class="inline-input">
<template #prepend>BP</template>
<template #append>mmHg</template>
</el-input></span
<template #prepend>R</template>
<template #append>/</template>
</el-input></span>
<span class="ml-20"><el-input
v-model="state.formData.respiration"
class="inline-input"
>
<template #prepend>BP</template>
<template #append>mmHg</template>
</el-input></span>
</div>
</el-col>
</el-row>
@@ -155,12 +201,24 @@
<div class="form-item">
<span class="item-label">意识状态</span>
<el-checkbox-group v-model="state.formData.consciousness">
<el-checkbox :label="1">清醒</el-checkbox>
<el-checkbox :label="2">嗜睡</el-checkbox>
<el-checkbox :label="3">意识模糊</el-checkbox>
<el-checkbox :label="4">躁动</el-checkbox>
<el-checkbox :label="5">偏瘫</el-checkbox>
<el-checkbox :label="6">昏迷</el-checkbox>
<el-checkbox :label="1">
清醒
</el-checkbox>
<el-checkbox :label="2">
嗜睡
</el-checkbox>
<el-checkbox :label="3">
意识模糊
</el-checkbox>
<el-checkbox :label="4">
躁动
</el-checkbox>
<el-checkbox :label="5">
偏瘫
</el-checkbox>
<el-checkbox :label="6">
昏迷
</el-checkbox>
</el-checkbox-group>
</div>
</el-col>
@@ -171,13 +229,22 @@
<div class="form-item">
<span class="item-label">皮肤情况</span>
<el-checkbox-group v-model="state.formData.skinCondition">
<el-checkbox :label="1">正常</el-checkbox>
<el-checkbox :label="2">破损</el-checkbox>
<el-checkbox :label="3">压力性损伤</el-checkbox>
<el-checkbox :label="4">其他</el-checkbox>
<el-checkbox :label="1">
正常
</el-checkbox>
<el-checkbox :label="2">
破损
</el-checkbox>
<el-checkbox :label="3">
压力性损伤
</el-checkbox>
<el-checkbox :label="4">
其他
</el-checkbox>
</el-checkbox-group>
<span v-if="state.formData.skinCondition.includes(4)"
>其他 <el-input v-model="state.formData.skinOther" class="inline-input"
<span v-if="state.formData.skinCondition.includes(4)">其他 <el-input
v-model="state.formData.skinOther"
class="inline-input"
/></span>
</div>
</el-col>
@@ -236,13 +303,27 @@
<div class="form-item">
<span class="item-label">留置管路</span>
<el-checkbox-group v-model="state.formData.preOperativePipeline">
<el-checkbox :label="1"></el-checkbox>
<el-checkbox :label="2">中心静脉置管</el-checkbox>
<el-checkbox :label="3">动脉置管</el-checkbox>
<el-checkbox :label="4">气管插管</el-checkbox>
<el-checkbox :label="5">胃管</el-checkbox>
<el-checkbox :label="6">尿管</el-checkbox>
<el-checkbox :label="7">引流管</el-checkbox>
<el-checkbox :label="1">
</el-checkbox>
<el-checkbox :label="2">
中心静脉置管
</el-checkbox>
<el-checkbox :label="3">
动脉置管
</el-checkbox>
<el-checkbox :label="4">
气管插管
</el-checkbox>
<el-checkbox :label="5">
胃管
</el-checkbox>
<el-checkbox :label="6">
尿管
</el-checkbox>
<el-checkbox :label="7">
引流管
</el-checkbox>
</el-checkbox-group>
</div>
</el-col>
@@ -258,11 +339,22 @@
style="width: 50px"
/>
<span></span>
<el-checkbox-group v-model="state.formData.veinPosition" class="ml-20">
<el-checkbox :label="1">右上肢</el-checkbox>
<el-checkbox :label="2">右下肢</el-checkbox>
<el-checkbox :label="3">左上肢</el-checkbox>
<el-checkbox :label="4">左下肢</el-checkbox>
<el-checkbox-group
v-model="state.formData.veinPosition"
class="ml-20"
>
<el-checkbox :label="1">
右上肢
</el-checkbox>
<el-checkbox :label="2">
右下肢
</el-checkbox>
<el-checkbox :label="3">
左上肢
</el-checkbox>
<el-checkbox :label="4">
左下肢
</el-checkbox>
</el-checkbox-group>
</div>
</el-col>
@@ -273,13 +365,27 @@
<div class="form-item">
<span class="item-label">确认事项</span>
<el-checkbox-group v-model="state.formData.confirmItems">
<el-checkbox :label="1">禁食水</el-checkbox>
<el-checkbox :label="2">备皮</el-checkbox>
<el-checkbox :label="3">无活动义齿</el-checkbox>
<el-checkbox :label="4">无随形眼镜</el-checkbox>
<el-checkbox :label="5">摘首饰</el-checkbox>
<el-checkbox :label="6">非月经期</el-checkbox>
<el-checkbox :label="7">病员服</el-checkbox>
<el-checkbox :label="1">
禁食水
</el-checkbox>
<el-checkbox :label="2">
备皮
</el-checkbox>
<el-checkbox :label="3">
无活动义齿
</el-checkbox>
<el-checkbox :label="4">
无随形眼镜
</el-checkbox>
<el-checkbox :label="5">
摘首饰
</el-checkbox>
<el-checkbox :label="6">
非月经期
</el-checkbox>
<el-checkbox :label="7">
病员服
</el-checkbox>
</el-checkbox-group>
</div>
</el-col>
@@ -290,11 +396,21 @@
<div class="form-item">
<span class="item-label">携带物品</span>
<el-checkbox-group v-model="state.formData.carryItems">
<el-checkbox :label="1">病例</el-checkbox>
<el-checkbox :label="2">药物</el-checkbox>
<el-checkbox :label="3">影像资料</el-checkbox>
<el-checkbox :label="4">/腹带</el-checkbox>
<el-checkbox :label="5">血制品</el-checkbox>
<el-checkbox :label="1">
病例
</el-checkbox>
<el-checkbox :label="2">
药物
</el-checkbox>
<el-checkbox :label="3">
影像资料
</el-checkbox>
<el-checkbox :label="4">
/腹带
</el-checkbox>
<el-checkbox :label="5">
血制品
</el-checkbox>
</el-checkbox-group>
</div>
</el-col>
@@ -304,19 +420,28 @@
<el-col :span="8">
<div class="form-item">
<span class="item-label">病房护士签名</span>
<el-input v-model="state.formData.wardNurseName" class="inline-input" />
<el-input
v-model="state.formData.wardNurseName"
class="inline-input"
/>
</div>
</el-col>
<el-col :span="8">
<div class="form-item">
<span class="item-label">手术护士签名</span>
<el-input v-model="state.formData.surgeryNurseName" class="inline-input" />
<el-input
v-model="state.formData.surgeryNurseName"
class="inline-input"
/>
</div>
</el-col>
<el-col :span="8">
<div class="form-item">
<span class="item-label">交接时间</span>
<el-input v-model="state.formData.handoverTime" class="inline-input" />
<el-input
v-model="state.formData.handoverTime"
class="inline-input"
/>
</div>
</el-col>
</el-row>
@@ -324,7 +449,9 @@
<!-- 手术室护士与麻醉复苏室护士/病房护士交接记录 -->
<div class="form-section">
<div class="section-title">手术室护士与麻醉复苏室护士/病房护士交接记录</div>
<div class="section-title">
手术室护士与麻醉复苏室护士/病房护士交接记录
</div>
<el-row :gutter="20">
<el-col :span="24">
@@ -345,7 +472,10 @@
/>
<span>/</span>
<span class="ml-20">BP</span>
<el-input v-model="state.formData.postBloodPressure" class="inline-input" />
<el-input
v-model="state.formData.postBloodPressure"
class="inline-input"
/>
<span>mmHg</span>
</div>
</el-col>
@@ -356,14 +486,21 @@
<div class="form-item">
<span class="item-label">意识状态</span>
<el-checkbox-group v-model="state.formData.postConsciousness">
<el-checkbox :label="1">清醒</el-checkbox>
<el-checkbox :label="2">未清醒</el-checkbox>
<el-checkbox :label="3">其他</el-checkbox>
<el-checkbox :label="1">
清醒
</el-checkbox>
<el-checkbox :label="2">
未清醒
</el-checkbox>
<el-checkbox :label="3">
其他
</el-checkbox>
</el-checkbox-group>
<span v-if="state.formData.postConsciousness.includes(3)"
>其他
<el-input v-model="state.formData.postConsciousnessOther" class="inline-input"
/></span>
<span v-if="state.formData.postConsciousness.includes(3)">其他
<el-input
v-model="state.formData.postConsciousnessOther"
class="inline-input"
/></span>
</div>
</el-col>
</el-row>
@@ -373,13 +510,22 @@
<div class="form-item">
<span class="item-label">皮肤情况</span>
<el-checkbox-group v-model="state.formData.postSkinCondition">
<el-checkbox :label="1">正常</el-checkbox>
<el-checkbox :label="2">破损</el-checkbox>
<el-checkbox :label="3">压力性损伤</el-checkbox>
<el-checkbox :label="4">其他</el-checkbox>
<el-checkbox :label="1">
正常
</el-checkbox>
<el-checkbox :label="2">
破损
</el-checkbox>
<el-checkbox :label="3">
压力性损伤
</el-checkbox>
<el-checkbox :label="4">
其他
</el-checkbox>
</el-checkbox-group>
<span v-if="state.formData.postSkinCondition.includes(4)"
>其他 <el-input v-model="state.formData.postSkinOther" class="inline-input"
<span v-if="state.formData.postSkinCondition.includes(4)">其他 <el-input
v-model="state.formData.postSkinOther"
class="inline-input"
/></span>
</div>
</el-col>
@@ -438,13 +584,27 @@
<div class="form-item">
<span class="item-label">术后管路</span>
<el-checkbox-group v-model="state.formData.postOperativePipeline">
<el-checkbox :label="1"></el-checkbox>
<el-checkbox :label="2">中心静脉置管</el-checkbox>
<el-checkbox :label="3">动脉置管</el-checkbox>
<el-checkbox :label="4">气管插管</el-checkbox>
<el-checkbox :label="5">胃管</el-checkbox>
<el-checkbox :label="6">尿管</el-checkbox>
<el-checkbox :label="7">引流管</el-checkbox>
<el-checkbox :label="1">
</el-checkbox>
<el-checkbox :label="2">
中心静脉置管
</el-checkbox>
<el-checkbox :label="3">
动脉置管
</el-checkbox>
<el-checkbox :label="4">
气管插管
</el-checkbox>
<el-checkbox :label="5">
胃管
</el-checkbox>
<el-checkbox :label="6">
尿管
</el-checkbox>
<el-checkbox :label="7">
引流管
</el-checkbox>
</el-checkbox-group>
</div>
</el-col>
@@ -460,11 +620,22 @@
style="width: 50px"
/>
<span></span>
<el-checkbox-group v-model="state.formData.postVeinPosition" class="ml-20">
<el-checkbox :label="1">右上肢</el-checkbox>
<el-checkbox :label="2">右下肢</el-checkbox>
<el-checkbox :label="3">左上肢</el-checkbox>
<el-checkbox :label="4">左下肢</el-checkbox>
<el-checkbox-group
v-model="state.formData.postVeinPosition"
class="ml-20"
>
<el-checkbox :label="1">
右上肢
</el-checkbox>
<el-checkbox :label="2">
右下肢
</el-checkbox>
<el-checkbox :label="3">
左上肢
</el-checkbox>
<el-checkbox :label="4">
左下肢
</el-checkbox>
</el-checkbox-group>
</div>
</el-col>
@@ -475,11 +646,21 @@
<div class="form-item">
<span class="item-label">携带物品</span>
<el-checkbox-group v-model="state.formData.postCarryItems">
<el-checkbox :label="1">病历</el-checkbox>
<el-checkbox :label="2">药物</el-checkbox>
<el-checkbox :label="3">影像资料</el-checkbox>
<el-checkbox :label="4">/腹带</el-checkbox>
<el-checkbox :label="5">血制品</el-checkbox>
<el-checkbox :label="1">
病历
</el-checkbox>
<el-checkbox :label="2">
药物
</el-checkbox>
<el-checkbox :label="3">
影像资料
</el-checkbox>
<el-checkbox :label="4">
/腹带
</el-checkbox>
<el-checkbox :label="5">
血制品
</el-checkbox>
</el-checkbox-group>
</div>
</el-col>
@@ -490,8 +671,12 @@
<div class="form-item">
<span class="item-label">镇痛泵</span>
<el-radio-group v-model="state.formData.painPump">
<el-radio :label="1"></el-radio>
<el-radio :label="2"></el-radio>
<el-radio :label="1">
</el-radio>
<el-radio :label="2">
</el-radio>
</el-radio-group>
</div>
</el-col>
@@ -500,14 +685,23 @@
<el-row :gutter="20">
<el-col :span="12">
<div class="form-item">
<span class="item-label" style="width: 220px">手术室/麻醉复苏室护士签名</span>
<el-input v-model="state.formData.surgeryRecoveryNurseName" class="inline-input" />
<span
class="item-label"
style="width: 220px"
>手术室/麻醉复苏室护士签名</span>
<el-input
v-model="state.formData.surgeryRecoveryNurseName"
class="inline-input"
/>
</div>
</el-col>
<el-col :span="12">
<div class="form-item">
<span class="item-label">病房护士签名</span>
<el-input v-model="state.formData.postWardNurseName" class="inline-input" />
<el-input
v-model="state.formData.postWardNurseName"
class="inline-input"
/>
</div>
</el-col>
<el-col :span="12">
@@ -532,7 +726,10 @@
<el-col :span="12">
<div class="form-item">
<span class="item-label">交接时间</span>
<el-input v-model="state.formData.postHandoverTime" class="inline-input" />
<el-input
v-model="state.formData.postHandoverTime"
class="inline-input"
/>
</div>
</el-col>
</el-row>
@@ -540,13 +737,19 @@
<!-- 其他 -->
<div class="form-section">
<div class="section-title">其他</div>
<div class="section-title">
其他
</div>
<el-row :gutter="20">
<el-col :span="24">
<div class="form-item">
<el-checkbox-group v-model="state.formData.otherItems">
<el-checkbox :label="1">离院</el-checkbox>
<el-checkbox :label="2">死亡</el-checkbox>
<el-checkbox :label="1">
离院
</el-checkbox>
<el-checkbox :label="2">
死亡
</el-checkbox>
</el-checkbox-group>
</div>
</el-col>

View File

@@ -1,15 +1,26 @@
<template>
<div class="medical-document" >
<!-- 操作按钮 -->
<div class="btn-group">
<el-button type="success" @click="handlePrint">打印记录</el-button>
<!-- <el-button type="warning" @click="handleReset">重置表单</el-button> -->
</div>
<div class="medical-document">
<!-- 操作按钮 -->
<div class="btn-group">
<el-button
type="success"
@click="handlePrint"
>
打印记录
</el-button>
<!-- <el-button type="warning" @click="handleReset">重置表单</el-button> -->
</div>
<!-- 标题区域 -->
<div class="doc-header">
<h2 class="doc-title">{{ userStore.hospitalName}}</h2>
<h1 class="doc-title">手术记录</h1>
<div class="doc-subtitle">病历号: {{ formData.busNo || '待填写' }}</div>
<h2 class="doc-title">
{{ userStore.hospitalName }}
</h2>
<h1 class="doc-title">
手术记录
</h1>
<div class="doc-subtitle">
病历号: {{ formData.busNo || '待填写' }}
</div>
</div>
<!-- 内容区域 -->
@@ -24,34 +35,76 @@
>
<!-- 患者基础信息 -->
<section class="doc-section">
<h2 class="section-title">患者基础信息</h2>
<h2 class="section-title">
患者基础信息
</h2>
<div class="adaptive-grid">
<el-form-item label="姓名" prop="patientName" class="grid-item required">
<el-input v-model="formData.patientName" placeholder="请输入患者姓名" clearable />
<el-form-item
label="姓名"
prop="patientName"
class="grid-item required"
>
<el-input
v-model="formData.patientName"
placeholder="请输入患者姓名"
clearable
/>
</el-form-item>
<el-form-item label="性别" prop="gender" class="grid-item required">
<el-select v-model="formData.gender" placeholder="请选择性别">
<el-option label="男性" value="男性" />
<el-option label="女性" value="女性" />
<el-form-item
label="性别"
prop="gender"
class="grid-item required"
>
<el-select
v-model="formData.gender"
placeholder="请选择性别"
>
<el-option
label="男性"
value="男性"
/>
<el-option
label="女性"
value="女性"
/>
</el-select>
</el-form-item>
<el-form-item label="年龄" prop="age" class="grid-item required">
<el-form-item
label="年龄"
prop="age"
class="grid-item required"
>
<div class="input-with-unit">
<el-input v-model.number="formData.age" placeholder="请输入年龄" />
<el-input
v-model.number="formData.age"
placeholder="请输入年龄"
/>
</div>
</el-form-item>
<el-form-item label="科室" prop="department" class="grid-item required">
<el-input v-model="formData.department" placeholder="如:普外科" clearable />
<el-form-item
label="科室"
prop="department"
class="grid-item required"
>
<el-input
v-model="formData.department"
placeholder="如:普外科"
clearable
/>
</el-form-item>
<!--
<!--
<el-form-item label="病房/床号" prop="bedNo" class="grid-item required">
<el-input v-model="formData.bedNo" placeholder="如502-03" clearable />
</el-form-item> -->
<el-form-item label="手术日期" prop="operationDate" class="grid-item required">
<el-form-item
label="手术日期"
prop="operationDate"
class="grid-item required"
>
<el-date-picker
v-model="formData.operationDate"
type="date"
@@ -65,8 +118,14 @@
<!-- 手术综合信息 -->
<section class="doc-section">
<h2 class="section-title">手术综合信息</h2>
<el-form-item label="详细记录" prop="surgicalDetails" class="full-width-item required">
<h2 class="section-title">
手术综合信息
</h2>
<el-form-item
label="详细记录"
prop="surgicalDetails"
class="full-width-item required"
>
<el-input
v-model="formData.surgicalDetails"
type="textarea"
@@ -75,8 +134,6 @@
/>
</el-form-item>
</section>
</el-form>
</div>
</template>
@@ -100,7 +157,7 @@ import useUserStore from '../store/modules/user';
import { previewPrint } from '@/utils/printUtils.js';
defineOptions({
name: 'tySurgicalRecord'
name: 'TySurgicalRecord'
});
// 表单引用
const formRef = ref(null);

View File

@@ -1,8 +1,19 @@
<template>
<div class="app-container" v-loading="loading">
<div
v-loading="loading"
class="app-container"
>
<!-- 筛选区 -->
<el-form :model="queryParams" ref="queryRef" :inline="true" class="filter-form">
<el-form-item label="卫生机构" prop="orgName">
<el-form
ref="queryRef"
:model="queryParams"
:inline="true"
class="filter-form"
>
<el-form-item
label="卫生机构"
prop="orgName"
>
<el-select
v-model="queryParams.orgName"
placeholder="请选择"
@@ -18,7 +29,10 @@
/>
</el-select>
</el-form-item>
<el-form-item label="诊室名称" prop="roomName">
<el-form-item
label="诊室名称"
prop="roomName"
>
<el-input
v-model="queryParams.roomName"
placeholder="请输入诊室名称"
@@ -29,9 +43,26 @@
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">查询</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
<el-button type="primary" icon="Plus" @click="handleAdd">新增</el-button>
<el-button
type="primary"
icon="Search"
@click="handleQuery"
>
查询
</el-button>
<el-button
icon="Refresh"
@click="resetQuery"
>
重置
</el-button>
<el-button
type="primary"
icon="Plus"
@click="handleAdd"
>
新增
</el-button>
</el-form-item>
</el-form>
@@ -43,61 +74,131 @@
style="width: 100%"
class="clinic-room-table"
>
<el-table-column prop="id" label="ID" width="180" align="center" />
<el-table-column label="卫生机构" width="200" align="center" show-overflow-tooltip>
<template #default="scope">
<!-- ==忽略类型匹配string的"3"和number的3就能匹配上 -->
{{ tenantOptions.find(item => item.id == scope.row.orgName)?.tenantName || scope.row.orgName || '未知机构' }}
</template>
</el-table-column>
<el-table-column prop="roomName" label="诊室名称" width="160" align="center" show-overflow-tooltip />
<el-table-column prop="department" label="科室名称" width="160" align="center" show-overflow-tooltip />
<el-table-column prop="building" label="诊室楼号" width="120" align="center" show-overflow-tooltip />
<el-table-column prop="floor" label="诊室楼层" width="90" align="center" />
<el-table-column prop="roomNo" label="诊室房间号" width="120" align="center" />
<el-table-column prop="isDisabled" label="停用" width="90" align="center">
<el-table-column
prop="id"
label="ID"
width="180"
align="center"
/>
<el-table-column
label="卫生机构"
width="200"
align="center"
show-overflow-tooltip
>
<template #default="scope">
<!-- ==忽略类型匹配string的"3"和number的3就能匹配上 -->
{{ tenantOptions.find(item => item.id == scope.row.orgName)?.tenantName || scope.row.orgName || '未知机构' }}
</template>
</el-table-column>
<el-table-column
prop="roomName"
label="诊室名称"
width="160"
align="center"
show-overflow-tooltip
/>
<el-table-column
prop="department"
label="科室名称"
width="160"
align="center"
show-overflow-tooltip
/>
<el-table-column
prop="building"
label="诊室楼号"
width="120"
align="center"
show-overflow-tooltip
/>
<el-table-column
prop="floor"
label="诊室楼层"
width="90"
align="center"
/>
<el-table-column
prop="roomNo"
label="诊室房间号"
width="120"
align="center"
/>
<el-table-column
prop="isDisabled"
label="停用"
width="90"
align="center"
>
<template #default="scope">
<el-tag :type="scope.row.isDisabled ? 'danger' : 'success'">
{{ scope.row.isDisabled ? '是' : '否' }}
</el-tag>
</template>
</el-table-column>
<el-table-column prop="remarks" label="备注" min-width="100" align="center" show-overflow-tooltip />
<el-table-column prop="void" label="作废" width="90" align="center">
<el-table-column
prop="remarks"
label="备注"
min-width="100"
align="center"
show-overflow-tooltip
/>
<el-table-column
prop="void"
label="作废"
width="90"
align="center"
>
<template #default="scope">
<el-tag :type="scope.row.void ? 'danger' : 'success'">
{{ scope.row.void ? '是' : '否' }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="操作人" width="120" align="center" show-overflow-tooltip>
<template #default="scope">
{{ scope.row.updateBy || scope.row.createBy || '系统默认' }}
</template>
</el-table-column>
<el-table-column label="操作" width="250" align="center" fixed="right">
<el-table-column
label="操作人"
width="120"
align="center"
show-overflow-tooltip
>
<template #default="scope">
{{ scope.row.updateBy || scope.row.createBy || '系统默认' }}
</template>
</el-table-column>
<el-table-column
label="操作"
width="250"
align="center"
fixed="right"
>
<template #default="scope">
<el-button
v-hasPermi="['appoinment:clinicRoom:edit']"
type="primary"
link
icon="EditPen"
@click="handleEdit(scope.row)"
v-hasPermi="['appoinment:clinicRoom:edit']"
>编辑</el-button>
>
编辑
</el-button>
<el-button
v-hasPermi="['appoinment:clinicRoom:query']"
type="info"
link
icon="View"
@click="handleView(scope.row)"
v-hasPermi="['appoinment:clinicRoom:query']"
>查看</el-button>
>
查看
</el-button>
<el-button
v-hasPermi="['appoinment:clinicRoom:remove']"
type="danger"
link
icon="Delete"
@click="handleDelete(scope.row)"
v-hasPermi="['appoinment:clinicRoom:remove']"
>删除</el-button>
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
@@ -105,16 +206,16 @@
<!-- 分页区 -->
<pagination
v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
:total="total"
@pagination="getList"
/>
<!-- 新增/编辑/查看弹窗 -->
<el-dialog
:title="dialogTitle"
v-model="dialogVisible"
:title="dialogTitle"
width="500px"
append-to-body
:close-on-click-modal="false"
@@ -127,93 +228,136 @@
label-width="100px"
:disabled="dialogType === 'view'"
>
<el-form-item label="科室名称" prop="department">
<el-select
v-model="form.department"
placeholder="请选择科室"
style="width: 100%"
filterable
:disabled="dialogType === 'view'"
<el-form-item
label="科室名称"
prop="department"
>
<el-option
v-for="item in departmentOptions"
:key="item.deptId || item.id"
:label="item.deptName || item.name"
:value="item.deptName || item.name"
/>
</el-select>
</el-form-item>
<el-form-item label="卫生机构" prop="orgName">
<el-select
v-model="form.orgName"
placeholder="请选择"
style="width: 100%"
:disabled="dialogType === 'view'"
<el-select
v-model="form.department"
placeholder="请选择科室"
style="width: 100%"
filterable
:disabled="dialogType === 'view'"
>
<el-option
v-for="item in departmentOptions"
:key="item.deptId || item.id"
:label="item.deptName || item.name"
:value="item.deptName || item.name"
/>
</el-select>
</el-form-item>
<el-form-item
label="卫生机构"
prop="orgName"
>
<el-option
v-for="item in addEditTenantOptions"
:key="item.id"
:label="item.tenantName"
:value="item.id"
<el-select
v-model="form.orgName"
placeholder="请选择"
style="width: 100%"
:disabled="dialogType === 'view'"
>
<el-option
v-for="item in addEditTenantOptions"
:key="item.id"
:label="item.tenantName"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item
label="诊室名称"
prop="roomName"
>
<el-input
v-model="form.roomName"
placeholder="请输入诊室名称"
maxlength="20"
show-word-limit
/>
</el-select>
</el-form-item>
<el-form-item label="诊室名称" prop="roomName">
<el-input
v-model="form.roomName"
placeholder="请输入诊室名称"
maxlength="20"
show-word-limit
/>
</el-form-item>
<el-form-item label="诊室楼号" prop="building">
<el-input
v-model="form.building"
placeholder="请输入诊室楼号"
maxlength="50"
/>
</el-form-item>
<el-form-item label="诊室楼层" prop="floor">
<el-input
v-model="form.floor"
placeholder="请输入诊室楼层"
maxlength="10"
/>
</el-form-item>
<el-form-item label="诊室房间号" prop="roomNo">
<el-input
v-model="form.roomNo"
placeholder="请输入诊室房间号"
maxlength="50"
/>
</el-form-item>
<el-form-item label="停用状态" prop="isDisabled">
<el-radio-group v-model="form.isDisabled">
<el-radio :label="false">启用</el-radio>
<el-radio :label="true">停用</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="备注" prop="remarks">
<el-input
v-model="form.remarks"
type="textarea"
:rows="3"
placeholder="请输入备注"
maxlength="500"
show-word-limit
/>
</el-form-item>
<el-form-item label="作废" prop="void">
<el-radio-group v-model="form.void">
<el-radio :label="false"></el-radio>
<el-radio :label="true"></el-radio>
</el-radio-group>
</el-form-item>
</el-form>
</el-form-item>
<el-form-item
label="诊室楼号"
prop="building"
>
<el-input
v-model="form.building"
placeholder="请输入诊室楼号"
maxlength="50"
/>
</el-form-item>
<el-form-item
label="诊室楼层"
prop="floor"
>
<el-input
v-model="form.floor"
placeholder="请输入诊室楼层"
maxlength="10"
/>
</el-form-item>
<el-form-item
label="诊室房间号"
prop="roomNo"
>
<el-input
v-model="form.roomNo"
placeholder="请输入诊室房间号"
maxlength="50"
/>
</el-form-item>
<el-form-item
label="停用状态"
prop="isDisabled"
>
<el-radio-group v-model="form.isDisabled">
<el-radio :label="false">
启用
</el-radio>
<el-radio :label="true">
停用
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item
label="备注"
prop="remarks"
>
<el-input
v-model="form.remarks"
type="textarea"
:rows="3"
placeholder="请输入备注"
maxlength="500"
show-word-limit
/>
</el-form-item>
<el-form-item
label="作废"
prop="void"
>
<el-radio-group v-model="form.void">
<el-radio :label="false">
</el-radio>
<el-radio :label="true">
</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button v-if="dialogType !== 'view'" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
<el-button
v-if="dialogType !== 'view'"
type="primary"
@click="submitForm"
>
</el-button>
<el-button @click="cancel">
</el-button>
</div>
</template>
</el-dialog>

View File

@@ -1,20 +1,34 @@
<template>
<div class="doctorschedule-container">
<div class="doctorschedule-header">
<h2 class="doctorschedule-title">医生排班</h2>
<h2 class="doctorschedule-title">
医生排班
</h2>
</div>
<div class="doctorschedule-content">
<!-- 筛选条件 -->
<div class="filter-condition">
<span class="filter-label">卫生机构</span>
<el-select v-model="filterParams.orgName" class="filter-select">
<el-option label="演示医院" value="演示医院"></el-option>
<el-select
v-model="filterParams.orgName"
class="filter-select"
>
<el-option
label="演示医院"
value="演示医院"
/>
</el-select>
<span class="filter-label">科室名称</span>
<el-select v-model="filterParams.deptName" class="filter-select">
<el-option label="测试内科" value="测试内科"></el-option>
<el-select
v-model="filterParams.deptName"
class="filter-select"
>
<el-option
label="测试内科"
value="测试内科"
/>
</el-select>
<span class="filter-label">开始日期</span>
@@ -27,22 +41,51 @@
<span class="filter-label">排班类型</span>
<div class="radio-group">
<el-radio v-model="filterParams.appointmentType" label="普通" @change="handleAppointmentTypeChange">普通</el-radio>
<el-radio v-model="filterParams.appointmentType" label="专家" @change="handleAppointmentTypeChange">专家</el-radio>
<el-radio
v-model="filterParams.appointmentType"
label="普通"
@change="handleAppointmentTypeChange"
>
普通
</el-radio>
<el-radio
v-model="filterParams.appointmentType"
label="专家"
@change="handleAppointmentTypeChange"
>
专家
</el-radio>
</div>
</div>
<!-- 排班表格 -->
<div class="schedule-table-container">
<!-- 按日期分组显示排班 -->
<div v-for="(dateGroup, index) in groupedSchedule" :key="index" class="daily-schedule">
<div
v-for="(dateGroup, index) in groupedSchedule"
:key="index"
class="daily-schedule"
>
<div class="daily-header">
<span class="date-text">{{ dateGroup.date }}</span>
<span class="weekday-text">{{ dateGroup.weekday }}</span>
</div>
<el-table :data="dateGroup.items" border style="width: 100%" class="schedule-table">
<el-table-column prop="timeSlot" label="时段" width="100"></el-table-column>
<el-table-column prop="doctorName" :label="filterParams.appointmentType === '专家' ? '专家' : '医生'" width="150">
<el-table
:data="dateGroup.items"
border
style="width: 100%"
class="schedule-table"
>
<el-table-column
prop="timeSlot"
label="时段"
width="100"
/>
<el-table-column
prop="doctorName"
:label="filterParams.appointmentType === '专家' ? '专家' : '医生'"
width="150"
>
<template #default="scope">
<el-select
v-model="scope.row.doctorName"
@@ -55,11 +98,15 @@
:key="doctor.value"
:label="doctor.label"
:value="doctor.value"
></el-option>
/>
</el-select>
</template>
</el-table-column>
<el-table-column prop="room" label="诊室" width="100">
<el-table-column
prop="room"
label="诊室"
width="100"
>
<template #default="scope">
<el-select
v-model="scope.row.room"
@@ -67,14 +114,30 @@
class="inline-select"
:disabled="!isEditMode"
>
<el-option label="诊室1" value="诊室1"></el-option>
<el-option label="诊室2" value="诊室2"></el-option>
<el-option label="诊室3" value="诊室3"></el-option>
<el-option label="诊室4" value="诊室4"></el-option>
<el-option
label="诊室1"
value="诊室1"
/>
<el-option
label="诊室2"
value="诊室2"
/>
<el-option
label="诊室3"
value="诊室3"
/>
<el-option
label="诊室4"
value="诊室4"
/>
</el-select>
</template>
</el-table-column>
<el-table-column prop="startTime" label="开始时间" width="120">
<el-table-column
prop="startTime"
label="开始时间"
width="120"
>
<template #default="scope">
<el-time-picker
v-model="scope.row.startTime"
@@ -87,7 +150,11 @@
/>
</template>
</el-table-column>
<el-table-column prop="endTime" label="结束时间" width="120">
<el-table-column
prop="endTime"
label="结束时间"
width="120"
>
<template #default="scope">
<el-time-picker
v-model="scope.row.endTime"
@@ -100,27 +167,39 @@
/>
</template>
</el-table-column>
<el-table-column prop="maxNumber" label="限号数量" width="80">
<el-table-column
prop="maxNumber"
label="限号数量"
width="80"
>
<template #default="scope">
<el-input
v-model="scope.row.maxNumber"
type="number"
:disabled="!isEditMode"
/>
v-model="scope.row.maxNumber"
type="number"
:disabled="!isEditMode"
/>
</template>
</el-table-column>
<el-table-column prop="record" label="号源记录" width="80">
<el-table-column
prop="record"
label="号源记录"
width="80"
>
<template #default="scope">
<el-icon
@click="handleViewRecord(scope.row)"
class="record-icon"
class="record-icon"
title="查看号源记录"
@click="handleViewRecord(scope.row)"
>
<View />
</el-icon>
</template>
</el-table-column>
<el-table-column prop="appointmentItem" label="挂号项目" width="120">
<el-table-column
prop="appointmentItem"
label="挂号项目"
width="120"
>
<template #default="scope">
<el-select
v-model="scope.row.appointmentItem"
@@ -129,19 +208,39 @@
:disabled="!isEditMode"
@change="handleAppointmentItemChange(scope.row)"
>
<el-option label="挂号费 50" value="挂号费 50"></el-option>
<el-option label="一般诊疗10" value="一般诊疗费 10"></el-option>
<el-option label="主任医师 27" value="主任医师 27"></el-option>
<el-option label="副主任 15" value="副主任 15"></el-option>
<el-option
label="挂号50"
value="挂号费 50"
/>
<el-option
label="一般诊疗费 10"
value="一般诊疗费 10"
/>
<el-option
label="主任医师 27"
value="主任医师 27"
/>
<el-option
label="副主任 15"
value="副主任 15"
/>
</el-select>
</template>
</el-table-column>
<el-table-column prop="registrationFee" label="挂号费(元)" width="100">
<el-table-column
prop="registrationFee"
label="挂号费(元)"
width="100"
>
<template #default="scope">
<span>{{ scope.row.registrationFee || '0' }}</span>
</template>
</el-table-column>
<el-table-column prop="clinicItem" label="诊查项目" width="150">
<el-table-column
prop="clinicItem"
label="诊查项目"
width="150"
>
<template #default="scope">
<el-select
v-model="scope.row.clinicItem"
@@ -150,53 +249,91 @@
:disabled="!isEditMode"
@change="handleClinicItemChange(scope.row)"
>
<el-option label="常规诊查" value="常规诊查"></el-option>
<el-option label="专科诊查" value="专科诊查"></el-option>
<el-option label="特殊诊查" value="特殊诊查"></el-option>
<el-option label="专家诊查" value="专家诊查"></el-option>
<el-option
label="常规诊查"
value="常规诊查"
/>
<el-option
label="专科诊查"
value="专科诊查"
/>
<el-option
label="特殊诊查"
value="特殊诊查"
/>
<el-option
label="专家诊查"
value="专家诊查"
/>
</el-select>
</template>
</el-table-column>
<el-table-column prop="treatmentFee" label="诊疗费(元)" width="100">
<el-table-column
prop="treatmentFee"
label="诊疗费(元)"
width="100"
>
<template #default="scope">
<span>{{ scope.row.treatmentFee || '0' }}</span>
</template>
</el-table-column>
<el-table-column prop="online" label="线上" width="60">
<el-table-column
prop="online"
label="线上"
width="60"
>
<template #default="scope">
<el-checkbox v-model="scope.row.online" :disabled="!isEditMode"></el-checkbox>
<el-checkbox
v-model="scope.row.online"
:disabled="!isEditMode"
/>
</template>
</el-table-column>
<el-table-column prop="stopClinic" label="停诊" width="60">
<el-table-column
prop="stopClinic"
label="停诊"
width="60"
>
<template #default="scope">
<el-checkbox v-model="scope.row.stopClinic" :disabled="!isEditMode"></el-checkbox>
<el-checkbox
v-model="scope.row.stopClinic"
:disabled="!isEditMode"
/>
</template>
</el-table-column>
<el-table-column prop="stopReason" label="停诊原因" width="150">
<el-table-column
prop="stopReason"
label="停诊原因"
width="150"
>
<template #default="scope">
<el-input
v-model="scope.row.stopReason"
:placeholder="scope.row.stopClinic ? '请输入停诊原因' : ''"
class="inline-input"
:disabled="!isEditMode || !scope.row.stopClinic"
></el-input>
/>
</template>
</el-table-column>
<el-table-column label="操作" width="150" fixed="right">
<el-table-column
label="操作"
width="150"
fixed="right"
>
<template #default="scope">
<el-button
type="primary"
size="small"
@click="handleAddSchedule(scope.row)"
:disabled="!isEditMode"
@click="handleAddSchedule(scope.row)"
>
添加
</el-button>
<el-button
type="danger"
size="small"
@click="handleDeleteSchedule(scope.row)"
:disabled="!isEditMode"
@click="handleDeleteSchedule(scope.row)"
>
删除
</el-button>
@@ -208,8 +345,16 @@
<!-- 底部操作按钮 -->
<div class="bottom-buttons">
<el-button type="primary" @click="handleSave" :disabled="!isEditMode">确定</el-button>
<el-button @click="handleCancel">取消</el-button>
<el-button
type="primary"
:disabled="!isEditMode"
@click="handleSave"
>
确定
</el-button>
<el-button @click="handleCancel">
取消
</el-button>
</div>
</div>
@@ -221,13 +366,19 @@
:close-on-click-modal="true"
>
<div class="appointment-records">
<div class="record-item" v-for="record in appointmentRecords" :key="record.index">
<div
v-for="record in appointmentRecords"
:key="record.index"
class="record-item"
>
<span class="record-time">{{ record.time }}</span>
</div>
</div>
<template #footer>
<div class="dialog-footer">
<el-button @click="recordDialogVisible = false">确定</el-button>
<el-button @click="recordDialogVisible = false">
确定
</el-button>
</div>
</template>
</el-dialog>

View File

@@ -2,30 +2,80 @@
<div class="appoinmentmanage-wrapper">
<div class="appoinmentmanage-container">
<div class="appoinmentmanage-header">
<h2 class="appoinmentmanage-title">科室排班管理</h2>
<h2 class="appoinmentmanage-title">
科室排班管理
</h2>
</div>
<div class="appoinmentmanage-content">
<!-- 查询条件 -->
<div class="query-condition">
<el-select v-model="queryParams.orgName" placeholder="全部机构" class="query-select" clearable @change="handleOrgChange">
<el-option label="全部机构" value=""></el-option>
<el-option v-for="org in organizationOptions" :key="org.id || org.code" :label="org.name || org.orgName" :value="org.name || org.orgName"></el-option>
<el-select
v-model="queryParams.orgName"
placeholder="全部机构"
class="query-select"
clearable
@change="handleOrgChange"
>
<el-option
label="全部机构"
value=""
/>
<el-option
v-for="org in organizationOptions"
:key="org.id || org.code"
:label="org.name || org.orgName"
:value="org.name || org.orgName"
/>
</el-select>
<el-select v-model="queryParams.deptName" placeholder="全部科室" class="query-select">
<el-option label="全部科室" value=""></el-option>
<el-option v-for="dept in departmentOptions" :key="dept.id || dept.code" :label="dept.name || dept.deptName" :value="dept.name || dept.deptName"></el-option>
<el-select
v-model="queryParams.deptName"
placeholder="全部科室"
class="query-select"
>
<el-option
label="全部科室"
value=""
/>
<el-option
v-for="dept in departmentOptions"
:key="dept.id || dept.code"
:label="dept.name || dept.deptName"
:value="dept.name || dept.deptName"
/>
</el-select>
<el-button type="primary" @click="handleQuery" class="query-button">查询</el-button>
<el-button @click="handleReset" class="reset-button">重置</el-button>
<el-button type="success" @click="handleAppointmentSetting" class="appointment-setting-button">预约设置</el-button>
<el-button
type="primary"
class="query-button"
@click="handleQuery"
>
查询
</el-button>
<el-button
class="reset-button"
@click="handleReset"
>
重置
</el-button>
<el-button
type="success"
class="appointment-setting-button"
@click="handleAppointmentSetting"
>
预约设置
</el-button>
</div>
<!-- 科室列表 -->
<div class="dept-table-container">
<el-table :data="deptList" border style="width: 100%" class="centered-table">
<el-table
:data="deptList"
border
style="width: 100%"
class="centered-table"
>
<!-- 添加空状态提示 -->
<template #empty>
<div style="padding: 20px 0;">
@@ -35,35 +85,66 @@
</template>
<!-- 适配常见的后端字段名 -->
<el-table-column prop="id" label="ID" width="150"></el-table-column>
<el-table-column prop="orgName" label="卫生机构" width="350">
<el-table-column
prop="id"
label="ID"
width="150"
/>
<el-table-column
prop="orgName"
label="卫生机构"
width="350"
>
<template #default="scope">
{{ scope.row.orgName || scope.row.organizationName || scope.row.org || '' }}
</template>
</el-table-column>
<el-table-column prop="deptName" label="科室名称" width="350">
<el-table-column
prop="deptName"
label="科室名称"
width="350"
>
<template #default="scope">
{{ scope.row.deptName || scope.row.departmentName || scope.row.name || '' }}
</template>
</el-table-column>
<el-table-column prop="remark" label="备注" width="400">
<el-table-column
prop="remark"
label="备注"
width="400"
>
<template #default="scope">
{{ scope.row.remark || scope.row.description || scope.row.note || '' }}
</template>
</el-table-column>
<el-table-column prop="status" label="作废标志">
<el-table-column
prop="status"
label="作废标志"
>
<template #default="scope">
<el-tag :type="(scope.row.status === 1 || scope.row.status === true || scope.row.status === '1') ? 'success' : 'danger'">
{{ (scope.row.status === 1 || scope.row.status === true || scope.row.status === '1') ? '有效' : '无效' }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" width="350" fixed="right">
<el-table-column
label="操作"
width="350"
fixed="right"
>
<template #default="scope">
<el-button type="primary" size="small" @click="handleEdit(scope.row)">
<el-button
type="primary"
size="small"
@click="handleEdit(scope.row)"
>
<el-icon><EditPen /></el-icon>
</el-button>
<el-button type="info" size="small" @click="handleView(scope.row)">
<el-button
type="info"
size="small"
@click="handleView(scope.row)"
>
<el-icon><View /></el-icon>
</el-button>
</template>
@@ -97,12 +178,28 @@
top="50%"
:before-close="handleAppointmentSettingCancel"
>
<el-form label-position="top" :model="appointmentSettingForm">
<el-form
label-position="top"
:model="appointmentSettingForm"
>
<el-form-item label="取消预约时间类型">
<el-select v-model="appointmentSettingForm.cancelAppointmentType" placeholder="请选择" style="width: 200px">
<el-option label="年" value="YEAR"></el-option>
<el-option label="月" value="MONTH"></el-option>
<el-option label="日" value="DAY"></el-option>
<el-select
v-model="appointmentSettingForm.cancelAppointmentType"
placeholder="请选择"
style="width: 200px"
>
<el-option
label="年"
value="YEAR"
/>
<el-option
label="月"
value="MONTH"
/>
<el-option
label="日"
value="DAY"
/>
</el-select>
</el-form-item>
<el-form-item label="取消预约次数">
@@ -111,13 +208,20 @@
:min="0"
:step="1"
placeholder="请输入"
></el-input-number>
/>
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button @click="handleAppointmentSettingCancel">取消</el-button>
<el-button type="primary" @click="handleAppointmentSettingConfirm">确定</el-button>
<el-button @click="handleAppointmentSettingCancel">
取消
</el-button>
<el-button
type="primary"
@click="handleAppointmentSettingConfirm"
>
确定
</el-button>
</div>
</template>
</el-dialog>
@@ -135,11 +239,22 @@
<!-- 筛选条件 -->
<div class="filter-condition">
<span class="filter-label">卫生机构</span>
<el-input v-model="displayedInstitutionName" class="filter-select" disabled></el-input>
<el-input
v-model="displayedInstitutionName"
class="filter-select"
disabled
/>
<span class="filter-label">科室名称</span>
<el-select v-model="filterParams.deptName" class="filter-select" disabled>
<el-option :label="filterParams.deptName" :value="filterParams.deptName"></el-option>
<el-select
v-model="filterParams.deptName"
class="filter-select"
disabled
>
<el-option
:label="filterParams.deptName"
:value="filterParams.deptName"
/>
</el-select>
<span class="filter-label">开始日期</span>
@@ -152,21 +267,45 @@
<span class="filter-label">排班类型</span>
<div class="radio-group">
<el-radio v-model="filterParams.appointmentType" label="普通" @change="handleAppointmentTypeChange">普通</el-radio>
<el-radio v-model="filterParams.appointmentType" label="专家" @change="handleAppointmentTypeChange">专家</el-radio>
<el-radio
v-model="filterParams.appointmentType"
label="普通"
@change="handleAppointmentTypeChange"
>
普通
</el-radio>
<el-radio
v-model="filterParams.appointmentType"
label="专家"
@change="handleAppointmentTypeChange"
>
专家
</el-radio>
</div>
</div>
<!-- 排班表格 -->
<div class="schedule-table-container">
<!-- 按日期分组显示排班 -->
<div v-for="(dateGroup, index) in groupedSchedule" :key="index" class="daily-schedule">
<div
v-for="(dateGroup, index) in groupedSchedule"
:key="index"
class="daily-schedule"
>
<div class="daily-header">
<span class="date-text">{{ dateGroup.date }}</span>
<span class="weekday-text">{{ dateGroup.weekday }}</span>
</div>
<el-table :data="dateGroup.items" border style="width: 100%" class="schedule-table">
<el-table-column label="时段" width="100">
<el-table
:data="dateGroup.items"
border
style="width: 100%"
class="schedule-table"
>
<el-table-column
label="时段"
width="100"
>
<template #default="scope">
<el-select
v-model="scope.row.timeSlot"
@@ -174,19 +313,29 @@
:disabled="!isEditMode"
@change="(val) => handleTimeSlotChange(val, scope.row)"
>
<el-option label="上午" value="上午"></el-option>
<el-option label="午" value="下午"></el-option>
<el-option
label="午"
value="上午"
/>
<el-option
label="下午"
value="下午"
/>
</el-select>
</template>
</el-table-column>
<el-table-column prop="doctorName" :label="filterParams.appointmentType === '专家' ? '专家' : '医生'" width="150">
<el-table-column
prop="doctorName"
:label="filterParams.appointmentType === '专家' ? '专家' : '医生'"
width="150"
>
<template #default="scope">
<el-select
:key="`doctor-${filterParams.appointmentType}-${scope.row.id}`"
v-model="scope.row.doctorId"
placeholder="请选"
placeholder="请选"
class="inline-select"
:disabled="!isEditMode"
:key="`doctor-${filterParams.appointmentType}-${scope.row.id}`"
@change="(selectedId) => handleDoctorChange(selectedId, scope.row)"
>
<el-option
@@ -194,11 +343,15 @@
:key="doctor.id"
:label="doctor.label"
:value="String(doctor.id)"
></el-option>
/>
</el-select>
</template>
</el-table-column>
<el-table-column prop="room" label="诊室" width="100">
<el-table-column
prop="room"
label="诊室"
width="100"
>
<template #default="scope">
<el-select
v-model="scope.row.room"
@@ -213,11 +366,15 @@
:key="room.id"
:label="room.label"
:value="room.value"
></el-option>
/>
</el-select>
</template>
</el-table-column>
<el-table-column prop="startTime" label="开始时间" width="120">
<el-table-column
prop="startTime"
label="开始时间"
width="120"
>
<template #default="scope">
<el-time-picker
v-model="scope.row.startTime"
@@ -231,7 +388,11 @@
/>
</template>
</el-table-column>
<el-table-column prop="endTime" label="结束时间" width="120">
<el-table-column
prop="endTime"
label="结束时间"
width="120"
>
<template #default="scope">
<el-time-picker
v-model="scope.row.endTime"
@@ -244,27 +405,39 @@
/>
</template>
</el-table-column>
<el-table-column prop="maxNumber" label="限号数量" width="80">
<el-table-column
prop="maxNumber"
label="限号数量"
width="80"
>
<template #default="scope">
<el-input
v-model="scope.row.maxNumber"
type="number"
:disabled="!isEditMode"
/>
v-model="scope.row.maxNumber"
type="number"
:disabled="!isEditMode"
/>
</template>
</el-table-column>
<el-table-column prop="record" label="号源记录" width="80">
<el-table-column
prop="record"
label="号源记录"
width="80"
>
<template #default="scope">
<el-icon
@click="handleViewRecord(scope.row)"
class="record-icon"
class="record-icon"
title="查看号源记录"
@click="handleViewRecord(scope.row)"
>
<View />
</el-icon>
</template>
</el-table-column>
<el-table-column prop="appointmentItem" label="挂号项目" width="120">
<el-table-column
prop="appointmentItem"
label="挂号项目"
width="120"
>
<template #default="scope">
<el-select
v-model="scope.row.appointmentItem"
@@ -278,16 +451,24 @@
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
/>
</el-select>
</template>
</el-table-column>
<el-table-column prop="registrationFee" label="挂号费(元)" width="100">
<el-table-column
prop="registrationFee"
label="挂号费(元)"
width="100"
>
<template #default="scope">
<span>{{ scope.row.registrationFee || '0' }}</span>
</template>
</el-table-column>
<el-table-column prop="clinicItem" label="诊查项目" width="150">
<el-table-column
prop="clinicItem"
label="诊查项目"
width="150"
>
<template #default="scope">
<el-select
v-model="scope.row.clinicItem"
@@ -301,50 +482,76 @@
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
/>
</el-select>
</template>
</el-table-column>
<el-table-column prop="treatmentFee" label="诊疗费(元)" width="100">
<el-table-column
prop="treatmentFee"
label="诊疗费(元)"
width="100"
>
<template #default="scope">
<span>{{ scope.row.treatmentFee || '0' }}</span>
</template>
</el-table-column>
<el-table-column prop="online" label="线上" width="60">
<el-table-column
prop="online"
label="线上"
width="60"
>
<template #default="scope">
<el-checkbox v-model="scope.row.online" :disabled="!isEditMode"></el-checkbox>
<el-checkbox
v-model="scope.row.online"
:disabled="!isEditMode"
/>
</template>
</el-table-column>
<el-table-column prop="stopClinic" label="停诊" width="60">
<el-table-column
prop="stopClinic"
label="停诊"
width="60"
>
<template #default="scope">
<el-checkbox v-model="scope.row.stopClinic" :disabled="!isEditMode"></el-checkbox>
<el-checkbox
v-model="scope.row.stopClinic"
:disabled="!isEditMode"
/>
</template>
</el-table-column>
<el-table-column prop="stopReason" label="停诊原因" width="150">
<el-table-column
prop="stopReason"
label="停诊原因"
width="150"
>
<template #default="scope">
<el-input
v-model="scope.row.stopReason"
:placeholder="scope.row.stopClinic ? '请输入停诊原因' : ''"
class="inline-input"
:disabled="!isEditMode || !scope.row.stopClinic"
></el-input>
/>
</template>
</el-table-column>
<el-table-column label="操作" width="150" fixed="right">
<el-table-column
label="操作"
width="150"
fixed="right"
>
<template #default="scope">
<el-button
type="primary"
size="small"
@click="handleAddSchedule(scope.row)"
:disabled="!isEditMode"
@click="handleAddSchedule(scope.row)"
>
添加
</el-button>
<el-button
type="danger"
size="small"
@click="handleDeleteSchedule(scope.row)"
:disabled="!isEditMode || isLastDraftRowInSlot(scope.row)"
@click="handleDeleteSchedule(scope.row)"
>
删除
</el-button>
@@ -356,8 +563,16 @@
<!-- 底部操作按钮 -->
<div class="bottom-buttons">
<el-button type="primary" @click="handleSave" :disabled="!isEditMode">确定</el-button>
<el-button @click="handleCancel">取消</el-button>
<el-button
type="primary"
:disabled="!isEditMode"
@click="handleSave"
>
确定
</el-button>
<el-button @click="handleCancel">
取消
</el-button>
</div>
</div>
@@ -369,13 +584,19 @@
:close-on-click-modal="true"
>
<div class="appointment-records">
<div class="record-item" v-for="record in appointmentRecords" :key="record.index">
<div
v-for="record in appointmentRecords"
:key="record.index"
class="record-item"
>
<span class="record-time">{{ record.time }}</span>
</div>
</div>
<template #footer>
<div class="dialog-footer">
<el-button @click="recordDialogVisible = false">确定</el-button>
<el-button @click="recordDialogVisible = false">
确定
</el-button>
</div>
</template>
</el-dialog>

View File

@@ -2,13 +2,24 @@
<div class="dept-appthours-container">
<!-- 页头区域 -->
<div class="page-header">
<h1 class="page-title">科室预约工作时间维护</h1>
<h1 class="page-title">
科室预约工作时间维护
</h1>
</div>
<!-- 筛选控制区 -->
<div class="filter-section">
<el-form :model="queryParams" ref="queryRef" :inline="true" class="filter-row">
<el-form-item label="所属机构" prop="institution" class="filter-item">
<el-form
ref="queryRef"
:model="queryParams"
:inline="true"
class="filter-row"
>
<el-form-item
label="所属机构"
prop="institution"
class="filter-item"
>
<el-select
v-model="queryParams.institution"
placeholder="请选择"
@@ -24,7 +35,11 @@
/>
</el-select>
</el-form-item>
<el-form-item label="科室名称" prop="department" class="filter-item">
<el-form-item
label="科室名称"
prop="department"
class="filter-item"
>
<el-select
v-model="queryParams.department"
placeholder="全部科室"
@@ -42,15 +57,35 @@
</el-select>
</el-form-item>
<div class="filter-buttons">
<el-button type="primary" icon="Search" @click="handleQuery">查询</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
<el-button type="primary" icon="Plus" @click="handleAdd">新增</el-button>
<el-button
type="primary"
icon="Search"
@click="handleQuery"
>
查询
</el-button>
<el-button
icon="Refresh"
@click="resetQuery"
>
重置
</el-button>
<el-button
type="primary"
icon="Plus"
@click="handleAdd"
>
新增
</el-button>
</div>
</el-form>
</div>
<!-- 数据表格区 -->
<div class="table-section" v-loading="loading">
<div
v-loading="loading"
class="table-section"
>
<el-table
:data="deptAppthoursList"
border
@@ -61,40 +96,111 @@
stripe
:row-class-name="tableRowClassName"
>
<el-table-column prop="institution" label="所属机构" min-width="150" align="center" show-overflow-tooltip />
<el-table-column prop="department" label="科室名称" min-width="150" align="center" show-overflow-tooltip />
<el-table-column prop="morningStart" label="上午开始时间" min-width="120" align="center">
<el-table-column
prop="institution"
label="所属机构"
min-width="150"
align="center"
show-overflow-tooltip
/>
<el-table-column
prop="department"
label="科室名称"
min-width="150"
align="center"
show-overflow-tooltip
/>
<el-table-column
prop="morningStart"
label="上午开始时间"
min-width="120"
align="center"
>
<template #default="scope">
{{ formatTime(scope.row.morningStart) }}
</template>
</el-table-column>
<el-table-column prop="morningEnd" label="上午结束时间" min-width="120" align="center">
<el-table-column
prop="morningEnd"
label="上午结束时间"
min-width="120"
align="center"
>
<template #default="scope">
{{ formatTime(scope.row.morningEnd) }}
</template>
</el-table-column>
<el-table-column prop="afternoonStart" label="下午开始时间" min-width="120" align="center">
<el-table-column
prop="afternoonStart"
label="下午开始时间"
min-width="120"
align="center"
>
<template #default="scope">
{{ formatTime(scope.row.afternoonStart) }}
</template>
</el-table-column>
<el-table-column prop="afternoonEnd" label="下午结束时间" min-width="120" align="center">
<el-table-column
prop="afternoonEnd"
label="下午结束时间"
min-width="120"
align="center"
>
<template #default="scope">
{{ formatTime(scope.row.afternoonEnd) }}
</template>
</el-table-column>
<el-table-column prop="quota" label="限号数量" min-width="100" align="center" />
<el-table-column prop="operator" label="操作人" min-width="100" align="center" show-overflow-tooltip />
<el-table-column width="120" align="center" fixed="right">
<el-table-column
prop="quota"
label="限号数量"
min-width="100"
align="center"
/>
<el-table-column
prop="operator"
label="操作人"
min-width="100"
align="center"
show-overflow-tooltip
/>
<el-table-column
width="120"
align="center"
fixed="right"
>
<template #default="scope">
<el-tooltip content="编辑" placement="top">
<el-button type="primary" link icon="EditPen" @click="handleEdit(scope.row)" />
<el-tooltip
content="编辑"
placement="top"
>
<el-button
type="primary"
link
icon="EditPen"
@click="handleEdit(scope.row)"
/>
</el-tooltip>
<el-tooltip content="查看" placement="top">
<el-button type="info" link icon="View" @click="handleView(scope.row)" />
<el-tooltip
content="查看"
placement="top"
>
<el-button
type="info"
link
icon="View"
@click="handleView(scope.row)"
/>
</el-tooltip>
<el-tooltip content="删除" placement="top">
<el-button type="danger" link icon="Delete" @click="handleDelete(scope.row)" />
<el-tooltip
content="删除"
placement="top"
>
<el-button
type="danger"
link
icon="Delete"
@click="handleDelete(scope.row)"
/>
</el-tooltip>
</template>
</el-table-column>
@@ -117,8 +223,8 @@
</div>
<el-dialog
:title="dialogTitle"
v-model="dialogVisible"
:title="dialogTitle"
width="600px"
append-to-body
:close-on-click-modal="false"
@@ -130,7 +236,10 @@
label-width="100px"
:disabled="dialogType === 'view'"
>
<el-form-item label="所属机构" prop="institution">
<el-form-item
label="所属机构"
prop="institution"
>
<el-select
v-model="form.institution"
placeholder="请选择"
@@ -145,7 +254,10 @@
/>
</el-select>
</el-form-item>
<el-form-item label="科室名称" prop="department">
<el-form-item
label="科室名称"
prop="department"
>
<el-select
v-model="form.department"
placeholder="请选择"
@@ -161,7 +273,10 @@
/>
</el-select>
</el-form-item>
<el-form-item label="上午时段" prop="morningStart">
<el-form-item
label="上午时段"
prop="morningStart"
>
<el-col :span="11">
<el-time-picker
v-model="form.morningStart"
@@ -171,7 +286,12 @@
style="width: 100%"
/>
</el-col>
<el-col :span="2" style="text-align: center">-</el-col>
<el-col
:span="2"
style="text-align: center"
>
-
</el-col>
<el-col :span="11">
<el-time-picker
v-model="form.morningEnd"
@@ -182,7 +302,10 @@
/>
</el-col>
</el-form-item>
<el-form-item label="下午时段" prop="afternoonStart">
<el-form-item
label="下午时段"
prop="afternoonStart"
>
<el-col :span="11">
<el-time-picker
v-model="form.afternoonStart"
@@ -192,7 +315,12 @@
style="width: 100%"
/>
</el-col>
<el-col :span="2" style="text-align: center">-</el-col>
<el-col
:span="2"
style="text-align: center"
>
-
</el-col>
<el-col :span="11">
<el-time-picker
v-model="form.afternoonEnd"
@@ -203,7 +331,10 @@
/>
</el-col>
</el-form-item>
<el-form-item label="限号数量" prop="quota">
<el-form-item
label="限号数量"
prop="quota"
>
<el-input-number
v-model="form.quota"
:min="0"
@@ -214,8 +345,16 @@
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button v-if="dialogType !== 'view'" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
<el-button
v-if="dialogType !== 'view'"
type="primary"
@click="submitForm"
>
</el-button>
<el-button @click="cancel">
</el-button>
</div>
</template>
</el-dialog>

View File

@@ -1,24 +1,44 @@
<template>
<div class="ticket-management-container">
<!-- 顶部搜索区域 -->
<div id="topSearchArea" class="top-search-area">
<div
id="topSearchArea"
class="top-search-area"
>
<!-- 搜索标签行 -->
<div class="search-labels">
<div class="search-label">号源日期</div>
<div class="search-label">状态</div>
<div class="search-label">患者姓名</div>
<div class="search-label">就诊卡号</div>
<div class="search-label">手机号</div>
<div class="search-label"></div> <!-- 为查询按钮预留空间 -->
<div class="search-label">
号源日期
</div>
<div class="search-label">
状态
</div>
<div class="search-label">
患者姓名
</div>
<div class="search-label">
就诊卡号
</div>
<div class="search-label">
手机号
</div>
<div class="search-label" /> <!-- 为查询按钮预留空间 -->
</div>
<!-- 搜索输入行 -->
<div class="search-inputs">
<!-- 移动端汉堡菜单按钮 -->
<div class="hamburger-menu" @click="toggleSidebar" v-if="isMobile">
<i class="el-icon-menu"></i>
<div
v-if="isMobile"
class="hamburger-menu"
@click="toggleSidebar"
>
<i class="el-icon-menu" />
</div>
<div id="datePicker" class="date-picker">
<div
id="datePicker"
class="date-picker"
>
<el-date-picker
v-model="selectedDate"
type="date"
@@ -30,29 +50,83 @@
@change="onDateChange"
/>
</div>
<div id="statusFilter" class="status-filter">
<select id="status-select" class="search-select" v-model="selectedStatus" @change="onSearch">
<option value="all">全部</option>
<option value="unbooked">未预约</option>
<option value="locked">已锁定</option>
<option value="booked">已预约</option>
<option value="checked">已取号</option>
<option value="cancelled">已停诊</option>
<option value="returned">已退号</option>
<div
id="statusFilter"
class="status-filter"
>
<select
id="status-select"
v-model="selectedStatus"
class="search-select"
@change="onSearch"
>
<option value="all">
全部
</option>
<option value="unbooked">
未预约
</option>
<option value="locked">
已锁定
</option>
<option value="booked">
已预约
</option>
<option value="checked">
已取号
</option>
<option value="cancelled">
已停诊
</option>
<option value="returned">
已退号
</option>
</select>
</div>
<div id="patientSearch" class="patient-search">
<input id="patient-name-input" class="search-input" placeholder="姓名" v-model="patientName">
<div
id="patientSearch"
class="patient-search"
>
<input
id="patient-name-input"
v-model="patientName"
class="search-input"
placeholder="姓名"
>
</div>
<div id="cardSearch" class="card-search">
<input id="patient-card-input" class="search-input" placeholder="就诊卡号" v-model="patientCard">
<div
id="cardSearch"
class="card-search"
>
<input
id="patient-card-input"
v-model="patientCard"
class="search-input"
placeholder="就诊卡号"
>
</div>
<div id="phoneSearch" class="phone-search">
<input id="patient-phone-input" class="search-input" placeholder="手机号" v-model="patientPhone">
<div
id="phoneSearch"
class="phone-search"
>
<input
id="patient-phone-input"
v-model="patientPhone"
class="search-input"
placeholder="手机号"
>
</div>
<div class="search-button">
<button id="search-button" class="search-btn" @click="onSearch" :disabled="isLoading">
<span v-if="isLoading" class="loading-text">搜索中...</span>
<button
id="search-button"
class="search-btn"
:disabled="isLoading"
@click="onSearch"
>
<span
v-if="isLoading"
class="loading-text"
>搜索中...</span>
<span v-else>查询</span>
</button>
</div>
@@ -60,15 +134,35 @@
</div>
<!-- 主要内容区域 -->
<div id="mainContent" class="main-content">
<div
id="mainContent"
class="main-content"
>
<!-- 左侧筛选区域 -->
<div id="leftSidebar" class="left-sidebar" :class="{ 'sidebar-hidden': isMobile && !showSidebar, 'sidebar-mobile': isMobile }">
<div
id="leftSidebar"
class="left-sidebar"
:class="{ 'sidebar-hidden': isMobile && !showSidebar, 'sidebar-mobile': isMobile }"
>
<!-- 科室列表 -->
<div class="section">
<h3 class="section-title">科室列表</h3>
<select id="department-list" class="search-select" v-model="selectedDepartment" @change="onDepartmentChange">
<option value="all">全部科室</option>
<option v-for="department in departments" :key="department.value" :value="department.value">
<h3 class="section-title">
科室列表
</h3>
<select
id="department-list"
v-model="selectedDepartment"
class="search-select"
@change="onDepartmentChange"
>
<option value="all">
全部科室
</option>
<option
v-for="department in departments"
:key="department.value"
:value="department.value"
>
{{ department.label }}
</option>
</select>
@@ -76,14 +170,28 @@
<!-- 号源类型 -->
<div class="section">
<h3 class="section-title">号源类型</h3>
<h3 class="section-title">
号源类型
</h3>
<div class="radio-group">
<label>
<input type="radio" name="type" value="general" v-model="selectedType" @change="onTypeChange">
<input
v-model="selectedType"
type="radio"
name="type"
value="general"
@change="onTypeChange"
>
<span>普通号</span>
</label>
<label>
<input type="radio" name="type" value="expert" v-model="selectedType" @change="onTypeChange">
<input
v-model="selectedType"
type="radio"
name="type"
value="expert"
@change="onTypeChange"
>
<span>专家号</span>
</label>
</div>
@@ -91,53 +199,111 @@
<!-- 医生号源列表 -->
<div class="section">
<h3 class="section-title">医生号源列表</h3>
<input id="doctor-search" class="search-input" placeholder="搜索医生姓名" v-model="searchQuery" @input="onDoctorSearch">
<h3 class="section-title">
医生号源列表
</h3>
<input
id="doctor-search"
v-model="searchQuery"
class="search-input"
placeholder="搜索医生姓名"
@input="onDoctorSearch"
>
<div class="doctor-list">
<div class="doctor-item" v-for="doctor in filteredDoctors" :key="doctor.id" :class="{ selected: selectedDoctorId === doctor.id }" @click="selectDoctor(doctor.id)">
<div class="doctor-name">{{ doctor.name }} <span class="doctor-available">余号:{{ doctor.available }}</span></div>
<div
v-for="doctor in filteredDoctors"
:key="doctor.id"
class="doctor-item"
:class="{ selected: selectedDoctorId === doctor.id }"
@click="selectDoctor(doctor.id)"
>
<div class="doctor-name">
{{ doctor.name }} <span class="doctor-available">余号:{{ doctor.available }}</span>
</div>
</div>
</div>
</div>
</div>
<!-- 右侧号源卡片区域 -->
<div class="right-content" :class="{ 'right-content-full': isMobile && !showSidebar }">
<div
class="right-content"
:class="{ 'right-content-full': isMobile && !showSidebar }"
>
<!-- 使用网格布局的号源卡片列表 -->
<div class="ticket-grid" v-if="filteredTickets.length > 0">
<div v-for="(item, index) in filteredTickets" :key="item.slot_id" class="ticket-card" @dblclick="handleDoubleClick(item)" @contextmenu.prevent="handleRightClick($event, item)">
<div
v-if="filteredTickets.length > 0"
class="ticket-grid"
>
<div
v-for="(item, index) in filteredTickets"
:key="item.slot_id"
class="ticket-card"
@dblclick="handleDoubleClick(item)"
@contextmenu.prevent="handleRightClick($event, item)"
>
<!-- 序号放在最右侧 -->
<div class="ticket-index">{{ item.seqNo != null ? item.seqNo : index + 1 }}</div>
<div class="ticket-index">
{{ item.seqNo != null ? item.seqNo : index + 1 }}
</div>
<!-- 1.时间 -->
<div class="ticket-id-time">{{ item.dateTime }}</div>
<div class="ticket-id-time">
{{ item.dateTime }}
</div>
<!-- 2. 状态标签 -->
<div class="ticket-status" :class="getStatusClass(item.status)">
<span class="status-dot"></span>
<div
class="ticket-status"
:class="getStatusClass(item.status)"
>
<span class="status-dot" />
{{ item.status }}
</div>
<!-- 3. 医生姓名(截断显示,悬停展示完整信息) -->
<div class="ticket-doctor" :title="item.doctor">{{ item.doctor }}</div>
<div
class="ticket-doctor"
:title="item.doctor"
>
{{ item.doctor }}
</div>
<!-- 4. 科室名称 -->
<div class="ticket-department" :title="item.department || '未知科室'">
<div
class="ticket-department"
:title="item.department || '未知科室'"
>
科室:{{ item.department || '未知科室' }}
</div>
<!-- 5. 挂号费 -->
<div class="ticket-fee">挂号费:{{ item.fee }}</div>
<div class="ticket-fee">
挂号费:{{ item.fee }}
</div>
<!-- 6. 号源类型 -->
<div class="ticket-type">{{ item.ticketType === 'general' ? '普通' : '专家' }}</div>
<div class="ticket-type">
{{ item.ticketType === 'general' ? '普通' : '专家' }}
</div>
<!-- 7. 已预约患者信息 -->
<div v-if="(item.status === '已预约' || item.status === '已取号') && item.patientName" class="ticket-patient">
<div
v-if="(item.status === '已预约' || item.status === '已取号') && item.patientName"
class="ticket-patient"
>
{{ item.patientName }}({{ item.patientId }},{{ getGenderText(item.gender || item.patientGender) }})
</div>
<div class="ticket-actions">
<button class="action-button book-button" @click="openPatientSelectModal(item.slot_id)" :disabled="item.status !== '未预约'" :class="{ 'disabled': item.status !== '未预约' }">
<i class="el-icon-tickets"></i>
<button
class="action-button book-button"
:disabled="item.status !== '未预约'"
:class="{ 'disabled': item.status !== '未预约' }"
@click="openPatientSelectModal(item.slot_id)"
>
<i class="el-icon-tickets" />
预约
</button>
</div>
</div>
</div>
<div class="pagination-container" v-if="totalTickets > 0">
<div
v-if="totalTickets > 0"
class="pagination-container"
>
<el-pagination
background
layout="total, sizes, prev, pager, next, jumper"
@@ -149,33 +315,63 @@
@size-change="handlePageSizeChange"
/>
</div>
<div v-if="filteredTickets.length === 0" class="empty-state">
<div class="empty-text">暂无号源数据</div>
<div
v-if="filteredTickets.length === 0"
class="empty-state"
>
<div class="empty-text">
暂无号源数据
</div>
</div>
</div>
</div>
<!-- 患者选择弹窗 -->
<div id="patient-select-modal" class="modal" v-if="showPatientModal">
<div
v-if="showPatientModal"
id="patient-select-modal"
class="modal"
>
<div class="modal-content">
<div class="modal-header">
<h3>选择患者</h3>
<button class="close-btn" @click="closePatientSelectModal">&times;</button>
<button
class="close-btn"
@click="closePatientSelectModal"
>
&times;
</button>
</div>
<div class="modal-body">
<div class="patient-search-toolbar">
<input
id="patient-keyword"
v-model.trim="patientKeyword"
class="search-input patient-keyword-input"
placeholder="姓名/就诊卡号/手机号/证件号回车查询"
v-model.trim="patientKeyword"
@keyup.enter="searchPatients"
>
<button id="patient-search-btn" class="search-btn" @click="searchPatients">查询</button>
<button id="patient-reset-btn" class="reset-btn" @click="resetPatientSearch">重置</button>
<button
id="patient-search-btn"
class="search-btn"
@click="searchPatients"
>
查询
</button>
<button
id="patient-reset-btn"
class="reset-btn"
@click="resetPatientSearch"
>
重置
</button>
</div>
<div class="patient-table-container">
<table id="patient-table" class="patient-table" v-if="patients.length > 0">
<table
v-if="patients.length > 0"
id="patient-table"
class="patient-table"
>
<thead>
<tr>
<th>序号</th>
@@ -201,21 +397,40 @@
<td>{{ patient.idCard }}</td>
<td>{{ patient.phone }}</td>
<td>
<button class="select-btn" @click.stop="selectPatient(patient._rowKey)" :disabled="!patient._rowKey">选择</button>
<button
class="select-btn"
:disabled="!patient._rowKey"
@click.stop="selectPatient(patient._rowKey)"
>
选择
</button>
</td>
</tr>
</tbody>
</table>
<!-- 无搜索结果提示 -->
<div v-else-if="hasSearchCriteria && !isLoading" class="no-results">
<div
v-else-if="hasSearchCriteria && !isLoading"
class="no-results"
>
未找到符合条件的患者,请检查搜索条件
</div>
</div>
</div>
<div class="modal-footer">
<button class="confirm-btn" @click="confirmPatientSelection">确认</button>
<button class="cancel-btn" @click="closePatientSelectModal">取消</button>
<button
class="confirm-btn"
@click="confirmPatientSelection"
>
确认
</button>
<button
class="cancel-btn"
@click="closePatientSelectModal"
>
取消
</button>
</div>
</div>
</div>
@@ -230,9 +445,13 @@
@click.stop
@contextmenu.prevent
>
<div v-if="selectedTicketForCancel && selectedTicketForCancel.status === '已预约'" class="menu-item" @click="confirmCancelAppointment">
取消预约
</div>
<div
v-if="selectedTicketForCancel && selectedTicketForCancel.status === '已预约'"
class="menu-item"
@click="confirmCancelAppointment"
>
取消预约
</div>
</div>
<!-- 点击页面其他地方关闭右键菜单 -->
@@ -241,7 +460,7 @@
class="context-menu-overlay"
@click="closeContextMenu"
@contextmenu.prevent
></div>
/>
</div>
</template>
@@ -341,6 +560,22 @@ export default {
return !!this.patientKeyword?.trim();
}
},
mounted() {
document.addEventListener('click', this.closeContextMenu);
// 初始化数据
this.selectedDate = new Date().toISOString().split('T')[0];
// 调用onSearch获取初始数据
this.onSearch();
// 检测是否为移动设备
this.checkMobileDevice();
// 监听窗口大小变化
window.addEventListener('resize', this.checkMobileDevice);
},
beforeUnmount() {
document.removeEventListener('click', this.closeContextMenu);
// 移除窗口大小变化监听
window.removeEventListener('resize', this.checkMobileDevice);
},
methods: {
selectDoctor(doctorId) {
this.selectedDoctorId = this.selectedDoctorId === doctorId ? null : doctorId;
@@ -903,22 +1138,6 @@ export default {
this.departments = [{ value: 'all', label: '全部科室' }];
}
}
},
mounted() {
document.addEventListener('click', this.closeContextMenu);
// 初始化数据
this.selectedDate = new Date().toISOString().split('T')[0];
// 调用onSearch获取初始数据
this.onSearch();
// 检测是否为移动设备
this.checkMobileDevice();
// 监听窗口大小变化
window.addEventListener('resize', this.checkMobileDevice);
},
beforeUnmount() {
document.removeEventListener('click', this.closeContextMenu);
// 移除窗口大小变化监听
window.removeEventListener('resize', this.checkMobileDevice);
}
}
</script>

View File

@@ -8,19 +8,35 @@
<!-- 操作按钮区域 -->
<div class="button-group">
<button @click="addNewRow" class="pan-btn blue-btn">
<i class="icon-plus"></i> 添加新行
</button>
<button @click="saveData" class="pan-btn green-btn" :disabled="saveButtonText === '保存中...'">
{{ saveButtonText }}
</button>
<button
class="pan-btn blue-btn"
@click="addNewRow"
>
<i class="icon-plus" /> 添加新行
</button>
<button
class="pan-btn green-btn"
:disabled="saveButtonText === '保存中...'"
@click="saveData"
>
{{ saveButtonText }}
</button>
</div>
<!-- 错误提示区域 -->
<div v-if="validationErrors.length > 0" class="alert alert-danger error-messages">
<h4 class="error-title">验证失败</h4>
<div
v-if="validationErrors.length > 0"
class="alert alert-danger error-messages"
>
<h4 class="error-title">
验证失败
</h4>
<ul class="error-list">
<li v-for="(error, index) in validationErrors" :key="index" class="error-item">
<li
v-for="(error, index) in validationErrors"
:key="index"
class="error-item"
>
{{ error }}
</li>
</ul>
@@ -49,7 +65,9 @@
:key="item.keyId"
:class="{'editing-row': item.isActive }"
>
<td class="sequence-number">{{ index + 1 }}</td>
<td class="sequence-number">
{{ index + 1 }}
</td>
<td class="employee-info">
<div class="input-container">
<!-- 超级管理员可以编辑操作员字段普通用户不可编辑 -->
@@ -59,7 +77,9 @@
class="form-control"
@change="updateOperatorFromEmployeeId(item)"
>
<option value="">请选择操作员</option>
<option value="">
请选择操作员
</option>
<option
v-for="user in userList"
:key="user.employeeId"
@@ -68,7 +88,10 @@
{{ user.name }} ({{ user.employeeAccount }})
</option>
</select>
<span v-else class="employee-name">{{ item.operator || '-' }}</span>
<span
v-else
class="employee-name"
>{{ item.operator || '-' }}</span>
</div>
</td>
<td class="employee-account-cell">
@@ -85,7 +108,7 @@
type="date"
class="form-control"
placeholder="领用日期"
/>
>
<span v-else>{{ item.date || '-' }}</span>
</div>
</td>
@@ -97,8 +120,11 @@
class="form-control"
placeholder="请输入起始号码"
maxlength="12"
/>
<span v-else class="invoice-number">{{ item.startNum || '-' }}</span>
>
<span
v-else
class="invoice-number"
>{{ item.startNum || '-' }}</span>
</div>
</td>
<td>
@@ -109,8 +135,11 @@
class="form-control"
placeholder="请输入终止号码"
maxlength="12"
/>
<span v-else class="invoice-number">{{ item.endNum || '-' }}</span>
>
<span
v-else
class="invoice-number"
>{{ item.endNum || '-' }}</span>
</div>
</td>
<td>
@@ -121,38 +150,44 @@
class="form-control"
placeholder="当前使用号码"
maxlength="12"
/>
<span v-else class="invoice-number current">{{ item.currentNum || '-' }}</span>
>
<span
v-else
class="invoice-number current"
>{{ item.currentNum || '-' }}</span>
</div>
</td>
<td class="action-buttons">
<button
v-if="!item.isActive"
@click="toggleEdit(item.keyId)"
class="pan-btn-link blue-btn-link"
class="pan-btn-link blue-btn-link"
title="编辑"
@click="toggleEdit(item.keyId)"
>
<i class="icon-edit"></i> 编辑
<i class="icon-edit" /> 编辑
</button>
<button
v-if="item.isActive"
@click="toggleEdit(item.keyId)"
class="pan-btn-link info-btn-link"
class="pan-btn-link info-btn-link"
title="取消"
@click="toggleEdit(item.keyId)"
>
<i class="icon-cancel"></i> 取消
<i class="icon-cancel" /> 取消
</button>
<button
@click="deleteRow(item)"
class="pan-btn-link red-btn-link"
class="pan-btn-link red-btn-link"
title="删除"
@click="deleteRow(item)"
>
<i class="icon-delete"></i> 删除
<i class="icon-delete" /> 删除
</button>
</td>
</tr>
<tr v-if="filteredData.length === 0">
<td colspan="8" class="no-data-row">
<td
colspan="8"
class="no-data-row"
>
暂无数据请添加新记录
</td>
</tr>
@@ -213,6 +248,16 @@ export default {
return userStore.name === 'admin';
}
},
watch: {
// 监听invoiceData变化自动更新过滤后的数据
invoiceData: {
handler() {
this.filterDataByPermission();
},
deep: true
}
},
created() {
console.log('组件初始化,开始加载数据');
@@ -240,14 +285,9 @@ export default {
this.filterDataByPermission();
},
watch: {
// 监听invoiceData变化自动更新过滤后的数据
invoiceData: {
handler() {
this.filterDataByPermission();
},
deep: true
}
mounted() {
// 页面加载后初始化数据
this.filterDataByPermission();
},
methods: {
// 获取用户列表
@@ -1311,11 +1351,6 @@ export default {
},
},
mounted() {
// 页面加载后初始化数据
this.filterDataByPermission();
}
};
</script>

View File

@@ -1,8 +1,18 @@
<template>
<div class="app-container">
<el-row :gutter="10" class="mb8">
<el-row
:gutter="10"
class="mb8"
>
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd"> 新增 </el-button>
<el-button
type="primary"
plain
icon="Plus"
@click="handleAdd"
>
新增
</el-button>
</el-col>
<el-col :span="1.5">
<el-tooltip
@@ -16,17 +26,35 @@
icon="Delete"
:disabled="selectRowIds.length == 0"
@click="handleDelete"
>删除</el-button
>
删除
</el-button>
</el-tooltip>
</el-col>
<el-col :span="1.5">
<el-button type="" plain icon="Download" @click="handleExport"> 导出 </el-button>
<el-button
type=""
plain
icon="Download"
@click="handleExport"
>
导出
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="" plain icon="Refresh" @click="getPageList">刷新</el-button>
<el-button
type=""
plain
icon="Refresh"
@click="getPageList"
>
刷新
</el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
<right-toolbar
v-model:show-search="showSearch"
@query-table="getList"
/>
</el-row>
<el-table
ref="bodyStructureTableRef"
@@ -35,23 +63,63 @@
row-key="id"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" />
<el-table-column label="部位名称" align="left" prop="name" />
<el-table-column label="拼音" align="left" prop="pyStr" />
<el-table-column label="五笔拼音" align="left" prop="wbStr" />
<el-table-column label="状态" align="center" prop="statusEnum_enumText" />
<el-table-column label="操作" align="center">
<el-table-column
type="selection"
width="55"
/>
<el-table-column
label="部位名称"
align="left"
prop="name"
/>
<el-table-column
label="拼音"
align="left"
prop="pyStr"
/>
<el-table-column
label="五笔拼音"
align="left"
prop="wbStr"
/>
<el-table-column
label="状态"
align="center"
prop="statusEnum_enumText"
/>
<el-table-column
label="操作"
align="center"
>
<template #default="scope">
<el-button link type="primary" @click="handelEdit(scope.row)">编辑</el-button>
<el-button
link
type="primary"
@click="handleDisabled(scope.row.id)"
v-if="scope.row.statusEnum == '2'"
>停用</el-button
@click="handelEdit(scope.row)"
>
编辑
</el-button>
<el-button
v-if="scope.row.statusEnum == '2'"
link
type="primary"
@click="handleDisabled(scope.row.id)"
>
停用
</el-button>
<el-button
v-else
link
type="primary"
@click="handelEnable(scope.row.id)"
>
启用
</el-button>
<el-button
link
type="primary"
@click="handleAddInferior(scope.row)"
>
<el-button link type="primary" @click="handelEnable(scope.row.id)" v-else>启用</el-button>
<el-button link type="primary" @click="handleAddInferior(scope.row)">
添加下级
</el-button>
</template>
@@ -60,24 +128,58 @@
<!-- 添加或修改参数配置对话框 -->
<el-dialog :title="title" v-model="open" width="600px" @close="cancel" append-to-body>
<el-form ref="bodyStructureRef" :model="form" :rules="rules" label-width="80px">
<el-form-item label="id" prop="id" v-show="false">
<el-input v-model="form.id" placeholder="请输入部位编号" />
<el-dialog
v-model="open"
:title="title"
width="600px"
append-to-body
@close="cancel"
>
<el-form
ref="bodyStructureRef"
:model="form"
:rules="rules"
label-width="80px"
>
<el-form-item
v-show="false"
label="id"
prop="id"
>
<el-input
v-model="form.id"
placeholder="请输入部位编号"
/>
</el-form-item>
<el-form-item label="部位编号" prop="busNo" v-show="false">
<el-input v-model="form.busNo" placeholder="请输入部位编号" />
<el-form-item
v-show="false"
label="部位编号"
prop="busNo"
>
<el-input
v-model="form.busNo"
placeholder="请输入部位编号"
/>
</el-form-item>
<el-form-item label="部位名称" prop="name">
<el-input v-model="form.name" placeholder="请输入部位名称" />
<el-form-item
label="部位名称"
prop="name"
>
<el-input
v-model="form.name"
placeholder="请输入部位名称"
/>
</el-form-item>
<el-col>
<el-form-item label="上级部位" prop="busNoParent">
<el-form-item
label="上级部位"
prop="busNoParent"
>
<el-tree-select
v-model="form.busNoParent"
clearable
style="width: 100%"
v-model="form.busNoParent"
:data="bodyStructure"
:props="{ value: 'busNo', label: 'name', children: 'children' }"
value-key="id"
@@ -88,8 +190,15 @@
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
<el-button
type="primary"
@click="submitForm"
>
</el-button>
<el-button @click="cancel">
</el-button>
</div>
</template>
</el-dialog>

View File

@@ -1,15 +1,23 @@
<template>
<template>
<!-- 病历文件基本信息弹窗 -->
<el-dialog
:title="title"
v-model="dialogVisible"
:title="title"
width="900px"
destroy-on-close
@open="handleOpen"
>
<!-- 使用el-form包裹表单 -->
<el-form :model="formData" ref="formRef" :rules="rules" label-width="120px">
<el-form-item label="一级菜单" prop="primaryMenuEnum">
<el-form
ref="formRef"
:model="formData"
:rules="rules"
label-width="120px"
>
<el-form-item
label="一级菜单"
prop="primaryMenuEnum"
>
<el-select
v-model="formData.primaryMenuEnum"
placeholder="请选择一级菜单"
@@ -23,18 +31,42 @@
/>
</el-select>
</el-form-item>
<el-form-item label="二级菜单" prop="subMenu">
<el-input v-model="formData.subMenu" placeholder="二级菜单"></el-input>
<el-form-item
label="二级菜单"
prop="subMenu"
>
<el-input
v-model="formData.subMenu"
placeholder="二级菜单"
/>
</el-form-item>
<el-form-item label="版本" prop="version">
<el-input v-model="formData.version" placeholder="请输入版本"></el-input>
<el-form-item
label="版本"
prop="version"
>
<el-input
v-model="formData.version"
placeholder="请输入版本"
/>
</el-form-item>
<el-form-item label="名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入名称"></el-input>
<el-form-item
label="名称"
prop="name"
>
<el-input
v-model="formData.name"
placeholder="请输入名称"
/>
</el-form-item>
<el-form-item label="文件" prop="vueRouter">
<el-select v-model="formData.vueRouter" placeholder="请选择文件路径">
<el-form-item
label="文件"
prop="vueRouter"
>
<el-select
v-model="formData.vueRouter"
placeholder="请选择文件路径"
>
<el-option
v-for="item in components"
:key="item.name"
@@ -44,24 +76,40 @@
</el-select>
<!-- <el-input v-model="formData.vueRouter" placeholder="请输入文件路径"></el-input>s -->
</el-form-item>
<el-form-item label="显示顺序" prop="displayOrder">
<el-input-number v-model="formData.displayOrder" :min="1" label="描述文字"></el-input-number>
<el-form-item
label="显示顺序"
prop="displayOrder"
>
<el-input-number
v-model="formData.displayOrder"
:min="1"
label="描述文字"
/>
</el-form-item>
<el-form-item label="使用范围" prop="useRangeEnum">
<el-form-item
label="使用范围"
prop="useRangeEnum"
>
<div class="radio-group">
<el-radio
v-for="item in props.useRanges"
:key="item.value"
v-model="formData.useRangeEnum"
:label="item.value"
>{{item.info}}</el-radio>
>
{{ item.info }}
</el-radio>
{{ formData.organizationIds }}
</div>
</el-form-item>
<!-- 科室选择框仅当使用范围为科室使用时显示 -->
<el-form-item v-if="formData.useRangeEnum === 2" label="科室选择" prop="organizationIds">
<el-form-item
v-if="formData.useRangeEnum === 2"
label="科室选择"
prop="organizationIds"
>
<el-transfer
v-model="formData.organizationIds"
filterable
@@ -73,15 +121,21 @@
}"
:props="{key: 'id', label: 'name',}"
:data="transferData"
>
</el-transfer>
/>
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer"></div>
<el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="submitForm">确定</el-button>
<div class="dialog-footer" />
<el-button @click="dialogVisible = false">
取消
</el-button>
<el-button
type="primary"
@click="submitForm"
>
确定
</el-button>
</template>
</el-dialog>
</template>

View File

@@ -2,11 +2,30 @@
<div class="case-templates-container">
<!-- 顶部工具栏 -->
<div class="toolbar">
<el-button type="primary" @click="newTemplate">新建</el-button>
<el-button type="primary" @click="editTemplate">编辑</el-button>
<el-button @click="refresh">刷新</el-button>
<el-button type="danger" @click="deleteTemplate">删除</el-button>
<el-button @click="printTemplate">打印</el-button>
<el-button
type="primary"
@click="newTemplate"
>
新建
</el-button>
<el-button
type="primary"
@click="editTemplate"
>
编辑
</el-button>
<el-button @click="refresh">
刷新
</el-button>
<el-button
type="danger"
@click="deleteTemplate"
>
删除
</el-button>
<el-button @click="printTemplate">
打印
</el-button>
</div>
<div class="content-area">
@@ -14,6 +33,7 @@
<div class="left-panel">
<div style="margin-bottom: 10px">
<el-tree-select
ref="locationTreeRef"
v-model="orgId"
:data="orgOptions"
:props="{
@@ -26,21 +46,25 @@
check-strictly
:expand-on-click-node="false"
:filter-node-method="filterNode"
ref="locationTreeRef"
node-key="id"
highlight-current
default-expand-all
clearable
@node-click="initTemplateTree"
@clear="handleOrgClear"
clearable
/>
</div>
<div class="search-box">
<el-input
placeholder="病历名称搜索..."
v-model="searchKeyword"
></el-input>
<el-button class="search-btn" @click="handleSearch">查询</el-button>
placeholder="病历名称搜索..."
/>
<el-button
class="search-btn"
@click="handleSearch"
>
查询
</el-button>
</div>
<el-tree
@@ -48,14 +72,24 @@
:data="templateData"
:props="defaultProps"
node-key="id"
@node-click="handleNodeClick"
class="template-tree"
></el-tree>
<el-button @click="toggleExpand">{{ isExpanded ? '全部收起' : '全部展开' }}</el-button>
@node-click="handleNodeClick"
/>
<el-button @click="toggleExpand">
{{ isExpanded ? '全部收起' : '全部展开' }}
</el-button>
</div>
<div class="middle-panel">
<el-tabs v-model="activeName" type="card" class="demo-tabs" @tab-click="handleClick">
<el-tab-pane label="打印预览" name="first">
<el-tabs
v-model="activeName"
type="card"
class="demo-tabs"
@tab-click="handleClick"
>
<el-tab-pane
label="打印预览"
name="first"
>
<!-- {{components}} -->
<component :is="currentComponent" />
</el-tab-pane>
@@ -66,13 +100,13 @@
</div>
</div>
<EditTemplate
v-model:dialogVisible="dialogVisible"
v-model:dialog-visible="dialogVisible"
:title="currentNodeData ? '编辑病历文件信息' : '病历文件基本信息'"
:formData="formData"
:currentNodeData="currentNodeData"
@submitOk="handleSubmitOk"
:docTypes="templateDataInit.docTypes"
:useRanges="templateDataInit.useRanges"
:form-data="formData"
:current-node-data="currentNodeData"
:doc-types="templateDataInit.docTypes"
:use-ranges="templateDataInit.useRanges"
@submit-ok="handleSubmitOk"
/>
</div>
</template>

View File

@@ -1,41 +1,86 @@
<template>
<!-- 病历文件基本信息弹窗 -->
<el-dialog
:title="formData.id ? '编辑模板' : '新增模板'"
v-model="dialogVisible"
:title="formData.id ? '编辑模板' : '新增模板'"
width="900px"
destroy-on-close
@open="handleOpen"
>
<!-- 使用el-form包裹表单 -->
<el-form :model="formData" ref="formRef" :rules="rules" label-width="120px">
<el-row :gutter="24" class="mb8">
<el-form
ref="formRef"
:model="formData"
:rules="rules"
label-width="120px"
>
<el-row
:gutter="24"
class="mb8"
>
<el-col :span="24">
<el-form-item label="模板名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入模板名称"></el-input>
<el-form-item
label="模板名称"
prop="name"
>
<el-input
v-model="formData.name"
placeholder="请输入模板名称"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="使用范围" prop="useRange">
<el-form-item
label="使用范围"
prop="useRange"
>
<el-radio-group v-model="formData.useRange">
<el-radio :value="0" size="large">全院</el-radio>
<el-radio :value="1" size="large">指定机构</el-radio>
<el-radio :value="2" size="large">指定用户</el-radio>
<el-radio
:value="0"
size="large"
>
全院
</el-radio>
<el-radio
:value="1"
size="large"
>
指定机构
</el-radio>
<el-radio
:value="2"
size="large"
>
指定用户
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" placeholder="请输入版本"></el-input>
<el-form-item
label="备注"
prop="remark"
>
<el-input
v-model="formData.remark"
placeholder="请输入版本"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<div class="dialog-footer"></div>
<el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="submitForm">确定</el-button>
<div class="dialog-footer" />
<el-button @click="dialogVisible = false">
取消
</el-button>
<el-button
type="primary"
@click="submitForm"
>
确定
</el-button>
</template>
</el-dialog>
</template>

View File

@@ -1,7 +1,15 @@
<template>
<div class="app-container case-templates-statistics-container">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch">
<el-form-item label="名称" prop="searchKey">
<el-form
v-show="showSearch"
ref="queryRef"
:model="queryParams"
:inline="true"
>
<el-form-item
label="名称"
prop="searchKey"
>
<el-input
v-model="queryParams.searchKey"
placeholder="请输入名称搜索"
@@ -11,41 +19,104 @@
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
<el-button
type="primary"
icon="Search"
@click="handleQuery"
>
搜索
</el-button>
<el-button
icon="Refresh"
@click="resetQuery"
>
重置
</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-row
:gutter="10"
class="mb8"
>
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd">新增</el-button>
<el-button
type="primary"
plain
icon="Plus"
@click="handleAdd"
>
新增
</el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
<right-toolbar
v-model:show-search="showSearch"
@query-table="getList"
/>
</el-row>
<el-table v-loading="loading" :data="statisticsList">
<el-table-column label="属性名称" align="center" prop="name" />
<el-table-column label="属性代码" align="center" prop="code" />
<el-table-column label="属性类型" align="center" prop="typeEnum">
<el-table
v-loading="loading"
:data="statisticsList"
>
<el-table-column
label="属性名称"
align="center"
prop="name"
/>
<el-table-column
label="属性代码"
align="center"
prop="code"
/>
<el-table-column
label="属性类型"
align="center"
prop="typeEnum"
>
<template #default="scope">
{{ typeEnums(scope.row.typeEnum) }}
</template>
</el-table-column>
<el-table-column label="统计值单位" align="center" prop="unit" />
<el-table-column label="是否必填" align="center" prop="required">
<el-table-column
label="统计值单位"
align="center"
prop="unit"
/>
<el-table-column
label="是否必填"
align="center"
prop="required"
>
<template #default="scope">
{{ scope.row.required === 1 ? '必填' : '不必填' }}
</template>
</el-table-column>
<el-table-column label="是否统计" align="center" prop="isStatistics">
<el-table-column
label="是否统计"
align="center"
prop="isStatistics"
>
<template #default="scope">
{{ scope.row.isStatistics === 1 ? '统计' : '不统计' }}
</template>
</el-table-column>
<el-table-column label="字典名称" align="center" prop="dictName"> </el-table-column>
<el-table-column label="字典类型" align="center" prop="dictType"> </el-table-column>
<el-table-column label="备注" align="center" prop="remark"> </el-table-column>
<el-table-column
label="字典名称"
align="center"
prop="dictName"
/>
<el-table-column
label="字典类型"
align="center"
prop="dictType"
/>
<el-table-column
label="备注"
align="center"
prop="remark"
/>
<el-table-column
label="操作"
width="180"
@@ -53,47 +124,104 @@
class-name="small-padding fixed-width"
>
<template #default="scope">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
>修改</el-button
<el-button
link
type="primary"
icon="Edit"
@click="handleUpdate(scope.row)"
>
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
>删除</el-button
修改
</el-button>
<el-button
link
type="primary"
icon="Delete"
@click="handleDelete(scope.row)"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
:total="total"
@pagination="getList"
/>
<!-- 添加或修改岗位对话框 -->
<el-dialog :title="title" v-model="open" width="500px" append-to-body>
<el-form ref="statisticsRef" :model="form" :rules="rules" label-width="80px">
<el-form-item label="属性名称" prop="name">
<el-input v-model="form.name" placeholder="请输入属性名称" />
<el-dialog
v-model="open"
:title="title"
width="500px"
append-to-body
>
<el-form
ref="statisticsRef"
:model="form"
:rules="rules"
label-width="80px"
>
<el-form-item
label="属性名称"
prop="name"
>
<el-input
v-model="form.name"
placeholder="请输入属性名称"
/>
</el-form-item>
<el-form-item label="属性代码" prop="code">
<el-input v-model="form.code" placeholder="请输入属性代码" />
<el-form-item
label="属性代码"
prop="code"
>
<el-input
v-model="form.code"
placeholder="请输入属性代码"
/>
</el-form-item>
<el-form-item label="体温单类型编码" prop="typeCode">
<el-input v-model="form.typeCode" placeholder="请输入体温单属性编码" />
<el-form-item
label="体温单类型编码"
prop="typeCode"
>
<el-input
v-model="form.typeCode"
placeholder="请输入体温单属性编码"
/>
</el-form-item>
<el-form-item label="岗位顺序" prop="displayOrder">
<el-input-number v-model="form.displayOrder" controls-position="right" :min="0" />
<el-form-item
label="岗位顺序"
prop="displayOrder"
>
<el-input-number
v-model="form.displayOrder"
controls-position="right"
:min="0"
/>
</el-form-item>
<el-form-item label="属性类型" prop="typeEnum">
<el-form-item
label="属性类型"
prop="typeEnum"
>
<el-radio-group v-model="form.typeEnum">
<el-radio v-for="dict in typeEnumsOptions" :key="dict.value" :label="dict.value">{{
dict.info
}}</el-radio>
<el-radio
v-for="dict in typeEnumsOptions"
:key="dict.value"
:label="dict.value"
>
{{
dict.info
}}
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="是否必填" prop="required">
<el-form-item
label="是否必填"
prop="required"
>
<el-switch
v-model="form.required"
:active-value="1"
@@ -103,7 +231,10 @@
inline-prompt
/>
</el-form-item>
<el-form-item label="是否统计" prop="isStatistics">
<el-form-item
label="是否统计"
prop="isStatistics"
>
<el-switch
v-model="form.isStatistics"
:active-value="1"
@@ -113,11 +244,24 @@
inline-prompt
/>
</el-form-item>
<el-form-item label="单位" prop="unit">
<el-input v-model="form.unit" placeholder="请输入统计值单位" />
<el-form-item
label="单位"
prop="unit"
>
<el-input
v-model="form.unit"
placeholder="请输入统计值单位"
/>
</el-form-item>
<el-form-item label="字典名称" prop="dictType">
<el-select v-model="form.dictType" style="width: 100%" filterable>
<el-form-item
label="字典名称"
prop="dictType"
>
<el-select
v-model="form.dictType"
style="width: 100%"
filterable
>
<el-option
v-for="item in typeOptions"
:key="item.dictId"
@@ -129,14 +273,28 @@
</el-option>
</el-select>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
<el-form-item
label="备注"
prop="remark"
>
<el-input
v-model="form.remark"
type="textarea"
placeholder="请输入内容"
/>
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
<el-button
type="primary"
@click="submitForm"
>
</el-button>
<el-button @click="cancel">
</el-button>
</div>
</template>
</el-dialog>

View File

@@ -1,38 +1,63 @@
<template>
<div class="case-templates-statistics-container">
<div class="toolbar">
<el-space>
<el-input v-model="queryParams.searchKey" placeholder="请输入名称搜索" clearable />
<el-button @click="refresh">查询</el-button>
<div class="toolbar">
<el-space>
<el-input
v-model="queryParams.searchKey"
placeholder="请输入名称搜索"
clearable
/>
<el-button @click="refresh">
查询
</el-button>
<el-button type="primary" @click="newTemplate">新建</el-button>
</el-space>
</div>
<div class="statistics-data-container">
<el-button
type="primary"
@click="newTemplate"
>
新建
</el-button>
</el-space>
</div>
<div class="statistics-data-container">
<el-table
:data="statisticsData"
node-key="id"
>
<el-table-column prop="name" label="名称" />
<el-table-column prop="count" label="数量" />
<el-table-column label="操作" >
<el-table-column
prop="name"
label="名称"
/>
<el-table-column
prop="count"
label="数量"
/>
<el-table-column label="操作">
<template #default="scope">
<el-button type="primary" @click="editStatistics(scope.row)">编辑</el-button>
<el-button type="danger" @click="deleteStatistics(scope.row)">删除</el-button>
<el-button
type="primary"
@click="editStatistics(scope.row)"
>
编辑
</el-button>
<el-button
type="danger"
@click="deleteStatistics(scope.row)"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
</div>
</div>
<EditStatistics
v-model:dialogVisible="dialogVisible"
:title="currentNodeData ? '编辑病历文件信息' : '病历文件基本信息'"
:formData="formData"
:currentNodeData="currentNodeData"
@submitOk="handleSubmitOk"
/>
</div>
</div>
<EditStatistics
v-model:dialog-visible="dialogVisible"
:title="currentNodeData ? '编辑病历文件信息' : '病历文件基本信息'"
:form-data="formData"
:current-node-data="currentNodeData"
@submit-ok="handleSubmitOk"
/>
</template>
<script setup>
// 从Vue导入所需的API

View File

@@ -1,14 +1,37 @@
<template>
<div>
<el-table ref="medicineRef" height="400" :data="activityList" @cell-click="clickRow" border>
<el-table-column label="项目名称" align="center" prop="name" width="300" />
<el-table-column label="类型" align="center" prop="typeEnum_enumText" />
<el-table-column label="价格" align="right" prop="retailPrice">
<el-table
ref="medicineRef"
height="400"
:data="activityList"
border
@cell-click="clickRow"
>
<el-table-column
label="项目名称"
align="center"
prop="name"
width="300"
/>
<el-table-column
label="类型"
align="center"
prop="typeEnum_enumText"
/>
<el-table-column
label="价格"
align="right"
prop="retailPrice"
>
<template #default="scope">
{{ scope.row.retailPrice.toFixed(2) }}
</template>
</el-table-column>
<el-table-column label="说明" align="center" prop="descriptionText" />
<el-table-column
label="说明"
align="center"
prop="descriptionText"
/>
</el-table>
</div>
</template>

View File

@@ -1,52 +1,99 @@
<template>
<div style="width: 100%">
<div class="mb8">
<el-button type="primary" plain @click="handleAddPrescription()" :disabled="buttonDisabled">
<el-button
type="primary"
plain
:disabled="buttonDisabled"
@click="handleAddPrescription()"
>
添加绑定项目
</el-button>
</div>
<el-form :model="form" :rules="rules" ref="formRef">
<el-form
ref="formRef"
:model="form"
:rules="rules"
>
<el-table
ref="prescriptionRef"
v-loading="props.loading"
:data="form.consumablesList"
row-key="patientId"
border
@selection-change="handleSelectionChange"
v-loading="props.loading"
>
<el-table-column label="项目类型" align="center" prop="type" width="150">
<el-table-column
label="项目类型"
align="center"
prop="type"
width="150"
>
<template #default="scope">
<span v-if="!scope.row.isEdit">{{ scope.row.type_dictText }}</span>
<el-form-item v-else :prop="`consumablesList.${scope.$index}.type`" :rules="rules.type">
<el-select v-model="scope.row.type" placeholder="" @change="handleTypeChange">
<el-option v-if="props.tab == 1 || props.tab == 3" label="诊疗" value="1" />
<el-option v-if="props.tab != 3" label="耗材" value="2" />
<el-form-item
v-else
:prop="`consumablesList.${scope.$index}.type`"
:rules="rules.type"
>
<el-select
v-model="scope.row.type"
placeholder=""
@change="handleTypeChange"
>
<el-option
v-if="props.tab == 1 || props.tab == 3"
label="诊疗"
value="1"
/>
<el-option
v-if="props.tab != 3"
label="耗材"
value="2"
/>
</el-select>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="项目名" align="center" prop="name">
<el-table-column
label="项目名"
align="center"
prop="name"
>
<template #default="scope">
<span v-if="!scope.row.isEdit">{{ scope.row.name }}</span>
<el-form-item v-else :prop="`consumablesList.${scope.$index}.name`" :rules="rules.name">
<PopoverList @search="handleSearch" :width="800" :modelValue="scope.row.name">
<el-form-item
v-else
:prop="`consumablesList.${scope.$index}.name`"
:rules="rules.name"
>
<PopoverList
:width="800"
:model-value="scope.row.name"
@search="handleSearch"
>
<template #popover-content="{}">
<DeviceList
v-if="scope.row.type == '2' || props.tab == 2"
@selectRow="(row) => selectRow(row, scope.$index)"
:searchKey="searchKey"
:search-key="searchKey"
@select-row="(row) => selectRow(row, scope.$index)"
/>
<ActivityList
v-else
@selectRow="(row) => selectRow(row, scope.$index)"
:searchKey="searchKey"
:search-key="searchKey"
@select-row="(row) => selectRow(row, scope.$index)"
/>
</template>
</PopoverList>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="绑定数量" align="center" prop="quantity" width="250">
<el-table-column
label="绑定数量"
align="center"
prop="quantity"
width="250"
>
<template #default="scope">
<span v-if="!scope.row.isEdit">{{ scope.row.quantity }}</span>
<el-form-item
@@ -54,11 +101,19 @@
:prop="`consumablesList.${scope.$index}.quantity`"
:rules="rules.quantity"
>
<el-input v-model="scope.row.quantity" placeholder="" />
<el-input
v-model="scope.row.quantity"
placeholder=""
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="单位" align="center" prop="unitCode_dictText" width="100">
<el-table-column
label="单位"
align="center"
prop="unitCode_dictText"
width="100"
>
<template #default="scope">
<span v-if="!scope.row.isEdit">{{ scope.row.unitCode_dictText }}</span>
<el-form-item
@@ -66,13 +121,16 @@
:prop="`consumablesList.${scope.$index}.unitCode`"
:rules="rules.unitCode"
>
<el-select v-model="scope.row.unitCode" placeholder="">
<el-select
v-model="scope.row.unitCode"
placeholder=""
>
<el-option
v-for="(item, index) in scope.row.unitCodeList"
@click="handleUnitCodeClick(item)"
:key="index"
:label="item.label"
:value="item.value"
@click="handleUnitCodeClick(item)"
/>
</el-select>
</el-form-item>
@@ -109,7 +167,12 @@
</el-form-item>
</template>
</el-table-column> -->
<el-table-column label="启用状态" align="center" prop="statusEnum" width="250">
<el-table-column
label="启用状态"
align="center"
prop="statusEnum"
width="250"
>
<template #default="scope">
<span v-if="!scope.row.isEdit">{{ scope.row.statusEnum_dictText }}</span>
<el-form-item
@@ -117,7 +180,11 @@
:prop="`consumablesList.${scope.$index}.statusEnum`"
:rules="rules.statusEnum"
>
<el-select v-model="scope.row.statusEnum" placeholder="" @change="handleTypeChange">
<el-select
v-model="scope.row.statusEnum"
placeholder=""
@change="handleTypeChange"
>
<el-option
v-for="item in statusOptions"
:key="item.value"
@@ -128,7 +195,12 @@
</el-form-item>
</template>
</el-table-column>
<el-table-column label="操作" align="center" fixed="right" width="250">
<el-table-column
label="操作"
align="center"
fixed="right"
width="250"
>
<template #default="scope">
<el-button
v-if="!scope.row.isEdit"
@@ -162,7 +234,11 @@
>
取消
</el-button>
<el-button link type="primary" @click.stop="handleDelete(scope.row, scope.$index)">
<el-button
link
type="primary"
@click.stop="handleDelete(scope.row, scope.$index)"
>
删除
</el-button>
</template>

View File

@@ -1,16 +1,48 @@
<template>
<div>
<el-table ref="medicineRef" height="400" :data="deviceList" @cell-click="clickRow" border>
<el-table-column label="项目名称" align="center" prop="name" width="200" />
<el-table-column label="分类" align="center" prop="categoryCode_dictText" width="150" />
<el-table-column label="种类" align="center" prop="typeCode_dictText" />
<el-table-column label="规格" align="center" prop="size" />
<el-table-column label="价格" align="right" prop="retailPrice">
<el-table
ref="medicineRef"
height="400"
:data="deviceList"
border
@cell-click="clickRow"
>
<el-table-column
label="项目名称"
align="center"
prop="name"
width="200"
/>
<el-table-column
label="分类"
align="center"
prop="categoryCode_dictText"
width="150"
/>
<el-table-column
label="种类"
align="center"
prop="typeCode_dictText"
/>
<el-table-column
label="规格"
align="center"
prop="size"
/>
<el-table-column
label="价格"
align="right"
prop="retailPrice"
>
<template #default="scope">
{{ scope.row.retailPrice.toFixed(2) }}
</template>
</el-table-column>
<el-table-column label="生产厂家" align="center" prop="supplyId_dictText" />
<el-table-column
label="生产厂家"
align="center"
prop="supplyId_dictText"
/>
</el-table>
</div>
</template>

View File

@@ -3,18 +3,28 @@
<div style="height: 780px; display: flex; justify-content: space-between">
<el-card style="height: 100%; width: 25%">
<el-tabs v-model="activeTab">
<el-tab-pane label="用法" :name="1">
<el-tab-pane
label="用法"
:name="1"
>
<el-table
:data="method_code"
border
@cell-click="clickRow"
highlight-current-row
max-height="650"
@cell-click="clickRow"
>
<el-table-column label="项目名" align="center" prop="label" />
<el-table-column
label="项目名"
align="center"
prop="label"
/>
</el-table>
</el-tab-pane>
<el-tab-pane label="诊疗" :name="2">
<el-tab-pane
label="诊疗"
:name="2"
>
<el-input
v-model="queryParams.searchKey"
placeholder="请输入项目名"
@@ -23,20 +33,30 @@
@keyup.enter="getList"
>
<template #append>
<el-button icon="Search" @click="getList" />
<el-button
icon="Search"
@click="getList"
/>
</template>
</el-input>
<el-table
:data="activityList"
border
@cell-click="clickRow"
highlight-current-row
max-height="650"
@cell-click="clickRow"
>
<el-table-column label="项目名" align="center" prop="name" />
<el-table-column
label="项目名"
align="center"
prop="name"
/>
</el-table>
</el-tab-pane>
<el-tab-pane label="号源" :name="3">
<el-tab-pane
label="号源"
:name="3"
>
<el-input
v-model="queryParamsRegistration.searchKey"
placeholder="请输入项目名"
@@ -45,25 +65,32 @@
@keyup.enter="getRegistrationList"
>
<template #append>
<el-button icon="Search" @click="getRegistrationList" />
<el-button
icon="Search"
@click="getRegistrationList"
/>
</template>
</el-input>
<el-table
:data="RegistrationfeeList"
border
@cell-click="clickRow"
highlight-current-row
max-height="650"
@cell-click="clickRow"
>
<el-table-column label="项目名" align="center" prop="name" />
<el-table-column
label="项目名"
align="center"
prop="name"
/>
</el-table>
</el-tab-pane>
</el-tabs>
</el-card>
<el-card style="height: 100%; width: 74%">
<ConsumablesList
:bindList="bindList"
:bindInfo="bindInfo"
:bind-list="bindList"
:bind-info="bindInfo"
:tab="activeTab"
:loading="loading"
@refresh="clickRow(currentRow)"

View File

@@ -1,165 +1,185 @@
<template>
<el-dialog
title="添加频次详情"
v-model="dialogVisible"
width="520px"
top="8vh"
:close-on-click-modal="false"
@close="resetForm"
v-model="dialogVisible"
title="添加频次详情"
width="520px"
top="8vh"
:close-on-click-modal="false"
@close="resetForm"
>
<!-- 表单区域 -->
<el-form
:model="formData"
ref="form"
label-width="120px"
class="freq-form"
ref="form"
:model="formData"
label-width="120px"
class="freq-form"
>
<!-- 字典代码 -->
<el-form-item label="字典代码">
<el-input
v-model="formData.rateCode"
readonly
class="input-readonly"
v-model="formData.rateCode"
readonly
class="input-readonly"
/>
</el-form-item>
<!-- 分割线 -->
<el-divider content-position="left">每日执行</el-divider>
<el-divider content-position="left">
每日执行
</el-divider>
<el-row :gutter="16">
<el-col :span="12">
<el-form-item label="次数">
<el-input-number
v-model="formData.dayCount"
:min="1"
:max="99"
controls-position="right"
v-model="formData.dayCount"
:min="1"
:max="99"
controls-position="right"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="间隔(天)">
<el-input-number
v-model="formData.dayInterval"
:min="0"
:max="99"
controls-position="right"
v-model="formData.dayInterval"
:min="0"
:max="99"
controls-position="right"
/>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="时间点">
<el-select v-model="formData.dayTimes" multiple placeholder="选择时间点">
<el-select
v-model="formData.dayTimes"
multiple
placeholder="选择时间点"
>
<el-option
v-for="time in timeOptions"
:key="time"
:value="time"
:label="time"
v-for="time in timeOptions"
:key="time"
:value="time"
:label="time"
/>
</el-select>
</el-form-item>
<!-- &lt;!&ndash; 分割线 &ndash;&gt;-->
<!-- <el-divider content-position="left">每周执行</el-divider>-->
<!-- &lt;!&ndash; 分割线 &ndash;&gt;-->
<!-- <el-divider content-position="left">每周执行</el-divider>-->
<!-- <el-row :gutter="16">-->
<!-- <el-col :span="12">-->
<!-- <el-form-item label="是否启用">-->
<!-- <el-switch-->
<!-- v-model="formData.weekCycleFlag"-->
<!-- :active-value="1"-->
<!-- :inactive-value="0"-->
<!-- active-text="是"-->
<!-- inactive-text="否"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="12">-->
<!-- <el-form-item label="间隔(周)">-->
<!-- <el-input-number-->
<!-- v-model="formData.weekInterval"-->
<!-- :min="1"-->
<!-- :max="52"-->
<!-- controls-position="right"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- </el-row>-->
<!-- <el-row :gutter="16">-->
<!-- <el-col :span="12">-->
<!-- <el-form-item label="是否启用">-->
<!-- <el-switch-->
<!-- v-model="formData.weekCycleFlag"-->
<!-- :active-value="1"-->
<!-- :inactive-value="0"-->
<!-- active-text="是"-->
<!-- inactive-text="否"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="12">-->
<!-- <el-form-item label="间隔(周)">-->
<!-- <el-input-number-->
<!-- v-model="formData.weekInterval"-->
<!-- :min="1"-->
<!-- :max="52"-->
<!-- controls-position="right"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- </el-row>-->
<!-- <el-form-item label="周次数">-->
<!-- <el-input-number-->
<!-- v-model="formData.weekTimes"-->
<!-- :min="1"-->
<!-- :max="7"-->
<!-- controls-position="right"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="周次数">-->
<!-- <el-input-number-->
<!-- v-model="formData.weekTimes"-->
<!-- :min="1"-->
<!-- :max="7"-->
<!-- controls-position="right"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- 分割线 -->
<el-divider content-position="left">周期与总计</el-divider>
<el-divider content-position="left">
周期与总计
</el-divider>
<el-row :gutter="16">
<el-col :span="12">
<el-form-item label="总次数">
<el-input-number
v-model="formData.totalExecutionCount"
:min="1"
:max="999"
controls-position="right"
v-model="formData.totalExecutionCount"
:min="1"
:max="999"
controls-position="right"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="周期长度">
<el-input-number
v-model="formData.executionPeriod"
:min="1"
:max="999"
controls-position="right"
v-model="formData.executionPeriod"
:min="1"
:max="999"
controls-position="right"
/>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="周期单位">
<el-select v-model="formData.executionPeriodUnit" style="width: 100%">
<el-option label="分钟" value="minute" />
<el-option label="天" value="day" />
<el-option label="周" value="week" />
<el-option label="月" value="month" />
<el-select
v-model="formData.executionPeriodUnit"
style="width: 100%"
>
<el-option
label="分钟"
value="minute"
/>
<el-option
label="天"
value="day"
/>
<el-option
label="周"
value="week"
/>
<el-option
label="月"
value="month"
/>
</el-select>
</el-form-item>
<el-form-item label="备注">
<el-input
type="textarea"
v-model="formData.memo"
:rows="2"
maxlength="200"
show-word-limit
v-model="formData.memo"
type="textarea"
:rows="2"
maxlength="200"
show-word-limit
/>
</el-form-item>
</el-form>
<!-- 底部按钮 -->
<template #footer>
<el-button @click="dialogVisible = false"> </el-button>
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="dialogVisible = false">
</el-button>
<el-button
type="primary"
@click="submitForm"
>
</el-button>
</template>
</el-dialog>
</template>
<style scoped>
.freq-form {
padding: 0 10px;
}
.input-readonly {
background-color: #f5f7fa;
color: #c0c4cc;
}
</style>
<script setup>
import {defineEmits, defineProps, ref, watch} from "vue";
@@ -220,4 +240,14 @@ watch(
);
</script>
<style scoped>
.freq-form {
padding: 0 10px;
}
.input-readonly {
background-color: #f5f7fa;
color: #c0c4cc;
}
</style>

View File

@@ -2,8 +2,13 @@
<div class="app-container">
<el-row :gutter="20">
<!--诊疗目录-->
<el-col :span="4" :xs="24">
<div class="head-title">频次字典</div>
<el-col
:span="4"
:xs="24"
>
<div class="head-title">
频次字典
</div>
<div>
<el-table
ref="freTableRef"
@@ -11,161 +16,177 @@
:data="frequency"
row-key="id"
@row-click="handleRowClick"
>
<el-table-column label="字典频次名称" align="left" prop="dictLabel" />
<el-table-column label="字典频次代码" align="left" prop="dictValue" />
>
<el-table-column
label="字典频次名称"
align="left"
prop="dictLabel"
/>
<el-table-column
label="字典频次代码"
align="left"
prop="dictValue"
/>
</el-table>
<pagination
v-show="frequencyTotal > 0"
:total="frequencyTotal"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getFrequencyList"
v-show="frequencyTotal > 0"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
:total="frequencyTotal"
@pagination="getFrequencyList"
/>
</div>
</el-col>
<el-col :span="20" :xs="24">
<el-row :gutter="10" class="mb8">
<el-col
:span="20"
:xs="24"
>
<el-row
:gutter="10"
class="mb8"
>
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="Plus"
@click="openDialog"
v-hasPermi="['system:user:add']"
>添加频次详情</el-button
v-hasPermi="['system:user:add']"
type="primary"
plain
icon="Plus"
@click="openDialog"
>
添加频次详情
</el-button>
</el-col>
</el-row>
<el-table
v-loading="loading"
:data="frequencyDetail"
v-loading="loading"
:data="frequencyDetail"
>
<!-- 定义表格列 -->
<el-table-column
prop="rateCode"
label="频次代码"
width="180">
</el-table-column>
prop="rateCode"
label="频次代码"
width="180"
/>
<el-table-column
prop="name"
label="名称"
width="200">
</el-table-column>
prop="name"
label="名称"
width="200"
/>
<el-table-column
prop="dayCount"
label="每天执行次数"
width="120">
</el-table-column>
prop="dayCount"
label="每天执行次数"
width="120"
/>
<!-- <el-table-column-->
<!-- prop="dayInterval"-->
<!-- label="每次执行间隔(天数)"-->
<!-- width="180">-->
<!-- </el-table-column>-->
<!-- <el-table-column-->
<!-- prop="dayInterval"-->
<!-- label="每次执行间隔(天数)"-->
<!-- width="180">-->
<!-- </el-table-column>-->
<el-table-column
prop="dayTimes"
label="执行时间点"
width="300">
</el-table-column>
prop="dayTimes"
label="执行时间点"
width="300"
/>
<!-- <el-table-column-->
<!-- prop="weekCycleFlag"-->
<!-- label="是否周期性每周执行"-->
<!-- width="150">-->
<!-- <template #default="scope">-->
<!-- {{ scope.row.weekCycleFlag === 1 ? '是' : '否' }}-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column-->
<!-- prop="weekCycleFlag"-->
<!-- label="是否周期性每周执行"-->
<!-- width="150">-->
<!-- <template #default="scope">-->
<!-- {{ scope.row.weekCycleFlag === 1 ? '是' : '否' }}-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column-->
<!-- prop="weekInterval"-->
<!-- label="每周执行的间隔"-->
<!-- width="150">-->
<!-- </el-table-column>-->
<!-- <el-table-column-->
<!-- prop="weekInterval"-->
<!-- label="每周执行的间隔"-->
<!-- width="150">-->
<!-- </el-table-column>-->
<!-- <el-table-column-->
<!-- prop="weekTimes"-->
<!-- label="每周执行的次数"-->
<!-- width="120">-->
<!-- </el-table-column>-->
<!-- <el-table-column-->
<!-- prop="weekTimes"-->
<!-- label="每周执行的次数"-->
<!-- width="120">-->
<!-- </el-table-column>-->
<!-- <el-table-column-->
<!-- prop="continueFlag"-->
<!-- label="是否为连续执行"-->
<!-- width="150">-->
<!-- <template #default="scope">-->
<!-- {{ scope.row.continueFlag === 1 ? '是' : '否' }}-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column-->
<!-- prop="continueFlag"-->
<!-- label="是否为连续执行"-->
<!-- width="150">-->
<!-- <template #default="scope">-->
<!-- {{ scope.row.continueFlag === 1 ? '是' : '否' }}-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column
prop="totalExecutionCount"
label="执行总次数"
width="120">
</el-table-column>
prop="totalExecutionCount"
label="执行总次数"
width="120"
/>
<el-table-column
prop="executionPeriod"
label="执行周期长度"
width="150">
</el-table-column>
prop="executionPeriod"
label="执行周期长度"
width="150"
/>
<el-table-column
prop="executionPeriodUnit"
label="执行周期单位"
width="150">
</el-table-column>
<!-- <el-table-column-->
<!-- prop="memo"-->
<!-- label="备注信息"-->
<!-- width="200">-->
<!-- </el-table-column>-->
prop="executionPeriodUnit"
label="执行周期单位"
width="150"
/>
<!-- <el-table-column-->
<!-- prop="memo"-->
<!-- label="备注信息"-->
<!-- width="200">-->
<!-- </el-table-column>-->
<el-table-column
label="操作"
align="center"
width="150"
class-name="small-padding fixed-width"
fixed="right"
label="操作"
align="center"
width="150"
class-name="small-padding fixed-width"
fixed="right"
>
<template #default="scope">
<el-button
link
type="primary"
icon="Edit"
@click="openSave(scope.row, scope.$index)"
v-hasPermi="['system:user:edit']"
>编辑</el-button
v-hasPermi="['system:user:edit']"
link
type="primary"
icon="Edit"
@click="openSave(scope.row, scope.$index)"
>
编辑
</el-button>
<el-button
type="danger"
link
icon="Delete"
:disabled="scope.row.id == ''"
@click="deleteSelectedRows(scope.row)"
type="danger"
link
icon="Delete"
:disabled="scope.row.id == ''"
@click="deleteSelectedRows(scope.row)"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<!-- <pagination-->
<!-- v-show="frequencyDetailTotal > 0"-->
<!-- :total="frequencyDetailTotal"-->
<!-- v-model:page="queryDetailParams.pageNum"-->
<!-- v-model:limit="queryDetailParams.pageSize"-->
<!-- @pagination="getDetailList"-->
<!-- />-->
<!-- <pagination-->
<!-- v-show="frequencyDetailTotal > 0"-->
<!-- :total="frequencyDetailTotal"-->
<!-- v-model:page="queryDetailParams.pageNum"-->
<!-- v-model:limit="queryDetailParams.pageSize"-->
<!-- @pagination="getDetailList"-->
<!-- />-->
</el-col>
</el-row>
<FreForm
v-model="dialogVisible"
:initialFormData="showFormData"
@submit="handleFormSubmit"
v-model="dialogVisible"
:initial-form-data="showFormData"
@submit="handleFormSubmit"
/>
</div>
</template>

View File

@@ -3,23 +3,31 @@
<el-dialog
title="批量导入项目"
:model-value="props.dialogVisible"
@update:modelValue="(val) => emit('update:dialogVisible', val)"
width="842"
append-to-body
destroy-on-close
:draggable="true"
@update:model-value="(val) => emit('update:dialogVisible', val)"
>
<el-row :gutter="10">
<el-col :span="24">
<el-form ref="formEl" :rules="rules" :model="form" label-width="100px">
<el-form-item label="项目类型" prop="clinicalType">
<el-form
ref="formEl"
:rules="rules"
:model="form"
label-width="100px"
>
<el-form-item
label="项目类型"
prop="clinicalType"
>
<el-select
v-model="form.clinicalType"
placeholder="请选择"
@change="getList()"
filterable
clearable
style="width: 200px"
@change="getList()"
>
<el-option
v-for="item in categoryCodeList"
@@ -32,7 +40,10 @@
</el-form>
</el-col>
</el-row>
<el-row :gutter="30" style="margin-top: 30px">
<el-row
:gutter="30"
style="margin-top: 30px"
>
<el-col :span="24">
<el-transfer
v-model="transferValue"
@@ -47,8 +58,15 @@
<template #footer>
<div class="dialog-footer">
<el-button @click="onCancel">取消</el-button>
<el-button type="primary" @click="onConfirm"> 确认 </el-button>
<el-button @click="onCancel">
取消
</el-button>
<el-button
type="primary"
@click="onConfirm"
>
确认
</el-button>
</div>
</template>
</el-dialog>
@@ -132,7 +150,7 @@ function onCancel() {
// 批量添加
async function onConfirm() {
if (!formEl) return;
if (!formEl.value) return;
formEl.value.validate(async (valid) => {
if (!valid) return;
if (!transferValue.value || transferValue.value.length === 0) {

View File

@@ -2,15 +2,20 @@
<div class="app-container">
<el-row :gutter="20">
<!--诊疗目录-->
<el-col :span="4" :xs="24">
<div class="head-title">执行科室配置</div>
<el-col
:span="4"
:xs="24"
>
<div class="head-title">
执行科室配置
</div>
<div class="head-container">
<el-tree
ref="treeRef"
:data="organization"
:props="{ label: 'name', children: 'children' }"
:expand-on-click-node="true"
:filter-node-method="filterNode"
ref="treeRef"
node-key="id"
highlight-current
check-strictly
@@ -20,29 +25,37 @@
</div>
</el-col>
<!--诊疗目录-->
<el-col :span="20" :xs="24">
<el-row :gutter="10" class="mb8">
<el-col
:span="20"
:xs="24"
>
<el-row
:gutter="10"
class="mb8"
>
<el-col :span="1.5">
<el-button
v-hasPermi="['system:user:add']"
type="primary"
plain
icon="Plus"
:disabled="isAddDisable"
@click="handleAddItem"
v-hasPermi="['system:user:add']"
>添加新项目</el-button
>
添加新项目
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
v-hasPermi="['system:user:add']"
type="warning"
plain
icon="Plus"
:disabled="isAddDisable"
@click="handleBacthAddItem"
v-hasPermi="['system:user:add']"
>批量新增项目配置</el-button
>
批量新增项目配置
</el-button>
</el-col>
</el-row>
@@ -51,7 +64,11 @@
:data="catagoryList"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="100" align="center" />
<el-table-column
type="selection"
width="100"
align="center"
/>
<el-table-column
label="诊疗目录"
width="150"
@@ -60,9 +77,9 @@
>
<template #default="scope">
<el-select
ref="dropdown"
v-model="scope.row.activityCategoryCode"
placeholder="请选择"
ref="dropdown"
:class="{ 'error-border': scope.row.error }"
clearable
>
@@ -75,7 +92,11 @@
</el-select>
</template>
</el-table-column>
<el-table-column label="项目名称" align="center" :show-overflow-tooltip="true">
<el-table-column
label="项目名称"
align="center"
:show-overflow-tooltip="true"
>
<template #default="scope">
<el-select
v-model="scope.row.activityDefinitionId"
@@ -98,9 +119,9 @@
</template>
</el-table-column>
<el-table-column
key="startTime"
label="开始时间"
align="center"
key="startTime"
prop="startTime"
:show-overflow-tooltip="true"
>
@@ -110,15 +131,14 @@
placeholder="选择时间"
format="HH:mm:ss"
value-format="HH:mm:ss"
>
</el-time-picker>
/>
</template>
</el-table-column>
<el-table-column
key="endTime"
label="结束时间"
align="center"
key="endTime"
prop="endTime"
show-overflow-tooltip
>
@@ -128,8 +148,7 @@
placeholder="选择时间"
format="HH:mm:ss"
value-format="HH:mm:ss"
>
</el-time-picker>
/>
</template>
</el-table-column>
<el-table-column
@@ -141,13 +160,14 @@
>
<template #default="scope">
<el-button
v-hasPermi="['system:user:edit']"
link
type="primary"
icon="Edit"
@click="openSaveImplementDepartment(scope.row, scope.$index)"
v-hasPermi="['system:user:edit']"
>保存</el-button
>
保存
</el-button>
<el-button
type="danger"
link
@@ -162,17 +182,17 @@
</el-table>
<pagination
v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
:total="total"
@pagination="getList"
/>
</el-col>
</el-row>
<BacthAddItemDialog
v-model:dialogVisible="bacthAddItemDialogVisible"
:organizationId="organizationId"
@submitOk="getList"
v-model:dialog-visible="bacthAddItemDialogVisible"
:organization-id="organizationId"
@submit-ok="getList"
/>
</div>
</template>

Some files were not shown because too many files have changed in this diff Show More