Files
his/openhis-ui-vue3/src/main.js
chenqi b69f312611 refactor(router): 优化路由配置和打印功能实现
- 统一路由配置中的代码风格,移除多余空格
- 移除医生个人报卡管理菜单项
- 移除检查管理中的医生报告快捷访问路径
- 替换浏览器打印为hiprint打印方案
- 添加vue-plugin-hiprint依赖和相关配置
- 实现门诊挂号单的hiprint打印功能
- 优化WebView环境检测逻辑和错误处理
2026-03-10 16:28:41 +08:00

141 lines
4.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import {createApp} from 'vue';
import Cookies from 'js-cookie';
// 导入 hiprint 并挂载到全局 window 对象
import {hiprint, defaultElementTypeProvider} 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';
import '@/assets/styles/index.scss'; // global css
import App from './App';
import store from './store';
import router from './router';
import directive from './directive'; // directive
// 注册指令
import plugins from './plugins'; // plugins
import {download, downloadGet} from '@/utils/request';
// svg图标
import 'virtual:svg-icons-register';
import SvgIcon from '@/components/SvgIcon';
import elementIcons from '@/components/SvgIcon/svgicon';
import './permission'; // permission control
import {useDict} from '@/utils/dict';
import {addDateRange, handleTree, parseTime, resetForm, selectDictLabel, selectDictLabels,} from '@/utils/openhis';
import {formatDateStr} from '@/utils/index';
// 分页组件
import Pagination from '@/components/Pagination';
// 自定义表格工具组件
import RightToolbar from '@/components/RightToolbar';
// 富文本组件
import Editor from '@/components/Editor';
// 文件上传组件
import FileUpload from '@/components/FileUpload';
// 图片上传组件
import ImageUpload from '@/components/ImageUpload';
// 图片预览组件
import ImagePreview from '@/components/ImagePreview';
// 自定义树选择组件
import TreeSelect from '@/components/TreeSelect';
// 字典标签组件
import DictTag from '@/components/DictTag';
// 导入请求工具
import {registerComponents} from './template';
window.hiprint = hiprint;
// 初始化 hiprint使用默认元素类型提供器支持 table、text、image 等元素)
hiprint.init({
providers: [new defaultElementTypeProvider()]
});
// 延迟连接,确保 hiwebSocket 已初始化
setTimeout(() => {
if (hiprint.hiwebSocket) {
// 设置连接地址和 token
hiprint.hiwebSocket.setHost('http://localhost:17521', 'hiprint-test');
console.log('hiprint 连接地址:', hiprint.hiwebSocket.host);
// 等待连接建立
setTimeout(() => {
console.log('hiprint 连接状态:', hiprint.hiwebSocket.connected);
if (hiprint.hiwebSocket.connected) {
console.log('hiprint 客户端连接成功');
} else {
console.warn('hiprint 客户端未连接,请检查客户端是否运行');
}
}, 2000);
} else {
console.warn('hiprint.hiwebSocket 未初始化');
}
}, 500);
const app = createApp(App);
// 检查是否在 WebView 环境中(使用可选链避免 ReferenceError
if (typeof window !== 'undefined' && window.chrome?.webview !== undefined) {
// 如果是 webview 环境,挂载 CSharpAccessor 对象到 vue 实例上
try {
const csAccessor = window.chrome.webview.hostObjects.CSharpAccessor;
app.config.globalProperties.csAccessor = csAccessor;
} catch (e) {
console.warn('WebView CSharpAccessor 不可用:', e);
}
}
// 全局方法挂载
app.config.globalProperties.useDict = useDict;
app.config.globalProperties.download = download;
app.config.globalProperties.downloadGet = downloadGet;
app.config.globalProperties.parseTime = parseTime;
app.config.globalProperties.resetForm = resetForm;
app.config.globalProperties.handleTree = handleTree;
app.config.globalProperties.addDateRange = addDateRange;
app.config.globalProperties.selectDictLabel = selectDictLabel;
app.config.globalProperties.selectDictLabels = selectDictLabels;
app.config.globalProperties.formatDateStr = formatDateStr;
// 全局组件挂载
app.component('DictTag', DictTag);
app.component('Pagination', Pagination);
app.component('TreeSelect', TreeSelect);
app.component('FileUpload', FileUpload);
app.component('ImageUpload', ImageUpload);
app.component('ImagePreview', ImagePreview);
app.component('RightToolbar', RightToolbar);
app.component('Editor', Editor);
app.use(registerComponents);
app.use(ElMessage);
app.use(router);
app.use(store);
app.use(plugins);
app.use(elementIcons);
app.component('svg-icon', SvgIcon);
directive(app);
// 全局禁止点击遮罩层关闭弹窗
ElDialog.props.closeOnClickModal.default = false;
// 使用element-plus 并且设置全局的大小
app.use(ElementPlus, {
locale: zhCn,
// 支持 large、default、small
size: Cookies.get('size') || 'default',
});
// 导入公告帮助工具
import { initNoticePopupAfterLogin } from '@/utils/noticeHelper'
app.mount('#app');
// 应用启动后初始化公告弹窗功能
import { nextTick } from 'vue'
nextTick(() => {
initNoticePopupAfterLogin()
})