批量打印
This commit is contained in:
parent
880c4a0ba9
commit
3eb9a9d9f1
@ -36,3 +36,21 @@ export function queryBatchCheckDetailService(query: any) {
|
|||||||
params: query,
|
params: query,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 批量打印查询
|
||||||
|
export function queryBatchPrintService(query: any) {
|
||||||
|
return request({
|
||||||
|
url: "/batchPrint/queryList",
|
||||||
|
method: "post",
|
||||||
|
data: query,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// 批量打印数据
|
||||||
|
export function batchPrintAll(query: any) {
|
||||||
|
return request({
|
||||||
|
url: "/batchPrint/printAll",
|
||||||
|
method: "post",
|
||||||
|
data: query,
|
||||||
|
});
|
||||||
|
}
|
||||||
@ -3,44 +3,53 @@
|
|||||||
import request from '@/utils/request'
|
import request from '@/utils/request'
|
||||||
|
|
||||||
// 查询字典列表
|
// 查询字典列表
|
||||||
export function liststatstemp(params:any) {
|
export function liststatstemp(params: any) {
|
||||||
return request({
|
return request({
|
||||||
url: '/statstemp/list',
|
url: '/statstemp/list',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
params
|
params
|
||||||
})
|
})
|
||||||
|
}
|
||||||
|
// 复制模板
|
||||||
|
export function copyParameter(params: any) {
|
||||||
|
return request({
|
||||||
|
url: '/statstemp/param/copyparameter',
|
||||||
|
method: 'get',
|
||||||
|
params
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查询字典详细
|
// 查询字典详细
|
||||||
export function getstatstemp(id:number) {
|
export function getstatstemp(id: number) {
|
||||||
return request({
|
return request({
|
||||||
url: `/statstemp/${id}`,
|
url: `/statstemp/${id}`,
|
||||||
method: 'get'
|
method: 'get'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 新增字典
|
// 新增字典
|
||||||
export function addstatstemp(params:any) {
|
export function addstatstemp(params: any) {
|
||||||
return request({
|
return request({
|
||||||
url: '/statstemp',
|
url: '/statstemp',
|
||||||
method: 'post',
|
method: 'post',
|
||||||
data:params
|
data: params
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 修改字典
|
// 修改字典
|
||||||
export function updatestatstemp(params:any) {
|
export function updatestatstemp(params: any) {
|
||||||
return request({
|
return request({
|
||||||
url: '/statstemp',
|
url: '/statstemp',
|
||||||
method: 'put',
|
method: 'put',
|
||||||
data:params
|
data: params
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 删除字典
|
// 删除字典
|
||||||
export function delstatstemp(id:any) {
|
export function delstatstemp(id: any) {
|
||||||
return request({
|
return request({
|
||||||
url: `/statstemp/${id}`,
|
url: `/statstemp/${id}`,
|
||||||
method: 'delete'
|
method: 'delete'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -394,4 +394,79 @@ aside {
|
|||||||
.el-form-item {
|
.el-form-item {
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.bb_table {
|
||||||
|
.vxe-table.border--full {
|
||||||
|
border: 1px solid #ccc !important;
|
||||||
|
|
||||||
|
.vxe-header--column,
|
||||||
|
.vxe-body--column,
|
||||||
|
.vxe-footer--column {
|
||||||
|
border-right: 1px solid #ccc !important;
|
||||||
|
border-bottom: 1px solid #ccc !important;
|
||||||
|
height: 30px;
|
||||||
|
line-height: 30px;
|
||||||
|
padding: 0 !important;
|
||||||
|
background-image: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vxe-footer--column {
|
||||||
|
border-bottom: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* 表头最下方单元格强制底红线 */
|
||||||
|
.vxe-header--row:last-of-type .vxe-header--column {
|
||||||
|
border-bottom: 1px solid #ccc !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vxe-body--row {
|
||||||
|
border-bottom: 1px solid #ccc !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vxe-footer--row.vxe-footer--row {
|
||||||
|
border-top: 1px solid #ccc !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.vxe-header--row th {
|
||||||
|
height: 30px !important;
|
||||||
|
line-height: 30px;
|
||||||
|
padding: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vxe-body--row td {
|
||||||
|
height: 30px !important;
|
||||||
|
line-height: 30px;
|
||||||
|
padding: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.vxe-footer--row td {
|
||||||
|
height: 30px !important;
|
||||||
|
line-height: 30px;
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: 700;
|
||||||
|
padding: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 清除最后一列重复竖线,避免双线重叠 */
|
||||||
|
.vxe-header--col:last-child .vxe-header--column,
|
||||||
|
.vxe-body--col:last-child .vxe-body--column,
|
||||||
|
.vxe-footer--col:last-child .vxe-footer--column {
|
||||||
|
border-right: none !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.vxe-table--render-default .vxe-table--footer-wrapper {
|
||||||
|
border-top: 1px solid #ccc !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vxe-table--header-wrapper {
|
||||||
|
border-bottom: 1px solid #ccc !important;
|
||||||
|
background-color: #eff6fa !important;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -340,16 +340,17 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
.vxe-table {
|
|
||||||
border: 1px solid #96B8D9 !important;
|
|
||||||
border-top: none !important;
|
|
||||||
/* 蓝色外边框 */
|
|
||||||
border-radius: .5rem;
|
|
||||||
/* 可选:添加边框圆角 */
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mytable-style {
|
.mytable-style {
|
||||||
|
.vxe-table {
|
||||||
|
border: 1px solid #96B8D9 !important;
|
||||||
|
border-top: none !important;
|
||||||
|
/* 蓝色外边框 */
|
||||||
|
border-radius: .5rem;
|
||||||
|
/* 可选:添加边框圆角 */
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
.vxe-header--column {
|
.vxe-header--column {
|
||||||
word-break: break-word;
|
word-break: break-word;
|
||||||
@ -465,7 +466,7 @@
|
|||||||
/** 表格布局 **/
|
/** 表格布局 **/
|
||||||
.pagination-container {
|
.pagination-container {
|
||||||
position: relative;
|
position: relative;
|
||||||
height: 25px;
|
height: 50px;
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
margin-top: 15px;
|
margin-top: 15px;
|
||||||
padding: 10px 20px !important;
|
padding: 10px 20px !important;
|
||||||
|
|||||||
@ -55,7 +55,6 @@
|
|||||||
import { reactive, ref, onMounted, watch, nextTick, toRaw } from "vue";
|
import { reactive, ref, onMounted, watch, nextTick, toRaw } from "vue";
|
||||||
import { getFirstLetter } from '@/utils/pinyin';
|
import { getFirstLetter } from '@/utils/pinyin';
|
||||||
import { ElEmpty } from 'element-plus';
|
import { ElEmpty } from 'element-plus';
|
||||||
// @ts-ignore
|
|
||||||
import { comDict } from '@/utils/dict'
|
import { comDict } from '@/utils/dict'
|
||||||
import { getoptionselect } from '@/api/liswork/xtwh/localconfigApi'
|
import { getoptionselect } from '@/api/liswork/xtwh/localconfigApi'
|
||||||
import { Emits, Props } from '@/types';
|
import { Emits, Props } from '@/types';
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
//仪器,字典数据自动格式化类
|
//仪器,字典数据自动格式化类
|
||||||
import { DictData } from "@/types/index";
|
import { DictData } from "@/types/index";
|
||||||
import { getGroupInstrdList } from "@/api/liswork/work/LisWork";
|
import { getGroupInstrdList } from "@/api/liswork/work/LisWork";
|
||||||
//@ts-ignore
|
|
||||||
import { comDict } from "@/utils/dict";
|
import { comDict } from "@/utils/dict";
|
||||||
|
|
||||||
const dictData = ref<DictData>({});
|
const dictData = ref<DictData>({});
|
||||||
@ -19,16 +18,30 @@ export const getYqData = (data?: any) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
//'XMGL','ITEMCLASS', 'YQDL'
|
// 正在请求中的字典标记,防止并发重复调用
|
||||||
|
const pendingDict = new Set<string>()
|
||||||
|
|
||||||
export const getDictData = async (...args: string[]) => {
|
export const getDictData = async (...args: string[]) => {
|
||||||
const dictRefs = await comDict(...args);
|
// 过滤:无缓存 且 当前没有正在请求
|
||||||
// 遍历传入的字典类型参数,动态处理赋值
|
const needReqKeys = args.filter(key => !(key in dictData.value) && !pendingDict.has(key))
|
||||||
args.forEach((key) => {
|
|
||||||
if (dictRefs[key] !== undefined) {
|
if (needReqKeys.length === 0) return
|
||||||
dictData.value[key] = toRaw(dictRefs[key].value) || [];
|
|
||||||
}
|
// 标记开始请求
|
||||||
});
|
needReqKeys.forEach(k => pendingDict.add(k))
|
||||||
};
|
|
||||||
|
try {
|
||||||
|
const dictRefs = await comDict(...needReqKeys)
|
||||||
|
needReqKeys.forEach((key) => {
|
||||||
|
if (dictRefs[key] !== undefined) {
|
||||||
|
dictData.value[key] = toRaw(dictRefs[key].value) || []
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} finally {
|
||||||
|
// 请求结束无论成功失败都清除标记
|
||||||
|
needReqKeys.forEach(k => pendingDict.delete(k))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//字典数据格式化方法
|
//字典数据格式化方法
|
||||||
export const formatDict = (v: string, dictType: string) => {
|
export const formatDict = (v: string, dictType: string) => {
|
||||||
|
|||||||
@ -167,8 +167,8 @@
|
|||||||
import { ref, reactive, toRaw, computed, watch, nextTick, onMounted, } from 'vue';
|
import { ref, reactive, toRaw, computed, watch, nextTick, onMounted, } from 'vue';
|
||||||
import { HiprintPrinter } from '@/utils/hiprintPrinter';
|
import { HiprintPrinter } from '@/utils/hiprintPrinter';
|
||||||
import { classCom } from '@/utils/classCom';
|
import { classCom } from '@/utils/classCom';
|
||||||
import CustomTable from '@/components/elTable/index.vue'
|
import CustomTable from '@/components/ElTable/index.vue'
|
||||||
import CustomVxeTable from '@/components/vxeTable/index.vue'
|
import CustomVxeTable from '@/components/VxeTable/index.vue'
|
||||||
import { useRouter, useRoute } from 'vue-router'
|
import { useRouter, useRoute } from 'vue-router'
|
||||||
import { usePrintStore } from '@/store/modules/printStore'
|
import { usePrintStore } from '@/store/modules/printStore'
|
||||||
import { checkPrintService, downloadPrintSetup } from '@/utils/printHelper'
|
import { checkPrintService, downloadPrintSetup } from '@/utils/printHelper'
|
||||||
|
|||||||
@ -189,8 +189,8 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, reactive, toRaw, computed, watch, nextTick, onMounted } from 'vue';
|
import { ref, reactive, toRaw, computed, watch, nextTick, onMounted } from 'vue';
|
||||||
import CustomTable from '@/components/elTable/index.vue'
|
import CustomTable from '@/components/ElTable/index.vue'
|
||||||
import CustomVxeTable from '@/components/vxeTable/index.vue'
|
import CustomVxeTable from '@/components/VxeTable/index.vue'
|
||||||
import { useRouter } from 'vue-router'
|
import { useRouter } from 'vue-router'
|
||||||
import ContextMenu from "@/components/contextMenu/index.vue";
|
import ContextMenu from "@/components/contextMenu/index.vue";
|
||||||
import { reportList, reportPrintPdf, reportResult, reportMedList, reportFsresult, getSQDDetailList, getCdssUrl } from '@/api/checkCode/index'
|
import { reportList, reportPrintPdf, reportResult, reportMedList, reportFsresult, getSQDDetailList, getCdssUrl } from '@/api/checkCode/index'
|
||||||
|
|||||||
@ -196,8 +196,8 @@
|
|||||||
|
|
||||||
<script setup lang="ts" name="ReportQuery">
|
<script setup lang="ts" name="ReportQuery">
|
||||||
import { ref, reactive, toRaw, computed, watch, nextTick, onMounted } from 'vue';
|
import { ref, reactive, toRaw, computed, watch, nextTick, onMounted } from 'vue';
|
||||||
import CustomTable from '@/components/elTable/index.vue'
|
import CustomTable from '@/components/ElTable/index.vue'
|
||||||
import CustomVxeTable from '@/components/vxeTable/index.vue'
|
import CustomVxeTable from '@/components/VxeTable/index.vue'
|
||||||
import { reportList, reportPrintPdf, reportResult, reportMedList, reportFsresult } from '@/api/checkCode/index'
|
import { reportList, reportPrintPdf, reportResult, reportMedList, reportFsresult } from '@/api/checkCode/index'
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
import SelectTable from '@/components/SelectTable/index.vue';
|
import SelectTable from '@/components/SelectTable/index.vue';
|
||||||
|
|||||||
@ -11,10 +11,11 @@
|
|||||||
<div class="box-shadow">
|
<div class="box-shadow">
|
||||||
<el-row class="top-box">
|
<el-row class="top-box">
|
||||||
<el-col :span="8" class="col_box">
|
<el-col :span="8" class="col_box">
|
||||||
<el-button type="success" :size="aotuSize" :loading="saveLoading" @click="saveHandle">保存</el-button>
|
<el-button type="success" :size="aotuSize" :loading="saveLoading" plain @click="saveHandle">保存</el-button>
|
||||||
<el-button type="primary" :size="aotuSize" @click="addHandle">新增</el-button>
|
<el-button type="primary" :size="aotuSize" @click="addHandle" plain>新增</el-button>
|
||||||
<el-button type="warning" :size="aotuSize" :loading="printLoading" @click="printHandle">打印</el-button>
|
<el-button type="warning" :size="aotuSize" :loading="printLoading" plain
|
||||||
<el-button type="danger" :size="aotuSize" @click="deleteHandle">作废</el-button>
|
@click="printHandle">打印</el-button>
|
||||||
|
<el-button type="danger" :size="aotuSize" plain @click="deleteHandle">作废</el-button>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="16">
|
<el-col :span="16">
|
||||||
<div class="tips">
|
<div class="tips">
|
||||||
|
|||||||
@ -7,7 +7,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { queryBatchCheckDetailService } from '@/api/liswork/batchCheck/batchCheckApi'
|
import { queryBatchCheckDetailService } from '@/api/liswork/batch'
|
||||||
|
|
||||||
const tableData = ref([])
|
const tableData = ref([])
|
||||||
const columns = ref([
|
const columns = ref([
|
||||||
|
|||||||
@ -15,7 +15,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { queryBatchCheckDetailService } from '@/api/liswork/batchCheck/batchCheckApi'
|
import { queryBatchCheckDetailService } from '@/api/liswork/batch'
|
||||||
|
|
||||||
|
|
||||||
const tableDataUp = ref([])
|
const tableDataUp = ref([])
|
||||||
|
|||||||
@ -123,9 +123,9 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts" name="BatchCheck">
|
<script setup lang="ts" name="BatchCheck">
|
||||||
import CustomTable from '@/components/elTable/index.vue'
|
import CustomTable from '@/components/ElTable/index.vue'
|
||||||
import SelectTable from '@/components/SelectTable/index.vue';
|
import SelectTable from '@/components/SelectTable/index.vue';
|
||||||
import { batchCheckService, queryBatchCheckListService, cancelBatchCheckService } from '@/api/liswork/batchCheck/batchCheckApi';
|
import { batchCheckService, queryBatchCheckListService, cancelBatchCheckService } from '@/api/liswork/batch/index.js';
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
import { formatDict, getDictData } from '@/hooks'
|
import { formatDict, getDictData } from '@/hooks'
|
||||||
import { displayBRNL, displayBRXB } from '@/utils/czUtil/lisUtil'
|
import { displayBRNL, displayBRXB } from '@/utils/czUtil/lisUtil'
|
||||||
|
|||||||
@ -12,38 +12,38 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="组别:">
|
<el-form-item label="组别:">
|
||||||
<SelectTable v-model:data="queryForm.instrGroup" :tableData="instrGroupOptions" placeholder=""
|
<SelectTable v-model:data="queryForm.yqz" :tableData="instrGroupOptions" placeholder=""
|
||||||
@getDataValue="handleinstrGroupChange" :clearable="false" />
|
@getDataValue="handleinstrGroupChange" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="检验仪器:">
|
<el-form-item label="检验仪器:">
|
||||||
<SelectTable v-model:data="queryForm.yq" :tableData="instrOptions" label="yqmc" value="yq" objKey="yq"
|
<SelectTable v-model:data="queryForm.yq" :tableData="instrOptions" clearable placeholder=""
|
||||||
placeholder="" :clearable="false" @getDataValue="" />
|
@getDataValue="" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row :gutter="16">
|
<el-row :gutter="16">
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="样本号:">
|
<el-form-item label="标本号:">
|
||||||
<el-input v-model="queryForm.ybh" placeholder="请输入样本号" clearable />
|
<el-input v-model="queryForm.ybh" placeholder="可以输入如:1,2,5-6等格式" clearable />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="病人类型:">
|
<el-form-item label="病人类型:">
|
||||||
<SelectTable v-model:data="queryForm.brly" dictType="PT" placeholder="" />
|
<SelectTable v-model:data="queryForm.brly" :tableData="dictData.PT" placeholder="" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="科室:">
|
<el-form-item label="科室:">
|
||||||
<SelectTable v-model:data="queryForm.ksdh" dictType="DP" placeholder="" />
|
<SelectTable v-model:data="queryForm.ksdh" :tableData="dictData.DP" placeholder="" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
<el-row :gutter="16">
|
<el-row :gutter="16">
|
||||||
<el-form-item label="打印顺序:" class="print-order-item">
|
<el-form-item label="打印顺序:" class="print-order-item">
|
||||||
<el-radio-group v-model="queryForm.printOrder">
|
<el-radio-group v-model="queryForm.sorttype">
|
||||||
<el-radio v-for="order in printOrders" :key="order.value" :label="order.value">
|
<el-radio v-for="order in printOrders" :key="order.value" :label="order.value">
|
||||||
{{ order.label }}
|
{{ order.label }}
|
||||||
</el-radio>
|
</el-radio>
|
||||||
@ -52,100 +52,130 @@
|
|||||||
</el-row>
|
</el-row>
|
||||||
</el-form>
|
</el-form>
|
||||||
<div>
|
<div>
|
||||||
<el-button type="primary" icon="search" @click="printHandle">查询</el-button>
|
<el-button type="primary" icon="search" @click="searchHandle">查询</el-button>
|
||||||
<el-button type="warning" icon="Printer" plain @click="printHandle">打印</el-button>
|
<el-button type="warning" icon="Printer" :loading="printLoading" plain @click="printHandle">打印</el-button>
|
||||||
</div>
|
</div>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8" class="top-right-col">
|
<el-col :span="8" class="top-right-col">
|
||||||
<div class="option-panel">
|
<div class="option-panel">
|
||||||
<div class="option-title">过滤选项</div>
|
<div class="option-title">过滤选项</div>
|
||||||
<el-checkbox-group v-model="selectedOptions" @change="updateSelectedOptions">
|
<el-row :gutter="12" class="option-list">
|
||||||
<el-row :gutter="12" class="option-list">
|
<el-col :span="12" v-for="option in optionItems">
|
||||||
<el-col :span="12" v-for="option in optionItems" :key="option.key">
|
<el-checkbox v-model="queryForm[option.key]" :label="option.label" :true-value="1" :false-value="0"
|
||||||
<el-checkbox :label="option.key">{{ option.label }}</el-checkbox>
|
:disabled="option.disabled" />
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-checkbox-group>
|
|
||||||
</div>
|
</div>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
<div class="bottom-card mt10">
|
<div class="bottom-card mt10">
|
||||||
<div class="table-section">
|
<el-table :data="tableData" border style="width: 100%" height="100%" v-loading="loading">
|
||||||
<el-table :data="tableData" border style="width: 100%" height="60vh">
|
<el-table-column label="样本号" prop="ybh" width="120" align="center" />
|
||||||
<el-table-column label="样本号" prop="ybh" width="120" />
|
<el-table-column label="病人姓名" prop="brxm" width="120" align="center" />
|
||||||
<el-table-column label="病人姓名" prop="brxm" width="120" />
|
<el-table-column label="病人类型" prop="brly" width="120" align="center">
|
||||||
<el-table-column label="病人类型" prop="brly" width="120" />
|
<template #default="scope">
|
||||||
<el-table-column label="科室" prop="ksmc" width="120" />
|
{{ formatDict(scope.row.brly, 'PT') }}
|
||||||
<el-table-column label="床号" prop="ch" width="120" />
|
</template>
|
||||||
<el-table-column label="消息提示" prop="msg" />
|
</el-table-column>
|
||||||
</el-table>
|
<el-table-column label="科室" prop="ksdh" width="200" align="center">
|
||||||
</div>
|
<template #default="scope">
|
||||||
|
{{ formatDict(scope.row.ksdh, 'DP') }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="床号" prop="ch" width="120" />
|
||||||
|
<el-table-column label="消息提示" prop="cp_msg">
|
||||||
|
<template #default="scope">
|
||||||
|
<span v-if="scope.row.flag == 0" style="color:#f00"> {{ scope.row.cp_msg }} </span>
|
||||||
|
<span> {{ scope.row.cp_msg }} </span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { getComDicts } from '@/api/liswork/dict/ComDict';
|
import { getComDicts } from '@/api/liswork/dict/ComDict';
|
||||||
import { getGroupInstrdList } from '@/api/liswork/work/LisWork';
|
import { getGroupInstrdList } from '@/api/liswork/work/LisWork';
|
||||||
import { reactive, ref } from 'vue';
|
import dayjs from 'dayjs';
|
||||||
|
import { queryBatchPrintService, batchPrintAll } from '@/api/liswork/batch/index';
|
||||||
|
import { getDictData, formatDict, dictData } from '@/hooks'
|
||||||
|
import { useCommonStore } from '@/store/modules/commonStore';
|
||||||
|
import { ElMessage, ElNotification } from 'element-plus';
|
||||||
|
import { classCom } from '@/utils/classCom';
|
||||||
|
const mbStore = useCommonStore();
|
||||||
|
|
||||||
const queryForm = reactive({
|
const queryForm = reactive({
|
||||||
jyrq: '',
|
jyrq: dayjs().format('YYYY-MM-DD'),
|
||||||
instrGroup: '',
|
yqz: '',
|
||||||
yq: '',
|
yq: mbStore.defaultConfig.defaultinstr || '',
|
||||||
ybh: '',
|
ybh: '',
|
||||||
brly: '',
|
brly: '',
|
||||||
ksdh: '',
|
ksdh: '',
|
||||||
printOrder: 'ybh',
|
sorttype: 1,
|
||||||
options: {
|
notbrly: null,
|
||||||
excludePatientType: false,
|
notksdh: null,
|
||||||
excludeDept: false,
|
pcyx: null,
|
||||||
excludeNegative: false,
|
dyyx: null,
|
||||||
positiveOnly: false,
|
nobrxm: null,
|
||||||
noNameSkip: false,
|
nocsjg: null,
|
||||||
noResultSkip: false,
|
fzdy: null,
|
||||||
groupedPrint: false,
|
dybz: null,
|
||||||
notPrintedOnly: false,
|
jgbz: null,
|
||||||
pendingReview: false,
|
jgbz2: 1,
|
||||||
reviewedOnly: false
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const printLoading = ref(false);
|
||||||
|
const loading = ref(false);
|
||||||
|
|
||||||
const tableData = ref([]);
|
const tableData = ref([]);
|
||||||
|
|
||||||
const printOrders = ref([
|
const printOrders = ref([
|
||||||
{ label: '样本号', value: 'ybh' },
|
{ label: '样本号', value: 1 },
|
||||||
{ label: '科室+床号+样本号', value: 'deptBedSample' },
|
{ label: '科室+床号+样本号', value: 2 },
|
||||||
{ label: '病人类型+科室+床号+样本号', value: 'typeDeptBedSample' },
|
{ label: '病人类型+科室+床号+样本号', value: 3 },
|
||||||
{ label: '病人类型+科室+样本号', value: 'typeDeptSample' },
|
{ label: '病人类型+科室+样本号', value: 4 },
|
||||||
{ label: '阳性结果', value: 'positiveResult' }
|
{ label: '阳性结果', value: 5 }
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const optionItems = ref([
|
const optionItems = ref([
|
||||||
{ label: '排除选择的病人类型', key: 'excludePatientType' },
|
{ key: 'notbrly', label: '排除选择的病人类型', disabled: false },
|
||||||
{ label: '排除选择的科室', key: 'excludeDept' },
|
{ key: 'notksdh', label: '排除选择的科室', disabled: false },
|
||||||
{ label: '排除阴性报告', key: 'excludeNegative' },
|
{ key: 'pcyx', label: '排除阴性报告', disabled: false },
|
||||||
{ label: '仅打印阳性报告', key: 'positiveOnly' },
|
{ key: 'dyyx', label: '仅打印阳性报告', disabled: false },
|
||||||
{ label: '无病人姓名不打印', key: 'noNameSkip' },
|
{ key: 'nobrxm', label: '无病人姓名不打印', disabled: false },
|
||||||
{ label: '无检验结果不打印', key: 'noResultSkip' },
|
{ key: 'nocsjg', label: '无检验结果不打印', disabled: false },
|
||||||
{ label: '分组打印报告', key: 'groupedPrint' },
|
{ key: 'fzdy', label: '分组打印报告', disabled: false },
|
||||||
{ label: '打印未打印报告', key: 'notPrintedOnly' },
|
{ key: 'dybz', label: '打印未打印报告', disabled: false },
|
||||||
{ label: '打印待核报告', key: 'pendingReview' },
|
{ key: 'jgbz', label: '打印未审核报告', disabled: true },
|
||||||
{ label: '打印已审核报告', key: 'reviewedOnly' }
|
{ key: 'jgbz2', label: '打印已审核报告', disabled: true }
|
||||||
]);
|
])
|
||||||
|
// 查询
|
||||||
const selectedOptions = ref(Object.keys(queryForm.options).filter(key => queryForm.options[key]));
|
const searchHandle = () => {
|
||||||
|
if (!queryForm.yq) return ElMessage.warning('检验仪器不能为空!')
|
||||||
const updateSelectedOptions = () => {
|
loading.value = true
|
||||||
Object.keys(queryForm.options).forEach(key => {
|
queryForm.jyrq = dayjs(queryForm.jyrq).format('YYYY-MM-DD') + ' 00:00:00'
|
||||||
queryForm.options[key] = selectedOptions.value.includes(key);
|
queryBatchPrintService(queryForm).then((res) => {
|
||||||
});
|
loading.value = false
|
||||||
|
if (res.code == 0) {
|
||||||
|
tableData.value = res.data
|
||||||
|
} else {
|
||||||
|
tableData.value = []
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
// 打印
|
||||||
const printHandle = () => {
|
const printHandle = () => {
|
||||||
|
if (!tableData.value.length) return ElMessage.warning('样本打印数据为空')
|
||||||
|
printLoading.value = true
|
||||||
|
batchPrintAll(queryForm).then((res) => {
|
||||||
|
printLoading.value = false
|
||||||
|
if (res.code == 0) {
|
||||||
|
classCom.printBase64PDF(res.data.base64data)
|
||||||
|
tableData.value = res.data.printflag
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleinstrGroupChange = () => {
|
const handleinstrGroupChange = () => {
|
||||||
@ -157,7 +187,7 @@ const instrGroupOptions = ref<{ value: string, label: string }[]>([])
|
|||||||
const instrOptions = ref<{ value: string, label: string }[]>([])
|
const instrOptions = ref<{ value: string, label: string }[]>([])
|
||||||
|
|
||||||
const getYqConfig = () => {
|
const getYqConfig = () => {
|
||||||
getGroupInstrdList({ lisgroup: queryForm.instrGroup })
|
getGroupInstrdList({ lisgroup: queryForm.yqz })
|
||||||
.then((res: any) => {
|
.then((res: any) => {
|
||||||
if (res.code == 0) {
|
if (res.code == 0) {
|
||||||
instrOptions.value = res.data.map((item: any) => ({
|
instrOptions.value = res.data.map((item: any) => ({
|
||||||
@ -177,6 +207,8 @@ onMounted(() => {
|
|||||||
}))
|
}))
|
||||||
instrGroupOptions.value.push({ value: 'ALL', label: '所有仪器' })
|
instrGroupOptions.value.push({ value: 'ALL', label: '所有仪器' })
|
||||||
getYqConfig()
|
getYqConfig()
|
||||||
|
|
||||||
|
getDictData('PT', 'DP')
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -184,6 +216,11 @@ onMounted(() => {
|
|||||||
|
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
|
.app-container {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
.query-form {
|
.query-form {
|
||||||
.el-form-item {
|
.el-form-item {
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
@ -217,7 +254,9 @@ onMounted(() => {
|
|||||||
|
|
||||||
.bottom-card {
|
.bottom-card {
|
||||||
border-top: 1px solid #d9e8fb;
|
border-top: 1px solid #d9e8fb;
|
||||||
padding: 10px;
|
padding: 10px 0;
|
||||||
|
flex: 1;
|
||||||
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.action-buttons {
|
.action-buttons {
|
||||||
|
|||||||
@ -33,7 +33,7 @@ import { ref, reactive, toRefs, watch, computed, onMounted, nextTick } from "vue
|
|||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
import { listUser } from '@/api/system/user.js'
|
import { listUser } from '@/api/system/user.js'
|
||||||
import { reqdetail, reqdetailmx } from '@/api/liswork/work/LisWork'
|
import { reqdetail, reqdetailmx } from '@/api/liswork/work/LisWork'
|
||||||
import CustomTable from '@/components/elTable/index.vue'
|
import CustomTable from '@/components/ElTable/index.vue'
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
// 主键
|
// 主键
|
||||||
|
|||||||
@ -15,7 +15,7 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, watch, toRefs, onMounted, computed } from 'vue'
|
import { ref, watch, toRefs, onMounted, computed } from 'vue'
|
||||||
import { inputmdl } from "@/api/liswork/work/LisWork";
|
import { inputmdl } from "@/api/liswork/work/LisWork";
|
||||||
import CustomTable from '@/components/elTable/index.vue'
|
import CustomTable from '@/components/ElTable/index.vue'
|
||||||
import emitter from '@/utils/mitt'
|
import emitter from '@/utils/mitt'
|
||||||
import { useCommonStore } from '@/store/modules/commonStore';
|
import { useCommonStore } from '@/store/modules/commonStore';
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
|
|||||||
@ -41,7 +41,7 @@ import { onMounted, ref, toRefs, computed, watch, nextTick } from 'vue';
|
|||||||
import * as echarts from 'echarts';
|
import * as echarts from 'echarts';
|
||||||
import { historyInfo } from '@/api/liswork/work/LisWork'
|
import { historyInfo } from '@/api/liswork/work/LisWork'
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
import CustomTable from '@/components/elTable/index.vue'
|
import CustomTable from '@/components/ElTable/index.vue'
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
// 主键
|
// 主键
|
||||||
queryParams: {
|
queryParams: {
|
||||||
|
|||||||
@ -52,7 +52,7 @@
|
|||||||
import type { PropType } from 'vue';
|
import type { PropType } from 'vue';
|
||||||
import { ref, watch, computed, reactive, toRefs, onMounted, nextTick } from 'vue';
|
import { ref, watch, computed, reactive, toRefs, onMounted, nextTick } from 'vue';
|
||||||
import { otherinstr, otherInstrDetail } from '@/api/liswork/work/LisWork';
|
import { otherinstr, otherInstrDetail } from '@/api/liswork/work/LisWork';
|
||||||
import CustomTable from '@/components/elTable/index.vue'
|
import CustomTable from '@/components/ElTable/index.vue'
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
const baseUrl = import.meta.env.VITE_APP_BASE_API
|
const baseUrl = import.meta.env.VITE_APP_BASE_API
|
||||||
|
|
||||||
|
|||||||
@ -28,7 +28,7 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { getresultmedList } from "@/api/liswork/micro";
|
import { getresultmedList } from "@/api/liswork/micro";
|
||||||
import { historyInfo } from "@/api/liswork/work/LisWork";
|
import { historyInfo } from "@/api/liswork/work/LisWork";
|
||||||
import CustomTable from "@/components/elTable/index.vue"
|
import CustomTable from "@/components/ElTable/index.vue"
|
||||||
import { LabResultItem, ymTableDataItem } from '@/types/index';
|
import { LabResultItem, ymTableDataItem } from '@/types/index';
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
|
|||||||
@ -69,7 +69,7 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { formatDict, getDictData, dictData } from '@/hooks';
|
import { formatDict, getDictData, dictData } from '@/hooks';
|
||||||
import SelectTable from '@/components/SelectTable/index.vue'
|
import SelectTable from '@/components/SelectTable/index.vue'
|
||||||
import CustomVxeTable from '@/components/vxeTable/index.vue'
|
import CustomVxeTable from '@/components/VxeTable/index.vue'
|
||||||
import YQSelectTable from '@/components/SelectTable/YQSelectTable/index.vue'
|
import YQSelectTable from '@/components/SelectTable/YQSelectTable/index.vue'
|
||||||
import { queryBatchList, addBatch, delBatch } from '@/api/liswork/labItem/labItemApi'
|
import { queryBatchList, addBatch, delBatch } from '@/api/liswork/labItem/labItemApi'
|
||||||
import { ElMessage } from 'element-plus';
|
import { ElMessage } from 'element-plus';
|
||||||
|
|||||||
@ -112,7 +112,7 @@ import CommonlyValues from './tab/commonlyValues.vue'
|
|||||||
import UseInstr from './tab/useInstr.vue'
|
import UseInstr from './tab/useInstr.vue'
|
||||||
import Knowledge from './tab/knowledge.vue'
|
import Knowledge from './tab/knowledge.vue'
|
||||||
import CommonDescriptions from './tab/commonDescriptions.vue'
|
import CommonDescriptions from './tab/commonDescriptions.vue'
|
||||||
import CustomTable from '@/components/elTable/index.vue'
|
import CustomTable from '@/components/ElTable/index.vue'
|
||||||
import ReferenceValueDetails from './tab/referenceValueDetails.vue';
|
import ReferenceValueDetails from './tab/referenceValueDetails.vue';
|
||||||
import { queryXmInfoNewService, queryXmInfoNewDetailService, saveDataService, deleteXmInfoService } from '@/api/liswork/labItem/labItemApi';
|
import { queryXmInfoNewService, queryXmInfoNewDetailService, saveDataService, deleteXmInfoService } from '@/api/liswork/labItem/labItemApi';
|
||||||
import SelectTable from '@/components/SelectTable/index.vue'
|
import SelectTable from '@/components/SelectTable/index.vue'
|
||||||
|
|||||||
@ -25,7 +25,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import CustomTable from '@/components/elTable/index.vue'
|
import CustomTable from '@/components/ElTable/index.vue'
|
||||||
import { dictData, getDictData } from '@/hooks';
|
import { dictData, getDictData } from '@/hooks';
|
||||||
import { ElMessage, ElMessageBox } from 'element-plus';
|
import { ElMessage, ElMessageBox } from 'element-plus';
|
||||||
import { delXmValNewService } from '@/api/liswork/labItem/labItemApi'
|
import { delXmValNewService } from '@/api/liswork/labItem/labItemApi'
|
||||||
|
|||||||
@ -39,7 +39,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import CustomVxeTable from '@/components/vxeTable/index.vue'
|
import CustomVxeTable from '@/components/VxeTable/index.vue'
|
||||||
import { queryXmInfoNew } from '@/api/liswork/labItem/labItemApi'
|
import { queryXmInfoNew } from '@/api/liswork/labItem/labItemApi'
|
||||||
import { getFirstLetter } from '@/utils/pinyin';
|
import { getFirstLetter } from '@/utils/pinyin';
|
||||||
|
|
||||||
|
|||||||
@ -45,8 +45,8 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import CustomTable from '@/components/elTable/index.vue'
|
import CustomTable from '@/components/ElTable/index.vue'
|
||||||
import CustomVxeTable from '@/components/vxeTable/index.vue'
|
import CustomVxeTable from '@/components/VxeTable/index.vue'
|
||||||
import { queryXmInfoNew, queryXmAlarmdetailNew, addXmAlarmdetailNew, delXmAlarmdetailNew } from '@/api/liswork/labItem/labItemApi'
|
import { queryXmInfoNew, queryXmAlarmdetailNew, addXmAlarmdetailNew, delXmAlarmdetailNew } from '@/api/liswork/labItem/labItemApi'
|
||||||
import { XmAlarmdetailNew } from '@/types'
|
import { XmAlarmdetailNew } from '@/types'
|
||||||
import { ElMessageBox, ElMessage } from 'element-plus'
|
import { ElMessageBox, ElMessage } from 'element-plus'
|
||||||
|
|||||||
@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import CustomTable from '@/components/elTable/index.vue'
|
import CustomTable from '@/components/ElTable/index.vue'
|
||||||
import { XmTextresultNew } from '@/types';
|
import { XmTextresultNew } from '@/types';
|
||||||
import { ElMessage, ElMessageBox } from 'element-plus';
|
import { ElMessage, ElMessageBox } from 'element-plus';
|
||||||
import { ref } from 'vue';
|
import { ref } from 'vue';
|
||||||
|
|||||||
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import CustomTable from '@/components/elTable/index.vue'
|
import CustomTable from '@/components/ElTable/index.vue'
|
||||||
import { ref } from 'vue';
|
import { ref } from 'vue';
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
|
|||||||
@ -74,7 +74,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import CustomTable from '@/components/elTable/index.vue'
|
import CustomTable from '@/components/ElTable/index.vue'
|
||||||
import { ref } from 'vue';
|
import { ref } from 'vue';
|
||||||
import { getDictData, dictData } from '@/hooks'
|
import { getDictData, dictData } from '@/hooks'
|
||||||
import SelectTable from '@/components/SelectTable/index.vue'
|
import SelectTable from '@/components/SelectTable/index.vue'
|
||||||
|
|||||||
@ -34,7 +34,7 @@
|
|||||||
|
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import CustomTable from '@/components/elTable/index.vue'
|
import CustomTable from '@/components/ElTable/index.vue'
|
||||||
import { XmInfoVs } from '@/types';
|
import { XmInfoVs } from '@/types';
|
||||||
import SelectTable from '@/components/SelectTable/index.vue'
|
import SelectTable from '@/components/SelectTable/index.vue'
|
||||||
import { ElMessage, ElMessageBox } from 'element-plus'
|
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||||
|
|||||||
@ -70,7 +70,7 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, nextTick, onMounted, watch } from 'vue'
|
import { ref, nextTick, onMounted, watch } from 'vue'
|
||||||
import CommonTable from '@/components/vxeTable/index.vue'
|
import CommonTable from '@/components/VxeTable/index.vue'
|
||||||
import ContextMenu from "@/components/contextMenu/index.vue";
|
import ContextMenu from "@/components/contextMenu/index.vue";
|
||||||
import { ContextMenuItem } from '@/types/index'
|
import { ContextMenuItem } from '@/types/index'
|
||||||
import yqSelectTable from '@/components/SelectTable/YQSelectTable/index.vue';
|
import yqSelectTable from '@/components/SelectTable/YQSelectTable/index.vue';
|
||||||
|
|||||||
@ -149,7 +149,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import CustomTable from '@/components/elTable/index.vue'
|
import CustomTable from '@/components/ElTable/index.vue'
|
||||||
import { LabResultItem } from '@/types/index';
|
import { LabResultItem } from '@/types/index';
|
||||||
import { changeresult, saveresult, newresult, sampleMedInfo, cbebCheck } from '@/api/liswork/micro/index';
|
import { changeresult, saveresult, newresult, sampleMedInfo, cbebCheck } from '@/api/liswork/micro/index';
|
||||||
import { deleteresult, queryXmVal, setinputmdl, queryLabPat, checkuser, printListwork } from "@/api/liswork/work/LisWork";
|
import { deleteresult, queryXmVal, setinputmdl, queryLabPat, checkuser, printListwork } from "@/api/liswork/work/LisWork";
|
||||||
|
|||||||
@ -11,7 +11,7 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, watch, toRefs, onMounted, computed } from 'vue'
|
import { ref, watch, toRefs, onMounted, computed } from 'vue'
|
||||||
import { inputmdl } from "@/api/liswork/work/LisWork";
|
import { inputmdl } from "@/api/liswork/work/LisWork";
|
||||||
import CustomTable from '@/components/elTable/index.vue'
|
import CustomTable from '@/components/ElTable/index.vue'
|
||||||
import emitter from '@/utils/mitt'
|
import emitter from '@/utils/mitt'
|
||||||
import { useCommonStore } from '@/store/modules/commonStore';
|
import { useCommonStore } from '@/store/modules/commonStore';
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
|
|||||||
@ -22,7 +22,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import CustomTable from "@/components/elTable/index.vue"
|
import CustomTable from "@/components/ElTable/index.vue"
|
||||||
import { getgermtextdict } from "@/api/liswork/micro"
|
import { getgermtextdict } from "@/api/liswork/micro"
|
||||||
|
|
||||||
const visible = ref(false)
|
const visible = ref(false)
|
||||||
|
|||||||
@ -43,7 +43,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import CustomTable from '@/components/elTable/index.vue';
|
import CustomTable from '@/components/ElTable/index.vue';
|
||||||
import { getmediumList, insertmedium, updatemedium, deletemedium, deletemediums } from '@/api/liswork/micro/index';
|
import { getmediumList, insertmedium, updatemedium, deletemedium, deletemediums } from '@/api/liswork/micro/index';
|
||||||
import { classCom } from '@/utils/classCom';
|
import { classCom } from '@/utils/classCom';
|
||||||
import { ElMessage, ElMessageBox } from 'element-plus';
|
import { ElMessage, ElMessageBox } from 'element-plus';
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import CustomTable from "@/components/elTable/index.vue"
|
import CustomTable from "@/components/ElTable/index.vue"
|
||||||
import { getComLog } from "@/api/liswork/micro/index"
|
import { getComLog } from "@/api/liswork/micro/index"
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
|
|||||||
@ -185,7 +185,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import CustomTable from "@/components/elTable/index.vue";
|
import CustomTable from "@/components/ElTable/index.vue";
|
||||||
import { classCom } from "@/utils/classCom";
|
import { classCom } from "@/utils/classCom";
|
||||||
import {
|
import {
|
||||||
getresultmedList, savetestResult, changeresult, saveresult, newresult, getmeddictList, savemedresult,
|
getresultmedList, savetestResult, changeresult, saveresult, newresult, getmeddictList, savemedresult,
|
||||||
|
|||||||
@ -9,8 +9,8 @@
|
|||||||
<el-row :gutter="10">
|
<el-row :gutter="10">
|
||||||
<el-col :span="5">
|
<el-col :span="5">
|
||||||
<div class="mb5">
|
<div class="mb5">
|
||||||
<el-button type="primary" @click="getList">画图</el-button>
|
<el-button type="primary" icon="Edit" @click="getList">画图</el-button>
|
||||||
<el-button type="warning">打印</el-button>
|
<el-button type="warning" icon="Printer">打印</el-button>
|
||||||
</div>
|
</div>
|
||||||
<el-form :model="queryParams" ref="queryRef" size="small">
|
<el-form :model="queryParams" ref="queryRef" size="small">
|
||||||
<el-form-item label="组别:" prop="instrGroup">
|
<el-form-item label="组别:" prop="instrGroup">
|
||||||
|
|||||||
194
src/views/liswork/reportConsolidation/index.vue
Normal file
194
src/views/liswork/reportConsolidation/index.vue
Normal file
@ -0,0 +1,194 @@
|
|||||||
|
/**
|
||||||
|
* @file index.vue
|
||||||
|
* @description: 报告合并
|
||||||
|
* @author: w
|
||||||
|
* @since: 2026-06-30
|
||||||
|
*/
|
||||||
|
<template>
|
||||||
|
<div class="app-container">
|
||||||
|
<!-- 顶部筛选区域 -->
|
||||||
|
|
||||||
|
<el-form :model="filterForm" label-width="auto" class="query-form">
|
||||||
|
<el-row :gutter="16">
|
||||||
|
<el-col :span="7">
|
||||||
|
<el-form-item label="标本日期:">
|
||||||
|
<el-date-picker v-model="filterForm.startDate" type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
|
||||||
|
style="width:47%" />
|
||||||
|
<span class="split-line">—</span>
|
||||||
|
<el-date-picker v-model="filterForm.endDate" type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
|
||||||
|
style="width:47%" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="4">
|
||||||
|
<el-form-item label="仪器分组:">
|
||||||
|
<SelectTable v-model:data="filterForm.yqz" :tableData="instrGroupOptions" placeholder="" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="4">
|
||||||
|
<el-form-item label="病人类型:">
|
||||||
|
<SelectTable v-model:data="filterForm.brly" :tableData="dictData.PT" placeholder="" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="4">
|
||||||
|
<el-form-item label="科室:">
|
||||||
|
<SelectTable v-model:data="filterForm.ksdh" :tableData="dictData.DP" placeholder="" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row :gutter="16">
|
||||||
|
<el-col :span="4">
|
||||||
|
<el-form-item label="病历号:">
|
||||||
|
<el-input v-model="filterForm.patientId" placeholder="" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="3">
|
||||||
|
<el-form-item label="姓名:" label-width="55px">
|
||||||
|
<el-input v-model="filterForm.name" placeholder="" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="4">
|
||||||
|
<el-form-item label="样本号:">
|
||||||
|
<el-input v-model="filterForm.sampleNo" placeholder="" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="4">
|
||||||
|
<el-form-item label="合并方式:">
|
||||||
|
<el-select v-model="filterForm.mergeType" placeholder="病历号">
|
||||||
|
<el-option label="病历号" value="id" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="4">
|
||||||
|
<el-form-item label=" ">
|
||||||
|
<el-checkbox v-model="filterForm.delOldSample">删除合并前标本</el-checkbox>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</el-form>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<el-button type="primary" icon="search">查询</el-button>
|
||||||
|
<el-button type="warning" icon="Printer" plain>打印</el-button>
|
||||||
|
<el-button type="warning" icon="search" plain>查重</el-button>
|
||||||
|
<el-button type="warning" icon="Document" plain>合并</el-button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 左右表格主体 -->
|
||||||
|
<div class="table-wrap">
|
||||||
|
<!-- 左侧患者标本主表 -->
|
||||||
|
<div class="left-table-box">
|
||||||
|
<el-table :data="patientTableData" border height="100%" @selection-change="handleSelectChange">
|
||||||
|
<el-table-column type="selection" width="55" label="全选" />
|
||||||
|
<el-table-column label="病历号" prop="patientId" align="center" width="110" />
|
||||||
|
<el-table-column label="姓名" prop="name" align="center" width="80" />
|
||||||
|
<el-table-column label="性别" prop="gender" align="center" width="60" />
|
||||||
|
<el-table-column label="年龄" prop="age" align="center" width="60" />
|
||||||
|
<el-table-column label="审核标志" prop="auditFlag" align="center" width="80" />
|
||||||
|
<el-table-column label="标本日期" prop="sampleDate" align="center" />
|
||||||
|
<el-table-column label="样本号" prop="sampleNo" align="center" />
|
||||||
|
<el-table-column label="病人类型" prop="brly" align="center" />
|
||||||
|
<el-table-column label="科室" prop="dept" align="center" />
|
||||||
|
<el-table-column label="送检医生" prop="sendDoctor" align="center" />
|
||||||
|
<el-table-column label="检验医师" prop="testDoctor" align="center" />
|
||||||
|
<el-table-column label="核对医师" prop="checkDoctor" align="center" />
|
||||||
|
</el-table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 右侧检验项目明细表 -->
|
||||||
|
<div class="right-table-box">
|
||||||
|
<el-table :data="itemTableData" border height="100%">
|
||||||
|
<el-table-column label="项目代号" prop="itemCode" align="center" />
|
||||||
|
<el-table-column label="项目名称" prop="itemName" align="center" />
|
||||||
|
<el-table-column label="检验结果" prop="result" align="center" />
|
||||||
|
<el-table-column label="参考值" prop="refValue" align="center" />
|
||||||
|
<el-table-column label="单位" prop="unit" align="center" />
|
||||||
|
</el-table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import dayjs from 'dayjs'
|
||||||
|
import { getDictData, formatDict, dictData } from '@/hooks'
|
||||||
|
import { getComDicts } from '@/api/liswork/dict/ComDict'
|
||||||
|
// 顶部筛选条件
|
||||||
|
const filterForm = reactive({
|
||||||
|
yqz: '',
|
||||||
|
startDate: dayjs().format('YYYY-MM-DD'),
|
||||||
|
endDate: dayjs().format('YYYY-MM-DD'),
|
||||||
|
brly: '',
|
||||||
|
ksdh: '',
|
||||||
|
patientId: '',
|
||||||
|
name: '',
|
||||||
|
sampleNo: '',
|
||||||
|
mergeType: 'id',
|
||||||
|
delOldSample: false
|
||||||
|
})
|
||||||
|
|
||||||
|
// 左侧患者标本表格数据
|
||||||
|
const patientTableData = ref([
|
||||||
|
// 模拟数据
|
||||||
|
])
|
||||||
|
// 右侧检验项目表格数据
|
||||||
|
const itemTableData = ref([
|
||||||
|
// 模拟数据
|
||||||
|
])
|
||||||
|
|
||||||
|
// 左侧多选事件
|
||||||
|
const handleSelectChange = (rows: any[]) => {
|
||||||
|
console.log('选中标本', rows)
|
||||||
|
// 可联动加载右侧检验项目
|
||||||
|
}
|
||||||
|
const instrGroupOptions = ref<{ value: string, label: string }[]>([])
|
||||||
|
onMounted(() => {
|
||||||
|
getComDicts({ zdlb: 'GROUP' }).then((res: any) => {
|
||||||
|
instrGroupOptions.value = res.data.map((item: any) => ({
|
||||||
|
value: item.zddh.trim(),
|
||||||
|
label: item.zdmc
|
||||||
|
}))
|
||||||
|
instrGroupOptions.value.unshift({ value: 'ALL', label: '所有仪器' })
|
||||||
|
|
||||||
|
getDictData('PT', 'DP')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.app-container {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
|
||||||
|
.split-line {
|
||||||
|
width: 6%;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
color: #ccc;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 左右双表格容器
|
||||||
|
.table-wrap {
|
||||||
|
display: flex;
|
||||||
|
flex: 1;
|
||||||
|
gap: 10px;
|
||||||
|
margin-top: .625rem;
|
||||||
|
|
||||||
|
.left-table-box {
|
||||||
|
flex: 3;
|
||||||
|
height: 99%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.right-table-box {
|
||||||
|
flex: 1;
|
||||||
|
height: 99%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-table {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@ -28,7 +28,7 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { changeLinkList, datalink } from '@/api/liswork/work/LisWork'
|
import { changeLinkList, datalink } from '@/api/liswork/work/LisWork'
|
||||||
import { ElMessage } from 'element-plus'
|
import { ElMessage } from 'element-plus'
|
||||||
import CustomTable from '@/components/elTable/index.vue'
|
import CustomTable from '@/components/ElTable/index.vue'
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
tableKey: {
|
tableKey: {
|
||||||
|
|||||||
@ -46,7 +46,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import CustomTable from '@/components/elTable/index.vue'
|
import CustomTable from '@/components/ElTable/index.vue'
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
tableKey: {
|
tableKey: {
|
||||||
|
|||||||
@ -77,7 +77,7 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, nextTick, onMounted, watch } from 'vue'
|
import { ref, nextTick, onMounted, watch } from 'vue'
|
||||||
import CommonTable from '@/components/vxeTable/index.vue'
|
import CommonTable from '@/components/VxeTable/index.vue'
|
||||||
import ContextMenu from "@/components/contextMenu/index.vue";
|
import ContextMenu from "@/components/contextMenu/index.vue";
|
||||||
import { ContextMenuItem } from '@/types/index'
|
import { ContextMenuItem } from '@/types/index'
|
||||||
import yqSelectTable from '@/components/SelectTable/YQSelectTable/index.vue';
|
import yqSelectTable from '@/components/SelectTable/YQSelectTable/index.vue';
|
||||||
|
|||||||
@ -113,7 +113,7 @@ import ProjectDetails from "@/components/projectDetails/index.vue";
|
|||||||
import projectsJg from "@/components/projectsjg/index.vue"
|
import projectsJg from "@/components/projectsjg/index.vue"
|
||||||
import BuiltDialog from "./components/builtDialog.vue";
|
import BuiltDialog from "./components/builtDialog.vue";
|
||||||
import { classCom } from '@/utils/classCom'
|
import { classCom } from '@/utils/classCom'
|
||||||
import CustomTable from '@/components/elTable/index.vue'
|
import CustomTable from '@/components/ElTable/index.vue'
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
import emitter from "@/utils/mitt";
|
import emitter from "@/utils/mitt";
|
||||||
import CheckUser from "./components/CheckUser.vue";
|
import CheckUser from "./components/CheckUser.vue";
|
||||||
|
|||||||
@ -73,7 +73,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import CustomTable from '@/components/elTable/index.vue'
|
import CustomTable from '@/components/ElTable/index.vue'
|
||||||
import { addService } from '@/api/liswork/xmKnowledge/xmKnowledgeApi'
|
import { addService } from '@/api/liswork/xmKnowledge/xmKnowledgeApi'
|
||||||
import { ElMessage } from 'element-plus'
|
import { ElMessage } from 'element-plus'
|
||||||
|
|
||||||
|
|||||||
@ -8,7 +8,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import CustomTable from '@/components/elTable/index.vue'
|
import CustomTable from '@/components/ElTable/index.vue'
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
dataList: {
|
dataList: {
|
||||||
|
|||||||
@ -38,7 +38,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import CustomTable from '@/components/elTable/index.vue'
|
import CustomTable from '@/components/ElTable/index.vue'
|
||||||
import { queryService, queryDetailService, delService } from '@/api/liswork/xmKnowledge/xmKnowledgeApi'
|
import { queryService, queryDetailService, delService } from '@/api/liswork/xmKnowledge/xmKnowledgeApi'
|
||||||
import TableRight from './TableData.vue'
|
import TableRight from './TableData.vue'
|
||||||
import Modify from './Modify.vue'
|
import Modify from './Modify.vue'
|
||||||
|
|||||||
@ -1,20 +1,20 @@
|
|||||||
<template>
|
<template>
|
||||||
<!-- 报告项目维护 -->
|
<!-- 报告项目维护 -->
|
||||||
<el-form ref="form" :model="formData" label-width="80px">
|
<el-form ref="form" :model="formData" label-width="80px">
|
||||||
<el-form-item label="项目代号" prop="xmdh">
|
<el-form-item label="项目代号" prop="xmdh">
|
||||||
<el-input placeholder="项目代号" v-model="formData.xmdh"></el-input>
|
<el-input placeholder="项目代号" v-model="formData.xmdh"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="项目名称" prop="xmmc">
|
<el-form-item label="项目名称" prop="xmmc">
|
||||||
<el-input placeholder="项目名称" v-model="formData.xmmc"></el-input>
|
<el-input placeholder="项目名称" v-model="formData.xmmc"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
|
|
||||||
<CustomTable ref="tableRef" :data="dataList" :columns="columns" :enable-column-drag="true" @column-drag-end="handleColumnDragEnd"
|
<CustomTable ref="tableRef" :data="dataList" :columns="columns" :enable-column-drag="true"
|
||||||
:config="tableConfig"/>
|
@column-drag-end="handleColumnDragEnd" :config="tableConfig" />
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import CustomTable from '@/components/elTable/index.vue'
|
import CustomTable from '@/components/ElTable/index.vue'
|
||||||
const formData = ref()
|
const formData = ref()
|
||||||
const dataList = ref()
|
const dataList = ref()
|
||||||
const columns = ref([
|
const columns = ref([
|
||||||
@ -40,5 +40,4 @@ const handleColumnDragEnd = (data: any) => {
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss"></style>
|
||||||
</style>
|
|
||||||
|
|||||||
@ -3,52 +3,22 @@
|
|||||||
<!-- 搜索表单 -->
|
<!-- 搜索表单 -->
|
||||||
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch">
|
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch">
|
||||||
<el-form-item :label="menuname + '类别'" prop="paramType">
|
<el-form-item :label="menuname + '类别'" prop="paramType">
|
||||||
<el-select
|
<el-select v-model="queryParams.paramType" :placeholder="`请选择${menuname}类别`" clearable style="width: 200px"
|
||||||
v-model="queryParams.paramType"
|
@change="handleQuery">
|
||||||
:placeholder="`请选择${menuname}类别`"
|
<el-option v-for="item in paramTypeOptions" :key="item.value" :label="item.label" :value="item.value" />
|
||||||
clearable
|
|
||||||
style="width: 200px"
|
|
||||||
@change="handleQuery"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="item in paramTypeOptions"
|
|
||||||
:key="item.value"
|
|
||||||
:label="item.label"
|
|
||||||
:value="item.value"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="menuname + '编码'" prop="paramCode">
|
<el-form-item :label="menuname + '编码'" prop="paramCode">
|
||||||
<el-input
|
<el-input v-model="queryParams.paramCode" :placeholder="`请输入${menuname}编码`" clearable style="width: 200px"
|
||||||
v-model="queryParams.paramCode"
|
@keyup.enter="handleQuery" />
|
||||||
:placeholder="`请输入${menuname}编码`"
|
|
||||||
clearable
|
|
||||||
style="width: 200px"
|
|
||||||
@keyup.enter="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="`${menuname}名称`" prop="paramName">
|
<el-form-item :label="`${menuname}名称`" prop="paramName">
|
||||||
<el-input
|
<el-input v-model="queryParams.paramName" :placeholder="`请输入${menuname}名称`" clearable style="width: 200px"
|
||||||
v-model="queryParams.paramName"
|
@keyup.enter="handleQuery" />
|
||||||
:placeholder="`请输入${menuname}名称`"
|
|
||||||
clearable
|
|
||||||
style="width: 200px"
|
|
||||||
@keyup.enter="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="状态" prop="status">
|
<el-form-item label="状态" prop="status">
|
||||||
<el-select
|
<el-select v-model="queryParams.status" placeholder="状态" clearable style="width: 200px">
|
||||||
v-model="queryParams.status"
|
<el-option v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||||
placeholder="状态"
|
|
||||||
clearable
|
|
||||||
style="width: 200px"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="dict in sys_normal_disable"
|
|
||||||
:key="dict.value"
|
|
||||||
:label="dict.label"
|
|
||||||
:value="dict.value"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
@ -71,45 +41,44 @@
|
|||||||
<el-col :span="1.5">
|
<el-col :span="1.5">
|
||||||
<el-button type="warning" plain icon="Download" @click="handleExport">导出</el-button>
|
<el-button type="warning" plain icon="Download" @click="handleExport">导出</el-button>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="warning" plain icon="Document" @click="copyTem">复制模版</el-button>
|
||||||
|
</el-col>
|
||||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
<!-- 数据表格 -->
|
<!-- 数据表格 -->
|
||||||
<div class="table-container">
|
<div class="table-container">
|
||||||
<el-table
|
<el-table v-loading="loading" :data="regdictList" @selection-change="handleSelectionChange" class="param-table"
|
||||||
v-loading="loading"
|
height="100%">
|
||||||
:data="regdictList"
|
|
||||||
@selection-change="handleSelectionChange"
|
|
||||||
class="param-table"
|
|
||||||
height="100%"
|
|
||||||
>
|
|
||||||
<el-table-column type="selection" width="55" align="center" />
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
<el-table-column :label="`${menuname}编号`" align="center" prop="paramId" v-if="false" />
|
<el-table-column :label="`${menuname}编号`" align="center" prop="paramId" v-if="false" />
|
||||||
<el-table-column :label="`${menuname}类别`" align="center" prop="paramType" width="100" show-overflow-tooltip>
|
<el-table-column :label="`${menuname}类别`" align="center" prop="paramType" width="100" show-overflow-tooltip>
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<span>
|
<span>
|
||||||
{{ paramTypeOptions.find(item => item.value === scope.row.paramType)?.label || scope.row.paramOptiontype }}
|
{{paramTypeOptions.find(item => item.value == scope.row.paramType)?.label || scope.row.paramType}}
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column :label="`${menuname}编码`" align="center" prop="paramCode" show-overflow-tooltip >
|
<el-table-column :label="`${menuname}编码`" align="center" prop="paramCode" show-overflow-tooltip>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column :label="`${menuname}名称`" align="left" prop="paramName" show-overflow-tooltip />
|
<el-table-column :label="`${menuname}名称`" align="left" prop="paramName" show-overflow-tooltip />
|
||||||
<el-table-column label="默认值" align="left" prop="paramDefvalue" width="80" show-overflow-tooltip />
|
<el-table-column label="默认值" align="left" prop="paramDefvalue" width="80" show-overflow-tooltip />
|
||||||
<el-table-column label="前置条件" align="left" prop="precondition" width="100" show-overflow-tooltip />
|
<el-table-column label="前置条件" align="left" prop="precondition" width="100" show-overflow-tooltip />
|
||||||
<el-table-column label="筛选条件" align="left" prop="paramSql" width="120" show-overflow-tooltip />
|
<el-table-column label="筛选条件" align="left" prop="paramSql" width="120" show-overflow-tooltip />
|
||||||
<el-table-column label="筛选类型" align="left" prop="paramOptiontype" width="80" show-overflow-tooltip >
|
<el-table-column label="筛选类型" align="left" prop="paramOptiontype" width="80" show-overflow-tooltip>
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<span>
|
<span>
|
||||||
{{ paramOptiontypeOptions.find(item => item.value === scope.row.paramOptiontype)?.label || scope.row.paramOptiontype }}
|
{{paramOptiontypeOptions.find(item => item.value === scope.row.paramOptiontype)?.label ||
|
||||||
|
scope.row.paramOptiontype}}
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="值域" align="left" prop="remark" width="100" show-overflow-tooltip />
|
<el-table-column label="值域" align="left" prop="remark" width="100" show-overflow-tooltip />
|
||||||
<el-table-column label="是否隐藏" align="center" prop="paramHide" width="80" >
|
<el-table-column label="是否隐藏" align="center" prop="paramHide" width="80">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<dict-tag :options="sys_yes_no" :value="scope.row.paramHide" />
|
<dict-tag :options="sys_yes_no" :value="scope.row.paramHide" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="表格排序" align="center" prop="paramSequence" width="80" />
|
<el-table-column label="表格排序" align="center" prop="paramSequence" width="80" />
|
||||||
<el-table-column label="排序" align="center" prop="paramSort" width="80" />
|
<el-table-column label="排序" align="center" prop="paramSort" width="80" />
|
||||||
@ -133,29 +102,15 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 分页组件 -->
|
<!-- 分页组件 -->
|
||||||
<pagination
|
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
|
||||||
v-show="total > 0"
|
v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||||
:total="total"
|
|
||||||
v-model:page="queryParams.pageNum"
|
|
||||||
v-model:limit="queryParams.pageSize"
|
|
||||||
@pagination="getList"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<!-- 新增/修改对话框 -->
|
<!-- 新增/修改对话框 -->
|
||||||
<el-dialog :title="title" v-model="open" width="700px" class="compact-dialog">
|
<el-dialog :title="title" v-model="open" width="700px" class="compact-dialog">
|
||||||
<el-form ref="statsparamRef" :model="form" :rules="rules" label-width="150px" class="compact-form">
|
<el-form ref="statsparamRef" :model="form" :rules="rules" label-width="150px" class="compact-form">
|
||||||
<el-form-item :label="`${menuname}类别`" prop="paramType">
|
<el-form-item :label="`${menuname}类别`" prop="paramType">
|
||||||
<el-select
|
<el-select v-model="form.paramType" :placeholder="`请选择${menuname}类别`" style="width: 100%">
|
||||||
v-model="form.paramType"
|
<el-option v-for="item in paramTypeOptions" :key="item.value" :label="item.label" :value="item.value" />
|
||||||
:placeholder="`请选择${menuname}类别`"
|
|
||||||
style="width: 100%"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="item in paramTypeOptions"
|
|
||||||
:key="item.value"
|
|
||||||
:label="item.label"
|
|
||||||
:value="item.value"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="`${menuname}编码`" prop="paramCode">
|
<el-form-item :label="`${menuname}编码`" prop="paramCode">
|
||||||
@ -168,17 +123,9 @@
|
|||||||
<el-input v-model="form.paramDefvalue" :placeholder="`请输入${menuname}默认值`" />
|
<el-input v-model="form.paramDefvalue" :placeholder="`请输入${menuname}默认值`" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="`${menuname}筛选类型`" prop="paramOptiontype">
|
<el-form-item :label="`${menuname}筛选类型`" prop="paramOptiontype">
|
||||||
<el-select
|
<el-select v-model="form.paramOptiontype" :placeholder="`请选择${menuname}筛选类型`" style="width: 100%">
|
||||||
v-model="form.paramOptiontype"
|
<el-option v-for="item in paramOptiontypeOptions" :key="item.value" :label="item.label"
|
||||||
:placeholder="`请选择${menuname}筛选类型`"
|
:value="item.value" />
|
||||||
style="width: 100%"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="item in paramOptiontypeOptions"
|
|
||||||
:key="item.value"
|
|
||||||
:label="item.label"
|
|
||||||
:value="item.value"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="`${menuname}前置条件`" prop="precondition">
|
<el-form-item :label="`${menuname}前置条件`" prop="precondition">
|
||||||
@ -190,11 +137,7 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="是否隐藏" prop="paramHide">
|
<el-form-item label="是否隐藏" prop="paramHide">
|
||||||
<el-radio-group v-model="form.paramHide">
|
<el-radio-group v-model="form.paramHide">
|
||||||
<el-radio
|
<el-radio v-for="dict in sys_yes_no" :key="dict.value" :label="dict.value">
|
||||||
v-for="dict in sys_yes_no"
|
|
||||||
:key="dict.value"
|
|
||||||
:label="dict.value"
|
|
||||||
>
|
|
||||||
{{ dict.label }}
|
{{ dict.label }}
|
||||||
</el-radio>
|
</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
@ -207,11 +150,7 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="状态" prop="status">
|
<el-form-item label="状态" prop="status">
|
||||||
<el-radio-group v-model="form.status">
|
<el-radio-group v-model="form.status">
|
||||||
<el-radio
|
<el-radio v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.value">
|
||||||
v-for="dict in sys_normal_disable"
|
|
||||||
:key="dict.value"
|
|
||||||
:label="dict.value"
|
|
||||||
>
|
|
||||||
{{ dict.label }}
|
{{ dict.label }}
|
||||||
</el-radio>
|
</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
@ -229,6 +168,19 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
||||||
|
<!-- 复制模板 -->
|
||||||
|
<el-dialog title="复制模板" v-model="copyOpen" width="300px">
|
||||||
|
<el-form-item label="模板">
|
||||||
|
<el-select v-model="copyTemplate" placeholder="请选择复制模板" style="width: 100%">
|
||||||
|
<el-option v-for="item in copyTemplateOptions" :key="item.value" :label="item.statsName"
|
||||||
|
:value="item.statsCode" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<template #footer>
|
||||||
|
<el-button type="primary" @click="copyTemplateSubmit">确 定</el-button>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -239,20 +191,28 @@ import {
|
|||||||
getstatsparam,
|
getstatsparam,
|
||||||
liststatsparam,
|
liststatsparam,
|
||||||
updatestatsparam
|
updatestatsparam
|
||||||
} from "@/api/liswork/xtwh/statsparameterApi.ts";
|
} from "@/api/liswork/xtwh/StatsparameterApi.ts";
|
||||||
|
import { liststatstemp, copyParameter } from "@/api/liswork/xtwh/StatstemplateApi.ts";
|
||||||
|
import { copy } from "clipboard";
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
// ========== 基础变量声明(避免提前访问) ==========
|
// ========== 基础变量声明(避免提前访问) ==========
|
||||||
// 菜单名称
|
// 菜单名称
|
||||||
const menuname = ref("参数明细");
|
const menuname = ref("参数明细");
|
||||||
const statsCode = ref("1");
|
const statsCode = ref("1");
|
||||||
|
|
||||||
|
const copyOpen = ref(false);
|
||||||
|
const copyTemplate = ref("");
|
||||||
|
const copyTemplateOptions = ref([])
|
||||||
|
|
||||||
// 报表类别选项
|
// 报表类别选项
|
||||||
const paramTypeOptions = ref([
|
const paramTypeOptions = ref([
|
||||||
{ label: "过滤参数", value: "0"},
|
{ label: "过滤参数", value: "0" },
|
||||||
{ label: "显示列", value: "1"},
|
{ label: "显示列", value: "1" },
|
||||||
{ label: "过滤+显示", value: "2"},
|
{ label: "过滤+显示", value: "2" },
|
||||||
{ label: "汇总栏", value: "3"},
|
{ label: "汇总栏", value: "3" },
|
||||||
{ label: "子查询", value: "4"},
|
{ label: "子查询", value: "4" },
|
||||||
{ label: "逻辑条件", value: "5"}
|
{ label: "逻辑条件", value: "5" },
|
||||||
|
{ label: "计算列", value: "6" }
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// 图表类型选项
|
// 图表类型选项
|
||||||
@ -275,10 +235,10 @@ const proxy = instance?.proxy || null;
|
|||||||
|
|
||||||
// 字典数据(空值保护)
|
// 字典数据(空值保护)
|
||||||
const sys_normal_disable = proxy?.useDict("sys_normal_disable")?.sys_normal_disable || [];
|
const sys_normal_disable = proxy?.useDict("sys_normal_disable")?.sys_normal_disable || [];
|
||||||
const sys_yes_no= proxy?.useDict("sys_yes_no")?.sys_yes_no || [];
|
const sys_yes_no = proxy?.useDict("sys_yes_no")?.sys_yes_no || [];
|
||||||
// 表单数据
|
// 表单数据
|
||||||
const form = ref({
|
const form = ref({
|
||||||
statsCode:statsCode.value,
|
statsCode: statsCode.value,
|
||||||
paramId: undefined,
|
paramId: undefined,
|
||||||
paramCode: undefined,
|
paramCode: undefined,
|
||||||
paramName: undefined,
|
paramName: undefined,
|
||||||
@ -287,8 +247,8 @@ const form = ref({
|
|||||||
paramType: paramTypeOptions.value[0]?.value || "",
|
paramType: paramTypeOptions.value[0]?.value || "",
|
||||||
paramOptiontype: paramOptiontypeOptions.value[0]?.value || "",
|
paramOptiontype: paramOptiontypeOptions.value[0]?.value || "",
|
||||||
paramSql: "", // SQL语句(绑定到SqlEditor组件)
|
paramSql: "", // SQL语句(绑定到SqlEditor组件)
|
||||||
paramSequence:0,
|
paramSequence: 0,
|
||||||
paramHide:"",
|
paramHide: "",
|
||||||
paramSort: 0,
|
paramSort: 0,
|
||||||
status: "0",
|
status: "0",
|
||||||
remark: undefined
|
remark: undefined
|
||||||
@ -342,9 +302,9 @@ function resetForm() {
|
|||||||
precondition: undefined,
|
precondition: undefined,
|
||||||
paramType: paramTypeOptions.value[0]?.value || "",
|
paramType: paramTypeOptions.value[0]?.value || "",
|
||||||
paramOptiontype: paramOptiontypeOptions.value[0]?.value || "",
|
paramOptiontype: paramOptiontypeOptions.value[0]?.value || "",
|
||||||
paramSequence:0,
|
paramSequence: 0,
|
||||||
paramHide:"",
|
paramHide: "",
|
||||||
statsCode:statsCode.value,
|
statsCode: statsCode.value,
|
||||||
paramSql: "",
|
paramSql: "",
|
||||||
paramSort: 0,
|
paramSort: 0,
|
||||||
status: "0",
|
status: "0",
|
||||||
@ -361,18 +321,23 @@ function getList() {
|
|||||||
loading.value = true;
|
loading.value = true;
|
||||||
const params = queryParams.value || { pageNum: 1, pageSize: 30 };
|
const params = queryParams.value || { pageNum: 1, pageSize: 30 };
|
||||||
liststatsparam(params)
|
liststatsparam(params)
|
||||||
.then(response => {
|
.then(response => {
|
||||||
regdictList.value = response?.rows || [];
|
regdictList.value = response?.rows || [];
|
||||||
total.value = response?.total || 0;
|
total.value = response?.total || 0;
|
||||||
})
|
})
|
||||||
.catch(() => {
|
.catch(() => {
|
||||||
regdictList.value = [];
|
regdictList.value = [];
|
||||||
total.value = 0;
|
total.value = 0;
|
||||||
proxy && proxy.$modal.msgError("数据加载失败");
|
proxy && proxy.$modal.msgError("数据加载失败");
|
||||||
})
|
})
|
||||||
.finally(() => {
|
.finally(() => {
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
liststatstemp().then(response => {
|
||||||
|
copyTemplateOptions.value = response?.rows || [];
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 搜索
|
// 搜索
|
||||||
@ -450,6 +415,21 @@ function handleExport() {
|
|||||||
}, `报表模板_${new Date().getTime()}.xlsx`);
|
}, `报表模板_${new Date().getTime()}.xlsx`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const copyTem = () => {
|
||||||
|
copyOpen.value = true;
|
||||||
|
copyTemplate.value = ''
|
||||||
|
}
|
||||||
|
|
||||||
|
const copyTemplateSubmit = () => {
|
||||||
|
copyParameter({ statsCode: statsCode.value, statsCodeother: copyTemplate.value }).then(res => {
|
||||||
|
if (res.code == 200) {
|
||||||
|
getList()
|
||||||
|
proxy && proxy.$modal.msgSuccess("复制成功")
|
||||||
|
copyOpen.value = false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// 提交表单
|
// 提交表单
|
||||||
async function submitForm() {
|
async function submitForm() {
|
||||||
if (!proxy || !proxy.$refs || !proxy.$refs.statsparamRef) return;
|
if (!proxy || !proxy.$refs || !proxy.$refs.statsparamRef) return;
|
||||||
@ -488,8 +468,8 @@ function cancel() {
|
|||||||
getTypes(route.query && route.query.statsCode);
|
getTypes(route.query && route.query.statsCode);
|
||||||
/** 查询字典类型详细 */
|
/** 查询字典类型详细 */
|
||||||
function getTypes(statsCode0) {
|
function getTypes(statsCode0) {
|
||||||
statsCode.value=statsCode0
|
statsCode.value = statsCode0
|
||||||
queryParams.value.statsCode =statsCode0;
|
queryParams.value.statsCode = statsCode0;
|
||||||
getList();
|
getList();
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
@ -544,6 +524,10 @@ function getTypes(statsCode0) {
|
|||||||
.compact-form {
|
.compact-form {
|
||||||
--el-form-item-margin-bottom: 8px;
|
--el-form-item-margin-bottom: 8px;
|
||||||
line-height: 1.4;
|
line-height: 1.4;
|
||||||
|
|
||||||
|
.el-form-item {
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.compact-form .el-form-item__label) {
|
:deep(.compact-form .el-form-item__label) {
|
||||||
|
|||||||
@ -34,7 +34,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import CustomTable from '@/components/elTable/index.vue'
|
import CustomTable from '@/components/ElTable/index.vue'
|
||||||
import YQSelectTable from '@/components/SelectTable/YQSelectTable/index.vue';
|
import YQSelectTable from '@/components/SelectTable/YQSelectTable/index.vue';
|
||||||
import { queryService, queryXmService, addService, delService } from '@/api/liswork/xtwh/xmFeeinstrApi';
|
import { queryService, queryXmService, addService, delService } from '@/api/liswork/xtwh/xmFeeinstrApi';
|
||||||
import { queryOneService } from '@/api/system/parameter'
|
import { queryOneService } from '@/api/system/parameter'
|
||||||
|
|||||||
@ -60,7 +60,7 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { queryListService, queryDetailService, queryOldxminfo, addXminfo, delXminfo, searchxminfo } from '@/api/liswork/xtwh/xmReqItemVsApi';
|
import { queryListService, queryDetailService, queryOldxminfo, addXminfo, delXminfo, searchxminfo } from '@/api/liswork/xtwh/xmReqItemVsApi';
|
||||||
import YQSelectTable from '@/components/SelectTable/YQSelectTable/index.vue';
|
import YQSelectTable from '@/components/SelectTable/YQSelectTable/index.vue';
|
||||||
import CustomTable from '@/components/elTable/index.vue'
|
import CustomTable from '@/components/ElTable/index.vue'
|
||||||
import { ElMessage } from 'element-plus';
|
import { ElMessage } from 'element-plus';
|
||||||
import { useCommonStore } from '@/store/modules/commonStore'
|
import { useCommonStore } from '@/store/modules/commonStore'
|
||||||
const mbStore = useCommonStore();
|
const mbStore = useCommonStore();
|
||||||
|
|||||||
@ -480,7 +480,7 @@ onMounted(() => {
|
|||||||
.el-table__fixed-header-wrapper {
|
.el-table__fixed-header-wrapper {
|
||||||
th {
|
th {
|
||||||
word-break: break-word;
|
word-break: break-word;
|
||||||
background-color: #c0c0c0 !important;
|
background-color: #eff6fa !important;
|
||||||
color: #000;
|
color: #000;
|
||||||
font-size: .8125rem;
|
font-size: .8125rem;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
@ -491,21 +491,21 @@ onMounted(() => {
|
|||||||
|
|
||||||
|
|
||||||
:deep(.el-table--border th.el-table__cell) {
|
:deep(.el-table--border th.el-table__cell) {
|
||||||
border-right: 1px solid #d1d4d9 !important;
|
border-right: 1px solid #ccc !important;
|
||||||
border-bottom: 1px solid #d1d4d9 !important;
|
border-bottom: 1px solid #ccc !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.el-table--border) {
|
:deep(.el-table--border) {
|
||||||
border: 1px solid #d1d4d9 !important;
|
border: 1px solid #ccc !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.el-table td.el-table__cell,
|
:deep(.el-table td.el-table__cell,
|
||||||
.el-table th.el-table__cell.is-leaf) {
|
.el-table th.el-table__cell.is-leaf) {
|
||||||
border-bottom: 1px solid #d1d4d9 !important;
|
border-bottom: 1px solid #ccc !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.el-table--border .el-table__cell) {
|
:deep(.el-table--border .el-table__cell) {
|
||||||
border-right: 1px solid #d1d4d9 !important;
|
border-right: 1px solid #ccc !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.el-table__row) {
|
:deep(.el-table__row) {
|
||||||
|
|||||||
@ -104,7 +104,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import CustomTable from '@/components/elTable/index.vue'
|
import CustomTable from '@/components/ElTable/index.vue'
|
||||||
import { querySample } from '@/api/regional/index'
|
import { querySample } from '@/api/regional/index'
|
||||||
import SelectTable from '@/components/SelectTable/index.vue';
|
import SelectTable from '@/components/SelectTable/index.vue';
|
||||||
import { classCom } from '@/utils/classCom';
|
import { classCom } from '@/utils/classCom';
|
||||||
|
|||||||
@ -78,7 +78,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import CustomTable from '@/components/elTable/index.vue'
|
import CustomTable from '@/components/ElTable/index.vue'
|
||||||
import { querySampleSign, sampleSign } from '@/api/regional/index'
|
import { querySampleSign, sampleSign } from '@/api/regional/index'
|
||||||
import SelectTable from '@/components/SelectTable/index.vue';
|
import SelectTable from '@/components/SelectTable/index.vue';
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
|
|||||||
@ -78,7 +78,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import CustomTable from '@/components/elTable/index.vue'
|
import CustomTable from '@/components/ElTable/index.vue'
|
||||||
import { querySampleSignBack, sampleSign } from '@/api/regional/index'
|
import { querySampleSignBack, sampleSign } from '@/api/regional/index'
|
||||||
import SelectTable from '@/components/SelectTable/index.vue';
|
import SelectTable from '@/components/SelectTable/index.vue';
|
||||||
import { classCom } from '@/utils/classCom';
|
import { classCom } from '@/utils/classCom';
|
||||||
|
|||||||
@ -87,7 +87,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import CustomTable from '@/components/elTable/index.vue'
|
import CustomTable from '@/components/ElTable/index.vue'
|
||||||
import { querySample, sampleSign } from '@/api/regional/index'
|
import { querySample, sampleSign } from '@/api/regional/index'
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
import { listhospital } from "@/api/regional/dict/hospital.js";
|
import { listhospital } from "@/api/regional/dict/hospital.js";
|
||||||
|
|||||||
@ -163,7 +163,7 @@
|
|||||||
import { ref, reactive, toRaw, computed, watch, nextTick, onMounted, } from 'vue';
|
import { ref, reactive, toRaw, computed, watch, nextTick, onMounted, } from 'vue';
|
||||||
import { HiprintPrinter } from '@/utils/hiprintPrinter';
|
import { HiprintPrinter } from '@/utils/hiprintPrinter';
|
||||||
import { classCom } from '@/utils/classCom';
|
import { classCom } from '@/utils/classCom';
|
||||||
import CustomTable from '@/components/elTable/index.vue'
|
import CustomTable from '@/components/ElTable/index.vue'
|
||||||
import { useRouter } from 'vue-router'
|
import { useRouter } from 'vue-router'
|
||||||
import { usePrintStore } from '@/store/modules/printStore'
|
import { usePrintStore } from '@/store/modules/printStore'
|
||||||
import { fetchCodeList, addObj, fetchCodeDetail, fetchCodeExec, fetchCodeReqmain, printSendSample, printsetup } from '@/api/checkCode/index'
|
import { fetchCodeList, addObj, fetchCodeDetail, fetchCodeExec, fetchCodeReqmain, printSendSample, printsetup } from '@/api/checkCode/index'
|
||||||
|
|||||||
@ -178,7 +178,7 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, reactive, toRaw, computed, watch, nextTick, onMounted } from 'vue';
|
import { ref, reactive, toRaw, computed, watch, nextTick, onMounted } from 'vue';
|
||||||
import CustomTable from '@/components/elTable/index.vue'
|
import CustomTable from '@/components/ElTable/index.vue'
|
||||||
import { useRouter } from 'vue-router'
|
import { useRouter } from 'vue-router'
|
||||||
import { reportList, reportPrintPdf, reportResult, reportMedList, reportFsresult } from '@/api/checkCode/index'
|
import { reportList, reportPrintPdf, reportResult, reportMedList, reportFsresult } from '@/api/checkCode/index'
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
|
|||||||
@ -78,7 +78,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import CustomTable from '@/components/elTable/index.vue'
|
import CustomTable from '@/components/ElTable/index.vue'
|
||||||
import { querySampleSignBack, sampleSign } from '@/api/regional/index'
|
import { querySampleSignBack, sampleSign } from '@/api/regional/index'
|
||||||
import SelectTable from '@/components/SelectTable/index.vue';
|
import SelectTable from '@/components/SelectTable/index.vue';
|
||||||
import { classCom } from '@/utils/classCom';
|
import { classCom } from '@/utils/classCom';
|
||||||
|
|||||||
@ -45,7 +45,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import CustomTable from '@/components/elTable/index.vue'
|
import CustomTable from '@/components/ElTable/index.vue'
|
||||||
import { sampleitemCount, sampleSign } from '@/api/regional/index'
|
import { sampleitemCount, sampleSign } from '@/api/regional/index'
|
||||||
import SelectTable from '@/components/SelectTable/index.vue';
|
import SelectTable from '@/components/SelectTable/index.vue';
|
||||||
import { classCom } from '@/utils/classCom';
|
import { classCom } from '@/utils/classCom';
|
||||||
|
|||||||
@ -5,12 +5,14 @@
|
|||||||
*/
|
*/
|
||||||
<template>
|
<template>
|
||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<el-button type="primary" @click="search" size="default">查询</el-button>
|
<div class="mb8">
|
||||||
<el-button type="primary" @click="print" size="default">打印</el-button>
|
<el-button type="primary" icon="Search" @click="search" size="default">查询</el-button>
|
||||||
|
<el-button type="warning" icon="Printer" @click="print" size="default">打印</el-button>
|
||||||
|
</div>
|
||||||
|
|
||||||
<el-form ref="form" :model="queryParams" inline size="small" class="stats-form">
|
<el-form ref="form" :model="queryParams" inline size="small" class="stats-form">
|
||||||
<el-row :gutter="10" class="stats-form-row">
|
<el-row :gutter="10" class="stats-form-row">
|
||||||
<el-col :span="16">
|
<el-col :span="checkBoxs.length ? 16 : 24">
|
||||||
<div class="form-panel">
|
<div class="form-panel">
|
||||||
<div class="tips">统计条件</div>
|
<div class="tips">统计条件</div>
|
||||||
<div class="panel-content panel-content-left">
|
<div class="panel-content panel-content-left">
|
||||||
@ -32,7 +34,6 @@
|
|||||||
placeholder="请选择" style="width:150px" size="small" />
|
placeholder="请选择" style="width:150px" size="small" />
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
||||||
<template v-if="item.paramOptiontype == '0'">
|
<template v-if="item.paramOptiontype == '0'">
|
||||||
<el-checkbox v-model="item.paramDefvalue" :label="item.paramName" true-value="1" false-value="0" />
|
<el-checkbox v-model="item.paramDefvalue" :label="item.paramName" true-value="1" false-value="0" />
|
||||||
</template>
|
</template>
|
||||||
@ -42,7 +43,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<div class="form-panel">
|
<div class="form-panel" v-if="checkBoxs.length">
|
||||||
<div class="tips">统计项目</div>
|
<div class="tips">统计项目</div>
|
||||||
<div class="panel-content panel-content-right">
|
<div class="panel-content panel-content-right">
|
||||||
<el-form-item label="" class="stats-items-form-item">
|
<el-form-item label="" class="stats-items-form-item">
|
||||||
@ -59,20 +60,51 @@
|
|||||||
</el-form>
|
</el-form>
|
||||||
|
|
||||||
<div class="print_box">
|
<div class="print_box">
|
||||||
|
<div class="print_content">
|
||||||
|
<div class="title">{{ formatDict(userStore.sysLoginParam.loginYLJG, 'HOS') }}</div>
|
||||||
|
<div class="content">{{ statsTitle }}</div>
|
||||||
|
<div class="table-container bb_table">
|
||||||
|
<vxe-table :data="tableData" border v-loading="loading" height="100%"
|
||||||
|
:tooltip-config="{ appendToBody: true, zIndex: 3000 }" show-footer :footer-method="getSummaries"
|
||||||
|
:scroll-y="{ enabled: true, rSize: 30, height: '100%', }" show-footer-overflow>
|
||||||
|
<vxe-column v-for="col in tableColumns" :key="col.prop" :title="col.label" :field="col.prop" width="100"
|
||||||
|
show-overflow align="center">
|
||||||
|
<template #default="scope">
|
||||||
|
{{ col.dictType ? formatDict(scope.row[col.prop], col.dictType) : scope.row[col.prop] }}
|
||||||
|
</template>
|
||||||
|
</vxe-column>
|
||||||
|
</vxe-table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 视觉移出屏幕,页面看不见,但DOM完整存在用于iframe打印 -->
|
||||||
|
<div class="print-only-wrap" id="printWrap">
|
||||||
<div class="title">{{ formatDict(userStore.sysLoginParam.loginYLJG, 'HOS') }}</div>
|
<div class="title">{{ formatDict(userStore.sysLoginParam.loginYLJG, 'HOS') }}</div>
|
||||||
<div class="content">{{ statsTitle }}</div>
|
<div class="content">{{ statsTitle }}</div>
|
||||||
<div class="table-container">
|
<!-- 原生完整table,无滚动、无虚拟DOM,所有数据全部渲染 -->
|
||||||
<vxe-table :data="tableData" border v-loading="loading" height="100%" class="mytable-style"
|
<table class="print-table" border="1" cellpadding="0" cellspacing="0">
|
||||||
:tooltip-config="{ appendToBody: true, zIndex: 3000 }" show-footer :footer-method="getSummaries"
|
<thead>
|
||||||
:scroll-y="{ enabled: true, rSize: 30, height: '100%', }">
|
<tr>
|
||||||
<vxe-column v-for="col in tableColumns" :key="col.prop" :title="col.label" :field="col.prop" width="100"
|
<th v-for="col in tableColumns" :key="col.prop">{{ col.label }}</th>
|
||||||
show-overflow align="center">
|
</tr>
|
||||||
<template #default="scope">
|
</thead>
|
||||||
{{ col.dictType ? formatDict(scope.row[col.prop], col.dictType) : scope.row[col.prop] }}
|
<tbody>
|
||||||
</template>
|
<tr v-for="(row, rowIdx) in tableData" :key="rowIdx">
|
||||||
</vxe-column>
|
<td v-for="col in tableColumns" :key="col.prop" align="center">
|
||||||
</vxe-table>
|
{{ col.dictType ? formatDict(row[col.prop], col.dictType) : row[col.prop] }}
|
||||||
</div>
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
<!-- 合计行,和vxe合计逻辑完全一致 -->
|
||||||
|
<tfoot>
|
||||||
|
<tr>
|
||||||
|
<td v-for="(col, colIdx) in tableColumns" :key="col.prop" align="center">
|
||||||
|
{{ getPrintFooterText(col, colIdx) }}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tfoot>
|
||||||
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@ -84,7 +116,7 @@ import { classCom } from '@/utils/classCom';
|
|||||||
import { getstatsTemplate, getstatsQuery } from "@/api/liswork/xtwh/StatsparameterApi";
|
import { getstatsTemplate, getstatsQuery } from "@/api/liswork/xtwh/StatsparameterApi";
|
||||||
import { listUser } from '@/api/system/user.js'
|
import { listUser } from '@/api/system/user.js'
|
||||||
import useUserStore from '@/store/modules/user'
|
import useUserStore from '@/store/modules/user'
|
||||||
import { getDictData, formatDict } from '@/hooks'
|
import { getDictData, formatDict, dictData } from '@/hooks'
|
||||||
import { ElMessage } from "element-plus";
|
import { ElMessage } from "element-plus";
|
||||||
const userStore = useUserStore()
|
const userStore = useUserStore()
|
||||||
const mbStore = useCommonStore();
|
const mbStore = useCommonStore();
|
||||||
@ -98,9 +130,9 @@ const Parameter = ref([])
|
|||||||
const statsTitle = ref('' || '报告统计')
|
const statsTitle = ref('' || '报告统计')
|
||||||
const tableData = ref([])
|
const tableData = ref([])
|
||||||
const loading = ref(false)
|
const loading = ref(false)
|
||||||
const coloums = ref([]) //固定列
|
const sumColoums = ref([]) //计算列
|
||||||
const checkBoxs = ref([])
|
const checkBoxs = ref([])
|
||||||
|
const originalColumn = ref([]) //原始列
|
||||||
const tableColumns = ref([]);
|
const tableColumns = ref([]);
|
||||||
const Template = ref({})
|
const Template = ref({})
|
||||||
|
|
||||||
@ -130,57 +162,78 @@ const handletime = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const getSummaries = ({ columns, data }) => {
|
const getSummaries = ({ columns, data }) => {
|
||||||
|
if (!sumColoums.value.length) return
|
||||||
|
|
||||||
const sumSamplecnt = tableData.value.reduce((sum, item) => sum + item.cp_samplecnt, 0)
|
// 构建合计行数据
|
||||||
const sumCnt = tableData.value.reduce((sum, item) => sum + item.cp_cnt, 0)
|
const footerData = columns.map((column) => {
|
||||||
const sumAmt = tableData.value.reduce((sum, item) => sum + item.cp_amt, 0).toFixed(2)
|
const colField = column.field;
|
||||||
|
// 匹配当前列是否是需要合计的列
|
||||||
|
const isSumColumn = sumColoums.value.some(item => item.paramCode === colField);
|
||||||
|
|
||||||
// 2. 定义合计行每一列的内容
|
// if (colField === tableColumns.value[0]?.prop) {
|
||||||
const footerData = columns.map((column, index) => {
|
// // 第一列固定显示"合计"
|
||||||
switch (column.field) {
|
// return '合计';
|
||||||
case tableColumns.value[0].prop: // 第一列显示“合计”
|
// } else
|
||||||
return '合计'
|
if (isSumColumn) {
|
||||||
case 'cp_samplecnt':
|
// 对合计列求和(处理空值/非数字)
|
||||||
return sumSamplecnt
|
const sum = data.reduce((total, row) => {
|
||||||
case 'cp_cnt':
|
const value = Number(row[colField] || 0);
|
||||||
return sumCnt
|
return total + (isNaN(value) ? 0 : value);
|
||||||
case 'cp_amt':
|
}, 0);
|
||||||
return sumAmt
|
|
||||||
default:
|
return sum;
|
||||||
return '' // 其他列空值
|
} else {
|
||||||
|
// 非合计列显示空
|
||||||
|
return '';
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return [footerData];
|
||||||
|
};
|
||||||
|
// 处理checkbox选中
|
||||||
|
const handleCheckBoxChange = (val) => {
|
||||||
|
// 基础列:保留,不随勾选删除
|
||||||
|
const baseCols = tableColumns.value.filter(col => {
|
||||||
|
// 判断是否是统计项目复选框对应的列:checkBoxs里存在该paramCode就是可选列
|
||||||
|
const isCheckItem = checkBoxs.value.some(item => item.paramCode === col.prop)
|
||||||
|
return !isCheckItem
|
||||||
})
|
})
|
||||||
|
|
||||||
return [footerData]
|
// 2. 获取当前勾选的所有可选列配置
|
||||||
|
const selectedCheckCols = checkBoxs.value
|
||||||
|
.filter(item => val.includes(item.paramCode))
|
||||||
|
.map(item => ({
|
||||||
|
key: item.paramCode,
|
||||||
|
label: item.paramName,
|
||||||
|
prop: item.paramCode,
|
||||||
|
dictType: item.remark,
|
||||||
|
paramSequence: 0
|
||||||
|
}))
|
||||||
|
|
||||||
|
// 3. 合并数组:勾选项放最前面 + 原有基础列在后
|
||||||
|
tableColumns.value = [...selectedCheckCols, ...baseCols]
|
||||||
|
|
||||||
|
let seq = 1
|
||||||
|
tableColumns.value.forEach((col, idx) => {
|
||||||
|
if (col.paramSequence === 0) {
|
||||||
|
col.paramSequence = seq++
|
||||||
|
}
|
||||||
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 查询
|
||||||
const search = () => {
|
const search = () => {
|
||||||
const checkedCols = [...coloums.value, ...checkBoxs.value];
|
originalColumn.value.forEach(item => {
|
||||||
const arr = [];
|
const matchTabCol = tableColumns.value.find(col => col.prop == item.paramCode)
|
||||||
|
if (matchTabCol) {
|
||||||
tableColumns.value.forEach((tableItem, tableIndex) => {
|
item.paramSequence = matchTabCol.paramSequence
|
||||||
const matchItem = checkedCols.find(
|
} else {
|
||||||
(checkItem) => checkItem.paramName === tableItem.label
|
item.paramSequence = 0
|
||||||
);
|
|
||||||
if (matchItem) {
|
|
||||||
arr.push({
|
|
||||||
...matchItem,
|
|
||||||
paramSequence: matchItem.paramSequence ? matchItem.paramSequence : tableIndex + 1,
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
})
|
||||||
|
|
||||||
const unmatchedItems = checkedCols.filter(
|
|
||||||
(checkItem) => !tableColumns.value.some((tableItem) => tableItem.label === checkItem.paramName)
|
|
||||||
);
|
|
||||||
|
|
||||||
unmatchedItems.forEach((item, unmatchIndex) => {
|
|
||||||
arr.push({ ...item, });
|
|
||||||
});
|
|
||||||
|
|
||||||
const data = {
|
const data = {
|
||||||
Parameter: Parameter.value,
|
Parameter: Parameter.value,
|
||||||
Column: arr,
|
Column: originalColumn.value,
|
||||||
Template: Template.value
|
Template: Template.value
|
||||||
};
|
};
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
@ -191,43 +244,136 @@ const search = () => {
|
|||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
const print = () => {
|
// 打印专用合计文本,和getSummaries逻辑统一
|
||||||
};
|
const getPrintFooterText = (col, idx) => {
|
||||||
|
// if (idx === 0) return '合计'
|
||||||
const handleCheckBoxChange = (val) => {
|
const isSumColumn = sumColoums.value.some(item => item.paramCode === col.prop)
|
||||||
|
if (!isSumColumn) return ''
|
||||||
const checkedCols = val.map(paramCode => {
|
// 求和
|
||||||
const matchItem = checkBoxs.value.find(item => item.paramCode === paramCode);
|
const sum = tableData.value.reduce((total, row) => {
|
||||||
return matchItem ? { label: matchItem.paramName, prop: matchItem.paramCode, dictType: matchItem.remark } : null;
|
const val = Number(row[col.prop] || 0)
|
||||||
}).filter(Boolean); // 过滤null
|
return total + (isNaN(val) ? 0 : val)
|
||||||
|
}, 0)
|
||||||
const fixedCols = coloums.value.map(item => ({
|
return sum
|
||||||
label: item.paramName,
|
|
||||||
prop: item.paramCode,
|
|
||||||
dictType: item.remark,
|
|
||||||
}));
|
|
||||||
|
|
||||||
tableColumns.value = [...checkedCols, ...fixedCols];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// iframe打印核心方法
|
||||||
|
const print = () => {
|
||||||
|
return;
|
||||||
|
// 获取隐藏打印容器完整HTML
|
||||||
|
const printDom = document.getElementById('printWrap')
|
||||||
|
const printHtml = printDom.outerHTML
|
||||||
|
|
||||||
|
// 打印页面内置样式(统一红边框、行高、打印A4横向、合计加粗)
|
||||||
|
const printStyle = `
|
||||||
|
<style>
|
||||||
|
@page {
|
||||||
|
size: A4 landscape;
|
||||||
|
margin: 8mm;
|
||||||
|
}
|
||||||
|
html,body {
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
.title {
|
||||||
|
font-size: 20px;
|
||||||
|
text-align: center;
|
||||||
|
font-weight: 600;
|
||||||
|
margin-bottom: 6px;
|
||||||
|
}
|
||||||
|
.content {
|
||||||
|
font-size: 16px;
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
.print-table {
|
||||||
|
width: 100%;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
.print-table th,
|
||||||
|
.print-table td {
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
height: 30px;
|
||||||
|
line-height: 30px;
|
||||||
|
font-size: 12px;
|
||||||
|
padding: 2px 4px;
|
||||||
|
}
|
||||||
|
.print-table tfoot td {
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
tr {
|
||||||
|
page-break-inside: avoid;
|
||||||
|
}
|
||||||
|
/* 打印渲染完整颜色边框 */
|
||||||
|
* {
|
||||||
|
-webkit-print-color-adjust: exact !important;
|
||||||
|
print-color-adjust: exact !important;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
`
|
||||||
|
|
||||||
|
// 1. 创建隐藏iframe
|
||||||
|
const iframe = document.createElement('iframe')
|
||||||
|
iframe.style.width = '0px'
|
||||||
|
iframe.style.height = '0px'
|
||||||
|
iframe.style.position = 'absolute'
|
||||||
|
iframe.style.left = '-9999px'
|
||||||
|
document.body.appendChild(iframe)
|
||||||
|
|
||||||
|
// 2. 写入完整打印页面内容
|
||||||
|
const iframeDoc = iframe.contentDocument
|
||||||
|
iframeDoc.open()
|
||||||
|
iframeDoc.write(`
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="zh-CN">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>报表打印</title>
|
||||||
|
${printStyle}
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
${printHtml}
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
`)
|
||||||
|
iframeDoc.close()
|
||||||
|
|
||||||
|
// 3. 等待DOM渲染完成后打印
|
||||||
|
setTimeout(() => {
|
||||||
|
iframe.contentWindow.print()
|
||||||
|
// 打印弹窗关闭后销毁iframe
|
||||||
|
setTimeout(() => {
|
||||||
|
document.body.removeChild(iframe)
|
||||||
|
}, 1000)
|
||||||
|
}, 600)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// 获取模板参数
|
// 获取模板参数
|
||||||
const getParams = () => {
|
const getParams = () => {
|
||||||
getstatsTemplate({ StatsCode: route.query && route.query.statsCode, }).then(res => {
|
getstatsTemplate({ StatsCode: route.query && route.query.statsCode, }).then(res => {
|
||||||
Parameter.value = res.data.Parameter
|
Parameter.value = res.data.Parameter
|
||||||
tableColumns.value = res.data.Column.filter(item => item.paramType == '6').map(item => {
|
originalColumn.value = res.data.Column
|
||||||
|
//先对 Column 按 paramSequence 从小到大排序
|
||||||
|
const sortedColumn = res.data.Column.sort((a, b) => a.paramSequence - b.paramSequence)
|
||||||
|
tableColumns.value = sortedColumn.filter(item => (item.paramType == '1' || item.paramType == '6') && item.paramSequence > 0).map(item => {
|
||||||
|
if (item.remark) { getDictData(item.remark) }
|
||||||
return {
|
return {
|
||||||
key: item.paramCode,
|
key: item.paramCode,
|
||||||
label: item.paramName,
|
label: item.paramName,
|
||||||
prop: item.paramCode,
|
prop: item.paramCode,
|
||||||
dictType: item.remark,
|
dictType: item.remark,
|
||||||
|
paramSequence: item.paramSequence,
|
||||||
}
|
}
|
||||||
})
|
}) //显示列 (item.paramType == '1' || item.paramType == '6') && item.paramSequence > 0
|
||||||
|
|
||||||
coloums.value = res.data.Column.filter(item => item.paramType == '6')
|
sumColoums.value = res.data.Column.filter(item => item.paramType == '6') //计算列 paramType==6
|
||||||
|
|
||||||
checkBoxs.value = res.data.Column.filter(item => item.paramType != '6')
|
checkBoxs.value = res.data.Column.filter(item => item.paramSequence == 0) //选择列 paramSequence==0
|
||||||
Template.value = res.data.Template
|
Template.value = res.data.Template //模板
|
||||||
statsTitle.value = res.data.Template.statsTitle
|
statsTitle.value = res.data.Template.statsTitle //统计标题
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -237,10 +383,28 @@ onMounted(() => {
|
|||||||
getParams()
|
getParams()
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
|
@media print {
|
||||||
|
.no-print {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 打印专用容器:屏幕视觉隐藏,DOM保留
|
||||||
|
.print-only-wrap {
|
||||||
|
position: absolute;
|
||||||
|
left: -9999px;
|
||||||
|
top: -9999px;
|
||||||
|
width: 1px;
|
||||||
|
height: 1px;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
.app-container {
|
.app-container {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
|
background-color: #eee;
|
||||||
}
|
}
|
||||||
|
|
||||||
.stats-form {
|
.stats-form {
|
||||||
@ -315,12 +479,21 @@ onMounted(() => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.print_box {
|
.print_box {
|
||||||
height: 65vh;
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
|
||||||
|
|
||||||
|
.print_content {
|
||||||
|
width: 70%;
|
||||||
|
height: 100%;
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.table-container {
|
.table-container {
|
||||||
margin-top: 10px;
|
height: calc(100% - 70px);
|
||||||
height: calc(100% - 65px);
|
padding: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tips {
|
.tips {
|
||||||
@ -343,60 +516,6 @@ onMounted(() => {
|
|||||||
background: #3282F6;
|
background: #3282F6;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.el-table__footer-wrapper tfoot td.el-table__cell) {
|
|
||||||
color: #1f6dd3 !important;
|
|
||||||
font-weight: 700;
|
|
||||||
/* 可替换为任意颜色值 */
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
:deep(.vxe-header--row th) {
|
|
||||||
border-color: #1F6DD3;
|
|
||||||
background-color: #1F6DD3;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
:deep(.vxe-body--row td) {
|
|
||||||
border-color: #1F6DD3;
|
|
||||||
}
|
|
||||||
|
|
||||||
:deep(.vxe-table--row-hover) {
|
|
||||||
background-color: #1F6DD3;
|
|
||||||
}
|
|
||||||
|
|
||||||
:deep(.vxe-table--current-row) {
|
|
||||||
background-color: #1F6DD3;
|
|
||||||
}
|
|
||||||
|
|
||||||
:deep(.el-table-header-cell) {
|
|
||||||
cursor: move;
|
|
||||||
user-select: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 表格边框
|
|
||||||
:deep(.vxe-table--render-default.border--full .vxe-body--column) {
|
|
||||||
background-image: linear-gradient(#96B8D9, #96B8D9), linear-gradient(#96B8D9, #96B8D9) !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 表头边框
|
|
||||||
:deep(.vxe-table--render-default.border--full .vxe-header--column) {
|
|
||||||
background-image: linear-gradient(#1F6DD3, #1F6DD3), linear-gradient(#1F6DD3, #1F6DD3) !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
:deep(.vxe-table--render-default.is--padding .vxe-body--column:not(.col--ellipsis)) {
|
|
||||||
padding: 0 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
:deep(.vxe-table--render-default .vxe-footer--column:not(.col--ellipsis)) {
|
|
||||||
padding: 0 !important;
|
|
||||||
color: #1f6dd3 !important;
|
|
||||||
font-weight: 700;
|
|
||||||
}
|
|
||||||
|
|
||||||
:deep(.vxe-header--gutter),
|
|
||||||
:deep(.col--gutter) {
|
|
||||||
display: none !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 1400px) {
|
@media (max-width: 1400px) {
|
||||||
.checkbox-form-item {
|
.checkbox-form-item {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user