diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000000000000000000000000000000000000..da0310f513b62de04d1c71b03cee1dc0b1accc24
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,13 @@
+# editorconfig.org
+root = true
+
+[*]
+indent_style = space
+indent_size = 2
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+[*.md]
+trim_trailing_whitespace = false
\ No newline at end of file
diff --git a/.eslintrc.js b/.eslintrc.js
new file mode 100644
index 0000000000000000000000000000000000000000..3e8240a73c7f3b2ac96737489be63cc1e1131ab2
--- /dev/null
+++ b/.eslintrc.js
@@ -0,0 +1,14 @@
+module.exports = {
+ extends: ['@mysteel', 'prettier'],
+ plugins: ['prettier'],
+ rules: {
+ 'prettier/prettier': [
+ 'error',
+ {
+ endOfLine: 'auto',
+ },
+ ],
+ 'no-undef': 'off',
+ 'no-console': 'off',
+ },
+}
diff --git a/.gitignore b/.gitignore
index 5d947ca8879f8a9072fe485c566204e3c2929e80..4fbaf643f76b0ef8f2906b5e8f8a41ad9382fb9c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,18 +1,30 @@
-# Build and Release Folders
-bin-debug/
-bin-release/
-[Oo]bj/
-[Bb]in/
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
-# Other files and folders
-.settings/
+node_modules
+.DS_Store
+dist
+dist-ssr
+coverage
+*.local
-# Executables
-*.swf
-*.air
-*.ipa
-*.apk
+/cypress/videos/
+/cypress/screenshots/
+src/auto-imports.d.ts
+src/components.d.ts
-# Project files, i.e. `.project`, `.actionScriptProperties` and `.flexProperties`
-# should NOT be excluded as they contain compiler settings and other important
-# information for Eclipse / Flash Builder.
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/.husky/commit-msg b/.husky/commit-msg
new file mode 100644
index 0000000000000000000000000000000000000000..e810522282d3edab703ac550a8dbcd48c7f435b7
--- /dev/null
+++ b/.husky/commit-msg
@@ -0,0 +1,4 @@
+#!/usr/bin/env sh
+. "$(dirname -- "$0")/_/husky.sh"
+
+npx --no -- commitlint --edit $1
diff --git a/.prettierrc.js b/.prettierrc.js
new file mode 100644
index 0000000000000000000000000000000000000000..e33972274adbf6f88dffef5d095f32232817f7b6
--- /dev/null
+++ b/.prettierrc.js
@@ -0,0 +1,8 @@
+module.exports = {
+ printWidth: 80, // 一行的字符数,如果超过会进行换行,默认为80
+ tabWidth: 2, // 一个 tab 代表几个空格数,默认为 2 个
+ useTabs: false, //是否使用 tab 进行缩进,默认为false,表示用空格进行缩减
+ singleQuote: true, // 字符串是否使用单引号,默认为 false,使用双引号
+ semi: false, // 行尾是否使用分号,默认为true
+ bracketSpacing: true, // 对象大括号直接是否有空格,默认为 true,效果:{ a: 1 }
+}
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
new file mode 100644
index 0000000000000000000000000000000000000000..c0a6e5a48110e472b09d68afa2a030af6ab3208b
--- /dev/null
+++ b/.vscode/extensions.json
@@ -0,0 +1,3 @@
+{
+ "recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"]
+}
diff --git a/README.md b/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..563d4ca4e257d6735ed564b1f9df7005815cc9bf
--- /dev/null
+++ b/README.md
@@ -0,0 +1,35 @@
+# vue-tempalte-3
+
+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) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin).
+
+## Customize configuration
+
+See [Vite Configuration Reference](https://vitejs.dev/config/).
+
+## Project Setup
+
+```sh
+npm install
+```
+
+### Compile and Hot-Reload for Development
+
+```sh
+npm run dev
+```
+
+### Compile and Minify for Production
+
+```sh
+npm run build
+```
+
+### Run Unit Tests with [Vitest](https://vitest.dev/)
+
+```sh
+npm run test:unit
+```
diff --git a/commitlint.config.js b/commitlint.config.js
new file mode 100644
index 0000000000000000000000000000000000000000..6e2f89873094e1336784225718b08b8c9829bece
Binary files /dev/null and b/commitlint.config.js differ
diff --git a/index.html b/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..030a6ff51bfc6f6adcc472f6d8c02db92ce947a8
--- /dev/null
+++ b/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ Vite App
+
+
+
+
+
+
diff --git a/jsdoc.json b/jsdoc.json
new file mode 100644
index 0000000000000000000000000000000000000000..6fb1c74d5996db893d84988eec5a46df393cd4b6
--- /dev/null
+++ b/jsdoc.json
@@ -0,0 +1,16 @@
+{
+ "plugins": [
+ "node_modules/jsdoc-vuejs"
+ ],
+ "source": {
+ "include": [ "src/" ],
+ "exclude": [ "src/assets" ],
+ "includePattern": "\\.(vue|js)$"
+ },
+ "opts": {
+ "template": "node_modules/minami",
+ "encoding": "utf8",
+ "destination": "./docs/",
+ "recurse": true
+ }
+}
diff --git a/mock/index.js b/mock/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/package.json b/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..e75d5dbaa2ff45adf3eb07ad458d3b93ee4fd8e1
--- /dev/null
+++ b/package.json
@@ -0,0 +1,48 @@
+{
+ "name": "vue-tempalte-3",
+ "version": "0.0.0",
+ "scripts": {
+ "dev": "vite",
+ "build": "vite build",
+ "preview": "vite preview --port 4173",
+ "test:unit": "vitest --environment jsdom",
+ "lint:js": "eslint --ext \".js,.vue\" .",
+ "lint:prettier": "prettier --check .",
+ "lint": "yarn lint:js && yarn lint:prettier",
+ "lintfix": "prettier --write --list-different . && yarn lint:js --fix",
+ "docs": "jsdoc -c jsdoc.json"
+ },
+ "husky": {
+ "hooks": {
+ "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
+ }
+ },
+ "dependencies": {
+ "axios": "^0.27.2",
+ "lodash": "^4.17.21",
+ "pinia": "^2.0.17",
+ "vue": "^3.2.37",
+ "vue-router": "^4.1.3"
+ },
+ "devDependencies": {
+ "@commitlint/cli": "^17.1.2",
+ "@commitlint/config-conventional": "^17.1.0",
+ "@vitejs/plugin-vue": "^3.0.1",
+ "@vue/compiler-sfc": "^3.2.38",
+ "@vue/test-utils": "^2.0.2",
+ "eslint": "^8.23.0",
+ "eslint-config-prettier": "^8.5.0",
+ "eslint-plugin-prettier": "^4.2.1",
+ "eslint-plugin-vue": "^9.4.0",
+ "husky": "^8.0.1",
+ "jsdoc": "^3.6.11",
+ "jsdoc-vuejs": "^4.0.0",
+ "jsdom": "^20.0.0",
+ "minami": "^1.2.3",
+ "prettier": "^2.7.1",
+ "unplugin-auto-import": "^0.11.2",
+ "unplugin-vue-components": "^0.22.4",
+ "vite": "^3.0.4",
+ "vitest": "^0.21.0"
+ }
+}
diff --git a/public/favicon.ico b/public/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..df36fcfb72584e00488330b560ebcf34a41c64c2
Binary files /dev/null and b/public/favicon.ico differ
diff --git a/src/App.vue b/src/App.vue
new file mode 100644
index 0000000000000000000000000000000000000000..e864195002371619c22d0454351235745b2a4f3f
--- /dev/null
+++ b/src/App.vue
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+ Home
+ About
+
+
+
+
+
+
+
+
diff --git a/src/api/index.js b/src/api/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..e34b770657beff3962de6c8bb24bf79278eb97bf
--- /dev/null
+++ b/src/api/index.js
@@ -0,0 +1,27 @@
+import axios from 'axios'
+
+const service = axios.create({
+ baseURL: process.env.VUE_APP_BASE_API,
+ headers: {},
+ timeout: 120000 // request timeout
+})
+
+// 请求拦截
+service.interceptors.request.use(
+ config => config,
+ error => {
+ // do something with request error
+ console.log(error) // for debug
+ return Promise.reject(error)
+ }
+)
+
+// 响应拦截
+service.interceptors.response.use(
+ response => response,
+ error => {
+ return Promise.reject(error)
+ }
+)
+
+export default service
diff --git a/src/assets/logo.svg b/src/assets/logo.svg
new file mode 100644
index 0000000000000000000000000000000000000000..bc826fed80ad0c846e5ca25978776f555f4a2370
--- /dev/null
+++ b/src/assets/logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/components/HelloWorld.vue b/src/components/HelloWorld.vue
new file mode 100644
index 0000000000000000000000000000000000000000..1b8faac1521345513353e96050dd24d94610d432
--- /dev/null
+++ b/src/components/HelloWorld.vue
@@ -0,0 +1,43 @@
+
+
+
+
+
{{ msg }}
+
+ You’ve successfully created a project with
+ Vite +
+ Vue 3 .
+
+
+
+
+
diff --git a/src/components/TheWelcome.vue b/src/components/TheWelcome.vue
new file mode 100644
index 0000000000000000000000000000000000000000..d3d2e7acc8a9deeb26e48169ee3cbc64d2b54f2f
--- /dev/null
+++ b/src/components/TheWelcome.vue
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+ Documentation
+
+ Vue’s
+ official documentation
+ provides you with all information you need to get started.
+
+
+
+
+
+
+ Tooling
+
+ This project is served and bundled with
+ Vite . The recommended IDE
+ setup is VSCode +
+ Volar . If you need to test
+ your components and web pages, check out
+ Cypress and
+ Cypress Component Testing .
+
+
+
+ More instructions are available in README.md
.
+
+
+
+
+
+
+ Ecosystem
+
+ Get official tools and libraries for your project:
+ Pinia ,
+ Vue Router ,
+ Vue Test Utils , and
+ Vue Dev Tools . If you need more
+ resources, we suggest paying
+ Awesome Vue
+ a visit.
+
+
+
+
+
+
+ Community
+
+ Got stuck? Ask your question on
+ Vue Land , our official Discord server, or
+ StackOverflow .
+ You should also subscribe to
+ our mailing list and follow the official
+ @vuejs
+ twitter account for latest news in the Vue world.
+
+
+
+
+
+
+ Support Vue
+
+ As an independent project, Vue relies on community backing for its sustainability. You can help
+ us by
+ becoming a sponsor .
+
+
diff --git a/src/components/WelcomeItem.vue b/src/components/WelcomeItem.vue
new file mode 100644
index 0000000000000000000000000000000000000000..ba0def33c0e523d8c82426d76d76c39b482b21e0
--- /dev/null
+++ b/src/components/WelcomeItem.vue
@@ -0,0 +1,86 @@
+
+
+
+
+
diff --git a/src/components/icons/IconCommunity.vue b/src/components/icons/IconCommunity.vue
new file mode 100644
index 0000000000000000000000000000000000000000..2dc8b055253af30fb797037e2fe260505f0cf711
--- /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 0000000000000000000000000000000000000000..6d4791cfbcf2782b3e5ffbabd042d4c47b2fbbed
--- /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 0000000000000000000000000000000000000000..c3a4f078c0bd340a33c61ea9ecd8a755d03571ed
--- /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 0000000000000000000000000000000000000000..7db961e4d457094e582e8a5eb349a62222a5f79c
--- /dev/null
+++ b/src/components/icons/IconSupport.vue
@@ -0,0 +1,12 @@
+
+
+
+
+
diff --git a/src/components/icons/IconTooling.vue b/src/components/icons/IconTooling.vue
new file mode 100644
index 0000000000000000000000000000000000000000..660598d7c76644ffe126a1a1feb1606650bfb937
--- /dev/null
+++ b/src/components/icons/IconTooling.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
+
diff --git a/src/config/index.js b/src/config/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..2f678b6c625e6b2476a89ce1d795bdb477ad3f0d
--- /dev/null
+++ b/src/config/index.js
@@ -0,0 +1,3 @@
+/**
+ * 配置信息
+ */
\ No newline at end of file
diff --git a/src/constants/index.js b/src/constants/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..ad83531fbb32a4a14f878690ad0bcdf0c073337d
--- /dev/null
+++ b/src/constants/index.js
@@ -0,0 +1,3 @@
+/**
+ * 常量信息, 全局常量等
+ */
\ No newline at end of file
diff --git a/src/directives/index.js b/src/directives/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..9490f0de5e56c5f6d0a40c64c8f7d8675198fbc1
--- /dev/null
+++ b/src/directives/index.js
@@ -0,0 +1,3 @@
+/**
+ * 自定义指令
+ */
\ No newline at end of file
diff --git a/src/enums/demo.js b/src/enums/demo.js
new file mode 100644
index 0000000000000000000000000000000000000000..6b6c17929c0f1657ff5bd078a968a304237a560c
--- /dev/null
+++ b/src/enums/demo.js
@@ -0,0 +1,7 @@
+import createEnum from './index'
+
+export const DEMO = createEnum({
+ ALL: ['0', 'all'],
+ MAIN_STORE: ['1', 'main'],
+ PUBLISH_TIME: ['2', 'time'],
+})
diff --git a/src/enums/index.js b/src/enums/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..b407a0125428c35a6577be2f3d5413d707feefb7
--- /dev/null
+++ b/src/enums/index.js
@@ -0,0 +1,39 @@
+/**
+ * 项目所有Enum
+ */
+/**
+ * 枚举定义工具
+ * 示例:
+ * const STATUS = createEnum({
+ * ACTIVE: [1, 'active'],
+ * INACTIVE: [2, 'inactive']
+ * })
+ * 通过枚举值列表:STATUS.list
+ * 获取枚举值:STATUS.ACTIVE
+ * 获取枚举描述:STATUS.getDesc('ACTIVE')
+ * 通过枚举值获取描述:STATUS.getDescFromValue(STATUS.INACTIVE)
+ */
+export default function createEnum(definition) {
+ const strToValueMap = {}
+ const numToDescMap = {}
+ const list = []
+ const listNotEmpty = []
+ for (const enumName of Object.keys(definition)) {
+ const [value, desc] = definition[enumName]
+ strToValueMap[enumName] = value
+ numToDescMap[value] = desc
+ list.push({ label: desc, value })
+ }
+ listNotEmpty.push(...list.filter((item) => item.value !== ''))
+ return Object.freeze({
+ list,
+ listNotEmpty,
+ ...strToValueMap,
+ getDesc(enumName) {
+ return (definition[enumName] && definition[enumName][1]) || ''
+ },
+ getDescFromValue(value) {
+ return numToDescMap[value] || ''
+ },
+ })
+}
diff --git a/src/hooks/useDemo.js b/src/hooks/useDemo.js
new file mode 100644
index 0000000000000000000000000000000000000000..0d7d800adc7928403b3db5325f07886fc0690c55
--- /dev/null
+++ b/src/hooks/useDemo.js
@@ -0,0 +1,9 @@
+/**
+ * 项目所有单独功能的hooks
+ */
+export const useDemo = () => {
+ const demoList = reactive([])
+ return {
+ demoList
+ }
+}
diff --git a/src/layout/layout.vue b/src/layout/layout.vue
new file mode 100644
index 0000000000000000000000000000000000000000..bfe617fa53e9eee94d317f1efa6a09d7414f5cb0
--- /dev/null
+++ b/src/layout/layout.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/lib/index.js b/src/lib/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..cc21f1e09627fdb5a45f4086f2751740910f40cf
--- /dev/null
+++ b/src/lib/index.js
@@ -0,0 +1,3 @@
+/**
+ * 外部引用的插件存放及修改文件
+ */
\ No newline at end of file
diff --git a/src/main.js b/src/main.js
new file mode 100644
index 0000000000000000000000000000000000000000..289e4fd8687172ace84d3c0a6c5b762749f202ed
--- /dev/null
+++ b/src/main.js
@@ -0,0 +1,14 @@
+import { createApp } from 'vue'
+import { createPinia } from 'pinia'
+
+import App from './App.vue'
+import router from './router'
+
+import './themes/index.css'
+
+const app = createApp(App)
+
+app.use(createPinia())
+app.use(router)
+
+app.mount('#app')
diff --git a/src/plugins/index.js b/src/plugins/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..7dba22d4135603dde9d9b27d1c860ee427c17518
--- /dev/null
+++ b/src/plugins/index.js
@@ -0,0 +1,6 @@
+/**
+ * 插件,全局使用
+ */
+import _ from 'lodash'
+
+_.cloneDeep()
diff --git a/src/router/index.js b/src/router/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..7a17609ac8b3796522fcc210117fe2a681890eb2
--- /dev/null
+++ b/src/router/index.js
@@ -0,0 +1,17 @@
+import { createRouter, createWebHashHistory } from 'vue-router'
+import HomeView from '../views/HomeView.vue'
+import { demoRoutes } from './modules/demo'
+
+const router = createRouter({
+ history: createWebHashHistory(import.meta.env.BASE_URL),
+ routes: [
+ {
+ path: '/',
+ name: 'home',
+ component: HomeView
+ },
+ ...demoRoutes
+ ]
+})
+
+export default router
diff --git a/src/router/modules/demo.js b/src/router/modules/demo.js
new file mode 100644
index 0000000000000000000000000000000000000000..96846a13ec99671c50eabb03b037fbca2bd8be69
--- /dev/null
+++ b/src/router/modules/demo.js
@@ -0,0 +1,9 @@
+const AboutView = () => import('@/views/AboutView')
+
+export const demoRoutes = [
+ {
+ path: '/about',
+ name: 'about',
+ component: AboutView
+ }
+]
diff --git a/src/store/index.js b/src/store/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..5bde6dbba1304153f431227576f5d0f99d14326b
--- /dev/null
+++ b/src/store/index.js
@@ -0,0 +1,9 @@
+import { createPinia } from 'pinia'
+
+const store = createPinia()
+
+export function setupStore(app) {
+ app.use(store)
+}
+
+export { store }
diff --git a/src/store/modules/counter.js b/src/store/modules/counter.js
new file mode 100644
index 0000000000000000000000000000000000000000..41a96356b70ae3c655ef0c0cf3c8dcefe740ba71
--- /dev/null
+++ b/src/store/modules/counter.js
@@ -0,0 +1,15 @@
+import { defineStore } from 'pinia'
+
+export const useCounterStore = defineStore('counter',{
+ state: () => ({
+ counter: 0
+ }),
+ getters: {
+ doubleCount: (state) => state.counter * 2
+ },
+ actions: {
+ increment() {
+ this.counter++
+ }
+ }
+})
diff --git a/src/styles/index.css b/src/styles/index.css
new file mode 100644
index 0000000000000000000000000000000000000000..47c21fb225e00a572689cc6b38e9406503bb36c2
--- /dev/null
+++ b/src/styles/index.css
@@ -0,0 +1,3 @@
+/**
+公共样式
+ */
\ No newline at end of file
diff --git a/src/themes/base.css b/src/themes/base.css
new file mode 100644
index 0000000000000000000000000000000000000000..7cad7ad711a20d6239f99e41c79ada35808fc0f3
--- /dev/null
+++ b/src/themes/base.css
@@ -0,0 +1,74 @@
+/* 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;
+ position: relative;
+ 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/themes/index.css b/src/themes/index.css
new file mode 100644
index 0000000000000000000000000000000000000000..f50463b9cd53dca6ec8324e0c9431ddf20626b62
--- /dev/null
+++ b/src/themes/index.css
@@ -0,0 +1,40 @@
+/**
+自定义样式主题
+ */
+/* color palette from */
+@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;
+}
+
+@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/utils/index.js b/src/utils/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..db1affec0ab98aa50b51d6a07d7b6296e0fffa02
--- /dev/null
+++ b/src/utils/index.js
@@ -0,0 +1,3 @@
+/**
+ * 存放如公共的工具类函数js
+ */
\ No newline at end of file
diff --git a/src/views/AboutView.vue b/src/views/AboutView.vue
new file mode 100644
index 0000000000000000000000000000000000000000..756ad2a17909837834858538422308120cf09dab
--- /dev/null
+++ b/src/views/AboutView.vue
@@ -0,0 +1,15 @@
+
+
+
This is an about page
+
+
+
+
diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue
new file mode 100644
index 0000000000000000000000000000000000000000..225d93a9f55aaa8d79b7f1487e636afc2898dd5a
--- /dev/null
+++ b/src/views/HomeView.vue
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
diff --git a/vite.config.js b/vite.config.js
new file mode 100644
index 0000000000000000000000000000000000000000..782cf486df493f1447a0ca5bc182b4efb698a35a
--- /dev/null
+++ b/vite.config.js
@@ -0,0 +1,50 @@
+import { fileURLToPath, URL } from 'node:url'
+
+import { defineConfig } from 'vite'
+import vue from '@vitejs/plugin-vue'
+import Components from 'unplugin-vue-components/vite'
+import AutoImport from 'unplugin-auto-import/vite'
+
+
+// https://vitejs.dev/config/
+export default defineConfig({
+ plugins: [
+ vue(),
+ Components({
+ dirs: ['src/components'],
+ extension: ['vue', 'jsx'],
+ include: [/\.vue$/, /\.vue\?vue/, /\.jsx$/],
+ exclude: [
+ /[\\/]node_modules[\\/]/,
+ /[\\/]\.git[\\/]/,
+ /[\\/]\.nuxt[\\/]/,
+ ],
+ deep: true,
+ dts: 'src/components.d.ts',
+ }),
+ AutoImport({
+ include: [
+ /\.[tj]sx?$/, // .ts, .tsx, .js, .jsx
+ /\.vue$/,
+ /\.vue\?vue/, // .vue
+ /\.md$/, // .md
+ ],
+ imports: ['vue'],
+ dirs: [
+ './src/hooks',
+ './src/store/modules',
+ './src/utils',
+ './src/enum',
+ './src/api/modules',
+ // ...
+ ],
+ dts: './src/auto-imports.d.ts',
+ vueTemplate: true,
+ }),
+ ],
+ resolve: {
+ alias: {
+ '@': fileURLToPath(new URL('./src', import.meta.url))
+ }
+ },
+})