From 99812e1bf083bd8de55f95f46a95355621479714 Mon Sep 17 00:00:00 2001 From: chenqi Date: Fri, 19 Jun 2026 12:16:58 +0800 Subject: [PATCH] =?UTF-8?q?feat(mobile-h5):=20=E5=88=9B=E5=BB=BA=E7=8B=AC?= =?UTF-8?q?=E7=AB=8B=E7=A7=BB=E5=8A=A8=E7=AB=AFH5=E6=8A=A4=E7=90=86?= =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E7=AB=99=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- healthlink-his-mobile/index.html | 14 +++ healthlink-his-mobile/package.json | 24 +++++ healthlink-his-mobile/src/App.vue | 3 + healthlink-his-mobile/src/api/index.js | 29 ++++++ healthlink-his-mobile/src/main.js | 13 +++ healthlink-his-mobile/src/router/index.js | 16 ++++ healthlink-his-mobile/src/styles/mobile.css | 6 ++ .../src/views/AssessmentForm.vue | 89 ++++++++++++++++++ healthlink-his-mobile/src/views/Mine.vue | 33 +++++++ .../src/views/MobileLayout.vue | 42 +++++++++ .../src/views/PatientDetail.vue | 92 +++++++++++++++++++ .../src/views/PatientList.vue | 47 ++++++++++ healthlink-his-mobile/src/views/TaskList.vue | 62 +++++++++++++ .../src/views/VitalSignEntry.vue | 69 ++++++++++++++ healthlink-his-mobile/vite.config.js | 19 ++++ 15 files changed, 558 insertions(+) create mode 100644 healthlink-his-mobile/index.html create mode 100644 healthlink-his-mobile/package.json create mode 100644 healthlink-his-mobile/src/App.vue create mode 100644 healthlink-his-mobile/src/api/index.js create mode 100644 healthlink-his-mobile/src/main.js create mode 100644 healthlink-his-mobile/src/router/index.js create mode 100644 healthlink-his-mobile/src/styles/mobile.css create mode 100644 healthlink-his-mobile/src/views/AssessmentForm.vue create mode 100644 healthlink-his-mobile/src/views/Mine.vue create mode 100644 healthlink-his-mobile/src/views/MobileLayout.vue create mode 100644 healthlink-his-mobile/src/views/PatientDetail.vue create mode 100644 healthlink-his-mobile/src/views/PatientList.vue create mode 100644 healthlink-his-mobile/src/views/TaskList.vue create mode 100644 healthlink-his-mobile/src/views/VitalSignEntry.vue create mode 100644 healthlink-his-mobile/vite.config.js diff --git a/healthlink-his-mobile/index.html b/healthlink-his-mobile/index.html new file mode 100644 index 000000000..0eba5633c --- /dev/null +++ b/healthlink-his-mobile/index.html @@ -0,0 +1,14 @@ + + + + + + + + HealthLink 移动护理 + + +
+ + + diff --git a/healthlink-his-mobile/package.json b/healthlink-his-mobile/package.json new file mode 100644 index 000000000..43779ae25 --- /dev/null +++ b/healthlink-his-mobile/package.json @@ -0,0 +1,24 @@ +{ + "name": "healthlink-his-mobile", + "version": "1.0.0", + "description": "HealthLink-HIS 移动护理H5工作站", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "vue": "^3.4.0", + "vue-router": "^4.3.0", + "axios": "^1.7.0", + "element-plus": "^2.7.0", + "vxe-table": "^4.7.0", + "echarts": "^5.5.0", + "pinia": "^2.1.0" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^5.0.0", + "vite": "^5.4.0", + "sass": "^1.77.0" + } +} diff --git a/healthlink-his-mobile/src/App.vue b/healthlink-his-mobile/src/App.vue new file mode 100644 index 000000000..98240aef8 --- /dev/null +++ b/healthlink-his-mobile/src/App.vue @@ -0,0 +1,3 @@ + diff --git a/healthlink-his-mobile/src/api/index.js b/healthlink-his-mobile/src/api/index.js new file mode 100644 index 000000000..dec108d3e --- /dev/null +++ b/healthlink-his-mobile/src/api/index.js @@ -0,0 +1,29 @@ +import axios from 'axios' + +const request = axios.create({ + baseURL: '/healthlink-his/api/v1', + timeout: 10000 +}) + +request.interceptors.request.use(config => { + const token = localStorage.getItem('token') + if (token) config.headers.Authorization = `Bearer ${token}` + return config +}) + +request.interceptors.response.use( + res => res.data, + err => { console.error(err); return Promise.reject(err) } +) + +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}`), + 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) +} + +export default request diff --git a/healthlink-his-mobile/src/main.js b/healthlink-his-mobile/src/main.js new file mode 100644 index 000000000..2df3d027e --- /dev/null +++ b/healthlink-his-mobile/src/main.js @@ -0,0 +1,13 @@ +import { createApp } from 'vue' +import { createPinia } from 'pinia' +import ElementPlus from 'element-plus' +import 'element-plus/dist/index.css' +import App from './App.vue' +import router from './router' +import './styles/mobile.css' + +const app = createApp(App) +app.use(createPinia()) +app.use(router) +app.use(ElementPlus, { size: 'large' }) +app.mount('#app') diff --git a/healthlink-his-mobile/src/router/index.js b/healthlink-his-mobile/src/router/index.js new file mode 100644 index 000000000..de91e352d --- /dev/null +++ b/healthlink-his-mobile/src/router/index.js @@ -0,0 +1,16 @@ +import { createRouter, createWebHistory } from 'vue-router' + +const routes = [ + { path: '/', redirect: '/mobile/tasks' }, + { path: '/mobile', component: () => import('../views/MobileLayout.vue'), children: [ + { 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: 'assessment/:patientId', component: () => import('../views/AssessmentForm.vue'), meta: { title: '护理评估' } }, + { path: 'mine', component: () => import('../views/Mine.vue'), meta: { title: '我的' } } + ]} +] + +const router = createRouter({ history: createWebHistory(), routes }) +export default router diff --git a/healthlink-his-mobile/src/styles/mobile.css b/healthlink-his-mobile/src/styles/mobile.css new file mode 100644 index 000000000..6df6d0b8d --- /dev/null +++ b/healthlink-his-mobile/src/styles/mobile.css @@ -0,0 +1,6 @@ +* { margin: 0; padding: 0; box-sizing: border-box; } +html, body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; font-size: 16px; color: #333; background: #f5f5f5; -webkit-font-smoothing: antialiased; } +:root { --primary: #1890ff; --success: #52c41a; --warning: #fa8c16; --danger: #f5222d; --bg: #f5f5f5; --card: #fff; --border: #e8e8e8; } +input, button, textarea { font-family: inherit; font-size: inherit; } +button { cursor: pointer; -webkit-tap-highlight-color: transparent; } +::-webkit-scrollbar { display: none; } diff --git a/healthlink-his-mobile/src/views/AssessmentForm.vue b/healthlink-his-mobile/src/views/AssessmentForm.vue new file mode 100644 index 000000000..cd1c6f8a2 --- /dev/null +++ b/healthlink-his-mobile/src/views/AssessmentForm.vue @@ -0,0 +1,89 @@ + + + + + diff --git a/healthlink-his-mobile/src/views/Mine.vue b/healthlink-his-mobile/src/views/Mine.vue new file mode 100644 index 000000000..6a7278902 --- /dev/null +++ b/healthlink-his-mobile/src/views/Mine.vue @@ -0,0 +1,33 @@ + + + + + diff --git a/healthlink-his-mobile/src/views/MobileLayout.vue b/healthlink-his-mobile/src/views/MobileLayout.vue new file mode 100644 index 000000000..aa8a3b7fb --- /dev/null +++ b/healthlink-his-mobile/src/views/MobileLayout.vue @@ -0,0 +1,42 @@ + + + + + diff --git a/healthlink-his-mobile/src/views/PatientDetail.vue b/healthlink-his-mobile/src/views/PatientDetail.vue new file mode 100644 index 000000000..017cc2a0a --- /dev/null +++ b/healthlink-his-mobile/src/views/PatientDetail.vue @@ -0,0 +1,92 @@ + + + + + diff --git a/healthlink-his-mobile/src/views/PatientList.vue b/healthlink-his-mobile/src/views/PatientList.vue new file mode 100644 index 000000000..b76264c9d --- /dev/null +++ b/healthlink-his-mobile/src/views/PatientList.vue @@ -0,0 +1,47 @@ + + + + + diff --git a/healthlink-his-mobile/src/views/TaskList.vue b/healthlink-his-mobile/src/views/TaskList.vue new file mode 100644 index 000000000..72a3cc0bc --- /dev/null +++ b/healthlink-his-mobile/src/views/TaskList.vue @@ -0,0 +1,62 @@ + + + + + diff --git a/healthlink-his-mobile/src/views/VitalSignEntry.vue b/healthlink-his-mobile/src/views/VitalSignEntry.vue new file mode 100644 index 000000000..9b01679e0 --- /dev/null +++ b/healthlink-his-mobile/src/views/VitalSignEntry.vue @@ -0,0 +1,69 @@ + + + + + diff --git a/healthlink-his-mobile/vite.config.js b/healthlink-his-mobile/vite.config.js new file mode 100644 index 000000000..a1a0d85b8 --- /dev/null +++ b/healthlink-his-mobile/vite.config.js @@ -0,0 +1,19 @@ +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' + +export default defineConfig({ + plugins: [vue()], + server: { + port: 82, + proxy: { + '/healthlink-his': { + target: 'http://localhost:18082', + changeOrigin: true + } + } + }, + build: { + outDir: 'dist', + assetsDir: 'assets' + } +})