Compare commits
	
		
			19 Commits
		
	
	
		
			v1.3.9
			...
			tauri-v1.3
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 22a8cb324a | ||
|  | 5cf3236475 | ||
|  | 6489ec46ae | ||
|  | ac86247876 | ||
|  | c9433e1710 | ||
|  | 60dd22624b | ||
|  | 56760245d4 | ||
|  | d7aebb7dfa | ||
|  | 214341ee0b | ||
|  | 2849463bd6 | ||
|  | 101b6f9000 | ||
|  | 3e0eb72025 | ||
|  | 9f4fb8c3fb | ||
|  | 0dfcf18b64 | ||
|  | ba38119efd | ||
|  | ab9858c7d0 | ||
|  | 5c6ab0b595 | ||
|  | b93c2036ac | ||
|  | af4177e70b | 
							
								
								
									
										64
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						| @@ -1,6 +1,70 @@ | |||||||
| # Changelog | # Changelog | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## [v1.3.11](https://github.com/soybeanjs/soybean-admin/compare/v1.3.10...v1.3.11) (2025-01-19) | ||||||
|  |  | ||||||
|  | ###    🚀 Features | ||||||
|  |  | ||||||
|  | - **projects**: multi language buttons support hiding.  -  by @Azir-11 in https://github.com/soybeanjs/soybean-admin/issues/683 [<samp>(d7aeb)</samp>](https://github.com/soybeanjs/soybean-admin/commit/d7aebb7) | ||||||
|  |  | ||||||
|  | ###    🐞 Bug Fixes | ||||||
|  |  | ||||||
|  | - **hooks**: | ||||||
|  |   - The total number before assigning a value to the table is incorrect.  -  by @Azir-11 in https://github.com/soybeanjs/soybean-admin/issues/687 [<samp>(56760)</samp>](https://github.com/soybeanjs/soybean-admin/commit/5676024) | ||||||
|  | - **projects**: | ||||||
|  |   - fix login success notification. fixed #688  -  by @soybeanjs in https://github.com/soybeanjs/soybean-admin/issues/688 [<samp>(60dd2)</samp>](https://github.com/soybeanjs/soybean-admin/commit/60dd226) | ||||||
|  |   - fix update notifications. fixed #691, fixed #692  -  by @soybeanjs in https://github.com/soybeanjs/soybean-admin/issues/691 and https://github.com/soybeanjs/soybean-admin/issues/692 [<samp>(ac862)</samp>](https://github.com/soybeanjs/soybean-admin/commit/ac86247) | ||||||
|  |  | ||||||
|  | ###    🛠 Optimizations | ||||||
|  |  | ||||||
|  | - **projects**: optimize code  -  by @soybeanjs [<samp>(6489e)</samp>](https://github.com/soybeanjs/soybean-admin/commit/6489ec4) | ||||||
|  |  | ||||||
|  | ###    📖 Documentation | ||||||
|  |  | ||||||
|  | - **projects**: update README  -  by @soybeanjs [<samp>(21434)</samp>](https://github.com/soybeanjs/soybean-admin/commit/214341e) | ||||||
|  |  | ||||||
|  | ###    🏡 Chore | ||||||
|  |  | ||||||
|  | - **deps**: update deps  -  by @soybeanjs [<samp>(c9433)</samp>](https://github.com/soybeanjs/soybean-admin/commit/c9433e1) | ||||||
|  |  | ||||||
|  | ###    ❤️ Contributors | ||||||
|  |  | ||||||
|  | [](https://github.com/soybeanjs)  [](https://github.com/Azir-11)   | ||||||
|  |  | ||||||
|  | ## [v1.3.10](https://github.com/honghuangdc/soybean-admin/compare/v1.3.9...v1.3.10) (2024-12-16) | ||||||
|  |  | ||||||
|  | ###    🚀 Features | ||||||
|  |  | ||||||
|  | - **projects**: support show tab when not loggedIn  -  by @soybeanjs [<samp>(ba381)</samp>](https://github.com/honghuangdc/soybean-admin/commit/ba38119) | ||||||
|  |  | ||||||
|  | ###    🐞 Bug Fixes | ||||||
|  |  | ||||||
|  | - **deps**: | ||||||
|  |   - reduced eslint version to 9.14.0  -  by @soybeanjs [<samp>(af417)</samp>](https://github.com/honghuangdc/soybean-admin/commit/af4177e) | ||||||
|  | - **projects**: | ||||||
|  |   - fix route guard hook `onRouteSwitchWhenLoggedIn`. fixed #680  -  by @soybeanjs in https://github.com/honghuangdc/soybean-admin/issues/680 [<samp>(ab985)</samp>](https://github.com/honghuangdc/soybean-admin/commit/ab9858c) | ||||||
|  |   - check if init userInfo when initAuthRoute. fixed #680  -  by @soybeanjs in https://github.com/honghuangdc/soybean-admin/issues/680 [<samp>(9f4fb)</samp>](https://github.com/honghuangdc/soybean-admin/commit/9f4fb8c) | ||||||
|  |  | ||||||
|  | ###    🛠 Optimizations | ||||||
|  |  | ||||||
|  | - **projects**: | ||||||
|  |   - optimize router guard  -  by @soybeanjs [<samp>(0dfcf)</samp>](https://github.com/honghuangdc/soybean-admin/commit/0dfcf18) | ||||||
|  |   - use `defu` to fill added theme config  -  by @soybeanjs [<samp>(101b6)</samp>](https://github.com/honghuangdc/soybean-admin/commit/101b6f9) | ||||||
|  |  | ||||||
|  | ###    📖 Documentation | ||||||
|  |  | ||||||
|  | - **projects**: ✏️  add element-plus version link  -  by **一寸灰** in https://github.com/honghuangdc/soybean-admin/issues/679 [<samp>(5c6ab)</samp>](https://github.com/honghuangdc/soybean-admin/commit/5c6ab0b) | ||||||
|  |  | ||||||
|  | ###    🏡 Chore | ||||||
|  |  | ||||||
|  | - rename env.d.ts to vite-env.d.ts  -  by @wzc520pyfm in https://github.com/honghuangdc/soybean-admin/issues/675 [<samp>(b93c2)</samp>](https://github.com/honghuangdc/soybean-admin/commit/b93c203) | ||||||
|  | - **projects**: update deps & fix vite config  -  by @soybeanjs [<samp>(3e0eb)</samp>](https://github.com/honghuangdc/soybean-admin/commit/3e0eb72) | ||||||
|  |  | ||||||
|  | ###    ❤️ Contributors | ||||||
|  |  | ||||||
|  | [](https://github.com/soybeanjs)  [](https://github.com/wzc520pyfm)   | ||||||
|  | [一寸灰](mailto:webzhangfei@163.com),  | ||||||
|  |  | ||||||
| ## [v1.3.9](https://github.com/soybeanjs/soybean-admin/compare/v1.3.8...v1.3.9) (2024-11-17) | ## [v1.3.9](https://github.com/soybeanjs/soybean-admin/compare/v1.3.8...v1.3.9) (2024-11-17) | ||||||
|  |  | ||||||
| ###    🚀 Features | ###    🚀 Features | ||||||
|   | |||||||
| @@ -49,6 +49,10 @@ | |||||||
|   - [Github Repository](https://github.com/soybeanjs/soybean-admin-antd) |   - [Github Repository](https://github.com/soybeanjs/soybean-admin-antd) | ||||||
|   - [Gitee Repository](https://gitee.com/honghuangdc/soybean-admin-antd) |   - [Gitee Repository](https://gitee.com/honghuangdc/soybean-admin-antd) | ||||||
|  |  | ||||||
|  | - **ElementPlus Version:** | ||||||
|  |   - [Preview Link](https://elp.soybeanjs.cn/) | ||||||
|  |   - [Github Repository](https://github.com/soybeanjs/soybean-admin-element-plus) | ||||||
|  |  | ||||||
| - **Legacy Version:** | - **Legacy Version:** | ||||||
|   - [Preview Link](https://legacy.soybeanjs.cn/) |   - [Preview Link](https://legacy.soybeanjs.cn/) | ||||||
|   - [Github Repository](https://github.com/soybeanjs/soybean-admin/tree/legacy) |   - [Github Repository](https://github.com/soybeanjs/soybean-admin/tree/legacy) | ||||||
| @@ -109,6 +113,10 @@ pnpm dev | |||||||
| pnpm build | pnpm build | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
|  | **Code Synchronization** | ||||||
|  |  | ||||||
|  | Refer to the [Code Synchronization](https://docs.soybeanjs.cn/guide/sync) document. | ||||||
|  |  | ||||||
| ## Ecosystem | ## Ecosystem | ||||||
|  |  | ||||||
| - [react-soybean-admin](https://github.com/mufeng889/react-soybean-admin): SoybeanAdmin based version of React. | - [react-soybean-admin](https://github.com/mufeng889/react-soybean-admin): SoybeanAdmin based version of React. | ||||||
|   | |||||||
| @@ -41,12 +41,13 @@ | |||||||
|   - [预览地址](https://naive.soybeanjs.cn/) |   - [预览地址](https://naive.soybeanjs.cn/) | ||||||
|   - [Github 仓库](https://github.com/soybeanjs/soybean-admin) |   - [Github 仓库](https://github.com/soybeanjs/soybean-admin) | ||||||
|   - [Gitee 仓库](https://gitee.com/honghuangdc/soybean-admin) |   - [Gitee 仓库](https://gitee.com/honghuangdc/soybean-admin) | ||||||
|  |  | ||||||
| - **AntDesignVue 版本:** | - **AntDesignVue 版本:** | ||||||
|   - [预览地址](https://antd.soybeanjs.cn/) |   - [预览地址](https://antd.soybeanjs.cn/) | ||||||
|   - [Github 仓库](https://github.com/soybeanjs/soybean-admin-antd) |   - [Github 仓库](https://github.com/soybeanjs/soybean-admin-antd) | ||||||
|   - [Gitee 仓库](https://gitee.com/honghuangdc/soybean-admin-antd) |   - [Gitee 仓库](https://gitee.com/honghuangdc/soybean-admin-antd) | ||||||
|  | - **ElementPlus 版本:** | ||||||
|  |   - [预览地址](https://elp.soybeanjs.cn/) | ||||||
|  |   - [Github 仓库](https://github.com/soybeanjs/soybean-admin-element-plus) | ||||||
| - **旧版:** | - **旧版:** | ||||||
|   - [预览地址](https://legacy.soybeanjs.cn/) |   - [预览地址](https://legacy.soybeanjs.cn/) | ||||||
|   - [Github 仓库](https://github.com/soybeanjs/soybean-admin/tree/legacy) |   - [Github 仓库](https://github.com/soybeanjs/soybean-admin/tree/legacy) | ||||||
| @@ -137,6 +138,10 @@ pnpm dev | |||||||
| pnpm build | pnpm build | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
|  | **代码同步** | ||||||
|  |  | ||||||
|  | 参考 [代码同步](https://docs.soybeanjs.cn/zh/guide/sync) 文档。 | ||||||
|  |  | ||||||
| ## 周边生态 | ## 周边生态 | ||||||
|  |  | ||||||
| - [react-soybean-admin](https://github.com/mufeng889/react-soybean-admin): 基于SoybeanAdmin的React版本. | - [react-soybean-admin](https://github.com/mufeng889/react-soybean-admin): 基于SoybeanAdmin的React版本. | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| import { defineConfig } from '@soybeanjs/eslint-config'; | import { defineConfig } from '@soybeanjs/eslint-config'; | ||||||
|  |  | ||||||
| export default defineConfig( | export default defineConfig( | ||||||
|   { vue: true, unocss: true }, |   { vue: true, unocss: true, ignores: ['src-tauri/target'] }, | ||||||
|   { |   { | ||||||
|     rules: { |     rules: { | ||||||
|       'vue/multi-word-component-names': [ |       'vue/multi-word-component-names': [ | ||||||
|   | |||||||
							
								
								
									
										66
									
								
								package.json
									
									
									
									
									
								
							
							
						
						| @@ -1,7 +1,7 @@ | |||||||
| { | { | ||||||
|   "name": "soybean-admin", |   "name": "soybean-admin", | ||||||
|   "type": "module", |   "type": "module", | ||||||
|   "version": "1.3.9", |   "version": "1.3.11", | ||||||
|   "description": "A fresh and elegant admin template, based on Vue3、Vite3、TypeScript、NaiveUI and UnoCSS. 一个基于Vue3、Vite3、TypeScript、NaiveUI and UnoCSS的清新优雅的中后台模版。", |   "description": "A fresh and elegant admin template, based on Vue3、Vite3、TypeScript、NaiveUI and UnoCSS. 一个基于Vue3、Vite3、TypeScript、NaiveUI and UnoCSS的清新优雅的中后台模版。", | ||||||
|   "author": { |   "author": { | ||||||
|     "name": "Soybean", |     "name": "Soybean", | ||||||
| @@ -32,73 +32,79 @@ | |||||||
|   }, |   }, | ||||||
|   "scripts": { |   "scripts": { | ||||||
|     "build": "vite build --mode prod", |     "build": "vite build --mode prod", | ||||||
|  |     "build:tauri": "pnpm tauri build", | ||||||
|     "build:test": "vite build --mode test", |     "build:test": "vite build --mode test", | ||||||
|     "cleanup": "sa cleanup", |     "cleanup": "sa cleanup", | ||||||
|     "commit": "sa git-commit", |     "commit": "sa git-commit", | ||||||
|     "commit:zh": "sa git-commit -l=zh-cn", |     "commit:zh": "sa git-commit -l=zh-cn", | ||||||
|     "dev": "vite --mode test", |     "dev": "vite --mode test", | ||||||
|     "dev:prod": "vite --mode prod", |     "dev:prod": "vite --mode prod", | ||||||
|  |     "dev:tauri": "pnpm tauri dev", | ||||||
|     "gen-route": "sa gen-route", |     "gen-route": "sa gen-route", | ||||||
|     "lint": "eslint . --fix", |     "lint": "eslint . --fix", | ||||||
|     "prepare": "simple-git-hooks", |     "prepare": "simple-git-hooks", | ||||||
|     "preview": "vite preview", |     "preview": "vite preview", | ||||||
|     "release": "sa release", |     "release": "sa release", | ||||||
|  |     "tauri-icon": "pnpm tauri icon ./public/logo.png", | ||||||
|     "typecheck": "vue-tsc --noEmit --skipLibCheck", |     "typecheck": "vue-tsc --noEmit --skipLibCheck", | ||||||
|     "update-pkg": "sa update-pkg" |     "update-pkg": "sa update-pkg" | ||||||
|   }, |   }, | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "@better-scroll/core": "2.5.1", |     "@better-scroll/core": "2.5.1", | ||||||
|     "@iconify/vue": "4.1.2", |     "@iconify/vue": "4.3.0", | ||||||
|     "@sa/axios": "workspace:*", |     "@sa/axios": "workspace:*", | ||||||
|     "@sa/color": "workspace:*", |     "@sa/color": "workspace:*", | ||||||
|     "@sa/hooks": "workspace:*", |     "@sa/hooks": "workspace:*", | ||||||
|     "@sa/materials": "workspace:*", |     "@sa/materials": "workspace:*", | ||||||
|     "@sa/utils": "workspace:*", |     "@sa/utils": "workspace:*", | ||||||
|     "@vueuse/core": "11.2.0", |     "@tauri-apps/api": "2.2.0", | ||||||
|  |     "@vueuse/core": "12.4.0", | ||||||
|     "clipboard": "2.0.11", |     "clipboard": "2.0.11", | ||||||
|     "dayjs": "1.11.13", |     "dayjs": "1.11.13", | ||||||
|     "echarts": "5.5.1", |     "defu": "6.1.4", | ||||||
|  |     "echarts": "5.6.0", | ||||||
|     "json5": "2.2.3", |     "json5": "2.2.3", | ||||||
|     "naive-ui": "2.40.1", |     "naive-ui": "2.41.0", | ||||||
|     "nprogress": "0.2.0", |     "nprogress": "0.2.0", | ||||||
|     "pinia": "2.2.6", |     "pinia": "2.3.0", | ||||||
|     "tailwind-merge": "2.5.4", |     "tailwind-merge": "2.6.0", | ||||||
|     "vue": "3.5.13", |     "vue": "3.5.13", | ||||||
|     "vue-draggable-plus": "0.6.0", |     "vue-draggable-plus": "0.6.0", | ||||||
|     "vue-i18n": "10.0.4", |     "vue-i18n": "11.0.1", | ||||||
|     "vue-router": "4.4.5" |     "vue-router": "4.5.0" | ||||||
|   }, |   }, | ||||||
|   "devDependencies": { |   "devDependencies": { | ||||||
|     "@elegant-router/vue": "0.3.8", |     "@elegant-router/vue": "0.3.8", | ||||||
|     "@iconify/json": "2.2.273", |     "@iconify/json": "2.2.297", | ||||||
|     "@sa/scripts": "workspace:*", |     "@sa/scripts": "workspace:*", | ||||||
|     "@sa/uno-preset": "workspace:*", |     "@sa/uno-preset": "workspace:*", | ||||||
|     "@soybeanjs/eslint-config": "1.4.2", |     "@soybeanjs/eslint-config": "1.4.4", | ||||||
|     "@types/node": "22.9.0", |     "@tauri-apps/cli": "2.2.5", | ||||||
|  |     "@types/node": "22.10.7", | ||||||
|     "@types/nprogress": "0.2.3", |     "@types/nprogress": "0.2.3", | ||||||
|     "@unocss/eslint-config": "0.64.1", |     "@unocss/eslint-config": "65.4.2", | ||||||
|     "@unocss/preset-icons": "0.64.1", |     "@unocss/preset-icons": "65.4.2", | ||||||
|     "@unocss/preset-uno": "0.64.1", |     "@unocss/preset-uno": "65.4.2", | ||||||
|     "@unocss/transformer-directives": "0.64.1", |     "@unocss/transformer-directives": "65.4.2", | ||||||
|     "@unocss/transformer-variant-group": "0.64.1", |     "@unocss/transformer-variant-group": "65.4.2", | ||||||
|     "@unocss/vite": "0.64.1", |     "@unocss/vite": "65.4.2", | ||||||
|     "@vitejs/plugin-vue": "5.2.0", |     "@vitejs/plugin-vue": "5.2.1", | ||||||
|     "@vitejs/plugin-vue-jsx": "4.1.0", |     "@vitejs/plugin-vue-jsx": "4.1.1", | ||||||
|     "eslint": "9.15.0", |     "eslint": "9.18.0", | ||||||
|     "eslint-plugin-vue": "9.31.0", |     "eslint-plugin-vue": "9.32.0", | ||||||
|     "lint-staged": "15.2.10", |     "lint-staged": "15.4.1", | ||||||
|     "sass": "1.81.0", |     "sass": "1.83.4", | ||||||
|     "simple-git-hooks": "2.11.1", |     "simple-git-hooks": "2.11.1", | ||||||
|     "tsx": "4.19.2", |     "tsx": "4.19.2", | ||||||
|     "typescript": "5.6.3", |     "typescript": "5.7.3", | ||||||
|     "unplugin-icons": "0.20.1", |     "unplugin-icons": "22.0.0", | ||||||
|     "unplugin-vue-components": "0.27.4", |     "unplugin-vue-components": "28.0.0", | ||||||
|     "vite": "5.4.11", |     "vite": "6.0.7", | ||||||
|     "vite-plugin-progress": "0.0.7", |     "vite-plugin-progress": "0.0.7", | ||||||
|     "vite-plugin-svg-icons": "2.0.1", |     "vite-plugin-svg-icons": "2.0.1", | ||||||
|     "vite-plugin-vue-devtools": "7.6.4", |     "vite-plugin-vue-devtools": "7.7.0", | ||||||
|     "vue-eslint-parser": "9.4.3", |     "vue-eslint-parser": "9.4.3", | ||||||
|     "vue-tsc": "2.1.10" |     "vue-tsc": "2.2.0" | ||||||
|   }, |   }, | ||||||
|   "simple-git-hooks": { |   "simple-git-hooks": { | ||||||
|     "commit-msg": "pnpm sa git-commit-verify", |     "commit-msg": "pnpm sa git-commit-verify", | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "name": "@sa/alova", |   "name": "@sa/alova", | ||||||
|   "version": "1.3.9", |   "version": "1.3.11", | ||||||
|   "exports": { |   "exports": { | ||||||
|     ".": "./src/index.ts", |     ".": "./src/index.ts", | ||||||
|     "./fetch": "./src/fetch.ts", |     "./fetch": "./src/fetch.ts", | ||||||
| @@ -13,8 +13,8 @@ | |||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "@alova/mock": "2.0.9", |     "@alova/mock": "2.0.11", | ||||||
|     "@sa/utils": "workspace:*", |     "@sa/utils": "workspace:*", | ||||||
|     "alova": "3.2.3" |     "alova": "3.2.8" | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "name": "@sa/axios", |   "name": "@sa/axios", | ||||||
|   "version": "1.3.9", |   "version": "1.3.11", | ||||||
|   "exports": { |   "exports": { | ||||||
|     ".": "./src/index.ts" |     ".": "./src/index.ts" | ||||||
|   }, |   }, | ||||||
| @@ -11,11 +11,11 @@ | |||||||
|   }, |   }, | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "@sa/utils": "workspace:*", |     "@sa/utils": "workspace:*", | ||||||
|     "axios": "1.7.7", |     "axios": "1.7.9", | ||||||
|     "axios-retry": "4.5.0", |     "axios-retry": "4.5.0", | ||||||
|     "qs": "6.13.0" |     "qs": "6.14.0" | ||||||
|   }, |   }, | ||||||
|   "devDependencies": { |   "devDependencies": { | ||||||
|     "@types/qs": "6.9.17" |     "@types/qs": "6.9.18" | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "name": "@sa/color", |   "name": "@sa/color", | ||||||
|   "version": "1.3.9", |   "version": "1.3.11", | ||||||
|   "exports": { |   "exports": { | ||||||
|     ".": "./src/index.ts" |     ".": "./src/index.ts" | ||||||
|   }, |   }, | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "name": "@sa/hooks", |   "name": "@sa/hooks", | ||||||
|   "version": "1.3.9", |   "version": "1.3.11", | ||||||
|   "exports": { |   "exports": { | ||||||
|     ".": "./src/index.ts" |     ".": "./src/index.ts" | ||||||
|   }, |   }, | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "name": "@sa/materials", |   "name": "@sa/materials", | ||||||
|   "version": "1.3.9", |   "version": "1.3.11", | ||||||
|   "exports": { |   "exports": { | ||||||
|     ".": "./src/index.ts" |     ".": "./src/index.ts" | ||||||
|   }, |   }, | ||||||
| @@ -11,7 +11,7 @@ | |||||||
|   }, |   }, | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "@sa/utils": "workspace:*", |     "@sa/utils": "workspace:*", | ||||||
|     "simplebar-vue": "2.3.5" |     "simplebar-vue": "2.4.0" | ||||||
|   }, |   }, | ||||||
|   "devDependencies": { |   "devDependencies": { | ||||||
|     "typed-css-modules": "0.9.1" |     "typed-css-modules": "0.9.1" | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "name": "@sa/fetch", |   "name": "@sa/fetch", | ||||||
|   "version": "1.3.9", |   "version": "1.3.11", | ||||||
|   "exports": { |   "exports": { | ||||||
|     ".": "./src/index.ts" |     ".": "./src/index.ts" | ||||||
|   }, |   }, | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "name": "@sa/scripts", |   "name": "@sa/scripts", | ||||||
|   "version": "1.3.9", |   "version": "1.3.11", | ||||||
|   "bin": { |   "bin": { | ||||||
|     "sa": "./bin.ts" |     "sa": "./bin.ts" | ||||||
|   }, |   }, | ||||||
| @@ -14,14 +14,14 @@ | |||||||
|   }, |   }, | ||||||
|   "devDependencies": { |   "devDependencies": { | ||||||
|     "@soybeanjs/changelog": "0.3.24", |     "@soybeanjs/changelog": "0.3.24", | ||||||
|     "bumpp": "9.8.1", |     "bumpp": "9.10.1", | ||||||
|     "c12": "2.0.1", |     "c12": "2.0.1", | ||||||
|     "cac": "6.7.14", |     "cac": "6.7.14", | ||||||
|     "consola": "3.2.3", |     "consola": "3.4.0", | ||||||
|     "enquirer": "2.4.1", |     "enquirer": "2.4.1", | ||||||
|     "execa": "9.5.1", |     "execa": "9.5.2", | ||||||
|     "kolorist": "1.8.0", |     "kolorist": "1.8.0", | ||||||
|     "npm-check-updates": "17.1.11", |     "npm-check-updates": "17.1.14", | ||||||
|     "rimraf": "6.0.1" |     "rimraf": "6.0.1" | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "name": "@sa/uno-preset", |   "name": "@sa/uno-preset", | ||||||
|   "version": "1.3.9", |   "version": "1.3.11", | ||||||
|   "exports": { |   "exports": { | ||||||
|     ".": "./src/index.ts" |     ".": "./src/index.ts" | ||||||
|   }, |   }, | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "name": "@sa/utils", |   "name": "@sa/utils", | ||||||
|   "version": "1.3.9", |   "version": "1.3.11", | ||||||
|   "exports": { |   "exports": { | ||||||
|     ".": "./src/index.ts" |     ".": "./src/index.ts" | ||||||
|   }, |   }, | ||||||
| @@ -14,7 +14,7 @@ | |||||||
|     "crypto-js": "4.2.0", |     "crypto-js": "4.2.0", | ||||||
|     "klona": "2.0.6", |     "klona": "2.0.6", | ||||||
|     "localforage": "1.10.0", |     "localforage": "1.10.0", | ||||||
|     "nanoid": "5.0.8" |     "nanoid": "5.0.9" | ||||||
|   }, |   }, | ||||||
|   "devDependencies": { |   "devDependencies": { | ||||||
|     "@types/crypto-js": "4.2.2" |     "@types/crypto-js": "4.2.2" | ||||||
|   | |||||||
							
								
								
									
										3640
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								public/logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 20 KiB | 
							
								
								
									
										3
									
								
								src-tauri/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,3 @@ | |||||||
|  | # Generated by Cargo | ||||||
|  | # will have compiled files and executables | ||||||
|  | /target/ | ||||||
							
								
								
									
										4580
									
								
								src-tauri/Cargo.lock
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										26
									
								
								src-tauri/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,26 @@ | |||||||
|  | [package] | ||||||
|  | name = "app" | ||||||
|  | version = "0.1.0" | ||||||
|  | description = "A Tauri App" | ||||||
|  | authors = ["you"] | ||||||
|  | license = "" | ||||||
|  | repository = "" | ||||||
|  | default-run = "app" | ||||||
|  | edition = "2021" | ||||||
|  | rust-version = "1.60" | ||||||
|  |  | ||||||
|  | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html | ||||||
|  |  | ||||||
|  | [build-dependencies] | ||||||
|  | tauri-build = { version = "2", features = [] } | ||||||
|  |  | ||||||
|  | [dependencies] | ||||||
|  | serde_json = "1.0" | ||||||
|  | serde = { version = "1.0", features = ["derive"] } | ||||||
|  | tauri = { version = "2", features = [] } | ||||||
|  |  | ||||||
|  | [features] | ||||||
|  | # this feature is used for production builds or when `devPath` points to the filesystem and the built-in dev server is disabled. | ||||||
|  | # If you use cargo directly instead of tauri's cli you can use this feature flag to switch between tauri's `dev` and `build` modes. | ||||||
|  | # DO NOT REMOVE!! | ||||||
|  | custom-protocol = [ "tauri/custom-protocol" ] | ||||||
							
								
								
									
										3
									
								
								src-tauri/build.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,3 @@ | |||||||
|  | fn main() { | ||||||
|  |   tauri_build::build() | ||||||
|  | } | ||||||
							
								
								
									
										7
									
								
								src-tauri/capabilities/migrated.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,7 @@ | |||||||
|  | { | ||||||
|  |   "identifier": "migrated", | ||||||
|  |   "description": "permissions that were migrated from v1", | ||||||
|  |   "local": true, | ||||||
|  |   "windows": ["main"], | ||||||
|  |   "permissions": ["core:default"] | ||||||
|  | } | ||||||
							
								
								
									
										1676
									
								
								src-tauri/gen/schemas/acl-manifests.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										9
									
								
								src-tauri/gen/schemas/capabilities.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,9 @@ | |||||||
|  | { | ||||||
|  |   "migrated": { | ||||||
|  |     "identifier": "migrated", | ||||||
|  |     "description": "permissions that were migrated from v1", | ||||||
|  |     "local": true, | ||||||
|  |     "windows": ["main"], | ||||||
|  |     "permissions": ["core:default"] | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										1778
									
								
								src-tauri/gen/schemas/desktop-schema.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										1778
									
								
								src-tauri/gen/schemas/macOS-schema.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								src-tauri/icons/128x128.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 8.8 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src-tauri/icons/128x128@2x.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 19 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src-tauri/icons/32x32.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 1.7 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src-tauri/icons/Square107x107Logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 7.4 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src-tauri/icons/Square142x142Logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 9.9 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src-tauri/icons/Square150x150Logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 10 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src-tauri/icons/Square284x284Logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 21 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src-tauri/icons/Square30x30Logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 1.6 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src-tauri/icons/Square310x310Logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 23 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src-tauri/icons/Square44x44Logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 2.6 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src-tauri/icons/Square71x71Logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 4.7 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src-tauri/icons/Square89x89Logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 6.1 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src-tauri/icons/StoreLogo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 3.0 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src-tauri/icons/icon.icns
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								src-tauri/icons/icon.ico
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 31 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src-tauri/icons/icon.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 39 KiB | 
							
								
								
									
										8
									
								
								src-tauri/src/main.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,8 @@ | |||||||
|  | // Prevents additional console window on Windows in release, DO NOT REMOVE!! | ||||||
|  | #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] | ||||||
|  |  | ||||||
|  | fn main() { | ||||||
|  |   tauri::Builder::default() | ||||||
|  |     .run(tauri::generate_context!()) | ||||||
|  |     .expect("error while running tauri application"); | ||||||
|  | } | ||||||
							
								
								
									
										57
									
								
								src-tauri/tauri.conf.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,57 @@ | |||||||
|  | { | ||||||
|  |   "$schema": "../node_modules/@tauri-apps/cli/config.schema.json", | ||||||
|  |   "build": { | ||||||
|  |     "beforeBuildCommand": "npm run build", | ||||||
|  |     "beforeDevCommand": "npm run dev", | ||||||
|  |     "frontendDist": "../dist", | ||||||
|  |     "devUrl": "http://localhost:9527" | ||||||
|  |   }, | ||||||
|  |   "bundle": { | ||||||
|  |     "active": true, | ||||||
|  |     "category": "DeveloperTool", | ||||||
|  |     "copyright": "", | ||||||
|  |     "targets": "all", | ||||||
|  |     "externalBin": [], | ||||||
|  |     "icon": ["icons/32x32.png", "icons/128x128.png", "icons/128x128@2x.png", "icons/icon.icns", "icons/icon.ico"], | ||||||
|  |     "windows": { | ||||||
|  |       "certificateThumbprint": null, | ||||||
|  |       "digestAlgorithm": "sha256", | ||||||
|  |       "timestampUrl": "" | ||||||
|  |     }, | ||||||
|  |     "longDescription": "", | ||||||
|  |     "macOS": { | ||||||
|  |       "entitlements": null, | ||||||
|  |       "exceptionDomain": "", | ||||||
|  |       "frameworks": [], | ||||||
|  |       "providerShortName": null, | ||||||
|  |       "signingIdentity": null | ||||||
|  |     }, | ||||||
|  |     "resources": [], | ||||||
|  |     "shortDescription": "", | ||||||
|  |     "linux": { | ||||||
|  |       "deb": { | ||||||
|  |         "depends": [] | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   "productName": "soybean-admin", | ||||||
|  |   "mainBinaryName": "soybean-admin", | ||||||
|  |   "version": "1.0.0", | ||||||
|  |   "identifier": "cn.soybeanjs.admin", | ||||||
|  |   "plugins": {}, | ||||||
|  |   "app": { | ||||||
|  |     "windows": [ | ||||||
|  |       { | ||||||
|  |         "fullscreen": false, | ||||||
|  |         "height": 768, | ||||||
|  |         "resizable": true, | ||||||
|  |         "title": "SoybeanAdmin", | ||||||
|  |         "width": 1366, | ||||||
|  |         "useHttpsScheme": true | ||||||
|  |       } | ||||||
|  |     ], | ||||||
|  |     "security": { | ||||||
|  |       "csp": null | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
| @@ -25,7 +25,7 @@ const naiveDateLocale = computed(() => { | |||||||
|  |  | ||||||
| const watermarkProps = computed<WatermarkProps>(() => { | const watermarkProps = computed<WatermarkProps>(() => { | ||||||
|   return { |   return { | ||||||
|     content: themeStore.watermark?.text || 'SoybeanAdmin', |     content: themeStore.watermark.text, | ||||||
|     cross: true, |     cross: true, | ||||||
|     fullscreen: true, |     fullscreen: true, | ||||||
|     fontSize: 16, |     fontSize: 16, | ||||||
| @@ -50,7 +50,7 @@ const watermarkProps = computed<WatermarkProps>(() => { | |||||||
|   > |   > | ||||||
|     <AppProvider> |     <AppProvider> | ||||||
|       <RouterView class="bg-layout" /> |       <RouterView class="bg-layout" /> | ||||||
|       <NWatermark v-if="themeStore.watermark?.visible" v-bind="watermarkProps" /> |       <NWatermark v-if="themeStore.watermark.visible" v-bind="watermarkProps" /> | ||||||
|     </AppProvider> |     </AppProvider> | ||||||
|   </NConfigProvider> |   </NConfigProvider> | ||||||
| </template> | </template> | ||||||
|   | |||||||
| @@ -102,9 +102,9 @@ export function useRouterPush(inSetup = true) { | |||||||
|     const redirect = route.value.query?.redirect as string; |     const redirect = route.value.query?.redirect as string; | ||||||
|  |  | ||||||
|     if (needRedirect && redirect) { |     if (needRedirect && redirect) { | ||||||
|       routerPush(redirect); |       await routerPush(redirect); | ||||||
|     } else { |     } else { | ||||||
|       toHome(); |       await toHome(); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -119,6 +119,7 @@ export function useTable<A extends NaiveUI.TableApiFn>(config: NaiveUI.NaiveTabl | |||||||
|     page: 1, |     page: 1, | ||||||
|     pageSize: 10, |     pageSize: 10, | ||||||
|     showSizePicker: true, |     showSizePicker: true, | ||||||
|  |     itemCount: 0, | ||||||
|     pageSizes: [10, 15, 20, 25, 30], |     pageSizes: [10, 15, 20, 25, 30], | ||||||
|     onUpdatePage: async (page: number) => { |     onUpdatePage: async (page: number) => { | ||||||
|       pagination.page = page; |       pagination.page = page; | ||||||
|   | |||||||
| @@ -40,7 +40,12 @@ const { isFullscreen, toggle } = useFullscreen(); | |||||||
|     <div class="h-full flex-y-center justify-end"> |     <div class="h-full flex-y-center justify-end"> | ||||||
|       <GlobalSearch /> |       <GlobalSearch /> | ||||||
|       <FullScreen v-if="!appStore.isMobile" :full="isFullscreen" @click="toggle" /> |       <FullScreen v-if="!appStore.isMobile" :full="isFullscreen" @click="toggle" /> | ||||||
|       <LangSwitch :lang="appStore.locale" :lang-options="appStore.localeOptions" @change-lang="appStore.changeLocale" /> |       <LangSwitch | ||||||
|  |         v-if="themeStore.header.multilingual.visible" | ||||||
|  |         :lang="appStore.locale" | ||||||
|  |         :lang-options="appStore.localeOptions" | ||||||
|  |         @change-lang="appStore.changeLocale" | ||||||
|  |       /> | ||||||
|       <ThemeSchemaSwitch |       <ThemeSchemaSwitch | ||||||
|         :theme-schema="themeStore.themeScheme" |         :theme-schema="themeStore.themeScheme" | ||||||
|         :is-dark="themeStore.darkMode" |         :is-dark="themeStore.darkMode" | ||||||
|   | |||||||
| @@ -114,10 +114,10 @@ const isWrapperScrollMode = computed(() => themeStore.layout.scrollMode === 'wra | |||||||
|     > |     > | ||||||
|       <NSwitch v-model:value="themeStore.footer.right" /> |       <NSwitch v-model:value="themeStore.footer.right" /> | ||||||
|     </SettingItem> |     </SettingItem> | ||||||
|     <SettingItem v-if="themeStore.watermark" key="8" :label="$t('theme.watermark.visible')"> |     <SettingItem key="8" :label="$t('theme.watermark.visible')"> | ||||||
|       <NSwitch v-model:value="themeStore.watermark.visible" /> |       <NSwitch v-model:value="themeStore.watermark.visible" /> | ||||||
|     </SettingItem> |     </SettingItem> | ||||||
|     <SettingItem v-if="themeStore.watermark?.visible" key="8-1" :label="$t('theme.watermark.text')"> |     <SettingItem v-if="themeStore.watermark.visible" key="8-1" :label="$t('theme.watermark.text')"> | ||||||
|       <NInput |       <NInput | ||||||
|         v-model:value="themeStore.watermark.text" |         v-model:value="themeStore.watermark.text" | ||||||
|         autosize |         autosize | ||||||
| @@ -127,6 +127,9 @@ const isWrapperScrollMode = computed(() => themeStore.layout.scrollMode === 'wra | |||||||
|         placeholder="SoybeanAdmin" |         placeholder="SoybeanAdmin" | ||||||
|       /> |       /> | ||||||
|     </SettingItem> |     </SettingItem> | ||||||
|  |     <SettingItem key="9" :label="$t('theme.header.multilingual.visible')"> | ||||||
|  |       <NSwitch v-model:value="themeStore.header.multilingual.visible" /> | ||||||
|  |     </SettingItem> | ||||||
|   </TransitionGroup> |   </TransitionGroup> | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
|   | |||||||
| @@ -109,6 +109,9 @@ const local: App.I18n.Schema = { | |||||||
|       breadcrumb: { |       breadcrumb: { | ||||||
|         visible: 'Breadcrumb Visible', |         visible: 'Breadcrumb Visible', | ||||||
|         showIcon: 'Breadcrumb Icon Visible' |         showIcon: 'Breadcrumb Icon Visible' | ||||||
|  |       }, | ||||||
|  |       multilingual: { | ||||||
|  |         visible: 'Display multilingual button' | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     tab: { |     tab: { | ||||||
|   | |||||||
| @@ -109,6 +109,9 @@ const local: App.I18n.Schema = { | |||||||
|       breadcrumb: { |       breadcrumb: { | ||||||
|         visible: '显示面包屑', |         visible: '显示面包屑', | ||||||
|         showIcon: '显示面包屑图标' |         showIcon: '显示面包屑图标' | ||||||
|  |       }, | ||||||
|  |       multilingual: { | ||||||
|  |         visible: '显示多语言按钮' | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     tab: { |     tab: { | ||||||
|   | |||||||
| @@ -10,22 +10,18 @@ export function setupAppErrorHandle(app: App) { | |||||||
|   }; |   }; | ||||||
| } | } | ||||||
|  |  | ||||||
| // Update check interval in milliseconds |  | ||||||
| const UPDATE_CHECK_INTERVAL = 3 * 60 * 1000; |  | ||||||
|  |  | ||||||
| export function setupAppVersionNotification() { | export function setupAppVersionNotification() { | ||||||
|   const canAutoUpdateApp = import.meta.env.VITE_AUTOMATICALLY_DETECT_UPDATE === 'Y'; |   // Update check interval in milliseconds | ||||||
|  |   const UPDATE_CHECK_INTERVAL = 3 * 60 * 1000; | ||||||
|  |  | ||||||
|  |   const canAutoUpdateApp = import.meta.env.VITE_AUTOMATICALLY_DETECT_UPDATE === 'Y' && import.meta.env.PROD; | ||||||
|   if (!canAutoUpdateApp) return; |   if (!canAutoUpdateApp) return; | ||||||
|  |  | ||||||
|   let isShow = false; |   let isShow = false; | ||||||
|   let updateInterval: ReturnType<typeof setInterval> | undefined; |   let updateInterval: ReturnType<typeof setInterval> | undefined; | ||||||
|  |  | ||||||
|   // Check if updates should be checked |  | ||||||
|   const shouldCheckForUpdates = [!isShow, document.visibilityState === 'visible', !import.meta.env.DEV].every(Boolean); |  | ||||||
|  |  | ||||||
|   const checkForUpdates = async () => { |   const checkForUpdates = async () => { | ||||||
|     if (!shouldCheckForUpdates) return; |     if (isShow) return; | ||||||
|  |  | ||||||
|     const buildTime = await getHtmlBuildTime(); |     const buildTime = await getHtmlBuildTime(); | ||||||
|  |  | ||||||
| @@ -47,6 +43,7 @@ export function setupAppVersionNotification() { | |||||||
|             { |             { | ||||||
|               onClick() { |               onClick() { | ||||||
|                 n?.destroy(); |                 n?.destroy(); | ||||||
|  |                 isShow = false; | ||||||
|               } |               } | ||||||
|             }, |             }, | ||||||
|             () => $t('system.updateCancel') |             () => $t('system.updateCancel') | ||||||
| @@ -77,7 +74,7 @@ export function setupAppVersionNotification() { | |||||||
|   }; |   }; | ||||||
|  |  | ||||||
|   // If updates should be checked, set up the visibility change listener and start the update interval |   // If updates should be checked, set up the visibility change listener and start the update interval | ||||||
|   if (shouldCheckForUpdates) { |   if (!isShow && document.visibilityState === 'visible') { | ||||||
|     // Check for updates when the document is visible |     // Check for updates when the document is visible | ||||||
|     document.addEventListener('visibilitychange', () => { |     document.addEventListener('visibilitychange', () => { | ||||||
|       if (document.visibilityState === 'visible') { |       if (document.visibilityState === 'visible') { | ||||||
|   | |||||||
| @@ -138,11 +138,11 @@ async function initRoute(to: RouteLocationNormalized): Promise<RouteLocationRaw | |||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   routeStore.onRouteSwitchWhenLoggedIn(); | ||||||
|  |  | ||||||
|   // the auth route is initialized |   // the auth route is initialized | ||||||
|   // it is not the "not-found" route, then it is allowed to access |   // it is not the "not-found" route, then it is allowed to access | ||||||
|   if (!isNotFoundRoute) { |   if (!isNotFoundRoute) { | ||||||
|     routeStore.onRouteSwitchWhenLoggedIn(); |  | ||||||
|  |  | ||||||
|     return null; |     return null; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -69,18 +69,14 @@ export const useAuthStore = defineStore(SetupStoreId.Auth, () => { | |||||||
|       const pass = await loginByToken(loginToken); |       const pass = await loginByToken(loginToken); | ||||||
|  |  | ||||||
|       if (pass) { |       if (pass) { | ||||||
|         await routeStore.initAuthRoute(); |  | ||||||
|  |  | ||||||
|         await redirectFromLogin(redirect); |         await redirectFromLogin(redirect); | ||||||
|  |  | ||||||
|         if (routeStore.isInitAuthRoute) { |  | ||||||
|         window.$notification?.success({ |         window.$notification?.success({ | ||||||
|           title: $t('page.login.common.loginSuccess'), |           title: $t('page.login.common.loginSuccess'), | ||||||
|           content: $t('page.login.common.welcomeBack', { userName: userInfo.userName }), |           content: $t('page.login.common.welcomeBack', { userName: userInfo.userName }), | ||||||
|           duration: 4500 |           duration: 4500 | ||||||
|         }); |         }); | ||||||
|       } |       } | ||||||
|       } |  | ||||||
|     } else { |     } else { | ||||||
|       resetStore(); |       resetStore(); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -170,10 +170,17 @@ export const useRouteStore = defineStore(SetupStoreId.Route, () => { | |||||||
|     handleConstantAndAuthRoutes(); |     handleConstantAndAuthRoutes(); | ||||||
|  |  | ||||||
|     setIsInitConstantRoute(true); |     setIsInitConstantRoute(true); | ||||||
|  |  | ||||||
|  |     tabStore.initHomeTab(); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /** Init auth route */ |   /** Init auth route */ | ||||||
|   async function initAuthRoute() { |   async function initAuthRoute() { | ||||||
|  |     // check if user info is initialized | ||||||
|  |     if (!authStore.userInfo.userId) { | ||||||
|  |       await authStore.initUserInfo(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     if (authRouteMode.value === 'static') { |     if (authRouteMode.value === 'static') { | ||||||
|       initStaticAuthRoute(); |       initStaticAuthRoute(); | ||||||
|     } else { |     } else { | ||||||
| @@ -311,7 +318,7 @@ export const useRouteStore = defineStore(SetupStoreId.Route, () => { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   async function onRouteSwitchWhenLoggedIn() { |   async function onRouteSwitchWhenLoggedIn() { | ||||||
|     authStore.initUserInfo(); |     await authStore.initUserInfo(); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   async function onRouteSwitchWhenNotLoggedIn() { |   async function onRouteSwitchWhenNotLoggedIn() { | ||||||
|   | |||||||
| @@ -1,4 +1,5 @@ | |||||||
| import type { GlobalThemeOverrides } from 'naive-ui'; | import type { GlobalThemeOverrides } from 'naive-ui'; | ||||||
|  | import { defu } from 'defu'; | ||||||
| import { addColorAlpha, getColorPalette, getPaletteColorByNumber, getRgb } from '@sa/color'; | import { addColorAlpha, getColorPalette, getPaletteColorByNumber, getRgb } from '@sa/color'; | ||||||
| import { overrideThemeSettings, themeSettings } from '@/theme/settings'; | import { overrideThemeSettings, themeSettings } from '@/theme/settings'; | ||||||
| import { themeVars } from '@/theme/vars'; | import { themeVars } from '@/theme/vars'; | ||||||
| @@ -17,12 +18,15 @@ export function initThemeSettings() { | |||||||
|   // if it is production mode, the theme settings will be cached in localStorage |   // if it is production mode, the theme settings will be cached in localStorage | ||||||
|   // if want to update theme settings when publish new version, please update `overrideThemeSettings` in `src/theme/settings.ts` |   // if want to update theme settings when publish new version, please update `overrideThemeSettings` in `src/theme/settings.ts` | ||||||
|  |  | ||||||
|   const settings = localStg.get('themeSettings') || themeSettings; |   const localSettings = localStg.get('themeSettings'); | ||||||
|  |  | ||||||
|  |   let settings = defu(localSettings, themeSettings); | ||||||
|  |  | ||||||
|   const isOverride = localStg.get('overrideThemeFlag') === BUILD_TIME; |   const isOverride = localStg.get('overrideThemeFlag') === BUILD_TIME; | ||||||
|  |  | ||||||
|   if (!isOverride) { |   if (!isOverride) { | ||||||
|     Object.assign(settings, overrideThemeSettings); |     settings = defu(overrideThemeSettings, settings); | ||||||
|  |  | ||||||
|     localStg.set('overrideThemeFlag', BUILD_TIME); |     localStg.set('overrideThemeFlag', BUILD_TIME); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -27,6 +27,9 @@ export const themeSettings: App.Theme.ThemeSetting = { | |||||||
|     breadcrumb: { |     breadcrumb: { | ||||||
|       visible: true, |       visible: true, | ||||||
|       showIcon: true |       showIcon: true | ||||||
|  |     }, | ||||||
|  |     multilingual: { | ||||||
|  |       visible: true | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|   tab: { |   tab: { | ||||||
| @@ -83,10 +86,4 @@ export const themeSettings: App.Theme.ThemeSetting = { | |||||||
|  * |  * | ||||||
|  * If publish new version, use `overrideThemeSettings` to override certain theme settings |  * If publish new version, use `overrideThemeSettings` to override certain theme settings | ||||||
|  */ |  */ | ||||||
| export const overrideThemeSettings: Partial<App.Theme.ThemeSetting> = { | export const overrideThemeSettings: Partial<App.Theme.ThemeSetting> = {}; | ||||||
|   resetCacheStrategy: 'close', |  | ||||||
|   watermark: { |  | ||||||
|     visible: false, |  | ||||||
|     text: 'SoybeanAdmin' |  | ||||||
|   } |  | ||||||
| }; |  | ||||||
|   | |||||||
							
								
								
									
										14
									
								
								src/typings/app.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -21,7 +21,7 @@ declare namespace App { | |||||||
|       /** Whether info color is followed by the primary color */ |       /** Whether info color is followed by the primary color */ | ||||||
|       isInfoFollowPrimary: boolean; |       isInfoFollowPrimary: boolean; | ||||||
|       /** Reset cache strategy */ |       /** Reset cache strategy */ | ||||||
|       resetCacheStrategy?: UnionKey.ResetCacheStrategy; |       resetCacheStrategy: UnionKey.ResetCacheStrategy; | ||||||
|       /** Layout */ |       /** Layout */ | ||||||
|       layout: { |       layout: { | ||||||
|         /** Layout mode */ |         /** Layout mode */ | ||||||
| @@ -33,7 +33,7 @@ declare namespace App { | |||||||
|          * |          * | ||||||
|          * if true, the vertical child level menus in left and horizontal first level menus in top |          * if true, the vertical child level menus in left and horizontal first level menus in top | ||||||
|          */ |          */ | ||||||
|         reverseHorizontalMix?: boolean; |         reverseHorizontalMix: boolean; | ||||||
|       }; |       }; | ||||||
|       /** Page */ |       /** Page */ | ||||||
|       page: { |       page: { | ||||||
| @@ -53,6 +53,11 @@ declare namespace App { | |||||||
|           /** Whether to show the breadcrumb icon */ |           /** Whether to show the breadcrumb icon */ | ||||||
|           showIcon: boolean; |           showIcon: boolean; | ||||||
|         }; |         }; | ||||||
|  |         /** Multilingual */ | ||||||
|  |         multilingual: { | ||||||
|  |           /** Whether to show the multilingual */ | ||||||
|  |           visible: boolean; | ||||||
|  |         }; | ||||||
|       }; |       }; | ||||||
|       /** Tab */ |       /** Tab */ | ||||||
|       tab: { |       tab: { | ||||||
| @@ -98,7 +103,7 @@ declare namespace App { | |||||||
|         right: boolean; |         right: boolean; | ||||||
|       }; |       }; | ||||||
|       /** Watermark */ |       /** Watermark */ | ||||||
|       watermark?: { |       watermark: { | ||||||
|         /** Whether to show the watermark */ |         /** Whether to show the watermark */ | ||||||
|         visible: boolean; |         visible: boolean; | ||||||
|         /** Watermark text */ |         /** Watermark text */ | ||||||
| @@ -363,6 +368,9 @@ declare namespace App { | |||||||
|             visible: string; |             visible: string; | ||||||
|             showIcon: string; |             showIcon: string; | ||||||
|           }; |           }; | ||||||
|  |           multilingual: { | ||||||
|  |             visible: string; | ||||||
|  |           }; | ||||||
|         }; |         }; | ||||||
|         tab: { |         tab: { | ||||||
|           visible: string; |           visible: string; | ||||||
|   | |||||||
| @@ -35,10 +35,7 @@ export default defineConfig(configEnv => { | |||||||
|       host: '0.0.0.0', |       host: '0.0.0.0', | ||||||
|       port: 9527, |       port: 9527, | ||||||
|       open: true, |       open: true, | ||||||
|       proxy: createViteProxy(viteEnv, enableProxy), |       proxy: createViteProxy(viteEnv, enableProxy) | ||||||
|       fs: { |  | ||||||
|         cachedChecks: false |  | ||||||
|       } |  | ||||||
|     }, |     }, | ||||||
|     preview: { |     preview: { | ||||||
|       port: 9725 |       port: 9725 | ||||||
|   | |||||||