页面布局、数据筛选

This commit is contained in:
wyuu 2025-12-05 17:58:22 +08:00
parent 846442e93a
commit 83ed53901d
18 changed files with 517 additions and 210 deletions

View File

@ -10,24 +10,19 @@ import { useFingerprint } from '@/utils/useFingerprint';
import { useCommonStore } from '@/store/modules/commonStore' import { useCommonStore } from '@/store/modules/commonStore'
const mbStore = useCommonStore(); const mbStore = useCommonStore();
// 使用自定义hook获取指纹信息 // 使用自定义hook获取指纹信息
const { const { fingerprint, getFingerprint } = useFingerprint();
fingerprint,
loading,
error,
getFingerprint
} = useFingerprint();
onMounted(() => {
nextTick(() => {
// 初始化主题样式
handleThemeStyle(useSettingsStore().theme)
})
if (!mbStore.fingerprint) { if (!mbStore.fingerprint) {
// 重新获取指纹 // 重新获取指纹
getFingerprint(); getFingerprint();
mbStore.setFingerprint(fingerprint) mbStore.setFingerprint(fingerprint)
} }
onMounted(() => {
nextTick(() => {
// 初始化主题样式
handleThemeStyle(useSettingsStore().theme)
})
}) })

View File

@ -124,6 +124,7 @@ aside {
//main-container全局样式 //main-container全局样式
.app-container { .app-container {
padding: 10px 10px 0 10px; padding: 10px 10px 0 10px;
min-height: calc(100vh - 84px);
} }
.components-container { .components-container {
@ -303,4 +304,8 @@ aside {
color: #fff; color: #fff;
cursor: pointer; cursor: pointer;
} }
.next_btn {
margin-right: 0.2rem;
}
} }

View File

