登录页
This commit is contained in:
parent
e022b6861a
commit
c43e714c45
@ -55,8 +55,8 @@ export function fetchCodeReqmain(query?: Object) {
|
||||
export function reportList(query?: Object) {
|
||||
return request({
|
||||
url: '/report/ReportList',
|
||||
method: 'post',
|
||||
data: query,
|
||||
method: 'get',
|
||||
params: query,
|
||||
});
|
||||
}
|
||||
// 查询报告Pdf预览
|
||||
@ -123,4 +123,18 @@ export function cancelExecSQD(query?: Object) {
|
||||
data: query,
|
||||
});
|
||||
}
|
||||
export function getSQDDetailList(query?: Object) {
|
||||
return request({
|
||||
url: '/report/getSQDDetail',
|
||||
method: 'get',
|
||||
params: query,
|
||||
});
|
||||
}
|
||||
export function getCdssUrl(query?: Object) {
|
||||
return request({
|
||||
url: '/report/InterfaceData',
|
||||
method: 'post',
|
||||
data: query,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
BIN
src/assets/images/login_left.png
Normal file
BIN
src/assets/images/login_left.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 473 KiB |
@ -124,9 +124,9 @@ const emits = defineEmits(['current-change', "column-drag-end", "row-drag-end",
|
||||
const tableRef = ref<any>(null)
|
||||
const currentRow = ref<any>(null)
|
||||
// 处理行点击
|
||||
const handleRowClick = (params: { row: any }) => {
|
||||
const handleRowClick = (params: { row: any, $rowIndex, column, $columnIndex, cell, $event }) => {
|
||||
currentRow.value = params.row
|
||||
emits('current-change', params.row)
|
||||
emits('current-change', params.row, params.$rowIndex, params.column, params.$columnIndex, params.cell, params.$event)
|
||||
}
|
||||
|
||||
const handleCheckboxChange = ({ checked, records }: { checked: boolean, records: any[] }) => {
|
||||
|
||||
@ -65,31 +65,29 @@
|
||||
@clear="handleQuery" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="3">
|
||||
<el-form-item>
|
||||
<el-button icon="search" type="primary" @click="handleQuery">
|
||||
搜索
|
||||
</el-button>
|
||||
<!-- <el-button icon="Refresh" @click="resetQuery">重置</el-button> -->
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</el-row>
|
||||
</div>
|
||||
<el-row :gutter="15">
|
||||
<el-col :span="16" class="right-table">
|
||||
<el-row :gutter="10" class="mb8 mt10">
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="Edit" :size="aotuSize" @click="selectStatusRows">勾选所有未打印</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="Upload" :size="aotuSize" @click="printPdf">打印报告</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="10" class="mb8 mt10">
|
||||
<el-col :span="1.5">
|
||||
<el-button icon="search" type="primary" :size="aotuSize" @click="handleQuery">搜索</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="Edit" :size="aotuSize" @click="selectStatusRows">勾选所有未打印</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="warning" plain icon="Upload" :size="aotuSize" @click="printPdf">打印报告</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" :size="aotuSize" plain @click="openDB">对比历史</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" :size="aotuSize" plain @click="getCDSS">CDSS</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="16" class="right-table sqd-box">
|
||||
<CustomVxeTable :table-data="tableData" :loading="loading" :columns="columns" @current-change="rowHandle"
|
||||
size="small" :scrollYConfig="{ enabled: true, rSize: 30, height: '100%', }" class="mytable-style"
|
||||
ref="tableRefs" :row-style="rowClassNameHd" :cell-style="cellStyleHd" @selection-change="selectionChange"
|
||||
@ -104,39 +102,51 @@
|
||||
{{ row.jzbz == 1 ? '急' : '' }}
|
||||
</template>
|
||||
</CustomVxeTable>
|
||||
<div class="mask" :style="{ top: `${pageY}px` }">
|
||||
<el-popover placement="left" :width="300" trigger="click">
|
||||
<template #reference>
|
||||
<div class="text">项目明细</div>
|
||||
</template>
|
||||
<el-table :data="sqlisReqs" style="width: 100%" border @row-click="sqxmClick" highlight-current-row
|
||||
show-overflow-tooltip max-height="300px">
|
||||
<el-table-column prop="sqxmdh" width="100" label="项目代号" />
|
||||
<el-table-column prop="sqxmmc" label="项目名称" />
|
||||
</el-table>
|
||||
</el-popover>
|
||||
</div>
|
||||
|
||||
<div class="mt10">
|
||||
<el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange"
|
||||
:size="aotuSize" :current-page="queryParams.pageNum" :page-sizes="[10, 20, 50, 100]"
|
||||
:page-size="queryParams.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total">
|
||||
</el-pagination>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="8" class="right-table">
|
||||
<!-- <div class="title">检验结果</div> -->
|
||||
<div class="mb8 mt10">
|
||||
<el-button type="primary" :size="aotuSize" plain @click="openDB">对比历史</el-button>
|
||||
<el-select class="ml10" placeholder="请选择复制" style="width: 140px" @change="copyData" :size="aotuSize">
|
||||
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
<!-- <el-button type="primary">知识库</el-button> -->
|
||||
</div>
|
||||
<div>
|
||||
<CustomTable :data="rightTableData" :columns="rightColumns" :config="rightTableConfig"
|
||||
@row-click="xmrowHandle" ref="rightTableRef">
|
||||
<template #jgbz="{ row }">
|
||||
{{ formatJgbz(row.jgbz) }}
|
||||
</template>
|
||||
<template #xmmc="{ row }">
|
||||
<el-tooltip class="box-item" effect="dark" :content="row.clinicref" placement="top"
|
||||
:disabled="!row.clinicref">
|
||||
<span>{{ row.xmmc }}</span>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
</CustomTable>
|
||||
</div>
|
||||
<div class="mt10" v-if="bottomTableData.length > 0"></div>
|
||||
<div>
|
||||
<CustomTable v-if="bottomTableData.length > 0" :data="bottomTableData" :columns="bottomColumns"
|
||||
:config="bottomTableConfig">
|
||||
</CustomTable>
|
||||
</div>
|
||||
<div v-if="bottomTableData.length > 0" class="expert-comment" :title="expertComment">
|
||||
专家评语:{{ expertComment }}
|
||||
<ContextMenu :items="contextMenuItems" @select="handleMenuSelect" menu-width="120">
|
||||
<CustomTable :data="rightTableData" :columns="rightColumns" :config="rightTableConfig"
|
||||
@row-click="xmrowHandle" ref="rightTableRef">
|
||||
<template #jgbz="{ row }">
|
||||
{{ formatJgbz(row.jgbz) }}
|
||||
</template>
|
||||
<template #xmmc="{ row }">
|
||||
<el-tooltip class="box-item" effect="dark" :content="row.clinicref" placement="top"
|
||||
:popper-style="{ width: '320px', maxWidth: '320px' }" :disabled="!row.clinicref">
|
||||
<span>{{ row.xmmc }}</span>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
</CustomTable>
|
||||
</ContextMenu>
|
||||
<div class="mt10" v-if="bottomTableData.length > 0"></div>
|
||||
<div>
|
||||
<CustomTable v-if="bottomTableData.length > 0" :data="bottomTableData" :columns="bottomColumns"
|
||||
:config="bottomTableConfig">
|
||||
</CustomTable>
|
||||
</div>
|
||||
<div v-if="bottomTableData.length > 0" class="expert-comment" :title="expertComment">
|
||||
专家评语:{{ expertComment }}
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@ -180,19 +190,17 @@ import { ref, reactive, toRaw, computed, watch, nextTick, onMounted } from 'vue'
|
||||
import CustomTable from '@/components/elTable/index.vue'
|
||||
import CustomVxeTable from '@/components/vxeTable/index.vue'
|
||||
import { useRouter } from 'vue-router'
|
||||
import { reportList, reportPrintPdf, reportResult, reportMedList, reportFsresult } from '@/api/checkCode/index'
|
||||
import ContextMenu from "@/components/contextMenu/index.vue";
|
||||
import { reportList, reportPrintPdf, reportResult, reportMedList, reportFsresult, getSQDDetailList, getCdssUrl } from '@/api/checkCode/index'
|
||||
import dayjs from 'dayjs';
|
||||
import SelectTable from '@/components/SelectTable/index.vue';
|
||||
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||
import { classCom } from '@/utils/classCom'
|
||||
import { HiprintPrinter } from '@/utils/hiprintPrinter';
|
||||
import { ContextMenuItem } from '@/types/index'
|
||||
import * as echarts from 'echarts';
|
||||
//@ts-ignore
|
||||
import { comDict } from '@/utils/dict'
|
||||
//@ts-ignore
|
||||
import { getDicts } from '@/api/system/dict/data'
|
||||
import { usePrintStore } from '@/store/modules/printStore'
|
||||
//@ts-ignore
|
||||
import useUserStore from '@/store/modules/user'
|
||||
import { useRoute } from 'vue-router'
|
||||
const route = useRoute()
|
||||
@ -223,6 +231,8 @@ interface QueryParams {
|
||||
sqh: string,
|
||||
userid: string,
|
||||
yljg: string,
|
||||
pageNum: number,
|
||||
pageSize: number,
|
||||
}
|
||||
|
||||
// 提交表单数据
|
||||
@ -241,7 +251,9 @@ const queryParams = reactive<QueryParams>({
|
||||
ch: '',
|
||||
dybz: '',
|
||||
userid: '',
|
||||
yljg: ''
|
||||
yljg: '',
|
||||
pageNum: 1,
|
||||
pageSize: 20,
|
||||
});
|
||||
|
||||
const single = ref(true);
|
||||
@ -285,7 +297,7 @@ const lastTimeIndex = computed(() => {
|
||||
return lastIndex;
|
||||
}
|
||||
});
|
||||
|
||||
const total = ref(0)
|
||||
const handleQuery = async () => {
|
||||
const valid = await queryRef.value.validate().catch(() => { });
|
||||
if (!valid) return false;
|
||||
@ -312,6 +324,7 @@ const columns = ref([
|
||||
{ field: 'brxm', title: '病人姓名', align: 'center', resizable: true, width: 60 },
|
||||
{ field: 'brxbname', title: '性别', align: 'center', resizable: true, width: 40 },
|
||||
{ field: 'ch', title: '床号', align: 'center', resizable: true, width: 50 },
|
||||
{ field: 'sqh', title: '申请单号', align: 'center', resizable: true, width: 100 },
|
||||
{ field: 'jymd', title: '检验目的', align: 'center', resizable: true, width: 200 },
|
||||
{ field: 'yblxname', title: '样本类型', align: 'center', resizable: true, width: 60 },
|
||||
{ field: 'sqsj', title: '送检时间', align: 'center', resizable: true, width: 150 },
|
||||
@ -330,9 +343,11 @@ const selectionChange = (selection: any) => {
|
||||
single.value = selection.length != 1;
|
||||
multiple.value = !selection.length;
|
||||
}
|
||||
|
||||
const pageY = ref(0)
|
||||
const sqlisReqs = ref([])
|
||||
const rightTableRef = ref()
|
||||
const rowHandle = (row: any) => {
|
||||
const rowHandle = (row, $rowIndex, column, $columnIndex, cell, $event) => {
|
||||
pageY.value = $event?.pageY - 200 || 0
|
||||
if (row.yqdl == '细菌仪') {
|
||||
rightColumns.value[1].visible = false
|
||||
rightColumns.value[2].visible = true
|
||||
@ -357,10 +372,21 @@ const rowHandle = (row: any) => {
|
||||
]
|
||||
|
||||
Info.value = row
|
||||
getxmmxList(row)
|
||||
|
||||
getSQDDetailList({ sqh: row.sqh }).then((res: any) => {
|
||||
if (res.code == 0) {
|
||||
sqlisReqs.value = res.data
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const getxmmxList = (row) => {
|
||||
const data = {
|
||||
jyrq: row.jyrq,
|
||||
yq: row.yq,
|
||||
ybh: row.ybh,
|
||||
sqxmdh: row.sqxmdh
|
||||
}
|
||||
reportResult(data).then((res: any) => {
|
||||
if (res.code == 0) {
|
||||
@ -378,6 +404,10 @@ const rowHandle = (row: any) => {
|
||||
})
|
||||
}
|
||||
|
||||
const sqxmClick = (row) => {
|
||||
getxmmxList({ ...Info.value, ...row })
|
||||
}
|
||||
|
||||
const handleColumnDragEnd = (newColumns: any) => {
|
||||
columns.value = [];
|
||||
// 使用nextTick确保DOM更新后再设置新值
|
||||
@ -569,6 +599,17 @@ const rightTableConfig = ref(
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
const contextMenuItems = computed<ContextMenuItem[]>(() => [
|
||||
{ label: '复制全部数据', action: 'All' },
|
||||
{ label: '复制异常数据', action: 'N' },
|
||||
{ label: '复制正常数据', action: 'Y' },
|
||||
]);
|
||||
|
||||
const handleMenuSelect = ((item: ContextMenuItem) => {
|
||||
copyData(item.action)
|
||||
})
|
||||
|
||||
const formatJgbz = (v: string) => {
|
||||
const jgbzMap = {
|
||||
'H': '高',
|
||||
@ -649,6 +690,19 @@ const openDB = () => {
|
||||
})
|
||||
}
|
||||
|
||||
const getCDSS = () => {
|
||||
const data = {
|
||||
msg: Info.value.sqh,
|
||||
userId: queryParams.userid,
|
||||
yljg: queryParams.yljg
|
||||
}
|
||||
getCdssUrl(data).then((res) => {
|
||||
if (res.data) {
|
||||
window.open(res.data)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
interface copyItem {
|
||||
xmdh: string;
|
||||
@ -660,7 +714,7 @@ interface copyItem {
|
||||
od: string;
|
||||
}
|
||||
// 复制函数
|
||||
const copyData = (type: string) => {
|
||||
const copyData = (type: string | undefined) => {
|
||||
let str = '';
|
||||
// 处理空值的工具函数:null/undefined/空字符串都返回空白
|
||||
const getFieldValue = (value: any) => {
|
||||
@ -728,7 +782,6 @@ const formatGroupedData = (data: any[]) => {
|
||||
const handleRowClick = (row: any) => {
|
||||
getEcharts(row)
|
||||
}
|
||||
|
||||
const getEcharts = (data: any) => {
|
||||
const dateKeys = Object.keys(data).filter(key =>
|
||||
/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/.test(key)
|
||||
@ -929,6 +982,18 @@ const getDayDiff = (start: string, end: string): number => {
|
||||
const dayDiff = Math.ceil((endTime - startTime) / (24 * 60 * 60 * 1000));
|
||||
return dayDiff < 0 ? -1 : dayDiff; // -1 表示结束时间早于开始时间,>=0 为正常天数
|
||||
};
|
||||
|
||||
const handleSizeChange = (size: number) => {
|
||||
pageY.value = 0
|
||||
queryParams.pageSize = size
|
||||
getList()
|
||||
}
|
||||
const handleCurrentChange = (val: number) => {
|
||||
pageY.value = 0
|
||||
queryParams.pageNum = val
|
||||
getList()
|
||||
};
|
||||
|
||||
const getList = () => {
|
||||
|
||||
const data = {
|
||||
@ -944,6 +1009,8 @@ const getList = () => {
|
||||
st: queryParams.st,
|
||||
et: queryParams.et,
|
||||
yljg: queryParams.yljg,
|
||||
pageNum: queryParams.pageNum,
|
||||
pageSize: queryParams.pageSize
|
||||
}
|
||||
|
||||
if (!data.ksdh) return ElMessage.error('科室代号不能为空');
|
||||
@ -955,12 +1022,13 @@ const getList = () => {
|
||||
|
||||
loading.value = true
|
||||
reportList(data).then((res: any) => {
|
||||
if (res.code == 0) {
|
||||
if (res.code == 200) {
|
||||
loading.value = false
|
||||
tableData.value = res.data
|
||||
if (res.data.length > 0) {
|
||||
tableRefs.value.setCurrentRow(res.data[0])
|
||||
rowHandle(res.data[0])
|
||||
tableData.value = res.rows
|
||||
total.value = res.total
|
||||
if (res.rows.length > 0) {
|
||||
tableRefs.value.setCurrentRow(res.rows[0])
|
||||
rowHandle(res.rows[0])
|
||||
} else {
|
||||
rightTableData.value = []
|
||||
bottomTableData.value = []
|
||||
@ -975,12 +1043,12 @@ const getList = () => {
|
||||
|
||||
<style scoped lang="scss">
|
||||
.mytable-style {
|
||||
height: 68vh;
|
||||
height: 64vh;
|
||||
}
|
||||
|
||||
.tips {
|
||||
font-family: SourceHanSansCN, SourceHanSansCN;
|
||||
font-size: 16px;
|
||||
font-size: 1rem;
|
||||
color: #409eff;
|
||||
font-weight: 600;
|
||||
margin-bottom: 5px;
|
||||
@ -1084,4 +1152,25 @@ const getList = () => {
|
||||
font-size: .875rem;
|
||||
margin-top: .3125rem;
|
||||
}
|
||||
|
||||
.sqd-box {
|
||||
position: relative;
|
||||
|
||||
.mask {
|
||||
position: absolute;
|
||||
right: -5px;
|
||||
top: 40%;
|
||||
cursor: pointer;
|
||||
|
||||
.text {
|
||||
width: 18px;
|
||||
padding: 8px 2px;
|
||||
text-align: center;
|
||||
color: #FFF;
|
||||
font-size: 12px;
|
||||
background-color: #4096ff;
|
||||
border-radius: 0 4px 4px 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -6,16 +6,16 @@
|
||||
size="small">
|
||||
<el-row>
|
||||
<el-col :span="3">
|
||||
<el-form-item label="部门组别:" prop="instrGroup">
|
||||
<SelectTable v-model:data="queryParams.instrGroup" :fields="instrGroupFields"
|
||||
:tableData="instrGroupOptions" label="zdmc" value="zddh" objKey="zddh" :border="true" size="small"
|
||||
placeholder="请选择部门" :clearable="false" @get-data-value="getYqConfig" />
|
||||
<el-form-item label="部门组别:" prop="lisgroup">
|
||||
<SelectTable v-model:data="queryParams.lisgroup" :fields="lisgroupFields" :tableData="lisgroupOptions"
|
||||
label="zdmc" value="zddh" objKey="zddh" :border="true" size="small" placeholder="请选择部门"
|
||||
@get-data-value="getYqConfig" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="3">
|
||||
<el-form-item label="仪器:" prop="yq">
|
||||
<SelectTable v-model:data="queryParams.yq" :tableData="instrOptions" width="100%" placeholder="请选择仪器"
|
||||
clearable size="small" @getDataValue="getXmList" />
|
||||
size="small" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
@ -32,24 +32,11 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="3">
|
||||
<el-form-item label="病人类型:" prop="brly">
|
||||
<el-form-item label="病人来源:" prop="brly">
|
||||
<SelectTable v-model:data="queryParams.brly" dictType="PT" placeholder="请选择" size="small"
|
||||
@getDataValue="handleQuery" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="3">
|
||||
<el-form-item label="送检医生:" prop="sjys">
|
||||
<SelectTable v-model:data="queryParams.sjys" :fields="ysFields" :tableData="userList || []" size="small"
|
||||
label="nickName" value="userName" objKey="userName" placeholder="请选择" @getDataValue="handleQuery" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="3">
|
||||
<el-form-item label="检验医生:" prop="yhdh">
|
||||
<SelectTable v-model:data="queryParams.yhdh" :fields="ysFields" :tableData="userList || []" size="small"
|
||||
label="nickName" value="userName" objKey="userName" placeholder="请选择" @getDataValue="handleQuery" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="3">
|
||||
<el-form-item label="标本类型:" prop="yblx">
|
||||
@ -57,22 +44,18 @@
|
||||
@getDataValue="handleQuery" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="3">
|
||||
<el-form-item label="标本号:" prop="brxm">
|
||||
<el-form-item label="标本号:" prop="ch">
|
||||
<el-input v-model="queryParams.ch" clearable placeholder="请输入" @keyup.enter="handleQuery"
|
||||
@clear="handleQuery" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="3">
|
||||
<el-form-item label="检验项:" prop="brxm">
|
||||
<SelectTable v-model:data="queryParams.yblx" :tableData="xmList" placeholder="请选择" size="small"
|
||||
@getDataValue="handleQuery" />
|
||||
<el-form-item label="检验项目:" prop="sqxmmc">
|
||||
<el-input v-model="queryParams.sqxmmc" clearable placeholder="请输入" @keyup.enter="handleQuery"
|
||||
@clear="handleQuery" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="3">
|
||||
<el-form-item label="科室:" prop="ksdh">
|
||||
<SelectTable v-model:data="queryParams.ksdh" dictType='DP' placeholder="请选择科室" size="small"
|
||||
@ -114,6 +97,13 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="3">
|
||||
<el-form-item label="医疗机构:" prop="yljg">
|
||||
<SelectTable v-model:data="queryParams.yljg" dictType="HOS" placeholder="请选择" size="small"
|
||||
@getDataValue="handleQuery" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="标本日期:" prop="times">
|
||||
<el-date-picker v-model="queryParams.st" type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
|
||||
@ -122,18 +112,6 @@
|
||||
@change="handletime" style="width: 46%" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="3">
|
||||
<el-form-item label="备注:" prop="bz">
|
||||
<el-input v-model="queryParams.bz" clearable placeholder="请输入" @keyup.enter="handleQuery"
|
||||
@clear="handleQuery" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="3">
|
||||
<el-form-item label="医疗机构:" prop="yljg">
|
||||
<SelectTable v-model:data="queryParams.yljg" dictType="HOS" placeholder="请选择" size="small"
|
||||
@getDataValue="handleQuery" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-checkbox v-model="queryParams.jzbz" label="急诊" true-value="1" false-value="0" />
|
||||
<el-checkbox v-model="queryParams.dcny" label="多重耐药(细菌查询用)" true-value="1" false-value="0" />
|
||||
@ -141,7 +119,7 @@
|
||||
</el-form>
|
||||
</el-row>
|
||||
</div>
|
||||
<div class="mb8 mt10">
|
||||
<div class="mb5 mt5">
|
||||
<el-button icon="search" type="primary" :size="aotuSize" @click="handleQuery"> 搜索 </el-button>
|
||||
<el-button type="primary" plain icon="Edit" :size="aotuSize" @click="selectStatusRows">勾选所有未打印</el-button>
|
||||
<el-button type="warning" plain icon="Printer" :size="aotuSize" @click="printPdf">打印报告</el-button>
|
||||
@ -166,7 +144,12 @@
|
||||
{{ row.jzbz == 1 ? '急' : '' }}
|
||||
</template>
|
||||
</CustomVxeTable>
|
||||
|
||||
<div class="mt10">
|
||||
<el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange"
|
||||
:size="aotuSize" :current-page="queryParams.pageNum" :page-sizes="[10, 20, 50, 100]"
|
||||
:page-size="queryParams.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total">
|
||||
</el-pagination>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="8" class="right-table">
|
||||
<div>
|
||||
@ -175,6 +158,12 @@
|
||||
<template #jgbz="{ row }">
|
||||
{{ formatJgbz(row.jgbz) }}
|
||||
</template>
|
||||
<template #xmmc="{ row }">
|
||||
<el-tooltip class="box-item" effect="dark" :popper-style="{ width: '320px', maxWidth: '320px' }"
|
||||
:content="row.clinicref" placement="top" :disabled="!row.clinicref">
|
||||
<span>{{ row.xmmc }}</span>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
</CustomTable>
|
||||
</div>
|
||||
<div class="mt10" v-if="bottomTableData.length > 0"></div>
|
||||
@ -215,12 +204,9 @@ import SelectTable from '@/components/SelectTable/index.vue';
|
||||
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||
import { classCom } from '@/utils/classCom'
|
||||
import { HiprintPrinter } from '@/utils/hiprintPrinter';
|
||||
// @ts-ignore
|
||||
import { listhospital } from "@/api/regional/dict/hospital.js";
|
||||
// @ts-ignore
|
||||
import { listUser } from '@/api/system/user.js'
|
||||
import { usePrintStore } from '@/store/modules/printStore'
|
||||
//@ts-ignore
|
||||
import useUserStore from '@/store/modules/user'
|
||||
import { useRoute, useRouter } from 'vue-router'
|
||||
import { getComDicts } from '@/api/liswork/dict/ComDict';
|
||||
@ -234,12 +220,11 @@ const tableRefs = ref()
|
||||
|
||||
interface QueryParams {
|
||||
// times: string[]; // 明确类型为字符串元组
|
||||
instrGroup: string;
|
||||
lisgroup: string;
|
||||
yq: string;
|
||||
st: string;
|
||||
et: string;
|
||||
alarmflag: boolean,
|
||||
jzbz: boolean,
|
||||
jzbz: string,
|
||||
ksdh: string,
|
||||
brlyname: string,
|
||||
brxm: string,
|
||||
@ -248,47 +233,45 @@ interface QueryParams {
|
||||
dybz: string,
|
||||
sqh: string,
|
||||
userid: string,
|
||||
sqxmmc: string,
|
||||
yljg: string,
|
||||
bz: string,
|
||||
yblx: string,
|
||||
yhdh: string,
|
||||
sjys: string,
|
||||
brly: string,
|
||||
jgbz: string,
|
||||
dcny: string
|
||||
dcny: string,
|
||||
pageNum: number,
|
||||
pageSize: number;
|
||||
}
|
||||
|
||||
// 提交表单数据
|
||||
const queryParams = reactive<QueryParams>({
|
||||
// times: ['2025-08-19', '2025-08-19'],
|
||||
instrGroup: '',
|
||||
lisgroup: '',
|
||||
yq: '',
|
||||
st: '',
|
||||
et: '',
|
||||
ksdh: '0210',
|
||||
ksdh: '',
|
||||
brlyname: '',
|
||||
sqh: '',
|
||||
alarmflag: false,
|
||||
jzbz: false,
|
||||
jzbz: '0',
|
||||
brxm: '',
|
||||
brdh: '',
|
||||
ch: '',
|
||||
dybz: '',
|
||||
userid: '',
|
||||
sqxmmc: '',
|
||||
yljg: userStore.sysLoginParam.loginYLJG,
|
||||
bz: '',
|
||||
yblx: '',
|
||||
yhdh: '',
|
||||
sjys: '',
|
||||
brly: '',
|
||||
jgbz: '',
|
||||
dcny: ''
|
||||
dcny: '',
|
||||
pageNum: 1,
|
||||
pageSize: 50,
|
||||
});
|
||||
|
||||
const total = ref(0);
|
||||
const single = ref(true);
|
||||
const multiple = ref(true);
|
||||
const alarmflag = ref()
|
||||
const jzbz = ref()
|
||||
const showSearch = ref(true);
|
||||
const queryRef = ref()
|
||||
// 项目点击数据
|
||||
@ -360,7 +343,7 @@ const columns = ref([
|
||||
{ field: 'brxm', title: '姓名', align: 'center', resizable: true, width: 50 },
|
||||
{ field: 'brdh', title: '住院号', align: 'center', resizable: true, sortable: true, width: 100 },
|
||||
{ field: 'sqh', title: '申请号', align: 'center', resizable: true, width: 100 },
|
||||
{ field: 'brlyname', title: '病人类型', align: 'center', resizable: true, width: 60 },
|
||||
{ field: 'brlyname', title: '病人来源', align: 'center', resizable: true, width: 60 },
|
||||
{ field: 'brxbname', title: '性别', align: 'center', resizable: true, width: 40 },
|
||||
{ field: 'nl', title: '年龄', align: 'center', resizable: true, width: 40 },
|
||||
{ field: 'ksname', title: '科室', align: 'center', resizable: true, width: 90 },
|
||||
@ -421,6 +404,7 @@ const rowHandle = (row: any) => {
|
||||
jyrq: row.jyrq,
|
||||
yq: row.yq,
|
||||
ybh: row.ybh,
|
||||
sqxmdh: row.sqxmdh,
|
||||
}
|
||||
reportResult(data).then((res: any) => {
|
||||
if (res.code == 0) {
|
||||
@ -512,7 +496,6 @@ const cellStyleHd = ({ row, column, rowIndex, columnIndex }: {
|
||||
|
||||
// 表格配置
|
||||
const tableConfig = ref({
|
||||
height: '71vh', // 高度
|
||||
// 复选框配置
|
||||
checkboxConfig: {
|
||||
// 可选配置项
|
||||
@ -534,43 +517,7 @@ const selectStatusRows = () => {
|
||||
}
|
||||
})
|
||||
}
|
||||
const alarmHandle = (val: boolean) => {
|
||||
if (val) {
|
||||
queryParams.jzbz = false
|
||||
alarmflag.value = '1'
|
||||
jzbz.value = null
|
||||
} else {
|
||||
alarmflag.value = null
|
||||
}
|
||||
getList()
|
||||
}
|
||||
const jzbzHandle = (val: boolean) => {
|
||||
if (val) {
|
||||
queryParams.alarmflag = false
|
||||
alarmflag.value = null
|
||||
jzbz.value = '1'
|
||||
} else {
|
||||
jzbz.value = null
|
||||
}
|
||||
getList()
|
||||
}
|
||||
|
||||
const xmList = ref([])
|
||||
const getXmList = () => {
|
||||
const data = {
|
||||
yq: queryParams.yq,
|
||||
pageSize: 1000,
|
||||
pageNum: 1
|
||||
}
|
||||
queryXmInfo(data).then((res: any) => {
|
||||
xmList.value = res.data.map((item: any) => {
|
||||
return {
|
||||
label: item.xmmc,
|
||||
value: item.xmdh
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
// 右侧数据源
|
||||
@ -578,7 +525,7 @@ const rightTableData = ref([])
|
||||
// 配置项
|
||||
const rightColumns = ref([
|
||||
{ prop: 'xmdh', label: '项目代号', align: 'center', visible: true, },
|
||||
{ prop: 'xmmc', label: '项目名称', align: 'center', visible: true, },
|
||||
{ prop: 'xmmc', label: '项目名称', align: 'center', visible: true, slot: 'xmmc' },
|
||||
{ prop: 'xmmc', label: '培养结果', align: 'center', visible: true, width: 150 },
|
||||
{ prop: 'csjg', label: '检验结果', align: 'center', visible: true, },
|
||||
{ prop: 'refs', label: '参考值', align: 'center', visible: true, },
|
||||
@ -698,23 +645,23 @@ const bottomTableConfig = ref(
|
||||
)
|
||||
|
||||
|
||||
const instrGroupOptions = ref<any[]>([])
|
||||
const instrGroupFields = ref([
|
||||
const lisgroupOptions = ref<any[]>([])
|
||||
const lisgroupFields = ref([
|
||||
{ prop: 'zddh', label: '代号', width: 80, enablePinyinSearch: true },
|
||||
{ prop: 'zdmc', label: '名称', width: 150, enablePinyinSearch: true },
|
||||
])
|
||||
// 部门
|
||||
const getinstrGroupOptions = () => {
|
||||
const getlisgroupOptions = () => {
|
||||
getComDicts({ zdlb: 'GROUP' }).then((res: any) => {
|
||||
instrGroupOptions.value = res.data
|
||||
instrGroupOptions.value.push({ zddh: 'ALL', zdmc: '所有仪器' })
|
||||
lisgroupOptions.value = res.data
|
||||
lisgroupOptions.value.push({ zddh: 'ALL', zdmc: '所有仪器' })
|
||||
getYqConfig()
|
||||
});
|
||||
}
|
||||
const instrOptions = ref([])
|
||||
// 仪器
|
||||
const getYqConfig = () => {
|
||||
getGroupInstrdList({ lisgroup: queryParams.instrGroup })
|
||||
getGroupInstrdList({ lisgroup: queryParams.lisgroup })
|
||||
.then((res: any) => {
|
||||
if (res.code == 0) {
|
||||
instrOptions.value = res.data.map((item: any) => ({
|
||||
@ -731,7 +678,7 @@ onMounted(async () => {
|
||||
listUser(data).then((res: any) => {
|
||||
userList.value = res.rows;
|
||||
});
|
||||
getinstrGroupOptions()
|
||||
getlisgroupOptions()
|
||||
// 获取当前日期(当天)
|
||||
const today = dayjs();
|
||||
|
||||
@ -769,37 +716,30 @@ const getDayDiff = (start: string, end: string): number => {
|
||||
const dayDiff = Math.ceil((endTime - startTime) / (24 * 60 * 60 * 1000));
|
||||
return dayDiff < 0 ? -1 : dayDiff; // -1 表示结束时间早于开始时间,>=0 为正常天数
|
||||
};
|
||||
|
||||
const handleSizeChange = (size: number) => {
|
||||
queryParams.pageSize = size
|
||||
getList()
|
||||
}
|
||||
const handleCurrentChange = (val: number) => {
|
||||
queryParams.pageNum = val
|
||||
getList()
|
||||
};
|
||||
|
||||
const getList = () => {
|
||||
|
||||
const data = {
|
||||
alarmflag: alarmflag.value,
|
||||
jzbz: jzbz.value,
|
||||
dybz: queryParams.dybz,
|
||||
ksdh: queryParams.ksdh,
|
||||
brlyname: queryParams.brlyname,
|
||||
brxm: queryParams.brxm,
|
||||
brdh: queryParams.brdh,
|
||||
ch: queryParams.ch,
|
||||
userid: queryParams.userid,
|
||||
st: queryParams.st,
|
||||
et: queryParams.et,
|
||||
yljg: queryParams.yljg,
|
||||
}
|
||||
|
||||
if (!data.ksdh) return ElMessage.error('科室代号不能为空');
|
||||
if (!data.yljg) return ElMessage.error('医疗机构yljg不能为空');
|
||||
// 校验日期格式
|
||||
const dayDiff = getDayDiff(queryParams.st, queryParams.et);
|
||||
if (dayDiff === -1 || dayDiff === -2) return ElMessage.warning('请选择有效的日期范围');
|
||||
|
||||
loading.value = true
|
||||
reportList(data).then((res: any) => {
|
||||
if (res.code == 0) {
|
||||
reportList(queryParams).then((res: any) => {
|
||||
if (res.code == 200) {
|
||||
loading.value = false
|
||||
tableData.value = res.data
|
||||
if (res.data.length > 0) {
|
||||
tableRefs.value.setCurrentRow(res.data[0])
|
||||
rowHandle(res.data[0])
|
||||
total.value = res.total
|
||||
tableData.value = res.rows
|
||||
if (res.rows.length > 0) {
|
||||
tableRefs.value.setCurrentRow(res.rows[0])
|
||||
rowHandle(res.rows[0])
|
||||
} else {
|
||||
rightTableData.value = []
|
||||
bottomTableData.value = []
|
||||
@ -814,7 +754,7 @@ const getList = () => {
|
||||
|
||||
<style scoped lang="scss">
|
||||
.mytable-style {
|
||||
height: 63vh;
|
||||
height: 58vh;
|
||||
}
|
||||
|
||||
.tips {
|
||||
|
||||
@ -23,8 +23,7 @@
|
||||
|
||||
<el-row class="table-row" style="margin-top: 10px;">
|
||||
<el-col :span="24" class="table-col">
|
||||
<CustomTable ref="tableRef" v-model:data="tableData" :columns="columns" :config="tableConfig"
|
||||
@row-dblclick="handleRowDblclick">
|
||||
<CustomTable ref="tableRef" v-model:data="tableData" :columns="columns" :config="tableConfig">
|
||||
<template #yq="{ row }">
|
||||
{{ formatInstr(row.yq) }}
|
||||
</template>
|
||||
@ -35,6 +34,7 @@
|
||||
<el-checkbox :model-value="row.zdsr == 'Y'" />
|
||||
</template>
|
||||
<template #action="{ row }">
|
||||
<el-button type="primary" icon="Edit" link @click="handleEdit(row)">编辑</el-button>
|
||||
<el-button type="primary" icon="Delete" link @click="handleDel(row)">删除</el-button>
|
||||
</template>
|
||||
</CustomTable>
|
||||
@ -68,9 +68,9 @@
|
||||
</el-col>
|
||||
<el-col :span="14">
|
||||
<div class="mb10">
|
||||
<el-button type="primary" @click="handleSave">保存</el-button>
|
||||
<el-button type="primary" @click="addItem">新增</el-button>
|
||||
<el-button type="danger" @click="delItem">删除</el-button>
|
||||
<el-button type="success" icon="Check" plain @click="handleSave">保存</el-button>
|
||||
<el-button type="primary" icon="Plus" plain @click="addItem">新增</el-button>
|
||||
<el-button type="danger" icon="Delete" plain @click="delItem">删除</el-button>
|
||||
</div>
|
||||
<div style="height: 400px">
|
||||
<CustomTable ref="tableRefRight" :data="rightTableData" :columns="rightColumns" :config="tableConfig"
|
||||
@ -134,7 +134,7 @@ const tableConfig = ref({
|
||||
height: '100%', // 高度
|
||||
border: true, // 边框
|
||||
highlightCurrentRow: true, // 当前行高亮
|
||||
actionWidth: 150,
|
||||
actionWidth: 180,
|
||||
})
|
||||
const regdictList = ref<Array<{ value: string, label: string }>>([])
|
||||
const rightTableData = ref<Array<{ xmdh: string, mrz: string }>>([])
|
||||
@ -169,7 +169,7 @@ const handleAdd = () => {
|
||||
visible.value = true
|
||||
}
|
||||
|
||||
const handleRowDblclick = (row: any) => {
|
||||
const handleEdit = (row: any) => {
|
||||
getDetailsList(row)
|
||||
row.yq = row.yq.trim()
|
||||
row.oldMbmc = row.mbmc
|
||||
|
||||
@ -1,13 +1,13 @@
|
||||
<template>
|
||||
<div class="login">
|
||||
<el-form ref="loginRef" class="login-form">
|
||||
<el-form ref="loginRef" class="login-form" :model="loginForm" :rules="loginRules" :hide-required-asterisk="true">
|
||||
<div class="login-header">
|
||||
<div class="login-logo">
|
||||
<img src="@/assets/images/logo_new.png" alt="系统Logo" />
|
||||
</div>
|
||||
<div class="login-split"></div>
|
||||
<div class="login-title">
|
||||
<h1>{{ oem.appname}}</h1>
|
||||
<h1>{{ oem.appname }}</h1>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -15,25 +15,17 @@
|
||||
<el-tabs v-model="activeName" type="card" @tab-click="handleClick" class="login-tabs">
|
||||
<!-- 工号登录 Tab -->
|
||||
<el-tab-pane label="账号密码登录" name="first">
|
||||
<el-form-item label="医疗机构:" prop="hospid"class="custom-select">
|
||||
<el-select
|
||||
v-model="loginForm.hospid"
|
||||
placeholder="请选择医疗机构"
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-form-item label="医疗机构:" prop="loginParam.loginYLJG" class="custom-select">
|
||||
<el-select v-model="loginForm.loginParam.loginYLJG" placeholder="请选择医疗机构" style="width: 100%"
|
||||
@change="handleChange">
|
||||
<template #prefix>
|
||||
<svg-icon icon-class="international" class="el-input__icon input-icon" />
|
||||
</template>
|
||||
<el-option
|
||||
v-for="item in selectOptions"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
></el-option>
|
||||
<el-option v-for="item in selectOptions" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="用户代号:" prop="username">
|
||||
<el-form-item label="用户工号:" prop="username">
|
||||
<el-input v-model="loginForm.username" type="text" size="large" auto-complete="off" placeholder="账号">
|
||||
<template #prefix>
|
||||
<svg-icon icon-class="user" class="el-input__icon input-icon" />
|
||||
@ -43,28 +35,15 @@
|
||||
|
||||
<el-form-item label="登录密码:" prop="password">
|
||||
<el-input v-model="loginForm.password" type="password" size="large" auto-complete="off" placeholder="密码"
|
||||
@keyup.enter="handleLogin">
|
||||
@keyup.enter="handleLogin">
|
||||
<template #prefix>
|
||||
<svg-icon icon-class="password" class="el-input__icon input-icon" />
|
||||
</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
|
||||
<!-- 修复:移除空的el-form-item,验证码关闭时不渲染任何内容 -->
|
||||
<el-form-item prop="code" v-if="!captchaEnabled" size="large">
|
||||
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="code" label="验 证 码 :" v-if="captchaEnabled">
|
||||
<el-input
|
||||
|
||||
v-model="loginForm.code"
|
||||
size="large"
|
||||
auto-complete="off"
|
||||
placeholder="验证码"
|
||||
style="width: 53%"
|
||||
@keyup.enter="handleLogin"
|
||||
>
|
||||
<el-input v-model="loginForm.code" size="large" auto-complete="off" placeholder="验证码" style="width: 53%"
|
||||
@keyup.enter="handleLogin">
|
||||
<template #prefix>
|
||||
<svg-icon icon-class="validCode" class="el-input__icon input-icon" />
|
||||
</template>
|
||||
@ -75,7 +54,8 @@
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item style="width: 100%;">
|
||||
<el-button :loading="loading" size="large" type="primary" class="login-btn" style="width: 100%;" @click.prevent="handleLogin">
|
||||
<el-button :loading="loading" size="large" type="primary" class="login-btn" style="width: 100%;"
|
||||
@click.prevent="handleLogin">
|
||||
<span v-if="!loading">登 录</span>
|
||||
<span v-else>登 录 中...</span>
|
||||
</el-button>
|
||||
@ -87,7 +67,9 @@
|
||||
|
||||
<el-tab-pane label="扫码登录" name="second">
|
||||
<div class="tab-placeholder">
|
||||
<el-icon class="placeholder-icon"><Sms /></el-icon>
|
||||
<el-icon class="placeholder-icon">
|
||||
<!-- <Sms /> -->
|
||||
</el-icon>
|
||||
<p>正在加载二维码...</p>
|
||||
<el-button type="success" icon="wechat" class="wechat-login-btn">刷新二维码</el-button>
|
||||
</div>
|
||||
@ -95,7 +77,9 @@
|
||||
|
||||
<el-tab-pane label="UKEY登录" name="third">
|
||||
<div class="tab-placeholder">
|
||||
<el-icon class="placeholder-icon"><Wechat /></el-icon>
|
||||
<el-icon class="placeholder-icon">
|
||||
<!-- <Wechat /> -->
|
||||
</el-icon>
|
||||
<p>UKEY登录功能开发中...</p>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
@ -103,7 +87,9 @@
|
||||
</el-form>
|
||||
|
||||
<div class="el-login-footer">
|
||||
<span>版权所有(R)2022-2026 {{ oem.compay}} 电话:{{oem.phone}} E-mail:{{oem.Email}} version:{{oem.version}}</span>
|
||||
<span>版权所有(R){{ oem.copyrightyear }} {{ oem.compay }} 电话:{{ oem.phone }} E-mail:{{ oem.Email }} version:{{
|
||||
oem.version
|
||||
}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@ -111,75 +97,75 @@
|
||||
<script setup>
|
||||
import { ref, watch, getCurrentInstance, onMounted } from 'vue';
|
||||
import { useRoute, useRouter } from 'vue-router';
|
||||
import { useFingerprint } from '@/utils/useFingerprint';
|
||||
import { getCodeImg, getInfo, getLocalconfig } from "@/api/login";
|
||||
import { getCodeImg, getInfo, getLocalconfig, login } from "@/api/login";
|
||||
import Cookies from "js-cookie";
|
||||
import { encrypt, decrypt } from "@/utils/jsencrypt";
|
||||
import useUserStore from '@/store/modules/user';
|
||||
|
||||
import { useCommonStore } from '@/store/modules/commonStore'
|
||||
const mbStore = useCommonStore();
|
||||
// 初始化响应式变量
|
||||
const activeName = ref('first');
|
||||
const userStore = useUserStore();
|
||||
const route = useRoute();
|
||||
const router = useRouter();
|
||||
const oem = ref({
|
||||
appname: "实验室信息管理系统",
|
||||
appname: "区域检验数据平台",
|
||||
phone: "",
|
||||
compay: "",
|
||||
version: "",
|
||||
Email: ""
|
||||
Email: "",
|
||||
copyrightyear: ""
|
||||
});
|
||||
const loginRef = ref(null); // 修复:直接用ref获取表单引用
|
||||
const loginRef = useTemplateRef('loginRef');
|
||||
const loginForm = ref({
|
||||
username: "admin",
|
||||
username: "",
|
||||
password: "",
|
||||
rememberMe: false,
|
||||
code: "",
|
||||
uuid: "",
|
||||
hospid: "1"
|
||||
loginParam: { loginYLJG: '1', localid: undefined, loginYLJGName: '' }
|
||||
});
|
||||
const selectOptions = ref([{ id: '1', name: '总院' }]);
|
||||
const loginRules = ref({ // 修复:改为ref响应式,方便动态修改
|
||||
username: [{ required: true, trigger: "blur", message: "请输入您的账号" }],
|
||||
const selectOptions = ref([]);
|
||||
const loginRules = ref({
|
||||
'loginParam.loginYLJG': [{ required: true, message: '请选择医疗机构', trigger: 'change' }],
|
||||
username: [{ required: true, trigger: "blur", message: "请输入您的工号" }],
|
||||
password: [{ required: true, trigger: "blur", message: "请输入您的密码" }],
|
||||
hospid: [{ required: true, message: '请选择医疗机构', trigger: 'change' }],
|
||||
code: [{ required: true, trigger: "change", message: "请输入验证码" }]
|
||||
});
|
||||
const codeUrl = ref("");
|
||||
const loading = ref(false);
|
||||
const captchaEnabled = ref(true);
|
||||
const captchaEnabled = ref(false);
|
||||
const register = ref(false);
|
||||
const redirect = ref(undefined);
|
||||
|
||||
// 路由监听(优化版)
|
||||
watch(
|
||||
() => route.query.redirect,
|
||||
(newRedirect) => {
|
||||
if (redirect.value !== newRedirect) {
|
||||
redirect.value = newRedirect || '';
|
||||
}
|
||||
},
|
||||
{ immediate: true, deep: false }
|
||||
() => route.query.redirect,
|
||||
(newRedirect) => {
|
||||
if (redirect.value !== newRedirect) {
|
||||
redirect.value = newRedirect || '';
|
||||
}
|
||||
},
|
||||
{ immediate: true, deep: false }
|
||||
);
|
||||
|
||||
// 登录方法(修复proxy.$refs问题)
|
||||
const handleChange = (value) => {
|
||||
const item = selectOptions.value.find(item => item.id == value);
|
||||
loginForm.value.loginParam.loginYLJG = value;
|
||||
loginForm.value.loginParam.loginYLJGName = item?.name || '';
|
||||
}
|
||||
|
||||
// 登录方法
|
||||
const handleLogin = async () => {
|
||||
console.log("sss",loginForm.value)
|
||||
try {
|
||||
const valid = await loginRef.value.validate(); // 直接用ref.validate()
|
||||
loginRef.value.validate((valid) => {
|
||||
if (valid) {
|
||||
loading.value = true;
|
||||
// 记住密码逻辑
|
||||
if (loginForm.value.rememberMe) {
|
||||
Cookies.set("username", loginForm.value.username, { expires: 30 });
|
||||
Cookies.set("password", encrypt(loginForm.value.password), { expires: 30 });
|
||||
Cookies.set("rememberMe", loginForm.value.rememberMe, { expires: 30 });
|
||||
} else {
|
||||
Cookies.remove("username");
|
||||
Cookies.remove("password");
|
||||
Cookies.remove("rememberMe");
|
||||
}
|
||||
// 调用action的登录方法
|
||||
Cookies.set("czlis_username", loginForm.value.username, { expires: 30 });
|
||||
Cookies.set("czlis_loginYLJG", loginForm.value.loginParam.loginYLJG, { expires: 30 });
|
||||
// Cookies.set("czlis_loginYLJGName", loginForm.value.loginParam.loginYLJGName, { expires: 30 });
|
||||
// loginForm.value.password = encrypt(loginForm.value.password); // 密码加密
|
||||
|
||||
userStore.login(loginForm.value).then(() => {
|
||||
const query = route.query;
|
||||
const otherQueryParams = Object.keys(query).reduce((acc, cur) => {
|
||||
@ -188,8 +174,9 @@ const handleLogin = async () => {
|
||||
}
|
||||
return acc;
|
||||
}, {});
|
||||
const targetPath = redirect.value || "/";
|
||||
if (route.path !== targetPath) {
|
||||
router.push({path: redirect.value || "/", query: otherQueryParams});
|
||||
router.push({ path: targetPath, query: otherQueryParams });
|
||||
}
|
||||
}).catch(() => {
|
||||
loading.value = false;
|
||||
@ -198,27 +185,8 @@ const handleLogin = async () => {
|
||||
getCode();
|
||||
}
|
||||
});
|
||||
/*
|
||||
// 调用登录接口
|
||||
await userStore.login(loginForm.value);
|
||||
// 路由跳转(防重复跳转)
|
||||
const query = route.query;
|
||||
const otherQueryParams = Object.keys(query).reduce((acc, cur) => {
|
||||
if (cur !== "redirect") acc[cur] = query[cur];
|
||||
return acc;
|
||||
}, {});
|
||||
const targetPath = redirect.value || "/";
|
||||
if (route.path !== targetPath) {
|
||||
router.push({ path: targetPath, query: otherQueryParams });
|
||||
}
|
||||
*/
|
||||
}
|
||||
} catch (err) {
|
||||
console.error("登录验证失败:", err);
|
||||
} finally {
|
||||
loading.value = false;
|
||||
if (captchaEnabled.value) getCode(); // 失败后刷新验证码
|
||||
}
|
||||
})
|
||||
};
|
||||
|
||||
// 获取验证码
|
||||
@ -229,90 +197,67 @@ const getCode = () => {
|
||||
codeUrl.value = "data:image/gif;base64," + res.img;
|
||||
loginForm.value.uuid = res.uuid;
|
||||
}
|
||||
// 验证码关闭时移除校验规则,避免报错
|
||||
if (!captchaEnabled.value) {
|
||||
loginRules.value.code = [];
|
||||
} else {
|
||||
loginRules.value.code = [{ required: true, trigger: "change", message: "请输入验证码" }];
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// 从Cookie获取账号密码
|
||||
const getCookie = () => {
|
||||
const username = Cookies.get("username");
|
||||
const password = Cookies.get("password");
|
||||
const rememberMe = Cookies.get("rememberMe");
|
||||
loginForm.value = {
|
||||
...loginForm.value,
|
||||
username: username ?? loginForm.value.username,
|
||||
password: password ? decrypt(password) : loginForm.value.password,
|
||||
rememberMe: rememberMe ? Boolean(rememberMe) : false
|
||||
};
|
||||
const cookieUsername = Cookies.get("czlis_username");
|
||||
const cookieloginYLJG = Cookies.get("czlis_loginYLJG");
|
||||
loginForm.value.username = cookieUsername;
|
||||
if (cookieloginYLJG) {
|
||||
loginForm.value.loginParam.loginYLJG = cookieloginYLJG;
|
||||
loginForm.value.loginParam.loginYLJGName = selectOptions.value.find(item => item.id == cookieloginYLJG)?.name || '';
|
||||
} else {
|
||||
loginForm.value.loginParam.loginYLJG = selectOptions.value[0]?.id || '1';
|
||||
loginForm.value.loginParam.loginYLJGName = selectOptions.value[0]?.name || '';
|
||||
}
|
||||
};
|
||||
|
||||
// 获取本地配置
|
||||
const Localconfig = (localid) => {
|
||||
getLocalconfig({ localid }).then(res => {
|
||||
const Localconfig = () => {
|
||||
getLocalconfig().then(res => {
|
||||
if (res) {
|
||||
const { localconfig, hosplist, oem: oemData } = res;
|
||||
console.log('本地配置:', localconfig, '医院列表:', hosplist);
|
||||
// 修复:赋值oem数据,显示动态标题
|
||||
mbStore.setDefaultConfig(localconfig)
|
||||
if (oemData) oem.value = oemData;
|
||||
// 修复:判重后更新下拉选项,避免递归
|
||||
if (JSON.stringify(selectOptions.value) !== JSON.stringify(hosplist)) {
|
||||
selectOptions.value = hosplist || [{ id: '1', name: '总院' }];
|
||||
// 判重后赋值,避免重复修改触发更新
|
||||
if (!selectOptions.value.some(item => item.id === loginForm.value.hospid)) {
|
||||
loginForm.value.hospid = selectOptions.value[0]?.id || '1';
|
||||
}
|
||||
}
|
||||
selectOptions.value = hosplist || [];
|
||||
getCookie();
|
||||
}
|
||||
}).catch(err => {
|
||||
console.error("获取本地配置失败:", err);
|
||||
});
|
||||
};
|
||||
|
||||
// 获取指纹并加载配置
|
||||
const { getFingerprint } = useFingerprint();
|
||||
const refreshFingerprint = async () => {
|
||||
try {
|
||||
const res = await getFingerprint();
|
||||
Localconfig(res.visitorId);
|
||||
} catch (err) {
|
||||
console.error("获取指纹失败:", err);
|
||||
Localconfig("default"); // 兜底使用默认ID
|
||||
}
|
||||
};
|
||||
|
||||
// Tab切换事件(移除activeName手动赋值,避免递归)
|
||||
const handleClick = (tab) => {
|
||||
console.log('当前Tab:', tab.name);
|
||||
// console.log('当前Tab:', tab.name);
|
||||
// 仅在切回账号密码登录时刷新验证码
|
||||
if (tab.name === 'first' && captchaEnabled.value) {
|
||||
getCode();
|
||||
}
|
||||
};
|
||||
|
||||
// 页面挂载时初始化
|
||||
onMounted(() => {
|
||||
refreshFingerprint();
|
||||
getCode();
|
||||
getCookie();
|
||||
});
|
||||
|
||||
Localconfig();
|
||||
getCode();
|
||||
</script>
|
||||
|
||||
<style lang='scss' scoped>
|
||||
.login {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
position: relative;
|
||||
height: 100vh;
|
||||
background-image: url("../assets/images/login-background.jpg");
|
||||
background-size: cover;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.login-form {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
background: rgba(255, 255, 255, 0.4);
|
||||
backdrop-filter: blur(10px);
|
||||
-webkit-backdrop-filter: blur(10px);
|
||||
@ -416,9 +361,12 @@ onMounted(() => {
|
||||
overflow: visible !important;
|
||||
}
|
||||
}
|
||||
|
||||
.custom-select {
|
||||
margin-top: 20px; /* 可根据需求调整数值 */
|
||||
margin-top: 20px;
|
||||
/* 可根据需求调整数值 */
|
||||
}
|
||||
|
||||
/* Tab占位样式 */
|
||||
.tab-placeholder {
|
||||
display: flex;
|
||||
@ -1,95 +1,88 @@
|
||||
<template>
|
||||
<div class="login">
|
||||
<el-form ref="loginRef" class="login-form" :model="loginForm" :rules="loginRules" :hide-required-asterisk="true">
|
||||
<div class="login-header">
|
||||
<div class="login-logo">
|
||||
<img src="@/assets/images/logo_new.png" alt="系统Logo" />
|
||||
</div>
|
||||
<div class="login-split"></div>
|
||||
<div class="login-title">
|
||||
<h1>{{ oem.appname }}</h1>
|
||||
<div class="login-container">
|
||||
<div class="left_img"></div>
|
||||
<div class="login-form">
|
||||
<el-form ref="loginRef" :model="loginForm" :rules="loginRules" :hide-required-asterisk="true">
|
||||
<div class="login-header">
|
||||
<div class="login-logo">
|
||||
<img src="@/assets/images/logo_new.png" alt="系统Logo" />
|
||||
</div>
|
||||
<div class="login-split"></div>
|
||||
<div class="login-title">
|
||||
<h1>{{ oem.appname }}</h1>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Tab切换容器 -->
|
||||
<el-tabs v-model="activeName" type="card" @tab-click="handleClick" class="login-tabs">
|
||||
<!-- 工号登录 Tab -->
|
||||
<el-tab-pane label="账号密码登录" name="first">
|
||||
<el-form-item label="医疗机构" prop="loginParam.loginYLJG" class="custom-select">
|
||||
<el-select v-model="loginForm.loginParam.loginYLJG" placeholder="请选择医疗机构" style="width: 100%"
|
||||
class="no-border" @change="handleChange">
|
||||
<el-option v-for="item in selectOptions" :key="item.id" :label="item.name"
|
||||
:value="item.id"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="用户工号" prop="username">
|
||||
<el-input v-model="loginForm.username" type="text" auto-complete="off" placeholder="" class="no-border">
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="登录密码" prop="password">
|
||||
<el-input v-model="loginForm.password" type="password" auto-complete="off" placeholder=""
|
||||
class="no-border" @keyup.enter="handleLogin">
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="code" label="验 证 码" v-if="captchaEnabled">
|
||||
<el-input v-model="loginForm.code" auto-complete="off" placeholder="" style="width: 53%"
|
||||
class="no-border" @keyup.enter="handleLogin">
|
||||
</el-input>
|
||||
<div class="login-code">
|
||||
<img :src="codeUrl" @click="getCode" class="login-code-img" />
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item style="width: 100%;">
|
||||
<el-button :loading="loading" type="primary" class="login-btn" style="width: 100%;"
|
||||
@click.prevent="handleLogin">
|
||||
<span v-if="!loading">登 录</span>
|
||||
<span v-else>登 录 中...</span>
|
||||
</el-button>
|
||||
<div style="float: right;" v-if="register">
|
||||
<router-link class="link-type" :to="'/register'">立即注册</router-link>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane label="扫码登录" name="second">
|
||||
<div class="tab-placeholder">
|
||||
<el-icon class="placeholder-icon">
|
||||
<!-- <Sms /> -->
|
||||
</el-icon>
|
||||
<p>正在加载二维码...</p>
|
||||
<el-button type="success" icon="wechat" class="wechat-login-btn">刷新二维码</el-button>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane label="UKEY登录" name="third">
|
||||
<div class="tab-placeholder">
|
||||
<el-icon class="placeholder-icon">
|
||||
<!-- <Wechat /> -->
|
||||
</el-icon>
|
||||
<p>UKEY登录功能开发中...</p>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</el-form>
|
||||
|
||||
<div class="el-login-footer">
|
||||
<span>版权所有(R){{ oem.copyrightyear }} {{ oem.compay }} <br />电话:{{ oem.phone }} E-mail:{{ oem.Email }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Tab切换容器 -->
|
||||
<el-tabs v-model="activeName" type="card" @tab-click="handleClick" class="login-tabs">
|
||||
<!-- 工号登录 Tab -->
|
||||
<el-tab-pane label="账号密码登录" name="first">
|
||||
<el-form-item label="医疗机构:" prop="loginParam.loginYLJG" class="custom-select">
|
||||
<el-select v-model="loginForm.loginParam.loginYLJG" placeholder="请选择医疗机构" style="width: 100%"
|
||||
@change="handleChange">
|
||||
<template #prefix>
|
||||
<svg-icon icon-class="international" class="el-input__icon input-icon" />
|
||||
</template>
|
||||
<el-option v-for="item in selectOptions" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="用户工号:" prop="username">
|
||||
<el-input v-model="loginForm.username" type="text" size="large" auto-complete="off" placeholder="账号">
|
||||
<template #prefix>
|
||||
<svg-icon icon-class="user" class="el-input__icon input-icon" />
|
||||
</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="登录密码:" prop="password">
|
||||
<el-input v-model="loginForm.password" type="password" size="large" auto-complete="off" placeholder="密码"
|
||||
@keyup.enter="handleLogin">
|
||||
<template #prefix>
|
||||
<svg-icon icon-class="password" class="el-input__icon input-icon" />
|
||||
</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="code" label="验 证 码 :" v-if="captchaEnabled">
|
||||
<el-input v-model="loginForm.code" size="large" auto-complete="off" placeholder="验证码" style="width: 53%"
|
||||
@keyup.enter="handleLogin">
|
||||
<template #prefix>
|
||||
<svg-icon icon-class="validCode" class="el-input__icon input-icon" />
|
||||
</template>
|
||||
</el-input>
|
||||
<div class="login-code">
|
||||
<img :src="codeUrl" @click="getCode" class="login-code-img" />
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item style="width: 100%;">
|
||||
<el-button :loading="loading" size="large" type="primary" class="login-btn" style="width: 100%;"
|
||||
@click.prevent="handleLogin">
|
||||
<span v-if="!loading">登 录</span>
|
||||
<span v-else>登 录 中...</span>
|
||||
</el-button>
|
||||
<div style="float: right;" v-if="register">
|
||||
<router-link class="link-type" :to="'/register'">立即注册</router-link>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane label="扫码登录" name="second">
|
||||
<div class="tab-placeholder">
|
||||
<el-icon class="placeholder-icon">
|
||||
<!-- <Sms /> -->
|
||||
</el-icon>
|
||||
<p>正在加载二维码...</p>
|
||||
<el-button type="success" icon="wechat" class="wechat-login-btn">刷新二维码</el-button>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane label="UKEY登录" name="third">
|
||||
<div class="tab-placeholder">
|
||||
<el-icon class="placeholder-icon">
|
||||
<!-- <Wechat /> -->
|
||||
</el-icon>
|
||||
<p>UKEY登录功能开发中...</p>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</el-form>
|
||||
|
||||
<div class="el-login-footer">
|
||||
<span>版权所有(R){{ oem.copyrightyear }} {{ oem.compay }} 电话:{{ oem.phone }} E-mail:{{ oem.Email }} version:{{
|
||||
oem.version
|
||||
}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@ -248,43 +241,65 @@ getCode();
|
||||
.login {
|
||||
position: relative;
|
||||
height: 100vh;
|
||||
background-image: url("../assets/images/login-background.jpg");
|
||||
background: #02a5ff;
|
||||
background-size: cover;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.login-form {
|
||||
.login-container {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
background: rgba(255, 255, 255, 0.4);
|
||||
backdrop-filter: blur(10px);
|
||||
-webkit-backdrop-filter: blur(10px);
|
||||
border: 1px solid rgba(255, 255, 255, 0.9);
|
||||
/* 关键1:替换固定百分比宽度为最大宽度+自适应,避免缩放时过度拉伸 */
|
||||
width: clamp(800px, 70%, 1400px);
|
||||
max-width: 1400px;
|
||||
min-width: 800px;
|
||||
height: 80vh;
|
||||
min-height: 500px;
|
||||
background: #fff;
|
||||
display: flex;
|
||||
border-radius: 12px;
|
||||
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
|
||||
width: 480px;
|
||||
padding: 35px 35px 5px 35px;
|
||||
overflow: hidden;
|
||||
|
||||
.el-input {
|
||||
height: 40px;
|
||||
.left_img {
|
||||
background-image: url(../assets/images/login_left.png);
|
||||
background-size: 100% 100%;
|
||||
flex: 0 0 50%;
|
||||
max-width: 50%;
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
input {
|
||||
height: 40px;
|
||||
}
|
||||
.login-form {
|
||||
flex: 1;
|
||||
min-width: 350px;
|
||||
height: 100%;
|
||||
padding: clamp(40px, 8%, 100px);
|
||||
box-sizing: border-box;
|
||||
|
||||
|
||||
.el-form-item:not(:last-child) {
|
||||
border-bottom: 1px solid #ccc
|
||||
}
|
||||
|
||||
.input-icon {
|
||||
height: 39px;
|
||||
width: 14px;
|
||||
margin-left: 0px;
|
||||
.no-border {
|
||||
--el-input-border-color: transparent !important;
|
||||
--el-input-hover-border-color: transparent !important;
|
||||
--el-input-focus-border-color: transparent !important;
|
||||
--el-select-input-border-color: transparent !important;
|
||||
border-color: transparent !important;
|
||||
}
|
||||
|
||||
.no-border :deep(.el-input__wrapper),
|
||||
.no-border :deep(.el-select__wrapper) {
|
||||
border: none !important;
|
||||
box-shadow: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
.login-code {
|
||||
width: 33%;
|
||||
height: 40px;
|
||||
float: right;
|
||||
|
||||
img {
|
||||
@ -296,17 +311,23 @@ getCode();
|
||||
}
|
||||
}
|
||||
|
||||
.login-btn {
|
||||
background: linear-gradient(#00d3f9, #00b1f3);
|
||||
border: none;
|
||||
margin-top: 20px;
|
||||
width: 100%;
|
||||
height: 50px;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.el-login-footer {
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
line-height: 30px;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
color: #000;
|
||||
font-family: Arial;
|
||||
font-size: 12px;
|
||||
letter-spacing: 1px;
|
||||
margin-top: 30px;
|
||||
}
|
||||
|
||||
/* Logo和标题样式 */
|
||||
@ -314,11 +335,14 @@ getCode();
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 30px;
|
||||
/* 缩放时标题区域自适应 */
|
||||
flex-wrap: nowrap;
|
||||
}
|
||||
|
||||
.login-logo img {
|
||||
height: 40px;
|
||||
width: auto;
|
||||
min-height: 30px;
|
||||
}
|
||||
|
||||
.login-split {
|
||||
@ -330,28 +354,40 @@ getCode();
|
||||
|
||||
.login-title h1 {
|
||||
margin: 0;
|
||||
font-size: 24px;
|
||||
color: #1989fa;
|
||||
font-size: clamp(18px, 2vw, 24px);
|
||||
color: #000;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
/* Tab容器样式(修复冲突) */
|
||||
/* Tab容器样式 */
|
||||
.login-tabs {
|
||||
width: 100%;
|
||||
height: 350px;
|
||||
height: clamp(280px, 70%, 350px);
|
||||
min-height: 280px;
|
||||
overflow: hidden;
|
||||
border-radius: 8px;
|
||||
backdrop-filter: blur(10px);
|
||||
-webkit-backdrop-filter: blur(10px);
|
||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||
padding: 1px 10px 10px;
|
||||
background: transparent;
|
||||
|
||||
:deep(.el-tabs__header) {
|
||||
background: transparent;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
:deep(.el-tabs__nav) {
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
:deep(.el-tabs__item) {
|
||||
width: 33.33% !important;
|
||||
|
||||
&.is-active {
|
||||
border-bottom: 2px solid #00d3f9 !important;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
:deep(.el-tabs__nav-prev),
|
||||
:deep(.el-tabs__nav-next) {
|
||||
display: none !important; // 隐藏Tab左右箭头
|
||||
@ -363,8 +399,7 @@ getCode();
|
||||
}
|
||||
|
||||
.custom-select {
|
||||
margin-top: 20px;
|
||||
/* 可根据需求调整数值 */
|
||||
margin-top: 30px;
|
||||
}
|
||||
|
||||
/* Tab占位样式 */
|
||||
@ -375,22 +410,20 @@ getCode();
|
||||
justify-content: center;
|
||||
padding: 40px 0;
|
||||
color: #666;
|
||||
height: calc(100% - 40px); // 适配Tab容器高度
|
||||
/* 适配Tab容器高度,防止溢出 */
|
||||
height: calc(100% - 40px);
|
||||
|
||||
.placeholder-icon {
|
||||
font-size: 48px;
|
||||
font-size: clamp(36px, 8vw, 48px);
|
||||
/* 图标大小自适应 */
|
||||
margin-bottom: 20px;
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
.wechat-login-btn {
|
||||
margin-top: 20px;
|
||||
width: 200px;
|
||||
width: clamp(150px, 40%, 200px);
|
||||
/* 按钮宽度自适应 */
|
||||
}
|
||||
}
|
||||
|
||||
/* 隐藏必填项星号 */
|
||||
:deep(.el-form-item.is-required:not(.is-no-asterisk) .el-form-item__label-wrap .el-form-item__asterisk) {
|
||||
display: none !important;
|
||||
}
|
||||
</style>
|
||||
@ -60,69 +60,77 @@
|
||||
@clear="handleQuery" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label-width="50px">
|
||||
<el-button icon="search" type="primary" @click="handleQuery">
|
||||
搜索
|
||||
</el-button>
|
||||
<!-- <el-button icon="Refresh" @click="resetQuery">重置</el-button> -->
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</el-row>
|
||||
</div>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="16" class="right-table">
|
||||
<el-row :gutter="10" class="mb8 mt10">
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="Edit" :size="aotuSize" @click="selectStatusRows">勾选所有未打印</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="Upload" :size="aotuSize" @click="printPdf">打印报告</el-button>
|
||||
</el-col>
|
||||
|
||||
<!-- <right-toolbar v-model:showSearch="showSearch" @updateColumns="updateColumns" @queryTable="handleQuery"
|
||||
:columns="columns"></right-toolbar> -->
|
||||
</el-row>
|
||||
|
||||
<CustomTable ref="tableRefs" :data="tableData" :columns="columns" :config="tableConfig" :loading="loading"
|
||||
@selection-change="selectionChange" @row-click="rowHandle" :enableColumnDrag="true"
|
||||
@column-drag-end="handleColumnDragEnd">
|
||||
<template #dybz="{ row }">
|
||||
<svg-icon v-if="row.dybz == 1" icon-class="lvgou" />
|
||||
</template>
|
||||
<template #srcHospName="{ row }">
|
||||
武汉市汉阳区江堤街社区卫生服务中心
|
||||
</template>
|
||||
<template #alarmflag="{ row }">
|
||||
{{ row.alarmflag == 1 ? '危' : '' }}
|
||||
</template>
|
||||
<template #jzbz="{ row }">
|
||||
{{ row.jzbz == 1 ? '急' : '' }}
|
||||
</template>
|
||||
</CustomTable>
|
||||
|
||||
<el-row :gutter="10" class="mb5 mt5">
|
||||
<el-col :span="1.5">
|
||||
<el-button icon="search" type="primary" @click="handleQuery"> 搜索 </el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="Edit" :size="aotuSize" @click="selectStatusRows">勾选所有未打印</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="warning" plain icon="Printer" :size="aotuSize" @click="printPdf">打印报告</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain :size="aotuSize" @click="openDB">对比历史</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="25">
|
||||
<el-col :span="16" class="right-table sqd-box">
|
||||
<div>
|
||||
<CustomTable ref="tableRefs" :data="tableData" :columns="columns" :config="tableConfig" :loading="loading"
|
||||
@selection-change="selectionChange" @row-click="rowHandle" :enableColumnDrag="true"
|
||||
@column-drag-end="handleColumnDragEnd">
|
||||
<template #dybz="{ row }">
|
||||
<svg-icon v-if="row.dybz == 1" icon-class="lvgou" />
|
||||
</template>
|
||||
<template #alarmflag="{ row }">
|
||||
{{ row.alarmflag == 1 ? '危' : '' }}
|
||||
</template>
|
||||
<template #jzbz="{ row }">
|
||||
{{ row.jzbz == 1 ? '急' : '' }}
|
||||
</template>
|
||||
</CustomTable>
|
||||
<!-- <div class="mask">
|
||||
<el-popover placement="left" :width="400" trigger="click">
|
||||
<template #reference>
|
||||
<div class="text">项目明细</div>
|
||||
</template>
|
||||
<el-table :data="[]">
|
||||
<el-table-column property="date" label="test1" />
|
||||
<el-table-column property="name" label="test2" />
|
||||
<el-table-column property="address" label="test3" />
|
||||
</el-table>
|
||||
</el-popover>
|
||||
</div> -->
|
||||
<div class="mt10">
|
||||
<el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange"
|
||||
:size="aotuSize" :current-page="queryParams.pageNum" :page-sizes="[10, 20, 50, 100]"
|
||||
:page-size="queryParams.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total">
|
||||
</el-pagination>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="8" class="right-table">
|
||||
<!-- <div class="title">检验结果</div> -->
|
||||
<div class="mb8 mt10">
|
||||
<el-button type="primary" plain :size="aotuSize" @click="openDB">对比历史</el-button>
|
||||
<el-select class="ml10" placeholder="请选择复制" style="width: 140px" @change="copyData" :size="aotuSize">
|
||||
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
<!-- <el-button type="primary">知识库</el-button> -->
|
||||
</div>
|
||||
|
||||
<CustomTable :data="rightTableData" :columns="rightColumns" :config="rightTableConfig" @row-click="xmrowHandle"
|
||||
ref="rightTableRef">
|
||||
<template #jgbz="{ row }">
|
||||
{{ formatJgbz(row.jgbz) }}
|
||||
</template>
|
||||
</CustomTable>
|
||||
|
||||
<ContextMenu :items="contextMenuItems" @select="handleMenuSelect" menu-width="120">
|
||||
<CustomTable :data="rightTableData" :columns="rightColumns" :config="rightTableConfig"
|
||||
@row-click="xmrowHandle" ref="rightTableRef">
|
||||
<template #jgbz="{ row }">
|
||||
{{ formatJgbz(row.jgbz) }}
|
||||
</template>
|
||||
<template #xmmc="{ row }">
|
||||
<el-tooltip class="box-item" effect="dark" :content="row.clinicref" placement="top"
|
||||
:popper-style="{ width: '320px', maxWidth: '320px' }" :disabled="!row.clinicref">
|
||||
<span>{{ row.xmmc }}</span>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
</CustomTable>
|
||||
</ContextMenu>
|
||||
<div class="mt10" v-if="bottomTableData.length > 0"></div>
|
||||
<CustomTable v-if="bottomTableData.length > 0" :data="bottomTableData" :columns="bottomColumns"
|
||||
:config="bottomTableConfig">
|
||||
@ -177,12 +185,11 @@ import dayjs from 'dayjs';
|
||||
import SelectTable from '@/components/SelectTable/index.vue';
|
||||
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||
import { classCom } from '@/utils/classCom'
|
||||
import { HiprintPrinter } from '@/utils/hiprintPrinter';
|
||||
import ContextMenu from "@/components/contextMenu/index.vue";
|
||||
import * as echarts from 'echarts';
|
||||
//@ts-ignore
|
||||
import { comDict } from '@/utils/dict'
|
||||
import { usePrintStore } from '@/store/modules/printStore'
|
||||
//@ts-ignore
|
||||
import { ContextMenuItem } from '@/types/index'
|
||||
import useUserStore from '@/store/modules/user'
|
||||
import { useRoute } from 'vue-router'
|
||||
|
||||
@ -196,11 +203,7 @@ const dialogVisible = ref(false)
|
||||
const tableRefs = ref()
|
||||
const diaTableRef = ref()
|
||||
const myEcharts = ref()
|
||||
const options = ref([
|
||||
{ label: '复制全部数据', value: 'All' },
|
||||
{ label: '复制异常数据', value: 'N' },
|
||||
{ label: '复制正常数据', value: 'Y' },
|
||||
])
|
||||
const total = ref(0)
|
||||
interface QueryParams {
|
||||
times: string[]; // 明确类型为字符串元组
|
||||
alarmflag: boolean,
|
||||
@ -212,9 +215,12 @@ interface QueryParams {
|
||||
ch: string,
|
||||
dybz: string,
|
||||
sqh: string,
|
||||
userid: string
|
||||
userid: string,
|
||||
pageNum: number,
|
||||
pageSize: number,
|
||||
}
|
||||
|
||||
|
||||
// 提交表单数据
|
||||
const queryParams = reactive<QueryParams>({
|
||||
times: ['2025-08-19', '2025-08-19'],
|
||||
@ -228,7 +234,9 @@ const queryParams = reactive<QueryParams>({
|
||||
brdh: '',
|
||||
ch: '',
|
||||
dybz: '',
|
||||
userid: ''
|
||||
userid: '',
|
||||
pageNum: 1,
|
||||
pageSize: 50,
|
||||
});
|
||||
// 获取当前日期(当天)
|
||||
const today = dayjs();
|
||||
@ -266,6 +274,16 @@ const queryRules = ref({
|
||||
// ],
|
||||
})
|
||||
|
||||
const contextMenuItems = computed<ContextMenuItem[]>(() => [
|
||||
{ label: '复制全部数据', action: 'All' },
|
||||
{ label: '复制异常数据', action: 'N' },
|
||||
{ label: '复制正常数据', action: 'Y' },
|
||||
]);
|
||||
|
||||
const handleMenuSelect = ((item: ContextMenuItem) => {
|
||||
copyData(item.action)
|
||||
})
|
||||
|
||||
|
||||
// 时间线数据
|
||||
const timelineItems = ref(
|
||||
@ -309,7 +327,6 @@ const tableData = ref([])
|
||||
// 配置项
|
||||
const columns = ref([
|
||||
{ type: 'selection', visible: true, align: 'center', width: 30, label: '多选框' },
|
||||
{ prop: 'srcHospName', label: '委托机构', align: 'center', visible: true, slot: 'srcHospName', width: 200 },
|
||||
{ prop: 'dybz', label: '印', align: 'center', visible: true, slot: 'dybz', width: 40 },
|
||||
{ prop: 'jzbz', label: '急', align: 'center', visible: true, slot: 'jzbz', width: 40 },
|
||||
{ prop: 'alarmflag', label: '危', align: 'center', visible: true, slot: 'alarmflag', width: 40 },
|
||||
@ -498,7 +515,7 @@ const rightTableData = ref([])
|
||||
// 配置项
|
||||
const rightColumns = ref([
|
||||
{ prop: 'xmdh', label: '项目代号', align: 'center', visible: true, },
|
||||
{ prop: 'xmmc', label: '项目名称', align: 'center', visible: true, },
|
||||
{ prop: 'xmmc', label: '项目名称', align: 'center', visible: true, slot: 'xmmc' },
|
||||
{ prop: 'xmmc', label: '培养结果', align: 'center', visible: true, width: 150 },
|
||||
{ prop: 'csjg', label: '检验结果', align: 'center', visible: true, },
|
||||
{ prop: 'refs', label: '参考值', align: 'center', visible: true, },
|
||||
@ -631,7 +648,7 @@ interface copyItem {
|
||||
jgbz: string;
|
||||
}
|
||||
// 复制函数
|
||||
const copyData = (type: string) => {
|
||||
const copyData = (type: string | undefined) => {
|
||||
let str = ''
|
||||
const getCommonRow = (item: copyItem) => `${item.xmdh}\t${item.xmmc}\t${item.csjg}\t${item.refs}\t${item.dw}\t${item.jgbz}\t\r\n`;
|
||||
rightTableData.value.forEach((v: any) => {
|
||||
@ -840,8 +857,6 @@ onMounted(async () => {
|
||||
// const start = dayjs().subtract(1, 'day').format('YYYY-MM-DD HH:mm:ss'); //add 时间往后
|
||||
// queryParams.times = [start, end];
|
||||
// console.log(queryParams.times);
|
||||
// 进入页面单点登录
|
||||
userStore.loginAnonymous({ name: 'admin' })
|
||||
getList()
|
||||
adjustTableHeight();
|
||||
|
||||
@ -855,7 +870,14 @@ onMounted(async () => {
|
||||
};
|
||||
});
|
||||
|
||||
|
||||
const handleSizeChange = (size: number) => {
|
||||
queryParams.pageSize = size
|
||||
getList()
|
||||
}
|
||||
const handleCurrentChange = (val: number) => {
|
||||
queryParams.pageNum = val
|
||||
getList()
|
||||
};
|
||||
const getList = () => {
|
||||
if (!queryParams.ksdh) return ElMessage.error('科室代号不能为空');
|
||||
if (!queryParams.userid) return ElMessage.error('用户userid不能为空');
|
||||
@ -872,7 +894,8 @@ const getList = () => {
|
||||
st: '',
|
||||
et: '',
|
||||
yljg: 1,
|
||||
|
||||
pageNum: queryParams.pageNum,
|
||||
pageSize: queryParams.pageSize
|
||||
}
|
||||
if (queryParams.times && queryParams.times.length) {
|
||||
data.st = queryParams.times[0]
|
||||
@ -882,12 +905,13 @@ const getList = () => {
|
||||
}
|
||||
loading.value = true
|
||||
reportList(data).then((res: any) => {
|
||||
if (res.code == 0) {
|
||||
if (res.code == 200) {
|
||||
loading.value = false
|
||||
tableData.value = res.data
|
||||
if (res.data.length > 0) {
|
||||
tableRefs.value.setCurrentRow(res.data[0])
|
||||
rowHandle(res.data[0])
|
||||
tableData.value = res.rows
|
||||
total.value = res.total
|
||||
if (res.rows.length > 0) {
|
||||
tableRefs.value.setCurrentRow(res.rows[0])
|
||||
rowHandle(res.rows[0])
|
||||
} else {
|
||||
rightTableData.value = []
|
||||
bottomTableData.value = []
|
||||
@ -908,7 +932,7 @@ function adjustTableHeight() {
|
||||
heightForm.value = compactForm.value.offsetHeight;
|
||||
|
||||
nextTick(() => {
|
||||
tableConfig.value.height = `calc(74vh - ${heightForm.value}px)`
|
||||
tableConfig.value.height = `calc(70vh - ${heightForm.value}px)`
|
||||
tableRefs.value?.doLayout && tableRefs.value.doLayout();
|
||||
});
|
||||
|
||||
@ -1014,4 +1038,25 @@ function adjustTableHeight() {
|
||||
/* 允许鼠标交互 */
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.sqd-box {
|
||||
position: relative;
|
||||
|
||||
.mask {
|
||||
position: absolute;
|
||||
right: -5px;
|
||||
top: 40%;
|
||||
cursor: pointer;
|
||||
|
||||
.text {
|
||||
width: 18px;
|
||||
padding: 8px 2px;
|
||||
text-align: center;
|
||||
color: #FFF;
|
||||
font-size: 12px;
|
||||
background-color: #4096ff;
|
||||
border-radius: 0 4px 4px 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch">
|
||||
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" class="query-form">
|
||||
<el-form-item label="部门名称" prop="deptName">
|
||||
<el-input v-model="queryParams.deptName" placeholder="请输入部门名称" clearable style="width: 200px"
|
||||
@keyup.enter="handleQuery" />
|
||||
@ -10,13 +10,15 @@
|
||||
<el-option v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['system:dept:add']">新增</el-button>
|
||||
</el-col>
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch">
|
||||
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" class="query-form">
|
||||
<el-form-item label="公告标题" prop="noticeTitle">
|
||||
<el-input v-model="queryParams.noticeTitle" placeholder="请输入公告标题" clearable style="width: 200px"
|
||||
@keyup.enter="handleQuery" />
|
||||
@ -14,13 +14,15 @@
|
||||
<el-option v-for="dict in sys_notice_type" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['system:notice:add']">新增</el-button>
|
||||
</el-col>
|
||||
@ -35,7 +37,7 @@
|
||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="noticeList" @selection-change="handleSelectionChange"
|
||||
<el-table v-loading="loading" :data="noticeList" @selection-change="handleSelectionChange" border
|
||||
height="calc(100vh - 280px)">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="序号" align="center" prop="noticeId" width="100" />
|
||||
@ -90,7 +92,7 @@
|
||||
<el-form-item label="状态">
|
||||
<el-radio-group v-model="form.status">
|
||||
<el-radio v-for="dict in sys_notice_status" :key="dict.value" :label="dict.value">{{ dict.label
|
||||
}}</el-radio>
|
||||
}}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch">
|
||||
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" class="query-form">
|
||||
<el-form-item label="岗位编码" prop="postCode">
|
||||
<el-input v-model="queryParams.postCode" placeholder="请输入岗位编码" clearable style="width: 200px"
|
||||
@keyup.enter="handleQuery" />
|
||||
@ -14,13 +14,15 @@
|
||||
<el-option v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['system:post:add']">新增</el-button>
|
||||
</el-col>
|
||||
@ -39,7 +41,7 @@
|
||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="postList" @selection-change="handleSelectionChange"
|
||||
<el-table v-loading="loading" :data="postList" @selection-change="handleSelectionChange" border
|
||||
height="calc(100vh - 280px)">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="岗位编号" align="center" prop="postId" />
|
||||
@ -84,7 +86,7 @@
|
||||
<el-form-item label="岗位状态" prop="status">
|
||||
<el-radio-group v-model="form.status">
|
||||
<el-radio v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.value">{{ dict.label
|
||||
}}</el-radio>
|
||||
}}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" prop="remark">
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryRef" v-show="showSearch" :inline="true" label-width="68px">
|
||||
<el-form :model="queryParams" ref="queryRef" v-show="showSearch" :inline="true" label-width="68px"
|
||||
class="query-form">
|
||||
<el-form-item label="角色名称" prop="roleName">
|
||||
<el-input v-model="queryParams.roleName" placeholder="请输入角色名称" clearable style="width: 240px"
|
||||
@keyup.enter="handleQuery" />
|
||||
@ -18,12 +19,14 @@
|
||||
<el-date-picker v-model="dateRange" value-format="YYYY-MM-DD" type="daterange" range-separator="-"
|
||||
start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['system:role:add']">新增</el-button>
|
||||
</el-col>
|
||||
@ -43,7 +46,7 @@
|
||||
</el-row>
|
||||
|
||||
<!-- 表格数据 -->
|
||||
<el-table v-loading="loading" :data="roleList" @selection-change="handleSelectionChange"
|
||||
<el-table v-loading="loading" :data="roleList" @selection-change="handleSelectionChange" border
|
||||
height="calc(100vh - 280px)">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="角色编号" prop="roleId" width="120" />
|
||||
@ -109,7 +112,7 @@
|
||||
<el-form-item label="状态">
|
||||
<el-radio-group v-model="form.status">
|
||||
<el-radio v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.value">{{ dict.label
|
||||
}}</el-radio>
|
||||
}}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="菜单权限">
|
||||
|
||||
@ -3,10 +3,6 @@
|
||||
<el-row :gutter="20">
|
||||
<!--部门数据-->
|
||||
<el-col :span="4" :xs="24">
|
||||
<div class="head-container">
|
||||
<el-input v-model="deptName" placeholder="请输入部门名称" clearable prefix-icon="Search"
|
||||
style="margin-bottom: 20px" />
|
||||
</div>
|
||||
<div class="head-container">
|
||||
<el-tree :data="deptOptions" :props="{ label: 'label', children: 'children' }" :expand-on-click-node="false"
|
||||
:filter-node-method="filterNode" ref="deptTreeRef" node-key="id" highlight-current default-expand-all
|
||||
@ -33,13 +29,15 @@
|
||||
<el-date-picker v-model="dateRange" value-format="YYYY-MM-DD" type="daterange" range-separator="-"
|
||||
start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="Plus" @click="handleAdd"
|
||||
v-hasPermi="['system:user:add']">新增</el-button>
|
||||
@ -67,8 +65,8 @@
|
||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange"
|
||||
height="calc(100vh - 300px)">
|
||||
<el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange" border
|
||||
height="calc(100vh - 280px)">
|
||||
<el-table-column type="selection" width="50" align="center" />
|
||||
<el-table-column label="用户编号" align="center" key="userId" prop="userId" v-if="columns[0].visible" />
|
||||
<el-table-column label="用户名称" align="center" key="userName" prop="userName" v-if="columns[1].visible"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user