报告查询列表联调
This commit is contained in:
parent
ef2856f0ff
commit
0ee42a673a
@ -43,3 +43,11 @@ export function fetchCodeReqmain(query?: Object) {
|
||||
params: query,
|
||||
});
|
||||
}
|
||||
// 查询报告单列表
|
||||
export function reportList(query?: Object) {
|
||||
return request({
|
||||
url: '/report/ReportList',
|
||||
method: 'post',
|
||||
data: query,
|
||||
});
|
||||
}
|
||||
@ -18,7 +18,7 @@
|
||||
|
||||
<!-- 动态列 -->
|
||||
<template v-for="item in columns" :key="item.prop || item.key">
|
||||
<!-- 自定义插槽列 -->
|
||||
<!-- 自定义插槽列 行数据插槽(有row属性) -->
|
||||
<el-table-column v-if="item.slot && item.visible" :prop="item.prop" :label="item.label" :width="item.width"
|
||||
:min-width="item.minWidth" :fixed="item.fixed" :align="item.align || 'left'" :sortable="item.sortable"
|
||||
:show-overflow-tooltip="item.showOverflowTooltip !== false">
|
||||
@ -31,7 +31,7 @@
|
||||
<el-table-column v-if="!item.slot && item.visible" :prop="item.prop" :label="item.label" :width="item.width"
|
||||
:min-width="item.minWidth" :fixed="item.fixed" :align="item.align || 'left'" :sortable="item.sortable"
|
||||
:show-overflow-tooltip="item.showOverflowTooltip !== false" :formatter="item.formatter">
|
||||
<!-- 表头插槽 -->
|
||||
<!-- 表头插槽 (无row属性)-->
|
||||
<template v-if="item.headerSlot" #header="scope">
|
||||
<slot :name="item.headerSlot" :column="scope.column" :$index="scope.$index" />
|
||||
</template>
|
||||
@ -83,6 +83,12 @@ interface TableColumn {
|
||||
visible?: boolean; // 是否显示列
|
||||
}
|
||||
|
||||
// 在子组件中定义插槽类型
|
||||
defineSlots<{
|
||||
// 具名插槽和动态插槽(不含 default)
|
||||
[slotName: string]: (props: { row?: any; column?: any; $index?: number }) => any;
|
||||
}>();
|
||||
|
||||
// Props 定义
|
||||
const props = defineProps({
|
||||
// 表格数据
|
||||
|
||||
@ -75,7 +75,7 @@
|
||||
:columns="columns"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<CustomTable :data="tableData" :columns="columns" :config="tableConfig" :loading="loading"
|
||||
<CustomTable ref="tableRef" :data="tableData" :columns="columns" :config="tableConfig" :loading="loading"
|
||||
@row-click="rowHandle" @selection-change="selectionChange">
|
||||
<template #jzbz="{ row }">
|
||||
{{ row.jzbz == '1' ? '急诊' : '非急诊' }}
|
||||
@ -160,7 +160,7 @@ const heightForm = ref(90);
|
||||
const dialogVisible = ref(false)
|
||||
const title = ref('采样登记')
|
||||
const sqhText = ref('')
|
||||
|
||||
const tableRef = ref()
|
||||
interface QueryParams {
|
||||
times: string[]; // 明确类型为字符串元组
|
||||
yljg: string;
|
||||
@ -515,6 +515,7 @@ const getList = () => {
|
||||
loading.value = false;
|
||||
tableData.value = response.data
|
||||
getRightTable(response.data[0])
|
||||
tableRef.value.setCurrentRow(response.data[0])
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@ -3,47 +3,46 @@
|
||||
<div ref="compactForm">
|
||||
<el-row :gutter="10" class="compact-form" v-show="showSearch">
|
||||
<el-form :model="queryParams" ref="queryRef" :inline="true" :rules="queryRules">
|
||||
<el-form-item label="日期:" prop="failed1">
|
||||
<el-date-picker v-model="queryParams.failed1" type="daterange" range-separator="-" start-placeholder="开始时间"
|
||||
<el-form-item label="日期:" prop="times">
|
||||
<el-date-picker v-model="queryParams.times" type="daterange" range-separator="-" start-placeholder="开始时间"
|
||||
end-placeholder="结束时间" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="病人状态:" prop="failed2">
|
||||
<el-select v-model="queryParams.failed2" placeholder="请选择">
|
||||
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
|
||||
<el-form-item label="病人状态:" prop="dybz">
|
||||
<el-select v-model="queryParams.dybz" placeholder="请选择">
|
||||
<el-option label="已打印" value="1" />
|
||||
<el-option label="未打印" value="0" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="科室:" prop="failed3">
|
||||
<el-select v-model="queryParams.failed3" placeholder="请选择" style="width: 120px;">
|
||||
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
|
||||
<el-form-item label="科室:" prop="ksdh">
|
||||
<el-select v-model="queryParams.ksdh" placeholder="请选择" filterable>
|
||||
<el-option v-for="item in dictData.DP" :key="item.value" :label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="病人类型:" prop="failed4">
|
||||
<el-select v-model="queryParams.failed4" placeholder="请选择">
|
||||
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
|
||||
<el-form-item label="病人类型:" prop="brly">
|
||||
<el-select v-model="queryParams.brly" placeholder="请选择" style="width: 120px;">
|
||||
<el-option v-for="item in dictData.PT" :key="item.value" :label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="" prop="failed5">
|
||||
<el-radio-group v-model="queryParams.failed5">
|
||||
<el-radio label="1">仅危急值</el-radio>
|
||||
<el-radio label="2">仅急诊</el-radio>
|
||||
</el-radio-group>
|
||||
<el-form-item label="" prop="">
|
||||
<el-checkbox v-model="queryParams.alarmflag" label="仅危急值" @change="alarmHandle" size="large" />
|
||||
<el-checkbox v-model="queryParams.jzbz" label="仅急诊" @change="jzbzHandle" size="large" />
|
||||
</el-form-item>
|
||||
<el-form-item label="姓名" prop="failed6">
|
||||
<el-form-item label="姓名" prop="brxm">
|
||||
<el-col :span="1.5">
|
||||
<el-input v-model="queryParams.failed6" clearable placeholder="姓名" @keyup.enter="handleQuery"
|
||||
<el-input v-model="queryParams.brxm" clearable placeholder="姓名" @keyup.enter="handleQuery"
|
||||
@clear="handleQuery" />
|
||||
</el-col>
|
||||
</el-form-item>
|
||||
<el-form-item label="病人号" prop="failed7">
|
||||
<el-form-item label="病人号" prop="brdh">
|
||||
<el-col :span="1.5">
|
||||
<el-input v-model="queryParams.failed7" clearable placeholder="病人号" @keyup.enter="handleQuery"
|
||||
<el-input v-model="queryParams.brdh" clearable placeholder="病人号" @keyup.enter="handleQuery"
|
||||
@clear="handleQuery" />
|
||||
</el-col>
|
||||
</el-form-item>
|
||||
<el-form-item label="条形码" prop="failed8">
|
||||
<el-form-item label="条形码" prop="sqh">
|
||||
<el-col :span="1.5">
|
||||
<el-input v-model="queryParams.failed8" clearable placeholder="条形码" @keyup.enter="handleQuery"
|
||||
<el-input v-model="queryParams.sqh" clearable placeholder="条形码" @keyup.enter="handleQuery"
|
||||
@clear="handleQuery" />
|
||||
</el-col>
|
||||
</el-form-item>
|
||||
@ -63,7 +62,7 @@
|
||||
<el-button type="primary" plain icon="Plus">打印</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="danger" plain icon="Edit">勾选中所有未打印</el-button>
|
||||
<el-button type="danger" plain icon="Edit" @click="selectStatusRows">勾选中所有未打印</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="success" plain>打印单张PDF报告</el-button>
|
||||
@ -76,8 +75,13 @@
|
||||
:columns="columns"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<CustomTable :data="tableData" :columns="columns" :config="tableConfig" :loading="loading">
|
||||
|
||||
<CustomTable ref="tableRefs" :data="tableData" :columns="columns" :config="tableConfig" :loading="loading">
|
||||
<template #dybz="{ row }">
|
||||
{{ row.dybz == 1 ? '✅' : '❌' }}
|
||||
</template>
|
||||
<template #jzbz="{ row }">
|
||||
{{ row.jzbz == 1 ? '急诊' : '危急诊' }}
|
||||
</template>
|
||||
</CustomTable>
|
||||
|
||||
</el-col>
|
||||
@ -123,11 +127,16 @@
|
||||
import { ref, reactive, toRaw, computed, watch, nextTick, onMounted } from 'vue';
|
||||
import CustomTable from '@/components/tableCom/index.vue'
|
||||
import { useRouter } from 'vue-router'
|
||||
import { reportList } from '@/api/checkCode/index'
|
||||
//@ts-ignore
|
||||
import { comDict } from '@/utils/dict'
|
||||
const router = useRouter()
|
||||
|
||||
const compactForm = ref<HTMLElement | null>(null);
|
||||
const heightForm = ref(90);
|
||||
const dialogVisible = ref(false)
|
||||
|
||||
const tableRefs = ref()
|
||||
const openDB = () => {
|
||||
dialogVisible.value = true
|
||||
}
|
||||
@ -167,19 +176,33 @@ const compareTableData = [
|
||||
}
|
||||
]
|
||||
|
||||
|
||||
interface QueryParams {
|
||||
times: string[]; // 明确类型为字符串元组
|
||||
alarmflag: boolean,
|
||||
jzbz: boolean,
|
||||
ksdh: string,
|
||||
brly: string,
|
||||
brxm: string,
|
||||
brdh: string,
|
||||
sqh: string,
|
||||
dybz: string,
|
||||
}
|
||||
|
||||
// 提交表单数据
|
||||
const queryParams = reactive({
|
||||
failed1: [],
|
||||
failed2: '',
|
||||
failed3: '',
|
||||
failed4: '',
|
||||
failed5: '',
|
||||
failed6: '',
|
||||
failed7: '',
|
||||
failed8: '',
|
||||
const queryParams = reactive<QueryParams>({
|
||||
times: ['2025-07-18 00:00:00', '2025-07-18 23:59:59'],
|
||||
ksdh: '',
|
||||
brly: '',
|
||||
alarmflag: false,
|
||||
jzbz: false,
|
||||
brxm: '',
|
||||
brdh: '',
|
||||
sqh: '',
|
||||
dybz: '',
|
||||
});
|
||||
|
||||
const alarmflag = ref('0')
|
||||
const jzbz = ref('0')
|
||||
const showSearch = ref(true);
|
||||
const queryRef = ref()
|
||||
// 定义校验规则
|
||||
@ -193,60 +216,55 @@ const queryRules = ref({
|
||||
// { required: true, message: '条码状态不能为空', trigger: 'change' },
|
||||
// ],
|
||||
})
|
||||
const options = [
|
||||
{
|
||||
value: 'Option1',
|
||||
label: 'Option1',
|
||||
},
|
||||
{
|
||||
value: 'Option2',
|
||||
label: 'Option2',
|
||||
},
|
||||
|
||||
]
|
||||
const handleQuery = async () => {
|
||||
const valid = await queryRef.value.validate().catch(() => { });
|
||||
if (!valid) return false;
|
||||
getList()
|
||||
}
|
||||
// 重置
|
||||
const resetQuery = () => {
|
||||
queryRef.value?.resetFields();
|
||||
getList()
|
||||
}
|
||||
|
||||
const loading = false;
|
||||
|
||||
// 数据源
|
||||
const tableData = [
|
||||
{
|
||||
id: 1, tfailed1: '打印', tfailed2: '急诊', tfailed3: '危急诊', tfailed4: '检验日期', tfailed5: '病人代号', tfailed6: '床号', tfailed7: '仪器', tfailed8: '样本号',
|
||||
tfailed9: '样本类型', tfailed10: '检查项目', tfailed11: '检查结果', tfailed12: '检查结果', tfailed13: '检查结果', tfailed14: '检查结果'
|
||||
},
|
||||
{
|
||||
id: 2, tfailed1: '打印', tfailed2: '急诊', tfailed3: '危急诊', tfailed4: '检验日期', tfailed5: '病人代号', tfailed6: '床号', tfailed7: '仪器', tfailed8: '样本号',
|
||||
tfailed9: '样本类型', tfailed10: '检查项目', tfailed11: '检查结果', tfailed12: '检查结果', tfailed13: '检查结果', tfailed14: '检查结果'
|
||||
},
|
||||
|
||||
]
|
||||
const tableData = ref([])
|
||||
// 配置项
|
||||
const columns = ref([
|
||||
{ prop: 'tfailed1', label: '打印', visible: true, key: 0, sortable: true, width: '110px' },
|
||||
{ prop: 'tfailed2', label: '急诊', visible: true, key: 1, width: '110px' },
|
||||
{ prop: 'tfailed3', label: '危急诊', align: 'center', visible: true, key: 2, },
|
||||
{ prop: 'tfailed4', label: '检验日期', align: 'center', visible: true, key: 3, width: '110px' },
|
||||
{ prop: 'tfailed5', label: '病人代号', align: 'center', visible: true, key: 4, width: '110px' },
|
||||
{ prop: 'tfailed6', label: '床号', align: 'center', visible: true, key: 5, width: '110px' },
|
||||
{ prop: 'tfailed7', label: '仪器', align: 'center', visible: true, key: 6, width: '110px' },
|
||||
{ prop: 'tfailed8', label: '样本号', align: 'center', visible: true, key: 7, width: '110px' },
|
||||
{ prop: 'tfailed9', label: '样本类型', align: 'center', visible: true, key: 8, width: '110px' },
|
||||
{ prop: 'tfailed10', label: '检验目的', align: 'center', visible: true, key: 9, width: '110px' },
|
||||
{ prop: 'tfailed11', label: '病人类型', align: 'center', visible: true, key: 10, width: '110px' },
|
||||
{ prop: 'tfailed12', label: '性别', align: 'center', visible: true, key: 11, width: '110px' },
|
||||
{ prop: 'tfailed13', label: '仪器名称', align: 'center', visible: true, key: 12, width: '110px' },
|
||||
{ prop: 'tfailed14', label: '医疗机构', align: 'center', visible: true, key: 13, width: '110px' },
|
||||
const columns = ref<ColumnItem[]>([
|
||||
{ prop: 'dybz', label: '打印', visible: true, key: 0, slot: 'dybz', },
|
||||
{ prop: 'jzbz', label: '急诊', visible: true, key: 1, slot: 'jzbz', },
|
||||
{ prop: 'alarmflag', label: '危急值', align: 'center', visible: true, key: 2, },
|
||||
{ prop: 'jyrq', label: '检验日期', align: 'center', visible: true, key: 3, width: '150px' },
|
||||
{ prop: 'brdh', label: '病人代号', align: 'center', visible: true, key: 4, width: '110px' },
|
||||
{ prop: 'ch', label: '床号', align: 'center', visible: true, key: 5, sortable: true, },
|
||||
{ prop: 'yqdl', label: '仪器', align: 'center', visible: true, key: 6, width: '110px' },
|
||||
{ prop: 'ybh', label: '样本号', align: 'center', visible: true, key: 7, },
|
||||
{ prop: 'yblxname', label: '样本类型', align: 'center', visible: true, key: 8, },
|
||||
{ prop: 'jymd', label: '检验目的', align: 'center', visible: true, key: 9, },
|
||||
{ prop: 'brlyname', label: '病人类型', align: 'center', visible: true, key: 10, },
|
||||
{ prop: 'brxbname', label: '性别', align: 'center', visible: true, key: 11, },
|
||||
{ prop: 'yqmc', label: '仪器名称', align: 'center', visible: true, key: 12, width: '150px' },
|
||||
{ prop: 'yljg', label: '医疗机构', align: 'center', visible: true, key: 13, width: '150px' },
|
||||
])
|
||||
|
||||
// 单元格样式
|
||||
const cellStyleHd = ({ row, column, rowIndex, columnIndex }: {
|
||||
row: any;
|
||||
column: any;
|
||||
rowIndex: number;
|
||||
columnIndex: number;
|
||||
}) => {
|
||||
// console.log(row, column, rowIndex, columnIndex);
|
||||
if (column.label == "急诊" && row.jzbz == "1") {
|
||||
return { background: '#f00 !important', color: '#fff' };
|
||||
}
|
||||
|
||||
|
||||
};
|
||||
|
||||
// 表格配置
|
||||
const tableConfig = ref(
|
||||
{
|
||||
@ -256,10 +274,36 @@ const tableConfig = ref(
|
||||
index: false, // 序号
|
||||
height: '100%', // 高度
|
||||
highlightCurrentRow: true, // 高亮当前行
|
||||
fit: true
|
||||
fit: true,
|
||||
cellStyle: cellStyleHd
|
||||
}
|
||||
)
|
||||
|
||||
// 勾选未打印
|
||||
const selectStatusRows = () => {
|
||||
tableData.value.forEach((item: any) => {
|
||||
if (item.dybz != 1) {
|
||||
tableRefs.value.toggleRowSelection(item, true)
|
||||
}
|
||||
})
|
||||
}
|
||||
const alarmHandle = (val: boolean) => {
|
||||
if (val) {
|
||||
queryParams.jzbz = false
|
||||
alarmflag.value = '1'
|
||||
} else {
|
||||
alarmflag.value = '0'
|
||||
}
|
||||
|
||||
}
|
||||
const jzbzHandle = (val: boolean) => {
|
||||
if (val) {
|
||||
queryParams.alarmflag = false
|
||||
jzbz.value = '1'
|
||||
} else {
|
||||
jzbz.value = '0'
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
interface ColumnItem {
|
||||
@ -267,9 +311,10 @@ interface ColumnItem {
|
||||
label: string;
|
||||
visible: boolean;
|
||||
key: number;
|
||||
align: string;
|
||||
slot: string;
|
||||
width: string;
|
||||
align?: string;
|
||||
slot?: string;
|
||||
width?: string;
|
||||
sortable?: boolean;
|
||||
}
|
||||
// 更新列
|
||||
const updateColumns = (arr: Array<ColumnItem>) => {
|
||||
@ -277,7 +322,6 @@ const updateColumns = (arr: Array<ColumnItem>) => {
|
||||
};
|
||||
|
||||
|
||||
|
||||
// 右侧数据源
|
||||
const rightTableData = [
|
||||
{
|
||||
@ -337,12 +381,55 @@ const bottomTableConfig = ref(
|
||||
fit: true,
|
||||
}
|
||||
)
|
||||
interface DictData {
|
||||
DP?: Array<any>;
|
||||
PT?: Array<any>;
|
||||
[key: string]: any[] | undefined; // 添加索引签名以支持动态访问
|
||||
}
|
||||
|
||||
|
||||
onMounted(() => {
|
||||
// 字典数据存储
|
||||
const dictData = ref<DictData>({});
|
||||
|
||||
onMounted(async () => {
|
||||
getList()
|
||||
adjustTableHeight();
|
||||
|
||||
// 加载病人来源字典
|
||||
const dictRefs = await comDict('PT', 'DP');
|
||||
|
||||
// 从 ref 中获取实际数据
|
||||
dictData.value = {
|
||||
PT: toRaw(dictRefs.PT.value) || [],
|
||||
DP: toRaw(dictRefs.DP.value) || [],
|
||||
};
|
||||
});
|
||||
|
||||
|
||||
const getList = () => {
|
||||
const data = {
|
||||
// dept: '0235',
|
||||
// userid: 'lis',
|
||||
alarmflag: alarmflag.value,
|
||||
jzbz: jzbz.value,
|
||||
dybz: queryParams.dybz,
|
||||
ksdh: queryParams.ksdh,
|
||||
brly: queryParams.brly,
|
||||
brxm: queryParams.brxm,
|
||||
brdh: queryParams.brdh,
|
||||
sqh: queryParams.sqh,
|
||||
st: queryParams.times[0],
|
||||
et: queryParams.times[1],
|
||||
yljg: 1
|
||||
}
|
||||
reportList(data).then((res: any) => {
|
||||
if (res.code == 200) {
|
||||
tableData.value = res.rows
|
||||
tableRefs.value.setCurrentRow(res.rows[0])
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 计算table高度
|
||||
watch(showSearch, () => {
|
||||
nextTick(() => {
|
||||
|
||||
@ -32,6 +32,6 @@
|
||||
// "allowUnknownInTemplate": true // 允许模板中使用未知属性
|
||||
// }
|
||||
},
|
||||
"include": ["src/**/*","src/**/*.ts", "src/**/*.vue", "src/**/*.tsx", "src/**/*.d.ts", "auto-imports.d.ts"], // **表示任意目录,而 * 表示任意文件。这表明 src 目录中的所有文件都将被编译
|
||||
"include": ["src/**/*","src/**/*.ts", "src/**/*.vue","src/**/**/*.vue", "src/**/*.tsx", "src/**/*.d.ts", "auto-imports.d.ts"], // **表示任意目录,而 * 表示任意文件。这表明 src 目录中的所有文件都将被编译
|
||||
"exclude": ["node_modules", "dist"] ,// 指示不需要编译的文件目录
|
||||
}
|
||||
|
||||
@ -35,7 +35,7 @@ export default defineConfig(({
|
||||
server: {
|
||||
port: 8888,
|
||||
host: true,
|
||||
open: true,
|
||||
open: false,
|
||||
proxy: {
|
||||
// https://cn.vitejs.dev/config/#server-proxy
|
||||
'/dev-api': {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user