docs(requirement): 添加手术室维护界面需求文档

- 创建手术室维护界面PRD文档
- 定义页面概述、核心功能和用户价值
- 设计整体布局和页面区域详细描述
- 规范交互功能和数据结构说明
- 说明开发实现要点和注意事项
- 移除中医诊断主诊断功能实现说明文档
- 移除公告通知弹窗功能说明文档
- 移除手术人员字段不显示问题解决方案文档
- 移除手术和麻醉信息Redis缓存实现说明文档
- 移除手术室管理添加类型和所属科室字段说明文档
This commit is contained in:
2026-01-13 14:41:27 +08:00
parent e20e2b637f
commit a47306825a
71 changed files with 630 additions and 2519 deletions

View File

@@ -674,7 +674,9 @@ async function print() {
};
console.log(result, '==result.data==');
const printElements = templateJson;
const printElements = JSON.parse(
JSON.stringify(templateJson).replace(/{{HOSPITAL_NAME}}/g, userStore.hospitalName)
);
var hiprintTemplate = new hiprint.PrintTemplate({ template: printElements }); // 定义模板
const printerList = hiprintTemplate.getPrinterList();
console.log(hiprintTemplate, '打印机列表');

View File

@@ -110,7 +110,7 @@
"top": 57,
"height": 13.5,
"width": 145.5,
"title": "机构名称:长春市朝阳区中医院",
"title": "机构名称:{{HOSPITAL_NAME}}",
"coordinateSync": false,
"widthHeightSync": false,
"fontSize": 9,

View File

