vg-print 1.1.407 → 1.1.502

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 CHANGED
@@ -124,10 +124,10 @@ setSocketIo(io)
124
124
 
125
125
  也可直接使用 `window.io = io`(等价)。
126
126
 
127
- ### 可选依赖:数据源(axios)
127
+ ### 可选依赖:请求型数据源(axios)
128
128
 
129
129
  - 本库默认不内置 `axios`,以减少默认安装体积。
130
- - 仅当你需要“数据源管理/接口取数/字段联动”能力时,才需要安装并注入:
130
+ - 仅当你需要通过数据源配置发起接口请求、测试链接或执行数据处理时,才需要安装并注入:
131
131
 
132
132
  ```bash
133
133
  npm i axios
@@ -142,7 +142,7 @@ import { setHttpClient } from 'vg-print'
142
142
  setHttpClient(axios)
143
143
  ```
144
144
 
145
- 未安装/未注入时,“数据源”入口会自动禁用;即使误触发也不会导致项目报错。
145
+ 如果只使用 `data-sources` 外部传入数据,不需要安装 axios;未传外部数据源且未注入 axios 时,请求型“数据源”入口会自动提示依赖缺失,不会影响设计器其他功能。
146
146
 
147
147
  ### 可选插件:条码/二维码(@vg-print/plugin-bwip-js)
148
148
 
@@ -363,40 +363,6 @@ const onSaveDirect = () => designer.value?.save()
363
363
  - 但只有“异常/进度”场景才会带 message 或 payload
364
364
  - 普通状态(如 show:start 、 render:done 、 image:done )没有额外信息,所以就是 undefined
365
365
 
366
- ```ts
367
- type PreviewShowOptions = {
368
- width?: string | number
369
- dialogTitle?: string
370
- dialogTitleHtml?: string
371
- showPdf?: boolean
372
- showImg?: boolean
373
- showPrint2?: boolean
374
- showPrinterSelect?: boolean
375
- showTitle?: boolean
376
- pdfOptions?: object
377
- imageOptions?: object
378
- directPrintOptions?: object
379
- browserPrintOptions?: object
380
- onClick?: (type: 'pdf' | 'img' | 'print' | 'print2' | 'close') => void
381
- onClose?: () => void
382
- onRender?: () => void
383
- callBackOptions?: {
384
- statusCallback?: (status: {
385
- type:
386
- | 'show:start' | 'show:ready'
387
- | 'render:start' | 'render:done' | 'render:error'
388
- | 'pdf:start' | 'pdf:progress' | 'pdf:done' | 'pdf:error'
389
- | 'image:start' | 'image:progress' | 'image:done' | 'image:error'
390
- | 'print:start' | 'print:done' | 'print:error'
391
- | 'directPrint:start' | 'directPrint:progress' | 'directPrint:done' | 'directPrint:error'
392
- | 'close'
393
- message?: string
394
- payload?: any
395
- }) => void
396
- }
397
- }
398
- ```
399
-
400
366
  ### 使用示例(单独使用)
401
367
 
