diff --git a/healthlink-his-mobile/.env.development b/healthlink-his-mobile/.env.development new file mode 100644 index 000000000..390ebe68b --- /dev/null +++ b/healthlink-his-mobile/.env.development @@ -0,0 +1,11 @@ +# 页面标题 +VITE_APP_TITLE = HealthLink移动护理 + +# 开发环境配置 +VITE_APP_ENV = 'development' + +# API地址 +VITE_APP_BASE_API = '/dev-api' + +# 后端代理地址 +VITE_API_PROXY = 'http://localhost:18080/healthlink-his' diff --git a/healthlink-his-mobile/.env.production b/healthlink-his-mobile/.env.production new file mode 100644 index 000000000..8196ebc02 --- /dev/null +++ b/healthlink-his-mobile/.env.production @@ -0,0 +1,8 @@ +# 页面标题 +VITE_APP_TITLE = HealthLink移动护理 + +# 生产环境配置 +VITE_APP_ENV = 'production' + +# API地址 +VITE_APP_BASE_API = '/dev-api' diff --git a/healthlink-his-mobile/package.json b/healthlink-his-mobile/package.json index 207255bf4..59f85826b 100644 --- a/healthlink-his-mobile/package.json +++ b/healthlink-his-mobile/package.json @@ -1,6 +1,7 @@ { "name": "healthlink-his-mobile", "version": "1.0.0", + "type": "module", "description": "HealthLink-HIS 移动护理H5工作站", "scripts": { "dev": "vite", @@ -12,11 +13,13 @@ "dependencies": { "vue": "^3.4.0", "vue-router": "^4.3.0", + "pinia": "^2.1.0", "axios": "^1.7.0", "element-plus": "^2.7.0", - "vxe-table": "^4.7.0", "echarts": "^5.5.0", - "pinia": "^2.1.0" + "js-cookie": "^3.0.5", + "nprogress": "^0.2.0", + "path-to-regexp": "^6.2.0" }, "devDependencies": { "@vitejs/plugin-vue": "^5.0.0", diff --git a/healthlink-his-mobile/src/api/index.js b/healthlink-his-mobile/src/api/index.js index 30065b7b6..0e65ca99d 100644 --- a/healthlink-his-mobile/src/api/index.js +++ b/healthlink-his-mobile/src/api/index.js @@ -1,12 +1,12 @@ import axios from 'axios' import { ElMessage } from 'element-plus' -const request = axios.create({ - baseURL: '/dev-api', - timeout: 10000 +const service = axios.create({ + baseURL: import.meta.env.VITE_APP_BASE_API || '/dev-api', + timeout: 30000 }) -request.interceptors.request.use(config => { +service.interceptors.request.use(config => { const token = localStorage.getItem('Admin-Token') if (token && !(config.headers && config.headers.isToken === false)) { config.headers.Authorization = 'Bearer ' + token @@ -14,39 +14,41 @@ request.interceptors.request.use(config => { return config }) -request.interceptors.response.use( - res => { - if (res.data?.code === 401) { +service.interceptors.response.use( + response => { + const res = response.data + if (res.code === 401) { localStorage.removeItem('Admin-Token') window.location.href = '/login' return Promise.reject(new Error('登录已过期')) } - return res.data + return res }, - err => { - if (err.response?.status === 401) { + error => { + if (error.response?.status === 401) { localStorage.removeItem('Admin-Token') window.location.href = '/login' } - return Promise.reject(err) + ElMessage.error(error.response?.data?.msg || '请求失败') + return Promise.reject(error) } ) export const authApi = { - login: (data) => request.post('/login', data, { headers: { isToken: false } }), - getTenants: (username) => request.get('/system/tenant/user-bind/' + username, { headers: { isToken: false } }) + login: (data) => service.post('/login', data, { headers: { isToken: false } }), + getTenants: (username) => service.get('/system/tenant/user-bind/' + username, { headers: { isToken: false } }) } export const nursingApi = { - getTasks: (params) => request.get('/mp/nursing/tasks', { params }), - completeTask: (id, data) => request.post(`/mp/nursing/tasks/${id}/complete`, data), - getPatientInfo: (id) => request.get(`/mp/nursing/patient/${id}`), - getPatientList: (params) => request.get('/mp/nursing/patient/list', { params }), - getOrders: (patientId) => request.get(`/mp/nursing/orders/${patientId}`), - getVitalSigns: (patientId) => request.get(`/mp/nursing/vital-signs/${patientId}`), - submitVitalSign: (data) => request.post('/mp/nursing/vital-sign', data), - getAssessments: (patientId) => request.get(`/mp/nursing/assessments/${patientId}`), - submitAssessment: (data) => request.post('/mp/nursing/assessment', data) + getTasks: (params) => service.get('/mp/nursing/tasks', { params }), + completeTask: (id, data) => service.post(`/mp/nursing/tasks/${id}/complete`, data), + getPatientInfo: (id) => service.get(`/mp/nursing/patient/${id}`), + getPatientList: (params) => service.get('/mp/nursing/patient/list', { params }), + getOrders: (patientId) => service.get(`/mp/nursing/orders/${patientId}`), + getVitalSigns: (patientId) => service.get(`/mp/nursing/vital-signs/${patientId}`), + submitVitalSign: (data) => service.post('/mp/nursing/vital-sign', data), + getAssessments: (patientId) => service.get(`/mp/nursing/assessments/${patientId}`), + submitAssessment: (data) => service.post('/mp/nursing/assessment', data) } -export default request +export default service diff --git a/healthlink-his-mobile/src/main.js b/healthlink-his-mobile/src/main.js index 2df3d027e..99de3f024 100644 --- a/healthlink-his-mobile/src/main.js +++ b/healthlink-his-mobile/src/main.js @@ -1,6 +1,7 @@ import { createApp } from 'vue' import { createPinia } from 'pinia' import ElementPlus from 'element-plus' +import zhCn from 'element-plus/dist/locale/zh-cn.mjs' import 'element-plus/dist/index.css' import App from './App.vue' import router from './router' @@ -9,5 +10,5 @@ import './styles/mobile.css' const app = createApp(App) app.use(createPinia()) app.use(router) -app.use(ElementPlus, { size: 'large' }) +app.use(ElementPlus, { size: 'large', locale: zhCn }) app.mount('#app') diff --git a/healthlink-his-mobile/src/router/index.js b/healthlink-his-mobile/src/router/index.js index 6d3175a3a..463e9d8a2 100644 --- a/healthlink-his-mobile/src/router/index.js +++ b/healthlink-his-mobile/src/router/index.js @@ -2,25 +2,21 @@ import { createRouter, createWebHistory } from 'vue-router' const routes = [ { path: '/login', component: () => import('../views/Login.vue'), meta: { title: '登录' } }, - { path: '/', redirect: '/mobile/tasks' }, + { path: '/', redirect: '/mobile/home' }, { path: '/mobile', component: () => import('../views/MobileLayout.vue'), meta: { requiresAuth: true }, children: [ - { path: 'tasks', component: () => import('../views/TaskList.vue'), meta: { title: '任务' } }, - { path: 'patients', component: () => import('../views/PatientList.vue'), meta: { title: '患者' } }, + { path: 'home', component: () => import('../views/Home.vue'), meta: { title: '首页' } }, + { path: 'tasks', component: () => import('../views/TaskList.vue'), meta: { title: '任务列表' } }, + { path: 'patients', component: () => import('../views/PatientList.vue'), meta: { title: '患者列表' } }, { path: 'patient-detail/:id', component: () => import('../views/PatientDetail.vue'), meta: { title: '患者详情' } }, - { path: 'vital-entry/:patientId', component: () => import('../views/VitalSignEntry.vue'), meta: { title: '生命体征' } }, + { path: 'vital-entry/:patientId', component: () => import('../views/VitalSignEntry.vue'), meta: { title: '生命体征录入' } }, { path: 'assessment/:patientId', component: () => import('../views/AssessmentForm.vue'), meta: { title: '护理评估' } }, { path: 'mine', component: () => import('../views/Mine.vue'), meta: { title: '我的' } } ]} ] const router = createRouter({ history: createWebHistory(), routes }) - router.beforeEach((to, from, next) => { - if (to.meta.requiresAuth) { - const token = localStorage.getItem('Admin-Token') - if (!token) { next('/login'); return } - } + if (to.meta.requiresAuth && !localStorage.getItem('Admin-Token')) { next('/login'); return } next() }) - export default router diff --git a/healthlink-his-mobile/src/views/AssessmentForm.vue b/healthlink-his-mobile/src/views/AssessmentForm.vue index 985282289..e52853aaf 100644 --- a/healthlink-his-mobile/src/views/AssessmentForm.vue +++ b/healthlink-his-mobile/src/views/AssessmentForm.vue @@ -2,24 +2,18 @@
医院信息管理系统
+护士工作站