@zl-ui-kit/components 0.3.3 → 0.5.0
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/README.md +104 -69
- package/dist/components/ZlChart/index.vue.d.ts +2 -0
- package/dist/components/ZlChart/index.vue.mjs +23 -20
- package/dist/components/ZlEditor/setupMonacoEnvironment.d.ts +1 -2
- package/dist/components/ZlEditor/setupMonacoEnvironment.mjs +10 -3
- package/dist/components/ZlI18nProvider/index.vue.mjs +8 -8
- package/dist/entries/editor.d.ts +2 -0
- package/dist/entries/editor.mjs +6 -4
- package/package.json +7 -7
package/README.md
CHANGED
|
@@ -15,7 +15,7 @@ ZL UI 业务组件库 —— Element Plus 体系,`Zl` 前缀,47 个业务组
|
|
|
15
15
|
| 包 | 职责 |
|
|
16
16
|
| --- | --- |
|
|
17
17
|
| [`@zl-ui-kit/components`](https://www.npmjs.com/package/@zl-ui-kit/components) | EP 化业务组件库(`Zl` 前缀,47 个组件) |
|
|
18
|
-
| [`@zl-ui-kit/composables`](https://www.npmjs.com/package/@zl-ui-kit/composables) | `useRequest` 请求体系、`useDict
|
|
18
|
+
| [`@zl-ui-kit/composables`](https://www.npmjs.com/package/@zl-ui-kit/composables) | `useRequest` 请求体系、`useDict`、`useGlobalData` 全局数据、国际化 |
|
|
19
19
|
| [`@zl-ui-kit/icons`](https://www.npmjs.com/package/@zl-ui-kit/icons) | 444 个离线 SVG 图标(prefix `zl`,开源图标库) |
|
|
20
20
|
| [`@zl-ui-kit/theme`](https://www.npmjs.com/package/@zl-ui-kit/theme) | 5 套主题 + `defineTheme` 运行时定制(内置 OFL 开源中文字体) |
|
|
21
21
|
| [`@zl-ui-kit/utils`](https://www.npmjs.com/package/@zl-ui-kit/utils) | TS 工具函数库 + Axios 请求封装 |
|
|
@@ -56,6 +56,14 @@ import { ZlFilePreview, ZlFileViewer } from '@zl-ui-kit/components/file-preview'
|
|
|
56
56
|
> 例外:`ZlPdfViewer` 没有重型依赖,仍留在主入口,`import { ZlPdfViewer } from '@zl-ui-kit/components'`。
|
|
57
57
|
> `app.use(ZlUI)` 全量注册**不含**上述子入口组件,需要的话手动 `app.component('ZlChart', ZlChart)`。
|
|
58
58
|
|
|
59
|
+
**关于 `echarts` 版本**(`peerDependencies: "^5.6.0 || ^6.0.0"`,5.6+ 与 6.x 均支持):
|
|
60
|
+
|
|
61
|
+
- `ZlChart` 内部是 `import * as echarts from 'echarts'`(全量包,开箱即用、无需自己 `use()` 注册图表类型);
|
|
62
|
+
若宿主用 `echarts/core` + 按需注册,两者是两份独立实例,产物会同时含两份 echarts(实测约 +600KB)。
|
|
63
|
+
此时可按需改用宿主实例自绘,或在构建里把 `echarts` 设为 external 由宿主提供。
|
|
64
|
+
- 升级到 **echarts 6** 后默认主题变了(配色、legend 默认挪到画布底部、轴标签防溢出默认开启),
|
|
65
|
+
想保持 v5 观感:`import 'echarts/theme/v5'` + `<ZlChart theme="v5" ... />`(`theme` prop 见 §6 ⑧)。
|
|
66
|
+
|
|
59
67
|
接入:
|
|
60
68
|
|
|
61
69
|
```ts
|
|
@@ -74,7 +82,7 @@ createApp(App).use(ElementPlus).use(ZlUI).mount('#app')
|
|
|
74
82
|
```ts
|
|
75
83
|
// 1. 组件 —— Zl 前缀
|
|
76
84
|
import { ZlTable, ZlEmpty } from '@zl-ui-kit/components'
|
|
77
|
-
// 2. hooks —— useRequest / useDict / useLocale /
|
|
85
|
+
// 2. hooks —— useRequest / useDict / useLocale / useGlobalData / useZlT …
|
|
78
86
|
import { useRequest, useDict } from '@zl-ui-kit/composables'
|
|
79
87
|
// 3. 工具函数 —— generateUUID / paginate / formatNumber …
|
|
80
88
|
import { generateUUID, paginate } from '@zl-ui-kit/utils'
|
|
@@ -90,20 +98,22 @@ import '@zl-ui-kit/theme/themes.css'
|
|
|
90
98
|
> npm i @zl-ui-kit/components @zl-ui-kit/composables @zl-ui-kit/utils
|
|
91
99
|
> ```
|
|
92
100
|
|
|
93
|
-
> **版本要求 `>=0.
|
|
101
|
+
> **版本要求 `>=0.4.0`**
|
|
94
102
|
>
|
|
95
103
|
> - `0.2.0`:tarball 里依赖仍是 `catalog:` 协议,安装报 `Unsupported URL Type "catalog:"`
|
|
96
104
|
> - `0.3.0`:`exports` 指向不存在的 `dist/index.mjs`,装得上但 import 报 `ERR_MODULE_NOT_FOUND`
|
|
97
105
|
> - `0.3.1`:把 micro-app 误设为**必需** peer,纯 Web 应用会被强行拉入 micro-app(约 2.4MB)
|
|
98
106
|
>
|
|
99
|
-
> 这三个版本均已 `deprecate`,请直接用 `0.
|
|
107
|
+
> 这三个版本均已 `deprecate`,请直接用 `0.4.0` 或更新版本。
|
|
100
108
|
|
|
101
|
-
>
|
|
109
|
+
> **`0.5.0` 起不再包含任何微前端依赖**
|
|
102
110
|
>
|
|
103
|
-
>
|
|
104
|
-
>
|
|
105
|
-
>
|
|
106
|
-
>
|
|
111
|
+
> 微前端通信层(`useMicroApp` / `useMicroAction` / `usePageTabs` / `useMicroGlobalData`)与
|
|
112
|
+
> `formatMicroUrl` 工具已全部移除,`@micro-zoe/micro-app` 不再是 peer 依赖 —— 安装本库不会
|
|
113
|
+
> 再拉入这个约 2.4MB 的包,`@zl-ui-kit/composables` 的产物里也没有它的静态 import
|
|
114
|
+
> (旧版在 Node 原生 ESM / SSR 下会因这条 import 报 `ERR_MODULE_NOT_FOUND`)。
|
|
115
|
+
> 全局数据(`locale` / `theme` / `token` / 用户 / 权限 / `config`)改用 `useGlobalData()`,
|
|
116
|
+
> 纯 `localStorage` 持久化;`useLocale`、主题、字典等能力的用法与行为不变。
|
|
107
117
|
|
|
108
118
|
> **两个「看起来像错、其实正常」的现象**
|
|
109
119
|
>
|
|
@@ -188,7 +198,7 @@ setTheme('dark') // 切换主题(light/dark/red-light/red-dark/b
|
|
|
188
198
|
### 3.5 文件与编辑
|
|
189
199
|
`ZlFilePreview` · `ZlFileViewer` · `ZlPdfViewer` · `ZlEditor` · `ZlSqlEditor` · `ZlLogin`
|
|
190
200
|
|
|
191
|
-
>
|
|
201
|
+
> 页签/微前端类组件(`ZlMicroPage`/`ZlAppTabs`/`ZlPageTabs`/`ZlDevMenu`)与配套 composables(`usePageTabs` 等)均已移除,`0.5.0` 起组件库不含任何微前端能力。
|
|
192
202
|
|
|
193
203
|
### 3.6 国际化基础设施(独立于 47 个业务组件)
|
|
194
204
|
`ZlI18nProvider` —— 国际化根容器,将 Element Plus 语言包经 `<el-config-provider>` 挂载到 Element Plus(详见第 13 章)。
|
|
@@ -249,7 +259,7 @@ setTheme('dark') // 切换主题(light/dark/red-light/red-dark/b
|
|
|
249
259
|
```
|
|
250
260
|
|
|
251
261
|
### ZlDictTag — 字典标签
|
|
252
|
-
经 `useDict(dictKey)` 解析独立字典 store(`useDictStore`,Vue3
|
|
262
|
+
经 `useDict(dictKey)` 解析独立字典 store(`useDictStore`,Vue3 状态管理缓存,不依赖全局数据)。**支持三种数据注入方式**(详见第 12.1.3 节与第 6.3 节 ⑤):
|
|
253
263
|
|
|
254
264
|
```vue
|
|
255
265
|
<!-- 1. 组件级直传(最轻量,无需任何全局配置即可翻译) -->
|
|
@@ -374,7 +384,7 @@ function onSearch(params) { req.run({ pageNum: 1, pageSize: 6, ...params }) }
|
|
|
374
384
|
|
|
375
385
|
#### ⑤ `ZlDictTag` —— 注入字典后由 `useDict` 解析
|
|
376
386
|
|
|
377
|
-
|
|
387
|
+
字典模块**不依赖全局数据**:数据由调用方注入或经 `setDictSource` 注册的加载器获取,缓存在独立的全局字典 store(`useDictStore`,基于 Vue3 `createGlobalState` 单例)中,跨组件共享并复用,避免重复加载。
|
|
378
388
|
|
|
379
389
|
`useDict` 的数据解析优先级(从高到低):**组件级直传 → 局部注入 source → 全局 source**。任一来源命中即写入缓存 `dictStore[key]` 统一解析;同一 key 仅在缓存未命中且未在加载时触发一次加载(结果缓存)。
|
|
380
390
|
|
|
@@ -445,6 +455,13 @@ const chartOption = computed(() => {
|
|
|
445
455
|
<ZlChart v-bind="chartOption" />
|
|
446
456
|
```
|
|
447
457
|
|
|
458
|
+
| Prop | 类型 | 说明 |
|
|
459
|
+
| --- | --- | --- |
|
|
460
|
+
| `series` | `object \| object[]` | 系列(单个或数组);其余 option 字段经 attrs 透传 |
|
|
461
|
+
| `theme` | `string` | 主题名,initialize 时指定。需先注册,如 `import 'echarts/theme/v5'` 后传 `theme="v5"`;echarts 6 想保留 v5 观感时用 |
|
|
462
|
+
|
|
463
|
+
> 暴露方法:`clear()`(模板 ref 调用)。尺寸自适应由 `useResizeObserver` 负责,容器需有明确高度。
|
|
464
|
+
|
|
448
465
|
#### ⑨ `useRequest` 生命周期面板
|
|
449
466
|
```ts
|
|
450
467
|
const req = useRequest(getResourcePageMaybeFail, { defaultParams: [{ pageNum: 1, pageSize: 5 }] })
|
|
@@ -541,6 +558,55 @@ const items: FormItem[] = [
|
|
|
541
558
|
- `ZlEditor` / `ZlSqlEditor`(+`useSqlCompletion`):富文本 / SQL 编辑器。
|
|
542
559
|
- `ZlLogin`(+`LoginForm`+`SlideChecker`):登录框,背景改半透明 + `backdrop-filter`。
|
|
543
560
|
|
|
561
|
+
### 9.1 `ZlEditor`:monaco worker 配置与首屏治理
|
|
562
|
+
|
|
563
|
+
`ZlEditor` 内部 `import * as monaco from 'monaco-editor'`(**全量**,含各语言 contribution),
|
|
564
|
+
是除 echarts 之外最重的一块依赖:`monaco-editor@0.41` 安装体积约 **83.8MB**,
|
|
565
|
+
min 后的编辑器内核约 **3.3MB**,其中 worker 单独成文件(`tsWorker` 4.4MB、`jsonWorker` 0.12MB)。
|
|
566
|
+
|
|
567
|
+
**worker 是干什么的**:monaco 把「语法校验、智能补全、格式化、TS 类型检查」这些 CPU 密集活儿
|
|
568
|
+
丢进 Web Worker,避免打字时主线程卡顿。**不配 worker 不会白屏**——编辑器照常输入,
|
|
569
|
+
但没有语言服务,控制台会打一条告警:
|
|
570
|
+
|
|
571
|
+
```
|
|
572
|
+
[ZlEditor] monaco worker 未配置:语言服务(TS/JSON/CSS 补全校验)不可用。
|
|
573
|
+
```
|
|
574
|
+
|
|
575
|
+
**为什么库不打包 worker**:vite lib 模式无法把 `?worker` 产物正确外链进库,打进库只会得到
|
|
576
|
+
一个指向不存在文件的 URL。所以由宿主注入 —— 用 `setupMonacoEnvironment(getWorker)`:
|
|
577
|
+
|
|
578
|
+
```ts
|
|
579
|
+
// 放在「延迟加载编辑器的那个模块」里,不要放 main.ts 顶部
|
|
580
|
+
import { setupMonacoEnvironment } from '@zl-ui-kit/components/editor'
|
|
581
|
+
import EditorWorker from 'monaco-editor/esm/vs/editor/editor.worker?worker'
|
|
582
|
+
import JsonWorker from 'monaco-editor/esm/vs/language/json/json.worker?worker'
|
|
583
|
+
import TsWorker from 'monaco-editor/esm/vs/language/typescript/ts.worker?worker'
|
|
584
|
+
|
|
585
|
+
setupMonacoEnvironment((_, label) => {
|
|
586
|
+
if (label === 'json') return new JsonWorker()
|
|
587
|
+
if (label === 'typescript' || label === 'javascript') return new TsWorker()
|
|
588
|
+
return new EditorWorker() // 其他语言(含 SQL 的着色)走基础 worker
|
|
589
|
+
})
|
|
590
|
+
```
|
|
591
|
+
|
|
592
|
+
> `getWorker` 必须是**同步**返回 `Worker`,所以 worker 要用上面的 `?worker` 静态导入(Vite 会
|
|
593
|
+
> 输出独立文件),不能在函数里 `await import()`。
|
|
594
|
+
|
|
595
|
+
**让编辑器不进首屏**(体积 3MB+,务必异步):
|
|
596
|
+
|
|
597
|
+
```ts
|
|
598
|
+
const ZlEditor = defineAsyncComponent(() =>
|
|
599
|
+
import('@zl-ui-kit/components/editor').then(m => m.ZlEditor),
|
|
600
|
+
)
|
|
601
|
+
```
|
|
602
|
+
|
|
603
|
+
路由级拆分(`() => import('./EditorPage.vue')`)效果相同 —— 只要 `@zl-ui-kit/components/editor`
|
|
604
|
+
这条导入不在首屏的静态依赖图里,monaco 就一定在异步 chunk 中;worker 文件只会在
|
|
605
|
+
`new Worker()` 时被请求。
|
|
606
|
+
|
|
607
|
+
**只用 SQL 编辑器**时:SQL 补全由 `useSqlCompletion` + `dt-sql-parser`(纯 JS)提供,
|
|
608
|
+
着色走 monaco 的 Monarch,所以只配 `editor.worker` 就够,可以不引 `tsWorker`。
|
|
609
|
+
|
|
544
610
|
---
|
|
545
611
|
|
|
546
612
|
## 10. 主题定制(@zl-ui-kit/theme)
|
|
@@ -617,7 +683,7 @@ const { theme, themes, setTheme } = useTheme() // 组件内响应式
|
|
|
617
683
|
### 12.1 `@zl-ui-kit/composables` —— 公共 Hooks
|
|
618
684
|
|
|
619
685
|
```ts
|
|
620
|
-
import { useRequest,
|
|
686
|
+
import { useRequest, useGlobalData, useDict /* … */ } from '@zl-ui-kit/composables'
|
|
621
687
|
```
|
|
622
688
|
|
|
623
689
|
#### 12.1.1 请求体系 `useRequest`(插件与全局配置)
|
|
@@ -646,55 +712,37 @@ const logPlugin = defineUseRequestPlugin((inst) => ({
|
|
|
646
712
|
const { data } = useRequest(getList, {}, [logPlugin])
|
|
647
713
|
```
|
|
648
714
|
|
|
649
|
-
#### 12.1.2
|
|
650
|
-
|
|
651
|
-
> 运行前提:微前端相关 hook 需要 `@micro-zoe/micro-app`(**0.3.2 起为可选依赖**,`npm i @micro-zoe/micro-app`)。
|
|
652
|
-
> 缺失时这些 hook 会抛出带安装指引的错误。
|
|
653
|
-
>
|
|
654
|
-
> `useMicroGlobalData` 是例外:它在检测不到 micro-app 时**自动降级**为本地存储模式
|
|
655
|
-
> (`$zl_locale` / `$zl_theme` / `$zl_token`),因此 `useLocale`、主题、字典在纯 Web 应用中照常可用。
|
|
656
|
-
> `enableGlobalDataMock(true)` 仍然保留,用于开发态强制走 mock 数据。
|
|
657
|
-
|
|
658
|
-
| Hook / 函数 | 返回 / 签名 | 说明 |
|
|
659
|
-
| --- | --- | --- |
|
|
660
|
-
| `useMicroApp()` | `{ apps, isMicroBase(), isMicroChild(), updateApps(), startMicroApp(config?) }` | 微应用身份判断、启动、活跃应用列表(全局单例) |
|
|
661
|
-
| `useMicroAction(action, appName?)` | `(...args) => void` | 向子应用(或指定 app,缺省广播全部)派发动作事件(前缀 `action__`) |
|
|
662
|
-
| `useMicroActionAsync(action, appName?)` | `(...args) => Promise` | 派发并等待 Promise 化结果(主/子应用语义不同) |
|
|
663
|
-
| `useMicroListener()`(共享单例) | `{ on, off, once }` | 监听动作事件 |
|
|
664
|
-
| `useMicroResultListener(action, callback)` | `void` | 监听动作执行结果 |
|
|
665
|
-
| `dispatchMicroAction(action, appName, ...data)` | `Promise<void>` | 向指定子应用派发动作(回调式) |
|
|
666
|
-
|
|
667
|
-
#### 12.1.3 全局数据 `useMicroGlobalData`
|
|
715
|
+
#### 12.1.2 全局数据 `useGlobalData`
|
|
668
716
|
|
|
669
717
|
```ts
|
|
670
|
-
|
|
718
|
+
import { useGlobalData } from '@zl-ui-kit/composables'
|
|
719
|
+
const g = useGlobalData()
|
|
671
720
|
```
|
|
672
|
-
响应式字段(均为 `WritableComputedRef`):`locale` / `theme` / `token` / `isI18nKeyVisible` / `roles` / `permissions` / `user` / `localeMessages` / `elLocaleMessages` / `config`。(注:字典数据已独立为 `useDictStore
|
|
721
|
+
响应式字段(均为 `WritableComputedRef`):`locale` / `theme` / `token` / `isI18nKeyVisible` / `roles` / `permissions` / `user` / `localeMessages` / `elLocaleMessages` / `config`。(注:字典数据已独立为 `useDictStore`,不挂在全局数据上。)
|
|
673
722
|
|
|
674
723
|
方法:`getConfig(key, default?)` / `isConfig(key, compareValue='true')` / `setAndWaitUntil({ set?, until? })`(设置并等待条件成立)/ `resetUser()`。
|
|
675
|
-
|
|
724
|
+
持久化:`locale` / `theme` / `token` 经 `useStorage` 写入 `$zl_locale` / `$zl_theme` / `$zl_token`(`theme` 缺省 `light`),并同步到 `<body data-theme>` / `<body data-locale>`;其余字段(用户、权限、`config` 等)为内存态,由宿主自行写入。
|
|
676
725
|
|
|
677
726
|
```ts
|
|
678
|
-
//
|
|
679
|
-
|
|
680
|
-
|
|
727
|
+
// 应用入口:初始化登录态与业务配置
|
|
728
|
+
const g = useGlobalData()
|
|
729
|
+
g.token.value = loginToken // 持久化到 $zl_token
|
|
730
|
+
g.config.value = { 'zl.service.type': 'platform' } // useServiceType 读取它
|
|
731
|
+
g.user.value = { name: '张三' }
|
|
681
732
|
|
|
682
|
-
//
|
|
683
|
-
|
|
684
|
-
enableGlobalDataMock(true)
|
|
733
|
+
g.locale.value = 'en' // 切换语言,useLocale / ZlI18nProvider 跟随
|
|
734
|
+
g.resetUser() // 登出:清 user / roles / permissions / token
|
|
685
735
|
```
|
|
686
736
|
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
> 字典数据已独立:经 `setDictSource()` 注册(见 12.1.4),由 `useDictStore` 缓存,不再通过 `useMicroGlobalData().dictStore`。
|
|
737
|
+
> 本 hook 只依赖 `localStorage`,**不依赖任何微前端框架**。它替代了 `0.4.x` 及更早版本的
|
|
738
|
+
> `useMicroGlobalData`(已随微前端通信层一并移除),存储键保持一致,升级后已持久化的数据不会丢。
|
|
691
739
|
|
|
692
|
-
#### 12.1.
|
|
740
|
+
#### 12.1.3 字典与国际化
|
|
693
741
|
|
|
694
742
|
- `useDictStore`(全局字典 store,基于 Vue3 `createGlobalState` 单例):`dictStore`(缓存 `Record<key, DictItem[]>`)、`loadingKeys`、`setDictSource(source|null)`、`getDictSource()`、`ensureDict(key, localSource?)`。同一 key 仅在缓存未命中且未在加载时触发一次加载,结果缓存复用。
|
|
695
743
|
- `useDict(key, options?)` → `ComputedRef<DictItem[]>`(附带 `.label: Record<value,label>`):读 `useDictStore` 并解析。数据解析优先级:组件级 `options.data` → 局部 `useDictProvider({ source })` → 全局 `setDictSource(source)`。`DictItem = { label, value, icon?, type? }`(亦可用 `type DictItem` 导入)。
|
|
696
744
|
- `setDictSource(source | null)`:全局注册字典数据源(应用入口调用一次)。`source` 为静态表 `Record<string, DictItem[]>` 或函数 `(key) => DictItem[] | Promise<DictItem[]>`;传 `null` 清空。`getDictSource()` 可读取当前值。
|
|
697
|
-
- `useDictProvider(source)
|
|
745
|
+
- `useDictProvider(source)`:子树根提供局部字典数据源(覆盖全局)。
|
|
698
746
|
- `useLocale(options?, loader?)` → `{ i18n, locale, isI18nKeyVisible }`:创建与全局语言联动的 vue-i18n 实例;`loader(locale)` 按需返回 `{ localeMessages, elLocaleMessages }`(业务包 + Element Plus locale)。`elLocaleMessages` 写入全局数据后,**必须**由 `ZlI18nProvider` 经 `<el-config-provider>` 挂载到 Element Plus 才生效(分页 / 日期选择器等内置组件才本地化)。详见第 13 章。
|
|
699
747
|
- `useZlT()` → `{ t }`:组件内部渐进式翻译的安全桥梁。`t(key, fallback?, params?)` 在宿主已 `app.use(i18n)` 时委托 vue-i18n 解析(`params` 用于 `{name}` 命名插值),未命中 key 或宿主未装 i18n 时降级为 `fallback`(缺省返回 key),**绝不抛错**,从而可在不破坏存量消费方的前提下逐步把硬编码中文替换为 `t('zl.xxx','中文兜底')`。语言包 key 规范:`zl.<组件>.<语义>`。
|
|
700
748
|
- `mergeMessages(base, ...overrides)`:i18n 语言包深度合并,后者覆盖前者、未提供的 key 保留原值(按 `locale → key` 结构)。用于消费者「只覆盖部分文案」。
|
|
@@ -702,7 +750,7 @@ enableGlobalDataMock(true)
|
|
|
702
750
|
- `zlMessages` / `zlZhMessages` / `zlEnMessages`(来自 `@zl-ui-kit/components`):组件库内置语言包(zh / zh-cn / en),可被覆盖或整包替换。
|
|
703
751
|
- `ZlI18nProvider`(新增,来自 `@zl-ui-kit/components`):国际化根容器。用法 `<ZlI18nProvider><App/></ZlI18nProvider>`,在应用根包裹一次,把全局 `elLocaleMessages` 绑定到 Element Plus。
|
|
704
752
|
|
|
705
|
-
#### 12.1.
|
|
753
|
+
#### 12.1.4 全局消息 `useGlobalMessage`
|
|
706
754
|
|
|
707
755
|
```ts
|
|
708
756
|
const { Message, Modal, Notification } = useGlobalMessage()
|
|
@@ -715,14 +763,7 @@ const r = await Modal.confirmPromise({ title: '删除', message: '确认删除
|
|
|
715
763
|
```
|
|
716
764
|
`throwOnOk` / `throwOnCancel` 控制错误是否向上抛出(默认吞错 resolve(false) / resolve('Cancel'))。
|
|
717
765
|
|
|
718
|
-
#### 12.1.
|
|
719
|
-
|
|
720
|
-
```ts
|
|
721
|
-
const { roots, activeRoot, pageTabs, current, addPageTab, removePageTab, removeCurrentTab, clearPageTab, setCurrentTab, createPageTabsRoot, setRootChild } = usePageTabs()
|
|
722
|
-
```
|
|
723
|
-
micro-app 多应用页签模型(root 树 → 扁平页签 → 当前激活页签)。另含 `micros`、`activeRootKey` 只读属性。
|
|
724
|
-
|
|
725
|
-
#### 12.1.7 其它 Hooks
|
|
766
|
+
#### 12.1.5 其它 Hooks
|
|
726
767
|
|
|
727
768
|
- `createCacheComputed(getter)`:带缓存的 computed 工厂,同一对象结果缓存、作用域销毁自动清理;返回函数带 `.clear()`。
|
|
728
769
|
- `useSash(refName, options?)` → `{ sashElRef }`:拖拽分隔条交互;`options` 含 `start / onMousedown / onMousemove({dx,dy,start}) / onMouseup / onDoubleClick`。
|
|
@@ -762,7 +803,7 @@ api.get('/resources', { params: { pageNum: 1, pageSize: 10 } })
|
|
|
762
803
|
| `hasOwn(obj, key)` | `Object.prototype.hasOwnProperty` 封装 |
|
|
763
804
|
| `isObject` / `isPlainObject` / `isArray` / `isFunction` / `isPromise` / `isBoolean` / `isNumber` / `isDefined` | 类型判断(TS 类型守卫) |
|
|
764
805
|
|
|
765
|
-
#### 12.2.3 函数 / 加密 / DOM / 文件 /
|
|
806
|
+
#### 12.2.3 函数 / 加密 / DOM / 文件 / 杂项
|
|
766
807
|
|
|
767
808
|
**函数**
|
|
768
809
|
- `debounce(fn, delay = 300)`:防抖。
|
|
@@ -784,9 +825,6 @@ api.get('/resources', { params: { pageNum: 1, pageSize: 10 } })
|
|
|
784
825
|
- `fileUrlPreviewType(path)` → `'image' | 'pdf' | 'word' | 'ppt' | 'excel'`(按扩展名判断)。
|
|
785
826
|
- `formatFilesize(size, { precision = 2, units })`:文件大小格式化(B/KB/MB/GB)。
|
|
786
827
|
|
|
787
|
-
**微前端 URL**
|
|
788
|
-
- `formatMicroUrl(url, { dev?, origins? })` → `{ micro, URL, url, fullpath }`:从路径首段提取微应用标识;`dev` 态可将微应用源映射为本机 dev server(如 `{ dsc: 'http://localhost:5204' }`)。
|
|
789
|
-
|
|
790
828
|
**杂项**
|
|
791
829
|
- `generateUUID()`:UUID v4。
|
|
792
830
|
- `getRandomInt(min, max)`:`[min, max]` 区间随机整数。
|
|
@@ -816,15 +854,12 @@ api.get('/resources', { params: { pageNum: 1, pageSize: 10 } })
|
|
|
816
854
|
|
|
817
855
|
```ts
|
|
818
856
|
import { createZlI18n } from '@zl-ui-kit/components'
|
|
819
|
-
import {
|
|
857
|
+
import { useGlobalData } from '@zl-ui-kit/composables'
|
|
820
858
|
import en from 'element-plus/es/locale/lang/en'
|
|
821
859
|
import zhCn from 'element-plus/es/locale/lang/zh-cn'
|
|
822
860
|
|
|
823
|
-
// 开发态无 micro-app 时开启本地 mock(须在首次 useMicroGlobalData 前调用)
|
|
824
|
-
enableGlobalDataMock(true)
|
|
825
|
-
|
|
826
861
|
// 指定初始语言,避免 createI18n 取到非法 locale
|
|
827
|
-
const { locale } =
|
|
862
|
+
const { locale } = useGlobalData()
|
|
828
863
|
locale.value = 'zh'
|
|
829
864
|
|
|
830
865
|
const { i18n } = createZlI18n({
|
|
@@ -843,15 +878,15 @@ createApp(App).use(i18n).use(ElementPlus).use(ZlUi).use(router).mount('#app')
|
|
|
843
878
|
|
|
844
879
|
- `elLocales` 的 value 须是 Element Plus 语言包模块(`element-plus/es/locale/lang/<locale>`)。
|
|
845
880
|
- **合并优先级(低 → 高):内置 `zlMessages` → `loader` 返回的业务包 → 消费者 `messages` 覆盖项。**
|
|
846
|
-
- 需完全自定义加载逻辑(如远端按需拉取)时,改用底层 `useLocale(options, loader)`(见 §12.1.
|
|
881
|
+
- 需完全自定义加载逻辑(如远端按需拉取)时,改用底层 `useLocale(options, loader)`(见 §12.1.3);`createZlI18n` 内部即是对它的封装,并额外处理「默认包 + 覆盖 + EP 包」的合并。
|
|
847
882
|
|
|
848
883
|
### 13.3 根容器挂载(App.vue)
|
|
849
884
|
|
|
850
885
|
```vue
|
|
851
886
|
<script setup lang="ts">
|
|
852
|
-
import {
|
|
887
|
+
import { useGlobalData } from '@zl-ui-kit/composables'
|
|
853
888
|
import { ZlI18nProvider } from '@zl-ui-kit/components'
|
|
854
|
-
const { locale, isI18nKeyVisible } =
|
|
889
|
+
const { locale, isI18nKeyVisible } = useGlobalData()
|
|
855
890
|
</script>
|
|
856
891
|
|
|
857
892
|
<template>
|
|
@@ -893,7 +928,7 @@ const text = t('zl.empty.noData', '暂无相关数据')
|
|
|
893
928
|
| 内置默认 | 5 套主题(light / dark / red-light / red-dark / blue) | `zlMessages`(zh / zh-cn / en) |
|
|
894
929
|
| 运行时定义 | `defineTheme({ name, base, colors, tokens })` | `createZlI18n({ messages })` 覆盖 / 新增语言 |
|
|
895
930
|
| 引用 / 切换 | `setTheme('dark')` / `useTheme()` | `locale.value = 'en'` / `useLocale()` 返回的 `locale` |
|
|
896
|
-
| 持久化 | `enableThemePersistence()` | `
|
|
931
|
+
| 持久化 | `enableThemePersistence()` | `useGlobalData().locale` 经 `$zl_locale` 持久化 |
|
|
897
932
|
| 细粒度覆盖 | CSS 变量 L1 覆写(`--zl-primary-6`) | `mergeMessages` / 直接覆盖单个 key |
|
|
898
933
|
| 挂载点 | `body[data-theme]` | `<ZlI18nProvider>`(EP locale)+ `app.use(i18n)`(业务文案) |
|
|
899
934
|
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
type __VLS_Props = {
|
|
2
2
|
/** 系列(单对象或数组);其余图表配置经 attrs 透传(title/xAxis/yAxis/tooltip 等,可用 src/utils/echarts 工具构造) */
|
|
3
3
|
series?: Record<string, any> | Array<Record<string, any>>;
|
|
4
|
+
/** 主题名:先 `import 'echarts/theme/v5'` 之类注册主题,再传 `theme="v5"`。升级到 echarts 6 后想保持 v5 观感时用 */
|
|
5
|
+
theme?: string;
|
|
4
6
|
};
|
|
5
7
|
declare function clear(): void;
|
|
6
8
|
declare const _default: import('vue').DefineComponent<__VLS_Props, {
|
|
@@ -1,41 +1,44 @@
|
|
|
1
|
-
import { defineComponent as
|
|
1
|
+
import { defineComponent as v, useAttrs as h, computed as d, shallowRef as _, ref as x, watch as c, onMounted as k, onScopeDispose as w, openBlock as R, createElementBlock as y, nextTick as i } from "vue";
|
|
2
2
|
import { useResizeObserver as z } from "@vueuse/core";
|
|
3
3
|
import * as O from "echarts";
|
|
4
|
-
const C = /* @__PURE__ */
|
|
4
|
+
const C = /* @__PURE__ */ v({
|
|
5
5
|
name: "ZlChart",
|
|
6
6
|
inheritAttrs: !1,
|
|
7
7
|
__name: "index",
|
|
8
8
|
props: {
|
|
9
|
-
series: {}
|
|
9
|
+
series: {},
|
|
10
|
+
theme: {}
|
|
10
11
|
},
|
|
11
|
-
setup(
|
|
12
|
-
const
|
|
13
|
-
const { series:
|
|
12
|
+
setup(l, { expose: u }) {
|
|
13
|
+
const s = l, p = h(), r = d(() => {
|
|
14
|
+
const { series: m, ...a } = p;
|
|
14
15
|
return {
|
|
15
|
-
...
|
|
16
|
-
series: [].concat(
|
|
16
|
+
...a,
|
|
17
|
+
series: [].concat(s.series ?? [])
|
|
17
18
|
};
|
|
18
|
-
}), e =
|
|
19
|
-
async function
|
|
20
|
-
await
|
|
19
|
+
}), e = _(), t = x();
|
|
20
|
+
async function n() {
|
|
21
|
+
await i(), e.value?.setOption(r.value);
|
|
21
22
|
}
|
|
22
|
-
async function
|
|
23
|
-
await
|
|
23
|
+
async function o() {
|
|
24
|
+
await i(), t.value && (e.value = O.init(t.value, s.theme), n());
|
|
24
25
|
}
|
|
25
|
-
function
|
|
26
|
+
function f() {
|
|
26
27
|
e.value?.clear();
|
|
27
28
|
}
|
|
28
29
|
return z(t, () => {
|
|
29
30
|
e.value?.resize();
|
|
30
|
-
}),
|
|
31
|
-
|
|
31
|
+
}), c(() => r.value, () => {
|
|
32
|
+
n();
|
|
33
|
+
}), c(() => s.theme, () => {
|
|
34
|
+
e.value?.dispose(), e.value = void 0, o();
|
|
32
35
|
}), k(() => {
|
|
33
|
-
|
|
36
|
+
o();
|
|
34
37
|
}), w(() => {
|
|
35
38
|
e.value?.dispose();
|
|
36
|
-
}),
|
|
37
|
-
clear:
|
|
38
|
-
}), (
|
|
39
|
+
}), u({
|
|
40
|
+
clear: f
|
|
41
|
+
}), (m, a) => (R(), y("div", {
|
|
39
42
|
ref_key: "chartRef",
|
|
40
43
|
ref: t,
|
|
41
44
|
class: "zl-chart"
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* 库模式下 worker 无法静态打包(vite lib 限制),默认实现仅警告;
|
|
4
4
|
* 消费方按官方方式自行提供 worker(或 CDN),经 setupMonacoEnvironment(getWorker) 注入。
|
|
5
5
|
*/
|
|
6
|
-
type GetWorker = (...args: any[]) => Worker;
|
|
6
|
+
export type GetWorker = (...args: any[]) => Worker;
|
|
7
7
|
declare global {
|
|
8
8
|
interface GlobalThis {
|
|
9
9
|
MonacoEnvironment?: {
|
|
@@ -12,5 +12,4 @@ declare global {
|
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
14
|
export declare function setupMonacoEnvironment(getWorker?: GetWorker): void;
|
|
15
|
-
export {};
|
|
16
15
|
//# sourceMappingURL=setupMonacoEnvironment.d.ts.map
|
|
@@ -1,9 +1,16 @@
|
|
|
1
|
-
function
|
|
2
|
-
globalThis.MonacoEnvironment?.getWorker
|
|
1
|
+
function e(o) {
|
|
2
|
+
const n = globalThis.MonacoEnvironment?.getWorker;
|
|
3
|
+
if (o) {
|
|
4
|
+
globalThis.MonacoEnvironment = {
|
|
5
|
+
getWorker: o
|
|
6
|
+
};
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
n || console.warn(
|
|
3
10
|
"[ZlEditor] monaco worker 未配置:语言服务(TS/JSON/CSS 补全校验)不可用。请调用 setupMonacoEnvironment(getWorker) 注入(见 README「monaco worker 配置」)。"
|
|
4
11
|
);
|
|
5
12
|
}
|
|
6
13
|
export {
|
|
7
|
-
|
|
14
|
+
e as setupMonacoEnvironment
|
|
8
15
|
};
|
|
9
16
|
//# sourceMappingURL=setupMonacoEnvironment.mjs.map
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
import { ElConfigProvider as
|
|
3
|
-
import {
|
|
4
|
-
const _ = /* @__PURE__ */
|
|
1
|
+
import { defineComponent as r, openBlock as l, createBlock as a, unref as e, withCtx as n, renderSlot as s } from "vue";
|
|
2
|
+
import { ElConfigProvider as c } from "element-plus";
|
|
3
|
+
import { useGlobalData as f } from "@zl-ui-kit/composables";
|
|
4
|
+
const _ = /* @__PURE__ */ r({
|
|
5
5
|
__name: "index",
|
|
6
|
-
setup(
|
|
7
|
-
const { elLocaleMessages: o } =
|
|
8
|
-
return (
|
|
6
|
+
setup(i) {
|
|
7
|
+
const { elLocaleMessages: o } = f();
|
|
8
|
+
return (t, m) => (l(), a(e(c), {
|
|
9
9
|
locale: e(o) || void 0
|
|
10
10
|
}, {
|
|
11
11
|
default: n(() => [
|
|
12
|
-
|
|
12
|
+
s(t.$slots, "default")
|
|
13
13
|
]),
|
|
14
14
|
_: 3
|
|
15
15
|
}, 8, ["locale"]));
|
package/dist/entries/editor.d.ts
CHANGED
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
*/
|
|
8
8
|
export { default as ZlEditor } from '../components/ZlEditor/index.vue';
|
|
9
9
|
export { default as ZlSqlEditor } from '../components/ZlEditor/ZlSqlEditor.vue';
|
|
10
|
+
export { setupMonacoEnvironment } from '../components/ZlEditor/setupMonacoEnvironment';
|
|
11
|
+
export type { GetWorker } from '../components/ZlEditor/setupMonacoEnvironment';
|
|
10
12
|
export { useSqlCompletion } from '../components/ZlEditor/useSqlCompletion';
|
|
11
13
|
export type { SqlTableColumn, SqlTableSchema } from '../components/ZlEditor/useSqlCompletion';
|
|
12
14
|
//# sourceMappingURL=editor.d.ts.map
|
package/dist/entries/editor.mjs
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { default as e } from "../components/ZlEditor/index.vue.mjs";
|
|
2
2
|
import '../components/ZlEditor/index.css';/* empty css */
|
|
3
|
-
import { default as
|
|
4
|
-
import {
|
|
3
|
+
import { default as m } from "../components/ZlEditor/ZlSqlEditor.vue.mjs";
|
|
4
|
+
import { setupMonacoEnvironment as f } from "../components/ZlEditor/setupMonacoEnvironment.mjs";
|
|
5
|
+
import { useSqlCompletion as i } from "../components/ZlEditor/useSqlCompletion.mjs";
|
|
5
6
|
export {
|
|
6
7
|
e as ZlEditor,
|
|
7
|
-
|
|
8
|
-
|
|
8
|
+
m as ZlSqlEditor,
|
|
9
|
+
f as setupMonacoEnvironment,
|
|
10
|
+
i as useSqlCompletion
|
|
9
11
|
};
|
|
10
12
|
//# sourceMappingURL=editor.mjs.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zl-ui-kit/components",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "ZL UI 业务组件库(Element Plus 体系,Zl 前缀)——首批:Icon/AutoTooltip/Tag/CornerTag/Text/Title/Copy/Empty/Pagination/DictTag",
|
|
6
6
|
"license": "MIT",
|
|
@@ -39,9 +39,9 @@
|
|
|
39
39
|
"file-type": "^20.4.1",
|
|
40
40
|
"dt-sql-parser": "^4.3.1",
|
|
41
41
|
"sql-formatter": "^15.4.2",
|
|
42
|
-
"@zl-ui-kit/composables": "0.
|
|
43
|
-
"@zl-ui-kit/
|
|
44
|
-
"@zl-ui-kit/
|
|
42
|
+
"@zl-ui-kit/composables": "0.5.0",
|
|
43
|
+
"@zl-ui-kit/icons": "0.5.0",
|
|
44
|
+
"@zl-ui-kit/utils": "0.5.0"
|
|
45
45
|
},
|
|
46
46
|
"peerDependencies": {
|
|
47
47
|
"@vueuse/core": "^12.3.0",
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"@vue-office/excel": "1.7.14",
|
|
53
53
|
"@vue-office/pdf": "^2.0.10",
|
|
54
54
|
"@vue-office/pptx": "1.0.1",
|
|
55
|
-
"echarts": "^5.6.0"
|
|
55
|
+
"echarts": "^5.6.0 || ^6.0.0"
|
|
56
56
|
},
|
|
57
57
|
"peerDependenciesMeta": {
|
|
58
58
|
"monaco-editor": {
|
|
@@ -98,10 +98,10 @@
|
|
|
98
98
|
"@vue-office/pdf": "^2.0.10",
|
|
99
99
|
"@vue-office/pptx": "1.0.1",
|
|
100
100
|
"echarts": "^5.6.0",
|
|
101
|
+
"@jichuang/eslint-config": "1.0.0",
|
|
101
102
|
"@jichuang/vite-config": "1.0.0",
|
|
102
103
|
"@jichuang/tsconfig": "1.0.0",
|
|
103
|
-
"@
|
|
104
|
-
"@zl-ui-kit/theme": "0.3.3"
|
|
104
|
+
"@zl-ui-kit/theme": "0.5.0"
|
|
105
105
|
},
|
|
106
106
|
"repository": {
|
|
107
107
|
"type": "git",
|