@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.
Files changed (174) hide show
  1. package/LICENSE +10 -0
  2. package/README.md +86 -2
  3. package/package.json +98 -3
  4. package/src/access/access-control.vue +47 -0
  5. package/src/access/accessible.ts +236 -0
  6. package/src/access/directive.ts +42 -0
  7. package/src/access/index.ts +4 -0
  8. package/src/access/use-access.ts +53 -0
  9. package/src/composables/index.ts +14 -0
  10. package/src/composables/use-is-mobile.ts +7 -0
  11. package/src/composables/use-layout-style.ts +51 -0
  12. package/src/composables/use-layout-viewport-height.ts +71 -0
  13. package/src/composables/use-namespace.ts +106 -0
  14. package/src/composables/use-priority-value.ts +96 -0
  15. package/src/composables/use-scroll-lock.ts +151 -0
  16. package/src/composables/use-simple-locale/README.md +3 -0
  17. package/src/composables/use-simple-locale/index.ts +27 -0
  18. package/src/composables/use-simple-locale/messages.ts +31 -0
  19. package/src/composables/use-sortable.ts +32 -0
  20. package/src/constants/core.ts +76 -0
  21. package/src/constants/index.ts +2 -0
  22. package/src/core-icons/create-icon.ts +14 -0
  23. package/src/core-icons/index.ts +11 -0
  24. package/src/core-icons/lucide.ts +95 -0
  25. package/src/core-preferences/config.ts +172 -0
  26. package/src/core-preferences/constants.ts +116 -0
  27. package/src/core-preferences/index.ts +24 -0
  28. package/src/core-preferences/preferences.ts +503 -0
  29. package/src/core-preferences/types.ts +471 -0
  30. package/src/core-preferences/update-css-variables.ts +129 -0
  31. package/src/core-preferences/use-preferences.ts +282 -0
  32. package/src/design/css/global.css +1 -0
  33. package/src/design/css/nprogress.css +61 -0
  34. package/src/design/css/transition.css +238 -0
  35. package/src/design/css/ui.css +101 -0
  36. package/src/design/design-tokens/dark.css +446 -0
  37. package/src/design/design-tokens/default.css +491 -0
  38. package/src/design/design-tokens/index.ts +2 -0
  39. package/src/design/index.ts +6 -0
  40. package/src/design/scss-bem/bem.scss +34 -0
  41. package/src/design/scss-bem/constants.scss +5 -0
  42. package/src/hooks/index.ts +9 -0
  43. package/src/hooks/use-app-config.ts +39 -0
  44. package/src/hooks/use-content-maximize.ts +24 -0
  45. package/src/hooks/use-design-tokens.ts +421 -0
  46. package/src/hooks/use-hover-toggle.ts +163 -0
  47. package/src/hooks/use-pagination.ts +72 -0
  48. package/src/hooks/use-refresh.ts +16 -0
  49. package/src/hooks/use-tabs.ts +143 -0
  50. package/src/hooks/use-watermark.ts +84 -0
  51. package/src/icons/iconify/index.ts +5 -0
  52. package/src/icons/icons/empty-icon.vue +27 -0
  53. package/src/icons/index.ts +3 -0
  54. package/src/icons/svg/icons/antdv-logo.svg +29 -0
  55. package/src/icons/svg/icons/antdv-next-logo.svg +1 -0
  56. package/src/icons/svg/icons/avatar-1.svg +1 -0
  57. package/src/icons/svg/icons/avatar-2.svg +1 -0
  58. package/src/icons/svg/icons/avatar-3.svg +1 -0
  59. package/src/icons/svg/icons/avatar-4.svg +1 -0
  60. package/src/icons/svg/icons/bell.svg +1 -0
  61. package/src/icons/svg/icons/cake.svg +1 -0
  62. package/src/icons/svg/icons/card.svg +1 -0
  63. package/src/icons/svg/icons/dingding.svg +1 -0
  64. package/src/icons/svg/icons/download.svg +1 -0
  65. package/src/icons/svg/icons/github.svg +1 -0
  66. package/src/icons/svg/icons/google.svg +1 -0
  67. package/src/icons/svg/icons/qqchat.svg +1 -0
  68. package/src/icons/svg/icons/tdesign-logo.svg +39 -0
  69. package/src/icons/svg/icons/wechat.svg +1 -0
  70. package/src/icons/svg/index.ts +39 -0
  71. package/src/icons/svg/load.ts +81 -0
  72. package/src/locales/i18n.ts +147 -0
  73. package/src/locales/index.ts +30 -0
  74. package/src/locales/langs/en-US/authentication.json +65 -0
  75. package/src/locales/langs/en-US/common.json +27 -0
  76. package/src/locales/langs/en-US/preferences.json +245 -0
  77. package/src/locales/langs/en-US/profile.json +4 -0
  78. package/src/locales/langs/en-US/ui.json +165 -0
  79. package/src/locales/langs/zh-CN/authentication.json +65 -0
  80. package/src/locales/langs/zh-CN/common.json +27 -0
  81. package/src/locales/langs/zh-CN/preferences.json +245 -0
  82. package/src/locales/langs/zh-CN/profile.json +4 -0
  83. package/src/locales/langs/zh-CN/ui.json +165 -0
  84. package/src/locales/langs/zh-TW/authentication.json +65 -0
  85. package/src/locales/langs/zh-TW/common.json +27 -0
  86. package/src/locales/langs/zh-TW/preferences.json +245 -0
  87. package/src/locales/langs/zh-TW/profile.json +4 -0
  88. package/src/locales/langs/zh-TW/ui.json +165 -0
  89. package/src/locales/typing.ts +27 -0
  90. package/src/preferences/index.ts +42 -0
  91. package/src/request/index.ts +2 -0
  92. package/src/request/request-client/index.ts +3 -0
  93. package/src/request/request-client/modules/downloader.ts +60 -0
  94. package/src/request/request-client/modules/interceptor.ts +40 -0
  95. package/src/request/request-client/modules/sse.ts +134 -0
  96. package/src/request/request-client/modules/uploader.ts +79 -0
  97. package/src/request/request-client/preset-interceptors.ts +178 -0
  98. package/src/request/request-client/request-client.ts +163 -0
  99. package/src/request/request-client/types.ts +90 -0
  100. package/src/shared/cache/README.md +418 -0
  101. package/src/shared/cache/index.ts +5 -0
  102. package/src/shared/cache/indexeddb-driver.ts +137 -0
  103. package/src/shared/cache/local-storage-driver.ts +70 -0
  104. package/src/shared/cache/memory-storage-driver.ts +32 -0
  105. package/src/shared/cache/storage-manager.ts +146 -0
  106. package/src/shared/cache/types.ts +39 -0
  107. package/src/shared/color/color.ts +9 -0
  108. package/src/shared/color/convert.ts +62 -0
  109. package/src/shared/color/generator.ts +45 -0
  110. package/src/shared/color/index.ts +3 -0
  111. package/src/shared/constants/globals.ts +20 -0
  112. package/src/shared/constants/index.ts +2 -0
  113. package/src/shared/constants/vben.ts +30 -0
  114. package/src/shared/global-state.ts +45 -0
  115. package/src/shared/store.ts +1 -0
  116. package/src/shared/utils/cn.ts +10 -0
  117. package/src/shared/utils/date.ts +80 -0
  118. package/src/shared/utils/diff.ts +114 -0
  119. package/src/shared/utils/dom.ts +126 -0
  120. package/src/shared/utils/download.ts +186 -0
  121. package/src/shared/utils/error.ts +19 -0
  122. package/src/shared/utils/index.ts +22 -0
  123. package/src/shared/utils/inference.ts +164 -0
  124. package/src/shared/utils/letter.ts +47 -0
  125. package/src/shared/utils/merge.ts +11 -0
  126. package/src/shared/utils/nprogress.ts +52 -0
  127. package/src/shared/utils/resources.ts +21 -0
  128. package/src/shared/utils/stack.ts +103 -0
  129. package/src/shared/utils/state-handler.ts +61 -0
  130. package/src/shared/utils/to.ts +21 -0
  131. package/src/shared/utils/tree.ts +159 -0
  132. package/src/shared/utils/unique.ts +15 -0
  133. package/src/shared/utils/update-css-variables.ts +47 -0
  134. package/src/shared/utils/util.ts +50 -0
  135. package/src/shared/utils/window.ts +37 -0
  136. package/src/stores/index.ts +3 -0
  137. package/src/stores/modules/access.ts +130 -0
  138. package/src/stores/modules/dict.ts +244 -0
  139. package/src/stores/modules/index.ts +5 -0
  140. package/src/stores/modules/tabbar.ts +797 -0
  141. package/src/stores/modules/timezone.ts +132 -0
  142. package/src/stores/modules/user.ts +42 -0
  143. package/src/stores/setup.ts +79 -0
  144. package/src/stores/shim-pinia.d.ts +11 -0
  145. package/src/styles/antd/index.css +78 -0
  146. package/src/styles/antdv-next/index.css +90 -0
  147. package/src/styles/ele/index.css +44 -0
  148. package/src/styles/global/index.scss +1 -0
  149. package/src/styles/index.ts +1 -0
  150. package/src/styles/naive/index.css +26 -0
  151. package/src/styles/style-exports.d.ts +3 -0
  152. package/src/theme.css +592 -0
  153. package/src/types/global.d.ts +28 -0
  154. package/src/types/index.ts +2 -0
  155. package/src/types/shims.d.ts +1 -0
  156. package/src/types/user.ts +20 -0
  157. package/src/typings/app.d.ts +128 -0
  158. package/src/typings/basic.d.ts +42 -0
  159. package/src/typings/helper.d.ts +147 -0
  160. package/src/typings/index.ts +16 -0
  161. package/src/typings/languages.ts +28 -0
  162. package/src/typings/menu-record.ts +82 -0
  163. package/src/typings/tabs.ts +8 -0
  164. package/src/typings/vue-router.d.ts +169 -0
  165. package/src/utils/helpers/find-menu-by-path.ts +37 -0
  166. package/src/utils/helpers/generate-menus.ts +89 -0
  167. package/src/utils/helpers/generate-routes-backend.ts +108 -0
  168. package/src/utils/helpers/generate-routes-frontend.ts +58 -0
  169. package/src/utils/helpers/get-popup-container.ts +10 -0
  170. package/src/utils/helpers/index.ts +8 -0
  171. package/src/utils/helpers/merge-route-modules.ts +28 -0
  172. package/src/utils/helpers/reset-routes.ts +30 -0
  173. package/src/utils/helpers/unmount-global-loading.ts +31 -0
  174. 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
+ }
@@ -0,0 +1,3 @@
1
+ declare const stylesheet: string;
2
+
3
+ export default stylesheet;