diff --git a/openhis-ui-vue3/favicon/site.webmanifest b/openhis-ui-vue3/favicon/site.webmanifest index e698b5ff..68994ad4 100644 --- a/openhis-ui-vue3/favicon/site.webmanifest +++ b/openhis-ui-vue3/favicon/site.webmanifest @@ -1,20 +1,19 @@ { - "name": "医院信息管理系统", - "short_name": "HIS", + "name": "My Awesome App", + "short_name": "AwesomeApp", "icons": [ { - "src": "/favicon/android-chrome-192x192.png", + "src": "/android-chrome-192x192.png", "sizes": "192x192", "type": "image/png" }, { - "src": "/favicon/android-chrome-512x512.png", + "src": "/android-chrome-512x512.png", "sizes": "512x512", "type": "image/png" } ], - "theme_color": "#1890ff", + "theme_color": "#ffffff", "background_color": "#ffffff", - "display": "standalone", - "description": "医院信息管理系统 - 提供全面的医疗信息化解决方案" + "display": "standalone" } \ No newline at end of file diff --git a/openhis-ui-vue3/index.html b/openhis-ui-vue3/index.html index 639db44a..003a4ea3 100644 --- a/openhis-ui-vue3/index.html +++ b/openhis-ui-vue3/index.html @@ -13,7 +13,7 @@ - + @@ -27,7 +27,7 @@ - + diff --git a/openhis-ui-vue3/src/action/nurseStation/temperatureSheet/datas.js b/openhis-ui-vue3/src/action/nurseStation/temperatureSheet/datas.js index f6149c33..0e41bfd5 100644 --- a/openhis-ui-vue3/src/action/nurseStation/temperatureSheet/datas.js +++ b/openhis-ui-vue3/src/action/nurseStation/temperatureSheet/datas.js @@ -11,7 +11,7 @@ export default { inDiagName: '急性上呼吸道感染', name: '于浩', officeName: '住院科室', - title: '', + title: '长春市朝阳区中医院', operaDays: null, outdate: null, sex: '女', diff --git a/openhis-ui-vue3/src/api/monitor/operlog.js b/openhis-ui-vue3/src/api/monitor/operlog.js index ebf948eb..a04bca84 100644 --- a/openhis-ui-vue3/src/api/monitor/operlog.js +++ b/openhis-ui-vue3/src/api/monitor/operlog.js @@ -24,12 +24,3 @@ export function cleanOperlog() { method: 'delete' }) } - -// 新增操作日志 -export function addLog(data) { - return request({ - url: '/monitor/operlog', - method: 'post', - data - }) -} diff --git a/openhis-ui-vue3/src/api/surgerymanage.js b/openhis-ui-vue3/src/api/surgerymanage.js index b29e9d76..9fff188c 100644 --- a/openhis-ui-vue3/src/api/surgerymanage.js +++ b/openhis-ui-vue3/src/api/surgerymanage.js @@ -78,16 +78,3 @@ export function updateSurgeryStatus(id, statusEnum) { params: { id, statusEnum } }) } - -/** - * 根据患者ID查询就诊列表 - * @param patientId 患者ID - * @returns {AxiosPromise} - */ -export function getEncounterListByPatientId(patientId) { - return request({ - url: '/clinical-manage/surgery/encounter-list', - method: 'get', - params: { patientId } - }) -} diff --git a/openhis-ui-vue3/src/api/system/lisConfig.js b/openhis-ui-vue3/src/api/system/lisConfig.js deleted file mode 100644 index 801a4e04..00000000 --- a/openhis-ui-vue3/src/api/system/lisConfig.js +++ /dev/null @@ -1,33 +0,0 @@ -import request from '@/utils/request' - -export function getLisConfigPage(query) { - return request({ - url: '/inspection/lisConfig/init-page', - method: 'get', - params: query - }) -} - -export function getLisConfigDetail(id) { - return request({ - url: '/inspection/lisConfig/info-detail', - method: 'get', - params: { id } - }) -} - -export function getLisConfigList(searchKey, type) { - return request({ - url: '/inspection/lisConfig/init-list', - method: 'get', - params: { searchKey, type } - }) -} - -export function saveLisConfig(data) { - return request({ - url: '/inspection/lisConfig/saveAll', - method: 'post', - data: data - }) -} diff --git a/openhis-ui-vue3/src/api/system/observation.js b/openhis-ui-vue3/src/api/system/observation.js deleted file mode 100644 index 7c1443b2..00000000 --- a/openhis-ui-vue3/src/api/system/observation.js +++ /dev/null @@ -1,48 +0,0 @@ -import request from '@/utils/request' - -export function getObservationInit() { - return request({ - url: '/inspection/observation/init', - method: 'get' - }) -} - -export function getObservationPage(query) { - return request({ - url: '/inspection/observation/information-page', - method: 'get', - params: query - }) -} - -export function getObservationOne(id) { - return request({ - url: '/inspection/observation/information-one', - method: 'get', - params: { id } - }) -} - -export function addObservation(data) { - return request({ - url: '/inspection/observation/information', - method: 'post', - data: data - }) -} - -export function updateObservation(data) { - return request({ - url: '/inspection/observation/information', - method: 'post', - data: data - }) -} - -export function deleteObservation(ids) { - return request({ - url: '/inspection/observation/information-status', - method: 'post', - data: { ids, type: '停用' } - }) -} diff --git a/openhis-ui-vue3/src/assets/icons/svg/patient.svg b/openhis-ui-vue3/src/assets/icons/svg/patient.svg index 0c57c683..283b9c42 100644 --- a/openhis-ui-vue3/src/assets/icons/svg/patient.svg +++ b/openhis-ui-vue3/src/assets/icons/svg/patient.svg @@ -1,4 +1,4 @@ - + diff --git a/openhis-ui-vue3/src/assets/icons/svg/redis-list.svg b/openhis-ui-vue3/src/assets/icons/svg/redis-list.svg index 0c257379..710cdf3b 100644 --- a/openhis-ui-vue3/src/assets/icons/svg/redis-list.svg +++ b/openhis-ui-vue3/src/assets/icons/svg/redis-list.svg @@ -1,4 +1,4 @@ \ No newline at end of file diff --git a/openhis-ui-vue3/src/components/Auto/printBills/exeOrderSheet.vue b/openhis-ui-vue3/src/components/Auto/printBills/exeOrderSheet.vue index d14db5a6..c5312101 100644 --- a/openhis-ui-vue3/src/components/Auto/printBills/exeOrderSheet.vue +++ b/openhis-ui-vue3/src/components/Auto/printBills/exeOrderSheet.vue @@ -87,13 +87,8 @@ \ No newline at end of file + diff --git a/openhis-ui-vue3/src/main.js b/openhis-ui-vue3/src/main.js index 4b846eee..bf9466cd 100644 --- a/openhis-ui-vue3/src/main.js +++ b/openhis-ui-vue3/src/main.js @@ -4,7 +4,6 @@ import Cookies from 'js-cookie'; // 导入 hiprint 并挂载到全局 window 对象 import {hiprint} from 'vue-plugin-hiprint'; - import ElementPlus, {ElDialog, ElMessage} from 'element-plus'; import zhCn from 'element-plus/es/locale/lang/zh-cn'; import 'element-plus/dist/index.css'; diff --git a/openhis-ui-vue3/src/router/index.js b/openhis-ui-vue3/src/router/index.js index dada00a9..c04ab127 100644 --- a/openhis-ui-vue3/src/router/index.js +++ b/openhis-ui-vue3/src/router/index.js @@ -1,123 +1,377 @@ -import {createWebHistory, createRouter} from 'vue-router' +import {createRouter, createWebHistory} from 'vue-router'; /* Layout */ -import Layout from '@/layout' +import Layout from '@/layout'; /** - * Note: 路由配置项 + * Note: 路由配置项说明 * - * hidden: true // 当设置 true 的时候该路由不会再侧边栏出现 如401,login等页面,或者如一些编辑页面/edit/1 - * alwaysShow: true // 当你一个路由下面的 children 声明的路由大于1个时,自动会变成嵌套的模式--如组件页面 - * // 只有一个时,会将那个子路由当做根路由显示在侧边栏--如引导页面 - * // 若你想不管路由下面的 children 声明的个数都显示你的根路由 - * // 你可以设置 alwaysShow: true,这样它就会忽略之前定义的规则,一直显示根路由 - * redirect: noRedirect // 当设置 noRedirect 的时候该路由在面包屑导航中不可被点击 - * name:'router-name' // 设定路由的名字,一定要填写不然使用时会出现各种问题 + * hidden: true // 当设置 true 时,该路由不会在侧边栏出现(如401、login等页面,或一些编辑页面/edit/1) + * alwaysShow: true // 当路由下的 children 声明的路由大于1个时,自动变为嵌套模式(如组件页面) + * // 只有一个时,会将子路由作为根路由显示在侧边栏(如引导页面) + * // 若想不管 children 个数都显示根路由,可设置 alwaysShow: true,忽略之前定义的规则 + * redirect: noRedirect // 当设置 noRedirect 时,该路由在面包屑导航中不可点击 + * name:'router-name' // 设定路由的名字,必须填写,否则使用时会出现问题 * query: '{"id": 1, "name": "ry"}' // 访问路由的默认传递参数 * roles: ['admin', 'common'] // 访问路由的角色权限 * permissions: ['a:a:a', 'b:b:b'] // 访问路由的菜单权限 - * meta : { - noCache: true // 如果设置为true,则不会被 缓存(默认 false) - title: 'title' // 设置该路由在侧边栏和面包屑中展示的名字 - icon: 'svg-name' // 设置该路由的图标,对应路径src/assets/icons/svg - breadcrumb: false // 如果设置为false,则不会在breadcrumb面包屑中显示 - activeMenu: '/system/user' // 当路由设置了该属性,则会高亮相对应的侧边栏。 - } + * meta: { + noCache: true // 如果设置为true,则不会被 缓存(默认 false) + title: 'title' // 设置该路由在侧边栏和面包屑中展示的名字 + icon: 'svg-name' // 设置该路由的图标,对应路径src/assets/icons/svg + breadcrumb: false // 如果设置为false,则不会在breadcrumb面包屑中显示 + activeMenu: '/system/user' // 当路由设置了该属性,则会高亮对应的侧边栏 + } */ -// 公共路由 +// 公共路由 - 所有用户均可访问的路由 export const constantRoutes = [ - { - path: '/redirect', - component: Layout, - hidden: true, - children: [ - { - path: '/redirect/:path(.*)', - component: () => import('@/views/redirect/index.vue') - } - ] - }, - { - path: '/login', - component: () => import('@/views/login'), - hidden: true - }, - { - path: '/register', - component: () => import('@/views/register'), - hidden: true - }, - { - path: '/401', - component: () => import('@/views/error/401'), - hidden: true - }, - { - path: '', - component: Layout, - redirect: '/index', - children: [ - { - path: '/index', - component: () => import('@/views/index'), - name: 'Index', - meta: {title: '首页', icon: 'dashboard', affix: true} - } - ] - }, - { - path: '/user', - component: Layout, - hidden: true, - redirect: 'noredirect', - children: [ - { - path: 'profile', - component: () => import('@/views/system/user/profile/index'), - name: 'Profile', - meta: {title: '个人中心', icon: 'user'} - } - ] - } -] + + // 重定向路由 + { + path: '/redirect', + component: Layout, + hidden: true, + children: [ + { + path: '/redirect/:path(.*)', + component: () => import('@/views/redirect/index.vue'), + }, + ], + }, + // 登录路由 + { + path: '/login', + component: () => import('@/views/login'), + hidden: true, + }, + // 注册路由 + { + path: '/register', + component: () => import('@/views/register'), + hidden: true, + }, + { + path: '/:pathMatch(.*)*', + component: () => import('@/views/error/404'), + hidden: true, + }, + { + path: '/401', + component: () => import('@/views/error/401'), + hidden: true, + }, + // 首页路由 + { + path: '', + component: Layout, + redirect: '/index', + children: [ + { + path: '/index', + component: () => import('@/views/index'), + name: 'Index', + meta: { title: '首页', icon: 'dashboard', affix: true }, + }, + ], + }, + { + path: '/user', + component: Layout, + hidden: true, + redirect: 'noredirect', + children: [ + { + path: 'profile', + component: () => import('@/views/system/user/profile/index'), + name: 'Profile', + meta: { title: '个人中心', icon: 'user' }, + }, + ], + }, + { + path: '/tpr', + component: () => import('@/views/inpatientNurse/tprsheet/index.vue'), + }, + // { + // path: '/patientmanagement', + // component: Layout, + // redirect: '/patientmanagement/patientmanagement', + // name: 'PatientManagement', + // meta: { title: '患者管理', icon: 'patient' }, + // children: [ + // { + // path: 'patientmanagement', + // component: () => import('@/views/patientmanagement/patientmanagement/index.vue'), + // name: 'PatientManagementList', + // meta: { title: '患者档案管理', icon: 'patient' }, + // }, + // { + // path: 'outpatienrecords', + // component: () => import('@/views/patientmanagement/outpatienrecords/index.vue'), + // name: 'OutpatientRecords', + // meta: { title: '门诊就诊记录', icon: 'record' }, + // }, + // ], + // }, +]; -// 动态路由,基于用户权限动态去加载 +// 动态路由 - 基于用户权限动态加载的路由 export const dynamicRoutes = [ - { - path: '/help-center', - component: Layout, - hidden: true, - children: [ - { - path: '', - component: () => import('@/views/helpcenter/index.vue'), - name: 'HelpCenter', - meta: {title: '帮助中心'}, - }, - ], - }, + // 基础管理路由 + // { + // path: '/basicmanage', + // component: Layout, + // redirect: '/basicmanage/invoice-management', + // name: 'BasicManage', + // meta: { title: '基础管理', icon: 'component' }, + // children: [ + // { + // path: 'invoice-management', + // component: () => import('@/views/basicmanage/InvoiceManagement/index.vue'), + // name: 'invoice-management', + // meta: { title: '发票管理' } + // } + // ] + // }, + // 兼容系统业务管理路径的发票管理路由 + // { + // path: '/system/ywgz', + // component: Layout, + // redirect: '/system/ywgz/InvoiceManagement', + // hidden: true, + // children: [ + // { + // path: 'InvoiceManagement', + // component: () => import('@/views/basicmanage/InvoiceManagement/index.vue'), + // name: 'SystemInvoiceManagement', + // meta: { title: '发票管理' } + // } + // ] + // }, + // 维护系统路由 + // { + // path: '/maintainSystem', + // component: Layout, + // redirect: '/maintainSystem/chargeConfig', + // name: 'MaintainSystem', + // meta: { title: '维护系统', icon: 'system' }, + // children: [ + // { + // path: '', + // redirect: 'chargeConfig', + // name: 'MaintainSystemIndex' // 添加名称以解决警告 + // }, + // { + // path: 'chargeConfig', // 收费配置路由 + // component: () => import('@/views/maintainSystem/chargeConfig/index.vue'), + // name: 'ChargeConfig', + // meta: { title: '挂号收费系统参数维护', icon: 'config', permissions: ['maintainSystem:chargeConfig:list'] } + // }, + // { + // path: 'Inspection', // 检验管理路由 + // component: () => import('@/views/maintainSystem/Inspection/index.vue'), + // name: 'Inspection', + // meta: { title: '检验管理', icon: 'inspection' }, + // children: [ + // { + // path: 'PackageManagement', // 套餐管理路由 + // component: () => import('@/views/maintainSystem/Inspection/PackageManagement.vue'), + // name: 'PackageManagement', + // meta: { title: '套餐管理' } + // } + // ] + // } + // ] + // }, + // 系统管理路由 + // { + // path: '/system', + // component: Layout, + // redirect: '/system/user', + // name: 'System', + // meta: { title: '系统管理', icon: 'system' }, + // children: [ + // { + // path: 'user', // 用户管理路由 + // component: () => import('@/views/system/user/index.vue'), + // name: 'User', + // meta: { title: '用户管理', icon: 'user', permissions: ['system:user:list'] } + // }, + // { + // path: 'role', // 角色管理路由 + // component: () => import('@/views/system/role/index.vue'), + // name: 'Role', + // meta: { title: '角色管理', icon: 'role', permissions: ['system:role:list'] } + // }, + // { + // path: 'menu', // 菜单管理路由 + // component: () => import('@/views/system/menu/index.vue'), + // name: 'Menu', + // meta: { title: '菜单管理', icon: 'menu', permissions: ['system:menu:list'] } + // }, + // { + // path: 'dept', // 部门管理路由 + // component: () => import('@/views/system/dept/index.vue'), + // name: 'Dept', + // meta: { title: '部门管理', icon: 'dept', permissions: ['system:dept:list'] } + // }, + // { + // path: 'post', // 岗位管理路由 + // component: () => import('@/views/system/post/index.vue'), + // name: 'Post', + // meta: { title: '岗位管理', icon: 'post', permissions: ['system:post:list'] } + // }, + // { + // path: 'dict', // 字典管理路由 + // component: () => import('@/views/system/dict/index.vue'), + // name: 'Dict', + // meta: { title: '字典管理', icon: 'dict', permissions: ['system:dict:list'] } + // }, + // { + // path: 'config', // 参数配置路由 + // component: () => import('@/views/system/config/index.vue'), + // name: 'Config', + // meta: { title: '参数配置', icon: 'config', permissions: ['system:config:list'] } + // }, + // { + // path: 'notice', // 通知公告路由 + // component: () => import('@/views/system/notice/index.vue'), + // name: 'Notice', + // meta: { title: '通知公告', icon: 'notice', permissions: ['system:notice:list'] } + // }, + // { + // path: 'tenant', // 租户管理路由 + // component: () => import('@/views/system/tenant/index.vue'), + // name: 'Tenant', + // meta: { title: '租户管理', icon: 'tenant', permissions: ['system:tenant:list'] } + // } + // ] + // }, + // 租户用户设置路由 + { + path: '/system/tenant-user', + component: Layout, + hidden: true, + permissions: ['*:*:*'], + children: [ + { + path: 'set/:tenantId(\\d+)', + component: () => import('@/views/system/tenant/setUser'), + name: 'SetUser', + meta: { title: '所属用户', activeMenu: '/system/basicmanage/tenant' }, + }, + ], + }, + //租户合同管理路由 + { + path: '/system/tenant-contract', + component: Layout, + hidden: true, + permissions: ['*:*:*'], + children: [ + { + path: 'set/:tenantId(\\d+)', + component: () => import('@/views/system/tenant/setContract'), + name: 'SetContract', + meta: { title: '合同管理', activeMenu: '/system/basicmanage/tenant' }, + }, + ], + }, + { + path: '/system/user-auth', + component: Layout, + hidden: true, + permissions: ['system:user:edit'], + children: [ + { + path: 'role/:userId(\\d+)', + component: () => import('@/views/system/user/authRole'), + name: 'AuthRole', + meta: { title: '分配角色', activeMenu: '/system/user' }, + }, + ], + }, + { + path: '/system/role-auth', + component: Layout, + hidden: true, + permissions: ['system:role:edit'], + children: [ + { + path: 'user/:roleId(\\d+)', + component: () => import('@/views/system/role/authUser'), + name: 'AuthUser', + meta: { title: '分配用户', activeMenu: '/system/role' }, + }, + ], + }, + { + path: '/system/dict-data', + component: Layout, + hidden: true, + permissions: ['system:dict:list'], + children: [ + { + path: 'index/:dictId(\\d+)', + component: () => import('@/views/system/dict/data'), + name: 'Data', + meta: { title: '字典数据', activeMenu: '/system/dict' }, + }, + ], + }, + { + path: '/monitor/job-log', + component: Layout, + hidden: true, + permissions: ['monitor:job:list'], + children: [ + { + path: 'index/:jobId(\\d+)', + component: () => import('@/views/monitor/job/log'), + name: 'JobLog', + meta: { title: '调度日志', activeMenu: '/monitor/job' }, + }, + ], + }, + { + path: '/tool/gen-edit', + component: Layout, + hidden: true, + permissions: ['tool:gen:edit'], + children: [ + { + path: 'index/:tableId(\\d+)', + component: () => import('@/views/tool/gen/editTable'), + name: 'GenEdit', + meta: { title: '修改生成配置', activeMenu: '/tool/gen' }, + }, + ], + }, ]; // 合并常量路由和动态路由,确保所有路由都能被访问 const allRoutes = [...constantRoutes, ...dynamicRoutes]; -// 添加404路由到所有路由的最后 +// 添加404路由到所有路由的最后,确保捕获所有未匹配的路由 allRoutes.push({ - path: "/:pathMatch(.*)*", - component: () => import('@/views/error/404'), - hidden: true + path: "/:pathMatch(.*)*", + component: () => import('@/views/error/404'), + hidden: true }); +// 创建Vue Router实例 const router = createRouter({ - history: createWebHistory(), - routes: allRoutes, - scrollBehavior(to, from, savedPosition) { - if (savedPosition) { - return savedPosition - } else { - return {top: 0} - } - }, + history: createWebHistory(), // 使用HTML5历史模式 + routes: allRoutes, // 使用合并后的所有路由 + scrollBehavior(to, from, savedPosition) { + // 页面滚动行为:如果有保存的位置则恢复,否则滚动到顶部 + if (savedPosition) { + return savedPosition; + } else { + return { top: 0 }; + } + }, }); -export default router; +// 导出路由实例 +export default router; \ No newline at end of file diff --git a/openhis-ui-vue3/src/store/modules/user.js b/openhis-ui-vue3/src/store/modules/user.js index 3d78ba00..b1bf55ea 100644 --- a/openhis-ui-vue3/src/store/modules/user.js +++ b/openhis-ui-vue3/src/store/modules/user.js @@ -4,96 +4,96 @@ import defAva from '@/assets/images/user.png' import {defineStore} from 'pinia' const useUserStore = defineStore( - 'user', - { - state: () => ({ - token: getToken(), - id: '', - name: '', - avatar: '', - orgId: '', - practitionerId: '', - orgName: '', - nickName: '', - fixmedinsCode: '', // 医疗机构编码 - roles: [], - permissions: [], - tenantId: '', - tenantName: '', // 租户名称 - hospitalName:'', - optionMap: {} // 租户配置项Map(从sys_tenant_option表读取) - }), - actions: { - // 登录 - login(userInfo) { - const username = userInfo.username.trim() - const password = userInfo.password - const code = userInfo.code - const uuid = userInfo.uuid - const tenantId = userInfo.tenantId - return new Promise((resolve, reject) => { - login(username, password, code, uuid ,tenantId).then(res => { - setToken(res.token) - this.token = res.token - this.tenantId = tenantId - resolve() - }).catch(error => { - reject(error) - }) + 'user', + { + state: () => ({ + token: getToken(), + id: '', + name: '', + avatar: '', + orgId: '', + practitionerId: '', + orgName: '', + nickName: '', + fixmedinsCode: '', // 医疗机构编码 + roles: [], + permissions: [], + tenantId: '', + tenantName: '', // 租户名称 + hospitalName:'', + optionMap: {} // 租户配置项Map(从sys_tenant_option表读取) + }), + actions: { + // 登录 + login(userInfo) { + const username = userInfo.username.trim() + const password = userInfo.password + const code = userInfo.code + const uuid = userInfo.uuid + const tenantId = userInfo.tenantId + return new Promise((resolve, reject) => { + login(username, password, code, uuid ,tenantId).then(res => { + setToken(res.token) + this.token = res.token + this.tenantId = tenantId + resolve() + }).catch(error => { + reject(error) }) - }, - // 获取用户信息 - getInfo() { - return new Promise((resolve, reject) => { - getInfo().then(res => { - const user = res.user - const avatar = (user.avatar == "" || user.avatar == null) ? defAva : import.meta.env.VITE_APP_BASE_API + user.avatar; + }) + }, + // 获取用户信息 + getInfo() { + return new Promise((resolve, reject) => { + getInfo().then(res => { + const user = res.user + const avatar = (user.avatar == "" || user.avatar == null) ? defAva : import.meta.env.VITE_APP_BASE_API + user.avatar; - if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组 - this.roles = res.roles - this.permissions = res.permissions - } else { - this.roles = ['ROLE_DEFAULT'] - } - // console.log('user info:', user); - this.id = user.userId - this.name = user.userName // 用户账号(对应数据库的user_name字段,如'admin') - this.orgId = user.orgId - this.orgName = user.orgName - this.nickName = user.nickName - this.practitionerId = res.practitionerId - this.fixmedinsCode = res.optionJson.fixmedinsCode - this.avatar = avatar - this.optionMap = res.optionMap || {} - // 优先从optionMap获取配置,如果没有则从optionJson获取 - this.hospitalName = this.optionMap.hospitalName || res.optionJson.hospitalName || '' - this.tenantName = res.tenantName || '' + if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组 + this.roles = res.roles + this.permissions = res.permissions + } else { + this.roles = ['ROLE_DEFAULT'] + } + // console.log('user info:', user); + this.id = user.userId + this.name = user.userName // 用户账号(对应数据库的user_name字段,如'admin') + this.orgId = user.orgId + this.orgName = user.orgName + this.nickName = user.nickName + this.practitionerId = res.practitionerId + this.fixmedinsCode = res.optionJson.fixmedinsCode + this.avatar = avatar + this.optionMap = res.optionMap || {} + // 优先从optionMap获取配置,如果没有则从optionJson获取 + this.hospitalName = this.optionMap.hospitalName || res.optionJson.hospitalName || '' + this.tenantName = res.tenantName || '' - resolve(res) - }).catch(error => { - reject(error) - }) + resolve(res) + }).catch(error => { + reject(error) }) - }, - // 退出系统 - logOut() { - return new Promise((resolve, reject) => { - logout(this.token).then(() => { - this.token = '' - this.roles = [] - this.permissions = [] - this.tenantId = '' - removeToken() - resolve() - }).catch(error => { - reject(error) - }) + }) + }, + // 退出系统 + logOut() { + return new Promise((resolve, reject) => { + logout(this.token).then(() => { + this.token = '' + this.roles = [] + this.permissions = [] + this.tenantId = '' + removeToken() + resolve() + }).catch(error => { + reject(error) }) - }, - removeRoles(){ - this.roles = [] - } + }) + }, + removeRoles(){ + this.roles = [] } - }) + } + }) export default useUserStore diff --git a/openhis-ui-vue3/src/template/DischargeDiagnosisCertificate.vue b/openhis-ui-vue3/src/template/DischargeDiagnosisCertificate.vue index 6a523999..d2ac605b 100644 --- a/openhis-ui-vue3/src/template/DischargeDiagnosisCertificate.vue +++ b/openhis-ui-vue3/src/template/DischargeDiagnosisCertificate.vue @@ -5,7 +5,7 @@ patient?.busNo || '未知' }} -

