commit
144867a5e6
66 changed files with 7037 additions and 0 deletions
-
3.env
-
30.gitignore
-
31README.md
-
1env.d.ts
-
13index.html
-
4875package-lock.json
-
42package.json
-
8postcss.config.js
-
BINpublic/favicon.ico
-
18src/App.vue
-
1src/assets/add.svg
-
1src/assets/avatar.svg
-
31src/assets/base.css
-
1src/assets/container.svg
-
1src/assets/loading.svg
-
BINsrc/assets/logo.png
-
1src/assets/logo.svg
-
10src/assets/main.css
-
1src/assets/menuIcon/n_expe.svg
-
1src/assets/menuIcon/n_home.svg
-
1src/assets/menuIcon/n_liquid.svg
-
1src/assets/menuIcon/n_log.svg
-
1src/assets/menuIcon/s_expe.svg
-
1src/assets/menuIcon/s_home.svg
-
1src/assets/menuIcon/s_liquid.svg
-
1src/assets/menuIcon/s_log.svg
-
1src/assets/photo_icon.svg
-
1src/assets/picture.svg
-
1src/assets/return.svg
-
BINsrc/assets/simpleCard/logo.png
-
BINsrc/assets/simpleCard/remaining_time.png
-
46src/components/HelloWorld.vue
-
6src/eventBus.ts
-
20src/main.ts
-
55src/router/index.ts
-
58src/services/axios.ts
-
108src/services/socket.ts
-
24src/stores/counter.ts
-
0src/stores/index.ts
-
3src/style.css
-
21src/utils/index.ts
-
9src/views/AboutView.vue
-
83src/views/Test.vue
-
98src/views/components/Footer.vue
-
121src/views/components/Header.vue
-
163src/views/components/Liquid.vue
-
103src/views/components/Menu.vue
-
25src/views/components/menu.ts
-
6src/views/expeRecord/index.vue
-
187src/views/graphite/components/AddWaste.vue
-
205src/views/graphite/components/HeatPosition.vue
-
46src/views/graphite/components/TakePickture.vue
-
4src/views/graphite/components/index.ts
-
143src/views/graphite/index.vue
-
63src/views/home/index.vue
-
33src/views/liquidConfig/index.vue
-
10src/views/logRecord/index.vue
-
51src/views/login/index.vue
-
60src/views/login/login.css
-
54src/views/style/simpleCard.css
-
81src/views/style/simpleCardVertical.css
-
12tailwind.config.js
-
12tsconfig.app.json
-
11tsconfig.json
-
18tsconfig.node.json
-
20vite.config.ts
@ -0,0 +1,3 @@ |
|||
VITE_API_HOST=window.location.hostname |
|||
VITE_API_PORT=80 |
|||
VITE_WS_PATH=/api/v1/app/ws/state |
@ -0,0 +1,30 @@ |
|||
# Logs |
|||
logs |
|||
*.log |
|||
npm-debug.log* |
|||
yarn-debug.log* |
|||
yarn-error.log* |
|||
pnpm-debug.log* |
|||
lerna-debug.log* |
|||
|
|||
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? |
|||
|
|||
*.tsbuildinfo |
@ -0,0 +1,31 @@ |
|||
# A1800 |
|||
|
|||
## Project Setup |
|||
|
|||
```sh |
|||
npm install |
|||
``` |
|||
|
|||
### Compile and Hot-Reload for Development |
|||
|
|||
```sh |
|||
npm run dev |
|||
``` |
|||
|
|||
### Type-Check, Compile and Minify for Production |
|||
|
|||
```sh |
|||
npm run build |
|||
``` |
|||
|
|||
## 约定 |
|||
|
|||
目录: |
|||
views: 主要页面 |
|||
components: 子组件 |
|||
services: API接口 |
|||
assets: 资源(图片) |
|||
utils: 实用工具 |
|||
|
|||
.env 环境变量(如IP,Port) |
|||
.env.local 本地环境变量 |
@ -0,0 +1 @@ |
|||
/// <reference types="vite/client" />
|
@ -0,0 +1,13 @@ |
|||
<!DOCTYPE html> |
|||
<html lang=""> |
|||
<head> |
|||
<meta charset="UTF-8"> |
|||
<link rel="icon" href="/favicon.ico"> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> |
|||
<title>石墨消解仪</title> |
|||
</head> |
|||
<body> |
|||
<div id="app"></div> |
|||
<script type="module" src="/src/main.ts"></script> |
|||
</body> |
|||
</html> |
4875
package-lock.json
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,42 @@ |
|||
{ |
|||
"name": "a1800", |
|||
"version": "0.0.0", |
|||
"private": true, |
|||
"type": "module", |
|||
"scripts": { |
|||
"dev": "vite", |
|||
"build": "run-p type-check \"build-only {@}\" --", |
|||
"preview": "vite preview", |
|||
"build-only": "vite build", |
|||
"type-check": "vue-tsc --build" |
|||
}, |
|||
"dependencies": { |
|||
"axios": "^1.7.9", |
|||
"dayjs": "^1.11.13", |
|||
"mitt": "^3.0.1", |
|||
"pinia": "^2.3.0", |
|||
"ramda": "^0.30.1", |
|||
"rxjs": "^7.8.1", |
|||
"vant": "^4.9.16", |
|||
"vue": "^3.5.13", |
|||
"vue-router": "^4.5.0" |
|||
}, |
|||
"devDependencies": { |
|||
"@tsconfig/node22": "^22.0.0", |
|||
"@types/node": "^22.10.2", |
|||
"@types/ramda": "^0.30.2", |
|||
"@types/rx": "^4.1.4", |
|||
"@vitejs/plugin-vue": "^5.2.1", |
|||
"@vitejs/plugin-vue-jsx": "^4.1.1", |
|||
"@vue/tsconfig": "^0.7.0", |
|||
"autoprefixer": "^10.4.20", |
|||
"npm-run-all2": "^7.0.2", |
|||
"postcss": "^8.5.1", |
|||
"postcss-import": "^16.1.0", |
|||
"tailwindcss": "^3.4.17", |
|||
"typescript": "~5.6.3", |
|||
"vite": "^6.0.5", |
|||
"vite-plugin-vue-devtools": "^7.6.8", |
|||
"vue-tsc": "^2.1.10" |
|||
} |
|||
} |
@ -0,0 +1,8 @@ |
|||
export default { |
|||
plugins: { |
|||
'postcss-import': {}, |
|||
'tailwindcss/nesting': {}, |
|||
tailwindcss: {}, |
|||
autoprefixer: {}, |
|||
}, |
|||
} |
@ -0,0 +1,18 @@ |
|||
<script setup lang="ts"> |
|||
import Header from './views/components/Header.vue' |
|||
</script> |
|||
|
|||
<template> |
|||
<div> |
|||
<router-view></router-view> |
|||
</div> |
|||
</template> |
|||
|
|||
<style> |
|||
html, |
|||
body { |
|||
margin: 0; |
|||
padding: 0; |
|||
box-sizing: border-box; |
|||
} |
|||
</style> |
@ -0,0 +1 @@ |
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="28" height="28" viewBox="0 0 28 28"><g><path d="M14.0159,0Q16.9015,0,19.4541,1.09524Q22.0068,2.19048,23.9094,4.09524Q25.812,6,26.906,8.55556Q28,11.1111,28,14Q28,16.9206,26.906,19.4603Q25.812,22,23.9094,23.9048Q22.0068,25.8095,19.4541,26.9048Q16.9015,28,14.0159,28Q11.0985,28,8.54587,26.9048Q5.99321,25.8095,4.0906,23.9048Q2.188,22,1.094,19.4603Q-3.54388e-7,16.9206,0,14Q0,11.1111,1.094,8.55556Q2.188,6,4.0906,4.09524Q5.99321,2.19048,8.54587,1.09524Q11.0985,-8.27842e-7,14.0159,0ZM22.0068,15.9365Q22.8313,15.9365,23.402,15.3492Q23.9728,14.7619,23.9728,13.9365Q23.9728,13.1111,23.402,12.5397Q22.8313,11.9683,22.0068,11.9683L16.0453,11.9683L16.0453,6Q16.0453,5.1746,15.4587,4.5873Q14.872,4,14.0476,4Q13.2231,4,12.6523,4.5873Q12.0815,5.1746,12.0815,6L12.0815,11.9683L6.12005,11.9683Q5.29559,11.9683,4.7248,12.5397Q4.15402,13.1111,4.15402,13.9365Q4.15402,14.7619,4.7248,15.3492Q5.29559,15.9365,6.12005,15.9365L12.0815,15.9365L12.0815,21.873Q12.0815,22.6984,12.6523,23.2857Q13.2231,23.873,14.0476,23.873Q14.872,23.873,15.4587,23.2857Q16.0453,22.6984,16.0453,21.873L16.0453,15.9365L22.0068,15.9365Z" fill="#000000" fill-opacity="1"/></g></svg> |
@ -0,0 +1 @@ |
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="40" height="40" viewBox="0 0 40 40"><defs><clipPath id="master_svg0_609_03555/609_03497"><rect x="8" y="8" width="24" height="24" rx="0"/></clipPath></defs><g><rect x="0" y="0" width="40" height="40" rx="20" fill="#1989FA" fill-opacity="1"/><g clip-path="url(#master_svg0_609_03555/609_03497)"><g><path d="M28.120604907226564,25.896875C27.67840490722656,24.849575,27.03680490722656,23.898375,26.231504907226565,23.096075C25.428604907226564,22.291475,24.47750490722656,21.649974999999998,23.430704907226563,21.207075C23.421304907226563,21.202375,23.41200490722656,21.199975000000002,23.40260490722656,21.195275000000002C24.862704907226565,20.140625,25.812004907226562,18.422655,25.812004907226562,16.484375C25.812004907226562,13.273435,23.21040490722656,10.671875,19.99946490722656,10.671875C16.788524907226563,10.671875,14.186964907226562,13.273435,14.186964907226562,16.484375C14.186964907226562,18.422655,15.136184907226562,20.140625,16.596334907226563,21.197675C16.586964907226562,21.202375,16.577584907226562,21.204675,16.56821490722656,21.209375C15.518214907226563,21.652375,14.576024907226563,22.287475,13.767434907226562,23.098475C12.962844907226563,23.901375,12.321344907226562,24.852475,11.878369907226563,25.899175C11.443186907226563,26.924075,11.208483707226563,28.022775,11.186963515026562,29.135975C11.186337956226563,29.160975,11.190725517226563,29.185875,11.199867807226562,29.209175C11.209010107226563,29.232375,11.222722007226562,29.253675,11.240195707226562,29.271575C11.257669407226562,29.289475,11.278551207226563,29.303675,11.301610907226562,29.313375C11.324669907226562,29.323175,11.349440907226562,29.328175,11.374463907226563,29.328075C11.374463907226563,29.328075,12.780714907226562,29.328075,12.780714907226562,29.328075C12.883834907226563,29.328075,12.965864907226562,29.246075,12.968214907226562,29.145275C13.015084907226562,27.335975,13.741654907226563,25.641375,15.026024907226562,24.357075000000002C16.354934907226564,23.028174999999997,18.119774907226564,22.296875,19.99946490722656,22.296875C21.879104907226562,22.296875,23.644004907226563,23.028174999999997,24.972904907226564,24.357075000000002C26.257304907226562,25.641375,26.983804907226563,27.335975,27.030704907226564,29.145275C27.033104907226562,29.248475,27.115104907226563,29.328075,27.218204907226564,29.328075C27.218204907226564,29.328075,28.624504907226562,29.328075,28.624504907226562,29.328075C28.64950490722656,29.328175,28.674304907226563,29.323175,28.697304907226563,29.313375C28.720404907226563,29.303675,28.741304907226564,29.289475,28.758704907226562,29.271575C28.776204907226564,29.253675,28.789904907226564,29.232375,28.799104907226564,29.209175C28.808204907226564,29.185875,28.81260490722656,29.160975,28.812004907226562,29.135975C28.788504907226564,28.015675,28.55650490722656,26.925775,28.120604907226564,25.896875C28.120604907226564,25.896875,28.120604907226564,25.896875,28.120604907226564,25.896875ZM19.99946490722656,20.515625C18.923684907226562,20.515625,17.911184907226563,20.096095,17.149464907226562,19.334375C16.387744907226562,18.572655,15.968214907226564,17.560155,15.968214907226564,16.484375C15.968214907226564,15.408595,16.387744907226562,14.396094999999999,17.149464907226562,13.634375C17.911184907226563,12.872655,18.923684907226562,12.453125,19.99946490722656,12.453125C21.075244907226562,12.453125,22.087704907226563,12.872655,22.84950490722656,13.634375C23.611204907226565,14.396094999999999,24.030704907226564,15.408595,24.030704907226564,16.484375C24.030704907226564,17.560155,23.611204907226565,18.572655,22.84950490722656,19.334375C22.087704907226563,20.096095,21.075244907226562,20.515625,19.99946490722656,20.515625Z" fill="#FFFFFF" fill-opacity="1"/></g></g></g></svg> |
@ -0,0 +1,31 @@ |
|||
|
|||
*, |
|||
*::before, |
|||
*::after { |
|||
box-sizing: border-box; |
|||
margin: 0; |
|||
padding: 0; |
|||
font-weight: normal; |
|||
} |
|||
|
|||
body { |
|||
min-height: 100vh; |
|||
font-family: |
|||
Inter, |
|||
-apple-system, |
|||
BlinkMacSystemFont, |
|||
'Segoe UI', |
|||
Roboto, |
|||
Oxygen, |
|||
Ubuntu, |
|||
Cantarell, |
|||
'Fira Sans', |
|||
'Droid Sans', |
|||
'Helvetica Neue', |
|||
sans-serif; |
|||
font-size: 16px; |
|||
text-rendering: optimizeLegibility; |
|||
-webkit-font-smoothing: antialiased; |
|||
-moz-osx-font-smoothing: grayscale; |
|||
user-select: none; |
|||
} |
@ -0,0 +1 @@ |
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="59" height="82.99996948242188" viewBox="0 0 59 82.99996948242188"><g><path d="M0,19.6804L0,23.3883C0,23.7034,0.253993,23.9588,0.567308,23.9588C0.880623,23.9588,1.13462,24.2142,1.13462,24.5292L1.13462,26.811C1.13462,27.126,0.880623,27.3814,0.567308,27.3814C0.253993,27.3814,0,27.6368,0,27.9519L0,33.0859C0,33.4009,0.253993,33.6563,0.567308,33.6563C0.880623,33.6563,1.13462,33.9117,1.13462,34.2268L1.13462,36.5086C1.13462,36.8236,0.880623,37.079,0.567308,37.079C0.253993,37.079,0,37.3344,0,37.6495L0,44.4948C0,44.8099,0.253993,45.0653,0.567308,45.0653C0.880623,45.0653,1.13462,45.3207,1.13462,45.6357L1.13462,47.9175C1.13462,48.2326,0.880623,48.488,0.567308,48.488C0.253993,48.488,0,48.7434,0,49.0584L0,55.9038C0,56.2188,0.253993,56.4742,0.567308,56.4742C0.880623,56.4742,1.13462,56.7296,1.13462,57.0446L1.13462,59.3264C1.13462,59.6415,0.880623,59.8969,0.567308,59.8969C0.253993,59.8969,0,60.1523,0,60.4673L0,66.7422C0,67.0573,0.253993,67.3127,0.567308,67.3127C0.880623,67.3127,1.13462,67.5681,1.13462,67.8831L1.13462,70.4501C1.13462,70.7652,0.880623,71.0206,0.567308,71.0206C0.253993,71.0206,0,71.276,0,71.591L0,75.0137C0,79.4244,3.55589,83,7.94231,83L51.0577,83C55.4441,83,59,79.4244,59,75.0137L59,71.591C59,71.276,58.746,71.0206,58.4327,71.0206C58.1194,71.0206,57.8654,70.7652,57.8654,70.4501L57.8654,67.8831C57.8654,67.5681,58.1194,67.3127,58.4327,67.3127C58.746,67.3127,59,67.0573,59,66.7422L59,60.4673C59,60.1523,58.746,59.8969,58.4327,59.8969C58.1194,59.8969,57.8654,59.6415,57.8654,59.3264L57.8654,57.0446C57.8654,56.7296,58.1194,56.4742,58.4327,56.4742C58.746,56.4742,59,56.2188,59,55.9038L59,49.0584C59,48.7434,58.746,48.488,58.4327,48.488C58.1194,48.488,57.8654,48.2326,57.8654,47.9175L57.8654,45.6357C57.8654,45.3207,58.1194,45.0653,58.4327,45.0653C58.746,45.0653,59,44.8099,59,44.4948L59,37.6495C59,37.3344,58.746,37.079,58.4327,37.079C58.1194,37.079,57.8654,36.8236,57.8654,36.5086L57.8654,34.2268C57.8654,33.9117,58.1194,33.6563,58.4327,33.6563C58.746,33.6563,59,33.4009,59,33.0859L59,27.9519C59,27.6368,58.746,27.3814,58.4327,27.3814C58.1194,27.3814,57.8654,27.126,57.8654,26.811L57.8654,24.5292C57.8654,24.2142,58.1194,23.9588,58.4327,23.9588C58.746,23.9588,59,23.7034,59,23.3883L59,19.6804C59,15.2697,55.4441,11.6942,51.0577,11.6942L49.0186,11.6942C48.2009,11.6942,47.7915,10.7001,48.3696,10.1188C50.0908,8.38809,51.0577,6.04079,51.0577,3.59325L51.0577,1.71134C51.0577,0.766193,50.2957,0,49.3558,0L9.64423,0C8.70429,0,7.94231,0.766193,7.94231,1.71134L7.94231,3.59325C7.94231,6.04079,8.90924,8.38809,10.6304,10.1188C11.2086,10.7001,10.7991,11.6942,9.98143,11.6942L7.94231,11.6942C3.55589,11.6942,0,15.2697,0,19.6804Z" fill="#FFFFFF" fill-opacity="1"/></g></svg> |
@ -0,0 +1 @@ |
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="52.5" height="52.5" viewBox="0 0 52.5 52.5"><g><path d="M7.32987,44.3286C6.88858,44.3286,6.4473,44.2182,6.11633,43.8869C5.4544,43.2244,5.4544,42.2306,6.11633,41.5681L11.6324,36.0469C12.2943,35.3843,13.2872,35.3843,13.9492,36.0469C14.6111,36.7094,14.6111,37.7032,13.9492,38.3658L8.43308,43.8869C8.10212,44.1078,7.77115,44.3286,7.32987,44.3286ZM18.031,51.6166C17.9207,51.6166,17.7001,51.6166,17.5898,51.5062C16.7072,51.2853,16.1556,50.402,16.3762,49.5186L18.362,41.8993C18.5827,41.0159,19.4652,40.4638,20.3478,40.6847C21.2304,40.9055,21.782,41.7889,21.5613,42.6723L19.5756,50.2915C19.4652,51.0645,18.8033,51.6166,18.031,51.6166ZM30.9387,52.5C30.1664,52.5,29.5045,52.0583,29.3942,51.2853L27.4084,43.6661C27.1877,42.7827,27.7393,41.8993,28.6219,41.6785C29.5045,41.4576,30.3871,42.0097,30.6077,42.8931L32.5935,50.5124C32.8141,51.3958,32.2625,52.2792,31.3799,52.5L30.9387,52.5ZM42.6327,46.758C42.1915,46.758,41.7502,46.6475,41.4192,46.3163L35.9031,40.7951C35.2412,40.1325,35.2412,39.1387,35.9031,38.4762C36.5651,37.8136,37.558,37.8136,38.2199,38.4762L43.736,43.9974C44.3979,44.6599,44.3979,45.6537,43.736,46.3163C43.5153,46.6475,43.074,46.758,42.6327,46.758ZM49.914,36.0469C49.8036,36.0469,49.583,36.0469,49.4727,35.9364L41.8605,33.9488C40.9779,33.728,40.4263,32.8446,40.6469,31.9612C40.8676,31.0778,41.7502,30.5257,42.6327,30.7465L50.2449,32.7341C51.1275,32.955,51.6791,33.8384,51.4585,34.7218C51.2378,35.4947,50.5759,36.0469,49.914,36.0469ZM43.1843,25.1149C42.4121,25.1149,41.7502,24.6732,41.6398,23.9002C41.4192,23.0168,41.9708,22.1335,42.8534,21.9126L50.4656,19.925C51.3481,19.7041,52.2307,20.2563,52.4513,21.1396C52.672,22.023,52.1204,22.9064,51.2378,23.1273L43.6256,25.1149L43.1843,25.1149ZM39.5437,16.9435C39.1024,16.9435,38.6612,16.8331,38.3302,16.5018C37.6683,15.8393,37.6683,14.8455,38.3302,14.1829L43.8463,8.66175C44.5082,7.99921,45.5011,7.99921,46.163,8.66175C46.825,9.3243,46.825,10.3181,46.163,10.9807L40.6469,16.5018C40.4263,16.8331,39.985,16.9435,39.5437,16.9435ZM32.2625,11.7536C32.1522,11.7536,31.9316,11.7536,31.8212,11.6432C30.9387,11.4223,30.3871,10.539,30.6077,9.65557L32.5935,2.03633C32.8141,1.15294,33.6967,0.600817,34.5793,0.821664C35.4618,1.04251,36.0134,1.9259,35.7928,2.80929L33.9173,10.539C33.6967,11.3119,33.0348,11.7536,32.2625,11.7536ZM23.4368,10.8702C22.6646,10.8702,22.0026,10.4285,21.8923,9.65557L19.9065,2.03633C19.6859,1.15294,20.2375,0.269545,21.1201,0.0486977C22.0026,-0.17215,22.8852,0.379969,23.1058,1.26336L25.0916,8.8826C25.3123,9.76599,24.7607,10.6494,23.8781,10.8702L23.4368,10.8702ZM15.273,14.5142C14.8317,14.5142,14.3904,14.4038,14.0595,14.0725L8.5434,8.55133C7.88148,7.88879,7.88148,6.89497,8.5434,6.23243C9.20533,5.56989,10.1982,5.56989,10.8602,6.23243L16.3762,11.7536C17.0382,12.4162,17.0382,13.41,16.3762,14.0725C16.1556,14.4038,15.7143,14.5142,15.273,14.5142ZM10.0879,21.8022C9.97758,21.8022,9.75694,21.8022,9.64662,21.6918L2.03444,19.7041C1.15187,19.4833,0.60026,18.5999,0.820903,17.7165C1.04155,16.8331,1.92412,16.281,2.80669,16.5018L10.4189,18.4895C11.3014,18.7103,11.853,19.5937,11.6324,20.4771C11.5221,21.2501,10.8602,21.8022,10.0879,21.8022ZM1.59315,32.6237C0.820903,32.6237,0.158973,32.182,0.0486526,31.4091C-0.17199,30.5257,0.379617,29.6423,1.26219,29.4214L8.87437,27.4338C9.75694,27.213,10.6395,27.7651,10.8602,28.6485C11.0808,29.5319,10.5292,30.4152,9.64662,30.6361L2.03444,32.6237L1.59315,32.6237Z" fill="#3E3A39" fill-opacity="1" style="mix-blend-mode:passthrough"/></g></svg> |
After Width: 192 | Height: 40 | Size: 2.4 KiB |
@ -0,0 +1 @@ |
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 261.76 226.69"><path d="M161.096.001l-30.225 52.351L100.647.001H-.005l130.877 226.688L261.749.001z" fill="#41b883"/><path d="M161.096.001l-30.225 52.351L100.647.001H52.346l78.526 136.01L209.398.001z" fill="#34495e"/></svg> |
@ -0,0 +1,10 @@ |
|||
@import './base.css'; |
|||
:root { |
|||
--globe-proportion: 0.4; /* 定义主色调 */ |
|||
} |
|||
#app { |
|||
height: calc(1840px * 0.4); |
|||
width: calc(2800px * 0.4); |
|||
overflow: hidden; |
|||
background: #e9e9e9; |
|||
} |
@ -0,0 +1 @@ |
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="80" height="80" viewBox="0 0 80 80"><g><g><ellipse cx="40" cy="40" rx="40" ry="40" fill="#EEEFF8" fill-opacity="1"/></g><g><path d="M54.037,56.006L28.80688,56.006C27.22599,56.006,25.93399,54.6781,25.93399,53.0441C25.93399,51.6375,26.888939999999998,50.4627,28.16489,50.1565L28.16489,21.0455056C25.82164,21.380591,24,23.46143,24,25.96836L24,53.0523C24,55.7785,26.15066,58,28.79886,58L54.037,58C54.5706,58,55,57.5574,55,57.0072C55.004000000000005,56.457,54.5706,56.006,54.037,56.006ZM42.742000000000004,37.799800000000005L41.847300000000004,37.799800000000005L41.847300000000004,39.1815L40.5031,39.1815L40.5031,40.1081L41.847300000000004,40.1081L41.847300000000004,41.4898L42.742000000000004,41.4898L42.742000000000004,40.1081L44.090199999999996,40.1081L44.090199999999996,39.1815L42.742000000000004,39.1815L42.742000000000004,37.799800000000005ZM44.090199999999996,29.05031L40.5031,29.05031L40.5031,33.3775L39.2994,35.6817C39.817,35.5824,40.334599999999995,35.5617,40.852199999999996,35.6155C42.2605,35.7644,42.569500000000005,36.8814,44.4393,36.8814C44.985,36.8814,45.4384,36.8193,45.807500000000005,36.6952L44.090199999999996,33.3981L44.090199999999996,29.05031ZM53.2425,21L30.09086,21L30.09086,50.1276L30.5563,50.1276C30.612470000000002,50.1358,30.67266,50.1358,30.73284,50.1358L53.2425,50.1358C54.125299999999996,50.1358,54.8475,49.3912,54.8475,48.4811L54.8475,22.65888C54.8515,21.744634,54.125299999999996,21.000000315617,53.2425,21ZM49.3224,42.424800000000005C49.1619,42.6978,48.881,42.8674,48.5721,42.875699999999995L36.0212,42.875699999999995C35.7042,42.875699999999995,35.4113,42.7061,35.2508,42.424800000000005C35.0903,42.1435,35.082300000000004,41.8001,35.2348,41.5105L39.5963,33.2161L39.5963,29.05031L38.5089,29.05031C38.2521,29.05031,38.0475,28.8352,38.0475,28.57457C38.0475,28.309820000000002,38.2561,28.09884,38.5089,28.09884L46.0643,28.09884C46.3211,28.09884,46.5257,28.31395,46.5257,28.57457C46.5257,28.83933,46.317099999999996,29.05031,46.0643,29.05031L44.9769,29.05031L44.9769,33.2203L46.561800000000005,36.231899999999996L49.3425,41.5105C49.490899999999996,41.8001,49.4869,42.1434,49.3224,42.424800000000005Z" fill="#4F85FB" fill-opacity="1" style="mix-blend-mode:passthrough"/></g></g></svg> |
@ -0,0 +1 @@ |
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="80" height="80" viewBox="0 0 80 80"><g><g><ellipse cx="40" cy="40" rx="40" ry="40" fill="#EEEFF8" fill-opacity="1"/></g><g><path d="M20.0370799,43.6256C20.866486,47.6246,22.91091,51.222300000000004,25.94731,54.0277C26.3526,54.4028,26.9106,54.5752,27.46181,54.4956C28.0134,54.4165,28.49784,54.0943,28.77694,53.6208L31.1482,49.591300000000004C31.5442,48.9178,31.451999999999998,48.070499999999996,30.92,47.4942C29.68039,46.1482,28.77662,44.537800000000004,28.28009,42.7903C28.06083,42.015,27.34183,41.4784,26.52231,41.4784L21.82395,41.4784C21.27636,41.4781,20.757754,41.7198,20.411853,42.1363C20.0647341,42.552,19.9270634,43.0991,20.0370799,43.6256ZM44.1657,51.909C43.7696,51.233000000000004,42.9726,50.8869,42.1963,51.053799999999995C40.231899999999996,51.4761,38.1899,51.3965,36.2658,50.8227C35.453900000000004,50.580600000000004,34.579,50.9191,34.1541,51.6398L31.8262,55.5982C31.5578,56.055,31.5084,56.6046,31.691000000000003,57.1004C31.872999999999998,57.5967,32.2697,57.9884,32.7742,58.1703C34.9795,58.9695,37.3089,59.375,39.695,59.375C41.6678,59.375,43.6156,59.0954,45.482600000000005,58.543C46.0156,58.3847,46.446,57.9968,46.652,57.4891C46.8572,56.9806,46.814099999999996,56.408,46.535,55.9346L44.1657,51.909ZM52.5476,24.57127C52.2201,24.3027,51.806799999999996,24.15552,51.379999999999995,24.15542C51.2742,24.15542,51.1663,24.166330000000002,51.060500000000005,24.18424C50.531,24.2771,50.0703,24.59457,49.8016,25.05176L47.4685,29.01324C47.045100000000005,29.73472,47.183499999999995,30.6473,47.802800000000005,31.2165C49.39,32.6707,50.5347,34.5286,51.1096,36.5833C51.3275,37.3604,52.0476,37.8989,52.8691,37.899100000000004L57.568,37.899100000000004C58.1145,37.8988,58.6321,37.658,58.9784,37.2432C59.3258,36.8281,59.464,36.2815,59.3546,35.7553C58.4579,31.3953,56.0407,27.42316,52.5476,24.57127ZM46.652,21.88784C46.446600000000004,21.37975,46.0159,20.99153,45.482600000000005,20.833661C43.6053,20.279568,41.6553,19.99869145,39.695,20.00000417001C37.3089,20.00000417001,34.9795,20.405219,32.7742,21.20446C31.714199999999998,21.58978,31.262,22.8179,31.8262,23.77903L34.1541,27.73687C34.579,28.457549999999998,35.453900000000004,28.79609,36.2658,28.55402C37.3775,28.22171,38.5332,28.05317,39.6953,28.05394C40.530100000000004,28.05394,41.372299999999996,28.14349,42.1963,28.32119C42.9721,28.48767,43.7685,28.14262,44.1657,27.46794L46.5353,23.44182C46.8143,22.96858,46.857299999999995,22.39608,46.652,21.88784ZM57.568,41.4781L52.8691,41.4781C52.0475,41.477599999999995,51.327,42.0163,51.1096,42.7936C50.5345,44.848299999999995,49.3898,46.7063,47.802800000000005,48.160799999999995C47.1834,48.729,47.0449,49.6411,47.4685,50.3618L49.8016,54.3249C50.07,54.7824,50.5309,55.1001,51.060500000000005,55.1927C51.1663,55.2106,51.2742,55.2196,51.379999999999995,55.2196C51.8066,55.2202,52.2199,55.0737,52.5476,54.8057C56.0407,51.9518,58.4579,47.9814,59.3546,43.622C59.4641,43.0957,59.3259,42.549099999999996,58.9784,42.134C58.6326,41.718599999999995,58.1147,41.4778,57.568,41.4781ZM20.411568,37.241C20.757316,37.6573,21.27588,37.8989,21.82367,37.8989L26.52259,37.8989C27.34233,37.8986,28.06128,37.361999999999995,28.280369999999998,36.587C28.776699999999998,34.8389,29.68048,33.2279,30.920299999999997,31.8814C31.4524,31.3057,31.544600000000003,30.4588,31.1485,29.785890000000002L28.77722,25.75641C28.49772,25.28303,28.01361,24.96039,27.46209,24.87994C27.37433,24.86765,27.28578,24.86166,27.19713,24.86203C26.73679,24.86203,26.28729,25.03413,25.9476,25.349510000000002C22.91091,28.15468,20.866486,31.7521,20.0370799,35.7513C19.9271883,36.2779,20.0647273,36.825,20.411568,37.241Z" fill="#4F85FB" fill-opacity="1"/></g></g></svg> |
@ -0,0 +1 @@ |
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="80" height="80" viewBox="0 0 80 80"><g><g><ellipse cx="40" cy="40" rx="40" ry="40" fill="#EEEFF8" fill-opacity="1"/></g><g><path d="M30.42768,34.2143L30.42768,52.673C30.42768,53.4027,31.06121,54.0357,31.77429,54.0357L48.5584,54.0357C49.2714,54.0357,49.794,53.4027,49.794,52.673L49.794,34.2143L30.42768,34.2143ZM47.8574,46.726600000000005C47.8574,47.091499999999996,47.5684,47.387299999999996,47.2118,47.387299999999996C46.8553,47.387299999999996,46.5663,47.091499999999996,46.5663,46.726600000000005L46.5663,42.762299999999996C46.5663,42.397400000000005,46.8553,42.101600000000005,47.2118,42.101600000000005C47.5684,42.101600000000005,47.8574,42.397400000000005,47.8574,42.762299999999996L47.8574,46.726600000000005ZM47.2673,40.780100000000004C46.910799999999995,40.780100000000004,46.6218,40.4844,46.6218,40.1194C46.6218,39.7545,46.910799999999995,39.4587,47.2673,39.4587C47.6239,39.4587,47.9129,39.7545,47.9129,40.1194C47.9129,40.484300000000005,47.6239,40.780100000000004,47.2673,40.780100000000004ZM54.7629,21L29.21229,21C24.827023,21,24,23.26509,24,24.28292C26.44097,24.63393,26.55442,24.67522,26.55442,27.318080000000002L26.55442,52.673C26.55442,55.5922,28.92203,58,31.77429,58L48.5383,58C51.3904,58,53.6673,55.5922,53.6673,52.673L53.6673,24.96429C53.6673,23.28368,54.6596,21.803098,54.7579,21.6456C54.856300000000005,21.488186,55,21.331926,55,21.236123C55,21.139411,54.9664,21,54.7629,21ZM51.0851,24.96429L51.0851,52.673C51.0851,54.153,50.081,55.3571,48.679500000000004,55.3571L31.77429,55.3571C30.352719999999998,55.3571,29.136589999999998,54.128,29.136589999999998,52.673L29.136589999999998,27.318080000000002C29.136589999999998,26.34254,29.22487,24.24163,28.8277,23.6877C28.90202,23.62221,29.07898,23.64286,29.19211,23.64286L51.1939,23.64286C51.1345,23.64286,51.0851,24.53474,51.0851,24.96429Z" fill="#4F85FB" fill-opacity="1" style="mix-blend-mode:passthrough"/></g></g></svg> |
@ -0,0 +1 @@ |
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="80" height="80" viewBox="0 0 80 80"><g><g><ellipse cx="40" cy="40" rx="40" ry="40" fill="#EEEFF8" fill-opacity="1"/></g><g><path d="M32,30.00793C32.8,30.00793,33.5,29.30731,33.5,28.506610000000002L33.5,22.50132C33.5,21.700617,32.8,21,32,21C31.2,21,30.5,21.700617,30.5,22.50132L30.5,28.506610000000002C30.5,29.30731,31.2,30.00793,32,30.00793ZM45,30.00793C45.8,30.00793,46.5,29.30731,46.5,28.506610000000002L46.5,22.50132C46.5,21.700617,45.8,21,45,21C44.2,21,43.5,21.700617,43.5,22.50132L43.5,28.506610000000002C43.5,29.30731,44.2,30.00793,45,30.00793ZM40,50.0255C40,45.1212,43,40.8174,47.2,39.0159L28.5,39.0159C27.7,39.0159,27,38.315200000000004,27,37.5145C27,36.7138,27.7,36.0132,28.5,36.0132L47.5,36.0132C48.3,36.0132,49,36.7138,49,37.5145C49,37.9149,48.8,38.215199999999996,48.6,38.5154C49.7,38.215199999999996,50.8,38.015,52,38.015C52.3,38.015,52.7,38.015,53,38.1151L53,29.00705C53,26.80511,51.2,25.00352,49,25.00352L49,28.506610000000002C49,31.0088,47,33.0106,44.5,33.0106C42,33.0106,40,31.0088,40,28.506610000000002L40,25.00352L36,25.00352L36,28.506610000000002C36,31.0088,34,33.0106,31.5,33.0106C29,33.0106,27,31.0088,27,28.506610000000002L27,25.00352C24.8,25.00352,23,26.80511,23,29.00705L23,55.03C23,57.2319,24.8,59.0335,27,59.0335L44.1,59.0335C41.6,56.8315,40,53.6287,40,50.0255ZM37.5,51.026399999999995L28.5,51.026399999999995C27.7,51.026399999999995,27,50.3258,27,49.525099999999995C27,48.7244,27.7,48.0238,28.5,48.0238L37.5,48.0238C38.3,48.0238,39,48.7244,39,49.525099999999995C39,50.3258,38.3,51.026399999999995,37.5,51.026399999999995ZM37.5,45.021100000000004L28.5,45.021100000000004C27.7,45.021100000000004,27,44.320499999999996,27,43.519800000000004C27,42.7191,27.7,42.0185,28.5,42.0185L37.5,42.0185C38.3,42.0185,39,42.7191,39,43.519800000000004C39,44.320499999999996,38.3,45.021100000000004,37.5,45.021100000000004ZM52,41.0176C47,41.0176,43,45.1212,43,50.0255C43,54.9299,47.1,59.0335,52,59.0335C56.9,59.0335,61,54.9299,61,50.0255C61,45.1212,57,41.0176,52,41.0176ZM55.5,53.0282L50.5,53.0282C49.7,53.0282,49,52.327600000000004,49,51.5269L49,45.5216C49,44.7209,49.7,44.0203,50.5,44.0203C51.3,44.0203,52,44.7209,52,45.5216L52,50.0255L55.5,50.0255C56.3,50.0255,57,50.7262,57,51.5269C57,52.327600000000004,56.3,53.0282,55.5,53.0282Z" fill="#4F85FB" fill-opacity="1"/></g></g></svg> |
@ -0,0 +1 @@ |
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="80" height="80" viewBox="0 0 80 80"><g><g><ellipse cx="40" cy="40" rx="40" ry="40" fill="#479CF1" fill-opacity="1"/></g><g><path d="M54.037,56.006L28.80688,56.006C27.22599,56.006,25.93399,54.6781,25.93399,53.0441C25.93399,51.6375,26.888939999999998,50.4627,28.16489,50.1565L28.16489,21.0455056C25.82164,21.380591,24,23.46143,24,25.96836L24,53.0523C24,55.7785,26.15066,58,28.79886,58L54.037,58C54.5706,58,55,57.5574,55,57.0072C55.004000000000005,56.457,54.5706,56.006,54.037,56.006ZM42.742000000000004,37.799800000000005L41.847300000000004,37.799800000000005L41.847300000000004,39.1815L40.5031,39.1815L40.5031,40.1081L41.847300000000004,40.1081L41.847300000000004,41.4898L42.742000000000004,41.4898L42.742000000000004,40.1081L44.090199999999996,40.1081L44.090199999999996,39.1815L42.742000000000004,39.1815L42.742000000000004,37.799800000000005ZM44.090199999999996,29.05031L40.5031,29.05031L40.5031,33.3775L39.2994,35.6817C39.817,35.5824,40.334599999999995,35.5617,40.852199999999996,35.6155C42.2605,35.7644,42.569500000000005,36.8814,44.4393,36.8814C44.985,36.8814,45.4384,36.8193,45.807500000000005,36.6952L44.090199999999996,33.3981L44.090199999999996,29.05031ZM53.2425,21L30.09086,21L30.09086,50.1276L30.5563,50.1276C30.612470000000002,50.1358,30.67266,50.1358,30.73284,50.1358L53.2425,50.1358C54.125299999999996,50.1358,54.8475,49.3912,54.8475,48.4811L54.8475,22.65888C54.8515,21.744634,54.125299999999996,21.000000315617,53.2425,21ZM49.3224,42.424800000000005C49.1619,42.6978,48.881,42.8674,48.5721,42.875699999999995L36.0212,42.875699999999995C35.7042,42.875699999999995,35.4113,42.7061,35.2508,42.424800000000005C35.0903,42.1435,35.082300000000004,41.8001,35.2348,41.5105L39.5963,33.2161L39.5963,29.05031L38.5089,29.05031C38.2521,29.05031,38.0475,28.8352,38.0475,28.57457C38.0475,28.309820000000002,38.2561,28.09884,38.5089,28.09884L46.0643,28.09884C46.3211,28.09884,46.5257,28.31395,46.5257,28.57457C46.5257,28.83933,46.317099999999996,29.05031,46.0643,29.05031L44.9769,29.05031L44.9769,33.2203L46.561800000000005,36.231899999999996L49.3425,41.5105C49.490899999999996,41.8001,49.4869,42.1434,49.3224,42.424800000000005Z" fill="#FFFFFF" fill-opacity="1" style="mix-blend-mode:passthrough"/></g></g></svg> |
@ -0,0 +1 @@ |
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="80" height="80" viewBox="0 0 80 80"><g><g><ellipse cx="40" cy="40" rx="40" ry="40" fill="#479CF1" fill-opacity="1"/></g><g><path d="M20.0370799,43.6256C20.866486,47.6246,22.91091,51.222300000000004,25.94731,54.0277C26.3526,54.4028,26.9106,54.5752,27.46181,54.4956C28.0134,54.4165,28.49784,54.0943,28.77694,53.6208L31.1482,49.591300000000004C31.5442,48.9178,31.451999999999998,48.070499999999996,30.92,47.4942C29.68039,46.1482,28.77662,44.537800000000004,28.28009,42.7903C28.06083,42.015,27.34183,41.4784,26.52231,41.4784L21.82395,41.4784C21.27636,41.4781,20.757754,41.7198,20.411853,42.1363C20.0647341,42.552,19.9270634,43.0991,20.0370799,43.6256ZM44.1657,51.909C43.7696,51.233000000000004,42.9726,50.8869,42.1963,51.053799999999995C40.231899999999996,51.4761,38.1899,51.3965,36.2658,50.8227C35.453900000000004,50.580600000000004,34.579,50.9191,34.1541,51.6398L31.8262,55.5982C31.5578,56.055,31.5084,56.6046,31.691000000000003,57.1004C31.872999999999998,57.5967,32.2697,57.9884,32.7742,58.1703C34.9795,58.9695,37.3089,59.375,39.695,59.375C41.6678,59.375,43.6156,59.0954,45.482600000000005,58.543C46.0156,58.3847,46.446,57.9968,46.652,57.4891C46.8572,56.9806,46.814099999999996,56.408,46.535,55.9346L44.1657,51.909ZM52.5476,24.57127C52.2201,24.3027,51.806799999999996,24.15552,51.379999999999995,24.15542C51.2742,24.15542,51.1663,24.166330000000002,51.060500000000005,24.18424C50.531,24.2771,50.0703,24.59457,49.8016,25.05176L47.4685,29.01324C47.045100000000005,29.73472,47.183499999999995,30.6473,47.802800000000005,31.2165C49.39,32.6707,50.5347,34.5286,51.1096,36.5833C51.3275,37.3604,52.0476,37.8989,52.8691,37.899100000000004L57.568,37.899100000000004C58.1145,37.8988,58.6321,37.658,58.9784,37.2432C59.3258,36.8281,59.464,36.2815,59.3546,35.7553C58.4579,31.3953,56.0407,27.42316,52.5476,24.57127ZM46.652,21.88784C46.446600000000004,21.37975,46.0159,20.99153,45.482600000000005,20.833661C43.6053,20.279568,41.6553,19.99869145,39.695,20.00000417001C37.3089,20.00000417001,34.9795,20.405219,32.7742,21.20446C31.714199999999998,21.58978,31.262,22.8179,31.8262,23.77903L34.1541,27.73687C34.579,28.457549999999998,35.453900000000004,28.79609,36.2658,28.55402C37.3775,28.22171,38.5332,28.05317,39.6953,28.05394C40.530100000000004,28.05394,41.372299999999996,28.14349,42.1963,28.32119C42.9721,28.48767,43.7685,28.14262,44.1657,27.46794L46.5353,23.44182C46.8143,22.96858,46.857299999999995,22.39608,46.652,21.88784ZM57.568,41.4781L52.8691,41.4781C52.0475,41.477599999999995,51.327,42.0163,51.1096,42.7936C50.5345,44.848299999999995,49.3898,46.7063,47.802800000000005,48.160799999999995C47.1834,48.729,47.0449,49.6411,47.4685,50.3618L49.8016,54.3249C50.07,54.7824,50.5309,55.1001,51.060500000000005,55.1927C51.1663,55.2106,51.2742,55.2196,51.379999999999995,55.2196C51.8066,55.2202,52.2199,55.0737,52.5476,54.8057C56.0407,51.9518,58.4579,47.9814,59.3546,43.622C59.4641,43.0957,59.3259,42.549099999999996,58.9784,42.134C58.6326,41.718599999999995,58.1147,41.4778,57.568,41.4781ZM20.411568,37.241C20.757316,37.6573,21.27588,37.8989,21.82367,37.8989L26.52259,37.8989C27.34233,37.8986,28.06128,37.361999999999995,28.280369999999998,36.587C28.776699999999998,34.8389,29.68048,33.2279,30.920299999999997,31.8814C31.4524,31.3057,31.544600000000003,30.4588,31.1485,29.785890000000002L28.77722,25.75641C28.49772,25.28303,28.01361,24.96039,27.46209,24.87994C27.37433,24.86765,27.28578,24.86166,27.19713,24.86203C26.73679,24.86203,26.28729,25.03413,25.9476,25.349510000000002C22.91091,28.15468,20.866486,31.7521,20.0370799,35.7513C19.9271883,36.2779,20.0647273,36.825,20.411568,37.241Z" fill="#FFFFFF" fill-opacity="1"/></g></g></svg> |
@ -0,0 +1 @@ |
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="80" height="80" viewBox="0 0 80 80"><g><g><ellipse cx="40" cy="40" rx="40" ry="40" fill="#479CF1" fill-opacity="1"/></g><g><path d="M30.42768,34.2143L30.42768,52.673C30.42768,53.4027,31.06121,54.0357,31.77429,54.0357L48.5584,54.0357C49.2714,54.0357,49.794,53.4027,49.794,52.673L49.794,34.2143L30.42768,34.2143ZM47.8574,46.726600000000005C47.8574,47.091499999999996,47.5684,47.387299999999996,47.2118,47.387299999999996C46.8553,47.387299999999996,46.5663,47.091499999999996,46.5663,46.726600000000005L46.5663,42.762299999999996C46.5663,42.397400000000005,46.8553,42.101600000000005,47.2118,42.101600000000005C47.5684,42.101600000000005,47.8574,42.397400000000005,47.8574,42.762299999999996L47.8574,46.726600000000005ZM47.2673,40.780100000000004C46.910799999999995,40.780100000000004,46.6218,40.4844,46.6218,40.1194C46.6218,39.7545,46.910799999999995,39.4587,47.2673,39.4587C47.6239,39.4587,47.9129,39.7545,47.9129,40.1194C47.9129,40.484300000000005,47.6239,40.780100000000004,47.2673,40.780100000000004ZM54.7629,21L29.21229,21C24.827023,21,24,23.26509,24,24.28292C26.44097,24.63393,26.55442,24.67522,26.55442,27.318080000000002L26.55442,52.673C26.55442,55.5922,28.92203,58,31.77429,58L48.5383,58C51.3904,58,53.6673,55.5922,53.6673,52.673L53.6673,24.96429C53.6673,23.28368,54.6596,21.803098,54.7579,21.6456C54.856300000000005,21.488186,55,21.331926,55,21.236123C55,21.139411,54.9664,21,54.7629,21ZM51.0851,24.96429L51.0851,52.673C51.0851,54.153,50.081,55.3571,48.679500000000004,55.3571L31.77429,55.3571C30.352719999999998,55.3571,29.136589999999998,54.128,29.136589999999998,52.673L29.136589999999998,27.318080000000002C29.136589999999998,26.34254,29.22487,24.24163,28.8277,23.6877C28.90202,23.62221,29.07898,23.64286,29.19211,23.64286L51.1939,23.64286C51.1345,23.64286,51.0851,24.53474,51.0851,24.96429Z" fill="#FFFFFF" fill-opacity="1" style="mix-blend-mode:passthrough"/></g></g></svg> |
@ -0,0 +1 @@ |
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="80" height="80" viewBox="0 0 80 80"><g><g><ellipse cx="40" cy="40" rx="40" ry="40" fill="#479CF1" fill-opacity="1"/></g><g><path d="M32,30.00793C32.8,30.00793,33.5,29.30731,33.5,28.506610000000002L33.5,22.50132C33.5,21.700617,32.8,21,32,21C31.2,21,30.5,21.700617,30.5,22.50132L30.5,28.506610000000002C30.5,29.30731,31.2,30.00793,32,30.00793ZM45,30.00793C45.8,30.00793,46.5,29.30731,46.5,28.506610000000002L46.5,22.50132C46.5,21.700617,45.8,21,45,21C44.2,21,43.5,21.700617,43.5,22.50132L43.5,28.506610000000002C43.5,29.30731,44.2,30.00793,45,30.00793ZM40,50.0255C40,45.1212,43,40.8174,47.2,39.0159L28.5,39.0159C27.7,39.0159,27,38.315200000000004,27,37.5145C27,36.7138,27.7,36.0132,28.5,36.0132L47.5,36.0132C48.3,36.0132,49,36.7138,49,37.5145C49,37.9149,48.8,38.215199999999996,48.6,38.5154C49.7,38.215199999999996,50.8,38.015,52,38.015C52.3,38.015,52.7,38.015,53,38.1151L53,29.00705C53,26.80511,51.2,25.00352,49,25.00352L49,28.506610000000002C49,31.0088,47,33.0106,44.5,33.0106C42,33.0106,40,31.0088,40,28.506610000000002L40,25.00352L36,25.00352L36,28.506610000000002C36,31.0088,34,33.0106,31.5,33.0106C29,33.0106,27,31.0088,27,28.506610000000002L27,25.00352C24.8,25.00352,23,26.80511,23,29.00705L23,55.03C23,57.2319,24.8,59.0335,27,59.0335L44.1,59.0335C41.6,56.8315,40,53.6287,40,50.0255ZM37.5,51.026399999999995L28.5,51.026399999999995C27.7,51.026399999999995,27,50.3258,27,49.525099999999995C27,48.7244,27.7,48.0238,28.5,48.0238L37.5,48.0238C38.3,48.0238,39,48.7244,39,49.525099999999995C39,50.3258,38.3,51.026399999999995,37.5,51.026399999999995ZM37.5,45.021100000000004L28.5,45.021100000000004C27.7,45.021100000000004,27,44.320499999999996,27,43.519800000000004C27,42.7191,27.7,42.0185,28.5,42.0185L37.5,42.0185C38.3,42.0185,39,42.7191,39,43.519800000000004C39,44.320499999999996,38.3,45.021100000000004,37.5,45.021100000000004ZM52,41.0176C47,41.0176,43,45.1212,43,50.0255C43,54.9299,47.1,59.0335,52,59.0335C56.9,59.0335,61,54.9299,61,50.0255C61,45.1212,57,41.0176,52,41.0176ZM55.5,53.0282L50.5,53.0282C49.7,53.0282,49,52.327600000000004,49,51.5269L49,45.5216C49,44.7209,49.7,44.0203,50.5,44.0203C51.3,44.0203,52,44.7209,52,45.5216L52,50.0255L55.5,50.0255C56.3,50.0255,57,50.7262,57,51.5269C57,52.327600000000004,56.3,53.0282,55.5,53.0282Z" fill="#FFFFFF" fill-opacity="1"/></g></g></svg> |
@ -0,0 +1 @@ |
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="51" height="38" viewBox="0 0 51 38"><g><path d="M34.3172,23.1571Q34.3172,24.7195,33.7294,26.0866Q33.1416,27.4537,32.1339,28.4582Q31.1262,29.4626,29.7827,30.0485Q28.4391,30.6344,26.8716,30.6344Q25.3041,30.6344,23.9605,30.0485Q22.6169,29.4626,21.6092,28.4582Q20.6015,27.4537,20.0137,26.0866Q19.4259,24.7195,19.4259,23.1571Q19.4259,21.6505,20.0137,20.2834Q20.6015,18.9163,21.6092,17.9119Q22.6169,16.9075,23.9605,16.3216Q25.3041,15.7357,26.8716,15.7357Q28.4391,15.7357,29.7827,16.3216Q31.1262,16.9075,32.1339,17.9119Q33.1416,18.9163,33.7294,20.2834Q34.3172,21.6505,34.3172,23.1571ZM6.60593,38Q5.03842,38,3.80681,37.721Q2.57519,37.442,1.73546,36.7724Q0.895719,36.1028,0.44786,34.9589Q0,33.815,0,32.0852L0,13.2247Q0,10.0999,1.48353,8.87225Q2.96707,7.64464,6.15807,7.64464L15.5631,7.64464Q16.4588,7.64464,17.0467,7.30984Q17.6345,6.97504,17.9984,6.41703Q18.3622,5.85903,18.6422,5.10573Q18.9221,4.35242,19.258,3.57122Q19.8178,2.12041,21.2173,1.06021Q22.6169,0,24.4083,0L29.6147,0Q31.6861,0,33.0017,1.14391Q34.3172,2.28781,34.7651,3.57122Q35.3809,5.24523,36.3886,6.44493Q37.3963,7.64464,38.5159,7.64464L45.6257,7.64464Q48.0889,7.58884,49.5445,8.98385Q51,10.3789,51,13.0573L51,32.1968Q51,35.0426,49.4885,36.5213Q47.9769,38,45.4577,38L6.60593,38ZM26.7596,11.4949Q24.2964,11.4949,22.169,12.4156Q20.0417,13.3363,18.4742,14.9266Q16.9067,16.5169,15.983,18.6373Q15.0593,20.7577,15.0593,23.1571Q15.0593,25.6123,15.983,27.7327Q16.9067,29.8532,18.4742,31.4156Q20.0417,32.978,22.169,33.8987Q24.2964,34.8194,26.7596,34.8194Q29.1669,34.8194,31.2942,33.8987Q33.4215,32.978,34.989,31.4156Q36.5565,29.8532,37.4802,27.7327Q38.404,25.6123,38.404,23.1571Q38.404,20.7577,37.4802,18.6373Q36.5565,16.5169,34.989,14.9266Q33.4215,13.3363,31.2942,12.4156Q29.1669,11.4949,26.7596,11.4949ZM30.6784,5.46843Q30.6784,4.57563,30.5944,4.07342Q30.5104,3.57122,29.4468,3.57122L24.8002,3.57122Q23.7366,3.51542,23.6526,4.01762Q23.5686,4.51983,23.5686,5.46843Q23.5126,6.52864,23.6806,6.97504Q23.8485,7.42144,24.8002,7.42144L29.4468,7.42144Q30.5104,7.42144,30.5944,6.91924Q30.6784,6.41704,30.6784,5.46843Z" fill="#FFFFFF" fill-opacity="1" style="mix-blend-mode:passthrough"/></g></svg> |
1
src/assets/picture.svg
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1 @@ |
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="7.811767578125" height="13.949738502502441" viewBox="0 0 7.811767578125 13.949738502502441"><g><path d="M6.97503,13.9497C6.76072,13.9497,6.54649,13.8682,6.38292,13.7048L0.245222,7.56707C-0.0817409,7.24061,-0.0817409,6.71049,0.245222,6.38352L6.38292,0.245222C6.70997,-0.0817406,7.2395,-0.0817406,7.56655,0.245222C7.89351,0.571688,7.89351,1.10181,7.56655,1.42877L2.02088,6.97506L7.56655,12.5206C7.89351,12.8477,7.89351,13.3772,7.56655,13.7043C7.40358,13.8682,7.18925,13.9497,6.97503,13.9497Z" fill="#34495E" fill-opacity="1" style="mix-blend-mode:passthrough"/></g></svg> |
After Width: 192 | Height: 40 | Size: 2.4 KiB |
After Width: 15 | Height: 15 | Size: 435 B |
@ -0,0 +1,46 @@ |
|||
<script setup lang="ts"> |
|||
import { ref } from "vue"; |
|||
import { showToast } from "vant"; |
|||
|
|||
defineProps<{ |
|||
msg: string; |
|||
}>(); |
|||
const value = ref<number>(50); |
|||
const onChange = (value: number) => showToast("当前值:" + value); |
|||
</script> |
|||
|
|||
<template> |
|||
<div class="greetings"> |
|||
<h1 class="green">{{ msg }}</h1> |
|||
<h3> |
|||
You’ve successfully created a project with |
|||
<a href="https://vite.dev/" target="_blank" rel="noopener">Vite</a> + |
|||
<a href="https://vuejs.org/" target="_blank" rel="noopener">Vue 3</a>. What's next? |
|||
</h3> |
|||
<span class="text-lg font-medium">{{ value }}</span> |
|||
<van-slider class="my-8" :step="0.5" v-model="value" @change="onChange" /> |
|||
</div> |
|||
</template> |
|||
|
|||
<style scoped> |
|||
.greetings { |
|||
--van-slider-bar-height: 6px; |
|||
--van-slider-button-width: 32px; |
|||
--van-slider-button-height: 32px; |
|||
} |
|||
h1 { |
|||
font-weight: 500; |
|||
font-size: 2.6rem; |
|||
position: relative; |
|||
top: -10px; |
|||
} |
|||
|
|||
h3 { |
|||
font-size: 1.2rem; |
|||
} |
|||
|
|||
.greetings h1, |
|||
.greetings h3 { |
|||
text-align: center; |
|||
} |
|||
</style> |
@ -0,0 +1,6 @@ |
|||
import mitt from 'mitt' |
|||
type Events = { |
|||
menuId: number, |
|||
} |
|||
|
|||
export const eventBus = mitt<Events>() |
@ -0,0 +1,20 @@ |
|||
import "./style.css"; |
|||
import "./assets/main.css"; |
|||
|
|||
import { createApp } from "vue"; |
|||
import { createPinia } from "pinia"; |
|||
import Vant from "vant"; |
|||
import App from "./App.vue"; |
|||
import router from "./router"; |
|||
import "vant/lib/index.css"; |
|||
|
|||
const app = createApp(App); |
|||
|
|||
app.use(createPinia()); |
|||
app.use(router); |
|||
app.use(Vant); |
|||
|
|||
app.mount("#app"); |
|||
|
|||
console.log("API HOST:", import.meta.env.VITE_API_HOST); |
|||
console.log("API PORT:", import.meta.env.VITE_API_PORT); |
@ -0,0 +1,55 @@ |
|||
import { createRouter, createWebHistory } from 'vue-router' |
|||
const router = createRouter({ |
|||
history: createWebHistory(import.meta.env.BASE_URL), |
|||
routes: [ |
|||
{ |
|||
path: '/', |
|||
name: 'login', |
|||
//@ts-ignore
|
|||
component: () => import('../views/login/index.vue'), |
|||
}, |
|||
{ |
|||
path: '/test', |
|||
name: 'test', |
|||
component: () => import('../views/Test.vue'), |
|||
}, |
|||
{ |
|||
path: '/home', |
|||
name: 'home', |
|||
// route level code-splitting
|
|||
// this generates a separate chunk (About.[hash].js) for this route
|
|||
// which is lazy-loaded when the route is visited.
|
|||
component: () => import('../views/home/index.vue'), |
|||
children:[ |
|||
{ |
|||
path: '/graphite', |
|||
name: 'graphite', |
|||
component: () => import('../views/graphite/index.vue'), |
|||
}, |
|||
{ |
|||
path: '/logRecords', |
|||
name: 'logRecords', |
|||
component: () => import('../views/logRecord/index.vue'), |
|||
}, |
|||
{ |
|||
path: '/expeRecords', |
|||
name: 'expeRecords', |
|||
component: () => import('../views/expeRecord/index.vue'), |
|||
}, |
|||
{ |
|||
path: '/liquidConfig', |
|||
name: 'liquidConfig', |
|||
component: () => import('../views/liquidConfig/index.vue'), |
|||
}, |
|||
|
|||
|
|||
] |
|||
|
|||
|
|||
}, |
|||
|
|||
|
|||
], |
|||
}) |
|||
|
|||
export default router |
@ -0,0 +1,58 @@ |
|||
import axios from "axios"; |
|||
|
|||
const url = `${window.location.protocol}://${import.meta.env.VITE_API_HOST}:${import.meta.env.VITE_API_PORT}`; |
|||
|
|||
const apiClient = axios.create({ |
|||
baseURL: url, // 设置请求的根路径
|
|||
timeout: 60000, |
|||
headers: { |
|||
"Content-Type": "application/json", |
|||
}, |
|||
}); |
|||
|
|||
// 请求拦截器
|
|||
// apiClient.interceptors.request.use(
|
|||
// (config) => {
|
|||
// const token = sessionStorage.getItem("token");
|
|||
// if (!config.headers) {
|
|||
// config.headers = AxiosHeaders.from({}); // 确保 config.headers 是 AxiosHeaders 类型
|
|||
// }
|
|||
|
|||
// if (token) {
|
|||
// config.headers.set("Authorization", `Bearer ${encodeURIComponent(token)}`); // 使用 set 方法设置 Authorization
|
|||
// }
|
|||
|
|||
// return config;
|
|||
// },
|
|||
// error => {
|
|||
// return Promise.reject(error);
|
|||
// }
|
|||
// );
|
|||
|
|||
// 响应拦截器
|
|||
apiClient.interceptors.response.use( |
|||
(response) => { |
|||
if (response.data && response.data.dataType === "ZAppPromopt") { |
|||
if (response.data.ecode === "USR_NOT_EXIT") { |
|||
return Promise.resolve(response.data); |
|||
} else if (response.data.ecode === "USR_PASSWORD_ERROR") { |
|||
return Promise.resolve(response.data); |
|||
} else { |
|||
console.log("接口出错", response.data); |
|||
// eventBus.emit("show-error-modal", response.data.data);
|
|||
return Promise.reject(response.data); |
|||
} |
|||
} |
|||
return response; |
|||
}, |
|||
error => { |
|||
// eventBus.emit("show-error-modal", {
|
|||
// messageLevel: "Error",
|
|||
// title: "网络请求失败",
|
|||
// info: error.message,
|
|||
// });
|
|||
return Promise.reject(error); |
|||
} |
|||
); |
|||
|
|||
export default apiClient; |
@ -0,0 +1,108 @@ |
|||
import { Subject } from "rxjs"; |
|||
|
|||
export type SocketState = 'open' | 'close' | 'error' |
|||
|
|||
class WebSocketClient { |
|||
private ws: WebSocket | null = null; |
|||
private url: string; |
|||
private reconnectAttempts: number = -1; |
|||
private maxReconnectAttempts: number = 5; |
|||
private reconnectInterval: number = 3000; |
|||
|
|||
readonly dataOb = new Subject() |
|||
readonly stateOb = new Subject<SocketState>() |
|||
|
|||
constructor(url: string) { |
|||
this.url = url; |
|||
} |
|||
|
|||
// 连接 WebSocket
|
|||
connect(): void { |
|||
try { |
|||
// WebSocket.CONNECTING (0) WebSocket.OPEN (1)
|
|||
if (this.ws && this.ws.readyState <= 1) { |
|||
// 已连接
|
|||
console.log(`${this.url} 正在连接或已连接,无需重复连接`); |
|||
} else { |
|||
this.ws = new WebSocket(this.url); |
|||
this.bindEvents(); |
|||
} |
|||
} catch (error) { |
|||
console.error("WebSocket 连接失败:", error); |
|||
this.reconnect(); |
|||
} |
|||
} |
|||
|
|||
// 绑定事件
|
|||
private bindEvents(): void { |
|||
if (!this.ws) return; |
|||
|
|||
// 连接建立时的处理
|
|||
this.ws.onopen = () => { |
|||
console.log("WebSocket 连接已建立"); |
|||
this.reconnectAttempts = -1; // 重置重连次数
|
|||
this.stateOb.next('open') |
|||
}; |
|||
|
|||
// 接收消息的处理
|
|||
this.ws.onmessage = (event: MessageEvent) => { |
|||
try { |
|||
const data = JSON.parse(event.data); |
|||
// console.log('🚀 ~ WebSocketClient ~ bindEvents ~ data:', data)
|
|||
this.dataOb.next(data) |
|||
} catch (error) { |
|||
console.error("消息解析错误:", error); |
|||
} |
|||
}; |
|||
|
|||
this.ws.onclose = () => { |
|||
this.stateOb.next('close') |
|||
console.log("WebSocket 连接已关闭"); |
|||
this.reconnect(); |
|||
}; |
|||
|
|||
this.ws.onerror = error => { |
|||
this.stateOb.next('error') |
|||
console.error("WebSocket 错误:", error); |
|||
}; |
|||
} |
|||
|
|||
// 重连机制
|
|||
private reconnect(): void { |
|||
if (this.reconnectAttempts === -1) { |
|||
this.reconnectAttempts = 0; |
|||
} |
|||
if (this.reconnectAttempts >= this.maxReconnectAttempts) { |
|||
console.log("达到最大重连次数,停止重连"); |
|||
this.reconnectAttempts = -1; |
|||
return; |
|||
} |
|||
|
|||
setTimeout(() => { |
|||
console.log(`尝试第 ${this.reconnectAttempts + 1} 次重连...`); |
|||
this.reconnectAttempts++; |
|||
this.connect(); |
|||
}, this.reconnectInterval); |
|||
} |
|||
|
|||
// 关闭连接
|
|||
disconnect(): void { |
|||
if (this.ws) { |
|||
this.ws.close(); |
|||
this.ws = null; |
|||
} |
|||
} |
|||
} |
|||
|
|||
const urlSocketMap = new Map<string, WebSocketClient>(); |
|||
|
|||
// 导出 WebSocket 客户端
|
|||
export const createWebSocket = (url: string): WebSocketClient => { |
|||
if (urlSocketMap.has(url)) { |
|||
return urlSocketMap.get(url)!; |
|||
} else { |
|||
const client = new WebSocketClient(url); |
|||
urlSocketMap.set(url, client); |
|||
return client; |
|||
} |
|||
}; |
@ -0,0 +1,24 @@ |
|||
import { ref, computed } from 'vue' |
|||
import { defineStore } from 'pinia' |
|||
|
|||
export const useCounterStore = defineStore('counter', () => { |
|||
const count = ref(0) |
|||
const doubleCount = computed(() => count.value * 2) |
|||
function increment() { |
|||
count.value++ |
|||
} |
|||
|
|||
return { count, doubleCount, increment } |
|||
}) |
|||
|
|||
|
|||
export const useMenuStore = defineStore('menu', ()=>{ |
|||
const menuId = ref(0) |
|||
const setMenuId = (id:number)=> { |
|||
menuId.value = id |
|||
} |
|||
return { |
|||
menuId, |
|||
setMenuId |
|||
} |
|||
}) |
@ -0,0 +1,3 @@ |
|||
@tailwind base; |
|||
@tailwind components; |
|||
@tailwind utilities; |
@ -0,0 +1,21 @@ |
|||
export function isValidIPv4(ip: string) { |
|||
const ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/; |
|||
return ipv4Regex.test(ip); |
|||
} |
|||
export function formatRemainTime(seconds: number) { |
|||
const min = Math.floor(seconds / 60).toFixed(); |
|||
const sec = (seconds % 60).toFixed(); |
|||
return min.padStart(2, "0") + ":" + sec.padStart(2, "0"); |
|||
} |
|||
|
|||
|
|||
export function getFormattedDateTime() { |
|||
const now = new Date(); |
|||
const year = now.getFullYear(); |
|||
const month = String(now.getMonth() + 1).padStart(2, '0'); |
|||
const day = String(now.getDate()).padStart(2, '0'); |
|||
const hours = String(now.getHours()).padStart(2, '0'); |
|||
const minutes = String(now.getMinutes()).padStart(2, '0'); |
|||
const seconds = String(now.getSeconds()).padStart(2, '0'); |
|||
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; |
|||
} |
@ -0,0 +1,9 @@ |
|||
<template> |
|||
<div class="about"> |
|||
<h1>This is an about page</h1> |
|||
</div> |
|||
</template> |
|||
|
|||
<style> |
|||
|
|||
</style> |
@ -0,0 +1,83 @@ |
|||
<template> |
|||
<div class="test_return"> |
|||
<van-nav-bar |
|||
title="测试页面" |
|||
left-text="返回" |
|||
left-arrow |
|||
@click-left="onReturn" |
|||
/> |
|||
<div class="card"> |
|||
<div v-for="(item, index) in 6" :key="index" class="test_card"> |
|||
{{ item }} |
|||
<div class="test_status"> |
|||
<div class="test_font">开始加样</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
<script lang="ts" setup> |
|||
import { ref } from 'vue' |
|||
import { useRouter } from 'vue-router' |
|||
import {eventBus} from '@/eventBus' |
|||
|
|||
let menuId = ref(1) |
|||
const router = useRouter() |
|||
|
|||
const onReturn = () => { |
|||
menuId.value = 0 |
|||
eventBus.emit("menuId", 0) |
|||
router.go(-1) |
|||
} |
|||
|
|||
const list = [6] |
|||
const cardList = ref(list) |
|||
const simpleCard = ref(cardList) |
|||
</script> |
|||
<style scoped> |
|||
.test_return{ |
|||
background: #ECF2FF; |
|||
.return{ |
|||
display: flex; |
|||
} |
|||
span{ |
|||
font-size: 12px; |
|||
} |
|||
|
|||
.card{ |
|||
display: flex; |
|||
justify-content: flex-start; |
|||
flex-wrap: wrap; |
|||
flex-direction: row; |
|||
} |
|||
|
|||
.test_card{ |
|||
width: 30%; |
|||
height: 110px; |
|||
background: #ffffff; |
|||
margin-top:10px; |
|||
margin-left: 10px; |
|||
text-align: center; |
|||
padding-top:10px; |
|||
border-radius: 5px; |
|||
font-weight: bold; |
|||
} |
|||
|
|||
.test_status{ |
|||
height: 50px; |
|||
background: #1871F8; |
|||
border-radius: 5px; |
|||
margin: 17px 6px; |
|||
.test_font{ |
|||
font-size: 15px; |
|||
color: #FFFFFF; |
|||
padding-top: 14px; |
|||
padding-left: 3px; |
|||
} |
|||
} |
|||
|
|||
|
|||
|
|||
} |
|||
|
|||
</style> |
@ -0,0 +1,98 @@ |
|||
<template> |
|||
<div class="header_ins"> |
|||
<van-icon name="discount-o" size="15" style="padding:5px"/> |
|||
<span class="ins_text text_size">等待指令</span> |
|||
</div> |
|||
|
|||
<div class="footer_waste"> |
|||
<van-popover v-model:show="showContainerPopover" placement="top"> |
|||
<template #reference> |
|||
<div class="footer_container"> |
|||
<div class="circle" style="background-color: #F2652D;"></div> |
|||
<div class="waste_status text_size" style="color:#F2652D">碱中和容器余量低</div> |
|||
<div class="waste_detail"><button class="text_size"><van-icon name="arrow" /></button></div> |
|||
</div> |
|||
</template> |
|||
<div class="liquid"> |
|||
<Liquid></Liquid> |
|||
</div> |
|||
</van-popover> |
|||
</div> |
|||
|
|||
<div class="footer_normal"> |
|||
<van-popover v-model:show="showWastePopover" placement="top-end" class="waste_popover"> |
|||
<template #reference> |
|||
<div class="footer_container"> |
|||
<div class="circle"></div> |
|||
<div class="waste_status text_size">溶液正常</div> |
|||
<div class="waste_detail"><button class="text_size"><van-icon name="arrow" /></button></div> |
|||
</div> |
|||
</template> |
|||
<div> |
|||
<Liquid></Liquid> |
|||
</div> |
|||
</van-popover> |
|||
</div> |
|||
|
|||
</template> |
|||
<script lang="ts" setup> |
|||
import { ref, onMounted } from 'vue' |
|||
import Liquid from './Liquid.vue' |
|||
const showContainerPopover = ref(false) |
|||
const showWastePopover = ref(false) |
|||
|
|||
</script> |
|||
<style scoped> |
|||
.header_ins{ |
|||
display: flex; |
|||
align-items: center; |
|||
border-radius: 5px; |
|||
width: calc(1268px* var(--globe-proportion)); |
|||
height: calc(60px* var(--globe-proportion)); |
|||
background: #FFFFFF; |
|||
} |
|||
.footer_waste{ |
|||
display: flex; |
|||
align-items: center; |
|||
border-radius: 5px; |
|||
width: calc(430px* var(--globe-proportion)); |
|||
height: calc(60px* var(--globe-proportion)); |
|||
background: #FFFFFF; |
|||
margin-left: 10px; |
|||
} |
|||
|
|||
.footer_normal{ |
|||
margin-left: 70px; |
|||
} |
|||
|
|||
.text_size{ |
|||
font-size:calc(30px * var(--globe-proportion)); |
|||
padding-right: 5px; |
|||
} |
|||
.footer_container{ |
|||
display: flex; |
|||
align-items: center; |
|||
border-radius: 5px; |
|||
width: calc(500px * var(--globe-proportion)); |
|||
height: calc(60px* var(--globe-proportion)); |
|||
background: #FFFFFF; |
|||
.circle { |
|||
width: calc(30px * var(--globe-proportion)); |
|||
height: calc(30px * var(--globe-proportion)); |
|||
background-color: green; |
|||
border-radius: 50%; |
|||
margin-left: 10px; |
|||
} |
|||
|
|||
.waste_status{ |
|||
padding:5px 5px; |
|||
} |
|||
|
|||
.waste_detail{ |
|||
margin-left: auto |
|||
} |
|||
} |
|||
.liquid{ |
|||
height: 400px; |
|||
} |
|||
</style> |
@ -0,0 +1,121 @@ |
|||
<template> |
|||
<div class="header"> |
|||
<div class="header_logo"> |
|||
<img :src="logo" style="height:20px"/> |
|||
</div> |
|||
<div class="header_time"> |
|||
{{ currentTime }} |
|||
</div> |
|||
<div class="header_user"> |
|||
<img :src="AvatarSvg" width="20px" height="20px"/> |
|||
<div style="font-size: 15px;">Admin</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
<script lang="ts" setup> |
|||
import logo from '@/assets/logo.png' |
|||
import AvatarSvg from '@/assets/avatar.svg' |
|||
import { ref, onMounted } from 'vue' |
|||
import {eventBus} from '@/eventBus' |
|||
import { getFormattedDateTime } from '@/utils' |
|||
const menuId = ref(0) |
|||
const time = getFormattedDateTime() |
|||
const currentTime = ref(time) |
|||
onMounted(()=>{ |
|||
//测试页面返回时,需要调整菜单 |
|||
eventBus.on('menuId', (value:number)=>{ |
|||
menuId.value = value |
|||
}) |
|||
}) |
|||
</script> |
|||
<style scoped> |
|||
.header{ |
|||
display: flex; |
|||
align-items: center; |
|||
background: #e9e9e9; |
|||
align-items: center; |
|||
height: calc(108px * var(--globe-proportion)); |
|||
.header_logo{ |
|||
padding:10px 10px; |
|||
} |
|||
|
|||
.header_time{ |
|||
width: calc(375px * var(--globe-proportion)); |
|||
height: calc(80px * var(--globe-proportion)); |
|||
font-size: calc(28px * var(--globe-proportion)); |
|||
display: flex; |
|||
align-items: center; |
|||
margin-left: calc(1910px * var(--globe-proportion)); |
|||
background: white; |
|||
justify-content: center; |
|||
border-radius: 10px; |
|||
} |
|||
|
|||
.header_ins{ |
|||
display: flex; |
|||
align-items: center; |
|||
border-radius: 5px; |
|||
width: 444px; |
|||
height: 80px; |
|||
background: #FFFFFF; |
|||
} |
|||
|
|||
.header_container{ |
|||
margin-left: 10px; |
|||
display: flex; |
|||
align-items: center; |
|||
border-radius: 5px; |
|||
width: 500px; |
|||
height: 80px; |
|||
background: #FFFFFF; |
|||
.waste_status{ |
|||
padding:5px 5px; |
|||
width: 75%; |
|||
} |
|||
|
|||
.waste_detail{ |
|||
display: flex; |
|||
justify-content: flex-end; |
|||
width: 40%; |
|||
} |
|||
} |
|||
|
|||
.header_user{ |
|||
display: flex; |
|||
align-items: center; |
|||
justify-content: flex-end; |
|||
gap: 5px; |
|||
padding-left: 7px; |
|||
} |
|||
} |
|||
|
|||
.circle { |
|||
width: 30px; |
|||
height: 30px; |
|||
background-color: green; |
|||
border-radius: 50%; |
|||
margin-left: 10px; |
|||
} |
|||
|
|||
:deep(.van-dropdown-menu__bar){ |
|||
background-color: #1871F8; |
|||
border-radius: 5px; |
|||
height: 30px; |
|||
width: 90px; |
|||
.van-ellipsis{ |
|||
color:white; |
|||
} |
|||
|
|||
} |
|||
|
|||
:deep(.van-dropdown-item__content){ |
|||
width: 150px; |
|||
margin-left: 170px; |
|||
} |
|||
|
|||
.text_size{ |
|||
font-size:30px; |
|||
padding-right: 5px; |
|||
} |
|||
|
|||
</style> |
@ -0,0 +1,163 @@ |
|||
<template> |
|||
<div class="container"> |
|||
<div> |
|||
<div class="waster_status">废液回收状态</div> |
|||
<div class="waster_pos"> |
|||
<div class="contail_percentage"></div> |
|||
<div class="liquid" style="height: 50%;"></div> |
|||
<div class="percent_num">50%</div> |
|||
</div> |
|||
<div class="container_water_name"> |
|||
碱中和容器 |
|||
</div> |
|||
</div> |
|||
<br/> |
|||
<div> |
|||
<div class="waster_status">溶液容器状态</div> |
|||
<div class="solu_list"> |
|||
<div v-for="solu in solutionList" :key="solu.id"> |
|||
<div class="waster_pos"> |
|||
<div class="contail_percentage"></div> |
|||
<div class="liquid" :style="`height: ${solu.percentage};background-color:${solu.color}`"></div> |
|||
<div class="percent_num">{{ solu.percentage }}</div> |
|||
</div> |
|||
<div class="solu_name"> |
|||
{{ solu.name }} |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
<script lang="ts" setup> |
|||
import { ref } from 'vue' |
|||
const solutionList = ref([{ |
|||
id : 1, |
|||
name: '硫酸', |
|||
percentage: '10%', |
|||
color: 'red' |
|||
},{ |
|||
id : 2, |
|||
name: '硫酸', |
|||
percentage: '20%', |
|||
color:"#07a16e" |
|||
},{ |
|||
id : 3, |
|||
name: '硫酸', |
|||
percentage: '30%', |
|||
color:"#07a16e" |
|||
},{ |
|||
id : 4, |
|||
name: '硫酸', |
|||
percentage: '40%', |
|||
color:"#aa8538" |
|||
},{ |
|||
id : 5, |
|||
name: '硫酸', |
|||
percentage: '50%', |
|||
color:"#cf67e7" |
|||
},{ |
|||
id : 1, |
|||
name: '硫酸', |
|||
percentage: '10%', |
|||
color:"#cf67e7" |
|||
},{ |
|||
id : 2, |
|||
name: '硫酸', |
|||
percentage: '20%', |
|||
color:"#07a16e" |
|||
},{ |
|||
id : 3, |
|||
name: '硫酸', |
|||
percentage: '30%', |
|||
},{ |
|||
id : 4, |
|||
name: '硫酸', |
|||
percentage: '40%', |
|||
color:"#cf67e7" |
|||
},{ |
|||
id : 5, |
|||
name: '硫酸', |
|||
percentage: '50%', |
|||
color:'#3586c6' |
|||
}]) |
|||
|
|||
</script> |
|||
<style lang="css" scoped> |
|||
.container{ |
|||
background: #EEEFF8; |
|||
width: calc(1200px * var(--globe-proportion)); |
|||
height: calc(1100px * var(--globe-proportion)); |
|||
|
|||
.waster_pos{ |
|||
position: relative; |
|||
width: calc(100px * var(--globe-proportion)); |
|||
height: calc(150px * var(--globe-proportion)); |
|||
margin: calc(50px * var(--globe-proportion)) calc(60px * var(--globe-proportion)); |
|||
} |
|||
.waster_status{ |
|||
height: 29px; |
|||
font-family: Source Han Sans; |
|||
font-size: calc(30px * var(--globe-proportion)); |
|||
font-weight: 500; |
|||
color: #40474E; |
|||
padding-left: calc(26px * var(--globe-proportion)); |
|||
padding-top: calc(19px * var(--globe-proportion)); |
|||
} |
|||
|
|||
.contail_percentage{ |
|||
position: absolute; |
|||
top: 0; |
|||
left: 0; |
|||
width: 100%; |
|||
height: 100%; |
|||
background-image: url('@/assets/container.svg'); |
|||
background-size: cover; |
|||
background-position: center; |
|||
z-index: 1; |
|||
border-radius: 10px; |
|||
} |
|||
|
|||
.liquid { |
|||
position: absolute; |
|||
bottom: 0; |
|||
left: 0; |
|||
width: 100%; |
|||
background-color: blue; |
|||
opacity: 0.5; |
|||
z-index: 2; |
|||
border-radius: 0 0 10px 10px; |
|||
} |
|||
|
|||
.container_water_name{ |
|||
font-family: 思源黑体; |
|||
font-size: calc(26px * var(--globe-proportion)); |
|||
font-weight: 500; |
|||
color: #9E9E9E; |
|||
margin-left: calc(45px * var(--globe-proportion)); |
|||
margin-top: calc(-35px * var(--globe-proportion)); |
|||
} |
|||
} |
|||
.solu_list{ |
|||
display: flex; |
|||
justify-content: center; |
|||
flex-wrap: wrap; |
|||
} |
|||
|
|||
.solu_name{ |
|||
font-family: 思源黑体; |
|||
font-size: calc(26px * var(--globe-proportion)); |
|||
font-weight: 500; |
|||
color: #9E9E9E; |
|||
margin-left: calc(65px * var(--globe-proportion)); |
|||
margin-top: calc(-35px * var(--globe-proportion)); |
|||
} |
|||
|
|||
.percent_num{ |
|||
font-size: calc(30px * var(--globe-proportion)); |
|||
position: relative; |
|||
z-index: 2; |
|||
top: calc(60px * var(--globe-proportion)); |
|||
left: calc(20px * var(--globe-proportion)); |
|||
} |
|||
</style> |
@ -0,0 +1,103 @@ |
|||
<template> |
|||
<div class="menu"> |
|||
<van-sidebar v-model="active" class="sidebar"> |
|||
<van-sidebar-item v-for="menu in muneList" :key="menu.id" class="menn_text menn_btn" @click="goPage(menu)"> |
|||
<template #title scoped> |
|||
<div class="menn_li"> |
|||
<div><img :src="active== menu.id ? menu.s_img : menu.n_img" class="menu_icon"/></div> |
|||
<div>{{ menu.name }}</div> |
|||
</div> |
|||
</template> |
|||
</van-sidebar-item> |
|||
</van-sidebar> |
|||
</div> |
|||
</template> |
|||
<script lang="ts" setup> |
|||
import { ref, onMounted } from 'vue' |
|||
import { useRouter, useRoute } from 'vue-router' |
|||
import { menuIcon } from './menu.ts' |
|||
const router = useRouter() |
|||
const route = useRoute() |
|||
const imageModules:any = import.meta.glob('@/assets/menuIcon/*.svg'); |
|||
const importedImages:any = {}; |
|||
const onHeadleIcon = async()=> { |
|||
for(const path in imageModules) { |
|||
let pst = await imageModules[path]() |
|||
importedImages[path] = pst.default |
|||
} |
|||
} |
|||
|
|||
const active = ref(0); |
|||
interface Menu { |
|||
id: number |
|||
name: string |
|||
s_icon: string |
|||
n_icon: string |
|||
s_img: string |
|||
n_img: string |
|||
path: string |
|||
} |
|||
const goPage = (menu:Menu) => { |
|||
active.value = menu.id |
|||
router.push(`${menu.path}`) |
|||
} |
|||
|
|||
const muneList:any = ref([]) |
|||
onMounted(async ()=>{ |
|||
await onHeadleIcon() |
|||
let path = route.path |
|||
muneList.value = menuIcon |
|||
//@ts-ignore |
|||
muneList.value.forEach(item => { |
|||
item.s_img = importedImages[item.s_icon] |
|||
item.n_img = importedImages[item.n_icon] |
|||
if(item.path === path){ |
|||
active.value = item.id |
|||
} |
|||
}); |
|||
console.log('muneList.value---', muneList.value) |
|||
}) |
|||
|
|||
</script> |
|||
<style lang="css" scoped> |
|||
.sidebar{ |
|||
width:calc(325px * var(--globe-proportion)); |
|||
font-size: calc(30px * var(--globe-proportion)) |
|||
} |
|||
.menu{ |
|||
height: calc(1840px * var(--globe-proportion)); |
|||
background: #e9e9e9; |
|||
} |
|||
|
|||
.menn_text{ |
|||
font-size: calc(30px * var(--globe-proportion)); |
|||
margin-top:20px; |
|||
} |
|||
|
|||
.van-sidebar { |
|||
--van-sidebar-active-color: #0088cc; /* 设置激活项颜色为蓝色 */ |
|||
/* --van-sidebar-background: red; */ |
|||
--van-sidebar-selected-background: #1989FA |
|||
} |
|||
|
|||
.menn_btn{ |
|||
border-radius: 10px; |
|||
height: calc(100px * var(--globe-proportion)); |
|||
width: calc(320px * var(--globe-proportion)); |
|||
display: flex; |
|||
align-items: center; |
|||
|
|||
} |
|||
|
|||
.menn_li{ |
|||
display: flex; |
|||
align-items: center; |
|||
gap: 5px; |
|||
} |
|||
|
|||
.menu_icon{ |
|||
width: calc(80px * var(--globe-proportion)); |
|||
height: calc(80px * var(--globe-proportion)); |
|||
} |
|||
|
|||
</style> |
@ -0,0 +1,25 @@ |
|||
export const menuIcon = [{ |
|||
id: 0, |
|||
name: '实验操作', |
|||
s_icon: '/src/assets/menuIcon/s_home.svg', |
|||
n_icon: '/src/assets/menuIcon/n_home.svg', |
|||
path: '/graphite', |
|||
},{ |
|||
id: 1, |
|||
name: '日志记录', |
|||
s_icon: '/src/assets/menuIcon/s_log.svg', |
|||
n_icon: '/src/assets/menuIcon/n_log.svg', |
|||
path: '/logRecords', |
|||
},{ |
|||
id: 2, |
|||
name: '实验记录', |
|||
s_icon: '/src/assets/menuIcon/s_expe.svg', |
|||
n_icon: '/src/assets/menuIcon/n_expe.svg', |
|||
path: '/expeRecords', |
|||
},{ |
|||
id: 3, |
|||
name: '加液配置', |
|||
s_icon: '/src/assets/menuIcon/s_liquid.svg', |
|||
n_icon: '/src/assets/menuIcon/n_liquid.svg', |
|||
path: '/liquidConfig', |
|||
}] |
@ -0,0 +1,6 @@ |
|||
<template> |
|||
<div>实验记录</div> |
|||
</template> |
|||
<script lang="ts" setup> |
|||
|
|||
</script> |
@ -0,0 +1,187 @@ |
|||
<template> |
|||
<div> |
|||
<div> |
|||
<div class="title">添加溶液</div> |
|||
</div> |
|||
<div class="waste_main"> |
|||
<div class="waste_area" v-for="el in 8"> |
|||
<!--左溶液瓶区--> |
|||
<div> |
|||
<div class="waste_percentage"> |
|||
<div class="percent_num">300ml</div> |
|||
<div class="waste_color" style="background-color:#26D574;"></div> |
|||
</div> |
|||
<div class="waste_name">硫酸</div> |
|||
</div> |
|||
<!--右操作区--> |
|||
<div> |
|||
<div class="waste_edit"> |
|||
<div > |
|||
<van-icon name="edit"/> |
|||
<span>请输入添加值</span> |
|||
</div> |
|||
<br/> |
|||
<div class="waste_field"> |
|||
<img :src="AddSvg" class="add_icon"/> |
|||
<van-field type="number" autosize placeholder="请输入" class='waste_input' size="normal"/>ml |
|||
</div> |
|||
<br/> |
|||
<div> |
|||
<van-button class="add_btn">加酸</van-button> |
|||
</div> |
|||
</div> |
|||
<div class="add_result">硫酸已添加100ml</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="waste_button"> |
|||
<van-button class="btn" @click="onConfirm" type="primary">确认添加</van-button> |
|||
<van-button class="btn" @click="onCancel" style="margin-left: 50px;">取消添加</van-button> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
<script setup> |
|||
import AddSvg from '@/assets/add.svg' |
|||
const emits = defineEmits(['cancel']) |
|||
|
|||
const onConfirm = () => { |
|||
|
|||
} |
|||
|
|||
const onCancel = () => { |
|||
emits('cancel') |
|||
} |
|||
|
|||
</script> |
|||
<style scoped> |
|||
|
|||
.title{ |
|||
font-size: calc(40px * var(--globe-proportion)); |
|||
font-weight: 500; |
|||
line-height: 11px; |
|||
padding-top: calc(80px * var(--globe-proportion)); |
|||
margin-left: calc(90px * var(--globe-proportion)); |
|||
color: #323233; |
|||
} |
|||
|
|||
.waste_main{ |
|||
height: calc(900px * var(--globe-proportion)); |
|||
flex-wrap: wrap; |
|||
display: flex; |
|||
.waste_area{ |
|||
height: calc(330px * 0.4); |
|||
width: calc(480px * 0.4); |
|||
border: 2px solid #275EFB; |
|||
margin-top: calc(100px * 0.4); |
|||
margin-left: calc(70px * 0.4); |
|||
background: rgb(243 251 255); |
|||
border-radius: 20px; |
|||
display: flex; |
|||
.waste_percentage{ |
|||
position: relative; |
|||
width: calc(141px * 0.4); |
|||
height: calc(198px * 0.4); |
|||
background-image: url('@/assets/container.svg'); |
|||
background-size: cover; |
|||
background-position: center; |
|||
z-index: 1; |
|||
border-radius: 10px; |
|||
margin-top: calc(33px * 0.4); |
|||
margin-left: calc(32px * 0.4); |
|||
} |
|||
|
|||
.percent_num{ |
|||
position: relative; |
|||
top: 40%; |
|||
left: 22%; |
|||
font-size: calc(30px * 0.4); |
|||
} |
|||
.waste_color{ |
|||
position: absolute; |
|||
bottom: 0; |
|||
left: 0; |
|||
width: calc(141px * 0.4); |
|||
height: 50%; |
|||
background-color: blue; |
|||
opacity: 0.5; |
|||
z-index: 2; |
|||
border-radius: 0 0 10px 10px; |
|||
} |
|||
|
|||
.waste_name{ |
|||
margin-left: calc(76px * 0.4); |
|||
margin-top: calc(27px * 0.4); |
|||
font-size: calc(26px * 0.4); |
|||
color: #393F46; |
|||
} |
|||
|
|||
.waste_edit{ |
|||
background: #ffffff; |
|||
width: calc(256px * 0.4); |
|||
height: calc(220px * 0.4); |
|||
margin-left: calc(30px * 0.4); |
|||
margin-top: calc(20px * 0.4); |
|||
padding-top: calc(30px * 0.4); |
|||
font-size: calc(20px * 0.4); |
|||
padding-left: calc(35px * 0.4); |
|||
} |
|||
|
|||
.waste_field{ |
|||
width: calc(210px * 0.4); |
|||
height: calc(54px * 0.4); |
|||
display: flex; |
|||
border: 1px solid; |
|||
border-radius: calc(04px * 0.4); |
|||
border: 1px solid #E4E5F1; |
|||
align-items: center; |
|||
} |
|||
|
|||
} |
|||
|
|||
.add_btn{ |
|||
background-color: #26D574; |
|||
font-size: calc(20px * 0.4); |
|||
color: #ffffff; |
|||
width: calc(210px * 0.4); |
|||
height: calc(54px * 0.4); |
|||
border-radius: calc(100px * 0.4); |
|||
} |
|||
|
|||
} |
|||
|
|||
|
|||
.waste_button{ |
|||
width: 100%; |
|||
padding-top: 50px; |
|||
margin-left: 35%; |
|||
height: 200px; |
|||
.btn{ |
|||
width:calc(438px * 0.4); |
|||
height: calc(90px * 0.4); |
|||
font-size: calc(40px * 0.4); |
|||
} |
|||
} |
|||
.ml{ |
|||
padding-top: 5px; |
|||
} |
|||
|
|||
.add_result{ |
|||
font-size: calc(26px * 0.4); |
|||
color: #393f46; |
|||
margin-top: calc(18px * 0.4); |
|||
margin-left: calc(45px * 0.4); |
|||
} |
|||
|
|||
.add_icon{ |
|||
width: calc(28px * 0.4); |
|||
height: calc(28px * 0.4); |
|||
} |
|||
|
|||
.waste_input{ |
|||
font-size: calc(18px * 0.4); |
|||
|
|||
} |
|||
|
|||
|
|||
|
|||
</style> |
@ -0,0 +1,205 @@ |
|||
<template> |
|||
<div class="heat_main"> |
|||
<div class="heat_pos_text"> |
|||
<div class="pos_text">{{ `A-${heatInfo}` }}</div> |
|||
<div class="pos_text pos_state">已放置</div> |
|||
</div> |
|||
<div class="heat_pos"> |
|||
<div |
|||
v-for="(isActive, index) in ballStates" |
|||
:key="index" |
|||
> |
|||
<div class="inner-circle" :style="`background: ${heatInfo == 2 ? '#F2652D': ''}`"></div> |
|||
</div> |
|||
|
|||
</div> |
|||
<!-- <div class="heat_overlay"> |
|||
<div class="heat_loading"> |
|||
<img :src="LoadingSvg"/> |
|||
</div> |
|||
</div> --> |
|||
<div class="heat_footer"> |
|||
<div class="heat_temperature"> |
|||
<div class="target_temp">目标温度: 120℃</div> |
|||
<div class="heating">加热中</div> |
|||
</div> |
|||
<div> |
|||
<div class="temp_text">120℃</div> |
|||
<div class="heat_choose"> |
|||
<van-button type="primary" class="btn" @click="()=>{onChooseFormula()}">选 择</van-button> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<van-overlay :show="formulaVisible" @click="formulaVisible = false" style="z-index: 999;"> |
|||
<div class="formula_picker"> |
|||
<van-picker |
|||
title="选择配方" |
|||
:columns="formulaList" |
|||
@confirm="onConfirmFormula" |
|||
@cancel="onCancelFormula" |
|||
/> |
|||
</div> |
|||
</van-overlay> |
|||
|
|||
</div> |
|||
|
|||
</template> |
|||
|
|||
<script lang="ts" setup> |
|||
import { computed, ref, watch, onMounted, onBeforeUnmount } from 'vue' |
|||
import LoadingSvg from '@/assets/loading.svg' |
|||
const ballStates = ref([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]) |
|||
const props = defineProps({ |
|||
heatInfo:Number, |
|||
|
|||
}) |
|||
|
|||
//选择配方 |
|||
const formulaVisible = ref(false) |
|||
const formulaList:any = ref([]) |
|||
const onChooseFormula = () => { |
|||
formulaVisible.value = true; |
|||
formulaList.value = [{ text: '硫酸', value: '1' }] |
|||
formulaList.value.push({ text: '硫酸', value: '1' }) |
|||
console.log('----------选择配方-----------') |
|||
|
|||
} |
|||
|
|||
const onConfirmFormula = (value:any) => { |
|||
console.log('value---', value) |
|||
formulaVisible.value = false; |
|||
} |
|||
|
|||
const onCancelFormula = () => { |
|||
formulaVisible.value = false; |
|||
} |
|||
|
|||
</script> |
|||
|
|||
<style scoped> |
|||
.heat_main{ |
|||
border: 1px solid #E9F3FF; |
|||
width: calc(366px * var(--globe-proportion)); |
|||
height: calc(580px * var(--globe-proportion)); |
|||
border-radius: 20px; |
|||
background: #E9F3FF; |
|||
margin-top: calc(159px * var(--globe-proportion)); |
|||
|
|||
|
|||
} |
|||
.heat_pos_text{ |
|||
display: flex; |
|||
height: calc(53px * var(--globe-proportion)); |
|||
padding-left: 20px; |
|||
.pos_text{ |
|||
font-size: calc(26px * var(--globe-proportion)); |
|||
font-weight: 500; |
|||
line-height: normal; |
|||
display: flex; |
|||
align-items: center; |
|||
color: #4D6882; |
|||
} |
|||
|
|||
.pos_state{ |
|||
margin-left:50% |
|||
} |
|||
} |
|||
.heat_pos{ |
|||
width: calc(330px * var(--globe-proportion)); |
|||
height: calc(330px * var(--globe-proportion)); |
|||
display: flex; |
|||
justify-content: center; |
|||
flex-wrap: wrap; |
|||
margin-left: 5px; |
|||
gap: 10px; |
|||
flex-direction: row; |
|||
background: #384D5D; |
|||
border: 2px solid #7592A8; |
|||
border-radius: 16px; |
|||
} |
|||
.inner-circle { |
|||
border-radius: 50%; |
|||
width: calc(50px * var(--globe-proportion)); |
|||
height: calc(50px * var(--globe-proportion)); |
|||
background-color: rgb(209, 33, 33); |
|||
} |
|||
.heat_footer{ |
|||
height: calc(180px * var(--globe-proportion)); |
|||
width: calc(330px * var(--globe-proportion)); |
|||
margin-top: 10px; |
|||
margin-left: 5px; |
|||
.heat_temperature{ |
|||
height: calc(46px * var(--globe-proportion)); |
|||
width: calc(330px * var(--globe-proportion)); |
|||
background: #FFFFFF; |
|||
border-radius: 5px; |
|||
display: flex; |
|||
align-items: center; |
|||
.target_temp{ |
|||
color: #384D5D; |
|||
font-size: calc(22px * var(--globe-proportion)); |
|||
} |
|||
|
|||
.heating{ |
|||
color: #FE0A0A; |
|||
font-size: calc(28px * var(--globe-proportion)); |
|||
margin-left: calc(70px * var(--globe-proportion)); |
|||
} |
|||
} |
|||
|
|||
.temp_text{ |
|||
width: calc(109px * var(--globe-proportion)); |
|||
height: calc(52px * var(--globe-proportion)); |
|||
opacity: 1; |
|||
|
|||
font-family: Source Han Sans; |
|||
font-size: calc(36px * var(--globe-proportion)); |
|||
font-weight: bold; |
|||
line-height: normal; |
|||
display: flex; |
|||
align-items: center; |
|||
color: #4D6882; |
|||
padding-top: calc(70px * var(--globe-proportion)); |
|||
margin-left: calc(25px * var(--globe-proportion)); |
|||
} |
|||
} |
|||
|
|||
.heat_overlay{ |
|||
border: 1px solid #E9F3FF; |
|||
width: 300px; |
|||
height: 492px; |
|||
border-radius: 20px; |
|||
margin-top: 100px; |
|||
position: absolute; |
|||
background: #d3d3d3; |
|||
margin-top: -335px; |
|||
opacity: 0.8; |
|||
|
|||
.heat_loading{ |
|||
margin: 123px; |
|||
} |
|||
} |
|||
|
|||
.heat_choose{ |
|||
position: absolute; |
|||
margin-left: calc(215px * var(--globe-proportion)); |
|||
z-index: 99; |
|||
margin-top: -15px; |
|||
|
|||
.btn{ |
|||
width: calc(126px * var(--globe-proportion)); |
|||
height: calc(38px * var(--globe-proportion)); |
|||
font-size: calc(20px * var(--globe-proportion)); |
|||
background:#1989FA; |
|||
color: white; |
|||
} |
|||
} |
|||
|
|||
.formula_picker{ |
|||
width: calc(800px * var(--globe-proportion)); |
|||
margin: 20% 30%; |
|||
} |
|||
|
|||
</style> |
|||
|
@ -0,0 +1,46 @@ |
|||
<template> |
|||
<div class="picture"> |
|||
<!-- <van-button class="area">拍照</van-button> --> |
|||
<div class="area"> |
|||
<div class="area_btn"> |
|||
<img :src="PhotoSvg" class="photo_icon"/> |
|||
拍照 |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
<script lang="ts" setup> |
|||
import PhotoSvg from '@/assets/photo_icon.svg' |
|||
</script> |
|||
<style scoped> |
|||
.picture{ |
|||
height: calc(726px * var(--globe-proportion)); |
|||
width: calc(911px * var(--globe-proportion)); |
|||
background-image: url('@/assets/picture.svg'); |
|||
background-repeat: no-repeat; |
|||
background-size: contain; |
|||
margin-left:10px |
|||
} |
|||
.area{ |
|||
background: rgba(255, 255, 255, 0.5); |
|||
font-size: calc(26px * var(--globe-proportion)); |
|||
width: calc(911px * var(--globe-proportion)); |
|||
height: calc(126px * var(--globe-proportion)); |
|||
position: absolute; |
|||
margin-top: calc(600px * var(--globe-proportion)); |
|||
.area_btn{ |
|||
display: flex; |
|||
justify-content: center; |
|||
align-items: center; |
|||
height: calc(126px * var(--globe-proportion)); |
|||
font-size: calc(42px * var(--globe-proportion)); |
|||
font-weight: bold; |
|||
color: #FFFFFF; |
|||
gap:10px; |
|||
.photo_icon{ |
|||
width: calc(51px * var(--globe-proportion)); |
|||
height: calc(38px * var(--globe-proportion)); |
|||
} |
|||
} |
|||
} |
|||
</style> |
@ -0,0 +1,4 @@ |
|||
|
|||
export {default as HeatPosition} from './HeatPosition.vue' |
|||
export {default as TakePickture} from './TakePickture.vue' |
|||
export { default as AddWaste} from './AddWaste.vue' |
@ -0,0 +1,143 @@ |
|||
<template> |
|||
<div class="graphite_home" id="home"> |
|||
<div class="heat_area"> |
|||
<div v-for="(item, index) in heatList" :key="item"> |
|||
<div :style="`margin-top:${index>2?'-40px':''}`"><HeatPosition :heatInfo="item"></HeatPosition></div> |
|||
</div> |
|||
</div> |
|||
<!--拍照区--> |
|||
<div class="pickture_area"> |
|||
<div class="pickture"> |
|||
<TakePickture></TakePickture> |
|||
</div> |
|||
<div class="graphite_btn"> |
|||
<div><van-button size="large" class="btn_size" style="width: calc(930px * var(--globe-proportion));">开门</van-button></div> |
|||
<van-row class="graphite_operate"> |
|||
<van-col span="11"> |
|||
<van-button size="large" class="btn_size">开始任务</van-button> |
|||
</van-col> |
|||
<van-col span="11"> |
|||
<van-button size="large" class="btn_size">结束任务</van-button> |
|||
</van-col> |
|||
</van-row> |
|||
<van-row class="graphite_operate"> |
|||
<van-col span="11"> |
|||
<van-button size="large" class="btn_size">选择配方</van-button> |
|||
</van-col> |
|||
<van-col span="11"> |
|||
<van-button size="large" class="btn_size">执行配方</van-button> |
|||
</van-col> |
|||
</van-row> |
|||
<van-row class="graphite_operate"> |
|||
<van-col span="11"> |
|||
<van-button size="large" class="btn_size" @click="onAddWaste">添加溶液</van-button> |
|||
</van-col> |
|||
<van-col span="11"> |
|||
<van-button size="large" class="btn_size">摇匀</van-button> |
|||
</van-col> |
|||
</van-row> |
|||
<van-row class="graphite_operate"> |
|||
<van-col span="7"> |
|||
<van-button size="large" class="btn_size">移至加热</van-button> |
|||
</van-col> |
|||
<van-col span="7"> |
|||
<van-button size="large" class="btn_size">移至加液</van-button> |
|||
</van-col> |
|||
<van-col span="7"> |
|||
<van-button size="large" class="btn_size">移至特殊</van-button> |
|||
</van-col> |
|||
</van-row> |
|||
<van-row class="graphite_operate"> |
|||
<van-col span="11"> |
|||
<van-button size="large" class="btn_size">开始加热</van-button> |
|||
</van-col> |
|||
<van-col span="11"> |
|||
<van-button size="large" class="btn_size">抬起托盘</van-button> |
|||
</van-col> |
|||
</van-row> |
|||
|
|||
</div> |
|||
</div> |
|||
<van-overlay :show="wasteVisible" style="z-index: 999;"> |
|||
<div class="waste"> |
|||
<div class="addWaste"> |
|||
<AddWaste @cancel="wasteVisible=false"></AddWaste> |
|||
</div> |
|||
</div> |
|||
</van-overlay> |
|||
</div> |
|||
</template> |
|||
<script lang="ts" setup> |
|||
import { ref } from 'vue'; |
|||
import {HeatPosition, TakePickture, AddWaste} from './components' |
|||
|
|||
const heatList:any = ref([1,2,3,4,5,6]) |
|||
|
|||
//添加溶液 |
|||
const wasteVisible = ref(false) |
|||
const onAddWaste = () => { |
|||
wasteVisible.value = true; |
|||
} |
|||
</script> |
|||
<style> |
|||
|
|||
.graphite_home{ |
|||
display: flex; |
|||
background: #F6F6F6; |
|||
width: calc(2418px * var(--globe-proportion)); |
|||
|
|||
} |
|||
.heat_area{ |
|||
width: calc(1268px * var(--globe-proportion)); |
|||
height: calc(1620px * var(--globe-proportion)); |
|||
display: flex; |
|||
justify-content: center; |
|||
flex-wrap: wrap; |
|||
margin: 5px; |
|||
gap: calc(20px * var(--globe-proportion)); |
|||
padding-top:10px; |
|||
padding-bottom: 100px; |
|||
background: #FFFFFF; |
|||
border-radius: 20px; |
|||
} |
|||
|
|||
.pickture_area{ |
|||
width: calc(1100px * var(--globe-proportion)); |
|||
height: calc(1620px * var(--globe-proportion)); |
|||
margin: 5px; |
|||
background: #FFFFFF; |
|||
padding: calc(50px * var(--globe-proportion)); |
|||
border-radius: 20px; |
|||
} |
|||
|
|||
.graphite_btn{ |
|||
padding-top: calc(50px * var(--globe-proportion)); |
|||
margin-left: calc(30px * var(--globe-proportion)); |
|||
} |
|||
|
|||
.btn_size{ |
|||
font-size: calc(30px * var(--globe-proportion)); |
|||
height: calc(80px * var(--globe-proportion)); |
|||
color: #1989FA; |
|||
border: 3px solid #1989FA; |
|||
} |
|||
|
|||
.graphite_operate{ |
|||
gap: calc(40px * var(--globe-proportion)); |
|||
line-height: 3.5; |
|||
} |
|||
|
|||
.waste{ |
|||
display: flex; |
|||
justify-content: center; |
|||
width: 100%; |
|||
height: 100%; |
|||
align-items: center; |
|||
.addWaste{ |
|||
width: calc(2250px * 0.4); |
|||
height: calc(1235px * 0.4); |
|||
background: #FFFFFF; |
|||
} |
|||
} |
|||
|
|||
</style> |
@ -0,0 +1,63 @@ |
|||
|
|||
|
|||
<template> |
|||
<div> |
|||
<div><Header></Header></div> |
|||
<div class="container" style="display: flex;"> |
|||
<div class="home_menu"> |
|||
<Menu></Menu> |
|||
</div> |
|||
<main> |
|||
<div class="main"> |
|||
<router-view v-slot="{ Component }"> |
|||
<keep-alive :exclude="['Home']"> |
|||
<component :is="Component" /> |
|||
</keep-alive> |
|||
</router-view> |
|||
</div> |
|||
</main> |
|||
</div> |
|||
<div class="footer"> |
|||
<Footer></Footer> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
<script setup lang="ts"> |
|||
import Header from '../components/Header.vue'; |
|||
import Footer from '../components/Footer.vue'; |
|||
import { onMounted, watch } from 'vue'; |
|||
import { useRouter, useRoute } from 'vue-router' |
|||
import Menu from '@/views/components/Menu.vue' |
|||
defineOptions({ |
|||
name: "Home" |
|||
}) |
|||
const router = useRouter(); |
|||
const route = useRoute(); |
|||
watch(route,(newVal)=>{ |
|||
if(newVal.path == '/home'){ |
|||
router.push('/graphite') |
|||
} |
|||
},{ immediate: true, deep: true }) |
|||
</script> |
|||
<style> |
|||
.main{ |
|||
display: flex; |
|||
width: calc(2418px * var(--globe-proportion)); |
|||
background: rgb(255, 255, 255); |
|||
height: calc(1640px * var(--globe-proportion)); |
|||
} |
|||
.home_menu{ |
|||
background: rgb(255, 255, 255); |
|||
height: calc(1724px * var(--globe-proportion)); |
|||
width: calc(450px * var(--globe-proportion)); |
|||
} |
|||
.footer{ |
|||
position: relative; |
|||
margin-top: -25px; |
|||
width: calc(2425px * var(--globe-proportion)); |
|||
margin-left: calc(325px * var(--globe-proportion)); |
|||
background: #e9e9e9; |
|||
display: flex; |
|||
gap: 5px; |
|||
} |
|||
</style> |
@ -0,0 +1,33 @@ |
|||
<template> |
|||
<div> |
|||
<div class="waster_config"> |
|||
<div class="config_title"> |
|||
<div class="config_name"></div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
<script lang="ts" setup> |
|||
|
|||
</script> |
|||
<style scoped> |
|||
.waster_config{ |
|||
width: calc(410px * 0.4); |
|||
height: calc(430px * 0.4); |
|||
border:1px solid #275EFB; |
|||
margin-left: calc(134px * 0.4); |
|||
margin-top: calc(160px * 0.4); |
|||
.config_title{ |
|||
width: calc(410px * 0.4); |
|||
height: calc(80px * 0.4); |
|||
background: rgba(25, 137, 250, 0.1216); |
|||
padding-top:calc(15px * 0.4); |
|||
.config_name{ |
|||
width: calc(248px * 0.4); |
|||
height: calc(50px * 0.4); |
|||
background: #FFFFFF; |
|||
margin-left: calc(81px * 0.4); |
|||
} |
|||
} |
|||
} |
|||
</style> |
@ -0,0 +1,10 @@ |
|||
<template> |
|||
<div class="log">日志记录</div> |
|||
</template> |
|||
<script lang="ts" setup> |
|||
|
|||
</script> |
|||
<style lang="css" scoped> |
|||
.log{ |
|||
} |
|||
</style> |
@ -0,0 +1,51 @@ |
|||
<template> |
|||
<div class="login-container"> |
|||
<!-- 背景图 --> |
|||
<div class="background-image"></div> |
|||
<!-- 登录表单 --> |
|||
<div class="login-form"> |
|||
<h2>登录</h2> |
|||
<!-- 用户名输入框 --> |
|||
<div class="login-user-input"> |
|||
<input |
|||
type="text" |
|||
v-model="username" |
|||
placeholder="用户名" |
|||
class="input-field" |
|||
/> |
|||
</div> |
|||
<!-- 密码输入框 --> |
|||
<div style="margin-top: 5%;"> |
|||
<input |
|||
type="password" |
|||
v-model="password" |
|||
placeholder="密码" |
|||
class="input-field" |
|||
/> |
|||
</div> |
|||
<!-- 登录按钮 --> |
|||
<button @click="handleLogin" class="login-button">登录</button> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script setup> |
|||
import { ref } from 'vue'; |
|||
import { useRouter } from 'vue-router' |
|||
const router = useRouter() |
|||
// 定义用户名和密码的响应式变量 |
|||
const username = ref(''); |
|||
const password = ref(''); |
|||
|
|||
// 处理登录的函数 |
|||
const handleLogin = () => { |
|||
console.log('用户名:', username.value); |
|||
console.log('密码:', password.value); |
|||
router.push('/home') |
|||
// 这里可以添加实际的登录逻辑,比如发送请求到后端进行验证 |
|||
}; |
|||
</script> |
|||
|
|||
<style scoped> |
|||
@import './login.css' |
|||
</style> |
@ -0,0 +1,60 @@ |
|||
.login-container { |
|||
position: relative; |
|||
width: 100vw; |
|||
height: 100vh; |
|||
overflow: hidden; |
|||
} |
|||
|
|||
.background-image { |
|||
position: absolute; |
|||
top: 0; |
|||
left: 0; |
|||
width: 100%; |
|||
height: 100%; |
|||
background-image: url('https://via.placeholder.com/1920x1080'); /* 替换为你自己的背景图 URL */ |
|||
background-size: cover; |
|||
background-position: center; |
|||
filter: blur(5px); |
|||
z-index: -1; |
|||
} |
|||
|
|||
.login-form { |
|||
position: absolute; |
|||
top: 50%; |
|||
left: 50%; |
|||
height: 600px; |
|||
transform: translate(-50%, -50%); |
|||
background-color: rgba(255, 255, 255, 0.8); |
|||
padding: 20px; |
|||
border-radius: 10px; |
|||
box-shadow: 0 0 10px rgba(0, 0, 0, 0.2); |
|||
text-align: center; |
|||
} |
|||
|
|||
.input-field { |
|||
width: 100%; |
|||
padding: 10px; |
|||
margin: 10px 0; |
|||
border: 1px solid #ccc; |
|||
border-radius: 5px; |
|||
} |
|||
|
|||
.login-button { |
|||
width: 100%; |
|||
padding: 10px; |
|||
background-color: #007bff; |
|||
color: white; |
|||
border: none; |
|||
border-radius: 5px; |
|||
cursor: pointer; |
|||
margin-top: 35%; |
|||
} |
|||
|
|||
.login-button:hover { |
|||
background-color: #0056b3; |
|||
} |
|||
|
|||
.login-user-input{ |
|||
width: 400px; |
|||
margin-top: 15%; |
|||
} |
@ -0,0 +1,54 @@ |
|||
.simple_card{ |
|||
width: 100px; |
|||
height: 137px; |
|||
background: #FFFFFF; |
|||
border-radius: 8px; |
|||
opacity: 1; |
|||
.simple_pos{ |
|||
text-align: center; |
|||
font-family: HarmonyOS Sans SC; |
|||
font-size: 22px; |
|||
font-weight: bold; |
|||
line-height: normal; |
|||
color: #1871F8; |
|||
|
|||
} |
|||
|
|||
.simple_time{ |
|||
width: 90px; |
|||
height: 70px; |
|||
border-radius: 6px; |
|||
opacity: 1; |
|||
background: #1871F8; |
|||
padding-top:2px; |
|||
margin-left: 5px; |
|||
.simple_remaining_time{ |
|||
display: flex; |
|||
color: #FFFFFF; |
|||
text-align: center; |
|||
font-size: 12px; |
|||
font-weight: bold; |
|||
padding-top: 10px; |
|||
padding-left: 10px; |
|||
} |
|||
|
|||
.simple_countdown{ |
|||
width: 84px; |
|||
height: 32px; |
|||
border-radius: 6px; |
|||
opacity: 1; |
|||
background: #195DC4; |
|||
color: #FFFFFF; |
|||
padding-top: 5px; |
|||
text-align: center; |
|||
margin-left:3px; |
|||
margin-top:2px; |
|||
} |
|||
} |
|||
|
|||
.simple_btn{ |
|||
border-radius: 6px; |
|||
width: 90px; |
|||
margin-left:5px; |
|||
} |
|||
} |
@ -0,0 +1,81 @@ |
|||
.simple_card{ |
|||
width: 310px; |
|||
height: 42px; |
|||
background: #FFFFFF; |
|||
border-radius: 8px; |
|||
opacity: 1; |
|||
display: flex; |
|||
gap: 5px; |
|||
|
|||
.simple_content{ |
|||
width: 198px; |
|||
height: 37px; |
|||
border-radius: 8px; |
|||
background: #5BE881; |
|||
margin: auto; |
|||
margin-left: 2px; |
|||
display:flex; |
|||
.simple_seq{ |
|||
color: #ffffff; |
|||
padding-left: 15px; |
|||
padding-top: 5px; |
|||
width: 35px; |
|||
} |
|||
|
|||
.simple_time_icon{ |
|||
display: flex; |
|||
img{ |
|||
width: 15px; |
|||
height: 15px; |
|||
margin: auto; |
|||
} |
|||
|
|||
.simple_remaining_time{ |
|||
display: flex; |
|||
color: #FFFFFF; |
|||
text-align: center; |
|||
font-size: 13px; |
|||
font-weight: bold; |
|||
padding-top: 10px; |
|||
padding-left: 5px; |
|||
} |
|||
} |
|||
|
|||
.simple_pos{ |
|||
height: 25px; |
|||
font-size: 22px; |
|||
font-weight: bold; |
|||
} |
|||
|
|||
|
|||
|
|||
.simple_countdown{ |
|||
width: 84px; |
|||
height: 32px; |
|||
border-radius: 6px; |
|||
opacity: 1; |
|||
background: #52D375; |
|||
color: #FFFFFF; |
|||
padding-top: 5px; |
|||
text-align: center; |
|||
margin-left:3px; |
|||
margin-top:2px; |
|||
} |
|||
} |
|||
|
|||
.simple_btn{ |
|||
border-radius: 6px; |
|||
width: 107px; |
|||
height: 37px; |
|||
margin-top:3px; |
|||
background: #5BE881; |
|||
font-weight: bold; |
|||
display: flex; |
|||
justify-content: center; |
|||
align-items: center; |
|||
|
|||
.simple_clear{ |
|||
color:#FFFFFF; |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,12 @@ |
|||
/** @type {import('tailwindcss').Config} */ |
|||
export default { |
|||
content: [ |
|||
"./index.html", |
|||
"./src/**/*.{vue,js,ts,jsx,tsx}", |
|||
], |
|||
theme: { |
|||
extend: {}, |
|||
}, |
|||
plugins: [], |
|||
} |
|||
|
@ -0,0 +1,12 @@ |
|||
{ |
|||
"extends": "@vue/tsconfig/tsconfig.dom.json", |
|||
"include": ["env.d.ts", "src/**/*", "src/**/*.vue"], |
|||
"exclude": ["src/**/__tests__/*"], |
|||
"compilerOptions": { |
|||
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", |
|||
|
|||
"paths": { |
|||
"@/*": ["./src/*"] |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,11 @@ |
|||
{ |
|||
"files": [], |
|||
"references": [ |
|||
{ |
|||
"path": "./tsconfig.node.json" |
|||
}, |
|||
{ |
|||
"path": "./tsconfig.app.json" |
|||
} |
|||
] |
|||
} |
@ -0,0 +1,18 @@ |
|||
{ |
|||
"extends": "@tsconfig/node22/tsconfig.json", |
|||
"include": [ |
|||
"vite.config.*", |
|||
"vitest.config.*", |
|||
"cypress.config.*", |
|||
"nightwatch.conf.*", |
|||
"playwright.config.*", |
|||
], |
|||
"compilerOptions": { |
|||
"noEmit": true, |
|||
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", |
|||
|
|||
"module": "ESNext", |
|||
"moduleResolution": "Bundler", |
|||
"types": ["node"] |
|||
} |
|||
} |
@ -0,0 +1,20 @@ |
|||
import { fileURLToPath, URL } from "node:url"; |
|||
|
|||
import { defineConfig } from "vite"; |
|||
import vue from "@vitejs/plugin-vue"; |
|||
import vueJsx from "@vitejs/plugin-vue-jsx"; |
|||
import vueDevTools from "vite-plugin-vue-devtools"; |
|||
|
|||
// https://vite.dev/config/
|
|||
export default defineConfig({ |
|||
plugins: [vue(), vueJsx(), vueDevTools()], |
|||
resolve: { |
|||
alias: { |
|||
"@": fileURLToPath(new URL("./src", import.meta.url)), |
|||
}, |
|||
}, |
|||
server: { |
|||
host: "0.0.0.0", |
|||
port: 5174, |
|||
}, |
|||
}); |
Write
Preview
Loading…
Cancel
Save
Reference in new issue