diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..3688863 --- /dev/null +++ b/.env.example @@ -0,0 +1,2 @@ +VITE_AMAP_API_KEY=xxx +VITE_BACKEND_URL=http://kuroneko.bison-banana.ts.net:35000 \ No newline at end of file diff --git a/.gitignore b/.gitignore index 5610a11..585d73f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ node_modules target dist -.env \ No newline at end of file +.env +.vite-ssg-temp \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..3f6cfbf --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,15 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "msedge", + "request": "launch", + "name": "Launch Edge against localhost", + "url": "http://localhost:3333", + "webRoot": "${workspaceFolder}" + } + ] +} diff --git a/package.json b/package.json index 013d8f1..68cee9f 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "build": "vite-ssg build", "dev": "vite --port 3333 --open", "lint": "eslint .", - "preview": "vite preview", + "preview": "vite preview --port 35122", "preview-https": "serve dist", "test": "vitest", "test:e2e": "cypress open", @@ -85,7 +85,8 @@ "vite-ssg": "^25.0.0", "vite-ssg-sitemap": "^0.8.1", "vitest": "^2.1.8", - "vue-tsc": "^2.2.0" + "vue-tsc": "^2.2.0", + "workbox-window": "^7.3.0" }, "resolutions": { "unplugin": "^2.1.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 663d6fa..58e16b7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -196,7 +196,7 @@ importers: version: 10.0.6(rollup@4.30.1)(vite@6.0.7(@types/node@20.2.3)(jiti@2.4.0)(stylus@0.57.0)(terser@5.17.6)(tsx@4.19.2)(yaml@2.6.1)) vite-plugin-pwa: specifier: ^0.21.1 - version: 0.21.1(vite@6.0.7(@types/node@20.2.3)(jiti@2.4.0)(stylus@0.57.0)(terser@5.17.6)(tsx@4.19.2)(yaml@2.6.1))(workbox-build@7.1.1)(workbox-window@7.1.0) + version: 0.21.1(vite@6.0.7(@types/node@20.2.3)(jiti@2.4.0)(stylus@0.57.0)(terser@5.17.6)(tsx@4.19.2)(yaml@2.6.1))(workbox-build@7.1.1)(workbox-window@7.3.0) vite-plugin-vue-devtools: specifier: ^7.7.0 version: 7.7.0(rollup@4.30.1)(vite@6.0.7(@types/node@20.2.3)(jiti@2.4.0)(stylus@0.57.0)(terser@5.17.6)(tsx@4.19.2)(yaml@2.6.1))(vue@3.5.13(typescript@5.7.3)) @@ -215,6 +215,9 @@ importers: vue-tsc: specifier: ^2.2.0 version: 2.2.0(typescript@5.7.3) + workbox-window: + specifier: ^7.3.0 + version: 7.3.0 packages: @@ -6179,6 +6182,9 @@ packages: workbox-core@7.1.0: resolution: {integrity: sha512-5KB4KOY8rtL31nEF7BfvU7FMzKT4B5TkbYa2tzkS+Peqj0gayMT9SytSFtNzlrvMaWgv6y/yvP9C0IbpFjV30Q==} + workbox-core@7.3.0: + resolution: {integrity: sha512-Z+mYrErfh4t3zi7NVTvOuACB0A/jA3bgxUN3PwtAVHvfEsZxV9Iju580VEETug3zYJRc0Dmii/aixI/Uxj8fmw==} + workbox-expiration@7.1.0: resolution: {integrity: sha512-m5DcMY+A63rJlPTbbBNtpJ20i3enkyOtSgYfv/l8h+D6YbbNiA0zKEkCUaMsdDlxggla1oOfRkyqTvl5Ni5KQQ==} @@ -6212,6 +6218,9 @@ packages: workbox-window@7.1.0: resolution: {integrity: sha512-ZHeROyqR+AS5UPzholQRDttLFqGMwP0Np8MKWAdyxsDETxq3qOAyXvqessc3GniohG6e0mAqSQyKOHmT8zPF7g==} + workbox-window@7.3.0: + resolution: {integrity: sha512-qW8PDy16OV1UBaUNGlTVcepzrlzyzNW/ZJvFQQs2j2TzGsg6IKjcpZC1RSquqQnTOafl5pCj5bGfAHlCjOOjdA==} + wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} @@ -13162,14 +13171,14 @@ snapshots: - rollup - supports-color - vite-plugin-pwa@0.21.1(vite@6.0.7(@types/node@20.2.3)(jiti@2.4.0)(stylus@0.57.0)(terser@5.17.6)(tsx@4.19.2)(yaml@2.6.1))(workbox-build@7.1.1)(workbox-window@7.1.0): + vite-plugin-pwa@0.21.1(vite@6.0.7(@types/node@20.2.3)(jiti@2.4.0)(stylus@0.57.0)(terser@5.17.6)(tsx@4.19.2)(yaml@2.6.1))(workbox-build@7.1.1)(workbox-window@7.3.0): dependencies: debug: 4.4.0(supports-color@8.1.1) pretty-bytes: 6.1.1 tinyglobby: 0.2.10 vite: 6.0.7(@types/node@20.2.3)(jiti@2.4.0)(stylus@0.57.0)(terser@5.17.6)(tsx@4.19.2)(yaml@2.6.1) workbox-build: 7.1.1 - workbox-window: 7.1.0 + workbox-window: 7.3.0 transitivePeerDependencies: - supports-color @@ -13485,6 +13494,8 @@ snapshots: workbox-core@7.1.0: {} + workbox-core@7.3.0: {} + workbox-expiration@7.1.0: dependencies: idb: 7.1.1 @@ -13540,6 +13551,11 @@ snapshots: '@types/trusted-types': 2.0.3 workbox-core: 7.1.0 + workbox-window@7.3.0: + dependencies: + '@types/trusted-types': 2.0.3 + workbox-core: 7.3.0 + wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 diff --git a/src/App.vue b/src/App.vue index d5048b7..5c62b3e 100644 --- a/src/App.vue +++ b/src/App.vue @@ -3,7 +3,7 @@ // you can use this to manipulate the document head in any components, // they will be rendered correctly in the html results with vite-ssg useHead({ - title: 'Project Vertex', + title: '季节内台风预报系统', meta: [ { name: 'description', diff --git a/src/assets/colorbar.png b/src/assets/colorbar.png new file mode 100644 index 0000000..48a44fb Binary files /dev/null and b/src/assets/colorbar.png differ diff --git a/src/components.d.ts b/src/components.d.ts index 072ffbc..70e1b69 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,6 +7,7 @@ export {} /* prettier-ignore */ declare module 'vue' { export interface GlobalComponents { + AMapClient: typeof import('./components/AMapClient.vue')['default'] Badge: typeof import('./components/ui/badge/Badge.vue')['default'] Button: typeof import('./components/ui/button/Button.vue')['default'] Calendar: typeof import('./components/ui/calendar/Calendar.vue')['default'] @@ -42,7 +43,6 @@ declare module 'vue' { PopoverContent: typeof import('./components/ui/popover/PopoverContent.vue')['default'] PopoverTrigger: typeof import('./components/ui/popover/PopoverTrigger.vue')['default'] PosForm: typeof import('./components/PosForm.vue')['default'] - README: typeof import('./components/README.md')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] Select: typeof import('./components/ui/select/Select.vue')['default'] @@ -66,8 +66,6 @@ declare module 'vue' { TableHeader: typeof import('./components/ui/table/TableHeader.vue')['default'] TableRow: typeof import('./components/ui/table/TableRow.vue')['default'] Textarea: typeof import('./components/ui/textarea/Textarea.vue')['default'] - TheCounter: typeof import('./components/TheCounter.vue')['default'] - TheFooter: typeof import('./components/TheFooter.vue')['default'] TheInput: typeof import('./components/TheInput.vue')['default'] Tooltip: typeof import('./components/ui/tooltip/Tooltip.vue')['default'] TooltipContent: typeof import('./components/ui/tooltip/TooltipContent.vue')['default'] diff --git a/src/components/AMapClient.vue b/src/components/AMapClient.vue new file mode 100644 index 0000000..9a6714c --- /dev/null +++ b/src/components/AMapClient.vue @@ -0,0 +1,162 @@ + + meta: + layout: map + + + + + diff --git a/src/components/OptForm.vue b/src/components/OptForm.vue index bddee89..dd0967f 100644 --- a/src/components/OptForm.vue +++ b/src/components/OptForm.vue @@ -26,6 +26,15 @@ onMounted(async () => { const data = resp.data.value.data mapping.value = data options.mapping = data + const date = Object.keys(data)[0] + const newDateStr = `${date.slice(0, 4)}-${date.slice(4, 6)}-${date.slice(6, 8)}` + + if (castBeginDate.value === undefined) { + castBeginDate.value = parseDate(newDateStr) + } + if (options.castDayNo === -1) { + castTargetDate.value = castBeginDate.value.add({ days: 1 }) + } }) const isDateDisabled = computed(() => { @@ -68,10 +77,10 @@ const isTargetDateDisabled = computed(() => {
- 日期设置 +
- +