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 +93 -122
- package/dist/style.css +1 -1
- package/dist/vg-print.es.js +14778 -13663
- package/package.json +1 -1
- package/README.en.md +0 -552
package/README.md
CHANGED
|
@@ -124,10 +124,10 @@ setSocketIo(io)
|
|
|
124
124
|
|
|
125
125
|
也可直接使用 `window.io = io`(等价)。
|
|
126
126
|
|
|
127
|
-
###
|
|
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
|
-
|
|
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
|
|