检验申请

This commit is contained in:
wuyy 2026-03-13 17:49:15 +08:00
parent bb14919cbc
commit db210ef85c
17 changed files with 849 additions and 272 deletions

View File

@ -1,8 +1,8 @@
# 页面标题
VITE_APP_TITLE = 若依管理系统
VITE_APP_TITLE = 检验平台流转系统
# 开发环境配置
VITE_APP_ENV = 'development'
# 若依管理系统/开发环境
# 检验平台流转系统/开发环境
VITE_APP_BASE_API = '/dev-api'

View File

@ -1,10 +1,10 @@
# 页面标题
VITE_APP_TITLE = 若依管理系统
VITE_APP_TITLE = 检验平台流转系统
# 生产环境配置
VITE_APP_ENV = 'production'
# 若依管理系统/生产环境
# 检验平台流转系统/生产环境
VITE_APP_BASE_API = '/prod-api'
# 是否在打包时开启压缩,支持 gzip 和 brotli

View File

@ -1,10 +1,10 @@
# 页面标题
VITE_APP_TITLE = 若依管理系统
VITE_APP_TITLE = 检验平台流转系统
# 生产环境配置
VITE_APP_ENV = 'staging'
# 若依管理系统/生产环境
# 检验平台流转系统/生产环境
VITE_APP_BASE_API = '/stage-api'
# 是否在打包时开启压缩,支持 gzip 和 brotli

View File