@ -13,10 +13,10 @@
<template> <template>
<div class="common-table-container"> <div class="common-table-container">
<vxe-table :data="tableData" :loading="loading" border height="auto" :checkbox-config="config.checkboxConfig" <vxe-table :data="tableData" :loading="loading" border :checkbox-config="config.checkboxConfig"
@checkbox-change="handleCheckboxChange" :row-config="rowConfig" :show-overflow="showOverflow" :height="scrollYConfig.height" @checkbox-change="handleCheckboxChange" :row-config="rowConfig"
@current-change="handleRowClick" ref="tableRef" :size="size" :current-row="currentRow" :show-overflow="showOverflow" @current-change="handleRowClick" ref="tableRef" :size="size"
:highlight-current-row="highlightCurrentRow" :scroll-y="scrollYConfig" :current-row="currentRow" :highlight-current-row="highlightCurrentRow" :scroll-y="scrollYConfig"
:header-cell-class-name="enableColumnDrag ? 'el-table-header-cell' : ''" v-bind="$attrs"> :header-cell-class-name="enableColumnDrag ? 'el-table-header-cell' : ''" v-bind="$attrs">
<!-- 动态渲染列 --> <!-- 动态渲染列 -->
<template v-for="(column, i) in columns" :key="`${column.field}-${i}`"> <template v-for="(column, i) in columns" :key="`${column.field}-${i}`">
@ -88,7 +88,11 @@ const props = defineProps({
// 纵向滚动配置 // 纵向滚动配置
scrollYConfig: { scrollYConfig: {
type: Object, type: Object,
default: () => ({ enabled: true, rSize: 30, adaptive: true }) default: () => ({
enabled: true, // 强制启用虚拟滚动
rSize: 30, // 行高(需与实际行高一致)
height: 600, // 固定表格高度(关键,单位px)
})
}, },
// 表格尺寸 // 表格尺寸
size: { size: {

View File

@ -21,24 +21,24 @@ const tagsViewStore = useTagsViewStore()
<style lang="scss" scoped> <style lang="scss" scoped>
.app-main { .app-main {
/* 50= navbar 50 */ /* 50= navbar 50 */
min-height: calc(100vh - 50px); min-height: calc(100vh - 3.125rem);
width: 100%; width: 100%;
position: relative; position: relative;
overflow: hidden; overflow: hidden;
} }
.fixed-header+.app-main { .fixed-header+.app-main {
padding-top: 50px; padding-top: 3.125rem;
} }
.hasTagsView { .hasTagsView {
.app-main { .app-main {
/* 84 = navbar + tags-view = 50 + 34 */ /* 84 = navbar + tags-view = 50 + 34 */
min-height: calc(100vh - 84px); min-height: calc(100vh - 5.25rem);
} }
.fixed-header+.app-main { .fixed-header+.app-main {
padding-top: 84px; padding-top: 5.25rem;
} }
} }
</style> </style>
@ -65,4 +65,3 @@ const tagsViewStore = useTagsViewStore()
border-radius: 3px; border-radius: 3px;
} }
</style> </style>

View File

@ -1,12 +1,8 @@
<template> <template>
<div class="navbar"> <div class="navbar">
<!-- 侧边栏折叠按钮(保留原有功能) --> <!-- 侧边栏折叠按钮(保留原有功能) -->
<hamburger <hamburger id="hamburger-container" :is-active="appStore.sidebar.opened" class="hamburger-container"
id="hamburger-container" @toggleClick="toggleSideBar" />
:is-active="appStore.sidebar.opened"
class="hamburger-container"
@toggleClick="toggleSideBar"
/>
<!-- 核心改造:替换面包屑/顶部导航,改为产品名称 + 登录信息布局 --> <!-- 核心改造:替换面包屑/顶部导航,改为产品名称 + 登录信息布局 -->
<div class="custom-header-content"> <div class="custom-header-content">
@ -137,20 +133,24 @@ function setLayout() {
<style lang='scss' scoped> <style lang='scss' scoped>
.navbar { .navbar {
height: 50px; /* 固定高度,与原有一致 */ height: 3.125rem;
/* 固定高度,与原有一致 */
overflow: hidden; overflow: hidden;
position: relative; position: relative;
//background: #fff; //background: #fff;
background: #0d9488; background: #0d9488;
box-shadow: 0 1px 4px rgba(0, 21, 41, 0.15); box-shadow: 0 1px 4px rgba(0, 21, 41, 0.15);
//box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08); //box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);
display: flex; /* 改为flex布局,确保子元素对齐 */ display: flex;
align-items: center; /* 垂直居中 */ /* 改为flex布局,确保子元素对齐 */
align-items: center;
/* 垂直居中 */
.hamburger-container { .hamburger-container {
line-height: 50px; /* 与导航栏高度一致 */ line-height: 3.125rem;
/* 与导航栏高度一致 */
height: 100%; height: 100%;
padding: 0 16px; padding: 0 1rem;
cursor: pointer; cursor: pointer;
transition: background 0.3s; transition: background 0.3s;
-webkit-tap-highlight-color: transparent; -webkit-tap-highlight-color: transparent;
@ -165,19 +165,23 @@ function setLayout() {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
flex: 1; /* 占满剩余宽度 */ flex: 1;
padding: 0 20px; /* 占满剩余宽度 */
padding: 0 1.25rem;
height: 100%; height: 100%;
margin-left: 5px; margin-left: .3125rem;
} }
/* 产品名称样式 */ /* 产品名称样式 */
.app-name { .app-name {
font-size: 18px; font-size: 1.125rem;
font-weight: 600; font-weight: 600;
color: #fff; /* 若依主题色,可替换为品牌色 */ color: #fff;
white-space: nowrap; /* 防止换行 */ /* 若依主题色,可替换为品牌色 */
font-style: italic; /* 关键:字体倾斜 */ white-space: nowrap;
/* 防止换行 */
font-style: italic;
/* 关键:字体倾斜 */
/* 可选优化:增加倾斜角度控制(默认 italic 约 14 度,可自定义) */ /* 可选优化:增加倾斜角度控制(默认 italic 约 14 度,可自定义) */
/* transform: skewX(-10deg); /* 向左倾斜 10 度,正负值控制倾斜方向 */ /* transform: skewX(-10deg); /* 向左倾斜 10 度,正负值控制倾斜方向 */
} }
@ -186,13 +190,15 @@ function setLayout() {
.right-content { .right-content {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 12px; /* 元素间距,可调整 */ gap: .75rem;
white-space: nowrap; /* 防止换行 */ /* 元素间距,可调整 */
white-space: nowrap;
/* 防止换行 */
} }
/* 用户信息样式 */ /* 用户信息样式 */
.user-info { .user-info {
font-size: 14px; font-size: .875rem;
font-weight: 600; font-weight: 600;
display: flex; display: flex;
align-items: center; align-items: center;
@ -204,9 +210,9 @@ function setLayout() {
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
padding: 0 8px; padding: 0 .5rem;
height: 100%; height: 100%;
font-size: 18px; font-size: 1.125rem;
color: #5a5e66; color: #5a5e66;
vertical-align: text-bottom; vertical-align: text-bottom;
@ -226,19 +232,23 @@ function setLayout() {
position: relative; position: relative;
display: flex; display: flex;
align-items: center; align-items: center;
gap: 4px; /* 头像与下拉图标间距 */ gap: .25rem;
/* 头像与下拉图标间距 */
.user-avatar { .user-avatar {
cursor: pointer; cursor: pointer;
width: 36px; /* 调整头像大小 */ width: 2.25rem;
height: 36px; /* 调整头像大小 */
border-radius: 50%; /* 圆形头像,可改为10px保持原有风格 */ height: 2.25rem;
object-fit: cover; /* 防止头像变形 */ border-radius: 50%;
/* 圆形头像,可改为10px保持原有风格 */
object-fit: cover;
/* 防止头像变形 */
} }
i { i {
cursor: pointer; cursor: pointer;
font-size: 12px; font-size: .75rem;
color: #5a5e66; color: #5a5e66;
} }
} }

View File

@ -39,11 +39,6 @@ export function useFingerprint() {
} }
}; };
// 组件挂载时自动获取指纹
onMounted(() => {
// getFingerprint();
});
return { return {
fingerprint, fingerprint,
loading, loading,

View File

@ -0,0 +1,273 @@
<template>
<el-popover :visible="selectVisible" placement="bottom" :width="'18vw'" @after-enter="initClickOutside">
<el-form :model="queryParams" class="query-form" label-width="5.625rem">
<!-- 病人类型选择 -->
<el-form-item label="病人类型:" prop="brly">
<el-select v-model="queryParams.brly" placeholder="全部" clearable>
<el-option v-for="item in brlyOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="药敏:" prop="finish">
<el-radio-group v-model="queryParams.finish" @change="handleRadioChange">
<el-radio value="1" @click.native="handleRadioClick('1', 'finish')">已完成</el-radio>
<el-radio value="0" @click.native="handleRadioClick('0', 'finish')">未完成</el-radio>
</el-radio-group>
</el-form-item>
<!-- 审核状态选择 -->
<el-form-item label="审核状态:" prop="jgbz">
<el-radio-group v-model="queryParams.jgbz" @change="handleRadioChange">
<el-radio value="2" @click.native="handleRadioClick('2', 'jgbz')">已审核</el-radio>
<el-radio value="3" @click.native="handleRadioClick('3', 'jgbz')">初报</el-radio>
<el-radio value="4" @click.native="handleRadioClick('4', 'jgbz')">二报</el-radio>
</el-radio-group>
</el-form-item>
<el-row>
<el-col :span="7">
</el-col>
<el-col :span="7">
<!-- 危急值选择 -->
<el-form-item prop="alarmflag" label-width="0">
<el-checkbox v-model="queryParams.alarmflag" true-value="1" false-value=""> 警 </el-checkbox>
</el-form-item>
</el-col>
<el-col :span="8">
<!-- 急诊选择 -->
<el-form-item prop="jzbz" label-width="0">
<el-checkbox v-model="queryParams.jzbz" true-value="1" false-value=""> 急诊 </el-checkbox>
</el-form-item>
</el-col>
</el-row>
<!-- 打印状态选择 -->
<el-form-item label="打印状态:" prop="dybz">
<el-radio-group v-model="queryParams.dybz" @chnage="handleRadioChange">
<el-radio value="1" @click.native="handleRadioClick('1', 'dybz')">已打印</el-radio>
<el-radio value="0" @click.native="handleRadioClick('0', 'dybz')">未打印</el-radio>
</el-radio-group>
</el-form-item>
<!-- 操作按钮 -->
<el-form-item>
<el-button type="primary" @click="handleQuery" :size="props.size">确认查询</el-button>
<el-button @click="handleReset" style="margin-left: 0.5rem" :size="props.size">重置</el-button>
</el-form-item>
</el-form>
<template #reference>
<el-input v-model="selectShowValue" :size="props.size" @clear="clearHandle"
@click="selectVisible = !selectVisible" :placeholder="props.placeholder" readonly
:style="{ width: props.width }" suffix-icon="ArrowDown" :clearable="props.clearable" />
</template>
</el-popover>
</template>
<script setup lang="ts">
import { ref, defineProps, defineEmits, nextTick, watch } from 'vue'
import { ElMessage } from 'element-plus'
// 定义下拉选项类型
interface OptionItem {
label: string
value: string | number
}
// 定义查询参数类型
interface QueryParams {
brly?: string | number
jgbz?: string | number
dybz?: string | number
alarmflag?: string | number
jzbz?: string | number
finish?: string | number
autojgbz?: string | number
}
// 定义组件Props
const props = defineProps<{
// 可传入初始查询参数
initialParams?: Partial<QueryParams>,
// 宽度
width?: string,
// 是否禁用
disabled?: boolean,
// 是否可清空
clearable?: boolean,
// 是否显示查询按钮
showQueryButton?: boolean,
// 是否显示重置按钮
showResetButton?: boolean,
// 尺寸
size?: 'large' | 'default' | 'small',
// 占位符
placeholder?: string,
dictData?: any
}>()
watch(() => props.dictData, () => {
brlyOptions.value = props.dictData.PT
optionMaps.brly = props.dictData.PT
})
// 定义组件事件
const emit = defineEmits<{
// 查询事件,返回查询参数
(e: 'query', params: QueryParams): void
// 重置事件
(e: 'reset'): void
}>()
const selectVisible = ref(false)
const selectShowValue = ref('')
const selectRef = ref()
// 病人类型选项
const brlyOptions = ref<OptionItem[]>([])
// 审核状态选项
const jgbzOptions: OptionItem[] = [
{ label: '已审核', value: 2 },
{ label: '初报', value: 3 },
{ label: '二报', value: 4 },
]
// 打印状态选项
const dybzOptions: OptionItem[] = [
{ label: '未打印', value: 0 },
{ label: '已打印', value: 1 },
]
// 危急值选项
const alarmflagOptions: OptionItem[] = [
{ label: '危急值', value: 1 },
{ label: '无', value: 0 }
]
// 急诊选项
const emergencyOptions: OptionItem[] = [
{ label: '急诊', value: 1 },
{ label: '否', value: 0 }
]
// 完成状态选项
const finishOptions: OptionItem[] = [
{ label: '未完成', value: 0 },
{ label: '已完成', value: 1 },
]
// 自审状态选项
const autojgbzOptions: OptionItem[] = [
{ label: '否', value: 0 },
{ label: '自审', value: 1 },
]
// 创建选项映射关系,方便查找label
const optionMaps = {
brly: props.dictData.PT,
jgbz: jgbzOptions,
dybz: dybzOptions,
alarmflag: alarmflagOptions,
jzbz: emergencyOptions,
finish: finishOptions,
autojgbz: autojgbzOptions
}
// 查询参数
const queryParams = ref<QueryParams>({
...props.initialParams
})
// 由于更多按钮在 app 元素内,给 app 元素注册的点击事件必须在弹出框显示后并且是一次性的
// 防止更多按钮的事件与之冲突
const initClickOutside = () => {
document.getElementById('app')!.addEventListener('click', () => {
selectVisible.value = false
}, { once: true })
}
// 记录上一次选中的值
const lastRadioValue = ref<string | undefined>(undefined);
const handleRadioChange = (value: string) => {
lastRadioValue.value = value;
};
const handleRadioClick = (value: string, zd: keyof QueryParams) => {
if (value === lastRadioValue.value) {
setTimeout(() => {
queryParams.value[zd] = undefined;
lastRadioValue.value = undefined;
}, 100);
} else {
lastRadioValue.value = value;
}
};
const clearHandle = () => {
queryParams.value = {}
selectShowValue.value = ''
}
// 根据值和选项列表获取对应的label
const getLabelByValue = (value: string | number | undefined, options: OptionItem[]) => {
if (value === undefined || value === null || value === '') return ''
const item = options.find(option => option.value == value)
return item ? item.label : ''
}
// 处理查询
const handleQuery = () => {
// 过滤空值参数
const filteredParams = Object.fromEntries(
Object.entries(queryParams.value).filter(([_, v]) => v !== undefined && v !== null && v !== '')
) as QueryParams
// 收集所有选中项的label
const labels: string[] = []
Object.entries(filteredParams).forEach(([key, value]) => {
// @ts-ignore
const options = optionMaps[key]
if (options) {
const label = getLabelByValue(value, options)
if (label) labels.push(label)
}
})
// 拼接label并设置到显示值
selectShowValue.value = labels.join(',')
console.log('selectShowValue.value==>', selectShowValue.value);
emit('query', filteredParams)
selectVisible.value = false;
}
// 处理重置
const handleReset = () => {
selectShowValue.value = ''
queryParams.value = {}
selectVisible.value = false;
emit('reset')
}
</script>
<style scoped lang="scss">
.query-form {
:deep(.el-form-item) {
margin-bottom: .5rem;
}
}
/* 响应式调整 */
@media (max-width: 768px) {
.query-form {
:deep(.el-form-item) {
margin-bottom: 12px;
width: 100%;
}
}
}
</style>

View File

@ -5,51 +5,40 @@
<div class="box-shadow"> <div class="box-shadow">
<el-form :model="queryParams" ref="queryRef" :inline="true" :size="aotuSize" :rules="rules" <el-form :model="queryParams" ref="queryRef" :inline="true" :size="aotuSize" :rules="rules"
class="compact-form"> class="compact-form">
<el-row :gutter="5">
<el-col :span="6">
<el-form-item label="" prop="ybh"> <el-form-item label="" prop="ybh">
<div class="next_box"> <div class="next_box">
<el-button-group>
<el-tooltip class="box-item" effect="dark" content="上一个" placement="top">
<el-button type="primary" class="jt_btn" :size="aotuSize" icon="ArrowUpBold" <el-button type="primary" class="jt_btn" :size="aotuSize" icon="ArrowUpBold"
@click="handlePrev"></el-button> @click="handlePrev"></el-button>
<el-input v-model="queryParams.ybh" placeholder="样本编号" @keyup.enter="handleQuery" </el-tooltip>
style="width:100%" /> <el-tooltip class="box-item" effect="dark" content="下一个" placement="top">
<el-button type="primary" class="jt_btn" :size="aotuSize" icon="ArrowDownBold" <el-button type="primary" class="jt_btn next_btn" :size="aotuSize" icon="ArrowDownBold"
@click="handleNext"></el-button> @click="handleNext"></el-button>
</el-tooltip>
</el-button-group>
<el-input v-model="queryParams.ybh" placeholder="样本编号" @keyup.enter="handleQuery"
style="width:14.5rem" />
</div> </div>
</el-form-item> </el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="日期:" prop="jyrq"> <el-form-item label="日期:" prop="jyrq">
<el-date-picker v-model="ybJyrq" type="date" label-width="1.25rem" placeholder="检验日期" <el-date-picker v-model="ybJyrq" type="date" label-width="1.25rem" placeholder="检验日期"
value-format="YYYY-MM-DD" :clearable="false" @change="jyrqChange" ref="datePickerRef" value-format="YYYY-MM-DD" :clearable="false" @change="jyrqChange" ref="datePickerRef"
style="width:100%" /> style="width:7.5rem" />
</el-form-item> </el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="部门:" prop="instrGroup"> <el-form-item label="部门:" prop="instrGroup">
<SelectTable v-model:data="queryParams.instrGroup" :fields="instrGroupFields" <SelectTable v-model:data="queryParams.instrGroup" :fields="instrGroupFields"
:tableData="instrGroupOptions" label="zdmc" value="zddh" objKey="zddh" :border="true" width="9rem" :tableData="instrGroupOptions" label="zdmc" value="zddh" objKey="zddh" :border="true" width="9rem"
placeholder="请选择部门" @getDataValue="handleinstrGroupChange" :clearable="false" :size="aotuSize" /> placeholder="请选择部门" @getDataValue="handleinstrGroupChange" :clearable="false" :size="aotuSize" />
</el-form-item> </el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="仪器:" prop="yq"> <el-form-item label="仪器:" prop="yq">
<SelectTable v-model:data="queryParams.yq" :fields="yqFields" :tableData="instrOptions" label="yqmc" <SelectTable v-model:data="queryParams.yq" :fields="yqFields" :tableData="instrOptions" label="yqmc"
value="yq" objKey="yq" :border="true" width="9rem" placeholder="请选择仪器" :clearable="false" value="yq" objKey="yq" :border="true" width="10rem" placeholder="请选择仪器" :clearable="false"
:size="aotuSize" @getDataValue="yqHandleChange" /> :size="aotuSize" @getDataValue="yqHandleChange" />
</el-form-item> </el-form-item>
</el-col>
</el-row>
<!-- <el-form-item>
<el-icon color="#3c80d9" size="20" style="margin-right: 10px;" class="cp">
<Search @click="fetchlabPatList" />
</el-icon>
<el-icon color="#3c80d9" size="20" class="cp" @click="selectJob(labPat)">
<Refresh />
</el-icon>
</el-form-item> -->
</el-form> </el-form>
<el-row :gutter="5"> <el-row :gutter="5">
<el-col :span="8"> <el-col :span="8">
@ -88,12 +77,20 @@
<template v-if="activeTab == 'LabPatList'"> <template v-if="activeTab == 'LabPatList'">
<div class="flex-between"> <div class="flex-between">
<div> <div>
<el-tooltip class="box-item" effect="dark" content="刷新" placement="top">
<el-button type="primary" :size="aotuSize" icon="RefreshRight" circle <el-button type="primary" :size="aotuSize" icon="RefreshRight" circle
@click="fetchlabPatList"></el-button> @click="fetchlabPatList"></el-button>
</el-tooltip>
<el-tooltip class="box-item" effect="dark" content="删除" placement="top">
<el-button type="danger" :size="aotuSize" icon="Delete" circle @click="delSampleHd"></el-button> <el-button type="danger" :size="aotuSize" icon="Delete" circle @click="delSampleHd"></el-button>
</el-tooltip>
<el-tooltip class="box-item" effect="dark" content="上一个" placement="top">
<el-button class="btn_green" :size="aotuSize" icon="top" circle @click="handlePrev"></el-button> <el-button class="btn_green" :size="aotuSize" icon="top" circle @click="handlePrev"></el-button>
</el-tooltip>
<el-tooltip class="box-item" effect="dark" content="下一个" placement="top">
<el-button class="btn_green mr5" :size="aotuSize" icon="bottom" circle <el-button class="btn_green mr5" :size="aotuSize" icon="bottom" circle
@click="handleNext"></el-button> @click="handleNext"></el-button>
</el-tooltip>
<PatientQueryForm :initial-params="initialParams" @query="handleQueryResult" @reset="handleReset" <PatientQueryForm :initial-params="initialParams" @query="handleQueryResult" @reset="handleReset"
width="14rem" :size="aotuSize" placeholder="查询条件" :dict-data="dictData" :clearable="true" /> width="14rem" :size="aotuSize" placeholder="查询条件" :dict-data="dictData" :clearable="true" />
<el-input v-model="searchText" clearable :size="aotuSize" @keyup.enter="searchQuery" class="ml10" <el-input v-model="searchText" clearable :size="aotuSize" @keyup.enter="searchQuery" class="ml10"
@ -122,12 +119,11 @@
<LabPatList ref="labPatListRef" :labPatList="labPatList" :loading="loading" @select="selectJob" <LabPatList ref="labPatListRef" :labPatList="labPatList" :loading="loading" @select="selectJob"
:tableKey="{ ...queryParams, jyrq: ybJyrq }" :dictData="dictData" @search="searchJobs" /> :tableKey="{ ...queryParams, jyrq: ybJyrq }" :dictData="dictData" @search="searchJobs" />
<div class="button-group"> <!-- <div class="button-group">
<el-pagination v-model:current-page="queryParams.pageNum" v-model:page-size="queryParams.pageSize" <el-pagination v-model:current-page="queryParams.pageNum" v-model:page-size="queryParams.pageSize"
:page-sizes="[300, 600, 1000]" :size="aotuSize" background :page-sizes="[300, 600, 1000]" :size="aotuSize" background layout="total, sizes, prev, pager, next"
layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handleSizeChange" :total="total" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
@current-change="handleCurrentChange" /> </div> -->
</div>
</template> </template>
<!-- tab栏 内容 --> <!-- tab栏 内容 -->
@ -177,14 +173,14 @@ import Record from './labresult/record.vue';
// @ts-ignore // @ts-ignore
import { comDict } from '@/utils/dict' import { comDict } from '@/utils/dict'
import { queryLabResults, loadDefault, instrdconfig, delSample, getGroupInstrdList, checkuser, updateLabPat } from "@/api/liswork/work/LisWork"; import { queryLabResults, loadDefault, instrdconfig, delSample, getGroupInstrdList, checkuser, updateLabPat } from "@/api/liswork/work/LisWork";
import { wswsamplelistpage, sampleMedInfo, changepatjyrq, wswsampleinfo } from "@/api/liswork/micro/index"; import { wswsampleList, sampleMedInfo, changepatjyrq, wswsampleinfo } from "@/api/liswork/micro/index";
import { getComDicts, queryComDictListService } from "@/api/liswork/dict/ComDict"; import { getComDicts, queryComDictListService } from "@/api/liswork/dict/ComDict";
import { ElMessage, ElMessageBox } from "element-plus"; import { ElMessage, ElMessageBox } from "element-plus";
import BatchCode from '../work/components/batchCode.vue'; import BatchCode from '../work/components/batchCode.vue';
import { getNextNumber, getPreviousNumber } from "@/utils/getNextNumber"; import { getNextNumber, getPreviousNumber } from "@/utils/getNextNumber";
import { useCommonStore } from '@/store/modules/commonStore'; import { useCommonStore } from '@/store/modules/commonStore';
import { classCom } from '@/utils/classCom'; import { classCom } from '@/utils/classCom';
import PatientQueryForm from '@/components/selectSearch/index.vue' import PatientQueryForm from './components/searchListFrom.vue'
// @ts-ignore // @ts-ignore
import { listUser } from '@/api/system/user.js' import { listUser } from '@/api/system/user.js'
import dayjs from 'dayjs' import dayjs from 'dayjs'
@ -200,9 +196,9 @@ const queryParams = ref({
instrGroup: '04', instrGroup: '04',
problemId: 0, problemId: 0,
days: -1, days: -1,
pageSize: 600, yhdh: '',
pageNum: 1, // pageSize: 600,
yhdh: '' // pageNum: 1,
}) })
@ -215,10 +211,10 @@ const wjs = ref(0)
const activeTab = ref('LabPatList') const activeTab = ref('LabPatList')
const tabList = ref([ const tabList = ref([
{ label: '标本列表', value: 'LabPatList' }, { label: '标本列表', value: 'LabPatList' },
{ label: '结果图形', value: 'ResultGraph' }, // { label: '结果图形', value: 'ResultGraph' },
{ label: '历史对照', value: 'History' }, { label: '历史对照', value: 'History' },
{ label: '其他结果', value: 'OthersResult' }, { label: '其他结果', value: 'OthersResult' },
{ label: '结果复查', value: 'Reexamination' }, // { label: '结果复查', value: 'Reexamination' },
{ label: '收费信息', value: 'Charge' }, { label: '收费信息', value: 'Charge' },
{ label: '组合项目', value: 'Combination' }, { label: '组合项目', value: 'Combination' },
{ label: '临床意义', value: 'Clinical' }, { label: '临床意义', value: 'Clinical' },
@ -268,6 +264,13 @@ const ybJyrq = ref('')
watch(() => labPat.value, (newValue) => { watch(() => labPat.value, (newValue) => {
queryParams.value.ybh = newValue.ybh; queryParams.value.ybh = newValue.ybh;
ybJyrq.value = newValue.jyrq; ybJyrq.value = newValue.jyrq;
if (newValue.jgbz == '2') {
activeName.value = 'first'
}
if (newValue.jgbz == '0' || newValue.jgbz == '3' || newValue.jgbz == '4') {
activeName.value = 'second'
}
}, { deep: true }); }, { deep: true });
const checkUserRef = ref() const checkUserRef = ref()
@ -336,9 +339,8 @@ const searchQuery = () => {
const searchStr = searchText.value.trim().toLowerCase(); const searchStr = searchText.value.trim().toLowerCase();
filterMhList = filterMhList.filter((item: any) => { filterMhList = filterMhList.filter((item: any) => {
// 处理 zjf大写转为小写 // 处理 zjf大写转为小写
const matchZjf = item.zjf && typeof item.zjf === 'string' const matchZjf = item.zjf && typeof item.zjf === 'string' ? item.zjf.toLowerCase().includes(searchStr) : false;
? item.zjf.toLowerCase().includes(searchStr) const matchBrxm = item.brxm && typeof item.brxm === 'string' && item.brxm.includes(searchStr);
: false; const matchBrxm = item.brxm && typeof item.brxm === 'string' && item.brxm.includes(searchStr);
const matchSqh = item.sqh && typeof item.sqh === 'string' && item.sqh.includes(searchStr); const matchSqh = item.sqh && typeof item.sqh === 'string' && item.sqh.includes(searchStr);
return matchZjf || matchBrxm || matchSqh; return matchZjf || matchBrxm || matchSqh;
}); });
@ -699,28 +701,31 @@ const searchJobs = async (text: string, page: number, size: number) => {
fetchlabPatList() fetchlabPatList()
} }
const handleSizeChange = (size: number) => { // const handleSizeChange = (size: number) => {
queryParams.value.pageSize = size // queryParams.value.pageSize = size
fetchlabPatList() // fetchlabPatList()
} // }
const handleCurrentChange = (page: number) => { // const handleCurrentChange = (page: number) => {
queryParams.value.pageNum = page // queryParams.value.pageNum = page
fetchlabPatList() // fetchlabPatList()
} // }
//载入样本列表(右边labpatlist.vue组件) //载入样本列表(右边labpatlist.vue组件)
const fetchlabPatList = () => { const fetchlabPatList = () => {
loading.value = true; loading.value = true;
wswsamplelistpage(queryParams.value).then((res: any) => { wswsampleList(queryParams.value).then((res: any) => {
if (res.code == 200) { if (res.code == 0) {
labPatList.value = res.rows; labPatList.value = res.data;
originalLabPatList.value = res.rows;
total.value = res.total;
loading.value = false; loading.value = false;
if (res.rows.length > 0) { originalLabPatList.value = res.data;
if (res.data.length > 0) {
highlightRowIndex.value = 0; highlightRowIndex.value = 0;
setTimeout(() => { labPatListRef.value.setCurrentRow(res.rows[0]) }, 10) setTimeout(() => { labPatListRef.value.setCurrentRow(res.data[0]) }, 10)
selectJob(res.rows[0]) selectJob(res.data[0])
} else {
labInfo.value = {}
labPat.value = {}
zbLabResuts.value = []
} }
} }
}) })
@ -858,7 +863,6 @@ const sendMessage = () => {
border-radius: .75rem; border-radius: .75rem;
padding: .5rem; padding: .5rem;
background-color: #fff; background-color: #fff;
} }
.radio_box { .radio_box {
@ -878,9 +882,19 @@ const sendMessage = () => {
} }
.compact-form { .compact-form {
display: flex;
justify-content: space-between;
border-bottom: 1px solid #E1E9F7; border-bottom: 1px solid #E1E9F7;
margin-bottom: 0.5rem; margin-bottom: 0.5rem;
:deep(.el-form-item__label) {
padding: 0 !important;
}
:deep(.el-form-item) {
margin-right: 0;
}
.el-form-item--default { .el-form-item--default {
margin-bottom: .3125rem !important; margin-bottom: .3125rem !important;
} }

View File

@ -5,7 +5,7 @@
@keyup.enter="handleInputFocus" /> @keyup.enter="handleInputFocus" />
<el-button type="primary" :size="aotuSize" @click="batchHandle">扫码</el-button> <el-button type="primary" :size="aotuSize" @click="batchHandle">扫码</el-button>
</div> </div>
<el-form :model="labPat" label-width="5rem" class="compact-form" label-position="right"> <el-form :model="labPat" label-width="4.5rem" class="compact-form" label-position="right">
<div :class="['sh_box', getColor(lastJgbz)]" v-if="lastJgbz != null && lastJgbz != 0 && lastJgbz != 'C'"> <div :class="['sh_box', getColor(lastJgbz)]" v-if="lastJgbz != null && lastJgbz != 0 && lastJgbz != 'C'">
<div class="text">{{ getLableType(lastJgbz) }}</div> <div class="text">{{ getLableType(lastJgbz) }}</div>
</div> </div>

View File

@ -3,7 +3,8 @@
<ContextMenu :items="contextMenuItems" @select="handleMenuSelect" menu-width="200"> <ContextMenu :items="contextMenuItems" @select="handleMenuSelect" menu-width="200">
<CommonTable :table-data="labPatList" :loading="loading" :columns="tableColumns" <CommonTable :table-data="labPatList" :loading="loading" :columns="tableColumns"
:row-config="{ isHover: true, keyField: 'ybh' }" @current-change="handleRowClick" size="small" :row-config="{ isHover: true, keyField: 'ybh' }" @current-change="handleRowClick" size="small"
:row-style="rowStyle" :cell-style="cellStyle" class="mytable-style" ref="tableRef" :enable-column-drag="true" :scrollYConfig="{ enabled: true, rSize: 30, height: '100%', }" :row-style="rowStyle"
:cell-style="cellStyle" class="mytable-style" ref="tableRef" :enable-column-drag="true"
@column-drag-end="handleColumnDragEnd"> @column-drag-end="handleColumnDragEnd">
<!-- 完成状态列 --> <!-- 完成状态列 -->
<template #finish="{ row }"> <template #finish="{ row }">
@ -40,10 +41,6 @@
{{ formatDict(row.yhdh, 'SRD') }} {{ formatDict(row.yhdh, 'SRD') }}
</template> </template>
<template #autojgbz="{ row }">
<el-checkbox :model-value="row.autojgbz === '1'" readonly />
</template>
<template #dybz="{ row }"> <template #dybz="{ row }">
<el-checkbox :model-value="row.dybz === '1'" readonly /> <el-checkbox :model-value="row.dybz === '1'" readonly />
</template> </template>
@ -255,7 +252,7 @@ defineExpose({
<style lang="scss" scoped> <style lang="scss" scoped>
.table-container { .table-container {
height: 72vh; height: 75vh;
.form-box { .form-box {
font-family: SourceHanSansCN, SourceHanSansCN; font-family: SourceHanSansCN, SourceHanSansCN;

View File

@ -202,21 +202,28 @@ const erInfo = ref<any>({})
const mbStore = useCommonStore(); const mbStore = useCommonStore();
watch(labPat, (newVal: any) => { watch(labPat, (newVal: any) => {
if (newVal.ybh) {
//获取结果列表 //获取结果列表
getResultList() getResultList()
// 获取病人信息 // 获取病人信息
getLabPatInfo() getLabPatInfo()
} else {
tableData.value = []
tableData2.value = []
cbInfo.value = {}
erInfo.value = {}
}
}) })
watch(() => tableData, (newValue) => { watch(() => tableData, (newValue) => {
// 模板数据 // 模板数据
if (labPat.value.jgbz != null && labPat.value.jgbz != 0 && labPat.value.jgbz != 'C') return; if (cbInfo.value?.jgbz == 2 || erInfo.value?.jgbz == 2 || labPat.value.jgbz == 2) return;
mbList(1) mbList(1)
}) })
watch(() => tableData2, (newValue) => { watch(() => tableData2, (newValue) => {
// 模板数据 // 模板数据
if (labPat.value.jgbz != null && labPat.value.jgbz != 0 && labPat.value.jgbz != 'C') return; if (erInfo.value?.jgbz == 2 || labPat.value.jgbz == 2) return;
mbList(2) mbList(2)
}) })

View File

@ -189,6 +189,9 @@ const getbyjList = () => {
watch(() => props.labPat, (newValue) => { watch(() => props.labPat, (newValue) => {
if (newValue.jyrq && newValue.ybh && newValue.yq) { if (newValue.jyrq && newValue.ybh && newValue.yq) {
getbyjList() getbyjList()
} else {
tableData.value = []
selectedRows.value = []
} }
}) })

View File

@ -53,6 +53,8 @@ const getRecordList = () => {
watch(() => props.labPat, (newValue) => { watch(() => props.labPat, (newValue) => {
if (newValue.jyrq && newValue.ybh && newValue.yq) { if (newValue.jyrq && newValue.ybh && newValue.yq) {
getRecordList() getRecordList()
} else {
tableData.value = []
} }
}) })

View File

@ -670,8 +670,6 @@ const mbStore = useCommonStore();
const tableData: any = ref([]) const tableData: any = ref([])
watch(labResutsData, (newVal: any) => { watch(labResutsData, (newVal: any) => {
console.log("🚀 ~ newVal:", newVal)
if (newVal.length) { if (newVal.length) {
tableData.value = newVal.map((item: any) => { tableData.value = newVal.map((item: any) => {
return { return {
@ -724,7 +722,6 @@ const handleTextarea = () => {
}; };
const rowInfo: any = ref({}) const rowInfo: any = ref({})
const rowHandle = (row: any) => { const rowHandle = (row: any) => {
console.log('row==>', row);
selectedRows.value = [row]; selectedRows.value = [row];
emitter.emitWithCache('refreshClinical', row); emitter.emitWithCache('refreshClinical', row);
rowInfo.value = row rowInfo.value = row

View File

@ -5,51 +5,41 @@
<div class="box-shadow"> <div class="box-shadow">
<el-form :model="queryParams" ref="queryRef" :inline="true" :size="aotuSize" :rules="rules" <el-form :model="queryParams" ref="queryRef" :inline="true" :size="aotuSize" :rules="rules"
class="compact-form"> class="compact-form">
<el-row :gutter="5">
<el-col :span="6">
<el-form-item label="" prop="ybh"> <el-form-item label="" prop="ybh">
<div class="next_box"> <div class="next_box">
<el-button-group>
<el-tooltip class="box-item" effect="dark" content="上一个" placement="top">
<el-button type="primary" class="jt_btn" :size="aotuSize" icon="ArrowUpBold" <el-button type="primary" class="jt_btn" :size="aotuSize" icon="ArrowUpBold"
@click="handlePrev"></el-button> @click="handlePrev"></el-button>
<el-input v-model="queryParams.ybh" placeholder="样本编号" @keyup.enter="handleQuery" </el-tooltip>
style="width:100%" /> <el-tooltip class="box-item" effect="dark" content="下一个" placement="top">
<el-button type="primary" class="jt_btn" :size="aotuSize" icon="ArrowDownBold" <el-button type="primary" class="jt_btn next_btn" :size="aotuSize" icon="ArrowDownBold"
@click="handleNext"></el-button> @click="handleNext"></el-button>
</el-tooltip>
</el-button-group>
<el-input v-model="queryParams.ybh" placeholder="样本编号" @keyup.enter="handleQuery"
style="width:14.5rem" />
</div> </div>
</el-form-item> </el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="日期:" prop="jyrq"> <el-form-item label="日期:" prop="jyrq">
<el-date-picker v-model="queryParams.jyrq" type="date" label-width="1.25rem" placeholder="检验日期" <el-date-picker v-model="queryParams.jyrq" type="date" label-width="1.25rem" placeholder="检验日期"
value-format="YYYY-MM-DD" :clearable="false" @change="fetchlabPatList" value-format="YYYY-MM-DD" :clearable="false" @change="fetchlabPatList"
style="width:100%"></el-date-picker> style="width:7.5rem"></el-date-picker>
</el-form-item> </el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="部门:" prop="instrGroup"> <el-form-item label="部门:" prop="instrGroup">
<SelectTable v-model:data="queryParams.instrGroup" :fields="instrGroupFields" <SelectTable v-model:data="queryParams.instrGroup" :fields="instrGroupFields"
:tableData="instrGroupOptions" label="zdmc" value="zddh" objKey="zddh" :border="true" width="9rem" :tableData="instrGroupOptions" label="zdmc" value="zddh" objKey="zddh" :border="true" width="9rem"
placeholder="请选择部门" @getDataValue="handleinstrGroupChange" :clearable="false" :size="aotuSize" /> placeholder="请选择部门" @getDataValue="handleinstrGroupChange" :clearable="false" :size="aotuSize" />
</el-form-item> </el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="仪器:" prop="yq"> <el-form-item label="仪器:" prop="yq">
<SelectTable v-model:data="queryParams.yq" :fields="yqFields" :tableData="instrOptions" label="yqmc" <SelectTable v-model:data="queryParams.yq" :fields="yqFields" :tableData="instrOptions" label="yqmc"
value="yq" objKey="yq" :border="true" width="9rem" placeholder="请选择仪器" :clearable="false" value="yq" objKey="yq" :border="true" width="10rem" placeholder="请选择仪器" :clearable="false"
:size="aotuSize" @getDataValue="yqHandleChange" /> :size="aotuSize" @getDataValue="yqHandleChange" />
</el-form-item> </el-form-item>
</el-col>
</el-row>
<!-- <el-form-item>
<el-icon color="#3c80d9" size="20" style="margin-right: 10px;" class="cp">
<Search @click="fetchlabPatList" />
</el-icon>
<el-icon color="#3c80d9" size="20" class="cp" @click="selectJob(labPat)">
<Refresh />
</el-icon>
</el-form-item> -->
</el-form> </el-form>
<el-row :gutter="5"> <el-row :gutter="5">
<el-col :span="8"> <el-col :span="8">
@ -73,12 +63,20 @@
<template v-if="activeTab == 'LabPatList'"> <template v-if="activeTab == 'LabPatList'">
<div class="flex-between"> <div class="flex-between">
<div> <div>
<el-tooltip class="box-item" effect="dark" content="刷新" placement="top">
<el-button type="primary" :size="aotuSize" icon="RefreshRight" circle <el-button type="primary" :size="aotuSize" icon="RefreshRight" circle
@click="fetchlabPatList"></el-button> @click="fetchlabPatList"></el-button>
</el-tooltip>
<el-tooltip class="box-item" effect="dark" content="删除" placement="top">
<el-button type="danger" :size="aotuSize" icon="Delete" circle @click="delSampleHd"></el-button> <el-button type="danger" :size="aotuSize" icon="Delete" circle @click="delSampleHd"></el-button>
</el-tooltip>
<el-tooltip class="box-item" effect="dark" content="上一个" placement="top">
<el-button class="btn_green" :size="aotuSize" icon="top" circle @click="handlePrev"></el-button> <el-button class="btn_green" :size="aotuSize" icon="top" circle @click="handlePrev"></el-button>
</el-tooltip>
<el-tooltip class="box-item" effect="dark" content="下一个" placement="top">
<el-button class="btn_green mr5" :size="aotuSize" icon="bottom" circle <el-button class="btn_green mr5" :size="aotuSize" icon="bottom" circle
@click="handleNext"></el-button> @click="handleNext"></el-button>
</el-tooltip>
<PatientQueryForm :initial-params="initialParams" @query="handleQueryResult" @reset="handleReset" <PatientQueryForm :initial-params="initialParams" @query="handleQueryResult" @reset="handleReset"
width="14rem" :size="aotuSize" placeholder="查询条件" :dict-data="dictData" :clearable="true" /> width="14rem" :size="aotuSize" placeholder="查询条件" :dict-data="dictData" :clearable="true" />
<el-input v-model="searchText" clearable :size="aotuSize" @keyup.enter="searchQuery" class="ml10" <el-input v-model="searchText" clearable :size="aotuSize" @keyup.enter="searchQuery" class="ml10"
@ -228,9 +226,8 @@ const searchQuery = () => {
const searchStr = searchText.value.trim().toLowerCase(); const searchStr = searchText.value.trim().toLowerCase();
filterMhList = filterMhList.filter((item: any) => { filterMhList = filterMhList.filter((item: any) => {
// 处理 zjf大写转为小写 // 处理 zjf大写转为小写
const matchZjf = item.zjf && typeof item.zjf === 'string' const matchZjf = item.zjf && typeof item.zjf === 'string' ? item.zjf.toLowerCase().includes(searchStr) : false;
? item.zjf.toLowerCase().includes(searchStr) const matchBrxm = item.brxm && typeof item.brxm === 'string' && item.brxm.includes(searchStr);
: false; const matchBrxm = item.brxm && typeof item.brxm === 'string' && item.brxm.includes(searchStr);
const matchSqh = item.sqh && typeof item.sqh === 'string' && item.sqh.includes(searchStr); const matchSqh = item.sqh && typeof item.sqh === 'string' && item.sqh.includes(searchStr);
return matchZjf || matchBrxm || matchSqh; return matchZjf || matchBrxm || matchSqh;
}); });
@ -734,9 +731,19 @@ const sendMessage = () => {
} }
.compact-form { .compact-form {
display: flex;
justify-content: space-between;
border-bottom: 1px solid #E1E9F7; border-bottom: 1px solid #E1E9F7;
margin-bottom: 0.5rem; margin-bottom: 0.5rem;
:deep(.el-form-item__label) {
padding: 0 !important;
}
:deep(.el-form-item) {
margin-right: 0;
}
.el-form-item--default { .el-form-item--default {
margin-bottom: .3125rem !important; margin-bottom: .3125rem !important;
} }

View File

@ -5,7 +5,7 @@
@keyup.enter="handleInputFocus" /> @keyup.enter="handleInputFocus" />
<el-button type="primary" :size="aotuSize" @click="batchHandle">扫码</el-button> <el-button type="primary" :size="aotuSize" @click="batchHandle">扫码</el-button>
</div> </div>
<el-form :model="labPat" label-width="5rem" class="compact-form" label-position="right"> <el-form :model="labPat" label-width="4.5rem" class="compact-form" label-position="right">
<div :class="['sh_box', getColor(lastJgbz)]" v-if="lastJgbz != null && lastJgbz != 0 && lastJgbz != 'C'"> <div :class="['sh_box', getColor(lastJgbz)]" v-if="lastJgbz != null && lastJgbz != 0 && lastJgbz != 'C'">
<div class="text">{{ getLableType(lastJgbz) }}</div> <div class="text">{{ getLableType(lastJgbz) }}</div>
</div> </div>

View File

@ -3,8 +3,8 @@
<ContextMenu :items="contextMenuItems" @select="handleMenuSelect" menu-width="200"> <ContextMenu :items="contextMenuItems" @select="handleMenuSelect" menu-width="200">
<CommonTable :table-data="labPatList" :loading="loading" :columns="tableColumns" :dict-data="dictData" <CommonTable :table-data="labPatList" :loading="loading" :columns="tableColumns" :dict-data="dictData"
:row-config="{ isHover: true, keyField: 'ybh' }" @current-change="handleRowClick" size="small" :row-config="{ isHover: true, keyField: 'ybh' }" @current-change="handleRowClick" size="small"
:row-style="rowStyle" :cell-style="cellStyle" class="mytable-style" ref="tableRef" :enable-column-drag="true" :scrollYConfig="{ enabled: true, rSize: 30, height: '100%', }" :row-style="rowStyle" :cell-style="cellStyle"
@column-drag-end="handleColumnDragEnd"> class="mytable-style" ref="tableRef" :enable-column-drag="true" @column-drag-end="handleColumnDragEnd">
<!-- 完成状态列 --> <!-- 完成状态列 -->
<template #finish="{ row }"> <template #finish="{ row }">
<svg-icon v-if="row.finish == 1" icon-class="lvgou" /> <svg-icon v-if="row.finish == 1" icon-class="lvgou" />

View File

@ -9,11 +9,10 @@
@click="openItemDictDialog">新增</el-button> @click="openItemDictDialog">新增</el-button>
<el-button type="danger" :size="aotuSize" :disabled="labPat.jgbz != null && labPat.jgbz != 0" plain <el-button type="danger" :size="aotuSize" :disabled="labPat.jgbz != null && labPat.jgbz != 0" plain
@click="handleBatchDelete">删除</el-button> @click="handleBatchDelete">删除</el-button>
</div>
<div>
<el-button type="primary" plain icon="Files" :size="aotuSize" @click="previewHandle(1)">打印</el-button> <el-button type="primary" plain icon="Files" :size="aotuSize" @click="previewHandle(1)">打印</el-button>
<el-button type="primary" plain icon="View" :size="aotuSize" @click="previewHandle(2)">预览</el-button> <el-button type="primary" plain icon="View" :size="aotuSize" @click="previewHandle(2)">预览</el-button>
</div> </div>
<div> </div>
</div> </div>
<ContextMenu :items="contextMenuItems" @select="handleMenuSelect"> <ContextMenu :items="contextMenuItems" @select="handleMenuSelect">
<CustomTable ref="tableRef" :data="tableData" :columns="columns" :config="tableConfig" :enable-column-drag="true" <CustomTable ref="tableRef" :data="tableData" :columns="columns" :config="tableConfig" :enable-column-drag="true"