右键菜单功能
This commit is contained in:
parent
341555f68d
commit
b572c8aa56
@ -354,5 +354,37 @@ export function unLockSample(query?: Object) {
|
||||
params: query
|
||||
})
|
||||
}
|
||||
// 查看电子病历
|
||||
export function emrquery(query?: Object) {
|
||||
return request({
|
||||
url: '/liswork/emrquery',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
// 查看患者360视图
|
||||
export function allPatquery(query?: Object) {
|
||||
return request({
|
||||
url: '/liswork/allpatquery',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
// 双工流水线
|
||||
export function datalink(query?: Object) {
|
||||
return request({
|
||||
url: '/liswork/datalink',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
// 批量更改流水线状态
|
||||
export function changeLinkList(query?: Object) {
|
||||
return request({
|
||||
url: '/liswork/changelinklist',
|
||||
method: 'post',
|
||||
data: query
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -158,10 +158,14 @@
|
||||
|
||||
.el-table__body-wrapper .el-table-column--selection>.cell {
|
||||
padding: 0 !important;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
}
|
||||
|
||||
.cell.el-tooltip {
|
||||
padding: 0 !important;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
}
|
||||
|
||||
.el-table-header-cell .cell {
|
||||
@ -170,6 +174,8 @@
|
||||
|
||||
.el-table__cell {
|
||||
padding: 0 !important;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
}
|
||||
|
||||
.el-checkbox {
|
||||
@ -222,13 +228,15 @@
|
||||
}
|
||||
|
||||
.el-select__wrapper.is-disabled {
|
||||
background-color: #ccc !important;
|
||||
color: #000 !important;
|
||||
background-color: #dfdcdc !important;
|
||||
}
|
||||
|
||||
.el-input.is-disabled .el-input__wrapper {
|
||||
background-color: #ccc !important;
|
||||
color: #000 !important;
|
||||
background-color: #dfdcdc !important;
|
||||
}
|
||||
|
||||
.el-input.is-disabled .el-input__inner {
|
||||
-webkit-text-fill-color: #4e4c4c
|
||||
}
|
||||
|
||||
|
||||
@ -277,12 +285,12 @@
|
||||
}
|
||||
|
||||
.vxe-table--render-default .vxe-body--column {
|
||||
height: 1.4375rem !important;
|
||||
line-height: 1.4375rem !important;
|
||||
height: 1.875rem !important;
|
||||
line-height: 1.875rem !important;
|
||||
}
|
||||
|
||||
.el-checkbox {
|
||||
height: 1.4375rem !important;
|
||||
height: 1.875rem !important;
|
||||
}
|
||||
}
|
||||
|
||||
@ -302,7 +310,7 @@
|
||||
|
||||
// 滚动条
|
||||
.mytable-style ::-webkit-scrollbar {
|
||||
width: .5rem;
|
||||
width: .6rem;
|
||||
height: .5rem;
|
||||
}
|
||||
|
||||
|
||||
114
src/components/userVerification/index.vue
Normal file
114
src/components/userVerification/index.vue
Normal file
@ -0,0 +1,114 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-dialog v-model="visible" :title="title" :width="500" :close-on-click-modal="false" :draggable="true">
|
||||
<el-form ref="formRef" :model="formValue" label-width="100px">
|
||||
<!-- 用户代号 -->
|
||||
<el-form-item label="用户代号:" prop="yhdh" :rules="[{ required: true, message: '请输入用户代号', trigger: 'change' }]">
|
||||
<el-input ref="yhdhRef" v-model="formValue.yhdh" @change="handleChange" />
|
||||
</el-form-item>
|
||||
|
||||
<!-- 用户姓名 -->
|
||||
<el-form-item label="用户姓名:">
|
||||
<el-input v-model="formValue.userName" disabled />
|
||||
</el-form-item>
|
||||
|
||||
<!-- 密码输入 -->
|
||||
<el-form-item label="密码:" prop="mm" :rules="[{ required: true, message: '请输入密码', trigger: 'change' }]">
|
||||
<el-input v-model="formValue.mm" type="password" @keyup.enter="handleConfirm" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<template #footer>
|
||||
<div class="dialog-footer" style="text-align: center;">
|
||||
<el-button type="primary" @click="handleConfirm"> 确定 </el-button>
|
||||
<el-button @click="cancel"> 取消 </el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { checkYsUser } from '@/api/liswork/work/LisWork'
|
||||
interface UserInfo {
|
||||
usenName: string,
|
||||
nickName: string,
|
||||
}
|
||||
const props = defineProps({
|
||||
formValue: {
|
||||
type: Object,
|
||||
default: {
|
||||
yhdh: '',
|
||||
userName: '',
|
||||
mm: '',
|
||||
}
|
||||
},
|
||||
|
||||
labPatKey: {
|
||||
type: Object,
|
||||
default: () => { }
|
||||
},
|
||||
userList: {
|
||||
type: Array as PropType<UserInfo[]>,
|
||||
default: () => []
|
||||
},
|
||||
|
||||
title: {
|
||||
type: String,
|
||||
default: '请输入锁定人员账号密码'
|
||||
}
|
||||
});
|
||||
const visible = ref(false);
|
||||
// 表单数据
|
||||
|
||||
|
||||
const formRef = ref();
|
||||
const yhdhRef = ref();
|
||||
const open = () => {
|
||||
visible.value = true
|
||||
nextTick(() => {
|
||||
setTimeout(() => {
|
||||
yhdhRef.value?.focus();
|
||||
}, 100);
|
||||
});
|
||||
}
|
||||
|
||||
const emit = defineEmits(["confirm", "cancel",]);
|
||||
// 处理确定按钮点击
|
||||
const handleConfirm = async () => {
|
||||
if (!formRef.value) return;
|
||||
|
||||
// 表单验证
|
||||
const valid = await formRef.value.validate();
|
||||
if (valid) {
|
||||
checkYsUser({ ...props.formValue, ...props.labPatKey }).then((res: any) => {
|
||||
if (res.code == 0) {
|
||||
emit('confirm', props.formValue)
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
// 处理取消按钮点击
|
||||
const cancel = () => {
|
||||
formRef.value?.resetFields();
|
||||
visible.value = false
|
||||
emit('cancel',)
|
||||
};
|
||||
|
||||
|
||||
const handleChange = (value: string) => {
|
||||
props.formValue.userName = props.userList.find((item: any) => item.userName == value)?.nickName
|
||||
console.log(' props.userList==>', props.userList);
|
||||
};
|
||||
|
||||
|
||||
defineExpose({
|
||||
open,
|
||||
cancel
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped></style>
|
||||
@ -20,7 +20,7 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="" prop="failed4">
|
||||
<el-select v-model="queryParams.failed4" placeholder="请选择" style="width:8.75">
|
||||
<el-select v-model="queryParams.failed4" placeholder="请选择" style="width:8.75rem">
|
||||
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
@ -77,7 +77,6 @@
|
||||
@column-drag-end="handleColumnDragEnd">
|
||||
<template #dy="{ row }">
|
||||
<svg-icon v-if="row.zt != 1" icon-class="lvgou" />
|
||||
<svg-icon v-else icon-class="hongcha" />
|
||||
</template>
|
||||
<template #jzbz="{ row }">
|
||||
{{ row.jzbz == '1' ? '急' : '' }}
|
||||
@ -282,7 +281,7 @@ const cellStyleHd = ({ row, column, rowIndex, columnIndex }: {
|
||||
}) => {
|
||||
// console.log(row, column, rowIndex, columnIndex);
|
||||
if (column.label == "急" && row.jzbz == "1") {
|
||||
return { background: '#f00 !important', color: '#fff' };
|
||||
return { color: '#f00' };
|
||||
}
|
||||
|
||||
if (column.label == "类别") {
|
||||
@ -568,8 +567,8 @@ function adjustTableHeight() {
|
||||
if (compactForm.value) {
|
||||
// 获取高度
|
||||
heightForm.value = compactForm.value.offsetHeight;
|
||||
tableConfig.value.height = `calc(71vh - ${heightForm.value}px)`; // 设置表格容器的高度
|
||||
rightTableConfig.value.height = `calc(71vh - ${heightForm.value}px)`;
|
||||
tableConfig.value.height = `calc(74vh - ${heightForm.value}px)`; // 设置表格容器的高度
|
||||
rightTableConfig.value.height = `calc(74vh - ${heightForm.value}px)`;
|
||||
}
|
||||
}
|
||||
|
||||
@ -681,9 +680,9 @@ const printPdf = () => {
|
||||
display: flex;
|
||||
justify-content: space-around;
|
||||
align-items: center;
|
||||
margin-top: .625rem;
|
||||
margin-top: .35rem;
|
||||
background-color: #f0f3f8;
|
||||
padding: .625rem 2.5rem;
|
||||
padding: .3rem 2.5rem;
|
||||
}
|
||||
|
||||
.time-line-item {
|
||||
@ -699,9 +698,9 @@ const printPdf = () => {
|
||||
align-items: center;
|
||||
|
||||
.index {
|
||||
width: 2.5rem;
|
||||
height: 2.5rem;
|
||||
line-height: 2.5rem;
|
||||
width: 1.875rem;
|
||||
height: 1.875rem;
|
||||
line-height: 1.875rem;
|
||||
background: #E1E9F7;
|
||||
border-radius: 50%;
|
||||
text-align: center;
|
||||
|
||||
@ -92,7 +92,6 @@
|
||||
@column-drag-end="handleColumnDragEnd">
|
||||
<template #dybz="{ row }">
|
||||
<svg-icon v-if="row.dybz == 1" icon-class="lvgou" />
|
||||
<svg-icon v-else icon-class="hongcha" />
|
||||
</template>
|
||||
<template #alarmflag="{ row }">
|
||||
{{ row.alarmflag == 1 ? '危' : '' }}
|
||||
@ -127,6 +126,20 @@
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<!-- 样本流程 -->
|
||||
<div class="time-line-box">
|
||||
<div v-for="(item, i) in timelineItems" :key="i" class="time-line-item">
|
||||
<div v-if="i != 0 && item.time" class="timeline-connector">
|
||||
<img class="timg" src="@/assets/images/yjt.png" alt="">
|
||||
</div>
|
||||
<div class="timeline-content">
|
||||
<div :class="['index', lastTimeIndex == i ? 'active' : '']">{{ i + 1 }}</div>
|
||||
<div class="timeline-title">{{ item.title }}</div>
|
||||
<div class="timeline-time">{{ item.time }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- 结果对比 -->
|
||||
<el-dialog v-model="dialogVisible" title="结果对比" draggable :close-on-click-modal="false">
|
||||
@ -178,8 +191,7 @@ const options = ref([
|
||||
{ label: '复制全部数据', value: 'All' },
|
||||
{ label: '复制异常数据', value: 'N' },
|
||||
{ label: '复制正常数据', value: 'Y' },
|
||||
]
|
||||
)
|
||||
])
|
||||
interface QueryParams {
|
||||
times: string[]; // 明确类型为字符串元组
|
||||
alarmflag: boolean,
|
||||
@ -238,6 +250,31 @@ const queryRules = ref({
|
||||
// ],
|
||||
})
|
||||
|
||||
|
||||
// 时间线数据
|
||||
const timelineItems = ref(
|
||||
[
|
||||
{ title: '检验申请', time: '' },
|
||||
{ title: '标本采集', time: '' },
|
||||
{ title: '上机检验', time: '' },
|
||||
{ title: '标本送检', time: '' },
|
||||
// { title: '检验接收', time: '' },
|
||||
{ title: '标本签收', time: '' },
|
||||
{ title: '结果审核', time: '' },
|
||||
]
|
||||
);
|
||||
|
||||
// 计算最后一个有时间的节点索引
|
||||
const lastTimeIndex = computed(() => {
|
||||
|
||||
const lastIndex = timelineItems.value.findLastIndex(item => item.time);
|
||||
if (lastIndex === -1) {
|
||||
return -1
|
||||
} else {
|
||||
return lastIndex;
|
||||
}
|
||||
});
|
||||
|
||||
const handleQuery = async () => {
|
||||
const valid = await queryRef.value.validate().catch(() => { });
|
||||
if (!valid) return false;
|
||||
@ -284,6 +321,18 @@ const selectionChange = (selection: any) => {
|
||||
|
||||
const rightTableRef = ref()
|
||||
const rowHandle = (row: any) => {
|
||||
console.log('row==>', row);
|
||||
timelineItems.value =
|
||||
[
|
||||
{ title: '检验申请', time: row.sqsj },
|
||||
{ title: '标本采集', time: row.cysj },
|
||||
{ title: '上机检验', time: row.zxsj },
|
||||
{ title: '标本送检', time: row.bbsjsj },
|
||||
// { title: '检验接收', time: row.jssj},
|
||||
{ title: '标本签收', time: row.jssj },
|
||||
{ title: '结果审核', time: row.confirmtime },
|
||||
]
|
||||
|
||||
Info.value = row
|
||||
const data = {
|
||||
jyrq: row.jyrq,
|
||||
@ -336,10 +385,10 @@ const cellStyleHd = ({ row, column, rowIndex, columnIndex }: {
|
||||
}) => {
|
||||
// console.log(row, column, rowIndex, columnIndex);
|
||||
if (column.label == "急" && row.jzbz == "1") {
|
||||
return { background: '#f00 !important', color: '#fff' };
|
||||
return { color: '#f00' };
|
||||
}
|
||||
if (column.label == "危" && row.alarmflag == "1") {
|
||||
return { background: '#f00 !important', color: '#fff' };
|
||||
return { color: '#f00' };
|
||||
}
|
||||
};
|
||||
|
||||
@ -480,12 +529,12 @@ const xmrowHandle = (row: any) => {
|
||||
bottomTableData.value = res.rows
|
||||
if (res.rows.length > 0) {
|
||||
nextTick(() => {
|
||||
rightTableConfig.value.height = `calc(55vh - ${heightForm.value}px)`
|
||||
rightTableConfig.value.height = `calc(50vh - ${heightForm.value}px)`
|
||||
rightTableRef.value?.doLayout && rightTableRef.value.doLayout();
|
||||
});
|
||||
} else {
|
||||
nextTick(() => {
|
||||
rightTableConfig.value.height = `calc(93vh - ${heightForm.value}px)`
|
||||
rightTableConfig.value.height = `calc(83vh - ${heightForm.value}px)`
|
||||
rightTableRef.value?.doLayout && rightTableRef.value.doLayout();
|
||||
});
|
||||
}
|
||||
@ -728,7 +777,7 @@ const bottomTableConfig = ref(
|
||||
{
|
||||
// stripe: true, // 斑马纹
|
||||
border: true, // 边框
|
||||
height: '37vh', // 高度
|
||||
height: '32vh', // 高度
|
||||
highlightCurrentRow: true, // 高亮当前行
|
||||
cellStyle: botCellStyleHd
|
||||
}
|
||||
@ -817,7 +866,7 @@ function adjustTableHeight() {
|
||||
heightForm.value = compactForm.value.offsetHeight;
|
||||
|
||||
nextTick(() => {
|
||||
tableConfig.value.height = `calc(93vh - ${heightForm.value}px)`
|
||||
tableConfig.value.height = `calc(83vh - ${heightForm.value}px)`
|
||||
tableRefs.value?.doLayout && tableRefs.value.doLayout();
|
||||
});
|
||||
|
||||
@ -833,8 +882,74 @@ function adjustTableHeight() {
|
||||
|
||||
.title {
|
||||
border-bottom: 1px solid #E1E9F7;
|
||||
margin-bottom: 10px;
|
||||
padding: 10px;
|
||||
margin-bottom: .625rem;
|
||||
padding: .625rem;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
|
||||
.time-line-box {
|
||||
display: flex;
|
||||
justify-content: space-around;
|
||||
align-items: center;
|
||||
margin-top: .35rem;
|
||||
background-color: #f0f3f8;
|
||||
padding: .3rem 2.5rem;
|
||||
}
|
||||
|
||||
.time-line-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-around;
|
||||
width: 16.6%;
|
||||
// padding: 0 30px;
|
||||
|
||||
.timeline-content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
|
||||
.index {
|
||||
width: 1.875rem;
|
||||
height: 1.875rem;
|
||||
line-height: 1.875rem;
|
||||
background: #E1E9F7;
|
||||
border-radius: 50%;
|
||||
text-align: center;
|
||||
font-family: SourceHanSansCN, SourceHanSansCN;
|
||||
font-weight: 500;
|
||||
font-size: 1.125rem;
|
||||
color: #4767A3;
|
||||
}
|
||||
|
||||
.active {
|
||||
background-color: #4096ff;
|
||||
box-shadow: 0 0 0 .25rem rgba(64, 150, 255, 0.2);
|
||||
color: #FFF;
|
||||
}
|
||||
|
||||
.timeline-title {
|
||||
font-family: SourceHanSansCN, SourceHanSansCN;
|
||||
font-weight: 500;
|
||||
font-size: 1rem;
|
||||
color: #4767A3;
|
||||
}
|
||||
|
||||
.timeline-time {
|
||||
font-family: SourceHanSansCN, SourceHanSansCN;
|
||||
font-weight: 400;
|
||||
font-size: .875rem;
|
||||
color: #4767A3;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.timg {
|
||||
width: 3.125rem;
|
||||
}
|
||||
}
|
||||
|
||||
:deep(.el-form-item--default) {
|
||||
margin-bottom: 1.125rem;
|
||||
}
|
||||
</style>
|
||||
@ -298,7 +298,7 @@ const getLableType = (type: string) => {
|
||||
case '4':
|
||||
return '二报';
|
||||
case '5':
|
||||
return '锁定';
|
||||
return '已锁定';
|
||||
default:
|
||||
return '';
|
||||
}
|
||||
@ -478,7 +478,7 @@ onMounted(() => {
|
||||
}
|
||||
|
||||
.sd_color {
|
||||
color: rgba(128, 128, 128, 0.25);
|
||||
color: rgb(233, 126, 32, .25);
|
||||
}
|
||||
|
||||
.default {
|
||||
|
||||
@ -8,7 +8,6 @@
|
||||
<!-- 完成状态列 -->
|
||||
<template #finish="{ row }">
|
||||
<svg-icon v-if="row.finish == 1" icon-class="lvgou" />
|
||||
<svg-icon v-else icon-class="hongcha" />
|
||||
</template>
|
||||
<template #jgbz="{ row }">
|
||||
<el-checkbox :model-value="row.jgbz == '2'" readonly />
|
||||
@ -137,10 +136,10 @@ const handleMenuSelect = ((item: ContextMenuItem) => {
|
||||
})
|
||||
// 表格列配置
|
||||
const tableColumns = ref([
|
||||
{ field: 'finish', title: '完', width: 20, align: 'center', slotName: 'finish', resizable: true },
|
||||
{ field: 'jgbz', title: '审', width: 20, align: 'center', slotName: 'jgbz', resizable: true },
|
||||
{ field: 'alarmflag', title: '警', width: 20, align: 'center', slotName: 'alarmflag', resizable: true },
|
||||
{ field: 'autojgbz', title: '自', width: 20, align: 'center', slotName: 'autojgbz', resizable: true },
|
||||
{ field: 'finish', title: '完', width: 30, align: 'center', slotName: 'finish', resizable: true },
|
||||
{ field: 'jgbz', title: '审', width: 30, align: 'center', slotName: 'jgbz', resizable: true },
|
||||
{ field: 'alarmflag', title: '警', width: 30, align: 'center', slotName: 'alarmflag', resizable: true },
|
||||
{ field: 'autojgbz', title: '自', width: 30, align: 'center', slotName: 'autojgbz', resizable: true },
|
||||
{ field: 'brly', title: '类型', width: 50, align: 'center', slotName: 'brly', resizable: true },
|
||||
{ field: 'ybh', title: '样本号', width: 45, align: 'center', resizable: true },
|
||||
{ field: 'brxm', title: '姓名', width: 40, align: 'center', resizable: true, slotName: 'brxm' },
|
||||
@ -151,7 +150,7 @@ const tableColumns = ref([
|
||||
{ field: 'nldw', title: '龄', width: 20, align: 'center', slotName: 'nldw', resizable: true },
|
||||
{ field: 'ksdh', title: '科室', width: 80, align: 'center', slotName: 'ksdh', resizable: true },
|
||||
{ field: 'yblx', title: '标本', width: 50, align: 'center', resizable: true, slotName: 'yblx' },
|
||||
{ field: 'dybz', title: '印', width: 20, align: 'center', slotName: 'dybz', resizable: true },
|
||||
{ field: 'dybz', title: '印', width: 30, align: 'center', slotName: 'dybz', resizable: true },
|
||||
{ field: 'fslx', title: '发送', width: 30, align: 'center', slotName: 'fslx', resizable: true },
|
||||
{ field: 'shcs', title: '次数', width: 30, align: 'center', resizable: true },
|
||||
{ field: 'sqh', title: '申请号/条码', width: 100, align: 'center', resizable: true, },
|
||||
|
||||
@ -180,25 +180,59 @@
|
||||
<el-col :span="8">
|
||||
<div> <el-checkbox>只显示同一申请单号</el-checkbox> </div>
|
||||
<div>
|
||||
<el-button type="primary">确定</el-button>
|
||||
<el-button type="primary">合并</el-button>
|
||||
<el-button>取消</el-button>
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<CustomTable :data="mTableData" :columns="mColumns" :config="mTableConfig" :enable-column-drag="true"
|
||||
@column-drag-end="mDragEnd" @selection-change="mSelectionChange">
|
||||
<template #brxb="{ row }">
|
||||
{{ formatDict(row.brxb, 'SX') }}
|
||||
</template>
|
||||
<template #nldw="{ row }">
|
||||
{{ formatDict(row.nldw, 'AU') }}
|
||||
</template>
|
||||
</CustomTable>
|
||||
</el-dialog>
|
||||
|
||||
<!-- 用户校验 -->
|
||||
<userVerification ref="formRef" :title="verTitle" :form-value="formData" :userList="userList"
|
||||
@confirm="handleConfirm" @cancel="handleCancel" />
|
||||
|
||||
<YhVerification ref="formRef" title="请输入锁定人员账号密码" :form-value="formData" @confirm="handleConfirm"
|
||||
@cancel="handleCancel" :labelShow="false" />
|
||||
|
||||
<!-- 双工流水线 -->
|
||||
<el-dialog v-model="dlShow" title="双工流水线申请单列表" width="40vw" :close-on-click-modal="false" :draggable="true">
|
||||
<div class="mb10">
|
||||
<el-button type="primary" @clcick="getDlList">刷新</el-button>
|
||||
<el-button type="primary" @click="cfHandle">重发申请单</el-button>
|
||||
<el-button @click="closeHandle">取消申请单</el-button>
|
||||
</div>
|
||||
<CustomTable :data="dlTableData" :columns="dlColumns" :config="dlTableConfig" :enable-column-drag="true"
|
||||
@column-drag-end="dlDragEnd" @selection-change="dlSelectionChange">
|
||||
<template #instrid="{ row }">
|
||||
{{ row.instrid ? dlObj[row.instrid] : '未发送指令' }}
|
||||
</template>
|
||||
<template #brxb="{ row }">
|
||||
{{ formatDict(row.brxb, 'SX') }}
|
||||
</template>
|
||||
<template #nldw="{ row }">
|
||||
{{ formatDict(row.nldw, 'AU') }}
|
||||
</template>
|
||||
</CustomTable>
|
||||
<div class="mt5" style="text-align: center;color:blue;">样本总数:{{ dlTableData.length }}</div>
|
||||
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, toRefs, watch, nextTick, onMounted, computed } from "vue";
|
||||
import YhVerification from "./yhVerification.vue";
|
||||
import userVerification from "@/components/userVerification/index.vue";
|
||||
import {
|
||||
check1, check2, uncheck2, unconfirmlog, checkuser, reglimit, deleteresult, changeresult,
|
||||
check1, check2, uncheck2, unconfirmlog, checkuser, reglimit, deleteresult, changeresult, allPatquery, emrquery, datalink, changeLinkList,
|
||||
newresult, queryXmVal, printListwork, getresultchangelog, setinputmdl, saveResult, lockSample, unLockSample
|
||||
} from "@/api/liswork/work/LisWork";
|
||||
import { ElMessageBox, ElMessage } from "element-plus";
|
||||
@ -222,6 +256,7 @@ const props = defineProps({
|
||||
},
|
||||
labPat: { type: Object, required: true },
|
||||
userList: { type: Array, default: () => [] },
|
||||
dictData: { type: Object, default: () => ({}) }
|
||||
});
|
||||
|
||||
// 解构props
|
||||
@ -299,6 +334,9 @@ const contextMenuItems = computed(() => [
|
||||
{ label: '解除报告锁定', action: 'lift', shortcut: 'W', },
|
||||
{ type: 'divider' },
|
||||
// { label: '删除记录', action: 'delete', danger: true, shortcut: 'd', },
|
||||
{ label: '查看电子病历', action: 'emrquery', shortcut: 'E', },
|
||||
{ label: '查看360全景视图', action: 'patquery', shortcut: 'Y', },
|
||||
{ label: '双工流水线', action: 'datalink', shortcut: 'F', },
|
||||
]);
|
||||
|
||||
// 处理菜单选择
|
||||
@ -311,14 +349,23 @@ const handleMenuSelect = (item) => {
|
||||
previewHandle() //PDF报告预览
|
||||
break;
|
||||
case 'merge':
|
||||
jgShow.value = true;
|
||||
mergeHandle()
|
||||
// alert(`合并病人当前其他结果`);
|
||||
break;
|
||||
case 'Lock':
|
||||
lockHandle();
|
||||
lockHandle(); //锁定
|
||||
break;
|
||||
case 'lift':
|
||||
unlockHandle()
|
||||
unlockHandle() //解锁
|
||||
break;
|
||||
case 'emrquery':
|
||||
emrqueryHandle() //电子病历查询
|
||||
break;
|
||||
case 'patquery':
|
||||
patqueryHandle() //360视图
|
||||
break;
|
||||
case 'datalink':
|
||||
datalinkHandle() //流水线
|
||||
break;
|
||||
case 'delete':
|
||||
if (confirm(`确定要删除患者的记录吗?`)) {
|
||||
@ -327,6 +374,121 @@ const handleMenuSelect = (item) => {
|
||||
break;
|
||||
}
|
||||
};
|
||||
const mTableData = ref([])
|
||||
|
||||
|
||||
const mColumns = ref([
|
||||
{ label: "选择", type: 'selection', align: 'center', width: 40, visible: true, },
|
||||
{ label: "仪器", prop: "yq", visible: true, },
|
||||
{ label: "检验日期", prop: "jyrq", visible: true, },
|
||||
{ label: "样本号", prop: "ybh", visible: true, },
|
||||
{ label: "病历号", prop: "brdh", visible: true, },
|
||||
{ label: "病人姓名", prop: "brxm", visible: true, },
|
||||
{ label: "年", prop: "nl", width: 40, visible: true, },
|
||||
{ label: "龄", prop: "nldw", width: 30, visible: true, slot: "nldw" },
|
||||
{ label: "检验项目", prop: "xmdh", visible: true, },
|
||||
{ label: "检验结果", prop: "csjg", width: 60, visible: true, },
|
||||
{ label: "申请号", prop: "sqh", visible: true, },
|
||||
])
|
||||
|
||||
|
||||
const mTableConfig = {
|
||||
border: true
|
||||
}
|
||||
|
||||
const mDragEnd = (data) => {
|
||||
mColumns.value = data.columns
|
||||
}
|
||||
|
||||
const mSelectionChange = (data) => {
|
||||
}
|
||||
const mergeHandle = () => {
|
||||
jgShow.value = true;
|
||||
};
|
||||
|
||||
const emrqueryHandle = () => {
|
||||
emrquery(tableKey.value).then(res => {
|
||||
if (res.data) {
|
||||
window.open(res.data)
|
||||
}
|
||||
})
|
||||
};
|
||||
const patqueryHandle = () => {
|
||||
allPatquery(tableKey.value).then(res => {
|
||||
if (res.data) {
|
||||
window.open(res.data)
|
||||
}
|
||||
})
|
||||
};
|
||||
const dlObj = {
|
||||
0: '申请发送',
|
||||
1: '已发送指令',
|
||||
2: '申请撤销中'
|
||||
}
|
||||
const dlShow = ref(false)
|
||||
const dlTableData = ref([])
|
||||
const dlColumns = ref([
|
||||
{ label: "选择", type: 'selection', align: 'center', width: 40, visible: true, },
|
||||
{ label: "动作状态", prop: "instrid", align: 'center', visible: true, slot: 'instrid' },
|
||||
{ label: "申请号", prop: "sqh", align: 'center', visible: true, },
|
||||
{ label: "样本号", prop: "ybh", align: 'center', visible: true, },
|
||||
{ label: "姓名", prop: "brxm", align: 'center', visible: true, },
|
||||
{ label: "性别", prop: "brxb", width: 30, align: 'center', visible: true, slot: 'brxb' },
|
||||
{ label: "年", prop: "nl", width: 30, align: 'center', visible: true, },
|
||||
{ label: "龄", prop: "nldw", width: 30, align: 'center', visible: true, slot: "nldw" },
|
||||
{ label: "检验目的", prop: "jymd", width: 180, visible: true, },
|
||||
])
|
||||
|
||||
const dlTableConfig = ref({
|
||||
border: true,
|
||||
maxHeight: 500,
|
||||
cellStyle: ({ row, column }) => {
|
||||
if (row.instrid == 1) {
|
||||
return { background: '#c0c0c0 !important' }
|
||||
}
|
||||
},
|
||||
})
|
||||
const dlDragEnd = (data) => {
|
||||
dlColumns.value = data.columns
|
||||
}
|
||||
const dlList = ref([])
|
||||
const dlSelectionChange = (selection) => {
|
||||
dlList.value = selection
|
||||
}
|
||||
const datalinkHandle = () => {
|
||||
getDlList()
|
||||
dlShow.value = true;
|
||||
};
|
||||
|
||||
const getDlList = () => {
|
||||
datalink(tableKey.value).then(res => {
|
||||
dlTableData.value = res.data;
|
||||
})
|
||||
}
|
||||
|
||||
const cfHandle = () => {
|
||||
if (dlList.value.length < 0) return ElMessage.warning('请选择数据')
|
||||
const arr = dlList.value.filter(item => item.instrid == 1)
|
||||
arr.forEach(v => {
|
||||
v.instrid = null
|
||||
})
|
||||
changeLinkList(arr).then(res => {
|
||||
if (res.code == 0) {
|
||||
getDlList()
|
||||
}
|
||||
})
|
||||
}
|
||||
const closeHandle = () => {
|
||||
dlList.value.forEach(v => {
|
||||
v.instrid = 2
|
||||
})
|
||||
|
||||
changeLinkList(dlList.value).then(res => {
|
||||
if (res.code == 0) {
|
||||
getDlList()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const formRef = ref();
|
||||
|
||||
@ -335,16 +497,21 @@ const formData = ref({
|
||||
userName: '',
|
||||
mm: '',
|
||||
})
|
||||
const verTitle = ref('请输入锁定人员账号密码')
|
||||
const lockType = ref(1)
|
||||
// 锁定报告
|
||||
const lockHandle = () => {
|
||||
if (props.labPat.jgbz != 0) return ElMessage.warning('样本已审核,不能锁定!')
|
||||
lockType.value = 1
|
||||
formRef.value.open()
|
||||
verTitle.value = '请输入锁定人员账号密码'
|
||||
}
|
||||
|
||||
// 解除锁定报告
|
||||
const unlockHandle = () => {
|
||||
if (props.labPat.jgbz != 5) return ElMessage.warning('目标标本未锁定,不可解除锁定!')
|
||||
lockType.value = 2
|
||||
verTitle.value = '请输入解除锁定人员账号密码'
|
||||
formRef.value.open()
|
||||
}
|
||||
|
||||
@ -359,6 +526,7 @@ const handleConfirm = (data) => {
|
||||
if (res.code == 0) {
|
||||
formRef.value?.cancel()
|
||||
ElMessage.success(res.msg)
|
||||
emits('fetchLabResults')
|
||||
}
|
||||
});
|
||||
} else {
|
||||
@ -366,6 +534,7 @@ const handleConfirm = (data) => {
|
||||
if (res.code == 0) {
|
||||
formRef.value?.cancel()
|
||||
ElMessage.success(res.msg)
|
||||
emits('fetchLabResults')
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -892,6 +1061,10 @@ const formatYs = (v) => {
|
||||
return userList.value.find((item) => item.userName == v)?.nickName || v
|
||||
};
|
||||
|
||||
const formatDict = (v, dictType) => {
|
||||
return props.dictData[dictType]?.find((item) => item.value == v)?.label || v;
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
||||
@ -53,7 +53,7 @@
|
||||
<el-col :span="16">
|
||||
<LabResult ref="labResultRef" v-model:labPat="labPat" :tableData="labResuts" :tableKey="queryParams"
|
||||
:userList="userList" :resultSysList="resultConfig" @fetchLabResults="fetchLabResults"
|
||||
@changeStatus="changeStatus" @previewHandle="previewHandle" />
|
||||
:dictData="dictData" @changeStatus="changeStatus" @previewHandle="previewHandle" />
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
@ -351,12 +351,12 @@ const selectJob = (job: any) => {
|
||||
queryParams.value.yq = job.yq.trim();
|
||||
queryParams.value.ybh = job.ybh;
|
||||
fetchLabResults();
|
||||
fetchLabPat();
|
||||
highlightRowIndex.value = labPatList.value.findIndex((item: any) => item.ybh == queryParams.value.ybh);
|
||||
}
|
||||
const labResuts = ref([])
|
||||
//载入样本结果表单(中间labresult.vue组件)
|
||||
const fetchLabResults = async () => {
|
||||
fetchLabPat();
|
||||
queryLabResults({ jyrq: queryParams.value.jyrq, yq: queryParams.value.yq, ybh: queryParams.value.ybh }).then((response: any) => {
|
||||
labResuts.value = response.data;
|
||||
})
|
||||
@ -502,12 +502,10 @@ const handleNext = () => {
|
||||
|
||||
// 改变样本列表中样本状态
|
||||
const changeStatus = (updatedPat: any, flag: boolean) => {
|
||||
console.log('changeStatusflag==>', flag, updatedPat);
|
||||
queryLabPat(queryParams.value).then((response: any) => {
|
||||
if (response.code == 0) {
|
||||
labPat.value = response.data[0];
|
||||
const index = labPatList.value.findIndex((item: any) => item.ybh == updatedPat.ybh);
|
||||
console.log('index==>', index);
|
||||
if (index !== -1) {
|
||||
labPatList.value = labPatList.value.map((item, i) =>
|
||||
i === index ? { ...labPat.value } : item
|
||||
@ -517,7 +515,6 @@ const changeStatus = (updatedPat: any, flag: boolean) => {
|
||||
nextTick(() => {
|
||||
labPatListRef.value.setCurrentRow(labPat.value);
|
||||
});
|
||||
console.log('changeStatusflag==>', flag);
|
||||
// 条码号输入后操作
|
||||
if (flag) {
|
||||
setTimeout(() => { handleNext() }, 10)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user