@ -102,7 +102,7 @@ export function reportFsresult(query?: Object) {
// 打印机插件检查
export function printcheck(query?: Object) {
return request({
url: '/zyreq/printcheck',
url: '/regRequestInfo/printcheck',
method: 'get',
params: query,
});
@ -110,7 +110,7 @@ export function printcheck(query?: Object) {
// 打印机插件设置
export function printsetup(query?: Object) {
return request({
url: '/zyreq/printsetup',
url: '/regRequestInfo/printsetup',
method: 'get',
params: query,
});

View File

@ -12,7 +12,7 @@ export function queryRegRequestInfo(query: Object) {
//保存病人信息
export function saveReqInfo(query: Object) {
return request({
url: '/reqInput/saveReqInfo',
url: '/regRequestInfo/saveReqInfo',
method: 'post',
data: query
})
@ -35,4 +35,20 @@ export function queryReqDetail(query: Object) {
method: 'get',
params: query
})
}
//打印条码
export function reqPrint(query: Object) {
return request({
url: '/regRequestInfo/print',
method: 'get',
params: query
})
}
//作废申请单
export function cancelReq(query: Object) {
return request({
url: '/regRequestInfo/cancelReq',
method: 'get',
params: query
})
}

View File

@ -14,7 +14,8 @@
<template>
<div class="common-table-container">
<vxe-table :data="tableData" :loading="loading" border :checkbox-config="config.checkboxConfig"
:height="scrollYConfig.height" @checkbox-change="handleCheckboxChange" :row-config="rowConfig"
:height="scrollYConfig.height" @checkbox-change="handleCheckboxChange"
:row-config="{ isHover: true, height: 30, isCurrent: true, keyField: keyField ? keyField : '_index' }"
:show-overflow="showOverflow" @current-change="handleRowClick" ref="tableRef" :size="size"
:current-row="currentRow" :scroll-y="scrollYConfig" :tooltip-config="{ appendToBody: true, zIndex: 3000 }"
:header-cell-class-name="enableColumnDrag ? 'el-table-header-cell' : ''" v-bind="$attrs">
@ -84,11 +85,9 @@ const props = defineProps({
required: true
},
// 行配置
rowConfig: {
type: Object,
default: () => ({
isHover: true, height: 30, isCurrent: true, keyField: '_index'
})
keyField: {
type: String,
default: 'id'
},
// 表格配置
config: {

View File

@ -10,7 +10,7 @@ export interface UserQueryParams extends PageDomain {
/** 手机号码 */
phonenumber?: string;
/** 状态(0正常 1停用) */
status?: '0' | '1';
status?: string;
/** 部门编号 */
deptId?: number;
/** 创建时间 */

View File

@ -6,7 +6,6 @@
import { ElMessageBox, ElMessage } from 'element-plus'
import { printcheck } from '@/api/checkCode/index'
// @ts-ignore
import Download from '@/plugins/download'

View File

@ -1,6 +1,7 @@
import FingerprintJS from '@fingerprintjs/fingerprintjs';
import { useCommonStore } from '@/store/modules/commonStore'
const mbStore = useCommonStore();
export function useFingerprint() {
const fingerprint = ref('');
const loading = ref(true);
@ -23,7 +24,9 @@ export function useFingerprint() {
// 指纹标识符
fingerprint.value = result.visitorId;
if (!mbStore.fingerprint) {
mbStore.setFingerprint(result.visitorId)
}
// 可以获取更多详细信息
console.log('指纹详细信息:', result);
return result;

View File

@ -1,86 +1,76 @@
<template>
<div class="labpat_box">
<el-form :model="labPat" label-width="4.3rem" class="compact-form" label-position="right">
<div :class="['sh_box', getColor(lastJgbz)]" v-if="lastJgbz != null && lastJgbz != 0 && lastJgbz != 'C'">
<el-form :model="labPat" label-width="5rem" label-position="right" class="left-form ">
<!-- <div :class="['sh_box', getColor(lastJgbz)]" v-if="lastJgbz != null && lastJgbz != 0 && lastJgbz != 'C'">
<div class="text">{{ getLableType(lastJgbz) }}</div>
</div>
</div> -->
<el-form-item label="病人来源">
<el-col :span="16">
<SelectTable v-model:data="labPat.brly" :fields="brlyFields" :table-data="dictData.PT" size="small"
placeholder="" @getDataValue="handleFieldChange" />
</el-col>
<el-col :span="8">
<!-- <el-col :span="16"> -->
<SelectTable v-model:data="labPat.patType" :fields="brlyFields" :table-data="dictData.PT" placeholder=""
@getDataValue="handleFieldChange" />
<!-- </el-col> -->
<!-- <el-col :span="8">
<el-checkbox v-model="labPat.jzbz" true-value="1" class="check_box"> 急诊 </el-checkbox>
</el-col>
</el-col> -->
</el-form-item>
<el-form-item label="病人代号" required>
<el-input v-model="labPat.brdh" @keyup.enter="brdhHandle" size="small" />
<el-input v-model="labPat.patId" @keyup.enter="brdhHandle" />
</el-form-item>
<el-form-item label="姓 名">
<el-input v-model="labPat.brxm" @change="handleFieldChange" size="small" />
<el-form-item label="姓 名" required>
<el-input v-model="labPat.patName" @change="handleFieldChange" />
</el-form-item>
<el-form-item label="性 别">
<SelectTable v-model:data="labPat.brxb" :table-data="dictData.SX" size="small" placeholder=""
<el-form-item label="性 别" required>
<SelectTable v-model:data="labPat.patSex" :table-data="dictData.SX" placeholder=""
@getDataValue="handleFieldChange" />
</el-form-item>
<el-form-item label="年龄">
<el-form-item label="年龄" required>
<el-col :span="14">
<el-input v-model="labPat.nl" @change="handleFieldChange" size="small" />
<el-input v-model="labPat.patAge" @change="handleFieldChange" />
</el-col>
<el-col :span="10">
<SelectTable v-model:data="labPat.nldw" :table-data="dictData.AU" size="small" placeholder=""
<SelectTable v-model:data="labPat.ageUnit" :table-data="dictData.AU" placeholder=""
@getDataValue="handleFieldChange" />
</el-col>
</el-form-item>
<el-form-item label="样本类型" required>
<SelectTable v-model:data="labPat.yblx" :table-data="dictData.BT" size="small" placeholder=""
@getDataValue="handleFieldChange" />
</el-form-item>
<el-form-item label="送检医生">
<SelectTable v-model:data="labPat.yhdh" :fields="ysFields" :tableData="userList || []" label="nickName"
value="userName" objKey="userName" :border="true" size="small" placeholder=""
@getDataValue="handleFieldChange" />
value="userName" objKey="userName" :border="true" placeholder="" @getDataValue="handleFieldChange" />
</el-form-item>
<el-form-item label="送检科室">
<SelectTable v-model:data="labPat.ksdh" :table-data="dictData.DP" size="small" placeholder=""
<SelectTable v-model:data="labPat.execDeptCode" :table-data="dictData.DP" placeholder=""
@getDataValue="handleFieldChange" />
</el-form-item>
<el-form-item label="床 号">
<el-input v-model="labPat.ch" @change="handleFieldChange" size="small" />
<el-input v-model="labPat.patBed" @change="handleFieldChange" />
</el-form-item>
<el-form-item label="临床诊断">
<el-input v-model="labPat.zd" @change="handleFieldChange" size="small" />
<el-input v-model="labPat.diagnosisName" @change="handleFieldChange" />
</el-form-item>
<el-form-item label="备 注">
<el-input v-model="labPat.bz" @change="handleFieldChange" size="small" />
<el-input v-model="labPat.bz" @change="handleFieldChange" />
</el-form-item>
<el-form-item label="登记人员">
<SelectTable v-model:data="labPat.sjys" :table-data="dictData.SRD" size="small" placeholder=""
:disabled="true" />
<!-- <SelectTable v-model:data="labPat.userName" :table-data="dictData.SRD" placeholder="" :disabled="true" /> -->
<el-input v-model="labPat.userName" disabled />
</el-form-item>
<el-form-item label="登记时间">
<el-date-picker v-model="labPat.djry" type="datetime" format="YYYY-MM-DD HH:mm:ss" :disabled="true"
value-format="YYYY-MM-DD HH:mm:ss" size="small" style="width: 100%;" />
<el-date-picker v-model="labPat.orderTime" type="datetime" format="YYYY-MM-DD HH:mm:ss" :disabled="true"
value-format="YYYY-MM-DD HH:mm:ss" style="width: 100%;" />
</el-form-item>
<el-form-item label="条 码 号">
<el-input v-model="labPat.sqh" :disabled="true" size="small" />
<el-form-item label="医疗机构">
<el-input v-model="labPat.srcHospName" disabled />
</el-form-item>
<el-form-item label="申请状态">
<SelectTable v-model:data="labPat.zt" size="small" :table-data="lisReqs" placeholder="" :disabled="true" />
</el-form-item>
<el-form-item label="证件类型">
<SelectTable v-model:data="labPat.zjlx" size="small" :table-data="dictData.ZJLX" placeholder=""
<SelectTable v-model:data="labPat.zjlx" :table-data="dictData.ZJLX" placeholder=""
@getDataValue="handleFieldChange" />
</el-form-item>
<el-form-item label="证件号码">
<el-input v-model="labPat.sfzh" size="small" />
<el-input v-model="labPat.patIdentity" />
</el-form-item>
<el-form-item label="联系电话">
<el-input v-model="labPat.phone" size="small" />
<el-input v-model="labPat.phone" />
</el-form-item>
</el-form>
</div>
@ -106,10 +96,9 @@ const props = defineProps({
},
});
const lastJgbz = ref();
watch(() => props.labPat, (newVal) => {
lastValue.value = JSON.stringify(newVal);
lastJgbz.value = newVal.zt;
})
// watch(() => props.labPat, (newVal) => {
// lastValue.value = JSON.stringify(newVal);
// })
const emit = defineEmits(['update:labPat']);
@ -276,7 +265,7 @@ onMounted(() => {
.compact-form {
.left-form {
flex: 1;
position: relative;
height: 100%;
@ -285,16 +274,20 @@ onMounted(() => {
.el-form-item {
margin-bottom: 0px;
margin-bottom: 8px;
}
.el-form-item__label {
:deep(.el-form-item__label) {
padding-bottom: 0px;
color: #08355E;
font-size: 12px;
font-size: .875rem !important;
}
:deep(.el-form-item__label:before) {
margin-right: 0 !important;
}
:deep(.el-form-item--default .el-form-item__label) {
height: 27px !important;
line-height: 27px !important;

View File

@ -11,9 +11,8 @@
<div class="box-shadow">
<el-row class="top-box">
<el-col :span="7">
<el-button type="primary" size="small" @click="saveHandle">保存</el-button>
<el-button type="primary" size="small" :loading="saveLoading" @click="saveHandle">保存</el-button>
<el-button type="primary" size="small" @click="addHandle">新增</el-button>
<el-button type="danger" size="small" @click="deleteHandle">删除</el-button>
</el-col>
<el-col :span="17">
<div class="tips">
@ -33,21 +32,22 @@
</el-tabs>
<div style="height: calc(60% - 1.875rem)" class="mb5">
<CustomVxeTable :table-data="filterData" :columns="xmColumns" @cell-dblclick="dbRowclick"
:scrollYConfig="{ enabled: true, rSize: 30, height: '100%', }" class="mytable-style">
keyField='applyid' :scrollYConfig="{ enabled: true, rSize: 30, height: '100%', }"
class="mytable-style">
</CustomVxeTable>
</div>
<div style="height: calc(40% - 30px)">
<CustomVxeTable :table-data="sqXmList" :columns="sqXmColumns"
<CustomVxeTable :table-data="sqXmList" :columns="sqXmColumns" keyField='applyid'
:scrollYConfig="{ enabled: true, rSize: 30, height: '100%', }" class="mytable-style">
<template #classid="{ row }">
{{xmdlList.find((item) => item.dictCode == row.classid)?.dictName}}
</template>
<template #zt="{ row }">
申请
{{ formatDict(labpat.status, 'ZT') }}
</template>
<template #action="{ row }">
<el-button type="danger" text='danger' size="small" @click="delItem(row)">删除</el-button>
<el-button type="danger" :text='true' size="small" @click="delItem(row)">删除</el-button>
</template>
</CustomVxeTable>
</div>
@ -58,16 +58,19 @@
<el-col :span="8" style="height: 100%;">
<div class="box-shadow">
<el-form :model="searchForm" inline size="small">
<el-form-item label="姓名:" prop="brxm">
<el-input v-model="searchForm.brxm" clearable style="width: 9rem;" @change="handleQuery" />
<el-form-item label="" prop="brxm">
<el-input v-model="searchForm.brxm" clearable style="width: 9.5rem;" @change="handleQuery"
placeholder="请输入姓名" />
</el-form-item>
<el-form-item label="状态:" prop="zt">
<SelectTable v-model:data="searchForm.zt" :tableData="lis_req_type" clearable style="width: 9rem;"
size="small" @getDataValue="handleQuery" />
<el-form-item label="" prop="status">
<SelectTable v-model:data="searchForm.status" :tableData="dictData.ZT" clearable style="width: 9.5rem;"
placeholder="请选择状态" size="small" @getDataValue="handleQuery" />
</el-form-item>
<el-button type="primary" size="small" @click="printHandle">打印</el-button>
<el-button type="danger" size="small" @click="deleteHandle">作废</el-button>
<el-form-item label="" prop="begdate">
<div class="radio_box">
<el-radio-group v-model="searchForm.days" @change="handleQuery">
<el-radio-group v-model="searchForm.days" @change="changeDays">
<el-radio :value="3">近3天</el-radio>
<el-radio :value="7">近7天</el-radio>
<el-radio :value="0">此日
@ -76,21 +79,24 @@
</el-icon>
</el-radio>
</el-radio-group>
<el-date-picker v-model="searchForm.begdate" type="date" value-format="YYYY-MM-DD" style="width: 9rem;"
@change="handleQuery" />
<el-date-picker v-model="today" type="date" value-format="YYYY-MM-DD" style="width: 9rem;"
@change="dateHandle" /> &nbsp;
<!-- <el-tooltip class="box-item" effect="dark" content="打印" placement="top">
<el-button type="primary" circle size="small" icon="Memo" @click="printHandle"></el-button>
</el-tooltip>
<el-tooltip class="box-item" effect="dark" content="作废" placement="top">
<el-button type="danger" circle size="small" icon="Delete" @click="deleteHandle"></el-button>
</el-tooltip> -->
</div>
</el-form-item>
</el-form>
<div class="table-box">
<CustomVxeTable :table-data="labPatList" :loading="loading" :columns="tableColumns"
@current-change="handleRowClick" size="small"
@current-change="handleRowClick" size="small" keyField='applyid'
:scrollYConfig="{ enabled: true, rSize: 30, height: '100%', }" :row-style="rowStyle"
:cell-style="cellStyle" class="mytable-style" ref="tableRef">
<template #sqys="{ row }">
{{ row.sqys }}
</template>
<template #zt="{ row }">
{{ formatDictzt(row.zt) }}
<template #status="{ row }">
{{ formatDict(row.status, 'ZT') }}
</template>
</CustomVxeTable>
</div>
@ -104,18 +110,17 @@
<script setup>
import Info from './components/info.vue'
import { getDictData, formatDict, dictData } from '@/hooks'
import { getXmItemInfo, saveReqInfo, queryRegRequestInfo, queryReqDetail } from '@/api/liswork/order'
import { getXmItemInfo, saveReqInfo, queryRegRequestInfo, queryReqDetail, reqPrint, cancelReq } from '@/api/liswork/order'
import dayjs from 'dayjs'
import { ElMessage } from 'element-plus'
import { ElMessage, ElMessageBox } from 'element-plus'
import { getFirstLetter } from '@/utils/pinyin';
import { listregdict } from "@/api/regional/dict/regdict.ts";
const { proxy } = getCurrentInstance();
const { lis_req_type } = proxy.useDict("lis_req_type");
const labpat = ref({
zt: '1'
})
import { checkPrintService } from '@/utils/printHelper.ts';
const checkboxs = ref([])
const { proxy } = getCurrentInstance();
const labpat = ref({})
const saveLoading = ref(false)
const searchKey = ref('')
const loading = ref(false)
const tableRef = useTemplateRef('tableRef')
@ -123,19 +128,22 @@ const labPatList = ref([])
const xmdlList = ref([])
const activeName = ref('')
const today = ref(dayjs().format('YYYY-MM-DD'))
const searchForm = ref({
brxm: '',
zt: '',
status: '',
days: 0,
begdate: dayjs().format('YYYY-MM-DD'),
begdate: '',
enddate: '',
})
const tableColumns = ref([
{ field: 'brxm', title: '姓名', width: 40, align: 'center', resizable: true, },
{ field: 'zt', title: '状态', width: 40, align: 'center', slotName: 'zt', resizable: true, },
{ field: 'sqsj', title: '登记时间', width: 80, align: 'center', resizable: true },
{ field: 'sqys', title: '登记人', width: 80, align: 'center', slotName: 'sqys', resizable: true },
{ field: 'jymd', title: '项目', align: 'center', resizable: true },
{ field: 'patName', title: '姓名', width: 80, align: 'center', resizable: true, },
{ field: 'status', title: '状态', width: 80, align: 'center', slotName: 'status', resizable: true, },
{ field: 'orderTime', title: '登记时间', width: 80, align: 'center', resizable: true },
{ field: 'userName', title: '登记人', width: 80, align: 'center', resizable: true },
{ field: 'reqDetailName', title: '项目', align: 'center', resizable: true },
])
const rowStyle = ({ row }) => {
@ -144,51 +152,117 @@ const rowStyle = ({ row }) => {
const cellStyle = ({ row, column }) => {
}
const rowInfo = ref({})
const handleRowClick = (row) => {
queryReqDetail({ applyId: row.applyId }).then(res => {
labpat.value = res.data.labReqmain
labpat.value.zt = labpat.value.zt?.trim()
sqXmList.value = res.data.reqInputLisWorkVOList
checkboxs.value = res.data.reqInputLisWorkVOList.map(item => item.sfxmdh)
rowInfo.value = row
queryReqDetail({ applyId: row.applyid }).then(res => {
labpat.value = res.data.regApply
sqXmList.value = res.data.regApplyDetailList.map(item => ({
itemcode: item.orderItemCode,
itemname: item.orderItemName,
itemclass_yblx: item.sampleTypeName,
dj: item.amount,
applyid: item.applyid,
uid: item.uid,
classid: item.classid,
barcode: item.barcode,
}))
})
}
const changeDays = (val) => {
if (val == 3) {
searchForm.value.begdate = dayjs().subtract(3, 'day').format('YYYY-MM-DD') + ' 00:00:00'
searchForm.value.enddate = dayjs().format('YYYY-MM-DD') + ' 23:59:59'
} else if (val == 7) {
searchForm.value.begdate = dayjs().subtract(7, 'day').format('YYYY-MM-DD') + ' 00:00:00'
searchForm.value.enddate = dayjs().format('YYYY-MM-DD') + ' 23:59:59'
} else {
searchForm.value.begdate = dayjs(today.value).format('YYYY-MM-DD') + ' 00:00:00'
searchForm.value.enddate = dayjs(searchForm.value.begdate).format('YYYY-MM-DD') + ' 23:59:59'
}
handleQuery()
}
const dateHandle = (val) => {
searchForm.value.begdate = dayjs(val).format('YYYY-MM-DD') + ' 00:00:00'
searchForm.value.enddate = dayjs(searchForm.value.begdate).format('YYYY-MM-DD') + ' 23:59:59'
handleQuery()
}
const handleQuery = () => {
searchForm.value.begdate = dayjs(searchForm.value.begdate).format('YYYY-MM-DD') + ' 00:00:00'
searchForm.value.enddate = dayjs(searchForm.value.begdate).format('YYYY-MM-DD') + ' 23:59:59'
rowInfo.value = {}
queryRegRequestInfo(searchForm.value).then(res => {
labPatList.value = res.data
if (!res.data.length) {
labpat.value = {
zt: '1'
}
} else {
handleRowClick(res.data[0])
}
})
}
const saveHandle = () => {
if (!labpat.value.brdh) return ElMessage.warning('病人代号不能为空!')
if (!labpat.value.yblx) return ElMessage.warning('样本类型不能为空!')
if (!labpat.value.patId) return ElMessage.warning('病人代号不能为空!')
if (!labpat.value.patName) return ElMessage.warning('病人姓名不能为空!')
if (!labpat.value.patSex) return ElMessage.warning('病人性别不能为空!')
if (!labpat.value.patAge && !labpat.value.ageUnit) return ElMessage.warning('病人年龄不能为空!')
if (!sqXmList.value.length) return ElMessage.warning('请选择项目!')
labpat.value.status = labpat.value.status ? labpat.value.status : ''
const data = {
labReqmain: labpat.value,
reqInputLisWorkVOList: sqXmList.value
regApply: labpat.value,
regApplyDetailList: sqXmList.value.map(item => ({
orderItemCode: item.itemcode,
orderItemName: item.itemname,
sampleTypeCode: item.itemclass_yblx,
sampleTypeName: item.itemclass_yblx,
amount: item.dj,
applyid: labpat.value.applyid,
uid: item.uid
}))
}
saveLoading.value = true
saveReqInfo(data).then(res => {
handleQuery()
if (res.code == 0) {
ElMessage.success('保存成功!')
labpat.value = {}
sqXmList.value = []
handleQuery()
}
}).finally(() => {
saveLoading.value = false
})
}
const addHandle = () => {
labpat.value = {
zt: '1'
}
labpat.value = {}
sqXmList.value = []
}
const deleteHandle = () => {
if (!rowInfo.value.applyid) return ElMessage.warning('请选择要作废的申请单!')
ElMessageBox.confirm('确定要作废此申请单吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
cancelReq({ applyId: rowInfo.value.applyid }).then(res => {
if (res.code == 0) {
ElMessage.success(res.msg)
handleQuery()
}
})
}).catch(() => { })
}
const printHandle = () => {
if (!labpat.value.applyid) return ElMessage.warning('请选择要打印的申请单!')
checkPrintService().then((isConnected) => {
if (!isConnected) return
reqPrint({ applyId: labpat.value.applyid }).then(res => {
if (res.code == 0) {
ElMessage.success('正在打印中...')
}
})
})
}
@ -198,7 +272,7 @@ const xmColumns = ref([
{ field: 'itemname', title: '简称', align: 'center', width: 250, resizable: true },
{ field: 'dj', title: '单价', align: 'center', resizable: true },
{ field: 'spec', title: '规格', align: 'center', resizable: true },
{ field: 'yblx', title: '样本', align: 'center', resizable: true },
{ field: 'itemclass_yblx', title: '样本', align: 'center', resizable: true },
])
@ -241,13 +315,13 @@ const processTableData = (data) => {
const sqXmList = ref([])
const sqXmColumns = ref([
{ field: 'classid', title: '类别', align: 'center', slotName: 'classid', resizable: true },
{ field: 'classid', title: '类别', align: 'center', width: 100, slotName: 'classid', resizable: true },
{ field: 'itemcode', title: '代号', align: 'center', resizable: true },
{ field: 'itemname', title: '简称', align: 'center', width: 150, resizable: true },
{ field: 'sqh', title: '申请号', align: 'center', width: 150, resizable: true },
{ field: 'barcode', title: '条码号', align: 'center', width: 150, resizable: true },
{ field: 'dj', title: '单价', align: 'center', resizable: true },
{ field: 'spec', title: '规格', align: 'center', resizable: true },
{ field: 'yblx', title: '样本', align: 'center', resizable: true },
{ field: 'itemclass_yblx', title: '样本', align: 'center', resizable: true },
{ field: 'zt', title: '状态', align: 'center', resizable: true, slotName: 'zt' },
])
@ -258,17 +332,12 @@ const delItem = (row) => {
}
}
const handleChecksChange = (val) => {
console.log('val==>', val);
sqXmList.value = []
val.forEach(item => {
const existingItem = processedTableData.value.find((row) => row.sfxmdh == item)
if (existingItem) {
sqXmList.value.push(existingItem)
}
})
}
const dbRowclick = ({ row }) => {
const index = sqXmList.value.findIndex(item => item.itemcode == row.itemcode)
if (index > -1) {
ElMessage.warning('已存在该项目')
return
}
sqXmList.value.push(row)
}
@ -280,15 +349,10 @@ const getXmList = () => {
}
const formatDictzt = (value) => {
const item = lis_req_type.value.find(i => i.value === value.trim());
return item ? item.label : value;
}
onMounted(() => {
changeDays(0)
getXmList()
getDictData('PT', 'SX', 'AU', 'BT', 'DP', 'SRD', 'ZJLX')
getDictData('PT', 'SX', 'AU', 'BT', 'DP', 'ZT', 'ZJLX')
listregdict({ dictType: 'CLASS' }).then(response => {
xmdlList.value = response.rows;
activeName.value = xmdlList.value.length > 0 ? xmdlList.value[0].dictCode : '';

View File

@ -1,16 +1,17 @@
<script setup>
import { computed, reactive, ref, onMounted, nextTick } from "vue";
import { getToken } from "@/utils/auth";
import { queryComDictListService, addComDictService, updateComDictService, delComDictService } from "@/api/liswork/dict/ComDict";
import { listregdict, addregdict, delregdict, getregdict, updateregdict } from "@/api/regional/dict/regdict.ts";
import { getComDicts } from "@/api/liswork/dict/ComDict";
const { proxy } = getCurrentInstance();
const { sys_normal_disable } = proxy.useDict("sys_normal_disable");
const data = reactive({
form: {},
queryParams: {
pageNum: 1,
pageSize: 10,
pageSize: 9999,
dictName: undefined,
dictType: '00',
dictCode: undefined,
@ -22,7 +23,6 @@ const data = reactive({
dictType: [{ required: true, message: "字典类型不能为空", trigger: "blur" }]
},
});
const dictCode = ref('')
const { queryParams, form, rules } = toRefs(data);
const single = ref(true);
const multiple = ref(true);
@ -73,13 +73,13 @@ const filterNode = (value, data) => {
}
const nodeHandle = (data) => {
dictCode.value = data.dictCode
queryParams.value.dictType = data.dictCode
getList()
}
function resetData(dictType) {
queryParams.value = {
pageNum: 1,
pageSize: 15,
pageSize: 9999,
dictName: undefined,
dictType: dictType,
dictCode: undefined,
@ -89,8 +89,8 @@ function resetData(dictType) {
function getTypeList() {
getComDicts({ dict_type: 'DTYPE' }).then(response => {
typeList.value = response.data;
dictCode.value = response.data[0].dictCode
resetData()
queryParams.value.dictType = response.data[0].dictCode
treeRef.value.setCurrentKey(response.data[0].dictCode)
getList()
});
}
@ -100,11 +100,10 @@ function getTypeList() {
/** 查询字典明细列表 */
function getList() {
loading.value = true;
getComDicts({ dict_type: dictCode.value }).then(response => {
typeDetail.value = response.data;
listregdict(queryParams.value).then(response => {
typeDetail.value = response.rows;
loading.value = false;
});
//resetData()
}
//查询
@ -119,7 +118,9 @@ function reset() {
dictType: '',
dictName: '',
dictCode: '',
bz: ''
dictSort: 1,
status: "0",
remark: undefined
};
proxy.resetForm("dictRef");
}
@ -133,12 +134,12 @@ function resetQuery() {
//新增
function handleAdd() {
if (!dictCode.value) {
if (!queryParams.value.dictType) {
proxy.$modal.msgWarning("请先选择字典大类");
return;
}
reset();
form.value.dictType = dictCode.value;
form.value.dictType = queryParams.value.dictType;
open.value = true;
title.value = '新增字典';
}
@ -153,7 +154,7 @@ function handleUpdate(row) {
//删除
function handleDelete(row) {
proxy.$modal.confirm('是否确认删除字典名称为"' + row.dictName + '"的数据项?').then(function () {
return delComDictService(row);
return delregdict(row.dictId);
}).then(() => {
getList();
proxy.$modal.msgSuccess("删除成功");
@ -199,37 +200,27 @@ function handleSelectionChange(selection) {
single.value = selection.length != 1;
}
//查询字典大类
function handleQueryDetail() {
queryParams.value.dictName = dictTypemc.value
getTypeList()
resetData()
}
function submitForm() {
proxy.$refs["dictRef"].validate(valid => {
if (valid) {
if (form.value.dictType != undefined && form.value.dictType != '') {
updateComDictService(form.value).then(response => {
if (response.code == 0) {
proxy.$modal.msgSuccess("修改成功");
open.value = false;
getList();
}
})
if (form.value.dictId != undefined) {
updateregdict(form.value).then(response => {
proxy.$modal.msgSuccess("修改成功");
open.value = false;
getList();
});
} else {
form.value.dictType = queryParams.value.dictType;
form.value.yljg = 1;
addComDictService(form.value).then(response => {
if (response.code == 0) {
proxy.$modal.msgSuccess("新增成功");
open.value = false;
getList();
}
})
addregdict(form.value).then(response => {
proxy.$modal.msgSuccess("新增成功");
open.value = false;
getList();
});
}
}
});
}
function cancel() {
@ -257,7 +248,7 @@ onMounted(() => {
<div class="head-container">
<div class="card-content">
<el-tree ref="treeRef" class="filter-tree" :data="typeList" :props="defaultProps" default-expand-all
:filter-node-method="filterNode" @node-click="nodeHandle" highlight-current />
node-key="dictCode" :filter-node-method="filterNode" @node-click="nodeHandle" highlight-current />
</div>
</div>
</el-col>
@ -302,7 +293,8 @@ onMounted(() => {
</el-col>
</el-row>
<!-- 表格区域-->
<el-table v-loading="loading" :data="typeDetail" @selection-change="handleSelectionChange" height="65vh">
<el-table v-loading="loading" :data="typeDetail" @selection-change="handleSelectionChange"
height="calc(100vh - 250px)">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label='字典类型' align="center" prop="dictType" :show-overflow-tooltip="true" />
<el-table-column label="明细代号" align="center" prop="dictCode" />
@ -336,8 +328,17 @@ onMounted(() => {
<el-form-item label="字典名称" prop="dictName">
<el-input v-model="form.dictName" placeholder="请输入字典名称" />
</el-form-item>
<el-form-item label="备注" prop="bz">
<el-input v-model="form.bz" placeholder="请输入内容"></el-input>
<el-form-item label="顺序" prop="dictSort">
<el-input-number v-model="form.dictSort" controls-position="right" :min="0" />
</el-form-item>
<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" :value="dict.value">{{ dict.label
}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
</el-form-item>
</el-form>
<template #footer>

View File

@ -18,11 +18,13 @@
<!-- 工号登录 Tab -->
<el-tab-pane label="账号密码登录" name="first">
<el-form-item label="医疗机构:" prop="loginYLJG" class="custom-select">
<el-select v-model="loginForm.loginParam.loginYLJG" placeholder="请选择医疗机构" style="width: 100%">
<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.toString()"></el-option>
</el-select>
</el-form-item>
@ -75,7 +77,7 @@
<el-tab-pane label="扫码登录" name="second">
<div class="tab-placeholder">
<el-icon class="placeholder-icon">
<Sms />
<!-- <Sms /> -->
</el-icon>
<p>正在加载二维码...</p>
<el-button type="success" icon="wechat" class="wechat-login-btn">刷新二维码</el-button>
@ -85,7 +87,7 @@
<el-tab-pane label="UKEY登录" name="third">
<div class="tab-placeholder">
<el-icon class="placeholder-icon">
<Wechat />
<!-- <Wechat /> -->
</el-icon>
<p>UKEY登录功能开发中...</p>
</div>
@ -129,9 +131,9 @@ const loginForm = ref({
rememberMe: false,
code: "",
uuid: "",
loginParam: { loginYLJG: "", localid: "" }
loginParam: { loginYLJG: undefined, localid: undefined, loginYLJGName: undefined }
});
const selectOptions = ref([{ id: '1', name: '总院' }]);
const selectOptions = ref([]);
const loginRules = ref({ // 修复:改为ref响应式,方便动态修改
username: [{ required: true, trigger: "blur", message: "请输入您的账号" }],
// password: [{ required: true, trigger: "blur", message: "请输入您的密码" }],
@ -155,12 +157,19 @@ watch(
{ immediate: true, deep: false }
);
const handleChange = (value) => {
const item = selectOptions.value.find(item => item.id === value);
loginForm.value.loginParam.loginYLJG = value;
loginForm.value.loginParam.loginYLJGName = item?.name || '';
}
// 登录方法(修复proxy.$refs问题)
const handleLogin = async () => {
loginForm.value.loginParam.loginYLJG
loading.value = true;
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 });
// 调用action的登录方法
userStore.login(loginForm.value).then(() => {
const query = route.query;
@ -204,14 +213,16 @@ const getCode = () => {
const getCookie = () => {
const cookieUsername = Cookies.get("czlis_username");
const cookieloginYLJG = Cookies.get("czlis_loginYLJG");
//console.log('cookieloginYLJG', cookieloginYLJG);
if (cookieUsername !== undefined && cookieUsername !== null && cookieUsername !== "") {
loginForm.value.username = cookieUsername;
}
if (cookieloginYLJG !== undefined && cookieloginYLJG !== null && cookieloginYLJG !== "") {
loginForm.value.loginParam.loginYLJG = cookieloginYLJG;
}
//console.log('loginForm', loginForm);
const cookieloginYLJGName = Cookies.get("czlis_loginYLJGName");
if (cookieloginYLJGName !== undefined && cookieloginYLJGName !== null && cookieloginYLJGName !== "") {
loginForm.value.loginParam.loginYLJGName = cookieloginYLJGName;
}
};
// 获取本地配置
@ -220,21 +231,17 @@ const Localconfig = (localid) => {
if (res) {
const { localconfig, hosplist, oem: oemData } = res;
mbStore.setDefaultConfig(localconfig)
// 修复:赋值oem数据,显示动态标题
if (oemData) oem.value = oemData;
// console.log('oemData', oemData);
// console.log('oem', oem.value);
// 修复:判重后更新下拉选项,避免递归
if (JSON.stringify(selectOptions.value) !== JSON.stringify(hosplist)) {
selectOptions.value = hosplist || [{ id: '1', name: '总院' }];
selectOptions.value = hosplist || [];
// 判重后赋值,避免重复修改触发更新
if (!selectOptions.value.some(item => item.id === loginForm.value.hospid)) {
loginForm.value.loginParam.loginYLJG = selectOptions.value[0]?.id || '1';
loginForm.value.loginParam.loginYLJG = selectOptions.value[0]?.id || 1;
loginForm.value.loginParam.loginYLJGName = selectOptions.value[0]?.name || '';
}
getCookie();
}
}
}).catch(err => {
console.error("获取本地配置失败:", err);
@ -256,7 +263,7 @@ const refreshFingerprint = async () => {
// Tab切换事件(移除activeName手动赋值,避免递归)
const handleClick = (tab) => {
console.log('当前Tab:', tab.name);
// console.log('当前Tab:', tab.name);
// 仅在切回账号密码登录时刷新验证码
if (tab.name === 'first' && captchaEnabled.value) {
getCode();

View File

@ -0,0 +1,238 @@
/**
* @file index.vue 科室列表
* @author: w
* @since: 2026-03-12
*/
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch">
<el-form-item label="科室编码" prop="hospitalCode">
<el-input v-model="queryParams.hospitalCode" placeholder="请输入科室编码" clearable style="width: 200px"
@keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="科室名称" prop="hospitalName">
<el-input v-model="queryParams.hospitalName" placeholder="请输入科室名称" clearable style="width: 200px"
@keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="有效状态" clearable style="width: 200px">
<el-option v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-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" plain icon="Plus" @click="handleAdd">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate">修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete">删除</el-button>
</el-col>
<!-- <el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport">导出</el-button>
</el-col> -->
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="postList" @selection-change="handleSelectionChange"
height="calc(100vh - 250px)">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="序号" align="center" prop="hospitalId" />
<el-table-column label="科室编码" align="center" prop="hospitalCode" />
<el-table-column label="科室名称" align="center" prop="hospitalName" />
<el-table-column label="状态" align="center" prop="status">
<template #default="scope">
<dict-tag :options="sys_normal_disable" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template #default="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="180" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)">修改</el-button>
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize" @pagination="getList" />
<!-- 添加或修改科室对话框 -->
<el-dialog :title="title" v-model="open" width="35vw" append-to-body>
<el-form ref="postRef" :model="form" :rules="rules" label-width="150px">
<el-form-item label="科室名称" prop="hospitalName">
<el-input v-model="form.hospitalName" placeholder="请输入科室名称" />
</el-form-item>
<el-form-item label="科室编码" prop="hospitalCode">
<el-input v-model="form.hospitalCode" placeholder="请输入编码名称" />
</el-form-item>
<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" :value="dict.value">{{ dict.label
}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup name="hospital">
import { listhospital, addhospital, delhospital, gethospital, updatehospital } from "@/api/regional/dict/hospital.ts";
import { getComDicts } from "@/api/liswork/dict/ComDict";
import { fa } from "element-plus/es/locales.mjs";
const { proxy } = getCurrentInstance();
const { sys_normal_disable } = proxy.useDict("sys_normal_disable");
const postList = ref([]);
const open = ref(false);
const loading = ref(false);
const showSearch = ref(true);
const ids = ref([]);
const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const title = ref("");
const yljbList = ref([]);
const data = reactive({
form: {},
queryParams: {
pageNum: 1,
pageSize: 10,
hospitalCode: undefined,
hospitalName: undefined,
status: undefined
},
rules: {
hospitalName: [{ required: true, message: "科室名称不能为空", trigger: "blur" }],
hospitalCode: [{ required: true, message: "科室编码不能为空", trigger: "blur" }],
}
});
const { queryParams, form, rules } = toRefs(data);
/** 查询科室列表 */
function getList() {
// loading.value = true;
// listhospital(queryParams.value).then(response => {
// postList.value = response.rows;
// total.value = response.total;
// loading.value = false;
// });
}
/** 取消按钮 */
function cancel() {
open.value = false;
reset();
}
/** 表单重置 */
function reset() {
form.value = {
hospitalId: undefined,
hospitalCode: undefined,
hospitalName: undefined,
hospitalUserinfo: undefined,
status: "0",
remark: undefined
};
proxy.resetForm("postRef");
}
/** 搜索按钮操作 */
function handleQuery() {
queryParams.value.pageNum = 1;
getList();
}
/** 重置按钮操作 */
function resetQuery() {
proxy.resetForm("queryRef");
handleQuery();
}
/** 多选框选中数据 */
function handleSelectionChange(selection) {
ids.value = selection.map(item => item.hospitalId);
single.value = selection.length != 1;
multiple.value = !selection.length;
}
/** 新增按钮操作 */
function handleAdd() {
reset();
open.value = true;
title.value = "添加科室";
}
/** 修改按钮操作 */
function handleUpdate(row) {
reset();
const hospitalId = row.hospitalId || ids.value;
gethospital(hospitalId).then(response => {
form.value = response.data;
open.value = true;
title.value = "修改科室";
});
}
/** 提交按钮 */
function submitForm() {
return
proxy.$refs["postRef"].validate(valid => {
if (valid) {
if (form.value.hospitalId != undefined) {
updatehospital(form.value).then(response => {
proxy.$modal.msgSuccess("修改成功");
open.value = false;
getList();
});
} else {
addhospital(form.value).then(response => {
proxy.$modal.msgSuccess("新增成功");
open.value = false;
getList();
});
}
}
});
}
/** 删除按钮操作 */
function handleDelete(row) {
const hospitalIds = row.hospitalId || ids.value;
proxy.$modal.confirm('是否确认删除科室编号为"' + hospitalIds + '"的数据项?').then(function () {
return delhospital(hospitalIds);
}).then(() => {
getList();
proxy.$modal.msgSuccess("删除成功");
}).catch(() => { });
}
/** 导出按钮操作 */
function handleExport() {
proxy.download("transitdict/hospital/export", {
...queryParams.value
}, `hospital_${new Date().getTime()}.xlsx`);
}
getList();
onMounted(() => {
getComDicts({ dict_type: 'HTYPE' }).then(response => {
yljbList.value = response.data;
});
})
</script>

View File

@ -0,0 +1,238 @@
/**
* @file index.vue 医生列表
* @author: w
* @since: 2026-03-12
*/
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch">
<el-form-item label="医生编码" prop="hospitalCode">
<el-input v-model="queryParams.hospitalCode" placeholder="请输入医生编码" clearable style="width: 200px"
@keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="医生名称" prop="hospitalName">
<el-input v-model="queryParams.hospitalName" placeholder="请输入医生名称" clearable style="width: 200px"
@keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="有效状态" clearable style="width: 200px">
<el-option v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-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" plain icon="Plus" @click="handleAdd">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate">修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete">删除</el-button>
</el-col>
<!-- <el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport">导出</el-button>
</el-col> -->
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="postList" @selection-change="handleSelectionChange"
height="calc(100vh - 250px)">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="序号" align="center" prop="hospitalId" />
<el-table-column label="医生编码" align="center" prop="hospitalCode" />
<el-table-column label="医生名称" align="center" prop="hospitalName" />
<el-table-column label="状态" align="center" prop="status">
<template #default="scope">
<dict-tag :options="sys_normal_disable" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template #default="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="180" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)">修改</el-button>
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize" @pagination="getList" />
<!-- 添加或修改医生对话框 -->
<el-dialog :title="title" v-model="open" width="35vw" append-to-body>
<el-form ref="postRef" :model="form" :rules="rules" label-width="150px">
<el-form-item label="医生名称" prop="hospitalName">
<el-input v-model="form.hospitalName" placeholder="请输入医生名称" />
</el-form-item>
<el-form-item label="医生编码" prop="hospitalCode">
<el-input v-model="form.hospitalCode" placeholder="请输入编码名称" />
</el-form-item>
<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" :value="dict.value">{{ dict.label
}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup name="hospital">
import { listhospital, addhospital, delhospital, gethospital, updatehospital } from "@/api/regional/dict/hospital.ts";
import { getComDicts } from "@/api/liswork/dict/ComDict";
import { fa } from "element-plus/es/locales.mjs";
const { proxy } = getCurrentInstance();
const { sys_normal_disable } = proxy.useDict("sys_normal_disable");
const postList = ref([]);
const open = ref(false);
const loading = ref(false);
const showSearch = ref(true);
const ids = ref([]);
const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const title = ref("");
const yljbList = ref([]);
const data = reactive({
form: {},
queryParams: {
pageNum: 1,
pageSize: 10,
hospitalCode: undefined,
hospitalName: undefined,
status: undefined
},
rules: {
hospitalName: [{ required: true, message: "医生名称不能为空", trigger: "blur" }],
hospitalCode: [{ required: true, message: "医生编码不能为空", trigger: "blur" }],
}
});
const { queryParams, form, rules } = toRefs(data);
/** 查询医生列表 */
function getList() {
// loading.value = true;
// listhospital(queryParams.value).then(response => {
// postList.value = response.rows;
// total.value = response.total;
// loading.value = false;
// });
}
/** 取消按钮 */
function cancel() {
open.value = false;
reset();
}
/** 表单重置 */
function reset() {
form.value = {
hospitalId: undefined,
hospitalCode: undefined,
hospitalName: undefined,
hospitalUserinfo: undefined,
status: "0",
remark: undefined
};
proxy.resetForm("postRef");
}
/** 搜索按钮操作 */
function handleQuery() {
queryParams.value.pageNum = 1;
getList();
}
/** 重置按钮操作 */
function resetQuery() {
proxy.resetForm("queryRef");
handleQuery();
}
/** 多选框选中数据 */
function handleSelectionChange(selection) {
ids.value = selection.map(item => item.hospitalId);
single.value = selection.length != 1;
multiple.value = !selection.length;
}
/** 新增按钮操作 */
function handleAdd() {
reset();
open.value = true;
title.value = "添加医生";
}
/** 修改按钮操作 */
function handleUpdate(row) {
reset();
const hospitalId = row.hospitalId || ids.value;
gethospital(hospitalId).then(response => {
form.value = response.data;
open.value = true;
title.value = "修改医生";
});
}
/** 提交按钮 */
function submitForm() {
return
proxy.$refs["postRef"].validate(valid => {
if (valid) {
if (form.value.hospitalId != undefined) {
updatehospital(form.value).then(response => {
proxy.$modal.msgSuccess("修改成功");
open.value = false;
getList();
});
} else {
addhospital(form.value).then(response => {
proxy.$modal.msgSuccess("新增成功");
open.value = false;
getList();
});
}
}
});
}
/** 删除按钮操作 */
function handleDelete(row) {
const hospitalIds = row.hospitalId || ids.value;
proxy.$modal.confirm('是否确认删除医生编号为"' + hospitalIds + '"的数据项?').then(function () {
return delhospital(hospitalIds);
}).then(() => {
getList();
proxy.$modal.msgSuccess("删除成功");
}).catch(() => { });
}
/** 导出按钮操作 */
function handleExport() {
proxy.download("transitdict/hospital/export", {
...queryParams.value
}, `hospital_${new Date().getTime()}.xlsx`);
}
getList();
onMounted(() => {
getComDicts({ dict_type: 'HTYPE' }).then(response => {
yljbList.value = response.data;
});
})
</script>

View File

@ -42,7 +42,7 @@
<el-table-column label="序号" align="center" prop="hospitalId" />
<el-table-column label="医疗机构编码" align="center" prop="hospitalCode" />
<el-table-column label="医疗机构名称" align="center" prop="hospitalName" />
<el-table-column label="接口平台密钥" align="center" prop="hospitalUserinfo" />
<el-table-column label="级别" align="center" prop="hospital_type" />
<el-table-column label="状态" align="center" prop="status">
<template #default="scope">
<dict-tag :options="sys_normal_disable" :value="scope.row.status" />
@ -65,8 +65,8 @@
v-model:limit="queryParams.pageSize" @pagination="getList" />
<!-- 添加或修改医疗机构对话框 -->
<el-dialog :title="title" v-model="open" width="500px" append-to-body>
<el-form ref="postRef" :model="form" :rules="rules" label-width="80px">
<el-dialog :title="title" v-model="open" width="35vw" append-to-body>
<el-form ref="postRef" :model="form" :rules="rules" label-width="150px">
<el-form-item label="医疗机构名称" prop="hospitalName">
<el-input v-model="form.hospitalName" placeholder="请输入医疗机构名称" />
</el-form-item>
@ -76,6 +76,11 @@
<el-form-item label="医疗机构密钥" prop="hospitalUserinfo">
<el-input v-model="form.hospitalUserinfo" placeholder="请输入编码密钥" />
</el-form-item>
<el-form-item label="医疗机构级别" prop="hospital_type">
<el-select v-model="form.hospital_type" placeholder="请选择医疗机构级别" clearable style="width: 100%">
<el-option v-for="item in yljbList" :key="item.dictCode" :label="item.dictName" :value="item.dictCode" />
</el-select>
</el-form-item>
<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" :value="dict.value">{{ dict.label
@ -98,7 +103,7 @@
<script setup name="hospital">
import { listhospital, addhospital, delhospital, gethospital, updatehospital } from "@/api/regional/dict/hospital.ts";
import { getComDicts } from "@/api/liswork/dict/ComDict";
const { proxy } = getCurrentInstance();
const { sys_normal_disable } = proxy.useDict("sys_normal_disable");
@ -111,7 +116,7 @@ const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const title = ref("");
const yljbList = ref([]);
const data = reactive({
form: {},
queryParams: {
@ -225,4 +230,11 @@ function handleExport() {
}
getList();
onMounted(() => {
getComDicts({ dict_type: 'HTYPE' }).then(response => {
yljbList.value = response.data;
});
})
</script>

View File

@ -1,65 +1,70 @@
<template>
<div class="app-container">
<el-row :gutter="20">
<el-col :span="6" :xs="24">
<el-card class="box-card">
<template v-slot:header>
<div class="clearfix">
<span>个人信息</span>
</div>
</template>
<div>
<div class="text-center">
<userAvatar />
</div>
<ul class="list-group list-group-striped">
<li class="list-group-item">
<svg-icon icon-class="user" />用户名称
<div class="pull-right">{{ state.user.userName }}</div>
</li>
<li class="list-group-item">
<svg-icon icon-class="phone" />手机号码
<div class="pull-right">{{ state.user.phonenumber }}</div>
</li>
<li class="list-group-item">
<svg-icon icon-class="email" />用户邮箱
<div class="pull-right">{{ state.user.email }}</div>
</li>
<li class="list-group-item">
<svg-icon icon-class="tree" />所属部门
<div class="pull-right" v-if="state.user.dept">{{ state.user.dept.deptName }} / {{ state.postGroup }}</div>
</li>
<li class="list-group-item">
<svg-icon icon-class="peoples" />所属角色
<div class="pull-right">{{ state.roleGroup }}</div>
</li>
<li class="list-group-item">
<svg-icon icon-class="date" />创建日期
<div class="pull-right">{{ state.user.createTime }}</div>
</li>
</ul>
</div>
</el-card>
</el-col>
<el-col :span="18" :xs="24">
<el-card>
<template v-slot:header>
<div class="clearfix">
<span>基本资料</span>
</div>
</template>
<el-tabs v-model="selectedTab">
<el-tab-pane label="基本资料" name="userinfo">
<userInfo :user="state.user" />
</el-tab-pane>
<el-tab-pane label="修改密码" name="resetPwd">
<resetPwd />
</el-tab-pane>
</el-tabs>
</el-card>
</el-col>
</el-row>
</div>
<div class="app-container">
<el-row :gutter="20">
<el-col :span="6" :xs="24">
<el-card class="box-card">
<template v-slot:header>
<div class="clearfix">
<span>个人信息</span>
</div>
</template>
<div>
<div class="text-center">
<userAvatar />
</div>
<ul class="list-group list-group-striped">
<li class="list-group-item">
<svg-icon icon-class="user" />用户名称
<div class="pull-right">{{ state.user.userName }}</div>
</li>
<li class="list-group-item">
<svg-icon icon-class="phone" />手机号码
<div class="pull-right">{{ state.user.phonenumber }}</div>
</li>
<li class="list-group-item">
<svg-icon icon-class="email" />用户邮箱
<div class="pull-right">{{ state.user.email }}</div>
</li>
<li class="list-group-item">
<svg-icon icon-class="tree" />所属部门
<div class="pull-right" v-if="state.user.dept">{{ state.user.dept.deptName }} / {{ state.postGroup }}
</div>
</li>
<li class="list-group-item">
<svg-icon icon-class="peoples" />所属角色
<div class="pull-right">{{ state.roleGroup }}</div>
</li>
<li class="list-group-item">
<svg-icon icon-class="date" />创建日期
<div class="pull-right">{{ state.user.createTime }}</div>
</li>
<li class="list-group-item">
<svg-icon icon-class="system" />浏览器ID
<div class="pull-right">{{ mbStore.fingerprint }}</div>
</li>
</ul>
</div>
</el-card>
</el-col>
<el-col :span="18" :xs="24">
<el-card>
<template v-slot:header>
<div class="clearfix">
<span>基本资料</span>
</div>
</template>
<el-tabs v-model="selectedTab">
<el-tab-pane label="基本资料" name="userinfo">
<userInfo :user="state.user" />
</el-tab-pane>
<el-tab-pane label="修改密码" name="resetPwd">
<resetPwd />
</el-tab-pane>
</el-tabs>
</el-card>
</el-col>
</el-row>
</div>
</template>
<script setup lang="ts" name="Profile">
@ -68,7 +73,9 @@ import userInfo from "./userInfo.vue"
import resetPwd from "./resetPwd.vue"
import { getUserProfile } from "@/api/system/user"
import type { SysUser } from '@/types/api/system/user'
import { useCommonStore } from '@/store/modules/commonStore'
const mbStore = useCommonStore();
const route = useRoute()
const selectedTab = ref<string>("userinfo")