@gct-paas/render-web 0.1.6-dev.8 → 6.0.0-dev.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 (143) hide show
  1. package/README.md +161 -0
  2. package/dist/index.min.css +1 -1
  3. package/dist/loader.esm.min.js +2 -1
  4. package/es/Event/Events.d.ts +1 -0
  5. package/es/Event/Events.mjs +7 -3
  6. package/es/_virtual/_rolldown/runtime.mjs +13 -0
  7. package/es/components/base-vxe-table/base-vxe-table.vue.d.ts +80 -0
  8. package/es/components/base-vxe-table/base-vxe-table.vue.mjs +7 -0
  9. package/es/components/base-vxe-table/base-vxe-table.vue_vue_type_script_setup_true_name_base-vxe-table_lang.mjs +154 -0
  10. package/es/components/base-vxe-table/base-vxe-table.vue_vue_type_style_index_0_scoped_bf4b3774_lang.css +10 -0
  11. package/es/components/base-vxe-table/utils.d.ts +25 -0
  12. package/es/components/base-vxe-table/utils.mjs +25 -0
  13. package/es/components/collapse-detail/components/collapse-list.vue.d.ts +24 -0
  14. package/es/components/collapse-detail/components/collapse-list.vue.mjs +5 -0
  15. package/es/components/collapse-detail/components/collapse-list.vue_vue_type_script_setup_true_lang.mjs +103 -0
  16. package/es/components/collapse-detail/components/enum-tag-label.vue.d.ts +6 -0
  17. package/es/components/collapse-detail/components/enum-tag-label.vue.mjs +5 -0
  18. package/es/components/collapse-detail/components/enum-tag-label.vue_vue_type_script_setup_true_lang.mjs +61 -0
  19. package/es/components/collapse-detail/components/instance-status-label.vue.d.ts +34 -0
  20. package/es/components/collapse-detail/components/instance-status-label.vue.mjs +7 -0
  21. package/es/components/collapse-detail/components/instance-status-label.vue_vue_type_script_setup_true_lang.mjs +76 -0
  22. package/es/components/collapse-detail/components/instance-status-label.vue_vue_type_style_index_0_scoped_610b0bb3_lang.css +77 -0
  23. package/es/components/collapse-detail/components/label-tag.vue.d.ts +6 -0
  24. package/es/components/collapse-detail/components/label-tag.vue.mjs +7 -0
  25. package/es/components/collapse-detail/components/label-tag.vue_vue_type_script_setup_true_lang.mjs +34 -0
  26. package/es/components/collapse-detail/components/label-tag.vue_vue_type_style_index_0_scoped_b25afce5_lang.css +39 -0
  27. package/es/components/collapse-detail/constants/instance-theme-config.d.ts +64 -0
  28. package/es/components/collapse-detail/constants/instance-theme-config.mjs +100 -0
  29. package/es/components/collapse-detail/constants/status.d.ts +36 -0
  30. package/es/components/collapse-detail/constants/status.mjs +34 -0
  31. package/es/components/collapse-detail/index.d.ts +3 -0
  32. package/es/components/collapse-detail/index.mjs +1 -0
  33. package/es/components/collapse-detail/index.vue.d.ts +37 -0
  34. package/es/components/collapse-detail/index.vue.mjs +7 -0
  35. package/es/components/collapse-detail/index.vue_vue_type_script_setup_true_name_collapse-detail_lang.mjs +90 -0
  36. package/es/components/collapse-detail/index.vue_vue_type_style_index_0_scoped_b4b9903c_lang.css +83 -0
  37. package/es/components/collapse-detail/typing.d.ts +44 -0
  38. package/es/components/collapse-detail/typing.mjs +17 -0
  39. package/es/components/field-search-cascader/field-cascader.vue.d.ts +17 -0
  40. package/es/components/field-search-cascader/field-cascader.vue.mjs +8 -0
  41. package/es/components/field-search-cascader/field-cascader.vue_vue_type_script_setup_true_lang.mjs +297 -0
  42. package/es/components/field-search-cascader/field-cascader.vue_vue_type_style_index_0_scoped_cb5e4d67_lang.css +52 -0
  43. package/es/components/field-search-cascader/field-cascader.vue_vue_type_style_index_1_lang.css +3 -0
  44. package/es/components/field-search-cascader/index.d.ts +2 -0
  45. package/es/components/field-search-cascader/index.mjs +1 -0
  46. package/es/components/form-component/FieldSelect.css +22 -0
  47. package/es/components/form-component/FieldSelect.d.ts +9 -0
  48. package/es/components/form-component/FieldSelect.mjs +19 -8
  49. package/es/components/form-component/field-label/tag-label.vue.d.ts +1 -0
  50. package/es/components/form-component/field-label/tag-label.vue.mjs +2 -2
  51. package/es/components/form-component/field-label/tag-label.vue_vue_type_script_setup_true_name_TagLabel_lang.mjs +15 -13
  52. package/es/components/form-component/field-label/tag-label.vue_vue_type_style_index_0_scoped_5e1146da_lang.css +18 -0
  53. package/es/components/form-component/field-label/tag-span.vue.mjs +1 -1
  54. package/es/components/form-component/field-readonly.vue_vue_type_script_setup_true_lang.mjs +26 -44
  55. package/es/components/index.d.ts +7 -0
  56. package/es/components/index.mjs +9 -0
  57. package/es/components/layouts/basic-page/basic-page.vue.d.ts +30 -0
  58. package/es/components/layouts/basic-page/basic-page.vue.mjs +7 -0
  59. package/es/components/layouts/basic-page/basic-page.vue_vue_type_script_setup_true_name_basic-page_lang.mjs +30 -0
  60. package/es/components/layouts/basic-page/basic-page.vue_vue_type_style_index_0_scoped_23453a1b_lang.css +20 -0
  61. package/es/components/layouts/basic-page-render/basic-page-render.vue.d.ts +30 -0
  62. package/es/components/layouts/basic-page-render/basic-page-render.vue.mjs +7 -0
  63. package/es/components/layouts/basic-page-render/basic-page-render.vue_vue_type_script_setup_true_name_BasicPageRender_lang.mjs +30 -0
  64. package/es/components/layouts/basic-page-render/basic-page-render.vue_vue_type_style_index_0_scoped_3c6aba55_lang.css +20 -0
  65. package/es/components/multi-field/multi-field-display.vue.mjs +2 -2
  66. package/es/components/multi-field/multi-field-display.vue_vue_type_script_setup_true_lang.mjs +1 -1
  67. package/es/components/multi-field/{multi-field-display.vue_vue_type_style_index_0_scoped_0f2f02cc_lang.css → multi-field-display.vue_vue_type_style_index_0_scoped_a62c7691_lang.css} +1 -1
  68. package/es/components/rich-editor/index.d.ts +2 -0
  69. package/es/components/rich-editor/index.mjs +1 -0
  70. package/es/components/rich-editor/rich-editor.vue.d.ts +22 -0
  71. package/es/components/rich-editor/rich-editor.vue.mjs +5 -0
  72. package/es/components/rich-editor/rich-editor.vue_vue_type_script_setup_true_lang.mjs +150 -0
  73. package/es/components/rich-editor/style.css +747 -0
  74. package/es/constants/xlsx-parser.d.ts +15 -0
  75. package/es/constants/xlsx-parser.mjs +58 -0
  76. package/es/enums/xlsx-parser.d.ts +293 -0
  77. package/es/enums/xlsx-parser.mjs +36 -0
  78. package/es/hooks/index.d.ts +1 -0
  79. package/es/hooks/index.mjs +1 -0
  80. package/es/hooks/refCardList.mjs +6 -6
  81. package/es/hooks/useQuickSearch.d.ts +8 -0
  82. package/es/hooks/useQuickSearch.mjs +96 -0
  83. package/es/index.d.ts +3 -0
  84. package/es/index.mjs +13 -1
  85. package/es/interface/xlsx-parser/base.d.ts +151 -0
  86. package/es/interface/xlsx-parser/index.d.ts +246 -0
  87. package/es/locale/auto-register.d.ts +2 -0
  88. package/es/locale/auto-register.mjs +31 -0
  89. package/es/locale/sys/appDesigner.d.ts +11 -0
  90. package/es/locale/sys/appDesigner.mjs +11 -0
  91. package/es/locale/sys/bi.d.ts +4 -0
  92. package/es/locale/sys/bi.mjs +6 -0
  93. package/es/locale/sys/bpmn.d.ts +10 -0
  94. package/es/locale/sys/bpmn.mjs +12 -0
  95. package/es/locale/sys/component.d.ts +15 -0
  96. package/es/locale/sys/component.mjs +15 -0
  97. package/es/locale/sys/developer.d.ts +6 -0
  98. package/es/locale/sys/developer.mjs +6 -0
  99. package/es/locale/sys/edhr.d.ts +19 -0
  100. package/es/locale/sys/edhr.mjs +15 -0
  101. package/es/locale/sys/message.d.ts +4 -0
  102. package/es/locale/sys/message.mjs +6 -0
  103. package/es/locale/sys/model.d.ts +34 -0
  104. package/es/locale/sys/model.mjs +38 -0
  105. package/es/locale/sys/onlineForm.d.ts +8 -0
  106. package/es/locale/sys/onlineForm.mjs +12 -0
  107. package/es/locale/sys/pageDesigner.d.ts +7 -0
  108. package/es/locale/sys/pageDesigner.mjs +9 -0
  109. package/es/locale/sys.d.ts +10 -0
  110. package/es/locale/sys.mjs +14 -0
  111. package/es/modules/app-mqtt/app-mqtt.interface.d.ts +26 -0
  112. package/es/modules/app-mqtt/app-mqtt.service.d.ts +73 -0
  113. package/es/modules/app-mqtt/app-mqtt.service.mjs +134 -0
  114. package/es/modules/app-mqtt/index.d.ts +2 -0
  115. package/es/modules/app-mqtt/index.mjs +1 -0
  116. package/es/plugins/render-card-field/render-card-field.css +171 -0
  117. package/es/plugins/render-card-field/render-card-field.d.ts +48 -0
  118. package/es/plugins/render-card-field/render-card-field.mjs +157 -0
  119. package/es/plugins/render-card-field/render-card-field.provider.d.ts +7 -0
  120. package/es/plugins/render-card-field/render-card-field.provider.mjs +10 -0
  121. package/es/plugins/render-card-view-page/render-card-view-page.css +72 -0
  122. package/es/plugins/render-card-view-page/render-card-view-page.d.ts +33 -0
  123. package/es/plugins/render-card-view-page/render-card-view-page.mjs +61 -0
  124. package/es/plugins/render-card-view-page/render-card-view-page.provider.d.ts +7 -0
  125. package/es/plugins/render-card-view-page/render-card-view-page.provider.mjs +10 -0
  126. package/es/plugins/render-design-editor/index.d.ts +5 -0
  127. package/es/plugins/render-design-editor/upload-file/index.d.ts +4 -0
  128. package/es/plugins/render-design-editor/upload-file/upload-file.d.ts +51 -0
  129. package/es/plugins/render-design-editor/upload-image/index.d.ts +4 -0
  130. package/es/plugins/render-design-editor/upload-image/upload-image.d.ts +51 -0
  131. package/es/plugins/render-design-editor/user-signature/index.d.ts +4 -0
  132. package/es/plugins/render-design-editor/user-signature/user-signature.d.ts +51 -0
  133. package/es/setup-app.d.ts +2 -0
  134. package/es/setup-app.mjs +22 -0
  135. package/es/types/shims-modules.d.ts +11 -0
  136. package/es/utils/cell-border.d.ts +73 -0
  137. package/es/utils/cell-border.mjs +203 -0
  138. package/es/utils/index.d.ts +1 -0
  139. package/es/utils/index.mjs +1 -0
  140. package/es/utils/xlsx-parser.d.ts +141 -0
  141. package/es/utils/xlsx-parser.mjs +262 -0
  142. package/package.json +23 -12
  143. package/es/components/form-component/field-label/tag-label.vue_vue_type_style_index_0_scoped_6c507fe8_lang.css +0 -15