{{ userStore.hospitalName }}

+

长春市朝阳区中医院

出院诊断病历

@@ -143,9 +143,6 @@ import {nextTick, onMounted, reactive, ref} from 'vue'; import {ElMessage} from 'element-plus'; import {previewPrint} from '../utils/printUtils'; import DisDiagnMedicalRecord from '../views/hospitalRecord/components/disDiagnMedicalRecord.vue'; -import useUserStore from '@/store/modules/user'; - -const userStore = useUserStore(); defineOptions({ name: 'DischargeDiagnosisCertificate', diff --git a/openhis-ui-vue3/src/template/ProgressNoteform.vue b/openhis-ui-vue3/src/template/ProgressNoteform.vue index ff071869..2c9501fc 100644 --- a/openhis-ui-vue3/src/template/ProgressNoteform.vue +++ b/openhis-ui-vue3/src/template/ProgressNoteform.vue @@ -1,8 +1,5 @@ - - - ${printContent.innerHTML} - - - `); - - printWindow.document.close(); - - // 等待内容加载完成后打印 - printWindow.onload = function() { - setTimeout(() => { - printWindow.print(); - // 打印后关闭窗口(可选) - // printWindow.close(); - }, 250); - }; -} - -// 选择挂号记录 -function handleRecordSelect(row) { - selectedRecord.value = row; -} - -// 确认选择记录 -async function handleConfirmSelect() { - if (!selectedRecord.value) { - proxy.$modal.msgWarning('请选择一条挂号记录'); - return; - } - - loading.value = true; - selectDialogVisible.value = false; - - try { - // 保存当前记录,用于打印 - currentRecord.value = selectedRecord.value; - - // 填充表单 - 确保数据正确填充 - fillForm(selectedRecord.value); - - // 等待一小段时间,确保 form 数据已更新 - await new Promise(resolve => setTimeout(resolve, 50)); - - // 验证表单数据是否已正确填充 - if (!form.encounterId) { - proxy.$modal.msgError('获取挂号记录ID失败,请重试'); - loading.value = false; - return; - } - - // 提交补打操作(handleSubmit 内部会管理 loading 状态) - await handleSubmit(); - } catch (error) { - console.error('确认选择记录失败:', error); - proxy.$modal.msgError('处理失败: ' + (error.message || '未知错误')); - loading.value = false; -} -} - + diff --git a/openhis-ui-vue3/src/views/charge/outpatientregistration/index.vue b/openhis-ui-vue3/src/views/charge/outpatientregistration/index.vue index 2d127da2..c1d5180b 100644 --- a/openhis-ui-vue3/src/views/charge/outpatientregistration/index.vue +++ b/openhis-ui-vue3/src/views/charge/outpatientregistration/index.vue @@ -4,9 +4,9 @@ @@ -639,7 +649,6 @@ import patientList from './components/patientList'; import {nextTick, onMounted, onUnmounted, ref} from 'vue'; import ChargeDialog from './components/chargeDialog.vue'; import RefundDialog from './components/refundDialog.vue'; -import ReprintDialog from './components/reprintDialog.vue'; import {handleColor} from '@/utils/his'; import useUserStore from '@/store/modules/user'; import {formatDateStr} from '@/utils/index'; @@ -700,7 +709,6 @@ const patientInfoList = ref(undefined); const contractList = ref(undefined); // const locationOptions = ref(undefined); // 地点树选项 const doctorList = ref(undefined); // 医生选项 -const allDoctorList = ref(undefined); // 所有医生选项(用于过滤) const healthcareList = ref([]); // 挂号项目选项 const orgOptions = ref(undefined); // 科室选项 const readCardLoading = ref(false); @@ -732,6 +740,7 @@ const data = reactive({ contractNo: [{ required: true, message: '费用性质', trigger: 'blur' }], patientId: [{ required: true, message: '病人不能为空', trigger: 'blur' }], priorityEnum: [{ required: true, message: '优先级不能为空', trigger: 'blur' }], + serviceTypeId: [{ required: true, message: '挂号类型不能为空', trigger: 'blur' }], organizationId: [{ required: true, message: '优先级不能为空', trigger: 'blur' }], orgId: [{ required: true, message: '就诊科室不能为空', trigger: 'blur' }], practitionerId: [{ required: true, message: '医生不能为空', trigger: 'blur' }], @@ -801,10 +810,10 @@ const { queryParams, form, rules } = toRefs(data); /** 根据contractNo获取费用性质名称 */ function getFeeTypeName(contractNo) { - if (!contractNo || !medfee_paymtd_code?.value || !Array.isArray(medfee_paymtd_code.value)) { + if (!contractNo || !medfee_paymtd_code || !Array.isArray(medfee_paymtd_code)) { return ''; } - const dictItem = medfee_paymtd_code.value.find(item => item.value === contractNo); + const dictItem = medfee_paymtd_code.find(item => item.value === contractNo); return dictItem ? dictItem.label : ''; } @@ -981,24 +990,6 @@ async function handleReadCard(value) { // } } -/** 跳转到患者档案页面 */ -function goToPatientRecord() { - // 如果已选择患者,则跳转到档案页面并定位到该患者 - if (form.value.patientId) { - // 使用患者ID作为查询参数传递到档案页面 - router.push({ - path: '/patient/patientmgr', - query: { - patientId: form.value.patientId, - patientName: form.value.name - } - }); - } else { - // 未选择患者时,直接跳转到档案页面 - router.push('/patient/patientmgr'); - } -} - /** 新增用户信息弹窗 */ function handleAddPatient() { proxy.$refs['patientAddRef'].show(); // 确保子组件更新后再调用 show 方法 @@ -1023,15 +1014,6 @@ function setInfo() { form.value.doctorName = doctorData.length > 0 ? doctorData[0].name : ''; } -// 挂号类型选择变化处理 -function handleServiceTypeChange() { - setchargeItem(); - // 如果已选择科室和医生,重新过滤医生列表 - if (form.value.orgId && allDoctorList.value) { - filterDoctorsByHealthcare(); - } -} - // 设定费用项管理表单 function setchargeItem() { if (healthcareList.value.length > 0) { @@ -1044,13 +1026,6 @@ function setchargeItem() { form.value.totalPrice = healthcareData.length > 0 ? healthcareData[0].price + healthcareData[0].activityPrice : ''; form.value.definitionId = healthcareData.length > 0 ? healthcareData[0].definitionId : ''; - } else { - // 如果没有挂号类型数据,清空相关字段 - form.value.locationId_dictText = ''; - form.value.price = ''; - form.value.activityPrice = ''; - form.value.totalPrice = ''; - form.value.definitionId = ''; } } /** 查询患者信息 */ @@ -1061,18 +1036,10 @@ function getList() { outpatientRegistrationList.value = res.data.records; total.value = res.data.total; - // 调试:查看返回的数据结构,查找就诊卡号字段 - if (res.data.records && res.data.records.length > 0) { - console.log('当日已挂号数据结构:', res.data.records[0]); + // 调试:查看返回的数据结构(仅退号记录查询时) + if (queryType.value === 'returned' && res.data.records && res.data.records.length > 0) { + console.log('退号记录数据结构:', res.data.records[0]); console.log('所有字段:', Object.keys(res.data.records[0])); - // 查找可能的就诊卡号字段 - const firstRecord = res.data.records[0]; - const possibleCardFields = ['identifierNo', 'cardNo', 'card', 'patientCardNo', 'identifier', 'medicalCardNo']; - possibleCardFields.forEach(field => { - if (firstRecord[field] !== undefined) { - console.log(`找到可能的就诊卡号字段 ${field}:`, firstRecord[field]); - } - }); } }); } @@ -1185,7 +1152,7 @@ function filterDoctorsByHealthcare() { } // 获取选中的挂号类型信息 - const selectedHealthcare = healthcareList.value?.find( + const selectedHealthcare = healthcareList.value.find( (healthcare) => healthcare.id === form.value.serviceTypeId ); @@ -1349,7 +1316,7 @@ function handleAdd() { genderEnum_enumText: form.value.genderEnum_enumText, age: form.value.age, contractName: form.value.contractNo - ? contractList.value?.find((item) => item.busNo === form.value.contractNo)?.contractName || + ? contractList.value.find((item) => item.busNo === form.value.contractNo)?.contractName || '自费' : '自费', idCard: form.value.idCard, @@ -1504,7 +1471,7 @@ function transformFormData(form) { patientId: form.patientId, definitionId: form.definitionId, serviceId: form.serviceTypeId, - totalPrice: form.totalPrice, // 使用正确的总价字段 + totalPrice: form.price, // 默认值为 99.99 }, }; } diff --git a/openhis-ui-vue3/src/views/clinicmanagement/bargain/component/prescriptionlist.vue b/openhis-ui-vue3/src/views/clinicmanagement/bargain/component/prescriptionlist.vue index e7efd7e9..fb0424a0 100644 --- a/openhis-ui-vue3/src/views/clinicmanagement/bargain/component/prescriptionlist.vue +++ b/openhis-ui-vue3/src/views/clinicmanagement/bargain/component/prescriptionlist.vue @@ -449,10 +449,6 @@ function handleDiagnosisChange(item, row) { function handleFocus(row, index) { rowIndex.value = index; - // 如果当前行已选择adviceType,同步到adviceQueryParams - if (row.adviceType !== undefined) { - adviceQueryParams.value.adviceType = row.adviceType; - } row.showPopover = true; } diff --git a/openhis-ui-vue3/src/views/clinicmanagement/dayEnd/index.vue b/openhis-ui-vue3/src/views/clinicmanagement/dayEnd/index.vue index 790b0c83..d43fe8e6 100644 --- a/openhis-ui-vue3/src/views/clinicmanagement/dayEnd/index.vue +++ b/openhis-ui-vue3/src/views/clinicmanagement/dayEnd/index.vue @@ -356,7 +356,7 @@ async function print() { ...reportValue.value, // 将 reportValue.value 中的所有属性展开到 result 中 nickName: userStore.nickName, orgName: userStore.orgName, - fixmedinsName: userStore.hospitalName, + fixmedinsName: '长春市朝阳区中医院医院', queryTime: queryTime.value[0] + '~' + queryTime.value[1], zfAmount: new Decimal(reportValue.value.zhSum || 0).add(reportValue.value.fundSum || 0), feeAmount: new Decimal(reportValue.value.DIAGNOSTIC_FEE || 0) diff --git a/openhis-ui-vue3/src/views/clinicmanagement/dayEnd/indexccu.vue b/openhis-ui-vue3/src/views/clinicmanagement/dayEnd/indexccu.vue index adb0889c..9a2c2e6d 100644 --- a/openhis-ui-vue3/src/views/clinicmanagement/dayEnd/indexccu.vue +++ b/openhis-ui-vue3/src/views/clinicmanagement/dayEnd/indexccu.vue @@ -514,9 +514,7 @@ async function print() { }; console.log(result, '==result.data=='); - const printElements = JSON.parse( - JSON.stringify(templateJson).replace(/{{HOSPITAL_NAME}}/g, userStore.hospitalName) - ); + const printElements = templateJson; var hiprintTemplate = new hiprint.PrintTemplate({ template: printElements }); // 定义模板 const printerList = hiprintTemplate.getPrinterList(); console.log(hiprintTemplate, '打印机列表'); diff --git a/openhis-ui-vue3/src/views/clinicmanagement/disposal/index.vue b/openhis-ui-vue3/src/views/clinicmanagement/disposal/index.vue index de262b3f..309e40dc 100644 --- a/openhis-ui-vue3/src/views/clinicmanagement/disposal/index.vue +++ b/openhis-ui-vue3/src/views/clinicmanagement/disposal/index.vue @@ -660,9 +660,7 @@ function printPrescription() { // 将对象转换为 JSON 字符串 console.log(result, 'result'); // 模板对象获取 - const printElements = JSON.parse( - JSON.stringify(prescriptionTemplate).replace(/{{HOSPITAL_NAME}}/g, userStore.hospitalName) - ); + const printElements = prescriptionTemplate; var hiprintTemplate = new hiprint.PrintTemplate({ template: printElements }); // 定义模板 hiprintTemplate.print2(result, { title: '打印标题', @@ -697,9 +695,7 @@ function printDisposal() { .join(','); advicePrint({ requestIds: requestIds }).then((res) => { const result = res.data; - const printElements = JSON.parse( - JSON.stringify(disposalTemplate).replace(/{{HOSPITAL_NAME}}/g, userStore.hospitalName) - ); + const printElements = disposalTemplate; var hiprintTemplate = new hiprint.PrintTemplate({ template: printElements }); // 定义模板 hiprintTemplate.print2(result, { height: 210, @@ -739,9 +735,7 @@ function printBloodBarcode() { } else { printBloodCode({ requestId: selectedRows[0].requestId }).then((res) => { const result = res.data; - const printElements = JSON.parse( - JSON.stringify(bloodTemplate).replace(/{{HOSPITAL_NAME}}/g, userStore.hospitalName) - ); + const printElements = bloodTemplate; var hiprintTemplate = new hiprint.PrintTemplate({ template: printElements }); // 定义模板 hiprintTemplate.print2(result, { height: 210, diff --git a/openhis-ui-vue3/src/views/clinicmanagement/historicalPrescription/component/prescription.vue b/openhis-ui-vue3/src/views/clinicmanagement/historicalPrescription/component/prescription.vue index ed63b83a..509a48f4 100644 --- a/openhis-ui-vue3/src/views/clinicmanagement/historicalPrescription/component/prescription.vue +++ b/openhis-ui-vue3/src/views/clinicmanagement/historicalPrescription/component/prescription.vue @@ -27,7 +27,7 @@ CF0000000001
-

{{ userStore.hospitalName }}

+

长春市朝阳区中医院医院

处方单

@@ -130,9 +130,7 @@ @@ -742,14 +729,12 @@ const onHospitalization = async () => { .disabled-wrapper .overlay { position: absolute; - top: 50px; + top: 0; left: 0; width: 100%; - height: calc(100% - 50px); + height: 100%; z-index: 999; - /* 确保覆盖在内容上方,但不覆盖顶部按钮区域 */ + /* 确保覆盖在内容上方 */ cursor: not-allowed; - background-color: rgba(255, 255, 255, 0.01); - pointer-events: auto; } diff --git a/openhis-ui-vue3/src/views/drug/inpatientMedicationDispensing/components/MedicationDetails.vue b/openhis-ui-vue3/src/views/drug/inpatientMedicationDispensing/components/MedicationDetails.vue index 7d04dea3..bc1c6ff9 100644 --- a/openhis-ui-vue3/src/views/drug/inpatientMedicationDispensing/components/MedicationDetails.vue +++ b/openhis-ui-vue3/src/views/drug/inpatientMedicationDispensing/components/MedicationDetails.vue @@ -291,13 +291,10 @@ import {advicePrint, getAdjustPriceSwitchState, lotNumberMatch} from '@/api/publ import {debounce} from 'lodash-es'; import TraceNoDialog from '@/components/OpenHis/TraceNoDialog/index.vue'; import {hiprint} from 'vue-plugin-hiprint'; -import templateJson from './templateJson.json'; -import disposalTemplate from './disposalTemplate.json'; +// import templateJson from './components/templateJson.json'; +// import disposalTemplate from './components/disposalTemplate.json'; import {formatInventory} from '@/utils/his.js'; -import useUserStore from '@/store/modules/user'; - -const userStore = useUserStore(); const { proxy } = getCurrentInstance(); const showSearch = ref(true); const total = ref(0); @@ -447,9 +444,7 @@ async function printPrescription() { }).then((res) => { if (projectTypeCode.value == '3') { const result = res.data; - const printElements = JSON.parse( - JSON.stringify(disposalTemplate).replace(/{{HOSPITAL_NAME}}/g, userStore.hospitalName) - ); + const printElements = disposalTemplate; var hiprintTemplate = new hiprint.PrintTemplate({ template: printElements }); // 定义模板 hiprintTemplate.print2(result, { height: 210, @@ -479,9 +474,7 @@ async function printPrescription() { prescriptionList: item, }); }); - const printElements = JSON.parse( - JSON.stringify(templateJson).replace(/{{HOSPITAL_NAME}}/g, userStore.hospitalName) - ); + const printElements = templateJson; var hiprintTemplate = new hiprint.PrintTemplate({ template: printElements }); // 定义模板 hiprintTemplate.print2(result, { height: 210, diff --git a/openhis-ui-vue3/src/views/hospitalRecord/components/admissionRecord.vue b/openhis-ui-vue3/src/views/hospitalRecord/components/admissionRecord.vue index 9c7818fc..adc95f03 100644 --- a/openhis-ui-vue3/src/views/hospitalRecord/components/admissionRecord.vue +++ b/openhis-ui-vue3/src/views/hospitalRecord/components/admissionRecord.vue @@ -2,7 +2,7 @@
-
{{ userStore.hospitalName }}
+
长春市朝阳区中医院
- 本记录由{{ userStore.hospitalName }}医师根据患者病情如实记录,仅供临床诊疗参考 | + 本记录由长春市朝阳区中医院医师根据患者病情如实记录,仅供临床诊疗参考 | 地址:长春市朝阳区XX街XX号 | 联系电话:0431-XXXXXXX
@@ -629,9 +629,7 @@ \ No newline at end of file diff --git a/openhis-ui-vue3/src/views/hospitalRecord/components/intOperRecordSheet.vue b/openhis-ui-vue3/src/views/hospitalRecord/components/intOperRecordSheet.vue index 92880ace..416fc596 100644 --- a/openhis-ui-vue3/src/views/hospitalRecord/components/intOperRecordSheet.vue +++ b/openhis-ui-vue3/src/views/hospitalRecord/components/intOperRecordSheet.vue @@ -11,7 +11,7 @@ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.03); " > -
{{ userStore.hospitalName }}
+
长春市朝阳区中医院
-
{{ userStore.hospitalName }}
+
长春市朝阳区中医院
住院病案首页
@@ -1754,11 +1754,7 @@ diff --git a/openhis-ui-vue3/src/views/pharmacymanagement/westernmedicine/index.vue b/openhis-ui-vue3/src/views/pharmacymanagement/westernmedicine/index.vue index c490fb86..34b7b0ad 100644 --- a/openhis-ui-vue3/src/views/pharmacymanagement/westernmedicine/index.vue +++ b/openhis-ui-vue3/src/views/pharmacymanagement/westernmedicine/index.vue @@ -696,10 +696,7 @@ async function printPrescription() { console.log('药房result', result); // 根据药品分类选择对应的打印模板 - const template = tcmFlag.value === '1' ? chineseMedicineTemplateJson : templateJson; - const printElements = JSON.parse( - JSON.stringify(template).replace(/{{HOSPITAL_NAME}}/g, proxy.$store.useUserStore().hospitalName) - ); + const printElements = tcmFlag.value === '1' ? chineseMedicineTemplateJson : templateJson; var hiprintTemplate = new hiprint.PrintTemplate({template: printElements}); // 定义模板 hiprintTemplate.print2(result, { height: 210, diff --git a/openhis-ui-vue3/src/views/surgerymanage/index.vue b/openhis-ui-vue3/src/views/surgerymanage/index.vue index c499e0b4..0778d025 100644 --- a/openhis-ui-vue3/src/views/surgerymanage/index.vue +++ b/openhis-ui-vue3/src/views/surgerymanage/index.vue @@ -32,7 +32,7 @@ - + - + - + - + - + - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - - + + @@ -195,11 +139,6 @@ - - - - - @@ -208,52 +147,23 @@ - + -
* 编辑模式下患者信息不可更改
- - - - -
- 原就诊记录: {{ form.encounterNo || '无' }} -
-
-
-
- - - - - - - - - - + + + @@ -261,12 +171,12 @@ - + - + @@ -274,9 +184,9 @@ - + - + - - - + @@ -330,24 +232,24 @@ - + - + @@ -357,24 +259,24 @@ - + - + @@ -384,21 +286,21 @@ - + - + - - - + + + @@ -439,8 +329,6 @@ placeholder="请选择执行科室" check-strictly style="width: 100%" - :disabled="isViewMode" - @change="handleOrgChange" /> @@ -449,35 +337,35 @@ 诊断信息 - + - + - + - + - + - + - + @@ -485,9 +373,9 @@ - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - +
+ + + + {{ viewData.surgeryNo }} + + {{ viewData.statusEnum_dictText }} + + {{ viewData.patientName }} + {{ viewData.patientGender }} / {{ viewData.patientAge }}岁 + {{ viewData.encounterNo }} + {{ viewData.surgeryName }} + {{ viewData.surgeryCode }} + {{ viewData.surgeryTypeEnum_dictText }} + {{ viewData.surgeryLevel_dictText }} + {{ viewData.anesthesiaTypeEnum_dictText }} + {{ viewData.plannedTime }} + {{ viewData.actualStartTime }} + {{ viewData.actualEndTime }} + {{ viewData.bodySite }} + {{ viewData.mainSurgeonName }} + {{ viewData.anesthetistName }} + {{ viewData.assistant1Name }} + {{ viewData.assistant2Name }} + {{ viewData.operatingRoomName }} + {{ viewData.orgName }} + {{ viewData.preoperativeDiagnosis }} + {{ viewData.postoperativeDiagnosis }} + ¥{{ viewData.surgeryFee }} + ¥{{ viewData.anesthesiaFee }} + ¥{{ viewData.totalFee }} + {{ viewData.remark }} + +