- 将所有表格的单元格合并方法从数组格式 [rowspan, colspan] 改为对象格式 { rowspan, colspan }
- 为 vxe-table 组件添加 checkbox-config 配置以支持复选框保留选择功能
- 移除复选框的 :reserve-selection 属性并改用 checkbox-config 配置
- 全局注册 VxeTableCompat 组件来归一化 cell-click 和 current-change 事件参数
- 更新技术执行和技术审批页面的表格组件配置和操作逻辑
- 优化
190 lines
6.1 KiB
Vue
Executable File
190 lines
6.1 KiB
Vue
Executable File
<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>
|
||
</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> |