@@ -356,7 +356,7 @@ async function print() {
...reportValue.value, // 将 reportValue.value 中的所有属性展开到 result 中
nickName: userStore.nickName,
orgName: userStore.orgName,
fixmedinsName: '长春市朝阳区中医院医院',
fixmedinsName: userStore.hospitalName,
queryTime: queryTime.value[0] + '~' + queryTime.value[1],
zfAmount: new Decimal(reportValue.value.zhSum || 0).add(reportValue.value.fundSum || 0),
feeAmount: new Decimal(reportValue.value.DIAGNOSTIC_FEE || 0)

View File

@@ -514,7 +514,9 @@ async function print() {
};
console.log(result, '==result.data==');
const printElements = templateJson;
const printElements = JSON.parse(
JSON.stringify(templateJson).replace(/{{HOSPITAL_NAME}}/g, userStore.hospitalName)
);
var hiprintTemplate = new hiprint.PrintTemplate({ template: printElements }); // 定义模板
const printerList = hiprintTemplate.getPrinterList();
console.log(hiprintTemplate, '打印机列表');

View File

@@ -34,7 +34,7 @@
"top": 22.5,
"height": 12,
"width": 420,
"title": "长春市朝阳区中医院",
"title": "{{HOSPITAL_NAME}}",
"coordinateSync": false,
"widthHeightSync": false,
"fontSize": 13.5,

View File

@@ -37,7 +37,7 @@
"top": 16.5,
"height": 22.5,
"width": 120,
"title": "长春市朝阳区中医院医院",
"title": "{{HOSPITAL_NAME}}医院",
"coordinateSync": false,
"widthHeightSync": false,
"fontFamily": "Microsoft YaHei",

View File

@@ -660,7 +660,9 @@ function printPrescription() {
// 将对象转换为 JSON 字符串
console.log(result, 'result');
// 模板对象获取
const printElements = prescriptionTemplate;
const printElements = JSON.parse(
JSON.stringify(prescriptionTemplate).replace(/{{HOSPITAL_NAME}}/g, userStore.hospitalName)
);
var hiprintTemplate = new hiprint.PrintTemplate({ template: printElements }); // 定义模板
hiprintTemplate.print2(result, {
title: '打印标题',
@@ -695,7 +697,9 @@ function printDisposal() {
.join(',');
advicePrint({ requestIds: requestIds }).then((res) => {
const result = res.data;
const printElements = disposalTemplate;
const printElements = JSON.parse(
JSON.stringify(disposalTemplate).replace(/{{HOSPITAL_NAME}}/g, userStore.hospitalName)
);
var hiprintTemplate = new hiprint.PrintTemplate({ template: printElements }); // 定义模板
hiprintTemplate.print2(result, {
height: 210,
@@ -735,7 +739,9 @@ function printBloodBarcode() {
} else {
printBloodCode({ requestId: selectedRows[0].requestId }).then((res) => {
const result = res.data;
const printElements = bloodTemplate;
const printElements = JSON.parse(
JSON.stringify(bloodTemplate).replace(/{{HOSPITAL_NAME}}/g, userStore.hospitalName)
);
var hiprintTemplate = new hiprint.PrintTemplate({ template: printElements }); // 定义模板
hiprintTemplate.print2(result, {
height: 210,

View File

@@ -27,7 +27,7 @@
<span>CF0000000001</span>
</div>
<div style="text-align: center">
<h2>长春市朝阳区中医院医院</h2>
<h2>{{ userStore.hospitalName }}</h2>
</div>
<div style="text-align: center">
<h3>处方单</h3>
@@ -130,7 +130,9 @@
<script setup name="historicalPrescriptionDetail">
import {getPrescriptionDetail} from './api';
import useUserStore from '@/store/modules/user';
const userStore = useUserStore();
const { proxy } = getCurrentInstance();
const props = defineProps({

View File

@@ -19,7 +19,7 @@
<span>{{ item.prescriptionNo }}</span>
</div>
<div style="text-align: center">
<h2>长春市朝阳区中医院医院</h2>
<h2>{{ userStore.hospitalName }}</h2>
</div>
<div style="text-align: center">
<h3>处方单</h3>
@@ -144,6 +144,9 @@
import {formatDateStr} from '@/utils/index';
//高精度库
import Decimal from 'decimal.js';
import useUserStore from '@/store/modules/user';
const userStore = useUserStore();
const props = defineProps({
open: {

View File

@@ -15,7 +15,7 @@
"top": 16.5,
"height": 22.5,
"width": 120,
"title": "长春市朝阳区中医院医院",
"title": "{{HOSPITAL_NAME}}医院",
"coordinateSync": false,
"widthHeightSync": false,
"fontFamily": "Microsoft YaHei",

View File

@@ -2,7 +2,7 @@
<div style="padding: 20px; max-width: 1200px; margin: 0 auto" ref="bodyRef">
<!-- 标题区域 - 居中加粗增加层次感 -->
<div style="text-align: center; margin-bottom: 30px">
<div style="font-size: 22px; color: #333; letter-spacing: 1px">长春市朝阳区中医院</div>
<div style="font-size: 22px; color: #333; letter-spacing: 1px">{{ userStore.hospitalName }}</div>
<div
style="
font-size: 32px;
@@ -614,7 +614,7 @@
border-top: 1px solid #eee;
"
>
本记录由长春市朝阳区中医院医师根据患者病情如实记录仅供临床诊疗参考 |
本记录由{{ userStore.hospitalName }}医师根据患者病情如实记录仅供临床诊疗参考 |
地址长春市朝阳区XX街XX号 | 联系电话0431-XXXXXXX
</div>
@@ -629,7 +629,9 @@
<script setup>
import {reactive, ref} from 'vue';
import useUserStore from '@/store/modules/user';
const userStore = useUserStore();
const bodyRef = ref();
// 响应式表单数据

View File

@@ -21,7 +21,7 @@
margin-bottom: 8px;
"
>
长春市朝阳区中医院
{{ userStore.hospitalName }}
</div>
<div
style="
@@ -500,7 +500,9 @@
<script setup>
import {reactive, ref} from 'vue'; // 补充缺失的reactive导入
import useUserStore from '@/store/modules/user';
const userStore = useUserStore();
const bodyRef = ref(null);
const showPrintPreview = ref(false); // 控制弹窗显隐

View File

@@ -50,7 +50,7 @@
word-wrap: break-word;
"
>
长春市朝阳区中医院
{{ userStore.hospitalName }}
</div>
<div
style="
@@ -721,7 +721,7 @@
word-wrap: break-word;
"
>
长春市朝阳区中医院
{{ userStore.hospitalName }}
</div>
<div
style="
@@ -1346,8 +1346,10 @@
</template>
<script setup>
import {reactive, ref} from 'vue';
import {computed, reactive, ref} from 'vue';
import useUserStore from '@/store/modules/user';
const userStore = useUserStore();
const bodyRef = ref();
const printContentRef = ref(); // 新增打印内容的ref
const showPrintPreview = ref(false); // 控制打印预览弹窗显示

View File

@@ -3,7 +3,7 @@
<!-- 标题区域 - 强化正式感 -->
<div
style="text-align: center; margin-bottom: 30px; padding: 20px; background: #fff; border-radius: 12px; box-shadow: 0 2px 6px rgba(0,0,0,0.03);">
<div style="font-size: 22px; color: #2d3748; letter-spacing: 1px;">长春市朝阳区中医院</div>
<div style="font-size: 22px; color: #2d3748; letter-spacing: 1px;">{{ userStore.hospitalName }}</div>
<div
style="font-size: 28px; font-weight: 700; margin: 12px 0; padding: 8px 0; border-bottom: 2px solid #e8f4f8; display: inline-block;">
住院患者入院沟通记录单</div>
@@ -343,5 +343,7 @@
}
</style>
<script setup>
import useUserStore from '@/store/modules/user';
const userStore = useUserStore();
</script>

View File

@@ -11,7 +11,7 @@
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.03);
"
>
<div style="font-size: 22px; color: #2d3748; letter-spacing: 1px">长春市朝阳区中医院</div>
<div style="font-size: 22px; color: #2d3748; letter-spacing: 1px">{{ userStore.hospitalName }}</div>
<div
style="
font-size: 28px;
@@ -823,7 +823,9 @@
<script setup>
import {reactive, ref} from 'vue';
import useUserStore from '@/store/modules/user';
const userStore = useUserStore();
const bodyRef = ref();
// 响应式表单数据
const formData = reactive({

View File

@@ -4,7 +4,7 @@
<div
style="display: flex; flex-direction: column; justify-content: center; align-items: center"
>
<div style="font-size: 20px">长春市朝阳区中医院</div>
<div style="font-size: 20px">{{ userStore.hospitalName }}</div>
<div style="font-size: 30px; font-weight: bold; padding-top: 10px">住院病案首页</div>
</div>
<!-- 线 -->

View File

@@ -86,7 +86,7 @@
金额已满足应收不可继续添加
</el-text>
</div>
<div style="margin-top: 10px" v-if="userStore.hospitalName == '长春市朝阳区中医院'">
<div style="margin-top: 10px" v-if="userStore.fixmedinsCode == 'H22010200672'">
<span>折扣</span>
<el-radio-group v-model="discountRadio" @change="handleDiscountChange">
<el-radio-button
@@ -352,7 +352,9 @@ function printReceipt(param) {
},
],
};
const printElements = templateJson;
const printElements = JSON.parse(
JSON.stringify(templateJson).replace(/{{HOSPITAL_NAME}}/g, userStore.hospitalName)
);
var hiprintTemplate = new hiprint.PrintTemplate({ template: printElements }); // 定义模板
hiprintTemplate.print2(result.data[0], {
@@ -463,7 +465,9 @@ async function print() {
};
console.log(result, '==result.data==');
const printElements = templateJson;
const printElements = JSON.parse(
JSON.stringify(templateJson).replace(/{{HOSPITAL_NAME}}/g, userStore.hospitalName)
);
var hiprintTemplate = new hiprint.PrintTemplate({ template: printElements }); // 定义模板
const printerList = hiprintTemplate.getPrinterList();
console.log(hiprintTemplate, '打印机列表');

View File

@@ -38,7 +38,7 @@
"top": 15,
"height": 16.5,
"width": 142.5,
"title": "长春市朝阳区中医院门诊收费结算单",
"title": "{{HOSPITAL_NAME}}门诊收费结算单",
"coordinateSync": false,
"widthHeightSync": false,
"fontWeight": "bold",

View File

@@ -2,7 +2,7 @@
<div class="container">
<el-form :model="state.form">
<div class="record-container">
<div class="title">长春市朝阳区中医院</div>
<div class="title">{{ userStore.hospitalName }}</div>
<div class="subtitle">入院记录</div>
<div class="header">
<span>姓名: [<el-input v-model="state.form.name" class="inline-input" />]</span>
@@ -98,6 +98,9 @@
<script setup>
import {getCurrentInstance, onBeforeMount, onMounted, reactive} from 'vue'
import useUserStore from '@/store/modules/user'
const userStore = useUserStore();
const { proxy } = getCurrentInstance();
const emits = defineEmits([]);
const props = defineProps({})

View File

@@ -432,6 +432,7 @@ function sliceData(data) {
const types = data.types.filter((item) => item.weekNo === week.value);
// const datas = JSON.parse(JSON.stringify(data));
const datas = cloneDeep(data);
datas.grParamBOS.title = userStore.hospitalName;
datas.rows = rows;
datas.types = types;
console.log(datas, '666666666666666666');

View File

@@ -21,7 +21,7 @@
"top": 12,
"height": 12,
"width": 115.5,
"title": "长春市朝阳区中医院医院盘点单",
"title": "{{HOSPITAL_NAME}}医院盘点单",
"coordinateSync": false,
"widthHeightSync": false,
"fontSize": 12,
@@ -72,7 +72,7 @@
"top": 33,
"height": 9.75,
"width": 120,
"title": "机构:长春市朝阳区中医院医院",
"title": "机构:{{HOSPITAL_NAME}}医院",
"coordinateSync": false,
"widthHeightSync": false,
"qrCodeLevel": 0

View File

@@ -33,7 +33,7 @@
"top": 13.5,
"height": 12,
"width": 75,
"title": "长春市朝阳区中医院医院",
"title": "{{HOSPITAL_NAME}}医院",
"coordinateSync": false,
"widthHeightSync": false,
"fontSize": 12,
@@ -84,7 +84,7 @@
"top": 33,
"height": 9.75,
"width": 120,
"title": "机构:长春市朝阳区中医院医院",
"title": "机构:{{HOSPITAL_NAME}}医院",
"coordinateSync": false,
"widthHeightSync": false,
"qrCodeLevel": 0

View File

@@ -26,7 +26,7 @@
placeholder=""
clearable
style="width: 150px">
<el-option label="长春市朝阳区中医院" value="sameHospital" />
<el-option :label="userStore.hospitalName" value="sameHospital" />
</el-select>
</el-form-item>
@@ -120,7 +120,9 @@
<script setup name="OutpatientDepartmentMetrics">
import {getOutpatientDepartmentMetrics} from './statisticalManagent';
import {computed, reactive, ref, toRefs} from 'vue';
import useUserStore from '@/store/modules/user';
const userStore = useUserStore();
const loading = ref(true);
const total = ref(0);
const data = reactive({

View File

@@ -33,8 +33,13 @@
<el-button type="primary" plain icon="Plus" @click="handleAdd">新增手术室</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete">
批量删除
<el-button type="success" plain icon="VideoPlay" :disabled="multiple" @click="handleEnable(ids)">
批量启用
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="VideoPause" :disabled="multiple" @click="handleDisable(ids)">
批量停用
</el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
@@ -50,7 +55,7 @@
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="序号" type="index" align="center" width="60" />
<el-table-column label="手术室编码" align="center" prop="busNo" width="120" show-overflow-tooltip />
<el-table-column label="房间号" align="center" prop="busNo" width="120" show-overflow-tooltip />
<el-table-column label="手术室名称" align="center" prop="name" min-width="150" show-overflow-tooltip />
<el-table-column label="类型" align="center" prop="roomTypeEnum_dictText" width="100" />
<el-table-column label="所属科室" align="center" prop="organizationName" width="120" show-overflow-tooltip />
@@ -65,16 +70,24 @@
</template>
</el-table-column>
<el-table-column label="显示顺序" align="center" prop="displayOrder" width="100" />
<el-table-column label="操作" align="center" width="180" fixed="right">
<el-table-column label="操作" align="center" width="220" fixed="right">
<template #default="scope">
<el-button link type="primary" icon="Edit" @click="handleEdit(scope.row)">编辑</el-button>
<el-button link type="primary" icon="View" @click="handleView(scope.row)">查看</el-button>
<el-button
v-if="scope.row.statusEnum === 1"
link
type="danger"
icon="Delete"
@click="handleDelete(scope.row)"
>删除</el-button>
type="warning"
icon="VideoPause"
@click="handleDisable([scope.row.id])"
>停用</el-button>
<el-button
v-else
link
type="success"
icon="VideoPlay"
@click="handleEnable([scope.row.id])"
>启用</el-button>
</template>
</el-table-column>
</el-table>
@@ -92,11 +105,19 @@
<el-dialog :title="title" v-model="open" width="700px" append-to-body>
<el-form ref="operatingRoomRef" :model="form" :rules="rules" label-width="120px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="房间号" prop="busNo">
<el-input v-model="form.busNo" placeholder="请输入房间号" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="手术室名称" prop="name">
<el-input v-model="form.name" placeholder="请输入手术室名称" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="容纳人数" prop="capacity">
<el-input-number
@@ -231,11 +252,12 @@
</template>
<script setup name="OperatingRoomManage">
import { listOperatingRoom, getOperatingRoom, addOperatingRoom, updateOperatingRoom, deleteOperatingRoom } from '@/api/operatingroom'
import { listOperatingRoom, getOperatingRoom, addOperatingRoom, updateOperatingRoom, deleteOperatingRoom, enableOperatingRoom, disableOperatingRoom } from '@/api/operatingroom'
import { deptTreeSelect } from '@/api/system/user'
import { computed } from 'vue'
const { proxy } = getCurrentInstance()
const { operating_room_type } = proxy.useDict('operating_room_type')
const loading = ref(true)
const showSearch = ref(true)
const operatingRoomList = ref([])
@@ -291,12 +313,7 @@ const form = ref({
const operatingRoomRef = ref()
const viewData = ref({})
const roomTypeOptions = ref([
{ value: 1, label: '急诊手术室' },
{ value: 2, label: '择期手术室' },
{ value: 3, label: '日间手术室' },
{ value: 4, label: '复合手术室' }
])
const roomTypeOptions = operating_room_type
const statusOptions = ref([
{ value: 1, label: '启用' },
@@ -304,6 +321,7 @@ const statusOptions = ref([
])
const rules = ref({
busNo: [{ required: true, message: '房间号不能为空', trigger: 'blur' }],
name: [{ required: true, message: '手术室名称不能为空', trigger: 'blur' }],
capacity: [
{ required: true, message: '容纳人数不能为空', trigger: 'blur' },
@@ -484,17 +502,30 @@ function submitForm() {
})
}
/** 删除按钮操作 */
function handleDelete(row) {
const ids = row.id || ids.value
/** 启用按钮操作 */
function handleEnable(ids) {
proxy.$modal
.confirm('是否确认删除选中的手术室?')
.confirm('是否确认启用选中的手术室?')
.then(function () {
return deleteOperatingRoom(ids)
return enableOperatingRoom(ids)
})
.then(() => {
getList()
proxy.$modal.msgSuccess('删除成功')
proxy.$modal.msgSuccess('启用成功')
})
.catch(() => {})
}
/** 停用按钮操作 */
function handleDisable(ids) {
proxy.$modal
.confirm('是否确认停用选中的手术室?')
.then(function () {
return disableOperatingRoom(ids)
})
.then(() => {
getList()
proxy.$modal.msgSuccess('停用成功')
})
.catch(() => {})
}

View File

@@ -33,7 +33,7 @@
"top": 22.5,
"height": 12,
"width": 88.5,
"title": "长春市朝阳区中医院医院",
"title": "{{HOSPITAL_NAME}}医院",
"coordinateSync": false,
"widthHeightSync": false,
"fontSize": 13.5,

View File

@@ -37,7 +37,7 @@
"top": 16.5,
"height": 22.5,
"width": 120,
"title": "长春市朝阳区中医院医院",
"title": "{{HOSPITAL_NAME}}医院",
"coordinateSync": false,
"widthHeightSync": false,
"fontFamily": "Microsoft YaHei",