@@ -0,0 +1 @@
1
+ import "./xlsx-parser.mjs";
@@ -0,0 +1,141 @@
1
+ import { default as ExcelJs } from 'exceljs';
2
+ import { ICell, IImage, IPaper, IRange } from '../interface/xlsx-parser/index';
3
+ import { CellField, ImportedFieldMeta } from '../interface/xlsx-parser/base';
4
+ export declare const isTypeInGroup: (type: string, group: string[]) => boolean;
5
+ export declare const generateAutoFieldKey: (type: string, fieldGroup: string[], keyList: string[]) => string | undefined;
6
+ type PaperViewportRange = [string, string];
7
+ export declare class XlsxParser {
8
+ static xlsx2json(file: IObject): Promise<{
9
+ sheetId: string;
10
+ orientation: import('../enums/xlsx-parser').Orientation;
11
+ padding: IRange;
12
+ cols: {
13
+ width: number;
14
+ manual?: boolean;
15
+ }[];
16
+ rows: {
17
+ height: number;
18
+ manual?: boolean;
19
+ }[];
20
+ cells: ICell[][];
21
+ mergedCells: IRange[];
22
+ thead?: {
23
+ thName?: string;
24
+ thRange?: IRange;
25
+ };
26
+ dynamicTables?: import('../interface/xlsx-parser/index').ITable[];
27
+ fixedTables?: import('../interface/xlsx-parser/index').IFixedTable[];
28
+ medias?: import('../interface/xlsx-parser/index').IMedia[];
29
+ images?: IImage[];
30
+ paramToField?: import('../interface/xlsx-parser/index').IParamToField[];
31
+ paperHeader?: boolean;
32
+ paperHeaderWidgets?: import("../interface/xlsx-parser/paper-widget").PaperWidget.BasicSchema[];
33
+ paperFooter?: boolean;
34
+ paperFooterWidgets?: import("../interface/xlsx-parser/paper-widget").PaperWidget.BasicSchema[];
35
+ javascript?: string;
36
+ globalOptions?: import('../interface/xlsx-parser/index').IGlobalOption[];
37
+ parameterMapping?: import('../interface/xlsx-parser/index').IParameterMapping[];
38
+ customDataSource?: import('../interface/xlsx-parser/index').ICustomDataSource[];
39
+ checkTableDataSource?: import('../interface/xlsx-parser/index').ICheckTableDataSource[];
40
+ mainModelKey?: string;
41
+ modelMetaMap?: import('../interface/xlsx-parser/base').IModelMetaMap;
42
+ } | undefined>;
43
+ static xlsx2jsonWithFields(file: IObject, keyList: string[]): Promise<{
44
+ paper: {
45
+ sheetId: string;
46
+ orientation: import('../enums/xlsx-parser').Orientation;
47
+ padding: IRange;
48
+ cols: {
49
+ width: number;
50
+ manual?: boolean;
51
+ }[];
52
+ rows: {
53
+ height: number;
54
+ manual?: boolean;
55
+ }[];
56
+ cells: ICell[][];
57
+ mergedCells: IRange[];
58
+ thead?: {
59
+ thName?: string;
60
+ thRange?: IRange;
61
+ };
62
+ dynamicTables?: import('../interface/xlsx-parser/index').ITable[];
63
+ fixedTables?: import('../interface/xlsx-parser/index').IFixedTable[];
64
+ medias?: import('../interface/xlsx-parser/index').IMedia[];
65
+ images?: IImage[];
66
+ paramToField?: import('../interface/xlsx-parser/index').IParamToField[];
67
+ paperHeader?: boolean;
68
+ paperHeaderWidgets?: import("../interface/xlsx-parser/paper-widget").PaperWidget.BasicSchema[];
69
+ paperFooter?: boolean;
70
+ paperFooterWidgets?: import("../interface/xlsx-parser/paper-widget").PaperWidget.BasicSchema[];
71
+ javascript?: string;
72
+ globalOptions?: import('../interface/xlsx-parser/index').IGlobalOption[];
73
+ parameterMapping?: import('../interface/xlsx-parser/index').IParameterMapping[];
74
+ customDataSource?: import('../interface/xlsx-parser/index').ICustomDataSource[];
75
+ checkTableDataSource?: import('../interface/xlsx-parser/index').ICheckTableDataSource[];
76
+ mainModelKey?: string;
77
+ modelMetaMap?: import('../interface/xlsx-parser/base').IModelMetaMap;
78
+ } | null;
79
+ fields: ImportedFieldMeta[] | null;
80
+ paperFields: CellField[];
81
+ }>;
82
+ static sheetToPaper(paperSheet: ExcelJs.Worksheet & {
83
+ _rows?: IObject[];
84
+ _merges?: IObject;
85
+ _media?: IObject[];
86
+ }, xlsxData: IObject): {
87
+ sheetId: string;
88
+ orientation: import('../enums/xlsx-parser').Orientation;
89
+ padding: IRange;
90
+ cols: {
91
+ width: number;
92
+ manual?: boolean;
93
+ }[];
94
+ rows: {
95
+ height: number;
96
+ manual?: boolean;
97
+ }[];
98
+ cells: ICell[][];
99
+ mergedCells: IRange[];
100
+ thead?: {
101
+ thName?: string;
102
+ thRange?: IRange;
103
+ };
104
+ dynamicTables?: import('../interface/xlsx-parser/index').ITable[];
105
+ fixedTables?: import('../interface/xlsx-parser/index').IFixedTable[];
106
+ medias?: import('../interface/xlsx-parser/index').IMedia[];
107
+ images?: IImage[];
108
+ paramToField?: import('../interface/xlsx-parser/index').IParamToField[];
109
+ paperHeader?: boolean;
110
+ paperHeaderWidgets?: import("../interface/xlsx-parser/paper-widget").PaperWidget.BasicSchema[];
111
+ paperFooter?: boolean;
112
+ paperFooterWidgets?: import("../interface/xlsx-parser/paper-widget").PaperWidget.BasicSchema[];
113
+ javascript?: string;
114
+ globalOptions?: import('../interface/xlsx-parser/index').IGlobalOption[];
115
+ parameterMapping?: import('../interface/xlsx-parser/index').IParameterMapping[];
116
+ customDataSource?: import('../interface/xlsx-parser/index').ICustomDataSource[];
117
+ checkTableDataSource?: import('../interface/xlsx-parser/index').ICheckTableDataSource[];
118
+ mainModelKey?: string;
119
+ modelMetaMap?: import('../interface/xlsx-parser/base').IModelMetaMap;
120
+ };
121
+ /**
122
+ * 根据 sheet 内容解析字段信息
123
+ * @param sheet
124
+ * @returns
125
+ */
126
+ static sheetToFields(sheet: ExcelJs.Worksheet & {
127
+ _rows?: IObject[];
128
+ }, keyList: string[]): ImportedFieldMeta[];
129
+ /**
130
+ * 字段信息转换为元数据
131
+ * @param field
132
+ */
133
+ static _field2Meta(field: IObject, keyList: string[]): void;
134
+ /**
135
+ * @param paper 导入的纸张数据
136
+ * @param range 最大显示范围
137
+ * @param mode 缩放模式 x: 横向 y: 纵向
138
+ */
139
+ static contentFitToPaper(paper: IPaper, range: PaperViewportRange, mode?: string): void;
140
+ }
141
+ export {};
@@ -0,0 +1,262 @@
1
+ import { FIELD_TYPE_BUSINESS } from "../enums/xlsx-parser.mjs";
2
+ import { DefaultPaper, FIELD_PROP_LABEL_MAP, FIELD_TYPE_LABEL_MAP } from "../constants/xlsx-parser.mjs";
3
+ import { CellBorder } from "./cell-border.mjs";
4
+ import { FIELD_TYPE, FIELD_TYPE_TRACE, t } from "@gct-paas/core";
5
+ import { cloneDeep } from "lodash-es";
6
+ import ExcelJs from "exceljs";
7
+ import toPx from "unit-to-px";
8
+ //#region src/utils/xlsx-parser.ts
9
+ var isTypeInGroup = (type, group) => group.includes(type);
10
+ var generateAutoFieldKey = (type, fieldGroup, keyList) => {
11
+ if (!isTypeInGroup(type, fieldGroup)) return;
12
+ const nums = keyList.filter((i) => i.startsWith(type)).map((i) => parseInt(i.match(/\d+/)?.[0] || "0", 10));
13
+ return `${type}_${(nums.length ? Math.max(...nums) : 0) + 1}_`;
14
+ };
15
+ var FieldPropLabels = Object.entries(FIELD_PROP_LABEL_MAP);
16
+ var FieldTypeLabels = Object.entries(FIELD_TYPE_LABEL_MAP);
17
+ var TRACE_FIELDS = Object.values(FIELD_TYPE_TRACE);
18
+ var BUSINESS_FIELDS = Object.values(FIELD_TYPE_BUSINESS);
19
+ var XlsxParser = class XlsxParser {
20
+ static async xlsx2json(file) {
21
+ const workbook = new ExcelJs.Workbook();
22
+ const xlsxData = await workbook.xlsx.load(file);
23
+ const paperSheet = workbook.getWorksheet(t("sys.onlineForm.formStyle")) || workbook.getWorksheet();
24
+ if (!paperSheet) return;
25
+ return XlsxParser.sheetToPaper(paperSheet, xlsxData);
26
+ }
27
+ static async xlsx2jsonWithFields(file, keyList) {
28
+ const workbook = new ExcelJs.Workbook();
29
+ const xlsxData = await workbook.xlsx.load(file);
30
+ const paperSheet = workbook.getWorksheet(t("sys.onlineForm.formStyle")) || workbook.getWorksheet();
31
+ const fieldSheet = workbook.getWorksheet(t("sys.onlineForm.formFields"));
32
+ const paper = paperSheet ? XlsxParser.sheetToPaper(paperSheet, xlsxData) : null;
33
+ const fields = fieldSheet ? XlsxParser.sheetToFields(fieldSheet, keyList) : null;
34
+ const paperFields = [];
35
+ paper?.cells?.forEach((row, rowIndex) => {
36
+ row.forEach((cell, colIndex) => {
37
+ console.log("cell", cell);
38
+ const matches = typeof cell?.value === "string" ? cell?.value?.match(/^\$\{(.+?)\}$/) : null;
39
+ if (!matches) return;
40
+ const matchKey = matches[1];
41
+ const fieldMeta = fields?.find((item) => item.tmpOldKey === matchKey || item.key === matchKey || item.name === matchKey);
42
+ if (!fieldMeta) return;
43
+ paperFields.push({
44
+ x: colIndex + 1,
45
+ y: rowIndex + 1,
46
+ fieldKey: fieldMeta.key,
47
+ fieldName: fieldMeta.name,
48
+ fieldType: fieldMeta.type
49
+ });
50
+ });
51
+ });
52
+ return {
53
+ paper,
54
+ fields,
55
+ paperFields
56
+ };
57
+ }
58
+ static sheetToPaper(paperSheet, xlsxData) {
59
+ const SheetRowCount = Math.min(paperSheet.dimensions.bottom, 300);
60
+ const SheetColCount = Math.min(paperSheet.dimensions.right, 75);
61
+ const paper = {};
62
+ const { defaultRowHeight, defaultColWidth } = paperSheet.properties;
63
+ const defaultRowHeightPx = parseInt(toPx(`${defaultRowHeight}pt`));
64
+ const rows = [];
65
+ Array(SheetRowCount).fill("").forEach((_r, i) => {
66
+ const row = paperSheet._rows?.[i];
67
+ rows.push({ height: parseInt(toPx(`${row?.height ?? defaultRowHeight}pt`)) });
68
+ });
69
+ paper.rows = rows;
70
+ const cols = [];
71
+ Array(SheetColCount).fill("").forEach((_c, i) => {
72
+ const { width } = paperSheet.columns[i];
73
+ const _w = width ?? defaultColWidth;
74
+ cols.push({ width: _w === void 0 ? 80 : Math.floor(_w * toPx("ch")) });
75
+ });
76
+ paper.cols = cols;
77
+ const cells = Array(SheetRowCount).fill("").map(() => Array(SheetColCount).fill("").map(() => ({})));
78
+ Array(SheetRowCount).fill("").forEach((_, rowIndex) => {
79
+ if (!paperSheet._rows?.[rowIndex]) return;
80
+ Array(SheetColCount).fill("").forEach((_, colIndex) => {
81
+ const cell = paperSheet._rows?.[rowIndex]._cells?.[colIndex];
82
+ if (!cell) return;
83
+ const { alignment, fill, font } = cell.style;
84
+ const cellName = cell._address;
85
+ const cellStyle = {
86
+ "text-align": alignment?.horizontal ?? "left",
87
+ "vertical-align": alignment?.vertical ?? "middle",
88
+ "background-color": fill?.fgColor?.argb?.substring(2).padStart(7, "#"),
89
+ color: font?.color?.argb?.substring(2).padStart(7, "#"),
90
+ "font-size": `${font?.size < 12 ? 12 : font?.size}px`,
91
+ "white-space": alignment?.wrapText ? "pre-line" : void 0,
92
+ "line-height": "1em"
93
+ };
94
+ if (alignment?.wrapText) cellStyle["line-height"] = "1.5em";
95
+ cells[rowIndex][colIndex].style = cellStyle;
96
+ if (cellName !== cell.master.address) return;
97
+ let cellValue = "";
98
+ if (typeof cell.value !== "object") cellValue = cell.value;
99
+ else if (typeof cell.text !== "object") cellValue = cell.text;
100
+ cells[rowIndex][colIndex].value = cellValue;
101
+ });
102
+ });
103
+ paper.cells = cells;
104
+ const mergedCells = [];
105
+ Object.entries(paperSheet._merges ?? {}).forEach((m) => {
106
+ const { top: t, bottom: b, left: l, right: r } = m[1];
107
+ if (t > SheetRowCount || l > SheetColCount) return;
108
+ mergedCells.push({
109
+ t,
110
+ l,
111
+ b: Math.min(SheetRowCount, b),
112
+ r: Math.min(SheetColCount, r)
113
+ });
114
+ });
115
+ paper.mergedCells = mergedCells;
116
+ /**
117
+ * 抽离边框设置逻辑 与设计器中保持一致
118
+ */
119
+ Array(SheetRowCount).fill("").forEach((_, rowIndex) => {
120
+ if (!paperSheet._rows?.[rowIndex]) return;
121
+ Array(SheetColCount).fill("").forEach((_, colIndex) => {
122
+ const cell = paperSheet._rows?.[rowIndex]._cells?.[colIndex];
123
+ if (!cell) return;
124
+ const { border } = cell.style;
125
+ if (border?.top) CellBorder.setTop(colIndex + 1, rowIndex + 1, paper);
126
+ if (border?.bottom) CellBorder.setBottom(colIndex + 1, rowIndex + 1, paper);
127
+ if (border?.left) CellBorder.setLeft(colIndex + 1, rowIndex + 1, paper);
128
+ if (border?.right) CellBorder.setRight(colIndex + 1, rowIndex + 1, paper);
129
+ });
130
+ });
131
+ const medias = (xlsxData.media ?? []).map((m) => {
132
+ return {
133
+ id: Math.random().toString(36).substring(2, 10),
134
+ src: `data:image/${m.extension};base64,` + m.buffer.toString("base64")
135
+ };
136
+ });
137
+ const images = [];
138
+ paperSheet._media?.forEach((m) => {
139
+ const { imageId, range } = m;
140
+ const imageLayout = {
141
+ height: parseInt(toPx(`${(range.br.nativeRowOff - range.tl.nativeRowOff) / 914400}in`)) + (range.br.nativeRow - range.tl.nativeRow > 0 ? Array(range.br.nativeRow - range.tl.nativeRow).fill("").reduce((total, _r, i) => {
142
+ total = total + (paper.rows?.[i + range.tl.nativeRow]?.height ?? defaultRowHeightPx);
143
+ return total;
144
+ }, 0) : 0),
145
+ width: parseInt(toPx(`${(range.br.nativeColOff - range.tl.nativeColOff) / 914400}in`)) + (range.br.nativeCol - range.tl.nativeCol > 0 ? Array(range.br.nativeCol - range.tl.nativeCol).fill("").reduce((total, _c, i) => {
146
+ total = total + paper.cols?.[i + range.tl.nativeCol].width;
147
+ return total;
148
+ }, 0) : 0),
149
+ top: parseInt(toPx(`${range.tl.nativeRowOff / 914400}in`)),
150
+ left: parseInt(toPx(`${range.tl.nativeColOff / 914400}in`))
151
+ };
152
+ const deltaX = Array(range.tl.nativeCol).fill("").reduce((result, _i, index) => {
153
+ result += paper.cols?.[index]?.width ?? 0;
154
+ return result;
155
+ }, 0);
156
+ const deltaY = Array(range.tl.nativeRow).fill("").reduce((result, _i, index) => {
157
+ result += paper.rows?.[index]?.height ?? defaultRowHeightPx;
158
+ return result;
159
+ }, 0);
160
+ const img = {
161
+ id: Math.random().toString(36).substring(2, 10),
162
+ mediaId: medias[imageId].id,
163
+ layout: {
164
+ height: imageLayout.height,
165
+ width: imageLayout.width,
166
+ top: imageLayout.top + deltaY,
167
+ left: imageLayout.left + deltaX
168
+ }
169
+ };
170
+ images.push(img);
171
+ });
172
+ paper.medias = medias;
173
+ paper.images = images;
174
+ return {
175
+ ...cloneDeep(DefaultPaper),
176
+ ...paper
177
+ };
178
+ }
179
+ /**
180
+ * 根据 sheet 内容解析字段信息
181
+ * @param sheet
182
+ * @returns
183
+ */
184
+ static sheetToFields(sheet, keyList) {
185
+ const SheetRowCount = Math.min(sheet.rowCount, 300);
186
+ const SheetColCount = Math.min(sheet.columnCount, 10);
187
+ const colFieldPropMap = /* @__PURE__ */ new Map();
188
+ Array(SheetColCount).fill("").forEach((_, colIndex) => {
189
+ const cell = sheet._rows?.[0]._cells?.[colIndex];
190
+ const fieldProp = FieldPropLabels.find((f) => f[1] === (cell?.text ?? "").replaceAll("*", "").trim());
191
+ if (fieldProp) colFieldPropMap.set(colIndex, fieldProp[0]);
192
+ });
193
+ const fields = [];
194
+ Array(SheetRowCount).fill("").forEach((_, rowIndex) => {
195
+ if (rowIndex === 0) return;
196
+ if (!sheet._rows?.[rowIndex]) return;
197
+ const field = {};
198
+ Array(SheetColCount).fill("").forEach((_, colIndex) => {
199
+ const cell = sheet._rows?.[rowIndex]._cells?.[colIndex];
200
+ if (colFieldPropMap.has(colIndex)) field[colFieldPropMap.get(colIndex)] = cell?.text ?? "";
201
+ });
202
+ fields.push(field);
203
+ });
204
+ const cloneKeyList = [...keyList];
205
+ fields.forEach((f) => {
206
+ XlsxParser._field2Meta(f, cloneKeyList);
207
+ });
208
+ return fields;
209
+ }
210
+ /**
211
+ * 字段信息转换为元数据
212
+ * @param field
213
+ */
214
+ static _field2Meta(field, keyList) {
215
+ const { type, required } = field;
216
+ field.required = required === t("sys.true") ? 1 : 0;
217
+ const fieldType = FieldTypeLabels.find((f) => f[1] === type);
218
+ if (fieldType) field.type = fieldType[0];
219
+ else field.type = FIELD_TYPE.TEXT;
220
+ if (isTypeInGroup(field.type, BUSINESS_FIELDS)) {
221
+ field.tmpOldKey = field.key;
222
+ field.key = generateAutoFieldKey(field.type, BUSINESS_FIELDS, []);
223
+ } else if (isTypeInGroup(field.type, TRACE_FIELDS)) {
224
+ field.tmpOldKey = field.key;
225
+ const key = generateAutoFieldKey(field.type, TRACE_FIELDS, keyList);
226
+ field.key = key;
227
+ keyList.push(key);
228
+ }
229
+ field.uniqueConstraint = { type: field.uniqueConstraint === t("sys.true") ? "GLOBAL" : "NONE" };
230
+ field.disabled = field.disabled === t("sys.true") ? 1 : 0;
231
+ }
232
+ /**
233
+ * @param paper 导入的纸张数据
234
+ * @param range 最大显示范围
235
+ * @param mode 缩放模式 x: 横向 y: 纵向
236
+ */
237
+ static contentFitToPaper(paper, range, mode = "x") {
238
+ const contentWidth = paper?.cols.reduce((total, item) => {
239
+ total += item.width;
240
+ return total;
241
+ }, 0);
242
+ const contentHeight = paper?.rows.reduce((total, item) => {
243
+ total += item.height;
244
+ return total;
245
+ }, 0);
246
+ const viewportWidth = parseInt(toPx(range[0]));
247
+ const viewportHeight = parseInt(toPx(range[1]));
248
+ const xRatio = contentWidth / viewportWidth;
249
+ const yRatio = contentHeight / viewportHeight;
250
+ const maxRatio = mode === "x" ? xRatio : Math.max(xRatio, yRatio);
251
+ if (maxRatio > 1) {
252
+ paper.cols.forEach((item) => {
253
+ item.width = item.width / maxRatio;
254
+ });
255
+ paper.rows.forEach((item) => {
256
+ item.height = item.height / maxRatio;
257
+ });
258
+ }
259
+ }
260
+ };
261
+ //#endregion
262
+ export { XlsxParser };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gct-paas/render-web",
3
- "version": "0.1.6-dev.8",
3
+ "version": "6.0.0-dev.1",
4
4
  "type": "module",
