refactor(table): 更新表格组件的单元格合并配置和事件处理
- 将所有表格的单元格合并方法从数组格式 [rowspan, colspan] 改为对象格式 { rowspan, colspan }
- 为 vxe-table 组件添加 checkbox-config 配置以支持复选框保留选择功能
- 移除复选框的 :reserve-selection 属性并改用 checkbox-config 配置
- 全局注册 VxeTableCompat 组件来归一化 cell-click 和 current-change 事件参数
- 更新技术执行和技术审批页面的表格组件配置和操作逻辑
- 优化
This commit is contained in:
@@ -2,6 +2,7 @@ import {createApp, nextTick} from 'vue';
|
|||||||
|
|
||||||
import VxeUIAll from 'vxe-table';
|
import VxeUIAll from 'vxe-table';
|
||||||
import 'vxe-table/lib/style.css';
|
import 'vxe-table/lib/style.css';
|
||||||
|
import VxeTableCompat from '@/components/VxeTableCompat';
|
||||||
import Cookies from 'js-cookie';
|
import Cookies from 'js-cookie';
|
||||||
|
|
||||||
// 导入 hiprint 并挂载到全局 window 对象
|
// 导入 hiprint 并挂载到全局 window 对象
|
||||||
@@ -122,6 +123,8 @@ app.use(ElementPlus, {
|
|||||||
size: Cookies.get('size') || 'default',
|
size: Cookies.get('size') || 'default',
|
||||||
});
|
});
|
||||||
app.use(VxeUIAll);
|
app.use(VxeUIAll);
|
||||||
|
// 全局注册 vxe-table 兼容层:归一化 cell-click/current-change 事件参数
|
||||||
|
app.component('vxe-table', VxeTableCompat);
|
||||||
|
|
||||||
// 导入公告帮助工具
|
// 导入公告帮助工具
|
||||||
import { initNoticePopupAfterLogin } from '@/utils/noticeHelper'
|
import { initNoticePopupAfterLogin } from '@/utils/noticeHelper'
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<div class="business">
|
<div class="business">
|
||||||
<!-- <vxe-table
|
<!-- <vxe-table
|
||||||
@@ -474,63 +474,63 @@ const init = async () => {
|
|||||||
const handleSpan = ({ row, column, rowIndex, columnIndex }) => {
|
const handleSpan = ({ row, column, rowIndex, columnIndex }) => {
|
||||||
if (columnIndex === 0) {
|
if (columnIndex === 0) {
|
||||||
if (rowIndex === 0) {
|
if (rowIndex === 0) {
|
||||||
return [dangerData.value.length, 1];
|
return { rowspan: dangerData.value.length, colspan: 1 };
|
||||||
} else if (rowIndex > 0 && rowIndex < 27) {
|
} else if (rowIndex > 0 && rowIndex < 27) {
|
||||||
return [0, 0];
|
return { rowspan: 0, colspan: 0 };
|
||||||
}
|
}
|
||||||
if (rowIndex === 27) {
|
if (rowIndex === 27) {
|
||||||
return [1, 4];
|
return { rowspan: 1, colspan: 4 };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (columnIndex === 1) {
|
if (columnIndex === 1) {
|
||||||
if (rowIndex === 0) {
|
if (rowIndex === 0) {
|
||||||
return [4, 1];
|
return { rowspan: 4, colspan: 1 };
|
||||||
} else if (rowIndex > 0 && rowIndex < 4) {
|
} else if (rowIndex > 0 && rowIndex < 4) {
|
||||||
return [0, 0];
|
return { rowspan: 0, colspan: 0 };
|
||||||
}
|
}
|
||||||
if (rowIndex === 4) {
|
if (rowIndex === 4) {
|
||||||
return [3, 1];
|
return { rowspan: 3, colspan: 1 };
|
||||||
} else if (rowIndex > 0 && rowIndex < 7) {
|
} else if (rowIndex > 0 && rowIndex < 7) {
|
||||||
return [0, 0];
|
return { rowspan: 0, colspan: 0 };
|
||||||
}
|
}
|
||||||
if (rowIndex === 7) {
|
if (rowIndex === 7) {
|
||||||
return [4, 1];
|
return { rowspan: 4, colspan: 1 };
|
||||||
} else if (rowIndex > 0 && rowIndex < 11) {
|
} else if (rowIndex > 0 && rowIndex < 11) {
|
||||||
return [0, 0];
|
return { rowspan: 0, colspan: 0 };
|
||||||
}
|
}
|
||||||
if (rowIndex === 11) {
|
if (rowIndex === 11) {
|
||||||
return [3, 1];
|
return { rowspan: 3, colspan: 1 };
|
||||||
} else if (rowIndex > 0 && rowIndex < 14) {
|
} else if (rowIndex > 0 && rowIndex < 14) {
|
||||||
return [0, 0];
|
return { rowspan: 0, colspan: 0 };
|
||||||
}
|
}
|
||||||
if (rowIndex === 14) {
|
if (rowIndex === 14) {
|
||||||
return [7, 1];
|
return { rowspan: 7, colspan: 1 };
|
||||||
} else if (rowIndex > 0 && rowIndex < 21) {
|
} else if (rowIndex > 0 && rowIndex < 21) {
|
||||||
return [0, 0];
|
return { rowspan: 0, colspan: 0 };
|
||||||
}
|
}
|
||||||
if (rowIndex === 21) {
|
if (rowIndex === 21) {
|
||||||
return [6, 1];
|
return { rowspan: 6, colspan: 1 };
|
||||||
} else if (rowIndex > 0 && rowIndex < 27) {
|
} else if (rowIndex > 0 && rowIndex < 27) {
|
||||||
return [0, 0];
|
return { rowspan: 0, colspan: 0 };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return [1, 1];
|
return { rowspan: 1, colspan: 1 };
|
||||||
};
|
};
|
||||||
|
|
||||||
const arraySpanMethod = ({ row, column, rowIndex, columnIndex }) => {
|
const arraySpanMethod = ({ row, column, rowIndex, columnIndex }) => {
|
||||||
// 护理措施
|
// 护理措施
|
||||||
if (columnIndex === 0) {
|
if (columnIndex === 0) {
|
||||||
if (rowIndex === 0) {
|
if (rowIndex === 0) {
|
||||||
return [nursingData.value.length, 1];
|
return { rowspan: nursingData.value.length, colspan: 1 };
|
||||||
} else if (rowIndex > 0 && rowIndex < 8) {
|
} else if (rowIndex > 0 && rowIndex < 8) {
|
||||||
return [0, 0];
|
return { rowspan: 0, colspan: 0 };
|
||||||
}
|
}
|
||||||
// 护士签名
|
// 护士签名
|
||||||
if (rowIndex === 8) {
|
if (rowIndex === 8) {
|
||||||
return [1, 2];
|
return { rowspan: 1, colspan: 2 };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return [1, 1];
|
return { rowspan: 1, colspan: 1 };
|
||||||
};
|
};
|
||||||
|
|
||||||
const onSubmit = async () => {
|
const onSubmit = async () => {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<template>
|
<template>
|
||||||
<div
|
<div
|
||||||
ref="tableWrapper"
|
ref="tableWrapper"
|
||||||
tabindex="0"
|
tabindex="0"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<template>
|
<template>
|
||||||
<div
|
<div
|
||||||
ref="tableWrapper"
|
ref="tableWrapper"
|
||||||
tabindex="0"
|
tabindex="0"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="main-content">
|
<div class="main-content">
|
||||||
<!-- 中间组套列表 -->
|
<!-- 中间组套列表 -->
|
||||||
<div class="section-card-left">
|
<div class="section-card-left">
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<template>
|
<template>
|
||||||
<div
|
<div
|
||||||
ref="tableWrapper"
|
ref="tableWrapper"
|
||||||
tabindex="0"
|
tabindex="0"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<template>
|
<template>
|
||||||
<div
|
<div
|
||||||
v-loading="readCardLoading"
|
v-loading="readCardLoading"
|
||||||
style="display: flex; justify-content: space-between"
|
style="display: flex; justify-content: space-between"
|
||||||
@@ -741,7 +741,7 @@ function objectSpanMethod({ row, column, rowIndex, columnIndex }) {
|
|||||||
// 操作列索引为10(从0开始计数)
|
// 操作列索引为10(从0开始计数)
|
||||||
// 如果当前行的paymentId为空,则不合并
|
// 如果当前行的paymentId为空,则不合并
|
||||||
if (!row.paymentId) {
|
if (!row.paymentId) {
|
||||||
return [1, 1];
|
return { rowspan: 1, colspan: 1 };
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查找相同paymentId的连续行
|
// 查找相同paymentId的连续行
|
||||||
@@ -755,14 +755,14 @@ function objectSpanMethod({ row, column, rowIndex, columnIndex }) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return [spanCount, 1];
|
return { rowspan: spanCount, colspan: 1 };
|
||||||
} else {
|
} else {
|
||||||
// 这不是具有相同paymentId的第一行,返回0表示不显示
|
// 这不是具有相同paymentId的第一行,返回0表示不显示
|
||||||
return [0, 0];
|
return { rowspan: 0, colspan: 0 };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 其他列不合并
|
// 其他列不合并
|
||||||
return [1, 1];
|
return { rowspan: 1, colspan: 1 };
|
||||||
}
|
}
|
||||||
|
|
||||||
// function printCharge(row) {
|
// function printCharge(row) {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog
|
<el-dialog
|
||||||
v-model="dialogVisible"
|
v-model="dialogVisible"
|
||||||
title="补打挂号单凭证"
|
title="补打挂号单凭证"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<template>
|
<template>
|
||||||
<div
|
<div
|
||||||
v-loading="loading"
|
v-loading="loading"
|
||||||
style="display: flex; justify-content: space-between"
|
style="display: flex; justify-content: space-between"
|
||||||
@@ -528,7 +528,7 @@ async function handleReadCard(value) {
|
|||||||
function objectSpanMethod({ row, column, rowIndex, columnIndex }) {
|
function objectSpanMethod({ row, column, rowIndex, columnIndex }) {
|
||||||
if (columnIndex === 10) {
|
if (columnIndex === 10) {
|
||||||
if (!row.paymentId) {
|
if (!row.paymentId) {
|
||||||
return [1,1];
|
return { rowspan: 1, colspan: 1 };
|
||||||
}
|
}
|
||||||
let spanCount = 1;
|
let spanCount = 1;
|
||||||
if (rowIndex === 0 || chargeList.value[rowIndex - 1].paymentId !== row.paymentId) {
|
if (rowIndex === 0 || chargeList.value[rowIndex - 1].paymentId !== row.paymentId) {
|
||||||
@@ -539,12 +539,12 @@ function objectSpanMethod({ row, column, rowIndex, columnIndex }) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return [spanCount, 1];
|
return { rowspan: spanCount, colspan: 1 };
|
||||||
} else {
|
} else {
|
||||||
return [0, 0];
|
return { rowspan: 0, colspan: 0 };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return [1, 1];
|
return { rowspan: 1, colspan: 1 };
|
||||||
}
|
}
|
||||||
|
|
||||||
// 打印功能
|
// 打印功能
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<template>
|
<template>
|
||||||
<div
|
<div
|
||||||
ref="tableWrapper"
|
ref="tableWrapper"
|
||||||
tabindex="0"
|
tabindex="0"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
<el-col
|
<el-col
|
||||||
@@ -751,13 +751,13 @@ function operationSpanMethod({ row, column, rowIndex, columnIndex }) {
|
|||||||
const groupId = row.groupId;
|
const groupId = row.groupId;
|
||||||
// 如果没有groupId,则不合并
|
// 如果没有groupId,则不合并
|
||||||
if (groupId === undefined || groupId === null) {
|
if (groupId === undefined || groupId === null) {
|
||||||
return [1, 1];
|
return { rowspan: 1, colspan: 1 };
|
||||||
}
|
}
|
||||||
|
|
||||||
// 向上查找相同groupId的行,如果找到则隐藏当前行
|
// 向上查找相同groupId的行,如果找到则隐藏当前行
|
||||||
for (let i = rowIndex - 1; i >= 0; i--) {
|
for (let i = rowIndex - 1; i >= 0; i--) {
|
||||||
if (activityList.value[i].groupId === groupId) {
|
if (activityList.value[i].groupId === groupId) {
|
||||||
return [0, 0]; // 隐藏被合并的行
|
return { rowspan: 0, colspan: 0 }; // 隐藏被合并的行
|
||||||
} else {
|
} else {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -773,9 +773,9 @@ function operationSpanMethod({ row, column, rowIndex, columnIndex }) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return [spanCount, 1];
|
return { rowspan: spanCount, colspan: 1 };
|
||||||
}
|
}
|
||||||
return [1, 1];
|
return { rowspan: 1, colspan: 1 };
|
||||||
}
|
}
|
||||||
|
|
||||||
// 打印处方
|
// 打印处方
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<!-- 左侧患者列表 -->
|
<!-- 左侧患者列表 -->
|
||||||
<el-card class="patient-list">
|
<el-card class="patient-list">
|
||||||
@@ -420,7 +420,7 @@ function handelSpanMethod({ row, column, rowIndex, columnIndex }) {
|
|||||||
|
|
||||||
// 检查当前列是否需要合并
|
// 检查当前列是否需要合并
|
||||||
if (!mergeColumns.includes(columnIndex)) {
|
if (!mergeColumns.includes(columnIndex)) {
|
||||||
return [1, 1];
|
return { rowspan: 1, colspan: 1 };
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取当前行的 requestId
|
// 获取当前行的 requestId
|
||||||
@@ -428,7 +428,7 @@ function handelSpanMethod({ row, column, rowIndex, columnIndex }) {
|
|||||||
|
|
||||||
// 如果没有 requestId,不进行合并
|
// 如果没有 requestId,不进行合并
|
||||||
if (!currentRequestId) {
|
if (!currentRequestId) {
|
||||||
return [1, 1];
|
return { rowspan: 1, colspan: 1 };
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查找具有相同 requestId 的连续行
|
// 查找具有相同 requestId 的连续行
|
||||||
@@ -444,7 +444,7 @@ function handelSpanMethod({ row, column, rowIndex, columnIndex }) {
|
|||||||
|
|
||||||
// 如果当前行不是合并组的第一行,则不显示
|
// 如果当前行不是合并组的第一行,则不显示
|
||||||
if (startIndex !== rowIndex) {
|
if (startIndex !== rowIndex) {
|
||||||
return [0, 0];
|
return { rowspan: 0, colspan: 0 };
|
||||||
}
|
}
|
||||||
|
|
||||||
// 向下查找相同 requestId 的行
|
// 向下查找相同 requestId 的行
|
||||||
|
|||||||
@@ -1,2 +1,190 @@
|
|||||||
<template>
|
<template>
|
||||||
|
<div class="app-container">
|
||||||
|
<!-- 搜索栏 -->
|
||||||
|
<el-form
|
||||||
|
v-show="showSearch"
|
||||||
|
ref="queryFormRef"
|
||||||
|
:model="queryParams"
|
||||||
|
size="small"
|
||||||
|
:inline="true"
|
||||||
|
label-width="80px"
|
||||||
|
>
|
||||||
|
<el-form-item title="申请类型" field="applyType">
|
||||||
|
<el-select v-model="queryParams.applyType" placeholder="全部" clearable>
|
||||||
|
<el-option title="全部" value="" />
|
||||||
|
<el-option title="检查" value="exam" />
|
||||||
|
<el-option title="检验" value="lab" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item title="申请单号" field="applyNo">
|
||||||
|
<el-input v-model="queryParams.applyNo" placeholder="请输入申请单号" clearable />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item title="患者姓名" field="patientName">
|
||||||
|
<el-input v-model="queryParams.patientName" placeholder="请输入患者姓名" clearable />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary" icon="el-icon-search" size="small" @click="handleQuery">查询</el-button>
|
||||||
|
<el-button icon="el-icon-refresh" size="small" @click="resetQuery">重置</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
|
||||||
|
<!-- 操作栏 -->
|
||||||
|
<el-row :gutter="10" class="mb8">
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="primary" plain icon="el-icon-check" size="small" :disabled="single" @click="handleExecute">
|
||||||
|
执行确认
|
||||||
|
</el-button>
|
||||||
|
</el-col>
|
||||||
|
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList" />
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<!-- 数据表格 -->
|
||||||
|
<vxe-table v-loading="loading" :data="orderList" @checkbox-change="handleSelectionChange" border stripe>
|
||||||
|
<vxe-column type="checkbox" width="55" align="center" />
|
||||||
|
<vxe-column title="申请单号" field="applyNo" width="180" :show-overflow="true" />
|
||||||
|
<vxe-column title="申请类型" field="applyTypeName" width="80" align="center">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<el-tag :type="row.applyType === 'exam' ? 'primary' : 'success'" size="small">
|
||||||
|
{{ row.applyTypeName }}
|
||||||
|
</el-tag>
|
||||||
</template>
|
</template>
|
||||||
|
</vxe-column>
|
||||||
|
<vxe-column title="患者ID" field="patientId" width="120" :show-overflow="true" />
|
||||||
|
<vxe-column title="患者姓名" field="patientName" width="100" :show-overflow="true" />
|
||||||
|
<vxe-column title="就诊号" field="visitNo" width="140" :show-overflow="true" />
|
||||||
|
<vxe-column title="开单科室" field="applyDeptCode" width="120" :show-overflow="true" />
|
||||||
|
<vxe-column title="申请医生" field="applyDocName" width="100" :show-overflow="true" />
|
||||||
|
<vxe-column title="申请时间" field="applyTime" width="170" align="center" />
|
||||||
|
<vxe-column title="诊断/描述" field="clinicDesc" min-width="180" :show-overflow="true" />
|
||||||
|
<vxe-column title="加急" width="70" align="center">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<el-tag v-if="row.isUrgent === 1" type="danger" size="small">加急</el-tag>
|
||||||
|
<span v-else>普通</span>
|
||||||
|
</template>
|
||||||
|
</vxe-column>
|
||||||
|
<vxe-column title="状态" width="100" align="center">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<el-tag :type="statusTagType(row.applyStatus)" size="small">
|
||||||
|
{{ statusText(row) }}
|
||||||
|
</el-tag>
|
||||||
|
</template>
|
||||||
|
</vxe-column>
|
||||||
|
<vxe-column title="操作" width="120" align="center" fixed="right">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<el-button type="primary" link size="small" @click="handleExecuteSingle(row)">
|
||||||
|
执行确认
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</vxe-column>
|
||||||
|
</vxe-table>
|
||||||
|
|
||||||
|
<pagination
|
||||||
|
v-show="total > 0"
|
||||||
|
v-model:page="queryParams.pageNo"
|
||||||
|
v-model:limit="queryParams.pageSize"
|
||||||
|
:total="total"
|
||||||
|
@pagination="getList"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref, reactive, onMounted } from 'vue'
|
||||||
|
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||||
|
import { listExecuteOrders, executeExamOrder, executeLabOrder } from '@/api/techStation'
|
||||||
|
|
||||||
|
const loading = ref(false)
|
||||||
|
const showSearch = ref(true)
|
||||||
|
const orderList = ref([])
|
||||||
|
const total = ref(0)
|
||||||
|
const ids = ref([])
|
||||||
|
const single = ref(true)
|
||||||
|
const multiple = ref(true)
|
||||||
|
const queryFormRef = ref(null)
|
||||||
|
|
||||||
|
const queryParams = reactive({
|
||||||
|
pageNo: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
applyType: '',
|
||||||
|
patientName: '',
|
||||||
|
applyNo: ''
|
||||||
|
})
|
||||||
|
|
||||||
|
// 状态文本映射
|
||||||
|
function statusText(row) {
|
||||||
|
if (row.applyType === 'exam') {
|
||||||
|
const map = { 0: '已开单', 1: '已收费', 2: '已预约', 3: '已签到', 4: '部分报告', 5: '已完成', 6: '已作废' }
|
||||||
|
return map[row.applyStatus] || '未知'
|
||||||
|
}
|
||||||
|
const map = { 1: '待发送', 2: '已收费', 3: '已执行' }
|
||||||
|
return map[row.applyStatus] || '未知'
|
||||||
|
}
|
||||||
|
|
||||||
|
function statusTagType(status) {
|
||||||
|
if (status === 1) return 'warning'
|
||||||
|
if (status === 2 || status === 3) return 'primary'
|
||||||
|
if (status === 5) return 'success'
|
||||||
|
if (status === 6) return 'info'
|
||||||
|
return ''
|
||||||
|
}
|
||||||
|
|
||||||
|
async function getList() {
|
||||||
|
loading.value = true
|
||||||
|
try {
|
||||||
|
const res = await listExecuteOrders(queryParams)
|
||||||
|
orderList.value = res.rows || []
|
||||||
|
total.value = res.total || 0
|
||||||
|
} finally {
|
||||||
|
loading.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleQuery() {
|
||||||
|
queryParams.pageNo = 1
|
||||||
|
getList()
|
||||||
|
}
|
||||||
|
|
||||||
|
function resetQuery() {
|
||||||
|
queryFormRef.value?.resetFields()
|
||||||
|
queryParams.pageNo = 1
|
||||||
|
queryParams.applyType = ''
|
||||||
|
queryParams.patientName = ''
|
||||||
|
queryParams.applyNo = ''
|
||||||
|
getList()
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleSelectionChange(selection) {
|
||||||
|
ids.value = selection.map(item => item.applyNo)
|
||||||
|
single.value = selection.length !== 1
|
||||||
|
multiple.value = !selection.length
|
||||||
|
}
|
||||||
|
|
||||||
|
async function handleExecute() {
|
||||||
|
const row = orderList.value.find(item => item.applyNo === ids.value[0])
|
||||||
|
if (!row) return
|
||||||
|
await doExecute(row)
|
||||||
|
}
|
||||||
|
|
||||||
|
async function handleExecuteSingle(row) {
|
||||||
|
await doExecute(row)
|
||||||
|
}
|
||||||
|
|
||||||
|
async function doExecute(row) {
|
||||||
|
await ElMessageBox.confirm(`确认执行申请单 ${row.applyNo}?`, '执行确认', { type: 'warning' })
|
||||||
|
try {
|
||||||
|
if (row.applyType === 'exam') {
|
||||||
|
await executeExamOrder(row.applyNo)
|
||||||
|
} else {
|
||||||
|
await executeLabOrder(row.applyNo)
|
||||||
|
}
|
||||||
|
ElMessage.success('执行成功')
|
||||||
|
getList()
|
||||||
|
} catch (e) {
|
||||||
|
ElMessage.error(e.message || '执行失败')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
getList()
|
||||||
|
})
|
||||||
|
</script>
|
||||||
@@ -1,2 +1,206 @@
|
|||||||
<template>
|
<template>
|
||||||
|
<div class="app-container">
|
||||||
|
<!-- 搜索栏 -->
|
||||||
|
<el-form
|
||||||
|
v-show="showSearch"
|
||||||
|
ref="queryFormRef"
|
||||||
|
:model="queryParams"
|
||||||
|
size="small"
|
||||||
|
:inline="true"
|
||||||
|
label-width="80px"
|
||||||
|
>
|
||||||
|
<el-form-item title="申请类型" field="applyType">
|
||||||
|
<el-select v-model="queryParams.applyType" placeholder="全部" clearable>
|
||||||
|
<el-option title="全部" value="" />
|
||||||
|
<el-option title="检查" value="exam" />
|
||||||
|
<el-option title="检验" value="lab" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item title="申请单号" field="applyNo">
|
||||||
|
<el-input v-model="queryParams.applyNo" placeholder="请输入申请单号" clearable />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item title="患者姓名" field="patientName">
|
||||||
|
<el-input v-model="queryParams.patientName" placeholder="请输入患者姓名" clearable />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary" icon="el-icon-search" size="small" @click="handleQuery">查询</el-button>
|
||||||
|
<el-button icon="el-icon-refresh" size="small" @click="resetQuery">重置</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
|
||||||
|
<!-- 操作栏 -->
|
||||||
|
<el-row :gutter="10" class="mb8">
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="success" plain icon="el-icon-check" size="small" :disabled="single" @click="handleApprove">
|
||||||
|
审批通过
|
||||||
|
</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="danger" plain icon="el-icon-close" size="small" :disabled="single" @click="handleReject">
|
||||||
|
驳回
|
||||||
|
</el-button>
|
||||||
|
</el-col>
|
||||||
|
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList" />
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<!-- 数据表格 -->
|
||||||
|
<vxe-table v-loading="loading" :data="orderList" @checkbox-change="handleSelectionChange" border stripe>
|
||||||
|
<vxe-column type="checkbox" width="55" align="center" />
|
||||||
|
<vxe-column title="申请单号" field="applyNo" width="180" :show-overflow="true" />
|
||||||
|
<vxe-column title="申请类型" field="applyTypeName" width="80" align="center">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<el-tag :type="row.applyType === 'exam' ? 'primary' : 'success'" size="small">
|
||||||
|
{{ row.applyTypeName }}
|
||||||
|
</el-tag>
|
||||||
</template>
|
</template>
|
||||||
|
</vxe-column>
|
||||||
|
<vxe-column title="患者ID" field="patientId" width="120" :show-overflow="true" />
|
||||||
|
<vxe-column title="患者姓名" field="patientName" width="100" :show-overflow="true" />
|
||||||
|
<vxe-column title="就诊号" field="visitNo" width="140" :show-overflow="true" />
|
||||||
|
<vxe-column title="开单科室" field="applyDeptCode" width="120" :show-overflow="true" />
|
||||||
|
<vxe-column title="申请医生" field="applyDocName" width="100" :show-overflow="true" />
|
||||||
|
<vxe-column title="申请时间" field="applyTime" width="170" align="center" />
|
||||||
|
<vxe-column title="诊断/描述" field="clinicDesc" min-width="180" :show-overflow="true" />
|
||||||
|
<vxe-column title="申请状态" width="100" align="center">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<el-tag type="warning" size="small">待审批</el-tag>
|
||||||
|
</template>
|
||||||
|
</vxe-column>
|
||||||
|
<vxe-column title="备注" field="applyRemark" width="150" :show-overflow="true" />
|
||||||
|
<vxe-column title="操作" width="160" align="center" fixed="right">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<el-button type="success" link size="small" @click="handleApproveSingle(row)">
|
||||||
|
通过
|
||||||
|
</el-button>
|
||||||
|
<el-button type="danger" link size="small" @click="handleRejectSingle(row)">
|
||||||
|
驳回
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</vxe-column>
|
||||||
|
</vxe-table>
|
||||||
|
|
||||||
|
<pagination
|
||||||
|
v-show="total > 0"
|
||||||
|
v-model:page="queryParams.pageNo"
|
||||||
|
v-model:limit="queryParams.pageSize"
|
||||||
|
:total="total"
|
||||||
|
@pagination="getList"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref, reactive, onMounted } from 'vue'
|
||||||
|
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||||
|
import {
|
||||||
|
listRefundApproveOrders,
|
||||||
|
approveExamRefund,
|
||||||
|
rejectExamRefund,
|
||||||
|
approveLabRefund,
|
||||||
|
rejectLabRefund
|
||||||
|
} from '@/api/techStation'
|
||||||
|
|
||||||
|
const loading = ref(false)
|
||||||
|
const showSearch = ref(true)
|
||||||
|
const orderList = ref([])
|
||||||
|
const total = ref(0)
|
||||||
|
const ids = ref([])
|
||||||
|
const applyTypes = ref([])
|
||||||
|
const single = ref(true)
|
||||||
|
const multiple = ref(true)
|
||||||
|
const queryFormRef = ref(null)
|
||||||
|
|
||||||
|
const queryParams = reactive({
|
||||||
|
pageNo: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
applyType: '',
|
||||||
|
patientName: '',
|
||||||
|
applyNo: ''
|
||||||
|
})
|
||||||
|
|
||||||
|
async function getList() {
|
||||||
|
loading.value = true
|
||||||
|
try {
|
||||||
|
const res = await listRefundApproveOrders(queryParams)
|
||||||
|
orderList.value = res.rows || []
|
||||||
|
total.value = res.total || 0
|
||||||
|
} finally {
|
||||||
|
loading.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleQuery() {
|
||||||
|
queryParams.pageNo = 1
|
||||||
|
getList()
|
||||||
|
}
|
||||||
|
|
||||||
|
function resetQuery() {
|
||||||
|
queryFormRef.value?.resetFields()
|
||||||
|
queryParams.pageNo = 1
|
||||||
|
queryParams.applyType = ''
|
||||||
|
queryParams.patientName = ''
|
||||||
|
queryParams.applyNo = ''
|
||||||
|
getList()
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleSelectionChange(selection) {
|
||||||
|
ids.value = selection.map(item => item.applyNo)
|
||||||
|
applyTypes.value = selection.map(item => item.applyType)
|
||||||
|
single.value = selection.length !== 1
|
||||||
|
multiple.value = !selection.length
|
||||||
|
}
|
||||||
|
|
||||||
|
async function doApprove(row) {
|
||||||
|
await ElMessageBox.confirm(`确认审批通过申请单 ${row.applyNo}?`, '审批确认', { type: 'success' })
|
||||||
|
try {
|
||||||
|
if (row.applyType === 'exam') {
|
||||||
|
await approveExamRefund(row.applyNo)
|
||||||
|
} else {
|
||||||
|
await approveLabRefund(row.applyNo)
|
||||||
|
}
|
||||||
|
ElMessage.success('审批通过')
|
||||||
|
getList()
|
||||||
|
} catch (e) {
|
||||||
|
ElMessage.error(e.message || '审批失败')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function doReject(row) {
|
||||||
|
await ElMessageBox.confirm(`确认驳回申请单 ${row.applyNo} 的退费申请?`, '驳回确认', { type: 'warning' })
|
||||||
|
try {
|
||||||
|
if (row.applyType === 'exam') {
|
||||||
|
await rejectExamRefund(row.applyNo)
|
||||||
|
} else {
|
||||||
|
await rejectLabRefund(row.applyNo)
|
||||||
|
}
|
||||||
|
ElMessage.success('已驳回')
|
||||||
|
getList()
|
||||||
|
} catch (e) {
|
||||||
|
ElMessage.error(e.message || '驳回失败')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleApprove() {
|
||||||
|
const row = orderList.value.find(item => item.applyNo === ids.value[0])
|
||||||
|
if (!row) return
|
||||||
|
doApprove(row)
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleReject() {
|
||||||
|
const row = orderList.value.find(item => item.applyNo === ids.value[0])
|
||||||
|
if (!row) return
|
||||||
|
doReject(row)
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleApproveSingle(row) {
|
||||||
|
doApprove(row)
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleRejectSingle(row) {
|
||||||
|
doReject(row)
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
getList()
|
||||||
|
})
|
||||||
|
</script>
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="consultation-application-container">
|
<div class="consultation-application-container">
|
||||||
<!-- 页面标题 -->
|
<!-- 页面标题 -->
|
||||||
<div class="page-header">
|
<div class="page-header">
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="app-container consultation-confirmation">
|
<div class="app-container consultation-confirmation">
|
||||||
<div class="page-header">
|
<div class="page-header">
|
||||||
<span class="tab-title">会诊确认</span>
|
<span class="tab-title">会诊确认</span>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<template>
|
<template>
|
||||||
<div
|
<div
|
||||||
ref="tableWrapper"
|
ref="tableWrapper"
|
||||||
tabindex="0"
|
tabindex="0"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-drawer
|
<el-drawer
|
||||||
v-model="drawer"
|
v-model="drawer"
|
||||||
title="医嘱组套"
|
title="医嘱组套"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<template>
|
<template>
|
||||||
<div
|
<div
|
||||||
ref="tableWrapper"
|
ref="tableWrapper"
|
||||||
tabindex="0"
|
tabindex="0"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<div class="left">
|
<div class="left">
|
||||||
<div class="form">
|
<div class="form">
|
||||||
@@ -722,15 +722,15 @@ function spanMethod({ row, column, rowIndex, columnIndex }) {
|
|||||||
const count = medicineInfoList.value.filter(
|
const count = medicineInfoList.value.filter(
|
||||||
(item) => item.prescriptionNo === prescriptionNo
|
(item) => item.prescriptionNo === prescriptionNo
|
||||||
).length;
|
).length;
|
||||||
return [count, 1]; // 合并count行,1列
|
return { rowspan: count, colspan: 1 }; // 合并count行,1列
|
||||||
} else {
|
} else {
|
||||||
return [0, 0]; // 其他行不显示
|
return { rowspan: 0, colspan: 0 }; // 其他行不显示
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 其他列不进行合并
|
// 其他列不进行合并
|
||||||
return [1, 1];
|
return { rowspan: 1, colspan: 1 };
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleSelectionChange(selectedRows, currentRow) {
|
function handleSelectionChange(selectedRows, currentRow) {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="med-summary-container">
|
<div class="med-summary-container">
|
||||||
<div class="summary-card" style="width: 40%; height: 80vh">
|
<div class="summary-card" style="width: 40%; height: 80vh">
|
||||||
<div class="summary-card-header">{{ '汇总单' }}</div>
|
<div class="summary-card-header">{{ '汇总单' }}</div>
|
||||||
@@ -75,7 +75,7 @@
|
|||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
border
|
border
|
||||||
auto-resize
|
auto-resize
|
||||||
@cell-click="({ row }) => getDetails(row)"
|
@cell-click="(row) => getDetails(row)"
|
||||||
>
|
>
|
||||||
<vxe-column
|
<vxe-column
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<!-- 左侧患者列表 -->
|
<!-- 左侧患者列表 -->
|
||||||
<el-card class="patient-list">
|
<el-card class="patient-list">
|
||||||
@@ -421,7 +421,7 @@ function handelSpanMethod({ row, column, rowIndex, columnIndex }) {
|
|||||||
|
|
||||||
// 检查当前列是否需要合并
|
// 检查当前列是否需要合并
|
||||||
if (!mergeColumns.includes(columnIndex)) {
|
if (!mergeColumns.includes(columnIndex)) {
|
||||||
return [1, 1];
|
return { rowspan: 1, colspan: 1 };
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取当前行的 requestId
|
// 获取当前行的 requestId
|
||||||
@@ -429,7 +429,7 @@ function handelSpanMethod({ row, column, rowIndex, columnIndex }) {
|
|||||||
|
|
||||||
// 如果没有 requestId,不进行合并
|
// 如果没有 requestId,不进行合并
|
||||||
if (!currentRequestId) {
|
if (!currentRequestId) {
|
||||||
return [1, 1];
|
return { rowspan: 1, colspan: 1 };
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查找具有相同 requestId 的连续行
|
// 查找具有相同 requestId 的连续行
|
||||||
@@ -445,7 +445,7 @@ function handelSpanMethod({ row, column, rowIndex, columnIndex }) {
|
|||||||
|
|
||||||
// 如果当前行不是合并组的第一行,则不显示
|
// 如果当前行不是合并组的第一行,则不显示
|
||||||
if (startIndex !== rowIndex) {
|
if (startIndex !== rowIndex) {
|
||||||
return [0, 0];
|
return { rowspan: 0, colspan: 0 };
|
||||||
}
|
}
|
||||||
|
|
||||||
// 向下查找相同 requestId 的行
|
// 向下查找相同 requestId 的行
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<template>
|
<template>
|
||||||
<div
|
<div
|
||||||
v-loading="readCardLoading"
|
v-loading="readCardLoading"
|
||||||
style="display: flex; justify-content: space-between"
|
style="display: flex; justify-content: space-between"
|
||||||
@@ -865,7 +865,7 @@ function objectSpanMethod({ row, column, rowIndex, columnIndex }) {
|
|||||||
// 操作列索引为10(从0开始计数)
|
// 操作列索引为10(从0开始计数)
|
||||||
// 如果当前行的paymentId为空,则不合并
|
// 如果当前行的paymentId为空,则不合并
|
||||||
if (!row.paymentId) {
|
if (!row.paymentId) {
|
||||||
return [1, 1];
|
return { rowspan: 1, colspan: 1 };
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查找相同paymentId的连续行
|
// 查找相同paymentId的连续行
|
||||||
@@ -879,14 +879,14 @@ function objectSpanMethod({ row, column, rowIndex, columnIndex }) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return [spanCount, 1];
|
return { rowspan: spanCount, colspan: 1 };
|
||||||
} else {
|
} else {
|
||||||
// 这不是具有相同paymentId的第一行,返回0表示不显示
|
// 这不是具有相同paymentId的第一行,返回0表示不显示
|
||||||
return [0, 0];
|
return { rowspan: 0, colspan: 0 };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 其他列不合并
|
// 其他列不合并
|
||||||
return [1, 1];
|
return { rowspan: 1, colspan: 1 };
|
||||||
}
|
}
|
||||||
|
|
||||||
function printCharge(row) {
|
function printCharge(row) {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="diagnose-container">
|
<div class="diagnose-container">
|
||||||
<!-- 常用诊断、个人诊断、科室诊断、历史诊断 -->
|
<!-- 常用诊断、个人诊断、科室诊断、历史诊断 -->
|
||||||
<diagnose-folder
|
<diagnose-folder
|
||||||
@@ -195,7 +195,7 @@
|
|||||||
<vxe-table
|
<vxe-table
|
||||||
:data="filteredSyndromeList"
|
:data="filteredSyndromeList"
|
||||||
max-height="300"
|
max-height="300"
|
||||||
@cell-click="({ row }) => handleSelectSyndrome(row, scope.row)"
|
@cell-click="(row) => handleSelectSyndrome(row, scope.row)"
|
||||||
>
|
>
|
||||||
<vxe-column
|
<vxe-column
|
||||||
title="证候名称"
|
title="证候名称"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="medicalOrderList-container">
|
<div class="medicalOrderList-container">
|
||||||
<div class="search-container">
|
<div class="search-container">
|
||||||
<el-space
|
<el-space
|
||||||
@@ -430,22 +430,22 @@ const arraySpanMethod = ({
|
|||||||
// 如果是父级行
|
// 如果是父级行
|
||||||
if (row.children && row.children.length > 0) {
|
if (row.children && row.children.length > 0) {
|
||||||
if (columnIndex === 0) {
|
if (columnIndex === 0) {
|
||||||
return [1, 1]
|
return { rowspan: 1, colspan: 1 }
|
||||||
}
|
}
|
||||||
// 如果是患者列
|
// 如果是患者列
|
||||||
if (columnIndex === 1) {
|
if (columnIndex === 1) {
|
||||||
return [1, 16]
|
return { rowspan: 1, colspan: 16 }
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return [1, 0]
|
return { rowspan: 1, colspan: 0 }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 如果是子级行,显示其他列
|
// 如果是子级行,显示其他列
|
||||||
if (!row.children || row.children.length == 0) {
|
if (!row.children || row.children.length == 0) {
|
||||||
return [1, 1]
|
return { rowspan: 1, colspan: 1 }
|
||||||
}
|
}
|
||||||
// 如果是父级行,隐藏其他列
|
// 如果是父级行,隐藏其他列
|
||||||
return [1, 1]
|
return { rowspan: 1, colspan: 1 }
|
||||||
}
|
}
|
||||||
const drugDistributionSummaryData = ref([
|
const drugDistributionSummaryData = ref([
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<!--
|
<!--
|
||||||
* @Author: sjjh
|
* @Author: sjjh
|
||||||
* @Date: 2025-04-16 20:54:48
|
* @Date: 2025-04-16 20:54:48
|
||||||
* @Description:
|
* @Description:
|
||||||
@@ -229,21 +229,21 @@ const arraySpanMethod = ({
|
|||||||
// 如果是父级行
|
// 如果是父级行
|
||||||
if (row.children && row.children.length > 0) {
|
if (row.children && row.children.length > 0) {
|
||||||
if (columnIndex === 0) {
|
if (columnIndex === 0) {
|
||||||
return [1, 1]
|
return { rowspan: 1, colspan: 1 }
|
||||||
}
|
}
|
||||||
// 如果是患者列
|
// 如果是患者列
|
||||||
if (columnIndex === 1) {
|
if (columnIndex === 1) {
|
||||||
return [1, 6]
|
return { rowspan: 1, colspan: 6 }
|
||||||
} else {
|
} else {
|
||||||
return [1, 0]
|
return { rowspan: 1, colspan: 0 }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 如果是子级行,显示其他列
|
// 如果是子级行,显示其他列
|
||||||
if (!row.children || row.children.length == 0) {
|
if (!row.children || row.children.length == 0) {
|
||||||
return [1, 1]
|
return { rowspan: 1, colspan: 1 }
|
||||||
}
|
}
|
||||||
// 如果是父级行,隐藏其他列
|
// 如果是父级行,隐藏其他列
|
||||||
return [1, 1]
|
return { rowspan: 1, colspan: 1 }
|
||||||
}
|
}
|
||||||
const statusOptions = [
|
const statusOptions = [
|
||||||
{ value: '全部', label: '全部' },
|
{ value: '全部', label: '全部' },
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<!--
|
<!--
|
||||||
* @Author: sjjh
|
* @Author: sjjh
|
||||||
* @Date: 2025-04-16 20:54:48
|
* @Date: 2025-04-16 20:54:48
|
||||||
* @Description:
|
* @Description:
|
||||||
@@ -339,21 +339,21 @@ const arraySpanMethod = ({ row, column, rowIndex, columnIndex }) => {
|
|||||||
// 如果是父级行
|
// 如果是父级行
|
||||||
if (row.children && row.children.length > 0) {
|
if (row.children && row.children.length > 0) {
|
||||||
if (columnIndex === 0) {
|
if (columnIndex === 0) {
|
||||||
return [1, 1];
|
return { rowspan: 1, colspan: 1 };
|
||||||
}
|
}
|
||||||
// 如果是患者列
|
// 如果是患者列
|
||||||
if (columnIndex === 1) {
|
if (columnIndex === 1) {
|
||||||
return [1, 6];
|
return { rowspan: 1, colspan: 6 };
|
||||||
} else {
|
} else {
|
||||||
return [1, 0];
|
return { rowspan: 1, colspan: 0 };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 如果是子级行,显示其他列
|
// 如果是子级行,显示其他列
|
||||||
if (!row.children || row.children.length == 0) {
|
if (!row.children || row.children.length == 0) {
|
||||||
return [1, 1];
|
return { rowspan: 1, colspan: 1 };
|
||||||
}
|
}
|
||||||
// 如果是父级行,隐藏其他列
|
// 如果是父级行,隐藏其他列
|
||||||
return [1, 1];
|
return { rowspan: 1, colspan: 1 };
|
||||||
};
|
};
|
||||||
const statusOptions = [
|
const statusOptions = [
|
||||||
{ value: '未执行', label: '未执行' },
|
{ value: '未执行', label: '未执行' },
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<!--
|
<!--
|
||||||
* @Author: sjjh
|
* @Author: sjjh
|
||||||
* @Date: 2025-09-09 13:49:40
|
* @Date: 2025-09-09 13:49:40
|
||||||
* @Description: 药品发送
|
* @Description: 药品发送
|
||||||
@@ -238,21 +238,21 @@ const arraySpanMethod = ({
|
|||||||
// 如果是父级行
|
// 如果是父级行
|
||||||
if (row.children && row.children.length > 0) {
|
if (row.children && row.children.length > 0) {
|
||||||
if (columnIndex === 0) {
|
if (columnIndex === 0) {
|
||||||
return [1, 1]
|
return { rowspan: 1, colspan: 1 }
|
||||||
}
|
}
|
||||||
// 如果是患者列
|
// 如果是患者列
|
||||||
if (columnIndex === 1) {
|
if (columnIndex === 1) {
|
||||||
return [1, 7]
|
return { rowspan: 1, colspan: 7 }
|
||||||
} else {
|
} else {
|
||||||
return [1, 0]
|
return { rowspan: 1, colspan: 0 }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 如果是子级行,显示其他列
|
// 如果是子级行,显示其他列
|
||||||
if (!row.children || row.children.length == 0) {
|
if (!row.children || row.children.length == 0) {
|
||||||
return [1, 1]
|
return { rowspan: 1, colspan: 1 }
|
||||||
}
|
}
|
||||||
// 如果是父级行,隐藏其他列
|
// 如果是父级行,隐藏其他列
|
||||||
return [1, 1]
|
return { rowspan: 1, colspan: 1 }
|
||||||
}
|
}
|
||||||
const collectTsableData = ref([
|
const collectTsableData = ref([
|
||||||
// {
|
// {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<div class="left">
|
<div class="left">
|
||||||
<div class="form">
|
<div class="form">
|
||||||
@@ -1000,15 +1000,15 @@ function spanMethod({row, column, rowIndex, columnIndex}) {
|
|||||||
const count = medicineInfoList.value.filter(
|
const count = medicineInfoList.value.filter(
|
||||||
(item) => item.prescriptionNo === prescriptionNo
|
(item) => item.prescriptionNo === prescriptionNo
|
||||||
).length;
|
).length;
|
||||||
return [count, 1]; // 合并count行,1列
|
return { rowspan: count, colspan: 1 }; // 合并count行,1列
|
||||||
} else {
|
} else {
|
||||||
return [0, 0]; // 其他行不显示
|
return { rowspan: 0, colspan: 0 }; // 其他行不显示
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 其他列不进行合并
|
// 其他列不进行合并
|
||||||
return [1, 1];
|
return { rowspan: 1, colspan: 1 };
|
||||||
}
|
}
|
||||||
|
|
||||||
// 单元格类名设置
|
// 单元格类名设置
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<!-- 查询表单 -->
|
<!-- 查询表单 -->
|
||||||
<el-form
|
<el-form
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<!-- 顶部筛选区 -->
|
<!-- 顶部筛选区 -->
|
||||||
<el-form
|
<el-form
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<h4 class="form-header h4">
|
<h4 class="form-header h4">
|
||||||
基本信息
|
基本信息
|
||||||
@@ -42,7 +42,7 @@
|
|||||||
<h4 class="form-header h4">
|
<h4 class="form-header h4">
|
||||||
角色信息
|
角色信息
|
||||||
</h4>
|
</h4>
|
||||||
<vxe-table
|
<vxe-table :checkbox-config="{ reserve: true }"
|
||||||
ref="roleRef"
|
ref="roleRef"
|
||||||
v-loading="loading"
|
v-loading="loading"
|
||||||
:row-key="getRowKey"
|
:row-key="getRowKey"
|
||||||
@@ -62,7 +62,7 @@
|
|||||||
</vxe-column>
|
</vxe-column>
|
||||||
<vxe-column
|
<vxe-column
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
:reserve-selection="true"
|
|
||||||
width="55"
|
width="55"
|
||||||
/>
|
/>
|
||||||
<vxe-column
|
<vxe-column
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<h4 class="form-header h4">
|
<h4 class="form-header h4">
|
||||||
基本信息
|
基本信息
|
||||||
@@ -42,7 +42,7 @@
|
|||||||
<h4 class="form-header h4">
|
<h4 class="form-header h4">
|
||||||
角色信息
|
角色信息
|
||||||
</h4>
|
</h4>
|
||||||
<vxe-table
|
<vxe-table :checkbox-config="{ reserve: true }"
|
||||||
ref="roleRef"
|
ref="roleRef"
|
||||||
v-loading="loading"
|
v-loading="loading"
|
||||||
:row-key="getRowKey"
|
:row-key="getRowKey"
|
||||||
@@ -62,7 +62,7 @@
|
|||||||
</vxe-column>
|
</vxe-column>
|
||||||
<vxe-column
|
<vxe-column
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
:reserve-selection="true"
|
|
||||||
width="55"
|
width="55"
|
||||||
/>
|
/>
|
||||||
<vxe-column
|
<vxe-column
|
||||||
|
|||||||
Reference in New Issue
Block a user