@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,244 @@
|
|
|
1
|
+
import { ref } from 'vue';
|
|
2
|
+
|
|
3
|
+
import { acceptHMRUpdate, defineStore } from 'pinia';
|
|
4
|
+
|
|
5
|
+
interface DictItem {
|
|
6
|
+
[key: string]: any;
|
|
7
|
+
/** Tag 颜色,CellDict 使用 */
|
|
8
|
+
color?: string;
|
|
9
|
+
label: string;
|
|
10
|
+
value: number | string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
interface DictHandler {
|
|
14
|
+
getAllDicts?: () => Promise<Record<string, DictItem[]>>;
|
|
15
|
+
getDict?: (code: string) => Promise<DictItem[]>;
|
|
16
|
+
getVersion?: () => Promise<number | string | undefined>;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* 自定义字典处理模块
|
|
21
|
+
* Custom dictionary handler module
|
|
22
|
+
*/
|
|
23
|
+
let customDictHandler: null | Partial<DictHandler> = null;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* 注入自定义字典处理器
|
|
27
|
+
* Inject a custom dictionary handler
|
|
28
|
+
*/
|
|
29
|
+
const setDictHandler = (handler: Partial<DictHandler>) => {
|
|
30
|
+
customDictHandler = handler;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* 获取字典处理模块
|
|
35
|
+
* Get the dictionary handler
|
|
36
|
+
*/
|
|
37
|
+
const getDictHandler = (): Partial<DictHandler> => {
|
|
38
|
+
return customDictHandler ?? {};
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* 正在进行的按编码请求,用于合并并发
|
|
43
|
+
* In-flight requests keyed by dict code for request dedupe
|
|
44
|
+
*/
|
|
45
|
+
const pendingRequests = new Map<string, Promise<DictItem[]>>();
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* 字典支持模块
|
|
49
|
+
* Dictionary support module
|
|
50
|
+
*/
|
|
51
|
+
const useDictStore = defineStore(
|
|
52
|
+
'core-dict',
|
|
53
|
+
() => {
|
|
54
|
+
const dictMap = ref<Record<string, DictItem[]>>({});
|
|
55
|
+
const version = ref<number | string | undefined>();
|
|
56
|
+
/**
|
|
57
|
+
* 批次号:`$reset` 或全量 `refreshDict()` 时递增,用于丢弃之前发出的 `loadAllDicts` 结果
|
|
58
|
+
* Batch token: bumped on `$reset` or full `refreshDict()` so earlier `loadAllDicts` responses are discarded
|
|
59
|
+
*/
|
|
60
|
+
let batchToken = 0;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* 按编码异步获取字典项(带缓存与并发合并)
|
|
64
|
+
* Get dict items by code asynchronously (with cache and request dedupe)
|
|
65
|
+
* @param code 字典编码
|
|
66
|
+
*/
|
|
67
|
+
async function getDict(code: string): Promise<DictItem[]> {
|
|
68
|
+
const cached = dictMap.value[code];
|
|
69
|
+
if (cached) {
|
|
70
|
+
return cached;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const handler = getDictHandler();
|
|
74
|
+
if (!handler.getDict) {
|
|
75
|
+
return [];
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const pending = pendingRequests.get(code);
|
|
79
|
+
if (pending) {
|
|
80
|
+
return pending;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// refreshDict / $reset 会移除登记,只有仍登记为当前请求时才写入或清理
|
|
84
|
+
const request: Promise<DictItem[]> = handler
|
|
85
|
+
.getDict(code)
|
|
86
|
+
.then((items) => {
|
|
87
|
+
if (pendingRequests.get(code) === request) {
|
|
88
|
+
dictMap.value = { ...dictMap.value, [code]: items };
|
|
89
|
+
}
|
|
90
|
+
return items;
|
|
91
|
+
})
|
|
92
|
+
.finally(() => {
|
|
93
|
+
if (pendingRequests.get(code) === request) {
|
|
94
|
+
pendingRequests.delete(code);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
pendingRequests.set(code, request);
|
|
99
|
+
return request;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* 同步读取字典项(响应式);未命中时后台触发加载
|
|
104
|
+
* Synchronously read dict items (reactive); triggers background load on miss
|
|
105
|
+
* @param code 字典编码
|
|
106
|
+
*/
|
|
107
|
+
function getDictSync(code: string): DictItem[] {
|
|
108
|
+
const cached = dictMap.value[code];
|
|
109
|
+
if (cached) {
|
|
110
|
+
return cached;
|
|
111
|
+
}
|
|
112
|
+
if (getDictHandler().getDict) {
|
|
113
|
+
getDict(code).catch(() => {
|
|
114
|
+
// 后台加载失败时静默忽略
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
return [];
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* 按编码与值查找字典项
|
|
122
|
+
* Find a dict item by code and value
|
|
123
|
+
* @param code 字典编码
|
|
124
|
+
* @param value 字典值
|
|
125
|
+
*/
|
|
126
|
+
function getDictItem(
|
|
127
|
+
code: string,
|
|
128
|
+
value: null | number | string | undefined,
|
|
129
|
+
): DictItem | undefined {
|
|
130
|
+
if (value === null || value === undefined) {
|
|
131
|
+
return undefined;
|
|
132
|
+
}
|
|
133
|
+
const items = getDictSync(code);
|
|
134
|
+
return items.find((item) => String(item.value) === String(value));
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* 按编码与值获取字典标签;找不到时返回原值
|
|
139
|
+
* Get dict label by code and value; returns the original value when not found
|
|
140
|
+
* @param code 字典编码
|
|
141
|
+
* @param value 字典值
|
|
142
|
+
*/
|
|
143
|
+
function getDictLabel(
|
|
144
|
+
code: string,
|
|
145
|
+
value: null | number | string | undefined,
|
|
146
|
+
): null | number | string | undefined {
|
|
147
|
+
const item = getDictItem(code, value);
|
|
148
|
+
return item?.label ?? value;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* 全量预加载字典(支持版本校验)
|
|
153
|
+
* Preload all dictionaries (with version check)
|
|
154
|
+
* @param force 是否强制刷新
|
|
155
|
+
*/
|
|
156
|
+
async function loadAllDicts(force = false): Promise<void> {
|
|
157
|
+
const handler = getDictHandler();
|
|
158
|
+
if (!handler.getAllDicts) {
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
const token = batchToken;
|
|
163
|
+
let remoteVersion: number | string | undefined;
|
|
164
|
+
|
|
165
|
+
if (handler.getVersion) {
|
|
166
|
+
remoteVersion = await handler.getVersion();
|
|
167
|
+
if (token !== batchToken) {
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
if (
|
|
171
|
+
!force &&
|
|
172
|
+
remoteVersion !== undefined &&
|
|
173
|
+
remoteVersion === version.value &&
|
|
174
|
+
Object.keys(dictMap.value).length > 0
|
|
175
|
+
) {
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
} else if (!force && Object.keys(dictMap.value).length > 0) {
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
const all = await handler.getAllDicts();
|
|
183
|
+
if (token !== batchToken) {
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
dictMap.value = all ?? {};
|
|
187
|
+
if (remoteVersion !== undefined) {
|
|
188
|
+
version.value = remoteVersion;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* 刷新字典缓存
|
|
194
|
+
* Refresh dictionary cache
|
|
195
|
+
* @param code 可选;传入时只清除该编码,否则清除全部
|
|
196
|
+
*/
|
|
197
|
+
function refreshDict(code?: string) {
|
|
198
|
+
if (code) {
|
|
199
|
+
const { [code]: _removed, ...rest } = dictMap.value;
|
|
200
|
+
dictMap.value = rest;
|
|
201
|
+
pendingRequests.delete(code);
|
|
202
|
+
} else {
|
|
203
|
+
batchToken += 1;
|
|
204
|
+
dictMap.value = {};
|
|
205
|
+
version.value = undefined;
|
|
206
|
+
pendingRequests.clear();
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
function $reset() {
|
|
211
|
+
batchToken += 1;
|
|
212
|
+
dictMap.value = {};
|
|
213
|
+
version.value = undefined;
|
|
214
|
+
pendingRequests.clear();
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
return {
|
|
218
|
+
dictMap,
|
|
219
|
+
version,
|
|
220
|
+
getDict,
|
|
221
|
+
getDictSync,
|
|
222
|
+
getDictItem,
|
|
223
|
+
getDictLabel,
|
|
224
|
+
loadAllDicts,
|
|
225
|
+
refreshDict,
|
|
226
|
+
$reset,
|
|
227
|
+
};
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
persist: {
|
|
231
|
+
// 持久化
|
|
232
|
+
pick: ['dictMap', 'version'],
|
|
233
|
+
},
|
|
234
|
+
},
|
|
235
|
+
);
|
|
236
|
+
|
|
237
|
+
export type { DictHandler, DictItem };
|
|
238
|
+
export { setDictHandler, useDictStore };
|
|
239
|
+
|
|
240
|
+
// 解决热更新问题
|
|
241
|
+
const hot = import.meta.hot;
|
|
242
|
+
if (hot) {
|
|
243
|
+
hot.accept(acceptHMRUpdate(useDictStore, hot));
|
|
244
|
+
}
|