5
5
  "description": "paas 平台网页端底包",
6
6
  "loader": "dist/loader.esm.min.js",
@@ -31,23 +31,34 @@
31
31
  "license": "MIT",
32
32
  "author": "gct",
33
33
  "dependencies": {
34
- "ant-design-vue": "~3.2.20",
34
+ "@gct-paas/api": "^6.0.0-dev.2",
35
+ "@vueuse/core": "^14.1.0",
36
+ "@wangeditor/editor-for-vue": "^5.1.12",
37
+ "ant-design-vue": "npm:@gct-paas/ant-design-vue@3.2.21",
35
38
  "colord": "^2.9.3",
36
39
  "exceljs": "^4.4.0",
40
+ "lodash-es": "^4.17.23",
41
+ "unit-to-px": "^1.0.5",
37
42
  "vue": "^3.5.30",
38
- "@gct-paas/core": "0.1.6-dev.8",
39
- "@gct-paas/render": "0.1.6-dev.8",
40
- "@gct-paas/core-web": "0.1.6-dev.8",
41
- "@gct-paas/schema": "0.1.6-dev.8",
42
- "@gct-paas/scss": "0.1.6-dev.8"
43
+ "vxe-table": "npm:@gct-paas/vxe-table@4.6.19",
44
+ "@gct-paas/core": "6.0.0-dev.1",
45
+ "@gct-paas/render": "6.0.0-dev.1",
46
+ "@gct-paas/core-web": "6.0.0-dev.1",
47
+ "@gct-paas/scss": "6.0.0-dev.1",
48
+ "@gct-paas/schema": "6.0.0-dev.1",
49
+ "@gct-paas/core-components": "6.0.0-dev.1"
43
50
  },
