diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9ae98fc --- /dev/null +++ b/.gitignore @@ -0,0 +1,29 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +package-lock.json +node_modules +.DS_Store +dist +dist-ssr +coverage +*.local + +/cypress/videos/ +/cypress/screenshots/ + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/README.md b/README.md index a8bace8..618120e 100644 --- a/README.md +++ b/README.md @@ -1,39 +1,10 @@ # rax-medical - -#### 介绍 -{**以下是 Gitee 平台说明,您可以替换此简介** -Gitee 是 OSCHINA 推出的基于 Git 的代码托管平台(同时支持 SVN)。专为开发者提供稳定、高效、安全的云端软件开发协作平台 -无论是个人、团队、或是企业,都能够用 Gitee 实现代码托管、项目管理、协作开发。企业项目请看 [https://gitee.com/enterprises](https://gitee.com/enterprises)} - -#### 软件架构 -软件架构说明 - - -#### 安装教程 - -1. xxxx -2. xxxx -3. xxxx - -#### 使用说明 - -1. xxxx -2. xxxx -3. xxxx - -#### 参与贡献 - -1. Fork 本仓库 -2. 新建 Feat_xxx 分支 -3. 提交代码 -4. 新建 Pull Request - - -#### 特技 - -1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md -2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) -3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 -4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 -5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) -6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) +```bash +# vue安装启动 +npm i +npm run serve +# node服务安装启动 +cd node-server +npm i +node index.js +``` \ No newline at end of file diff --git a/env.d.ts b/env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/env.d.ts @@ -0,0 +1 @@ +/// diff --git a/index.html b/index.html new file mode 100644 index 0000000..6cb0bdd --- /dev/null +++ b/index.html @@ -0,0 +1,12 @@ + + + + + + + + +
+ + + diff --git a/node-server/README.md b/node-server/README.md new file mode 100644 index 0000000..3a4c187 --- /dev/null +++ b/node-server/README.md @@ -0,0 +1,7 @@ +# rax-medical +## node-server +123.57.147.184 +Xg137839 + + + diff --git a/node-server/core/AIMedicineTable.js b/node-server/core/AIMedicineTable.js new file mode 100644 index 0000000..015d320 --- /dev/null +++ b/node-server/core/AIMedicineTable.js @@ -0,0 +1,26 @@ +import common from "./common.js"; +const app = common.app; +const connection = common.connection; +const m_get = common.m_get; +const nowTime = common.nowTime; + +const getTable = () => app.post('/getaimedicine', function (req, res) { + const database = req.body.database; + const table = `AIMedicineTable`; + const order = `ID`; + const Clause = false; + const start = ~~req.body.start; + const end = ~~req.body.end; + connection(database).query(m_get(table, Clause, order, start, end), function (error, results, fields) { + if (error) { + console.log(`${nowTime()} 错误:${JSON.stringify(error)}`); + return res.status(500).send(error); + } else { + res.send(results); + } + }); +}); + +export default { + getTable +}; diff --git a/node-server/core/common.js b/node-server/core/common.js new file mode 100644 index 0000000..8574bf4 --- /dev/null +++ b/node-server/core/common.js @@ -0,0 +1,78 @@ + +import express from "express"; +import mysql from "mysql"; +/** + * 401 需要跳转登录验证 + * 500 接口错误 + */ +const app = express(); +// 连接 mysql 数据库 +const connection = (database) => { + return mysql.createConnection({ + host: '123.57.147.184', + port: '3306', + user: 'root', + password: 'Xg137839', + database: database || 'zhangxinhe' + }); +} + +// 查询数据方法 SELECT * FROM table +const m_get = (table, Clause, order, start, end) => { + return `SELECT * FROM ${table} ${Clause ? 'WHERE ' + Clause : ``} ORDER BY ${order || `ID`} DESC ${!end ? `` : `LIMIT ` + start + `,` + end};` +} +// 插入数据方法 INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN ); +const m_add = (table, field, value) => { + return `INSERT INTO ${table} ( ${field} ) VALUES ( ${value} );` +} +// 更新数据方法 UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause] +const m_update = (table, data, Clause) => { + return `UPDATE ${table} SET ${data} WHERE ${Clause};` +} +// 删除数据方法 DELETE FROM table_name [WHERE Clause] +const m_delete = (table, Clause) => { + return `DELETE FROM ${table} WHERE ${Clause};` +} + +const nowTime = () => { + const now = new Date(); + const year = now.getFullYear(); + const month = now.getMonth(); + const date = now.getDate() >= 10 ? now.getDate() : ('0' + now.getDate()); + const hour = now.getHours() >= 10 ? now.getHours() : ('0' + now.getHours()); + const miu = now.getMinutes() >= 10 ? now.getMinutes() : ('0' + now.getMinutes()); + const sec = now.getSeconds() >= 10 ? now.getSeconds() : ('0' + now.getSeconds()); + return +year + "-" + (month + 1) + "-" + date + " " + hour + ":" + miu + ":" + sec; +} + +/** + * 格式化时间 + * @returns + */ +const dateFormater = (formater, time) => { + let date = time ? new Date(time) : new Date(), + Y = date.getFullYear() + '', + M = date.getMonth() + 1, + D = date.getDate(), + H = date.getHours(), + m = date.getMinutes(), + s = date.getSeconds(); + return formater.replace(/YYYY|yyyy/g, Y) + .replace(/YY|yy/g, Y.substr(2, 2)) + .replace(/MM/g, (M < 10 ? '0' : '') + M) + .replace(/DD|dd/g, (D < 10 ? '0' : '') + D) + .replace(/HH|hh/g, (H < 10 ? '0' : '') + H) + .replace(/mm/g, (m < 10 ? '0' : '') + m) + .replace(/ss/g, (s < 10 ? '0' : '') + s) +} + +export default { + app, + connection, + m_get, + m_add, + m_update, + m_delete, + nowTime, + dateFormater +}; \ No newline at end of file diff --git a/node-server/core/doctorMedicineTable.js b/node-server/core/doctorMedicineTable.js new file mode 100644 index 0000000..979309b --- /dev/null +++ b/node-server/core/doctorMedicineTable.js @@ -0,0 +1,26 @@ +import common from "./common.js"; +const app = common.app; +const connection = common.connection; +const m_get = common.m_get; +const nowTime = common.nowTime; + +const getTable = () => app.post('/getdoctormedicine', function (req, res) { + const database = req.body.database; + const table = `DoctorMedicineTable`; + const order = `ID`; + const Clause = false; + const start = ~~req.body.start; + const end = ~~req.body.end; + connection(database).query(m_get(table, Clause, order, start, end), function (error, results, fields) { + if (error) { + console.log(`${nowTime()} 错误:${JSON.stringify(error)}`); + return res.status(500).send(error); + } else { + res.send(results); + } + }); +}); + +export default { + getTable +}; diff --git a/node-server/core/featureTable.js b/node-server/core/featureTable.js new file mode 100644 index 0000000..f2c55f4 --- /dev/null +++ b/node-server/core/featureTable.js @@ -0,0 +1,26 @@ +import common from "./common.js"; +const app = common.app; +const connection = common.connection; +const m_get = common.m_get; +const nowTime = common.nowTime; + +const getTable = () => app.post('/getfeature', function (req, res) { + const database = req.body.database; + const table = `FeatureTable`; + const order = `ID`; + const Clause = false; + const start = ~~req.body.start; + const end = ~~req.body.end; + connection(database).query(m_get(table, Clause, order, start, end), function (error, results, fields) { + if (error) { + console.log(`${nowTime()} 错误:${JSON.stringify(error)}`); + return res.status(500).send(error); + } else { + res.send(results); + } + }); +}); + +export default { + getTable +}; diff --git a/node-server/index.js b/node-server/index.js new file mode 100644 index 0000000..1debc3e --- /dev/null +++ b/node-server/index.js @@ -0,0 +1,33 @@ + +import bodyParser from "body-parser"; +// 解决跨域 +import cors from "cors"; +import common from "./core/common.js"; +import featureTable from "./core/featureTable.js"; +import AIMedicineTable from "./core/AIMedicineTable.js"; +import doctorMedicineTable from "./core/doctorMedicineTable.js"; + +// root/Gao!8636 +const app = common.app; +const connection = common.connection; +const nowTime = common.nowTime; + +//配置ajax跨域请求 +app.use(cors({ + origin: "*", + credentials: true //每次登陆都验证跨域请求,要不会每次报跨域错误 +})); +// 配置 bodyParser +app.use(bodyParser.urlencoded({ extended: false })); +app.use(bodyParser.json()); + +app.listen(3001, () => console.log('服务启动! ' + nowTime())); + +connection().connect(); + +featureTable.getTable(); +AIMedicineTable.getTable(); +doctorMedicineTable.getTable(); + +// MedicineFeadbackInfoTable +// TimingFeadbackInfoTable diff --git a/node-server/package.json b/node-server/package.json new file mode 100644 index 0000000..6f1d79d --- /dev/null +++ b/node-server/package.json @@ -0,0 +1,18 @@ +{ + "name": "server", + "version": "1.0.0", + "description": "", + "main": "index.js", + "type": "module", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "body-parser": "^1.20.2", + "cors": "^2.8.5", + "express": "^4.18.2", + "mysql": "^2.18.1" + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..b2c3528 --- /dev/null +++ b/package.json @@ -0,0 +1,29 @@ +{ + "name": "rax-medical", + "version": "0.0.0", + "private": true, + "scripts": { + "serve": "vite", + "build": "run-p type-check build-only", + "preview": "vite preview", + "build-only": "vite build", + "type-check": "vue-tsc --noEmit" + }, + "dependencies": { + "axios": "^1.3.3", + "sass": "^1.58.3", + "echarts": "^5.4.1", + "element-plus": "2.3.1", + "vue": "^3.2.45", + "vue-router": "^4.1.6" + }, + "devDependencies": { + "@types/node": "^18.11.12", + "@vitejs/plugin-vue": "^4.0.0", + "@vue/tsconfig": "^0.1.3", + "npm-run-all": "^4.1.5", + "typescript": "^5.0.2", + "vite": "^4.0.0", + "vue-tsc": "^1.0.12" + } +} diff --git a/src/assets/css/global.scss b/src/assets/css/global.scss new file mode 100644 index 0000000..35b7388 --- /dev/null +++ b/src/assets/css/global.scss @@ -0,0 +1,306 @@ +$main-color: #006080; + +html, +body { + margin: 0; + padding: 0; + width: 100%; + height: 100%; + overflow: hidden; +} + +span, +p { + word-wrap: break-word; +} + +p, +h3 { + margin: 0; +} + +ul, +li { + margin: 0; + list-style: none; +} + +#app { + width: 100%; + height: 100%; +} + +* { + box-sizing: border-box; +} + +::-webkit-scrollbar { + width: 5px; + height: 5px; + background: transparent; + border-radius: 0; +} + +::-webkit-scrollbar-track-piece { + background-color: transparent; +} + +::-webkit-scrollbar-thumb { + border: 0; + background-color: rgba($main-color, .5); + border-radius: 0; +} + +::-webkit-scrollbar-thumb:hover { + border: 0; + background-color: $main-color; +} + +// 震动 +.shake_1 { + animation: shake_1 .2s ease-out; +} + +@keyframes shake_1 { + 2% { + transform: translate(-.5px, .5px) rotate(-.5deg); + } + + 4% { + transform: translate(2.5px, .5px) rotate(-.5deg); + } + + 6% { + transform: translate(-.5px, 1.5px) rotate(1.5deg); + } + + 8% { + transform: translate(.5px, .5px) rotate(-.5deg); + } + + 10% { + transform: translate(-.5px, -1.5px) rotate(-.5deg); + } + + 12% { + transform: translate(.5px, -.5px) rotate(1.5deg); + } + + 14% { + transform: translate(1.5px, 2.5px) rotate(-.5deg); + } + + 16% { + transform: translate(-.5px, -.5px) rotate(.5deg); + } + + 18% { + transform: translate(2.5px, .5px) rotate(.5deg); + } + + 20% { + transform: translate(.5px, -1.5px) rotate(-.5deg); + } + + 22% { + transform: translate(2.5px, 2.5px) rotate(-.5deg); + } + + 24% { + transform: translate(2.5px, 1.5px) rotate(1.5deg); + } + + 26% { + transform: translate(.5px, 1.5px) rotate(-.5deg); + } + + 28% { + transform: translate(1.5px, .5px) rotate(.5deg); + } + + 30% { + transform: translate(-1.5px, 2.5px) rotate(1.5deg); + } + + 32% { + transform: translate(.5px, .5px) rotate(.5deg); + } + + 34% { + transform: translate(.5px, 1.5px) rotate(1.5deg); + } + + 36% { + transform: translate(2.5px, -.5px) rotate(1.5deg); + } + + 38% { + transform: translate(.5px, 1.5px) rotate(1.5deg); + } + + 40% { + transform: translate(2.5px, 1.5px) rotate(1.5deg); + } + + 42% { + transform: translate(2.5px, -1.5px) rotate(.5deg); + } + + 44% { + transform: translate(.5px, -.5px) rotate(.5deg); + } + + 46% { + transform: translate(1.5px, -1.5px) rotate(.5deg); + } + + 48% { + transform: translate(-1.5px, -.5px) rotate(.5deg); + } + + 50% { + transform: translate(2.5px, -1.5px) rotate(1.5deg); + } + + 52% { + transform: translate(.5px, 1.5px) rotate(.5deg); + } + + 54% { + transform: translate(2.5px, -.5px) rotate(.5deg); + } + + 56% { + transform: translate(2.5px, 2.5px) rotate(.5deg); + } + + 58% { + transform: translate(2.5px, 1.5px) rotate(-.5deg); + } + + 60% { + transform: translate(1.5px, 1.5px) rotate(-.5deg); + } + + 62% { + transform: translate(-.5px, .5px) rotate(-.5deg); + } + + 64% { + transform: translate(2.5px, 1.5px) rotate(-.5deg); + } + + 66% { + transform: translate(-1.5px, .5px) rotate(1.5deg); + } + + 68% { + transform: translate(1.5px, -1.5px) rotate(.5deg); + } + + 70% { + transform: translate(.5px, .5px) rotate(-.5deg); + } + + 72% { + transform: translate(-.5px, 1.5px) rotate(1.5deg); + } + + 74% { + transform: translate(-1.5px, 1.5px) rotate(1.5deg); + } + + 76% { + transform: translate(2.5px, -.5px) rotate(.5deg); + } + + 78% { + transform: translate(2.5px, 2.5px) rotate(.5deg); + } + + 80% { + transform: translate(-1.5px, 2.5px) rotate(.5deg); + } + + 82% { + transform: translate(-1.5px, -.5px) rotate(.5deg); + } + + 84% { + transform: translate(.5px, 1.5px) rotate(-.5deg); + } + + 86% { + transform: translate(-.5px, 2.5px) rotate(.5deg); + } + + 88% { + transform: translate(2.5px, 2.5px) rotate(1.5deg); + } + + 90% { + transform: translate(-.5px, -1.5px) rotate(-.5deg); + } + + 92% { + transform: translate(1.5px, .5px) rotate(.5deg); + } + + 94% { + transform: translate(-.5px, -.5px) rotate(.5deg); + } + + 96% { + transform: translate(1.5px, .5px) rotate(1.5deg); + } + + 98% { + transform: translate(.5px, -.5px) rotate(1.5deg); + } + + 0%, + 100% { + transform: translate(0, 0) rotate(0); + } +} + +.el-select-dropdown__item.selected { + color: #006080; +} +.el-select { + --el-select-input-focus-border-color: #006080; +} +.el-dialog { + .el-dialog__header { + .el-dialog__headerbtn:focus .el-dialog__close, + .el-dialog__headerbtn:hover .el-dialog__close { + color: #006080; + } + } + .el-dialog__body { + padding: 10px 20px; + } + .el-button { + --el-button-hover-text-color: #006080; + --el-button-hover-bg-color: rgba(0, 96, 128, .1); + --el-button-hover-border-color: rgba(0, 96, 128, .8); + --el-button-active-text-color: #006080; + --el-button-active-border-color: rgba(0, 96, 128, .8); + --el-button-active-bg-color: rgba(0, 96, 128, .1); + } + + .el-button--primary { + --el-button-text-color: white; + --el-button-bg-color: #006080; + --el-button-border-color: #006080; + --el-button-outline-color: rgba(0, 96, 128, .5); + --el-button-active-color: rgba(0, 96, 128, .8); + --el-button-hover-text-color: white; + --el-button-hover-link-text-color: rgba(0, 96, 128, .5); + --el-button-hover-bg-color: rgba(0, 96, 128, .7); + --el-button-hover-border-color: rgba(0, 96, 128, .7); + --el-button-active-bg-color: rgba(0, 96, 128, .8); + --el-button-active-border-color: rgba(0, 96, 128, .8); + } + +} \ No newline at end of file diff --git a/src/assets/imgs/heart.png b/src/assets/imgs/heart.png new file mode 100644 index 0000000..6960932 Binary files /dev/null and b/src/assets/imgs/heart.png differ diff --git a/src/assets/imgs/heart_alarm.png b/src/assets/imgs/heart_alarm.png new file mode 100644 index 0000000..ed3ea62 Binary files /dev/null and b/src/assets/imgs/heart_alarm.png differ diff --git a/src/assets/imgs/logo.png b/src/assets/imgs/logo.png new file mode 100644 index 0000000..051d707 Binary files /dev/null and b/src/assets/imgs/logo.png differ diff --git a/src/assets/imgs/lung.png b/src/assets/imgs/lung.png new file mode 100644 index 0000000..d646a6f Binary files /dev/null and b/src/assets/imgs/lung.png differ diff --git a/src/assets/imgs/lung_alarm.png b/src/assets/imgs/lung_alarm.png new file mode 100644 index 0000000..8637833 Binary files /dev/null and b/src/assets/imgs/lung_alarm.png differ diff --git a/src/assets/imgs/main_body.png b/src/assets/imgs/main_body.png new file mode 100644 index 0000000..5480a3a Binary files /dev/null and b/src/assets/imgs/main_body.png differ diff --git a/src/assets/imgs/main_body_copy.png b/src/assets/imgs/main_body_copy.png new file mode 100644 index 0000000..f54d9a1 Binary files /dev/null and b/src/assets/imgs/main_body_copy.png differ diff --git a/src/assets/imgs/menu_1.png b/src/assets/imgs/menu_1.png new file mode 100644 index 0000000..d211536 Binary files /dev/null and b/src/assets/imgs/menu_1.png differ diff --git a/src/assets/imgs/video_bck.png b/src/assets/imgs/video_bck.png new file mode 100644 index 0000000..cc1a870 Binary files /dev/null and b/src/assets/imgs/video_bck.png differ diff --git a/src/assets/medical.mp4 b/src/assets/medical.mp4 new file mode 100644 index 0000000..89fc390 Binary files /dev/null and b/src/assets/medical.mp4 differ diff --git a/src/assets/微信图片_20231109085813.png b/src/assets/微信图片_20231109085813.png new file mode 100644 index 0000000..c5bc01c Binary files /dev/null and b/src/assets/微信图片_20231109085813.png differ diff --git a/src/axios/index.js b/src/axios/index.js new file mode 100644 index 0000000..6c4847f --- /dev/null +++ b/src/axios/index.js @@ -0,0 +1,17 @@ +import axios from "axios"; + +// const HOST = 'http://127.0.0.1:3001'; +const HOST = 'http://123.57.183.183:3001'; + +export const get = (url, params, success) => { + axios.get(HOST + url, params) + .then(res => { + success(res); + }); +}; +export const post = (url, params, success) => { + axios.post(HOST + url, params) + .then(res => { + success(res); + }); +}; \ No newline at end of file diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..e4672a1 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,21 @@ +import { createApp, defineComponent, ref, reactive } from 'vue' + +import main from './main.vue' +import router from './router' +import ElementPlus from 'element-plus'; +import * as ElementPlusIconsVue from '@element-plus/icons-vue' + + +import 'element-plus/dist/index.css'; +import './assets/css/global.scss'; + +const app = createApp(main) + +app.use(router) + .use(ElementPlus) // ElementPlus 全局引入 + +for (const [key, component] of Object.entries(ElementPlusIconsVue)) { + app.component(key, component) +} + +app.mount('#app') diff --git a/src/main.vue b/src/main.vue new file mode 100644 index 0000000..a139d24 --- /dev/null +++ b/src/main.vue @@ -0,0 +1,13 @@ + + + diff --git a/src/router/index.ts b/src/router/index.ts new file mode 100644 index 0000000..8496be6 --- /dev/null +++ b/src/router/index.ts @@ -0,0 +1,14 @@ +import { createRouter, createWebHistory } from 'vue-router' + +const router = createRouter({ + history: createWebHistory(import.meta.env.BASE_URL), + routes: [ + { + path: '/', + name: '远程管理', + component: () => import('@/views/remote-manage/remote-manage.vue'), + } + ] +}) + +export default router diff --git a/src/views/remote-manage/chart-ecg.vue b/src/views/remote-manage/chart-ecg.vue new file mode 100644 index 0000000..fb7efe2 --- /dev/null +++ b/src/views/remote-manage/chart-ecg.vue @@ -0,0 +1,197 @@ + + + + + diff --git a/src/views/remote-manage/chart-line.vue b/src/views/remote-manage/chart-line.vue new file mode 100644 index 0000000..bb5c2b0 --- /dev/null +++ b/src/views/remote-manage/chart-line.vue @@ -0,0 +1,224 @@ + + + + + diff --git a/src/views/remote-manage/date-util.ts b/src/views/remote-manage/date-util.ts new file mode 100644 index 0000000..e55f586 --- /dev/null +++ b/src/views/remote-manage/date-util.ts @@ -0,0 +1,17 @@ +export function dateFormater(formater: string, time?: any) { + let date = time ? new Date(time) : new Date(), + Y = date.getFullYear() + '', + M = date.getMonth() + 1, + D = date.getDate(), + H = date.getHours(), + m = date.getMinutes(), + s = date.getSeconds(); + return formater + .replace(/YYYY|yyyy/g, Y) + .replace(/YY|yy/g, Y.substr(2, 2)) + .replace(/MM/g, (M < 10 ? '0' : '') + M) + .replace(/DD|dd/g, (D < 10 ? '0' : '') + D) + .replace(/HH|hh/g, (H < 10 ? '0' : '') + H) + .replace(/mm/g, (m < 10 ? '0' : '') + m) + .replace(/ss/g, (s < 10 ? '0' : '') + s); +} diff --git a/src/views/remote-manage/remote-manage.vue b/src/views/remote-manage/remote-manage.vue new file mode 100644 index 0000000..3110f0a --- /dev/null +++ b/src/views/remote-manage/remote-manage.vue @@ -0,0 +1,858 @@ + + + + + diff --git a/tsconfig.config.json b/tsconfig.config.json new file mode 100644 index 0000000..424084a --- /dev/null +++ b/tsconfig.config.json @@ -0,0 +1,8 @@ +{ + "extends": "@vue/tsconfig/tsconfig.node.json", + "include": ["vite.config.*", "vitest.config.*", "cypress.config.*", "playwright.config.*"], + "compilerOptions": { + "composite": true, + "types": ["node"] + } +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..11b3067 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,22 @@ +{ + "extends": "@vue/tsconfig/tsconfig.web.json", + "include": ["env.d.ts", "src/**/*", "src/**/*.vue"], + "compilerOptions": { + "ignoreDeprecations": "5.0", + "allowJs": true, + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + }, + "lib": [ + "es2017", + "dom" + ] + }, + + "references": [ + { + "path": "./tsconfig.config.json" + } + ] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..b2dfd9e --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,23 @@ +import { fileURLToPath, URL } from 'node:url' + +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' + + +// https://vitejs.dev/config/ +export default defineConfig({ + base: '/medical/', + plugins: [vue()], + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)) + } + }, + css:{ + preprocessorOptions:{ + scss:{ + // additionalData: '@import "./src/assets/css/global.scss";' //引入scss文件 + } + } + } +})