cloud-web-corejs 1.0.54-dev.530 → 1.0.54-dev.532

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 (19) hide show
  1. package/package.json +1 -1
  2. package/src/components/excelExport/exportFieldDialog.vue +154 -81
  3. package/src/components/excelExport/mixins.js +963 -1
  4. package/src/components/table/index.js +1044 -1
  5. package/src/components/table/util/index.js +8 -1
  6. package/src/components/xform/form-designer/form-widget/field-widget/print-button-widget.vue +10 -0
  7. package/src/components/xform/form-designer/form-widget/field-widget/print-detail-button-widget.vue +4 -0
  8. package/src/components/xform/form-designer/form-widget/field-widget/select-export-item-button-widget.vue +92 -0
  9. package/src/components/xform/form-designer/form-widget/field-widget/table-export-button-widget.vue +37 -37
  10. package/src/components/xform/form-designer/setting-panel/property-editor/container-data-table/data-table-editor.vue +54 -47
  11. package/src/components/xform/form-designer/setting-panel/property-editor/container-data-table/exportItemColumns-dialog.vue +432 -0
  12. package/src/components/xform/form-designer/setting-panel/property-editor/field-table-export-button/select-export-item-button-editor.vue +71 -0
  13. package/src/components/xform/form-designer/setting-panel/propertyRegister.js +1 -0
  14. package/src/components/xform/form-designer/widget-panel/widgetsConfig.js +37 -34
  15. package/src/components/xform/form-render/container-item/data-table-mixin.js +3025 -1
  16. package/src/components/xform/lang/zh-CN.js +1 -0
  17. package/src/components/xform/utils/formula-util copy.js +0 -4
  18. package/src/utils/vab.js +1 -1218
  19. package/src/components/xform/form-designer/form-widget/field-widget/tableexportbuttonwidget.vue +0 -99
