@zl-ui-kit/composables 0.5.1 → 0.6.1

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 (3) hide show
  1. package/README.md +8 -8
  2. package/dist/index.js +86 -67
  3. package/package.json +4 -4
package/README.md CHANGED
@@ -5,14 +5,14 @@
5
5
 
6
6
  ZL UI 组合式函数库(TypeScript):
7
7
 
8
- | 模块 | 说明 |
9
- | --- | --- |
10
- | `useRequest/useDataRequest/usePaginationRequest/usePageableRequest` | 请求体系(插件机制:loading/ready/refreshDeps/download,可 `defineUseRequestPlugin` 自定义) |
11
- | `useGlobalMessage` | **Element Plus 版** ElMessage/ElMessageBox/ElNotification 封装;`Modal.confirmPromise` 语义与参考实现一致 |
12
- | `useGlobalData` | 全局应用数据(locale / theme / token / 用户 / 权限 / config),纯 `localStorage` 持久化 |
13
- | `useDict/useDictStore/useDictProvider/setDictSource` | 字典(独立 Vue3 状态管理 store 缓存,不依赖全局数据;支持组件直传 / 局部 source / 全局 source 三级注入) |
14
- | `useLocale` | vue-i18n + 全局语言联动(`elLocaleMessages` 对接 EP locale) |
15
- | `useSash/useServiceType/useUKey/createCacheComputed` | 其他工具 hook |
8
+ | 模块 | 说明 |
9
+ | ------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
10
+ | `useRequest/useDataRequest/usePaginationRequest/usePageableRequest` | 请求体系(插件机制:loading/ready/refreshDeps/download,可 `defineUseRequestPlugin` 自定义) |
11
+ | `useGlobalMessage` | **Element Plus 版** ElMessage/ElMessageBox/ElNotification 封装;`Modal.confirmPromise` 语义与参考实现一致 |
12
+ | `useGlobalData` | 全局应用数据(locale / theme / token / 用户 / 权限 / config),纯 `localStorage` 持久化 |
13
+ | `useDict/useDictStore/useDictProvider/setDictSource` | 字典(独立 Vue3 状态管理 store 缓存,不依赖全局数据;支持组件直传 / 局部 source / 全局 source 三级注入) |
14
+ | `useLocale` | vue-i18n + 全局语言联动(`elLocaleMessages` 对接 EP locale) |
15
+ | `useSash/useServiceType/useUKey/createCacheComputed` | 其他工具 hook |
16
16
 
17
17
  ## 运行前提
18
18
 
