diff --git a/.gitignore b/.gitignore
index 70a57c3..a547bf3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,7 +15,7 @@ dist-ssr
# Editor directories and files
.vscode/*
!.vscode/extensions.json
-# .idea
+.idea
.DS_Store
*.suo
*.ntvs*
diff --git a/package.json b/package.json
index 4f4d4f4..0f79b3e 100644
--- a/package.json
+++ b/package.json
@@ -20,6 +20,7 @@
"@vue/tsconfig": "^0.9.1",
"oxfmt": "^0.52.0",
"oxlint": "^1.67.0",
+ "sass": "^1.100.0",
"typescript": "~6.0.2",
"vite": "^8.0.12",
"vue-tsc": "^3.2.8"
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 01316f5..2a8ee35 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -20,7 +20,7 @@ importers:
version: 24.12.4
'@vitejs/plugin-vue':
specifier: ^6.0.6
- version: 6.0.7(vite@8.0.14(@types/node@24.12.4))(vue@3.5.35(typescript@6.0.3))
+ version: 6.0.7(vite@8.0.14(@types/node@24.12.4)(sass@1.100.0))(vue@3.5.35(typescript@6.0.3))
'@vue/tsconfig':
specifier: ^0.9.1
version: 0.9.1(typescript@6.0.3)(vue@3.5.35(typescript@6.0.3))
@@ -30,12 +30,15 @@ importers:
oxlint:
specifier: ^1.67.0
version: 1.67.0
+ sass:
+ specifier: ^1.100.0
+ version: 1.100.0
typescript:
specifier: ~6.0.2
version: 6.0.3
vite:
specifier: ^8.0.12
- version: 8.0.14(@types/node@24.12.4)
+ version: 8.0.14(@types/node@24.12.4)(sass@1.100.0)
vue-tsc:
specifier: ^3.2.8
version: 3.3.3(typescript@6.0.3)
@@ -340,6 +343,94 @@ packages:
cpu: [x64]
os: [win32]
+ '@parcel/watcher-android-arm64@2.5.6':
+ resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [android]
+
+ '@parcel/watcher-darwin-arm64@2.5.6':
+ resolution: {integrity: sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@parcel/watcher-darwin-x64@2.5.6':
+ resolution: {integrity: sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@parcel/watcher-freebsd-x64@2.5.6':
+ resolution: {integrity: sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@parcel/watcher-linux-arm-glibc@2.5.6':
+ resolution: {integrity: sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm]
+ os: [linux]
+ libc: [glibc]
+
+ '@parcel/watcher-linux-arm-musl@2.5.6':
+ resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm]
+ os: [linux]
+ libc: [musl]
+
+ '@parcel/watcher-linux-arm64-glibc@2.5.6':
+ resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@parcel/watcher-linux-arm64-musl@2.5.6':
+ resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@parcel/watcher-linux-x64-glibc@2.5.6':
+ resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@parcel/watcher-linux-x64-musl@2.5.6':
+ resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@parcel/watcher-win32-arm64@2.5.6':
+ resolution: {integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@parcel/watcher-win32-ia32@2.5.6':
+ resolution: {integrity: sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@parcel/watcher-win32-x64@2.5.6':
+ resolution: {integrity: sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [win32]
+
+ '@parcel/watcher@2.5.6':
+ resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==}
+ engines: {node: '>= 10.0.0'}
+
'@rolldown/binding-android-arm64@1.0.2':
resolution: {integrity: sha512-ZS4D1JPGn/MYQN/SYDWftIE/nVsM8j/AFOYEzAoOE2O3NktQOZru+/vYXGbR/qtdLdIfGCP0lcoJiYVzsEz+iQ==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -515,6 +606,10 @@ packages:
async-validator@4.2.5:
resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==}
+ chokidar@5.0.0:
+ resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==}
+ engines: {node: '>= 20.19.0'}
+
css-render@0.15.14:
resolution: {integrity: sha512-9nF4PdUle+5ta4W5SyZdLCCmFd37uVimSjg1evcTqKJCyvCEEj12WKzOSBNak6r4im4J4iYXKH1OWpUV5LBYFg==}
@@ -564,6 +659,17 @@ packages:
resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==}
engines: {node: '>=12.0.0'}
+ immutable@5.1.6:
+ resolution: {integrity: sha512-q1swsS8K7L8usSHuOqF2TAoCCkonYz0SG38wLAggaa4Wml70zixIvt2ql4coQ2C2B3hTjltJry4r6bULwgAXLQ==}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
lightningcss-android-arm64@1.32.0:
resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==}
engines: {node: '>= 12.0.0'}
@@ -661,6 +767,9 @@ packages:
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
+ node-addon-api@7.1.1:
+ resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==}
+
oxfmt@0.52.0:
resolution: {integrity: sha512-nJlYM35F64zTDMecCNhoHNkf+D/eHv7xcjj9XDSj+bFAVtN93m7v8DQMdHd6nDG6Akf/kEYYHmDUBs2Dz27Sug==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -701,11 +810,20 @@ packages:
resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==}
engines: {node: ^10 || ^12 || >=14}
+ readdirp@5.0.0:
+ resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==}
+ engines: {node: '>= 20.19.0'}
+
rolldown@1.0.2:
resolution: {integrity: sha512-oZx5zVDtVB44AW3eaifgDml1gWRDZGvjcfdxonE4swNPG98PrrXjaO/KrnUjzlMnztCCRVlUueA1kCXhARGk6g==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
+ sass@1.100.0:
+ resolution: {integrity: sha512-B5j0rYMlinhhOo9tjQebMVVn0TfyXAF+wB3b2ggZUuJ/is/Y+7+JGjirAMxHZ9Z3hIP98NPfamlAkBHa1lAaXQ==}
+ engines: {node: '>=20.19.0'}
+ hasBin: true
+
seemly@0.3.10:
resolution: {integrity: sha512-2+SMxtG1PcsL0uyhkumlOU6Qo9TAQ/WyH7tthnPIOQB05/12jz9naq6GZ6iZ6ApVsO3rr2gsnTf3++OV63kE1Q==}
@@ -978,6 +1096,67 @@ snapshots:
'@oxlint/binding-win32-x64-msvc@1.67.0':
optional: true
+ '@parcel/watcher-android-arm64@2.5.6':
+ optional: true
+
+ '@parcel/watcher-darwin-arm64@2.5.6':
+ optional: true
+
+ '@parcel/watcher-darwin-x64@2.5.6':
+ optional: true
+
+ '@parcel/watcher-freebsd-x64@2.5.6':
+ optional: true
+
+ '@parcel/watcher-linux-arm-glibc@2.5.6':
+ optional: true
+
+ '@parcel/watcher-linux-arm-musl@2.5.6':
+ optional: true
+
+ '@parcel/watcher-linux-arm64-glibc@2.5.6':
+ optional: true
+
+ '@parcel/watcher-linux-arm64-musl@2.5.6':
+ optional: true
+
+ '@parcel/watcher-linux-x64-glibc@2.5.6':
+ optional: true
+
+ '@parcel/watcher-linux-x64-musl@2.5.6':
+ optional: true
+
+ '@parcel/watcher-win32-arm64@2.5.6':
+ optional: true
+
+ '@parcel/watcher-win32-ia32@2.5.6':
+ optional: true
+
+ '@parcel/watcher-win32-x64@2.5.6':
+ optional: true
+
+ '@parcel/watcher@2.5.6':
+ dependencies:
+ detect-libc: 2.1.2
+ is-glob: 4.0.3
+ node-addon-api: 7.1.1
+ picomatch: 4.0.4
+ optionalDependencies:
+ '@parcel/watcher-android-arm64': 2.5.6
+ '@parcel/watcher-darwin-arm64': 2.5.6
+ '@parcel/watcher-darwin-x64': 2.5.6
+ '@parcel/watcher-freebsd-x64': 2.5.6
+ '@parcel/watcher-linux-arm-glibc': 2.5.6
+ '@parcel/watcher-linux-arm-musl': 2.5.6
+ '@parcel/watcher-linux-arm64-glibc': 2.5.6
+ '@parcel/watcher-linux-arm64-musl': 2.5.6
+ '@parcel/watcher-linux-x64-glibc': 2.5.6
+ '@parcel/watcher-linux-x64-musl': 2.5.6
+ '@parcel/watcher-win32-arm64': 2.5.6
+ '@parcel/watcher-win32-ia32': 2.5.6
+ '@parcel/watcher-win32-x64': 2.5.6
+ optional: true
+
'@rolldown/binding-android-arm64@1.0.2':
optional: true
@@ -1044,10 +1223,10 @@ snapshots:
dependencies:
undici-types: 7.16.0
- '@vitejs/plugin-vue@6.0.7(vite@8.0.14(@types/node@24.12.4))(vue@3.5.35(typescript@6.0.3))':
+ '@vitejs/plugin-vue@6.0.7(vite@8.0.14(@types/node@24.12.4)(sass@1.100.0))(vue@3.5.35(typescript@6.0.3))':
dependencies:
'@rolldown/pluginutils': 1.0.1
- vite: 8.0.14(@types/node@24.12.4)
+ vite: 8.0.14(@types/node@24.12.4)(sass@1.100.0)
vue: 3.5.35(typescript@6.0.3)
'@volar/language-core@2.4.28':
@@ -1135,6 +1314,10 @@ snapshots:
async-validator@4.2.5: {}
+ chokidar@5.0.0:
+ dependencies:
+ readdirp: 5.0.0
+
css-render@0.15.14:
dependencies:
'@emotion/hash': 0.8.0
@@ -1167,6 +1350,16 @@ snapshots:
highlight.js@11.11.1: {}
+ immutable@5.1.6: {}
+
+ is-extglob@2.1.1:
+ optional: true
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+ optional: true
+
lightningcss-android-arm64@1.32.0:
optional: true
@@ -1250,6 +1443,9 @@ snapshots:
nanoid@3.3.12: {}
+ node-addon-api@7.1.1:
+ optional: true
+
oxfmt@0.52.0:
dependencies:
tinypool: 2.1.0
@@ -1308,6 +1504,8 @@ snapshots:
picocolors: 1.1.1
source-map-js: 1.2.1
+ readdirp@5.0.0: {}
+
rolldown@1.0.2:
dependencies:
'@oxc-project/types': 0.132.0
@@ -1329,6 +1527,14 @@ snapshots:
'@rolldown/binding-win32-arm64-msvc': 1.0.2
'@rolldown/binding-win32-x64-msvc': 1.0.2
+ sass@1.100.0:
+ dependencies:
+ chokidar: 5.0.0
+ immutable: 5.1.6
+ source-map-js: 1.2.1
+ optionalDependencies:
+ '@parcel/watcher': 2.5.6
+
seemly@0.3.10: {}
source-map-js@1.2.1: {}
@@ -1354,7 +1560,7 @@ snapshots:
evtd: 0.2.4
vue: 3.5.35(typescript@6.0.3)
- vite@8.0.14(@types/node@24.12.4):
+ vite@8.0.14(@types/node@24.12.4)(sass@1.100.0):
dependencies:
lightningcss: 1.32.0
picomatch: 4.0.4
@@ -1364,6 +1570,7 @@ snapshots:
optionalDependencies:
'@types/node': 24.12.4
fsevents: 2.3.3
+ sass: 1.100.0
vooks@0.2.12(vue@3.5.35(typescript@6.0.3)):
dependencies:
diff --git a/src/App.vue b/src/App.vue
index 388b05e..830ebc8 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -1,7 +1,10 @@
-
-
-
+
+
+
+
+
+
diff --git a/src/common/naiveUI/useNaiveUi.ts b/src/common/naiveUI/useNaiveUi.ts
new file mode 100644
index 0000000..dbed63e
--- /dev/null
+++ b/src/common/naiveUI/useNaiveUi.ts
@@ -0,0 +1,7 @@
+import { create, NButton, NConfigProvider } from "naive-ui";
+
+const useNaiveUi = create({
+ components: [NButton, NConfigProvider]
+});
+
+export default useNaiveUi;
diff --git a/src/common/style/global.scss b/src/common/style/global.scss
new file mode 100644
index 0000000..cca57b3
--- /dev/null
+++ b/src/common/style/global.scss
@@ -0,0 +1,5 @@
+* {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+}
diff --git a/src/common/style/index.scss b/src/common/style/index.scss
new file mode 100644
index 0000000..6cd63a7
--- /dev/null
+++ b/src/common/style/index.scss
@@ -0,0 +1,2 @@
+/** 全局样式 */
+@use "@/common/style/global.scss";
diff --git a/src/common/style/variables.scss b/src/common/style/variables.scss
new file mode 100644
index 0000000..22da41d
--- /dev/null
+++ b/src/common/style/variables.scss
@@ -0,0 +1 @@
+$bgColor: #ff0000;
diff --git a/src/main.ts b/src/main.ts
index 2425c0f..5e20a72 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -1,5 +1,7 @@
-import { createApp } from 'vue'
-import './style.css'
-import App from './App.vue'
+import { createApp } from "vue";
+import "@/common/style/index.scss";
+import App from "./App.vue";
+import useNaiveUi from "./common/naiveUI/useNaiveUi.ts";
-createApp(App).mount('#app')
+const app = createApp(App);
+app.use(useNaiveUi).mount("#app");
diff --git a/vite.config.ts b/vite.config.ts
index bbcf80c..d37700a 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -1,7 +1,13 @@
-import { defineConfig } from 'vite'
-import vue from '@vitejs/plugin-vue'
+import { defineConfig } from "vite";
+import vue from "@vitejs/plugin-vue";
+import { fileURLToPath, URL } from "node:url";
// https://vite.dev/config/
export default defineConfig({
plugins: [vue()],
-})
+ resolve: {
+ alias: {
+ "@": fileURLToPath(new URL("./src", import.meta.url))
+ }
+ }
+});