402
368
  ```vue
@@ -549,60 +515,6 @@ import 'vg-print/style.css'
549
515
 
550
516
  环境要求:Vue 3、Node >= 18.18。无需单独安装 `vue-plugin-hiprint`,本库已内置并导出 `hiprint` 能力。
551
517
 
552
- ## 快速开始
553
-
554
- ```js
555
- // main.ts
556
- import { createApp } from 'vue'
557
- import App from './App.vue'
558
- import vgPrint from 'vg-print'
559
- import 'vg-print/style.css'
560
-
561
- createApp(App).use(vgPrint).mount('#app')
562
- ```
563
-
564
- ```vue
565
- <template>
566
- <FullDesigner
567
- ref="designer"
568
- :hi-host="'http://127.0.0.1:17521'"
569
- :hi-token="'your-token'"
570
- :hi-auto-connect="true"
571
- />
572
-
573
- <el-button @click="preview">预览</el-button>
574
- <el-button @click="printBrowser">浏览器打印</el-button>
575
- <el-button @click="exportPdf">导出 PDF</el-button>
576
- <el-button @click="exportImage">导出图片</el-button>
577
- <el-button @click="directPrint">直接打印(需客户端)</el-button>
578
- </template>
579
-
580
- <script setup>
581
- import { ref } from 'vue'
582
- const designer = ref(null)
583
-
584
- // 预览
585
- const preview = () => designer.value.preView()
586
- // 浏览器打印
587
- const printBrowser = () => designer.value.printView()
588
- // 导出 PDF
589
- const exportPdf = () => designer.value.toPdf()
590
- // 导出图片
591
- const exportImage = () => designer.value.toImage()
592
- // 直接打印(需客户端已连接)
593
- const directPrint = () => designer.value.print()
594
-
595
- // 连接控制与参数设置
596
- const setHostToken = () => designer.value.setHiwebSocket('http://127.0.0.1:17521', 'token')
597
- // 主动连接客户端
598
- const connect = () => designer.value.connect()
599
- // 断开客户端
600
- const disconnect = () => designer.value.disconnect()
601
- // 关闭自动连接策略
602
- const disableAutoConnect = () => designer.value.disAutoConnect()
603
- </script>
604
- ```
605
-
606
518
  ## API(FullDesigner)
607
519
 
608
520
  ### 属性(Props,含描述)
@@ -612,6 +524,7 @@ const disableAutoConnect = () => designer.value.disAutoConnect()
612
524
  - `hi-auto-connect: boolean` 是否自动连接客户端;默认 `true`,为 `false` 时需手动调用 `connect()`
613
525
  - `initial-template: object` 初始化模板 JSON;为空时使用内置示例模板
614
526
  - `initial-print-data: object | array` 初始化打印数据;支持对象或数组,运行时变更会即时生效
527
+ - `data-sources: Array | object` 外部传入的数据源字段元数据;支持直接传入字段列表、表结构字段列表或带 `dataSets`/`fields` 的完整结构,用于设计器字段选择器;不传时继续使用数据源配置中的请求方式
615
528
  - `default-lang: string` 默认语言;支持 `cn`、`en`、`de`、`es`、`fr`、`it`、`ja`、`ru`、`cn_tw`;默认 `cn`
616
529
  - `config: object` 设计器引擎配置;会在初始化前注入到 `hiprint.setConfig(config)`(同时写入 `window.HIPRINT_CONFIG`)。常用字段:
617
530
  - `showAdsorbLine: boolean` 是否显示吸附参考线(拖动/缩放时的对齐辅助线)
@@ -746,12 +659,96 @@ const onSave = ({ template, data, templateId }) => {
746
659
 
747
660
  ## 数据源使用说明
748
661
 
749
- `FullDesigner` 内置了数据源管理与字段绑定能力,可用于将接口字段自动映射到设计器组件字段下拉中。
662
+ `FullDesigner` 内置了数据源管理与字段选择能力,可将接口返回字段集中整理,并在设计器字段属性中快速选择。
663
+
664
+ ### 外部传入数据源字段元数据(无需请求接口)
665
+
666
+ 如果业务系统已经取得表结构信息,不希望由 `vg-print` 再次请求接口,可以通过 `data-sources` 直接传入字段名和字段描述元数据。组件会根据这些元数据生成字段树,供设计器属性面板中的字段选择器使用;这种方式不依赖 axios,也不会把外部数据写入本地数据源配置。
667
+
668
+ ```vue
669
+ <template>
670
+ <FullDesigner
671
+ :data-sources="designerDataSources"
672
+ />
673
+ </template>
674
+
675
+ <script setup>
676
+ import { ref } from 'vue'
677
+
678
+ // data-sources 用于设计态字段选择器,只传字段元数据,不传实际业务数据
679
+ const designerDataSources = ref([
680
+ {
681
+ id: 'patient-info',
682
+ name: '患者信息',
683
+ groupName: '业务数据',
684
+ desc: '患者基本信息',
685
+ fields: [
686
+ { text: '主键', field: 'id' },
687
+ { text: '病人姓名', field: 'patientName' },
688
+ { text: '病人年龄', field: 'patientAge' },
689
+ { text: '科室名称', field: 'department.name' }
690
+ ]
691
+ },
692
+ {
693
+ id: 'fee-details',
694
+ name: '费用明细',
695
+ groupName: '业务数据',
696
+ desc: '患者费用明细',
697
+ fields: [
698
+ { text: '收费项目', field: 'itemName' },
699
+ { text: '金额', field: 'amount' }
700
+ ]
701
+ }
702
+ ])
703
+ </script>
704
+ ```
705
+
706
+ 字段选择器中会按“业务数据 → 患者基本信息/患者费用明细 → 字段”展示。外层分类使用 `groupName`,默认数据集名称优先使用 `desc`;字段元数据变化后,字段树会随组件属性更新。
707
+
708
+ 如果需要自定义字段显示名称或多个数据集,可以直接传入完整数据集结构:
709
+
710
+ ```js
711
+ const designerDataSources = [
712
+ {
713
+ id: 'patient-info',
714
+ name: '患者信息',
715
+ groupName: '业务数据',
716
+ desc: '患者基本信息',
717
+ dataSets: [
718
+ {
719
+ id: 'patient',
720
+ name: '患者资料',
721
+ fields: [
722
+ { text: '病人姓名', field: 'patientName' },
723
+ { text: '科室名称', field: 'department.name' }
724
+ ]
725
+ }
726
+ ]
727
+ }
728
+ ]
729
+ ```
730
+
731
+ 如果后端返回的是表结构记录,转换为可绑定字段:
732
+
733
+ ```js
734
+ const designerDataSources = [
735
+ {
736
+ id: 'patient-info',
737
+ name: '患者信息',
738
+ groupName: '业务数据',
739
+ desc: '患者信息表',
740
+ data: [
741
+ { column_name: 'id', column_comment: '主键' },
742
+ { column_name: 'patientName', column_comment: '病人姓名' }
743
+ ]
744
+ }
745
+ ]
746
+ ```
750
747
 
751
748
  ### 入口与能力
752
749
 
753
750
  - 入口:二级工具栏点击“数据源”打开管理弹窗
754
- - 能力:数据源配置、测试获取、数据处理脚本、错误处理脚本、字段来源规则(全局/按组件类型)
751
+ - 能力:数据源配置、分类管理、测试获取、数据处理脚本、错误处理脚本、字段树选择
755
752
 
756
753
  ### 使用流程(推荐)
757
754
 
@@ -764,10 +761,8 @@ const onSave = ({ template, data, templateId }) => {
764
761
  3. 编写“数据处理”脚本(`processCode`)并点击“测试链接”:
765
762
  - 左侧显示原始返回(`rawResult`)
766
763
  - 右侧显示处理结果(`processed`)
767
- 4. 配置“字段来源规则”并保存:
768
- - 看板全局:`manual` `global`
769
- - 组件规则:`manual` / `global` / `custom`
770
- 5. 规则生效后,组件字段下拉会按规则自动展示字段列表
764
+ 4. 为数据源填写“分类名称”(不填写时使用唯一名称),便于在字段选择器中归类查找。
765
+ 5. 在设计器组件的“字段名”输入框后点击选择按钮,按“分类 数据集 → 字段”的树结构选取字段,选中后会自动回填。
771
766
 
772
767
  ### processCode / errorProcessCode 约定
773
768
 
@@ -787,7 +782,7 @@ $message.error(error.message)
787
782
 
788
783
  ### 字段结构约定
789
784
 
790
- 推荐返回以下结构,字段下拉识别最稳定:
785
+ 推荐返回以下结构,字段树识别最稳定:
791
786
 
792
787
  ```js