44
51
  "peerDependencies": {
52
+ "@gct-paas/api": "^6.0.0-dev.2",
45
53
  "vue": ">=3",
46
- "@gct-paas/core": "0.1.6-dev.8",
47
- "@gct-paas/core-web": "0.1.6-dev.8",
48
- "@gct-paas/render": "0.1.6-dev.8",
49
- "@gct-paas/schema": "0.1.6-dev.8",
50
- "@gct-paas/scss": "0.1.6-dev.8"
54
+ "@gct-paas/core": "6.0.0-dev.1",
55
+ "@gct-paas/core-web": "6.0.0-dev.1",
56
+ "@gct-paas/schema": "6.0.0-dev.1",
57
+ "@gct-paas/render": "6.0.0-dev.1",
58
+ "@gct-paas/scss": "6.0.0-dev.1"
59
+ },
60
+ "devDependencies": {
61
+ "@types/lodash-es": "^4.17.12"
51
62
  },
52
63
  "scripts": {
53
64
  "dev": "cross-env NODE_ENV=development vite build --watch --config vite.dev.config.ts",
@@ -1,15 +0,0 @@
1
- .tag-label-disabled[data-v-6c507fe8] {
2
- opacity: 0.5;
3
- }
4
- .label-ellipsis[data-v-6c507fe8] {
5
- overflow: hidden;
6
- text-overflow: ellipsis;
7
- white-space: nowrap;
8
- }
9
- .label-wrap[data-v-6c507fe8] {
10
- word-break: break-all;
11
- white-space: wrap;
12
- }
13
- .select-text[data-v-6c507fe8] {
14
- min-width: 16px;
15
- }