@melt-js/libs-vben 0.0.0-stage → 2026.11.8-2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +10 -0
- package/README.md +86 -2
- package/package.json +98 -3
- package/src/access/access-control.vue +47 -0
- package/src/access/accessible.ts +236 -0
- package/src/access/directive.ts +42 -0
- package/src/access/index.ts +4 -0
- package/src/access/use-access.ts +53 -0
- package/src/composables/index.ts +14 -0
- package/src/composables/use-is-mobile.ts +7 -0
- package/src/composables/use-layout-style.ts +51 -0
- package/src/composables/use-layout-viewport-height.ts +71 -0
- package/src/composables/use-namespace.ts +106 -0
- package/src/composables/use-priority-value.ts +96 -0
- package/src/composables/use-scroll-lock.ts +151 -0
- package/src/composables/use-simple-locale/README.md +3 -0
- package/src/composables/use-simple-locale/index.ts +27 -0
- package/src/composables/use-simple-locale/messages.ts +31 -0
- package/src/composables/use-sortable.ts +32 -0
- package/src/constants/core.ts +76 -0
- package/src/constants/index.ts +2 -0
- package/src/core-icons/create-icon.ts +14 -0
- package/src/core-icons/index.ts +11 -0
- package/src/core-icons/lucide.ts +95 -0
- package/src/core-preferences/config.ts +172 -0
- package/src/core-preferences/constants.ts +116 -0
- package/src/core-preferences/index.ts +24 -0
- package/src/core-preferences/preferences.ts +503 -0
- package/src/core-preferences/types.ts +471 -0
- package/src/core-preferences/update-css-variables.ts +129 -0
- package/src/core-preferences/use-preferences.ts +282 -0
- package/src/design/css/global.css +1 -0
- package/src/design/css/nprogress.css +61 -0
- package/src/design/css/transition.css +238 -0
- package/src/design/css/ui.css +101 -0
- package/src/design/design-tokens/dark.css +446 -0
- package/src/design/design-tokens/default.css +491 -0
- package/src/design/design-tokens/index.ts +2 -0
- package/src/design/index.ts +6 -0
- package/src/design/scss-bem/bem.scss +34 -0
- package/src/design/scss-bem/constants.scss +5 -0
- package/src/hooks/index.ts +9 -0
- package/src/hooks/use-app-config.ts +39 -0
- package/src/hooks/use-content-maximize.ts +24 -0
- package/src/hooks/use-design-tokens.ts +421 -0
- package/src/hooks/use-hover-toggle.ts +163 -0
- package/src/hooks/use-pagination.ts +72 -0
- package/src/hooks/use-refresh.ts +16 -0
- package/src/hooks/use-tabs.ts +143 -0
- package/src/hooks/use-watermark.ts +84 -0
- package/src/icons/iconify/index.ts +5 -0
- package/src/icons/icons/empty-icon.vue +27 -0
- package/src/icons/index.ts +3 -0
- package/src/icons/svg/icons/antdv-logo.svg +29 -0
- package/src/icons/svg/icons/antdv-next-logo.svg +1 -0
- package/src/icons/svg/icons/avatar-1.svg +1 -0
- package/src/icons/svg/icons/avatar-2.svg +1 -0
- package/src/icons/svg/icons/avatar-3.svg +1 -0
- package/src/icons/svg/icons/avatar-4.svg +1 -0
- package/src/icons/svg/icons/bell.svg +1 -0
- package/src/icons/svg/icons/cake.svg +1 -0
- package/src/icons/svg/icons/card.svg +1 -0
- package/src/icons/svg/icons/dingding.svg +1 -0
- package/src/icons/svg/icons/download.svg +1 -0
- package/src/icons/svg/icons/github.svg +1 -0
- package/src/icons/svg/icons/google.svg +1 -0
- package/src/icons/svg/icons/qqchat.svg +1 -0
- package/src/icons/svg/icons/tdesign-logo.svg +39 -0
- package/src/icons/svg/icons/wechat.svg +1 -0
- package/src/icons/svg/index.ts +39 -0
- package/src/icons/svg/load.ts +81 -0
- package/src/locales/i18n.ts +147 -0
- package/src/locales/index.ts +30 -0
- package/src/locales/langs/en-US/authentication.json +65 -0
- package/src/locales/langs/en-US/common.json +27 -0
- package/src/locales/langs/en-US/preferences.json +245 -0
- package/src/locales/langs/en-US/profile.json +4 -0
- package/src/locales/langs/en-US/ui.json +165 -0
- package/src/locales/langs/zh-CN/authentication.json +65 -0
- package/src/locales/langs/zh-CN/common.json +27 -0
- package/src/locales/langs/zh-CN/preferences.json +245 -0
- package/src/locales/langs/zh-CN/profile.json +4 -0
- package/src/locales/langs/zh-CN/ui.json +165 -0
- package/src/locales/langs/zh-TW/authentication.json +65 -0
- package/src/locales/langs/zh-TW/common.json +27 -0
- package/src/locales/langs/zh-TW/preferences.json +245 -0
- package/src/locales/langs/zh-TW/profile.json +4 -0
- package/src/locales/langs/zh-TW/ui.json +165 -0
- package/src/locales/typing.ts +27 -0
- package/src/preferences/index.ts +42 -0
- package/src/request/index.ts +2 -0
- package/src/request/request-client/index.ts +3 -0
- package/src/request/request-client/modules/downloader.ts +60 -0
- package/src/request/request-client/modules/interceptor.ts +40 -0
- package/src/request/request-client/modules/sse.ts +134 -0
- package/src/request/request-client/modules/uploader.ts +79 -0
- package/src/request/request-client/preset-interceptors.ts +178 -0
- package/src/request/request-client/request-client.ts +163 -0
- package/src/request/request-client/types.ts +90 -0
- package/src/shared/cache/README.md +418 -0
- package/src/shared/cache/index.ts +5 -0
- package/src/shared/cache/indexeddb-driver.ts +137 -0
- package/src/shared/cache/local-storage-driver.ts +70 -0
- package/src/shared/cache/memory-storage-driver.ts +32 -0
- package/src/shared/cache/storage-manager.ts +146 -0
- package/src/shared/cache/types.ts +39 -0
- package/src/shared/color/color.ts +9 -0
- package/src/shared/color/convert.ts +62 -0
- package/src/shared/color/generator.ts +45 -0
- package/src/shared/color/index.ts +3 -0
- package/src/shared/constants/globals.ts +20 -0
- package/src/shared/constants/index.ts +2 -0
- package/src/shared/constants/vben.ts +30 -0
- package/src/shared/global-state.ts +45 -0
- package/src/shared/store.ts +1 -0
- package/src/shared/utils/cn.ts +10 -0
- package/src/shared/utils/date.ts +80 -0
- package/src/shared/utils/diff.ts +114 -0
- package/src/shared/utils/dom.ts +126 -0
- package/src/shared/utils/download.ts +186 -0
- package/src/shared/utils/error.ts +19 -0
- package/src/shared/utils/index.ts +22 -0
- package/src/shared/utils/inference.ts +164 -0
- package/src/shared/utils/letter.ts +47 -0
- package/src/shared/utils/merge.ts +11 -0
- package/src/shared/utils/nprogress.ts +52 -0
- package/src/shared/utils/resources.ts +21 -0
- package/src/shared/utils/stack.ts +103 -0
- package/src/shared/utils/state-handler.ts +61 -0
- package/src/shared/utils/to.ts +21 -0
- package/src/shared/utils/tree.ts +159 -0
- package/src/shared/utils/unique.ts +15 -0
- package/src/shared/utils/update-css-variables.ts +47 -0
- package/src/shared/utils/util.ts +50 -0
- package/src/shared/utils/window.ts +37 -0
- package/src/stores/index.ts +3 -0
- package/src/stores/modules/access.ts +130 -0
- package/src/stores/modules/dict.ts +244 -0
- package/src/stores/modules/index.ts +5 -0
- package/src/stores/modules/tabbar.ts +797 -0
- package/src/stores/modules/timezone.ts +132 -0
- package/src/stores/modules/user.ts +42 -0
- package/src/stores/setup.ts +79 -0
- package/src/stores/shim-pinia.d.ts +11 -0
- package/src/styles/antd/index.css +78 -0
- package/src/styles/antdv-next/index.css +90 -0
- package/src/styles/ele/index.css +44 -0
- package/src/styles/global/index.scss +1 -0
- package/src/styles/index.ts +1 -0
- package/src/styles/naive/index.css +26 -0
- package/src/styles/style-exports.d.ts +3 -0
- package/src/theme.css +592 -0
- package/src/types/global.d.ts +28 -0
- package/src/types/index.ts +2 -0
- package/src/types/shims.d.ts +1 -0
- package/src/types/user.ts +20 -0
- package/src/typings/app.d.ts +128 -0
- package/src/typings/basic.d.ts +42 -0
- package/src/typings/helper.d.ts +147 -0
- package/src/typings/index.ts +16 -0
- package/src/typings/languages.ts +28 -0
- package/src/typings/menu-record.ts +82 -0
- package/src/typings/tabs.ts +8 -0
- package/src/typings/vue-router.d.ts +169 -0
- package/src/utils/helpers/find-menu-by-path.ts +37 -0
- package/src/utils/helpers/generate-menus.ts +89 -0
- package/src/utils/helpers/generate-routes-backend.ts +108 -0
- package/src/utils/helpers/generate-routes-frontend.ts +58 -0
- package/src/utils/helpers/get-popup-container.ts +10 -0
- package/src/utils/helpers/index.ts +8 -0
- package/src/utils/helpers/merge-route-modules.ts +28 -0
- package/src/utils/helpers/reset-routes.ts +30 -0
- package/src/utils/helpers/unmount-global-loading.ts +31 -0
- package/src/utils/index.ts +4 -0
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { ref, unref } from 'vue';
|
|
2
|
+
|
|
3
|
+
import { DEFAULT_TIME_ZONE_OPTIONS } from '@melt-js/libs-vben/core-preferences';
|
|
4
|
+
import {
|
|
5
|
+
getCurrentTimezone,
|
|
6
|
+
setCurrentTimezone,
|
|
7
|
+
} from '@melt-js/libs-vben/shared/utils';
|
|
8
|
+
|
|
9
|
+
import { acceptHMRUpdate, defineStore } from 'pinia';
|
|
10
|
+
|
|
11
|
+
interface TimezoneHandler {
|
|
12
|
+
getTimezone?: () => Promise<null | string | undefined>;
|
|
13
|
+
getTimezoneOptions?: () => Promise<
|
|
14
|
+
{
|
|
15
|
+
label: string;
|
|
16
|
+
value: string;
|
|
17
|
+
}[]
|
|
18
|
+
>;
|
|
19
|
+
setTimezone?: (timezone: string) => Promise<void>;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* 默认时区处理模块
|
|
24
|
+
* 时区存储基于pinia存储插件
|
|
25
|
+
*/
|
|
26
|
+
const getDefaultTimezoneHandler = (): TimezoneHandler => {
|
|
27
|
+
return {
|
|
28
|
+
getTimezoneOptions: () => {
|
|
29
|
+
return Promise.resolve(
|
|
30
|
+
DEFAULT_TIME_ZONE_OPTIONS.map((item) => {
|
|
31
|
+
return {
|
|
32
|
+
label: item.label,
|
|
33
|
+
value: item.timezone,
|
|
34
|
+
};
|
|
35
|
+
}),
|
|
36
|
+
);
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* 自定义时区处理模块
|
|
43
|
+
*/
|
|
44
|
+
let customTimezoneHandler: null | Partial<TimezoneHandler> = null;
|
|
45
|
+
const setTimezoneHandler = (handler: Partial<TimezoneHandler>) => {
|
|
46
|
+
customTimezoneHandler = handler;
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* 获取时区处理模块
|
|
51
|
+
*/
|
|
52
|
+
const getTimezoneHandler = () => {
|
|
53
|
+
return {
|
|
54
|
+
...getDefaultTimezoneHandler(),
|
|
55
|
+
...customTimezoneHandler,
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* timezone支持模块
|
|
61
|
+
*/
|
|
62
|
+
const useTimezoneStore = defineStore(
|
|
63
|
+
'core-timezone',
|
|
64
|
+
() => {
|
|
65
|
+
const timezoneRef = ref(getCurrentTimezone());
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* 初始化时区
|
|
69
|
+
* Initialize the timezone
|
|
70
|
+
*/
|
|
71
|
+
async function initTimezone() {
|
|
72
|
+
const timezoneHandler = getTimezoneHandler();
|
|
73
|
+
const timezone = await timezoneHandler.getTimezone?.();
|
|
74
|
+
if (timezone) {
|
|
75
|
+
timezoneRef.value = timezone;
|
|
76
|
+
}
|
|
77
|
+
// 设置dayjs默认时区
|
|
78
|
+
setCurrentTimezone(unref(timezoneRef));
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* 设置时区
|
|
83
|
+
* Set the timezone
|
|
84
|
+
* @param timezone 时区字符串
|
|
85
|
+
*/
|
|
86
|
+
async function setTimezone(timezone: string) {
|
|
87
|
+
const timezoneHandler = getTimezoneHandler();
|
|
88
|
+
await timezoneHandler.setTimezone?.(timezone);
|
|
89
|
+
timezoneRef.value = timezone;
|
|
90
|
+
// 设置dayjs默认时区
|
|
91
|
+
setCurrentTimezone(timezone);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* 获取时区选项
|
|
96
|
+
* Get the timezone options
|
|
97
|
+
*/
|
|
98
|
+
async function getTimezoneOptions() {
|
|
99
|
+
const timezoneHandler = getTimezoneHandler();
|
|
100
|
+
return (await timezoneHandler.getTimezoneOptions?.()) || [];
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
initTimezone().catch((error) => {
|
|
104
|
+
console.error('Failed to initialize timezone during store setup:', error);
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
function $reset() {
|
|
108
|
+
timezoneRef.value = getCurrentTimezone();
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
return {
|
|
112
|
+
timezone: timezoneRef,
|
|
113
|
+
setTimezone,
|
|
114
|
+
getTimezoneOptions,
|
|
115
|
+
$reset,
|
|
116
|
+
};
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
persist: {
|
|
120
|
+
// 持久化
|
|
121
|
+
pick: ['timezone'],
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
);
|
|
125
|
+
|
|
126
|
+
export { setTimezoneHandler, useTimezoneStore };
|
|
127
|
+
|
|
128
|
+
// 解决热更新问题
|
|
129
|
+
const hot = import.meta.hot;
|
|
130
|
+
if (hot) {
|
|
131
|
+
hot.accept(acceptHMRUpdate(useTimezoneStore, hot));
|
|
132
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { BasicUserInfo } from '@melt-js/libs-vben/typings';
|
|
2
|
+
|
|
3
|
+
import { acceptHMRUpdate, defineStore } from 'pinia';
|
|
4
|
+
|
|
5
|
+
interface AccessState {
|
|
6
|
+
/**
|
|
7
|
+
* 用户信息
|
|
8
|
+
*/
|
|
9
|
+
userInfo: BasicUserInfo | null;
|
|
10
|
+
/**
|
|
11
|
+
* 用户角色
|
|
12
|
+
*/
|
|
13
|
+
userRoles: string[];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* @zh_CN 用户信息相关
|
|
18
|
+
*/
|
|
19
|
+
export const useUserStore = defineStore('core-user', {
|
|
20
|
+
actions: {
|
|
21
|
+
setUserInfo(userInfo: BasicUserInfo | null) {
|
|
22
|
+
// 设置用户信息
|
|
23
|
+
this.userInfo = userInfo;
|
|
24
|
+
// 设置角色信息
|
|
25
|
+
const roles = userInfo?.roles ?? [];
|
|
26
|
+
this.setUserRoles(roles);
|
|
27
|
+
},
|
|
28
|
+
setUserRoles(roles: string[]) {
|
|
29
|
+
this.userRoles = roles;
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
state: (): AccessState => ({
|
|
33
|
+
userInfo: null,
|
|
34
|
+
userRoles: [],
|
|
35
|
+
}),
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
// 解决热更新问题
|
|
39
|
+
const hot = import.meta.hot;
|
|
40
|
+
if (hot) {
|
|
41
|
+
hot.accept(acceptHMRUpdate(useUserStore, hot));
|
|
42
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { Pinia } from 'pinia';
|
|
2
|
+
|
|
3
|
+
import type { App } from 'vue';
|
|
4
|
+
|
|
5
|
+
import { createPinia } from 'pinia';
|
|
6
|
+
import SecureLS from 'secure-ls';
|
|
7
|
+
|
|
8
|
+
let pinia: Pinia;
|
|
9
|
+
|
|
10
|
+
type SecureLSStorage = {
|
|
11
|
+
get(key: string): any;
|
|
12
|
+
set(key: string, value: unknown): void;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
type SecureLSCtor = new (config?: {
|
|
16
|
+
encodingType?: string;
|
|
17
|
+
encryptionSecret?: string;
|
|
18
|
+
isCompression?: boolean;
|
|
19
|
+
metaKey?: string;
|
|
20
|
+
}) => SecureLSStorage;
|
|
21
|
+
|
|
22
|
+
const secureLSModule = SecureLS as unknown as {
|
|
23
|
+
default?: SecureLSCtor;
|
|
24
|
+
SecureLS?: SecureLSCtor;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const SecureLSConstructor =
|
|
28
|
+
secureLSModule.default ?? secureLSModule.SecureLS ?? SecureLS;
|
|
29
|
+
|
|
30
|
+
export interface InitStoreOptions {
|
|
31
|
+
/**
|
|
32
|
+
* @zh_CN 应用名,由于 @vben/stores 是公用的,后续可能有多个app,为了防止多个app缓存冲突,可在这里配置应用名,应用名将被用于持久化的前缀
|
|
33
|
+
*/
|
|
34
|
+
namespace: string;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* @zh_CN 初始化pinia
|
|
39
|
+
*/
|
|
40
|
+
export async function initStores(app: App, options: InitStoreOptions) {
|
|
41
|
+
const { createPersistedState } = await import('pinia-plugin-persistedstate');
|
|
42
|
+
pinia = createPinia();
|
|
43
|
+
const { namespace } = options;
|
|
44
|
+
const ls = new SecureLSConstructor({
|
|
45
|
+
encodingType: 'aes',
|
|
46
|
+
encryptionSecret: import.meta.env.VITE_APP_STORE_SECURE_KEY,
|
|
47
|
+
isCompression: true,
|
|
48
|
+
metaKey: `${namespace}-secure-meta`,
|
|
49
|
+
});
|
|
50
|
+
pinia.use(
|
|
51
|
+
createPersistedState({
|
|
52
|
+
// key $appName-$store.id
|
|
53
|
+
key: (storeKey) => `${namespace}-${storeKey}`,
|
|
54
|
+
storage: import.meta.env.DEV
|
|
55
|
+
? localStorage
|
|
56
|
+
: {
|
|
57
|
+
getItem(key) {
|
|
58
|
+
return ls.get(key);
|
|
59
|
+
},
|
|
60
|
+
setItem(key, value) {
|
|
61
|
+
ls.set(key, value);
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
}),
|
|
65
|
+
);
|
|
66
|
+
app.use(pinia);
|
|
67
|
+
return pinia;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export function resetAllStores() {
|
|
71
|
+
if (!pinia) {
|
|
72
|
+
console.error('Pinia is not installed');
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const allStores = (pinia as any)._s;
|
|
76
|
+
for (const [_key, store] of allStores) {
|
|
77
|
+
store.$reset();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { StoreDefinition } from 'pinia';
|
|
2
|
+
|
|
3
|
+
// https://github.com/vuejs/pinia/issues/2098
|
|
4
|
+
declare module 'pinia' {
|
|
5
|
+
export function acceptHMRUpdate(
|
|
6
|
+
initialUseStore: StoreDefinition,
|
|
7
|
+
hot: any,
|
|
8
|
+
): (newModule: any) => any;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export { acceptHMRUpdate } from 'pinia';
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/* ant-design-vue 组件库的一些样式重置 */
|
|
2
|
+
|
|
3
|
+
.ant-app {
|
|
4
|
+
width: 100%;
|
|
5
|
+
height: 100%;
|
|
6
|
+
overscroll-behavior: none;
|
|
7
|
+
color: inherit;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.ant-btn {
|
|
11
|
+
.anticon {
|
|
12
|
+
display: inline-flex;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/* * 修复按钮添加图标时的位置问题 */
|
|
16
|
+
> svg {
|
|
17
|
+
display: inline-block;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
> svg + span {
|
|
21
|
+
margin-inline-start: 6px;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.ant-tag {
|
|
26
|
+
> svg {
|
|
27
|
+
display: inline-block;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
> svg + span {
|
|
31
|
+
margin-inline-start: 4px;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.ant-message-notice-content,
|
|
36
|
+
.ant-notification-notice {
|
|
37
|
+
&:is(.dark *) {
|
|
38
|
+
border-color: hsl(var(--border) / 60%);
|
|
39
|
+
border-width: 1px;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.form-valid-error {
|
|
44
|
+
/** select 选择器的样式 */
|
|
45
|
+
|
|
46
|
+
.ant-select:not(.valid-success) .ant-select-selector:not(.valid-success) {
|
|
47
|
+
border-color: hsl(var(--destructive)) !important;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.ant-select-focused .ant-select-selector {
|
|
51
|
+
box-shadow: 0 0 0 2px rgb(255 38 5 / 6%) !important;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/** 数字输入框样式 */
|
|
55
|
+
.ant-input-number-focused {
|
|
56
|
+
box-shadow: 0 0 0 2px rgb(255 38 5 / 6%);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/** 密码输入框样式 */
|
|
60
|
+
.ant-input-affix-wrapper:hover {
|
|
61
|
+
border-color: hsl(var(--destructive));
|
|
62
|
+
box-shadow: 0 0 0 2px rgb(255 38 5 / 6%);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.ant-input:not(.valid-success) {
|
|
66
|
+
border-color: hsl(var(--destructive)) !important;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/** 区间选择器下面来回切换时的样式 */
|
|
71
|
+
.ant-app .form-valid-error .ant-picker-active-bar {
|
|
72
|
+
background-color: hsl(var(--destructive));
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/** 时间选择器的样式 */
|
|
76
|
+
.ant-app .form-valid-error .ant-picker-focused {
|
|
77
|
+
box-shadow: 0 0 0 2px rgb(255 38 5 / 6%);
|
|
78
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/* antdv-next 组件库的一些样式重置 */
|
|
2
|
+
|
|
3
|
+
.ant-app {
|
|
4
|
+
width: 100%;
|
|
5
|
+
height: 100%;
|
|
6
|
+
overscroll-behavior: none;
|
|
7
|
+
color: inherit;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/* Reserve the counter's line below the textarea inside clipped form controls. */
|
|
11
|
+
.ant-input-textarea-show-count {
|
|
12
|
+
margin-block-end: calc(var(--ant-font-size) * var(--ant-line-height));
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.ant-btn {
|
|
16
|
+
.anticon {
|
|
17
|
+
display: inline-flex;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/* * 修复按钮添加图标时的位置问题 */
|
|
21
|
+
> .ant-btn-icon {
|
|
22
|
+
svg {
|
|
23
|
+
display: inline-block;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
svg + span {
|
|
27
|
+
margin-inline-start: 6px;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.ant-tag {
|
|
33
|
+
> svg {
|
|
34
|
+
display: inline-block;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
> svg + span {
|
|
38
|
+
margin-inline-start: 4px;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.ant-message-notice-content,
|
|
43
|
+
.ant-notification-notice {
|
|
44
|
+
&:is(.dark *) {
|
|
45
|
+
border-color: hsl(var(--border) / 60%);
|
|
46
|
+
border-width: 1px;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.form-valid-error {
|
|
51
|
+
/** select 选择器的样式 */
|
|
52
|
+
|
|
53
|
+
.ant-select:not(.valid-success) {
|
|
54
|
+
border-color: hsl(var(--destructive)) !important;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.ant-select-focused {
|
|
58
|
+
box-shadow: 0 0 0 2px rgb(255 38 5 / 6%) !important;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/** 数字输入框样式 */
|
|
62
|
+
.ant-input-number-focused {
|
|
63
|
+
box-shadow: 0 0 0 2px rgb(255 38 5 / 6%);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/** 密码输入框样式 */
|
|
67
|
+
.ant-input-affix-wrapper:hover {
|
|
68
|
+
border-color: hsl(var(--destructive));
|
|
69
|
+
box-shadow: 0 0 0 2px rgb(255 38 5 / 6%);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.ant-input:not(.valid-success) {
|
|
73
|
+
border-color: hsl(var(--destructive)) !important;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/** 区间选择器下面来回切换时的样式 */
|
|
78
|
+
.ant-app .form-valid-error .ant-picker-active-bar {
|
|
79
|
+
background-color: hsl(var(--destructive));
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/** 时间选择器的样式 */
|
|
83
|
+
.ant-app .form-valid-error .ant-picker-focused {
|
|
84
|
+
box-shadow: 0 0 0 2px rgb(255 38 5 / 6%);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/** 弹窗内tooltip层级问题 */
|
|
88
|
+
.css-var-root.ant-tooltip-css-var {
|
|
89
|
+
--ant-tooltip-z-index-popup: 2001;
|
|
90
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
.el-card {
|
|
2
|
+
--el-card-border-radius: var(--radius) !important;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.form-valid-error {
|
|
6
|
+
/** select 选择器的样式 */
|
|
7
|
+
.el-select .el-select__wrapper {
|
|
8
|
+
box-shadow: 0 0 0 1px var(--el-color-danger) inset;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/** input 选择器的样式 */
|
|
12
|
+
.el-input .el-input__wrapper {
|
|
13
|
+
box-shadow: 0 0 0 1px var(--el-color-danger) inset;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/** radio和checkbox 选择器的样式 */
|
|
17
|
+
.el-radio .el-radio__inner,
|
|
18
|
+
.el-checkbox .el-checkbox__inner {
|
|
19
|
+
border: 1px solid var(--el-color-danger);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.el-checkbox-button .el-checkbox-button__inner,
|
|
23
|
+
.el-radio-button .el-radio-button__inner {
|
|
24
|
+
border: 1px solid var(--el-color-danger);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.el-checkbox-button:first-child .el-checkbox-button__inner,
|
|
28
|
+
.el-radio-button:first-child .el-radio-button__inner {
|
|
29
|
+
border-left: 1px solid var(--el-color-danger);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.el-checkbox-button:not(:first-child) .el-checkbox-button__inner,
|
|
33
|
+
.el-radio-button:not(:first-child) .el-radio-button__inner {
|
|
34
|
+
border-left: none;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.el-textarea .el-textarea__inner {
|
|
38
|
+
border: 1px solid var(--el-color-danger);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
html .el-loading-mask {
|
|
43
|
+
z-index: 1000;
|
|
44
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@use '@melt-js/libs-vben/design/bem' as *;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import '@melt-js/libs-vben/design';
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
.form-valid-error {
|
|
2
|
+
.n-base-selection__state-border,
|
|
3
|
+
.n-input__state-border,
|
|
4
|
+
.n-radio-group__splitor {
|
|
5
|
+
border: var(--n-border-error);
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.n-radio-group .n-radio-button,
|
|
9
|
+
.n-radio-group .n-radio-group__splitor {
|
|
10
|
+
--n-button-border-color: rgb(255 56 96);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.n-radio__dot {
|
|
14
|
+
--n-box-shadow: inset 0 0 0 1px rgb(255 56 96);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.n-checkbox-box__border {
|
|
18
|
+
--n-border: 1px solid rgb(255 56 96);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.n-input .n-input__input-el,
|
|
22
|
+
.n-input .n-input__textarea-el,
|
|
23
|
+
.n-input-number .n-input__input-el {
|
|
24
|
+
font-family: Arial, Roboto, 'Helvetica Neue', sans-serif;
|
|
25
|
+
}
|
|
26
|
+
}
|