@@ -0,0 +1,432 @@
1
+ <template>
2
+ <el-dialog
3
+ custom-class="dialog-style list-dialog"
4
+ title="明细导出列维护"
5
+ :visible.sync="showDialog"
6
+ :modal="false"
7
+ :show-close="!0"
8
+ :close-on-click-modal="!1"
9
+ :close-on-press-escape="!1"
10
+ :destroy-on-close="!0"
11
+ top="5vh"
12
+ width="1220px"
13
+ v-dialog-drag
14
+ @close="closeHandle"
15
+ >
16
+ <div class="cont">
17
+ <el-table
18
+ ref="singleTable"
19
+ width="100%"
20
+ row-key="id"
21
+ :data="tableData"
22
+ height="500"
23
+ border=""
24
+ stripe=""
25
+ v-loading="pictLoading"
26
+ element-loading-background="rgba(0, 0, 0, 0)"
27
+ element-loading-text="数据正在加载中"
28
+ element-loading-spinner="el-icon-loading"
29
+ >
30
+ <el-table-column label="" width="80" fixed="left">
31
+ <template #default="scope">
32
+ <span>{{ scope.$index + 1 }}</span>
33
+ </template>
34
+ </el-table-column>
35
+ <el-table-column label="" width="35" fixed="left"
36
+ ><i class="el-icon-s-operation drag-option"></i>
37
+ </el-table-column>
38
+ <el-table-column
39
+ :label="i18nt('designer.setting.columnLabel')"
40
+ width="150"
41
+ prop="title"
42
+ fixed="left"
43
+ >
44
+ <template #default="scope">
45
+ <el-input
46
+ v-model="scope.row.title"
47
+ clearable=""
48
+ :disabled="!!scope.row.formatS && userFields.includes(scope.row.formatS)"
49
+ ></el-input>
50
+ </template>
51
+ </el-table-column>
52
+ <el-table-column
53
+ :label="i18nt('designer.setting.columnName')"
54
+ width="150"
55
+ prop="field"
56
+ >
57
+ <template #default="scope">
58
+ <el-input
59
+ v-model="scope.row.field"
60
+ clearable=""
61
+ :disabled="!!scope.row.formatS && userFields.includes(scope.row.formatS)"
62
+ ></el-input>
63
+ </template>
64
+ </el-table-column>
65
+ <el-table-column label="导出类型" width="150" prop="exportType">
66
+ <template #default="scope">
67
+ <el-select v-model="scope.row.exportType" clearable>
68
+ <el-option value="Image2" label="图片"></el-option>
69
+ <el-option value="Number" label="数值"></el-option>
70
+ </el-select>
71
+ </template>
72
+ </el-table-column>
73
+ <el-table-column
74
+ :label="i18nt('designer.setting.formatOfColumn')"
75
+ width="200"
76
+ prop="formatS"
77
+ >
78
+ <template #default="scope">
79
+ <el-select
80
+ v-model="scope.row.formatS"
81
+ @change="changeFormatS(scope.row)"
82
+ clearable
83
+ >
84
+ <el-option-group v-for="t in op" :key="t.label" :label="t.label">
85
+ <el-option
86
+ v-for="e in t.options"
87
+ :key="e.value"
88
+ :value="e.value"
89
+ :label="e.label"
90
+ ></el-option>
91
+ </el-option-group>
92
+ </el-select>
93
+ </template>
94
+ </el-table-column>
95
+
96
+ <el-table-column
97
+ :label="i18nt('designer.setting.renderFunction')"
98
+ width="100"
99
+ align="center"
100
+ >
101
+ <template #default="scope">
102
+ <el-button
103
+ :disabled="'render' !== scope.row.formatS"
104
+ size="mini"
105
+ plain=""
106
+ round=""
107
+ icon="el-icon-edit"
108
+ @click="showRenderDialog(scope.row)"
109
+ >{{ scope.row.render ? "已维护" : "" }}</el-button
110
+ >
111
+ </template>
112
+ </el-table-column>
113
+ <el-table-column label="操作" width="150">
114
+ <template slot="header">
115
+ <el-tooltip
116
+ :hide-after="500"
117
+ class="item"
118
+ effect="dark"
119
+ content="添加根节点"
120
+ placement="top"
121
+ >
122
+ <el-button
123
+ size="mini"
124
+ type=""
125
+ circle=""
126
+ icon="el-icon-plus"
127
+ @click="onAddRoot"
128
+ />
129
+ </el-tooltip>
130
+ </template>
131
+ <template #default="{ row, $index }">
132
+ <el-tooltip
133
+ :hide-after="hideAfter"
134
+ :open-delay="openDelay"
135
+ effect="dark"
136
+ content="删除"
137
+ placement="top"
138
+ >
139
+ <el-button
140
+ size="mini"
141
+ type=""
142
+ circle=""
143
+ icon="el-icon-delete"
144
+ @click="onDelete(row, $index)"
145
+ />
146
+ </el-tooltip>
147
+ </template>
148
+ </el-table-column>
149
+ </el-table>
150
+ </div>
151
+ <div class="dialog-footer" slot="footer">
152
+ <el-button @click="closeHandle" class="button-sty" icon="el-icon-close">
153
+ {{ i18nt("designer.hint.cancel") }}
154
+ </el-button>
155
+ <el-button
156
+ type="primary"
157
+ @click="colSubmit"
158
+ class="button-sty"
159
+ icon="el-icon-check"
160
+ >
161
+ {{ i18nt("designer.hint.confirm") }}
162
+ </el-button>
163
+ </div>
164
+ <el-dialog
165
+ v-if="showRenderDialogFlag"
166
+ :title="i18nt('designer.setting.renderFunction')"
167
+ :visible.sync="showRenderDialogFlag"
168
+ :modal="false"
169
+ :show-close="!0"
170
+ custom-class="dialog-style list-dialog"
171
+ :close-on-click-modal="!1"
172
+ :close-on-press-escape="!1"
173
+ :destroy-on-close="!0"
174
+ v-dialog-drag
175
+ top="7vh"
176
+ :append-to-body="true"
177
+ >
178
+ <el-alert type="info" :closable="!1" title="function customRender(params,h) {" />
179
+ <code-editor
180
+ ref="dsResultEditor"
181
+ mode="javascript"
182
+ :readonly="!1"
183
+ v-model="renderJson"
184
+ ></code-editor>
185
+ <el-alert type="info" :closable="!1" title="}" />
186
+ <div class="dialog-footer" slot="footer">
187
+ <el-button
188
+ @click="showRenderDialogFlag = !1"
189
+ class="button-sty"
190
+ icon="el-icon-close"
191
+ >
192
+ {{ i18nt("designer.hint.cancel") }}
193
+ </el-button>
194
+ <el-button
195
+ type="primary"
196
+ @click="saveColumnRender"
197
+ class="button-sty"
198
+ icon="el-icon-check"
199
+ >
200
+ {{ i18nt("designer.hint.confirm") }}
201
+ </el-button>
202
+ </div>
203
+ </el-dialog>
204
+ </el-dialog>
205
+ </template>
206
+ <script>
207
+ import i18n from "../../../../../../components/xform/utils/i18n";
208
+ import Sortable from "sortablejs";
209
+ import { generateId } from "../../../../../../components/xform/utils/util";
210
+ let businessOptions = [
211
+ {
212
+ value: "_createBy",
213
+ label: "创建人",
214
+ },
215
+ {
216
+ value: "_modifyBy",
217
+ label: "更新人",
218
+ },
219
+ {
220
+ value: "create_date",
221
+ label: "创建时间",
222
+ },
223
+ {
224
+ value: "modify_date",
225
+ label: "更新时间",
226
+ },
227
+ ];
228
+ let userFields = ["_createBy", "_modifyBy", "create_date", "modify_date"];
229
+
230
+ export default {
231
+ mixins: [i18n],
232
+ props: {
233
+ designer: Object,
234
+ selectedWidget: Object,
235
+ optionModel: Object,
236
+ },
237
+ data() {
238
+ return {
239
+ pictLoading: true,
240
+ dragSort: null,
241
+ showDialog: true,
242
+ tableData: [],
243
+ showRenderDialogFlag: !1,
244
+ renderJson: "",
245
+ currentTableColumn: null,
246
+ businessOptions,
247
+ userFields,
248
+ hideAfter: 1500,
249
+ openDelay: 500,
250
+ op: [
251
+ {
252
+ label: "动态渲染",
253
+ options: [
254
+ {
255
+ value: "render",
256
+ label: "render",
257
+ },
258
+ ],
259
+ },
260
+ {
261
+ label: "业务模块",
262
+ options: businessOptions,
263
+ },
264
+ {
265
+ label: "Date Format",
266
+ options: [
267
+ {
268
+ value: "d1",
269
+ label: "yyyy-MM-dd",
270
+ },
271
+ {
272
+ value: "d2",
273
+ label: "yyyy/MM/dd",
274
+ },
275
+ {
276
+ value: "d3",
277
+ label: "yyyy年MM月dd日",
278
+ },
279
+ {
280
+ value: "d4",
281
+ label: "yyyy-MM-dd HH:mm:ss",
282
+ },
283
+ {
284
+ value: "d5",
285
+ label: "yyyy-MM-dd hh:mm:ss",
286
+ },
287
+ ],
288
+ },
289
+ {
290
+ label: "Number Format",
291
+ options: [
292
+ {
293
+ value: "n1",
294
+ label: "###,###,###,##0.######",
295
+ },
296
+ {
297
+ value: "n2",
298
+ label: "###,###,###,##0.00####",
299
+ },
300
+ {
301
+ value: "n3",
302
+ label: "###,###,###,##0.000000",
303
+ },
304
+ {
305
+ value: "n4",
306
+ label: "###,###,###,##0.000",
307
+ },
308
+ {
309
+ value: "n5",
310
+ label: "###,###,###,##0.00",
311
+ },
312
+ {
313
+ value: "n6",
314
+ label: "###,###,###,##0",
315
+ },
316
+ {
317
+ value: "n7",
318
+ label: "###,##0.00##%",
319
+ },
320
+ ],
321
+ },
322
+ ],
323
+ };
324
+ },
325
+ beforeDestroy() {
326
+ if (this.dragSort) this.dragSort.destroy();
327
+ },
328
+ created() {},
329
+ mounted() {
330
+ this.init();
331
+ },
332
+ methods: {
333
+ init() {
334
+ setTimeout(() => {
335
+ this.tableData = this.$baseLodash.cloneDeep(
336
+ this.optionModel.exportItemColumns || []
337
+ );
338
+ setTimeout(() => {
339
+ this.rowDrop();
340
+ this.pictLoading = false;
341
+ }, 200);
342
+ });
343
+ },
344
+ closeHandle() {
345
+ this.showDialog = false;
346
+ this.$emit("update:visiable", false);
347
+ },
348
+ colSubmit() {
349
+ for (let i = 0; i < this.tableData.length; i++) {
350
+ let row = this.tableData[i];
351
+ if (!row.title || !row.field) {
352
+ this.$message.error("请输入显示名称和字段名称");
353
+ return;
354
+ }
355
+ }
356
+ this.optionModel.exportItemColumns = this.$baseLodash.cloneDeep(this.tableData);
357
+ this.closeHandle();
358
+ },
359
+ generateRow() {
360
+ let tmpId = "column" + generateId();
361
+ var row = {
362
+ id: tmpId,
363
+ field: null,
364
+ title: null,
365
+ formatS: null,
366
+ render: null,
367
+ exportType: null,
368
+ };
369
+ return row;
370
+ },
371
+ // 添加根节点
372
+ onAddRoot() {
373
+ this.tableData.push(this.generateRow());
374
+ },
375
+ // 删除当前节点及对应子节点数据
376
+ onDelete(row, index) {
377
+ this.tableData.splice(index, 1);
378
+ },
379
+ showRenderDialog: function (e) {
380
+ (this.currentTableColumn = e),
381
+ (this.renderJson = e.render || ""),
382
+ (this.showRenderDialogFlag = !0);
383
+ },
384
+ saveColumnRender: function () {
385
+ this.$set(this.currentTableColumn, "render", this.renderJson),
386
+ (this.showRenderDialogFlag = !1);
387
+ },
388
+ changeFormatS(row) {
389
+ if (this.userFields.includes(row.formatS)) {
390
+ let item = this.businessOptions.find((item) => item.value == row.formatS);
391
+ if (item) {
392
+ row.field = item.value;
393
+ row.title = item.label;
394
+ }
395
+ }
396
+ },
397
+ //行拖拽
398
+ rowDrop() {
399
+ if (this.dragSort) this.dragSort.destroy(); // 防止在Dom上重复绑定事件
400
+ var tbody = this.$refs.singleTable.$el.querySelectorAll(
401
+ ".el-table__fixed-body-wrapper > table > tbody"
402
+ )[0];
403
+ const _this = this;
404
+ this.dragSort = Sortable.create(tbody, {
405
+ ghostClass: "sortable-ghost",
406
+ // draggable: ".drag-option", // 修改可拖拽元素
407
+ handle: ".drag-option", // 指定拖动按钮
408
+ setData: function (e) {
409
+ e.setData("Text", "");
410
+ },
411
+ onEnd({ newIndex, oldIndex }) {
412
+ _this.rowDropEnd(newIndex, oldIndex);
413
+ },
414
+ });
415
+ },
416
+ //行结束拖拽事件
417
+ rowDropEnd(newIndex, oldIndex) {
418
+ if (oldIndex === newIndex) return;
419
+
420
+ const newData = [...this.tableData];
421
+ const movedRow = newData.splice(oldIndex, 1)[0];
422
+
423
+ // 关键:如果 oldIndex < newIndex,说明删除后 newIndex 需要 -1
424
+ const insertIndex = oldIndex < newIndex ? newIndex - 1 : newIndex;
425
+
426
+ newData.splice(insertIndex, 0, movedRow);
427
+ this.tableData = newData; // 触发响应式更新
428
+ },
429
+ },
430
+ };
431
+ </script>
432
+ <style lang="less"></style>
@@ -0,0 +1,71 @@
1
+ <template>
2
+ <div>
3
+ <el-form-item label-width="0">
4
+ <el-divider class="custom-divider export-divider">列表导出(明细)设置</el-divider>
5
+ </el-form-item>
6
+ <el-form-item label="导出文件名称">
7
+ <el-input v-model="optionModel.exportFileName"></el-input>
8
+ </el-form-item>
9
+ <el-form-item label="表格唯一名称">
10
+ <el-input v-model="optionModel.tableRef"></el-input>
11
+ </el-form-item>
12
+ <el-form-item label="导出列表显示图片">
13
+ <el-switch
14
+ v-model="optionModel.showImageAtTable"
15
+ @change="changeShowImageAtTable"
16
+ ></el-switch>
17
+ </el-form-item>
18
+ <el-form-item label="导出每页查询数量">
19
+ <base-input-number
20
+ v-model="optionModel.exportPageSize"
21
+ :max="optionModel.showImageAtTable ? 150 : 1000"
22
+ ></base-input-number>
23
+ </el-form-item>
24
+ <el-form-item label="导出参数" label-width="150px">
25
+ <a
26
+ href="javascript:void(0);"
27
+ class="a-link link-oneLind"
28
+ @click="editEventHandler('tableExportParam', eventParams)"
29
+ >
30
+ <span>{{ optionModel.tableExportParam }}</span>
31
+ <i class="el-icon-edit"></i>
32
+ </a>
33
+ </el-form-item>
34
+ </div>
35
+ </template>
36
+
37
+ <script>
38
+ import i18n from "../../../../utils/i18n";
39
+ import eventMixin from "../event-handler/eventMixin";
40
+
41
+ export default {
42
+ name: "select-export-item-button-editor",
43
+ mixins: [i18n, eventMixin],
44
+ props: {
45
+ designer: Object,
46
+ selectedWidget: Object,
47
+ optionModel: Object,
48
+ },
49
+ data() {
50
+ return {
51
+ eventParams: [],
52
+ };
53
+ },
54
+ methods: {
55
+ changeShowImageAtTable(val) {
56
+ if (val) {
57
+ let exportPageSize = this.optionModel.exportPageSize || 0;
58
+ if (exportPageSize > 150) {
59
+ this.optionModel.exportPageSize = 150;
60
+ }
61
+ }
62
+ },
63
+ },
64
+ };
65
+ </script>
66
+
67
+ <style scoped>
68
+ ::v-deep.export-divider .el-divider__text.is-center {
69
+ width: 162px;
70
+ }
71
+ </style>
@@ -151,6 +151,7 @@ const COMMON_PROPERTIES = {
151
151
 
152
152
  tableExportFlag: "table-export-button-editor",
153
153
  selectExportFlag: "select-export-button-editor",
154
+ selectExportItemFlag: "select-export-item-button-editor",
154
155
  importEntity: "import-button-editor",
155
156
  frontImportFlag: "import2-button-editor",
156
157
  printButtonFlag: "print-button-editor",
@@ -162,6 +162,7 @@ export const containers = [
162
162
  rowSpacing: 8,
163
163
  tableHeight: "",
164
164
  tableWidth: "100%",
165
+ tableRowHeight: null,
165
166
  customClass: "",
166
167
  stripe: !0,
167
168
  showIndex: !1,
@@ -224,40 +225,7 @@ export const containers = [
224
225
 
225
226
  dsEnabled: !1,
226
227
  dsName: "",
227
- tableData: [
228
- /*{
229
- "flag": 1,
230
- "gender": 1,
231
- "mobile": "18900000000",
232
- "modify_by": "admin",
233
- "login_account": "admin",
234
- "enabled": true,
235
- "create_by": "admin",
236
- "password": "$2a$10$pYkIeHldXBDIdKShgYjayuWM.NvmuYmewZ1D4qIFF3GL2g5bFzmdS",
237
- "user_type": 0,
238
- "nick_name": "admin",
239
- "company_code": "mk_group",
240
- "id": 1,
241
- "create_date": "2021-12-05 23:12:20",
242
- "modify_date": "2022-05-16 22:21:44",
243
- },
244
- {
245
- "flag": 1,
246
- "gender": 1,
247
- "mobile": "18900000000",
248
- "modify_by": "admin",
249
- "login_account": "admin2",
250
- "enabled": true,
251
- "create_by": "admin",
252
- "password": "$2a$10$pYkIeHldXBDIdKShgYjayuWM.NvmuYmewZ1D4qIFF3GL2g5bFzmdS",
253
- "user_type": 0,
254
- "nick_name": "admin2",
255
- "company_code": "mk_group",
256
- "id": 2,
257
- "create_date": "2021-12-05 23:12:20",
258
- "modify_date": "2022-05-16 22:21:44",
259
- }*/
260
- ],
228
+ tableData: [],
261
229
  tableCondition: "",
262
230
  onCreated: "",
263
231
  onMounted: "",
@@ -301,6 +269,10 @@ export const containers = [
301
269
  hideGridCheckBox: false,
302
270
  isNotQueryAllPage: false,
303
271
  isNotShowQueryButton: false,
272
+
273
+ exportItemColumns:[],
274
+ exportItemScriptCode: null,
275
+ exportItemParam: null,
304
276
  },
305
277
  },
306
278
  /*{
@@ -2993,6 +2965,37 @@ export const advancedFields = [
2993
2965
  showRules: [],
2994
2966
  },
2995
2967
  },
2968
+ {
2969
+ type: "select-export-item-button",
2970
+ icon: "list-export",
2971
+ formItemFlag: !1,
2972
+ commonFlag: !0,
2973
+ columnFlag: true,
2974
+ options: {
2975
+ name: "",
2976
+ keyNameEnabled: !1,
2977
+ keyName: "",
2978
+ disabled: !1,
2979
+ hidden: !1,
2980
+ label: "列表导出(明细)",
2981
+ customClass: "",
2982
+ buttonTypeFlag: 1,
2983
+ type: "primary",
2984
+ exportFileName: "明细导出",
2985
+ tableRef: "",
2986
+ tableExportParam: "",
2987
+ showImageAtTable: false,
2988
+ selectExportItemFlag: 1,
2989
+
2990
+ onCreated: "",
2991
+ onMounted: "",
2992
+ ...defaultWfConfig,
2993
+ ...defaultWidgetShowRuleConfig,
2994
+ showRuleFlag: 1,
2995
+ showRuleEnabled: 1,
2996
+ showRules: [],
2997
+ },
2998
+ },
2996
2999
  {
2997
3000
  type: "add_button",
2998
3001
  targetType: "button",