mirror of
https://github.com/soybeanjs/soybean-admin.git
synced 2025-10-16 22:53:42 +08:00
Compare commits
12 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
d984f75b80 | ||
|
27c53cd688 | ||
|
b7f0749170 | ||
|
cb8ea2531d | ||
|
c6648b6c8b | ||
|
bb74d9949b | ||
|
60beff7e63 | ||
|
d6eda8f9ed | ||
|
f4a9cf8339 | ||
|
efc0e25c7f | ||
|
35310ed73c | ||
|
001059cca0 |
36
CHANGELOG.md
36
CHANGELOG.md
@@ -1,6 +1,42 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
|
||||||
|
## [v1.0.3](https://github.com/soybeanjs/soybean-admin/compare/tauri-v1.0.2...v1.0.3) (24-04-16)
|
||||||
|
|
||||||
|
### 🚀 Features
|
||||||
|
|
||||||
|
- **hooks**: deleting the route export of useRoutePush, use vue-router - by **paynezhuang** [<samp>(c6648)</samp>](https://github.com/soybeanjs/soybean-admin/commit/c6648b6)
|
||||||
|
|
||||||
|
### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- **projects**:
|
||||||
|
- fix menu edit rules - by **paynezhuang** [<samp>(00105)</samp>](https://github.com/soybeanjs/soybean-admin/commit/001059c)
|
||||||
|
- fix SvgIcon inheritAttrs warning - by @honghuangdc [<samp>(efc0e)</samp>](https://github.com/soybeanjs/soybean-admin/commit/efc0e25)
|
||||||
|
- fix axios createRequest: add default state - by @honghuangdc [<samp>(d6eda)</samp>](https://github.com/soybeanjs/soybean-admin/commit/d6eda8f)
|
||||||
|
- update union-key.d.ts - by @honghuangdc [<samp>(60bef)</samp>](https://github.com/soybeanjs/soybean-admin/commit/60beff7)
|
||||||
|
- fix update theme color - by @honghuangdc [<samp>(27c53)</samp>](https://github.com/soybeanjs/soybean-admin/commit/27c53cd)
|
||||||
|
|
||||||
|
### 🔥 Performance
|
||||||
|
|
||||||
|
- **projects**: perf code - by @honghuangdc [<samp>(b7f07)</samp>](https://github.com/soybeanjs/soybean-admin/commit/b7f0749)
|
||||||
|
|
||||||
|
### 💅 Refactors
|
||||||
|
|
||||||
|
- **projects**: update naive-ui.d.ts - by @honghuangdc [<samp>(bb74d)</samp>](https://github.com/soybeanjs/soybean-admin/commit/bb74d99)
|
||||||
|
|
||||||
|
### 📖 Documentation
|
||||||
|
|
||||||
|
- **projects**: update README.md - by @honghuangdc [<samp>(f4a9c)</samp>](https://github.com/soybeanjs/soybean-admin/commit/f4a9cf8)
|
||||||
|
|
||||||
|
### 🏡 Chore
|
||||||
|
|
||||||
|
- **release**: release tauri v1.0.2 - by @honghuangdc [<samp>(ebdef)</samp>](https://github.com/soybeanjs/soybean-admin/commit/ebdef72)
|
||||||
|
|
||||||
|
### ❤️ Contributors
|
||||||
|
|
||||||
|
[](https://github.com/honghuangdc)
|
||||||
|
[paynezhuang](mailto:paynezhuang@gmail.com)
|
||||||
|
|
||||||
## [v1.0.2](https://github.com/soybeanjs/soybean-admin/compare/tauri-v1.0.1...v1.0.2) (24-04-08)
|
## [v1.0.2](https://github.com/soybeanjs/soybean-admin/compare/tauri-v1.0.1...v1.0.2) (24-04-08)
|
||||||
|
|
||||||
### 🐞 Bug Fixes
|
### 🐞 Bug Fixes
|
||||||
|
@@ -143,17 +143,17 @@ Thanks the following people for their contributions. If you want to contribute t
|
|||||||
<p>QQ Group</p>
|
<p>QQ Group</p>
|
||||||
<img src="https://soybeanjs-1300612522.cos.ap-guangzhou.myqcloud.com/uPic/qq-soybean-admin-2.jpg" style="width:200px" />
|
<img src="https://soybeanjs-1300612522.cos.ap-guangzhou.myqcloud.com/uPic/qq-soybean-admin-2.jpg" style="width:200px" />
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<!-- <div>
|
||||||
<p>WeChat Group</p>
|
<p>WeChat Group</p>
|
||||||
<img src="https://soybeanjs-1300612522.cos.ap-guangzhou.myqcloud.com/uPic/wechat-0402.jpg" style="width:200px" />
|
<img src="https://soybeanjs-1300612522.cos.ap-guangzhou.myqcloud.com/uPic/wechat-0402.jpg" style="width:200px" />
|
||||||
</div>
|
</div> -->
|
||||||
<div>
|
<div>
|
||||||
<p>Add the following WeChat to invite to the WeChat group</p>
|
<p>Add the following WeChat to invite to the WeChat group</p>
|
||||||
<img src="https://soybeanjs-1300612522.cos.ap-guangzhou.myqcloud.com/uPic/wechat-soybeanjs.jpg" style="width:200px" />
|
<img src="https://soybeanjs-1300612522.cos.ap-guangzhou.myqcloud.com/uPic/wechat-soybeanjs.jpg" style="width:200px" />
|
||||||
</div>
|
</div>
|
||||||
<!-- <div>
|
<div>
|
||||||
<p>Add Soybean's WeChat for business consultation, cooperation, project architecture, one-on-one guidance, etc.</p>
|
<p>Add Soybean's WeChat for business consultation, cooperation, project architecture, one-on-one guidance, etc.</p>
|
||||||
<img src="https://soybeanjs-1300612522.cos.ap-guangzhou.myqcloud.com/uPic/wechat-soybean.jpg" style="width:200px" /> -->
|
<img src="https://soybeanjs-1300612522.cos.ap-guangzhou.myqcloud.com/uPic/wechat-soybean.jpg" style="width:200px" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
## Star Trend
|
## Star Trend
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "soybean-admin",
|
"name": "soybean-admin",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"version": "1.0.2",
|
"version": "1.0.3",
|
||||||
"packageManager": "pnpm@8.15.6",
|
"packageManager": "pnpm@8.15.6",
|
||||||
"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": {
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@sa/axios",
|
"name": "@sa/axios",
|
||||||
"version": "1.0.2",
|
"version": "1.0.3",
|
||||||
"exports": {
|
"exports": {
|
||||||
".": "./src/index.ts"
|
".": "./src/index.ts"
|
||||||
},
|
},
|
||||||
|
@@ -127,6 +127,7 @@ export function createRequest<ResponseData = any, State = Record<string, unknown
|
|||||||
|
|
||||||
request.cancelRequest = cancelRequest;
|
request.cancelRequest = cancelRequest;
|
||||||
request.cancelAllRequest = cancelAllRequest;
|
request.cancelAllRequest = cancelAllRequest;
|
||||||
|
request.state = {} as State;
|
||||||
|
|
||||||
return request;
|
return request;
|
||||||
}
|
}
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@sa/color-palette",
|
"name": "@sa/color-palette",
|
||||||
"version": "1.0.2",
|
"version": "1.0.3",
|
||||||
"exports": {
|
"exports": {
|
||||||
".": "./src/index.ts"
|
".": "./src/index.ts"
|
||||||
},
|
},
|
||||||
|
@@ -3,6 +3,7 @@ import { getColorName } from './name';
|
|||||||
import type { ColorPalette, ColorPaletteFamily, ColorPaletteItem, ColorPaletteNumber } from './type';
|
import type { ColorPalette, ColorPaletteFamily, ColorPaletteItem, ColorPaletteNumber } from './type';
|
||||||
import defaultPalettes from './json/palette.json';
|
import defaultPalettes from './json/palette.json';
|
||||||
|
|
||||||
|
// to do: there is a bug in the code below, when the color is '#1c5cff', the colorPaletteFamily is not similar to the provided color
|
||||||
/**
|
/**
|
||||||
* Get color palette by provided color and color name
|
* Get color palette by provided color and color name
|
||||||
*
|
*
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@sa/hooks",
|
"name": "@sa/hooks",
|
||||||
"version": "1.0.2",
|
"version": "1.0.3",
|
||||||
"exports": {
|
"exports": {
|
||||||
".": "./src/index.ts"
|
".": "./src/index.ts"
|
||||||
},
|
},
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@sa/materials",
|
"name": "@sa/materials",
|
||||||
"version": "1.0.2",
|
"version": "1.0.3",
|
||||||
"exports": {
|
"exports": {
|
||||||
".": "./src/index.ts"
|
".": "./src/index.ts"
|
||||||
},
|
},
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@sa/fetch",
|
"name": "@sa/fetch",
|
||||||
"version": "1.0.2",
|
"version": "1.0.3",
|
||||||
"exports": {
|
"exports": {
|
||||||
".": "./src/index.ts"
|
".": "./src/index.ts"
|
||||||
},
|
},
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@sa/scripts",
|
"name": "@sa/scripts",
|
||||||
"version": "1.0.2",
|
"version": "1.0.3",
|
||||||
"bin": {
|
"bin": {
|
||||||
"sa": "./bin.ts"
|
"sa": "./bin.ts"
|
||||||
},
|
},
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@sa/uno-preset",
|
"name": "@sa/uno-preset",
|
||||||
"version": "1.0.2",
|
"version": "1.0.3",
|
||||||
"exports": {
|
"exports": {
|
||||||
".": "./src/index.ts"
|
".": "./src/index.ts"
|
||||||
},
|
},
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@sa/utils",
|
"name": "@sa/utils",
|
||||||
"version": "1.0.2",
|
"version": "1.0.3",
|
||||||
"exports": {
|
"exports": {
|
||||||
".": "./src/index.ts"
|
".": "./src/index.ts"
|
||||||
},
|
},
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
import { computed, useAttrs } from 'vue';
|
import { computed, useAttrs } from 'vue';
|
||||||
import { Icon } from '@iconify/vue';
|
import { Icon } from '@iconify/vue';
|
||||||
|
|
||||||
defineOptions({ name: 'SvgIcon' });
|
defineOptions({ name: 'SvgIcon', inheritAttrs: false });
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Props
|
* Props
|
||||||
|
@@ -92,7 +92,6 @@ export function useRouterPush(inSetup = true) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
route,
|
|
||||||
routerPush,
|
routerPush,
|
||||||
routerBack,
|
routerBack,
|
||||||
routerPushByKey,
|
routerPushByKey,
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
import { computed, reactive, ref } from 'vue';
|
import { computed, reactive, ref } from 'vue';
|
||||||
|
import { useRoute } from 'vue-router';
|
||||||
import { defineStore } from 'pinia';
|
import { defineStore } from 'pinia';
|
||||||
import { useLoading } from '@sa/hooks';
|
import { useLoading } from '@sa/hooks';
|
||||||
import { SetupStoreId } from '@/enum';
|
import { SetupStoreId } from '@/enum';
|
||||||
@@ -10,8 +11,9 @@ import { useRouteStore } from '../route';
|
|||||||
import { clearAuthStorage, getToken, getUserInfo } from './shared';
|
import { clearAuthStorage, getToken, getUserInfo } from './shared';
|
||||||
|
|
||||||
export const useAuthStore = defineStore(SetupStoreId.Auth, () => {
|
export const useAuthStore = defineStore(SetupStoreId.Auth, () => {
|
||||||
|
const route = useRoute();
|
||||||
const routeStore = useRouteStore();
|
const routeStore = useRouteStore();
|
||||||
const { route, toLogin, redirectFromLogin } = useRouterPush(false);
|
const { toLogin, redirectFromLogin } = useRouterPush(false);
|
||||||
const { loading: loginLoading, startLoading, endLoading } = useLoading();
|
const { loading: loginLoading, startLoading, endLoading } = useLoading();
|
||||||
|
|
||||||
const token = ref(getToken());
|
const token = ref(getToken());
|
||||||
@@ -36,7 +38,7 @@ export const useAuthStore = defineStore(SetupStoreId.Auth, () => {
|
|||||||
|
|
||||||
authStore.$reset();
|
authStore.$reset();
|
||||||
|
|
||||||
if (!route.value.meta.constant) {
|
if (!route.meta.constant) {
|
||||||
await toLogin();
|
await toLogin();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -2,6 +2,7 @@ import { computed, effectScope, onScopeDispose, ref, toRefs, watch } from 'vue';
|
|||||||
import type { Ref } from 'vue';
|
import type { Ref } from 'vue';
|
||||||
import { defineStore } from 'pinia';
|
import { defineStore } from 'pinia';
|
||||||
import { useEventListener, usePreferredColorScheme } from '@vueuse/core';
|
import { useEventListener, usePreferredColorScheme } from '@vueuse/core';
|
||||||
|
import { getColorPalette } from '@sa/color-palette';
|
||||||
import { SetupStoreId } from '@/enum';
|
import { SetupStoreId } from '@/enum';
|
||||||
import { localStg } from '@/utils/storage';
|
import { localStg } from '@/utils/storage';
|
||||||
import { addThemeVarsToHtml, createThemeToken, getNaiveTheme, initThemeSettings, toggleCssDarkMode } from './shared';
|
import { addThemeVarsToHtml, createThemeToken, getNaiveTheme, initThemeSettings, toggleCssDarkMode } from './shared';
|
||||||
@@ -79,10 +80,15 @@ export const useThemeStore = defineStore(SetupStoreId.Theme, () => {
|
|||||||
* @param color Theme color
|
* @param color Theme color
|
||||||
*/
|
*/
|
||||||
function updateThemeColors(key: App.Theme.ThemeColorKey, color: string) {
|
function updateThemeColors(key: App.Theme.ThemeColorKey, color: string) {
|
||||||
|
// get a color palette by provided color and color name, and use the suitable color
|
||||||
|
const colorPalette = getColorPalette(color, key);
|
||||||
|
|
||||||
|
const mainColor = colorPalette.main.hexcode;
|
||||||
|
|
||||||
if (key === 'primary') {
|
if (key === 'primary') {
|
||||||
settings.value.themeColor = color;
|
settings.value.themeColor = mainColor;
|
||||||
} else {
|
} else {
|
||||||
settings.value.otherColor[key] = color;
|
settings.value.otherColor[key] = mainColor;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
2
src/typings/naive-ui.d.ts
vendored
2
src/typings/naive-ui.d.ts
vendored
@@ -41,7 +41,7 @@ declare namespace NaiveUI {
|
|||||||
type GetTableData<A extends TableApiFn> = A extends TableApiFn<infer T> ? T : never;
|
type GetTableData<A extends TableApiFn> = A extends TableApiFn<infer T> ? T : never;
|
||||||
|
|
||||||
type NaiveTableConfig<A extends TableApiFn> = Pick<
|
type NaiveTableConfig<A extends TableApiFn> = Pick<
|
||||||
import('@sa/hooks').TableConfig<A, GetTableData<A>, TableColumn<NaiveUI.TableDataWithIndex<GetTableData<A>>>>,
|
import('@sa/hooks').TableConfig<A, GetTableData<A>, TableColumn<TableDataWithIndex<GetTableData<A>>>>,
|
||||||
'apiFn' | 'apiParams' | 'columns' | 'immediate'
|
'apiFn' | 'apiParams' | 'columns' | 'immediate'
|
||||||
>;
|
>;
|
||||||
}
|
}
|
||||||
|
4
src/typings/union-key.d.ts
vendored
4
src/typings/union-key.d.ts
vendored
@@ -27,8 +27,8 @@ declare namespace UnionKey {
|
|||||||
/**
|
/**
|
||||||
* The scroll mode when content overflow
|
* The scroll mode when content overflow
|
||||||
*
|
*
|
||||||
* - Wrapper the wrapper component's root element overflow
|
* - wrapper: the wrapper component's root element overflow
|
||||||
* - Content the content component overflow
|
* - content: the content component overflow
|
||||||
*/
|
*/
|
||||||
type ThemeScrollMode = import('@sa/materials').LayoutScrollMode;
|
type ThemeScrollMode = import('@sa/materials').LayoutScrollMode;
|
||||||
|
|
||||||
|
@@ -84,11 +84,13 @@ function createDefaultModel(): Model {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
type RuleKey = Extract<keyof Model, 'userName' | 'userStatus'>;
|
type RuleKey = Extract<keyof Model, 'menuName' | 'status' | 'routeName' | 'routePath'>;
|
||||||
|
|
||||||
const rules: Record<RuleKey, App.Global.FormRule> = {
|
const rules: Record<RuleKey, App.Global.FormRule> = {
|
||||||
userName: defaultRequiredRule,
|
menuName: defaultRequiredRule,
|
||||||
userStatus: defaultRequiredRule
|
status: defaultRequiredRule,
|
||||||
|
routeName: defaultRequiredRule,
|
||||||
|
routePath: defaultRequiredRule
|
||||||
};
|
};
|
||||||
|
|
||||||
const disabledMenuType = computed(() => props.operateType === 'edit');
|
const disabledMenuType = computed(() => props.operateType === 'edit');
|
||||||
|
Reference in New Issue
Block a user