793
788
  [
@@ -806,26 +801,6 @@ return (result.data || []).map(item => ({
806
801
  }))
807
802
  ```
808
803
 
809
- ### 缓存与持久化策略(当前实现)
810
-
811
- - 数据源配置持久化:`KEY_VG_DATASOURCES`
812
- - 字段绑定规则持久化:`KEY_VG_FIELD_BINDINGS`
813
- - 数据源运行时缓存:`KEY_VG_DS_RUNTIME_CACHE`
814
- - 仅缓存处理后数据(`processed`)
815
- - 不缓存原始返回(`rawResult`)
816
- - 默认 TTL:30 分钟
817
- - 默认最大条目:20
818
-
819
- ### 常见问题
820
-
821
- - 测试成功但没有字段:
822
- - 检查 `processCode` 返回值是否为对象或对象数组
823
- - 检查数据集 path 是否命中处理结果
824
- - 字段下拉未更新:
825
- - 先“测试链接”生成字段,再“保存规则”
826
- - 表达式参数无效:
827
- - `expression` 求值异常会被忽略,建议先用简单表达式验证
828
-
829
804
  ## 高级用法(hiprint)
830
805
 
831
806
  本库导出 `hiprint`,可直接创建与操作模板对象(`hiprint.PrintTemplate`):
@@ -994,10 +969,6 @@ import {
994
969
  // 连接客户端(需要先启动客户端)
995
970
  connect()
996
971
 
997
- // 检查客户端是否已连接
998
- console.log(isClientConnected())
999
-
1000
-
1001
972
  // 1) 创建模板实例(可复用)
1002
973
  const tpl = createTemplate(tmplJson)
1003
974