package/dist/index.js CHANGED
@@ -5,7 +5,10 @@ function createCacheComputed(getter) {
5
5
  const cache = /* @__PURE__ */ new Map();
6
6
  const useComputed = (obj) => {
7
7
  if (!cache.has(obj)) {
8
- cache.set(obj, computed(() => getter(obj)));
8
+ cache.set(
9
+ obj,
10
+ computed(() => getter(obj))
11
+ );
9
12
  }
10
13
  return cache.get(obj);
11
14
  };
@@ -31,8 +34,7 @@ function deepMerge(base, override) {
31
34
  function mergeMessages(base, ...overrides) {
32
35
  let result = { ...base ?? {} };
33
36
  for (const override of overrides) {
34
- if (!override)
35
- continue;
37
+ if (!override) continue;
36
38
  result = deepMerge(result, override);
37
39
  }
38
40
  return result;
@@ -142,8 +144,7 @@ var useGlobalData = createGlobalState2(() => {
142
144
  const globalData = ref2(createInitialState(storages));
143
145
  const waiters = /* @__PURE__ */ new Set();
144
146
  function updateBodyAttribute(key, value) {
145
- if (typeof document === "undefined")
146
- return;
147
+ if (typeof document === "undefined") return;
147
148
  document.body.setAttribute(key, String(value ?? ""));
148
149
  }
149
150
  updateBodyAttribute("data-theme", storages.theme.value);
@@ -153,38 +154,39 @@ var useGlobalData = createGlobalState2(() => {
153
154
  (values) => {
154
155
  values.forEach((value, index) => {
155
156
  const key = SYNC_KEYS[index];
156
- if (storages[key].value === value)
157
- return;
157
+ if (storages[key].value === value) return;
158
158
  storages[key].value = value;
159
- if (key === "theme")
160
- updateBodyAttribute("data-theme", value);
161
- if (key === "locale")
162
- updateBodyAttribute("data-locale", value);
159
+ if (key === "theme") updateBodyAttribute("data-theme", value);
160
+ if (key === "locale") updateBodyAttribute("data-locale", value);
163
161
  });
164
162
  }
165
163
  );
166
- watch(globalData, () => {
167
- waiters.forEach((fn) => fn());
168
- }, { deep: true });
164
+ watch(
165
+ globalData,
166
+ () => {
167
+ waiters.forEach((fn) => fn());
168
+ },
169
+ { deep: true }
170
+ );
169
171
  function getConfig(key, defaultValue) {
170
172
  return globalData.value.config?.[key] ?? defaultValue;
171
173
  }
172
174
  function isConfig(key, compareValue = "true") {
173
175
  return globalData.value.config?.[key] === compareValue;
174
176
  }
175
- async function setAndWaitUntil({ set, until }) {
176
- if (!set && !isFunction(until))
177
- return;
178
- if (isPlainObject2(set))
179
- globalData.value = { ...globalData.value, ...set };
177
+ async function setAndWaitUntil({
178
+ set,
179
+ until
180
+ }) {
181
+ if (!set && !isFunction(until)) return;
182
+ if (isPlainObject2(set)) globalData.value = { ...globalData.value, ...set };
180
183
  if (!isFunction(until)) {
181
184
  await nextTick();
182
185
  return;
183
186
  }
184
187
  const { resolve, promise } = withResolvers();
185
188
  const waiter = () => {
186
- if (!until(globalData.value))
187
- return;
189
+ if (!until(globalData.value)) return;
188
190
  waiters.delete(waiter);
189
191
  resolve();
190
192
  };
@@ -288,8 +290,7 @@ var elLocaleMessagesStore = {};
288
290
  function useLocale(options = {}, loader) {
289
291
  const { locale, localeMessages, elLocaleMessages, isI18nKeyVisible } = useGlobalData();
290
292
  function postTranslation(translated, key) {
291
- if (isI18nKeyVisible.value)
292
- return key;
293
+ if (isI18nKeyVisible.value) return key;
293
294
  return options.postTranslation ? options.postTranslation(translated, key) : translated;
294
295
  }
295
296
  const i18n = createI18n({
@@ -302,22 +303,25 @@ function useLocale(options = {}, loader) {
302
303
  localeMessages.value = options.messages;
303
304
  }
304
305
  const loadedLocale = [];
305
- watch2(locale, async (value) => {
306
- if (!value)
307
- return;
308
- i18n.global.locale.value = value;
309
- if (loader) {
310
- if (loadedLocale.includes(value)) {
311
- elLocaleMessages.value = elLocaleMessagesStore[value];
312
- return;
306
+ watch2(
307
+ locale,
308
+ async (value) => {
309
+ if (!value) return;
310
+ i18n.global.locale.value = value;
311
+ if (loader) {
312
+ if (loadedLocale.includes(value)) {
313
+ elLocaleMessages.value = elLocaleMessagesStore[value];
314
+ return;
315
+ }
316
+ const messages = await loader(value);
317
+ loadedLocale.push(value);
318
+ localeMessages.value = messages.localeMessages;
319
+ elLocaleMessages.value = messages.elLocaleMessages;
320
+ elLocaleMessagesStore[value] = messages.elLocaleMessages;
313
321
  }
314
- const messages = await loader(value);
315
- loadedLocale.push(value);
316
- localeMessages.value = messages.localeMessages;
317
- elLocaleMessages.value = messages.elLocaleMessages;
318
- elLocaleMessagesStore[value] = messages.elLocaleMessages;
319
- }
320
- }, { immediate: true });
322
+ },
323
+ { immediate: true }
324
+ );
321
325
  let storeLocale;
322
326
  watch2(isI18nKeyVisible, (visible) => {
323
327
  const currentLocale = toValue(i18n.global.locale);
@@ -329,20 +333,21 @@ function useLocale(options = {}, loader) {
329
333
  storeLocale = void 0;
330
334
  }
331
335
  });
332
- watch2(localeMessages, (messages) => {
333
- if (!messages || typeof messages !== "object")
334
- return;
335
- if (!("locale" in messages)) {
336
- for (const [loc2, msg] of Object.entries(messages)) {
337
- if (msg && typeof msg === "object")
338
- i18n.global.setLocaleMessage(loc2, msg);
336
+ watch2(
337
+ localeMessages,
338
+ (messages) => {
339
+ if (!messages || typeof messages !== "object") return;
340
+ if (!("locale" in messages)) {
341
+ for (const [loc2, msg] of Object.entries(messages)) {
342
+ if (msg && typeof msg === "object") i18n.global.setLocaleMessage(loc2, msg);
343
+ }
344
+ return;
339
345
  }
340
- return;
341
- }
342
- const { locale: loc, ...rest } = messages;
343
- if (loc)
344
- i18n.global.setLocaleMessage(loc, rest);
345
- }, { immediate: true });
346
+ const { locale: loc, ...rest } = messages;
347
+ if (loc) i18n.global.setLocaleMessage(loc, rest);
348
+ },
349
+ { immediate: true }
350
+ );
346
351
  return {
347
352
  i18n,
348
353
  isI18nKeyVisible,
@@ -546,18 +551,16 @@ var useLoadingPlugin_default = definePlugin((requestInstance, options = {}) => {
546
551
  };
547
552
  },
548
553
  onRequest(service) {
549
- if (!toValue3(loadingKeep))
550
- return () => service();
551
- return () => Promise.allSettled([
552
- service(),
553
- promiseTimeout(toValue3(loadingDelay) + toValue3(loadingKeep))
554
- ]).then(([res]) => {
555
- if (res.status === "fulfilled") {
556
- return res.value;
557
- } else {
558
- return Promise.reject(res.reason);
554
+ if (!toValue3(loadingKeep)) return () => service();
555
+ return () => Promise.allSettled([service(), promiseTimeout(toValue3(loadingDelay) + toValue3(loadingKeep))]).then(
556
+ ([res]) => {
557
+ if (res.status === "fulfilled") {
558
+ return res.value;
559
+ } else {
560
+ return Promise.reject(res.reason);
561
+ }
559
562
  }
560
- });
563
+ );
561
564
  },
562
565
  onCancel() {
563
566
  stop();
@@ -573,9 +576,13 @@ import { whenever } from "@vueuse/core";
573
576
  import { ref as ref4, toValue as toValue4 } from "vue";
574
577
  var useReadyPlugin_default = definePlugin((requestInstance, options = {}) => {
575
578
  const { ready = ref4(true), defaultParams = [] } = options;
576
- whenever(() => toValue4(ready), () => {
577
- requestInstance.context.run(...defaultParams);
578
- }, { flush: "sync" });
579
+ whenever(
580
+ () => toValue4(ready),
581
+ () => {
582
+ requestInstance.context.run(...defaultParams);
583
+ },
584
+ { flush: "sync" }
585
+ );
579
586
  return {
580
587
  onBefore() {
581
588
  if (!toValue4(ready)) {
@@ -613,7 +620,13 @@ function useRequestImpl(service, options = {}, plugins = []) {
613
620
  };
614
621
  const { manual = false, defaultParams = [] } = _options;
615
622
  const requestInstance = createRequest(service, _options);
616
- requestInstance.plugins.value = [...plugins, useLoadingPlugin_default, useReadyPlugin_default, useRefreshDepsPlugin_default, useDownloadPlugin_default].map((plugin) => plugin(requestInstance, _options));
623
+ requestInstance.plugins.value = [
624
+ ...plugins,
625
+ useLoadingPlugin_default,
626
+ useReadyPlugin_default,
627
+ useRefreshDepsPlugin_default,
628
+ useDownloadPlugin_default
629
+ ].map((plugin) => plugin(requestInstance, _options));
617
630
  if (!manual) {
618
631
  const params = requestInstance.params.value || defaultParams;
619
632
  requestInstance.context.run(...params);
@@ -658,7 +671,13 @@ import { computed as computed5, inject as inject3 } from "vue";
658
671
  function usePaginationRequest(service, options, plugins) {
659
672
  const { pagination = {}, ...restOptions } = options || {};
660
673
  const injectedGlobalOptions = inject3(GLOBAL_OPTIONS_PROVIDER_KEY, {});
661
- const { currentKey, pageSizeKey, totalKey, dataKey } = Object.assign({}, DEFAULT_PAGINATION_OPTIONS, getGlobalOptions().pagination, injectedGlobalOptions.pagination, pagination);
674
+ const { currentKey, pageSizeKey, totalKey, dataKey } = Object.assign(
675
+ {},
676
+ DEFAULT_PAGINATION_OPTIONS,
677
+ getGlobalOptions().pagination,
678
+ injectedGlobalOptions.pagination,
679
+ pagination
680
+ );
662
681
  const finalOptions = {
663
682
  defaultParams: [{ [currentKey]: 1, [pageSizeKey]: 30 }],
664
683
  ...restOptions
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zl-ui-kit/composables",
3
- "version": "0.5.1",
3
+ "version": "0.6.1",
4
4
  "type": "module",
5
5
  "description": "ZL UI 组合式函数库:useRequest 请求体系、微前端通信层、全局消息、字典、国际化等",
6
6
  "license": "MIT",
@@ -19,7 +19,7 @@
19
19
  ],
20
20
  "sideEffects": false,
21
21
  "dependencies": {
22
- "@zl-ui-kit/utils": "0.5.1"
22
+ "@zl-ui-kit/utils": "0.6.1"
23
23
  },
24
24
  "peerDependencies": {
25
25
  "@vueuse/core": "^12.3.0",
@@ -40,8 +40,8 @@
40
40
  "cross-env": "^7.0.3",
41
41
  "tsup": "^8.3.5",
42
42
  "typescript": "^5.7.3",
43
- "@jichuang/eslint-config": "1.0.0",
44
- "@jichuang/tsconfig": "1.0.0"
43
+ "@jichuang/tsconfig": "1.0.0",
44
+ "@jichuang/eslint-config": "1.0.0"
45
45
  },
46
46
  "repository": {
47
47
  "type": "git",