@gct-paas/render-web 0.1.6-dev.4 → 0.1.6-dev.40
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/dist/index.min.css +1 -1
- package/dist/loader.esm.min.js +2 -1
- package/es/Event/Events.d.ts +1 -0
- package/es/Event/Events.mjs +7 -3
- package/es/_virtual/_rolldown/runtime.mjs +13 -0
- package/es/components/card-view-render/card-view-render.css +71 -0
- package/es/components/card-view-render/card-view-render.d.ts +38 -0
- package/es/components/card-view-render/card-view-render.mjs +84 -0
- package/es/components/collapse-detail/components/collapse-list.vue.d.ts +24 -0
- package/es/components/collapse-detail/components/collapse-list.vue.mjs +5 -0
- package/es/components/collapse-detail/components/collapse-list.vue_vue_type_script_setup_true_lang.mjs +103 -0
- package/es/components/collapse-detail/components/enum-tag-label.vue.d.ts +6 -0
- package/es/components/collapse-detail/components/enum-tag-label.vue.mjs +5 -0
- package/es/components/collapse-detail/components/enum-tag-label.vue_vue_type_script_setup_true_lang.mjs +61 -0
- package/es/components/collapse-detail/components/instance-status-label.vue.d.ts +34 -0
- package/es/components/collapse-detail/components/instance-status-label.vue.mjs +7 -0
- package/es/components/collapse-detail/components/instance-status-label.vue_vue_type_script_setup_true_lang.mjs +76 -0
- package/es/components/collapse-detail/components/instance-status-label.vue_vue_type_style_index_0_scoped_610b0bb3_lang.css +77 -0
- package/es/components/collapse-detail/components/label-tag.vue.d.ts +6 -0
- package/es/components/collapse-detail/components/label-tag.vue.mjs +7 -0
- package/es/components/collapse-detail/components/label-tag.vue_vue_type_script_setup_true_lang.mjs +34 -0
- package/es/components/collapse-detail/components/label-tag.vue_vue_type_style_index_0_scoped_b25afce5_lang.css +39 -0
- package/es/components/collapse-detail/constants/instance-theme-config.d.ts +64 -0
- package/es/components/collapse-detail/constants/instance-theme-config.mjs +100 -0
- package/es/components/collapse-detail/constants/status.d.ts +36 -0
- package/es/components/collapse-detail/constants/status.mjs +34 -0
- package/es/components/collapse-detail/index.d.ts +3 -0
- package/es/components/collapse-detail/index.mjs +1 -0
- package/es/components/collapse-detail/index.vue.d.ts +37 -0
- package/es/components/collapse-detail/index.vue.mjs +7 -0
- package/es/components/collapse-detail/index.vue_vue_type_script_setup_true_name_collapse-detail_lang.mjs +90 -0
- package/es/components/collapse-detail/index.vue_vue_type_style_index_0_scoped_b4b9903c_lang.css +83 -0
- package/es/components/collapse-detail/typing.d.ts +44 -0
- package/es/components/collapse-detail/typing.mjs +17 -0
- package/es/components/field-search-cascader/field-cascader.vue.d.ts +17 -0
- package/es/components/field-search-cascader/field-cascader.vue.mjs +8 -0
- package/es/components/field-search-cascader/field-cascader.vue_vue_type_script_setup_true_lang.mjs +297 -0
- package/es/components/field-search-cascader/field-cascader.vue_vue_type_style_index_0_scoped_cb5e4d67_lang.css +52 -0
- package/es/components/field-search-cascader/field-cascader.vue_vue_type_style_index_1_lang.css +3 -0
- package/es/components/field-search-cascader/index.d.ts +2 -0
- package/es/components/field-search-cascader/index.mjs +1 -0
- package/es/components/form-component/FieldSelect.css +22 -0
- package/es/components/form-component/FieldSelect.d.ts +9 -0
- package/es/components/form-component/FieldSelect.mjs +19 -8
- package/es/components/form-component/field-label/ref-card-label-render.vue_vue_type_script_setup_true_lang.mjs +2 -1
- package/es/components/form-component/field-label/tag-label.vue.d.ts +1 -0
- package/es/components/form-component/field-label/tag-label.vue.mjs +2 -2
- package/es/components/form-component/field-label/tag-label.vue_vue_type_script_setup_true_name_TagLabel_lang.mjs +15 -13
- package/es/components/form-component/field-label/tag-label.vue_vue_type_style_index_0_scoped_5e1146da_lang.css +18 -0
- package/es/components/form-component/field-label/tag-span.vue.mjs +1 -1
- package/es/components/form-component/field-readonly.vue_vue_type_script_setup_true_lang.mjs +26 -44
- package/es/components/index.d.ts +7 -0
- package/es/components/index.mjs +9 -0
- package/es/components/layouts/basic-page/basic-page.vue.d.ts +30 -0
- package/es/components/layouts/basic-page/basic-page.vue.mjs +7 -0
- package/es/components/layouts/basic-page/basic-page.vue_vue_type_script_setup_true_name_basic-page_lang.mjs +30 -0
- package/es/components/layouts/basic-page/basic-page.vue_vue_type_style_index_0_scoped_23453a1b_lang.css +20 -0
- package/es/components/layouts/basic-page-render/basic-page-render.vue.d.ts +30 -0
- package/es/components/layouts/basic-page-render/basic-page-render.vue.mjs +7 -0
- package/es/components/layouts/basic-page-render/basic-page-render.vue_vue_type_script_setup_true_name_BasicPageRender_lang.mjs +30 -0
- package/es/components/layouts/basic-page-render/basic-page-render.vue_vue_type_style_index_0_scoped_3c6aba55_lang.css +20 -0
- package/es/components/multi-field/multi-field-display.vue.mjs +2 -2
- package/es/components/multi-field/multi-field-display.vue_vue_type_script_setup_true_lang.mjs +1 -1
- 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
- package/es/components/rich-editor/index.d.ts +2 -0
- package/es/components/rich-editor/index.mjs +1 -0
- package/es/components/rich-editor/rich-editor.vue.d.ts +22 -0
- package/es/components/rich-editor/rich-editor.vue.mjs +5 -0
- package/es/components/rich-editor/rich-editor.vue_vue_type_script_setup_true_lang.mjs +150 -0
- package/es/components/rich-editor/style.css +747 -0
- package/es/constants/xlsx-parser.d.ts +15 -0
- package/es/constants/xlsx-parser.mjs +58 -0
- package/es/enums/xlsx-parser.d.ts +293 -0
- package/es/enums/xlsx-parser.mjs +36 -0
- package/es/hooks/index.d.ts +1 -0
- package/es/hooks/index.mjs +1 -0
- package/es/hooks/refCardList.mjs +6 -6
- package/es/hooks/useQuickSearch.d.ts +8 -0
- package/es/hooks/useQuickSearch.mjs +96 -0
- package/es/index.d.ts +3 -0
- package/es/index.mjs +13 -1
- package/es/interface/xlsx-parser/base.d.ts +151 -0
- package/es/interface/xlsx-parser/index.d.ts +246 -0
- package/es/locale/auto-register.d.ts +2 -0
- package/es/locale/auto-register.mjs +31 -0
- package/es/locale/sys/appDesigner.d.ts +11 -0
- package/es/locale/sys/appDesigner.mjs +11 -0
- package/es/locale/sys/bi.d.ts +4 -0
- package/es/locale/sys/bi.mjs +6 -0
- package/es/locale/sys/bpmn.d.ts +10 -0
- package/es/locale/sys/bpmn.mjs +12 -0
- package/es/locale/sys/component.d.ts +15 -0
- package/es/locale/sys/component.mjs +15 -0
- package/es/locale/sys/developer.d.ts +6 -0
- package/es/locale/sys/developer.mjs +6 -0
- package/es/locale/sys/edhr.d.ts +19 -0
- package/es/locale/sys/edhr.mjs +15 -0
- package/es/locale/sys/message.d.ts +4 -0
- package/es/locale/sys/message.mjs +6 -0
- package/es/locale/sys/model.d.ts +34 -0
- package/es/locale/sys/model.mjs +38 -0
- package/es/locale/sys/onlineForm.d.ts +8 -0
- package/es/locale/sys/onlineForm.mjs +12 -0
- package/es/locale/sys/pageDesigner.d.ts +7 -0
- package/es/locale/sys/pageDesigner.mjs +9 -0
- package/es/locale/sys.d.ts +10 -0
- package/es/locale/sys.mjs +14 -0
- package/es/modules/app-mqtt/app-mqtt.interface.d.ts +26 -0
- package/es/modules/app-mqtt/app-mqtt.service.d.ts +73 -0
- package/es/modules/app-mqtt/app-mqtt.service.mjs +134 -0
- package/es/modules/app-mqtt/index.d.ts +2 -0
- package/es/modules/app-mqtt/index.mjs +1 -0
- package/es/plugins/render-card-field/render-card-field.css +171 -0
- package/es/plugins/render-card-field/render-card-field.d.ts +48 -0
- package/es/plugins/render-card-field/render-card-field.mjs +157 -0
- package/es/plugins/render-card-field/render-card-field.provider.d.ts +7 -0
- package/es/plugins/render-card-field/render-card-field.provider.mjs +10 -0
- package/es/plugins/render-card-view-page/render-card-view-page.css +72 -0
- package/es/plugins/render-card-view-page/render-card-view-page.d.ts +33 -0
- package/es/plugins/render-card-view-page/render-card-view-page.mjs +61 -0
- package/es/plugins/render-card-view-page/render-card-view-page.provider.d.ts +7 -0
- package/es/plugins/render-card-view-page/render-card-view-page.provider.mjs +10 -0
- package/es/plugins/render-design-editor/index.d.ts +5 -0
- package/es/plugins/render-design-editor/upload-file/index.d.ts +4 -0
- package/es/plugins/render-design-editor/upload-file/upload-file.d.ts +51 -0
- package/es/plugins/render-design-editor/upload-image/index.d.ts +4 -0
- package/es/plugins/render-design-editor/upload-image/upload-image.d.ts +51 -0
- package/es/plugins/render-design-editor/user-signature/index.d.ts +4 -0
- package/es/plugins/render-design-editor/user-signature/user-signature.d.ts +51 -0
- package/es/setup-app.d.ts +2 -0
- package/es/setup-app.mjs +22 -0
- package/es/types/shims-modules.d.ts +11 -0
- package/es/utils/cell-border.d.ts +73 -0
- package/es/utils/cell-border.mjs +203 -0
- package/es/utils/index.d.ts +1 -0
- package/es/utils/index.mjs +1 -0
- package/es/utils/xlsx-parser.d.ts +141 -0
- package/es/utils/xlsx-parser.mjs +262 -0
- package/package.json +22 -12
- 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.
|
|
3
|
+
"version": "0.1.6-dev.40",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "paas 平台网页端底包",
|
|
6
6
|
"loader": "dist/loader.esm.min.js",
|
|
@@ -31,23 +31,33 @@
|
|
|
31
31
|
"license": "MIT",
|
|
32
32
|
"author": "gct",
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"
|
|
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.
|
|
39
|
-
"@gct-paas/
|
|
40
|
-
"@gct-paas/
|
|
41
|
-
"@gct-paas/
|
|
42
|
-
"@gct-paas/
|
|
43
|
+
"@gct-paas/core": "0.1.6-dev.40",
|
|
44
|
+
"@gct-paas/render": "0.1.6-dev.40",
|
|
45
|
+
"@gct-paas/core-web": "0.1.6-dev.40",
|
|
46
|
+
"@gct-paas/schema": "0.1.6-dev.40",
|
|
47
|
+
"@gct-paas/scss": "0.1.6-dev.40",
|
|
48
|
+
"@gct-paas/core-components": "0.1.6-dev.40"
|
|
43
49
|
},
|
|
44
50
|
"peerDependencies": {
|
|
51
|
+
"@gct-paas/api": "^6.0.0-dev.2",
|
|
45
52
|
"vue": ">=3",
|
|
46
|
-
"@gct-paas/core": "0.1.6-dev.
|
|
47
|
-
"@gct-paas/core-web": "0.1.6-dev.
|
|
48
|
-
"@gct-paas/render": "0.1.6-dev.
|
|
49
|
-
"@gct-paas/
|
|
50
|
-
"@gct-paas/
|
|
53
|
+
"@gct-paas/core": "0.1.6-dev.40",
|
|
54
|
+
"@gct-paas/core-web": "0.1.6-dev.40",
|
|
55
|
+
"@gct-paas/render": "0.1.6-dev.40",
|
|
56
|
+
"@gct-paas/schema": "0.1.6-dev.40",
|
|
57
|
+
"@gct-paas/scss": "0.1.6-dev.40"
|
|
58
|
+
},
|
|
59
|
+
"devDependencies": {
|
|
60
|
+
"@types/lodash-es": "^4.17.12"
|
|
51
61
|
},
|
|
52
62
|
"scripts": {
|
|
53
63
|
"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
|
-
}
|