From eb55a9f9855252c5e62536df634057b98d3467b4 Mon Sep 17 00:00:00 2001 From: huangge1199 Date: Fri, 27 Jun 2025 17:21:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .editorconfig | 9 ++ .gitattributes | 1 + .gitignore | 31 +++++++ .prettierrc.json | 6 ++ .vscode/extensions.json | 8 ++ README.md | 39 +++++++++ env.d.ts | 1 + eslint.config.ts | 22 +++++ index.html | 13 +++ package.json | 38 +++++++++ public/favicon.ico | Bin 0 -> 4286 bytes src/App.vue | 86 +++++++++++++++++++ src/assets/base.css | 86 +++++++++++++++++++ src/assets/logo.svg | 1 + src/assets/main.css | 35 ++++++++ src/components/HelloWorld.vue | 41 +++++++++ src/components/TheWelcome.vue | 94 +++++++++++++++++++++ src/components/WelcomeItem.vue | 87 +++++++++++++++++++ src/components/icons/IconCommunity.vue | 7 ++ src/components/icons/IconDocumentation.vue | 7 ++ src/components/icons/IconEcosystem.vue | 7 ++ src/components/icons/IconSupport.vue | 7 ++ src/components/icons/IconTooling.vue | 19 +++++ src/main.ts | 17 ++++ src/router/index.ts | 23 +++++ src/stores/counter.ts | 12 +++ src/views/AboutView.vue | 15 ++++ src/views/HomeView.vue | 9 ++ tsconfig.app.json | 12 +++ tsconfig.json | 11 +++ tsconfig.node.json | 19 +++++ vite.config.ts | 18 ++++ 32 files changed, 781 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .prettierrc.json create mode 100644 .vscode/extensions.json create mode 100644 README.md create mode 100644 env.d.ts create mode 100644 eslint.config.ts create mode 100644 index.html create mode 100644 package.json create mode 100644 public/favicon.ico create mode 100644 src/App.vue create mode 100644 src/assets/base.css create mode 100644 src/assets/logo.svg create mode 100644 src/assets/main.css create mode 100644 src/components/HelloWorld.vue create mode 100644 src/components/TheWelcome.vue create mode 100644 src/components/WelcomeItem.vue create mode 100644 src/components/icons/IconCommunity.vue create mode 100644 src/components/icons/IconDocumentation.vue create mode 100644 src/components/icons/IconEcosystem.vue create mode 100644 src/components/icons/IconSupport.vue create mode 100644 src/components/icons/IconTooling.vue create mode 100644 src/main.ts create mode 100644 src/router/index.ts create mode 100644 src/stores/counter.ts create mode 100644 src/views/AboutView.vue create mode 100644 src/views/HomeView.vue create mode 100644 tsconfig.app.json create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 vite.config.ts diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..5a5809d --- /dev/null +++ b/.editorconfig @@ -0,0 +1,9 @@ +[*.{js,jsx,mjs,cjs,ts,tsx,mts,cts,vue,css,scss,sass,less,styl}] +charset = utf-8 +indent_size = 2 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +end_of_line = lf +max_line_length = 100 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..6313b56 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +* text=auto eol=lf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6fd7f6b --- /dev/null +++ b/.gitignore @@ -0,0 +1,31 @@ +# 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 +/yarn.lock diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..29a2402 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,6 @@ +{ + "$schema": "https://json.schemastore.org/prettierrc", + "semi": false, + "singleQuote": true, + "printWidth": 100 +} diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..c92168f --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,8 @@ +{ + "recommendations": [ + "Vue.volar", + "dbaeumer.vscode-eslint", + "EditorConfig.EditorConfig", + "esbenp.prettier-vscode" + ] +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..8c1229d --- /dev/null +++ b/README.md @@ -0,0 +1,39 @@ +# long-picture-frontend + +This template should help get you started developing with Vue 3 in Vite. + +## Recommended IDE Setup + +[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur). + +## Type Support for `.vue` Imports in TS + +TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) to make the TypeScript language service aware of `.vue` types. + +## Customize configuration + +See [Vite Configuration Reference](https://vite.dev/config/). + +## 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 +``` + +### Lint with [ESLint](https://eslint.org/) + +```sh +npm run lint +``` diff --git a/env.d.ts b/env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/env.d.ts @@ -0,0 +1 @@ +/// diff --git a/eslint.config.ts b/eslint.config.ts new file mode 100644 index 0000000..20475f8 --- /dev/null +++ b/eslint.config.ts @@ -0,0 +1,22 @@ +import { globalIgnores } from 'eslint/config' +import { defineConfigWithVueTs, vueTsConfigs } from '@vue/eslint-config-typescript' +import pluginVue from 'eslint-plugin-vue' +import skipFormatting from '@vue/eslint-config-prettier/skip-formatting' + +// To allow more languages other than `ts` in `.vue` files, uncomment the following lines: +// import { configureVueProject } from '@vue/eslint-config-typescript' +// configureVueProject({ scriptLangs: ['ts', 'tsx'] }) +// More info at https://github.com/vuejs/eslint-config-typescript/#advanced-setup + +export default defineConfigWithVueTs( + { + name: 'app/files-to-lint', + files: ['**/*.{ts,mts,tsx,vue}'], + }, + + globalIgnores(['**/dist/**', '**/dist-ssr/**', '**/coverage/**']), + + pluginVue.configs['flat/essential'], + vueTsConfigs.recommended, + skipFormatting, +) diff --git a/index.html b/index.html new file mode 100644 index 0000000..9793b47 --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + 龙儿的图库 + + +
+ + + diff --git a/package.json b/package.json new file mode 100644 index 0000000..cc33398 --- /dev/null +++ b/package.json @@ -0,0 +1,38 @@ +{ + "name": "long-picture-frontend", + "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", + "lint": "eslint . --fix", + "format": "prettier --write src/" + }, + "dependencies": { + "ant-design-vue": "4.x", + "pinia": "^3.0.3", + "vue": "^3.5.17", + "vue-router": "^4.5.1" + }, + "devDependencies": { + "@tsconfig/node22": "^22.0.2", + "@types/node": "^22.15.32", + "@vitejs/plugin-vue": "^6.0.0", + "@vue/eslint-config-prettier": "^10.2.0", + "@vue/eslint-config-typescript": "^14.5.1", + "@vue/tsconfig": "^0.7.0", + "eslint": "^9.29.0", + "eslint-plugin-vue": "~10.2.0", + "jiti": "^2.4.2", + "npm-run-all2": "^8.0.4", + "prettier": "3.5.3", + "typescript": "~5.8.0", + "vite": "^7.0.0", + "vite-plugin-vue-devtools": "^7.7.7", + "vue-tsc": "^2.2.10" + } +} diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..dfa7e9118228bad08875ef1f0a58043c708bb8b2 GIT binary patch literal 4286 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 +import { RouterLink, RouterView } from 'vue-router' +import HelloWorld from './components/HelloWorld.vue' + + + + + diff --git a/src/assets/base.css b/src/assets/base.css new file mode 100644 index 0000000..8816868 --- /dev/null +++ b/src/assets/base.css @@ -0,0 +1,86 @@ +/* color palette from */ +:root { + --vt-c-white: #ffffff; + --vt-c-white-soft: #f8f8f8; + --vt-c-white-mute: #f2f2f2; + + --vt-c-black: #181818; + --vt-c-black-soft: #222222; + --vt-c-black-mute: #282828; + + --vt-c-indigo: #2c3e50; + + --vt-c-divider-light-1: rgba(60, 60, 60, 0.29); + --vt-c-divider-light-2: rgba(60, 60, 60, 0.12); + --vt-c-divider-dark-1: rgba(84, 84, 84, 0.65); + --vt-c-divider-dark-2: rgba(84, 84, 84, 0.48); + + --vt-c-text-light-1: var(--vt-c-indigo); + --vt-c-text-light-2: rgba(60, 60, 60, 0.66); + --vt-c-text-dark-1: var(--vt-c-white); + --vt-c-text-dark-2: rgba(235, 235, 235, 0.64); +} + +/* semantic color variables for this project */ +:root { + --color-background: var(--vt-c-white); + --color-background-soft: var(--vt-c-white-soft); + --color-background-mute: var(--vt-c-white-mute); + + --color-border: var(--vt-c-divider-light-2); + --color-border-hover: var(--vt-c-divider-light-1); + + --color-heading: var(--vt-c-text-light-1); + --color-text: var(--vt-c-text-light-1); + + --section-gap: 160px; +} + +@media (prefers-color-scheme: dark) { + :root { + --color-background: var(--vt-c-black); + --color-background-soft: var(--vt-c-black-soft); + --color-background-mute: var(--vt-c-black-mute); + + --color-border: var(--vt-c-divider-dark-2); + --color-border-hover: var(--vt-c-divider-dark-1); + + --color-heading: var(--vt-c-text-dark-1); + --color-text: var(--vt-c-text-dark-2); + } +} + +*, +*::before, +*::after { + box-sizing: border-box; + margin: 0; + font-weight: normal; +} + +body { + min-height: 100vh; + color: var(--color-text); + background: var(--color-background); + transition: + color 0.5s, + background-color 0.5s; + line-height: 1.6; + font-family: + Inter, + -apple-system, + BlinkMacSystemFont, + 'Segoe UI', + Roboto, + Oxygen, + Ubuntu, + Cantarell, + 'Fira Sans', + 'Droid Sans', + 'Helvetica Neue', + sans-serif; + font-size: 15px; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} diff --git a/src/assets/logo.svg b/src/assets/logo.svg new file mode 100644 index 0000000..7565660 --- /dev/null +++ b/src/assets/logo.svg @@ -0,0 +1 @@ + diff --git a/src/assets/main.css b/src/assets/main.css new file mode 100644 index 0000000..36fb845 --- /dev/null +++ b/src/assets/main.css @@ -0,0 +1,35 @@ +@import './base.css'; + +#app { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + font-weight: normal; +} + +a, +.green { + text-decoration: none; + color: hsla(160, 100%, 37%, 1); + transition: 0.4s; + padding: 3px; +} + +@media (hover: hover) { + a:hover { + background-color: hsla(160, 100%, 37%, 0.2); + } +} + +@media (min-width: 1024px) { + body { + display: flex; + place-items: center; + } + + #app { + display: grid; + grid-template-columns: 1fr 1fr; + padding: 0 2rem; + } +} diff --git a/src/components/HelloWorld.vue b/src/components/HelloWorld.vue new file mode 100644 index 0000000..d174cf8 --- /dev/null +++ b/src/components/HelloWorld.vue @@ -0,0 +1,41 @@ + + + + + diff --git a/src/components/TheWelcome.vue b/src/components/TheWelcome.vue new file mode 100644 index 0000000..6092dff --- /dev/null +++ b/src/components/TheWelcome.vue @@ -0,0 +1,94 @@ + + + diff --git a/src/components/WelcomeItem.vue b/src/components/WelcomeItem.vue new file mode 100644 index 0000000..6d7086a --- /dev/null +++ b/src/components/WelcomeItem.vue @@ -0,0 +1,87 @@ + + + diff --git a/src/components/icons/IconCommunity.vue b/src/components/icons/IconCommunity.vue new file mode 100644 index 0000000..2dc8b05 --- /dev/null +++ b/src/components/icons/IconCommunity.vue @@ -0,0 +1,7 @@ + diff --git a/src/components/icons/IconDocumentation.vue b/src/components/icons/IconDocumentation.vue new file mode 100644 index 0000000..6d4791c --- /dev/null +++ b/src/components/icons/IconDocumentation.vue @@ -0,0 +1,7 @@ + diff --git a/src/components/icons/IconEcosystem.vue b/src/components/icons/IconEcosystem.vue new file mode 100644 index 0000000..c3a4f07 --- /dev/null +++ b/src/components/icons/IconEcosystem.vue @@ -0,0 +1,7 @@ + diff --git a/src/components/icons/IconSupport.vue b/src/components/icons/IconSupport.vue new file mode 100644 index 0000000..7452834 --- /dev/null +++ b/src/components/icons/IconSupport.vue @@ -0,0 +1,7 @@ + diff --git a/src/components/icons/IconTooling.vue b/src/components/icons/IconTooling.vue new file mode 100644 index 0000000..660598d --- /dev/null +++ b/src/components/icons/IconTooling.vue @@ -0,0 +1,19 @@ + + diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..f19488f --- /dev/null +++ b/src/main.ts @@ -0,0 +1,17 @@ +import './assets/main.css' + +import { createApp } from 'vue' +import { createPinia } from 'pinia' + +import App from './App.vue' +import router from './router' +import Antd from "ant-design-vue"; +import "ant-design-vue/dist/reset.css"; + +const app = createApp(App) +app.use(Antd); +app.use(createPinia()) +app.use(router) + +app.mount('#app') + diff --git a/src/router/index.ts b/src/router/index.ts new file mode 100644 index 0000000..3e49915 --- /dev/null +++ b/src/router/index.ts @@ -0,0 +1,23 @@ +import { createRouter, createWebHistory } from 'vue-router' +import HomeView from '../views/HomeView.vue' + +const router = createRouter({ + history: createWebHistory(import.meta.env.BASE_URL), + routes: [ + { + path: '/', + name: 'home', + component: HomeView, + }, + { + path: '/about', + name: 'about', + // 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/AboutView.vue'), + }, + ], +}) + +export default router diff --git a/src/stores/counter.ts b/src/stores/counter.ts new file mode 100644 index 0000000..b6757ba --- /dev/null +++ b/src/stores/counter.ts @@ -0,0 +1,12 @@ +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 } +}) diff --git a/src/views/AboutView.vue b/src/views/AboutView.vue new file mode 100644 index 0000000..756ad2a --- /dev/null +++ b/src/views/AboutView.vue @@ -0,0 +1,15 @@ + + + diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue new file mode 100644 index 0000000..d5c0217 --- /dev/null +++ b/src/views/HomeView.vue @@ -0,0 +1,9 @@ + + + diff --git a/tsconfig.app.json b/tsconfig.app.json new file mode 100644 index 0000000..913b8f2 --- /dev/null +++ b/tsconfig.app.json @@ -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/*"] + } + } +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..66b5e57 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,11 @@ +{ + "files": [], + "references": [ + { + "path": "./tsconfig.node.json" + }, + { + "path": "./tsconfig.app.json" + } + ] +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 0000000..a83dfc9 --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,19 @@ +{ + "extends": "@tsconfig/node22/tsconfig.json", + "include": [ + "vite.config.*", + "vitest.config.*", + "cypress.config.*", + "nightwatch.conf.*", + "playwright.config.*", + "eslint.config.*" + ], + "compilerOptions": { + "noEmit": true, + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + + "module": "ESNext", + "moduleResolution": "Bundler", + "types": ["node"] + } +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..4217010 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,18 @@ +import { fileURLToPath, URL } from 'node:url' + +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' +import vueDevTools from 'vite-plugin-vue-devtools' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [ + vue(), + vueDevTools(), + ], + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)) + }, + }, +})