cloud-web-corejs 1.1.0-dev.6 → 1.1.0-dev.7

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 (45) hide show
  1. package/package.json +1 -1
  2. package/src/components/VabUpload/view.vue +27 -26
  3. package/src/components/excelImport/index.vue +156 -156
  4. package/src/components/mobile/wf/addTaskUserdialog.vue +23 -3
  5. package/src/components/mobile/wf/content.vue +110 -67
  6. package/src/components/mobile/wf/deleteTaskUserDialog.vue +22 -3
  7. package/src/components/mobile/wf/selectUserDialog.vue +122 -0
  8. package/src/components/mobile/wf/setCandidateDialog.vue +25 -4
  9. package/src/components/mobile/wf/urgingDialog.vue +26 -3
  10. package/src/components/mobile/wf/wfModifyDialog.vue +4 -0
  11. package/src/components/xform/form-designer/designer.js +36 -52
  12. package/src/components/xform/form-designer/form-widget/dialog/importDialog.vue +185 -185
  13. package/src/components/xform/form-designer/form-widget/field-widget/singleUpload-widget.vue +1 -1
  14. package/src/components/xform/form-designer/form-widget/field-widget/vabUpload-widget.vue +2 -2
  15. package/src/components/xform/form-designer/indexMixin.js +25 -0
  16. package/src/components/xform/form-designer/setting-panel/property-editor/container-list-h5/list-h5-editor.vue +833 -860
  17. package/src/components/xform/form-designer/toolbar-panel/index.vue +874 -874
  18. package/src/components/xform/form-designer/widget-panel/index.vue +11 -7
  19. package/src/components/xform/form-designer/widget-panel/indexMixin.js +15 -2
  20. package/src/components/xform/form-designer/widget-panel/widgetsConfig.js +53 -1
  21. package/src/components/xform/form-render/container-item/list-h5-item.vue +154 -27
  22. package/src/components/xform/form-render/indexMixin.js +23 -3
  23. package/src/components/xform/styles/h5.scss +774 -588
  24. package/src/directive/append-to-body/index.js +48 -0
  25. package/src/index.js +4 -0
  26. package/src/layout/components/Sidebar/default.vue +1655 -1655
  27. package/src/router/index.js +48 -48
  28. package/src/utils/vab.js +1283 -1283
  29. package/src/views/bd/setting/form_template/edit.vue +378 -356
  30. package/src/views/bd/setting/form_template/formDesignerDialog.vue +6 -0
  31. package/src/views/bd/setting/form_template/formTemplateType.js +43 -0
  32. package/src/views/bd/setting/form_template/list.vue +304 -303
  33. package/src/views/bd/setting/form_template/mixins/edit.js +344 -280
  34. package/src/views/bd/setting/form_template/mixins/list.js +748 -721
  35. package/src/views/user/file_view_ins/list.vue +970 -970
  36. package/src/views/user/form/vform/designer.vue +823 -821
  37. package/src/views/user/home/default.vue +1117 -1117
  38. package/src/views/user/home/index.vue +103 -103
  39. package/src/views/user/notify_message/dialog.vue +139 -139
  40. package/src/views/user/outLink/form_view.vue +202 -202
  41. package/src/views/user/outLink/index.vue +110 -110
  42. package/src/views/user/wf/iframe/index.vue +51 -51
  43. package/src/views/user/wf/iframe/index2.vue +64 -64
  44. package/src/views/user/wf/wf_manage/list2.vue +871 -871
  45. package/src/views/user/wf/wf_manage/wfContentDialog.vue +134 -134
@@ -1,874 +1,874 @@
1
- <template>
2
- <div class="toolbar-container">
3
- <div class="left-toolbar">
4
- <el-button
5
- type="text"
6
- :disabled="undoDisabled"
7
- :title="i18nt('designer.toolbar.undoHint')"
8
- @click="undoHistory"
9
- >
10
- <svg-icon icon-class="undo" />
11
- </el-button>
12
- <el-button
13
- type="text"
14
- :disabled="redoDisabled"
15
- :title="i18nt('designer.toolbar.redoHint')"
16
- @click="redoHistory"
17
- >
18
- <svg-icon icon-class="redo" />
19
- </el-button>
20
- <el-button-group>
21
- <el-button
22
- :type="layoutType === 'PC' ? 'info' : ''"
23
- @click="changeLayoutType('PC')"
24
- size="mini"
25
- >
26
- {{ i18nt("designer.toolbar.pcLayout") }}
27
- </el-button>
28
- <!-- <el-button :type="layoutType === 'Pad' ? 'info' : ''" @click="changeLayoutType('Pad')">{{ i18nt('designer.toolbar.padLayout') }}</el-button>-->
29
- <el-button
30
- :type="layoutType === 'H5' ? 'info' : ''"
31
- @click="changeLayoutType('H5')"
32
- size="mini"
33
- >
34
- {{ i18nt("designer.toolbar.mobileLayout") }}
35
- </el-button>
36
- </el-button-group>
37
- <!-- <el-button type="" style="margin-left: 20px" :title="i18nt('designer.toolbar.nodeTreeHint')" @click="showNodeTreeDrawer"><svg-icon icon-class="node-tree" /></el-button>-->
38
- </div>
39
-
40
- <el-drawer
41
- :title="i18nt('designer.toolbar.nodeTreeTitle')"
42
- direction="ltr"
43
- :visible.sync="showNodeTreeDrawerFlag"
44
- :modal="false"
45
- :size="280"
46
- :destroy-on-close="true"
47
- class="node-tree-drawer"
48
- >
49
- <el-tree
50
- ref="nodeTree"
51
- :data="nodeTreeData"
52
- node-key="id"
53
- default-expand-all
54
- highlight-current
55
- class="node-tree"
56
- icon-class="el-icon-arrow-right"
57
- @node-click="onNodeTreeClick"
58
- ></el-tree>
59
- </el-drawer>
60
-
61
- <div class="right-toolbar" :style="{ width: 'auto' }">
62
- <div class="right-toolbar-con">
63
- <!-- <el-button type="text" @click="showFormConfigDialog=true">
64
- <i class="iconfont icon-liebiaoshezhi-list-setting"/>
65
- 表单/列表设置
66
- </el-button>-->
67
- <el-button
68
- type="primary"
69
- @click="saveReportTemplate()"
70
- plain
71
- v-if="
72
- designer.vueInstance.isDev &&
73
- designer.vueInstance.menuKindAuth.editAuth === 1 &&
74
- !readonly
75
- "
76
- >
77
- <i class="el-icon-check" />
78
- 保存
79
- </el-button>
80
- <el-divider direction="vertical"></el-divider>
81
- <el-button
82
- v-if="showToolButton('clearDesignerButton') && !readonly"
83
- type="text"
84
- @click="clearFormWidget"
85
- >
86
- <i class="el-icon-delete" />
87
- {{ i18nt("designer.toolbar.clear") }}
88
- </el-button>
89
- <el-button
90
- v-if="showToolButton('previewFormButton')"
91
- type="text"
92
- @click="previewForm"
93
- >
94
- <i class="el-icon-view" />
95
- {{ i18nt("designer.toolbar.preview") }}
96
- </el-button>
97
- <el-divider direction="vertical"></el-divider>
98
- <el-button
99
- v-if="showToolButton('importJsonButton') && !readonly"
100
- type="text"
101
- @click="importJson"
102
- >
103
- {{ i18nt("designer.toolbar.importJson") }}
104
- </el-button>
105
- <el-button
106
- v-if="showToolButton('exportJsonButton')"
107
- type="text"
108
- @click="exportJson"
109
- >
110
- {{ i18nt("designer.toolbar.exportJson") }}
111
- </el-button>
112
- <!--<el-button v-if="showToolButton('exportCodeButton')" type="text" @click="exportCode">{{ i18nt('designer.toolbar.exportCode') }}</el-button>
113
- <el-button v-if="showToolButton('generateSFCButton')" type="text" @click="generateSFC">
114
- <svg-icon icon-class="vue-sfc" />
115
- {{ i18nt('designer.toolbar.generateSFC') }}
116
- </el-button> -->
117
- <template v-for="(idx, slotName) in $slots">
118
- <slot :name="slotName"></slot>
119
- </template>
120
- </div>
121
- </div>
122
-
123
- <el-dialog
124
- :title="i18nt('designer.toolbar.preview')"
125
- :visible.sync="showPreviewDialogFlag"
126
- v-if="showPreviewDialogFlag"
127
- :show-close="true"
128
- :close-on-click-modal="false"
129
- :close-on-press-escape="false"
130
- center
131
- v-dialog-drag
132
- :destroy-on-close="true"
133
- :append-to-body="true"
134
- :modal-append-to-body="true"
135
- class="small-padding-dialog preview-dialog"
136
- width="75%"
137
- :fullscreen="true"
138
- @close="showPreviewDialogFlag = false"
139
- >
140
- <div>
141
- <div
142
- class="form-render-wrapper"
143
- id="containt"
144
- :class="[
145
- layoutType === 'H5'
146
- ? 'h5-layout'
147
- : layoutType === 'Pad'
148
- ? 'pad-layout'
149
- : '',
150
- ]"
151
- >
152
- <VFormRender
153
- ref="preForm"
154
- :form-json="formJson"
155
- :form-data="testFormData"
156
- :preview-state="true"
157
- :option-data="testOptionData"
158
- @appendButtonClick="testOnAppendButtonClick"
159
- @buttonClick="testOnButtonClick"
160
- @formChange="handleFormChange"
161
- :reportTemplate.sync="reportTemplate"
162
- v-if="showRender"
163
- visible-key="showRender"
164
- :parent-target="_self"
165
- @reload="$reloadHandle"
166
- >
167
- <!--
168
- <div slot="testSlot">aaaa</div>
169
- -->
170
- </VFormRender>
171
- </div>
172
- </div>
173
- <!-- <el-tabs v-model="activeName" class="tab-box">
174
- <el-tab-pane label="常规" name="first">
175
- <div>
176
- <div class="form-render-wrapper" id="containt"
177
- :class="[layoutType === 'H5' ? 'h5-layout' : layoutType === 'Pad' ? 'pad-layout' : '']">
178
- <VFormRender
179
- ref="preForm"
180
- :form-json="formJson"
181
- :form-data="testFormData"
182
- :preview-state="true"
183
- :option-data="testOptionData"
184
- @appendButtonClick="testOnAppendButtonClick"
185
- @buttonClick="testOnButtonClick"
186
- @formChange="handleFormChange"
187
- :reportTemplate.sync="reportTemplate"
188
- v-if="showRender" visible-key="showRender" :parent-target="_self" @reload="$reloadHandle"
189
- >
190
- &lt;!&ndash;
191
- <div slot="testSlot">aaaa</div>
192
- &ndash;&gt;
193
- </VFormRender>
194
- </div>
195
- </div>
196
- <code-editor v-model="testFunc" style="display: none"></code-editor>
197
- </el-tab-pane>
198
- <el-tab-pane label="列表" name="second">
199
- <template v-if="false">
200
- <div class="grid-height">
201
- <vxe-grid ref="table-m1" v-bind="vxeOption" @resizable-change="$vxeTableUtil.onColumnWitchChange"
202
- @custom="$vxeTableUtil.customHandle">
203
- <template #form>
204
- <div class="clearfix screen-btns">
205
- <div class="fl">
206
- <vxe-button status="primary" class="button-sty" icon="el-icon-plus">新增
207
- </vxe-button>
208
- </div>
209
- <div class="fr">
210
- <vxe-button icon="el-icon-brush" class="button-sty" type="text" status="primary" plain
211
- @click="formData={}">重置
212
- </vxe-button>
213
- <vxe-button status="warning" icon="el-icon-search" class="button-sty">搜索
214
- </vxe-button>
215
- </div>
216
- </div>
217
- <template v-if="searchFields.length>0">
218
- <vxe-form ref="form" class="screen-box" title-width="92px" title-align="right" :data="formData">
219
- <vxe-form-item v-for="(item,index) in searchFields"
220
- :key="index" :title="item.label+':'">
221
- <template v-slot>
222
- <el-input v-model="formData[item.prop]" size="small" clearable/>
223
- </template>
224
- </vxe-form-item>
225
- </vxe-form>
226
- </template>
227
- </template>
228
- </vxe-grid>
229
- </div>
230
- </template>
231
- <template v-else>
232
- <div id="containt">
233
- <div class="tree-box fl">
234
- <div class="tit"><b>机构分类</b></div>
235
- <el-tree
236
- :props="treeOption.defaultProps"
237
- :load="loadNode"
238
- node-key="id"
239
- ref="tree"
240
- highlight-current
241
- lazy
242
- :expand-on-click-node="false"
243
- @node-click="handleNodeClick"
244
- class="tree-list"
245
- icon-class="el-icon-arrow-down"
246
- ></el-tree>
247
- </div>
248
- <label id="labBtn">
249
- <div class="icon">
250
- <i class="el-icon-more"></i>
251
- <i class="el-icon-more"></i>
252
- </div>
253
- </label>
254
- <div class="main-right fr" style="padding-left:6px;">
255
- <div class="grid-height">
256
- <vxe-grid ref="table-m1" v-bind="vxeOption" @resizable-change="$vxeTableUtil.onColumnWitchChange"
257
- @custom="$vxeTableUtil.customHandle">
258
- <template #form>
259
- <div class="clearfix screen-btns">
260
- <div class="fl">
261
- <vxe-button status="primary" class="button-sty" icon="el-icon-plus">新增
262
- </vxe-button>
263
- </div>
264
- <div class="fr">
265
- <vxe-button icon="el-icon-brush" class="button-sty" type="text" status="primary" plain
266
- @click="formData={}">重置
267
- </vxe-button>
268
- <vxe-button status="warning" icon="el-icon-search" class="button-sty">搜索
269
- </vxe-button>
270
- </div>
271
- </div>
272
- <template v-if="searchFields.length>0">
273
- <vxe-form ref="form" class="screen-box" title-width="92px" title-align="right" :data="formData">
274
- <vxe-form-item v-for="(item,index) in searchFields"
275
- :key="index" :title="item.label+':'">
276
- <template v-slot>
277
- <el-input v-model="formData[item.prop]" size="small" clearable/>
278
- </template>
279
- </vxe-form-item>
280
- </vxe-form>
281
- </template>
282
- </template>
283
- </vxe-grid>
284
- </div>
285
- </div>
286
- </div>
287
- </template>
288
- </el-tab-pane>
289
- </el-tabs>-->
290
- <div slot="footer" class="dialog-footer" v-if="false">
291
- <!-- <el-button type="primary" @click="getFormData" class="button-sty">{{ i18nt('designer.hint.getFormData') }}</el-button>
292
- <el-button type="primary" @click="resetForm" class="button-sty">{{ i18nt('designer.hint.resetForm') }}</el-button>
293
- <el-button type="primary" @click="setFormDisabled" class="button-sty">{{ i18nt('designer.hint.disableForm') }}</el-button>
294
- <el-button type="primary" @click="setFormEnabled" class="button-sty">{{ i18nt('designer.hint.enableForm') }}</el-button>
295
- <el-button type="" @click="showPreviewDialogFlag = false" class="button-sty">{{ i18nt('designer.hint.closePreview') }}</el-button> -->
296
- <el-button v-if="false" @click="printFormJson" class="button-sty"
297
- >PrintFormJson</el-button
298
- >
299
- <el-button v-if="false" @click="testValidate" class="button-sty"
300
- >TestValidate</el-button
301
- >
302
- <el-button v-if="false" @click="testSetFormData" class="button-sty"
303
- >TestSF</el-button
304
- >
305
- <el-button @click="$refs['preForm'].saveForm()" class="button-sty"
306
- >测试保存</el-button
307
- >
308
- </div>
309
- </el-dialog>
310
-
311
- <el-dialog
312
- :title="i18nt('designer.toolbar.importJson')"
313
- :visible.sync="showImportJsonDialogFlag"
314
- v-if="showImportJsonDialogFlag"
315
- :show-close="true"
316
- class="small-padding-dialog preview-dialog"
317
- center
318
- v-dialog-drag
319
- :close-on-click-modal="false"
320
- :close-on-press-escape="false"
321
- :destroy-on-close="true"
322
- :append-to-body="true"
323
- :modal-append-to-body="true"
324
- >
325
- <el-alert
326
- type="info"
327
- :title="i18nt('designer.hint.importJsonHint')"
328
- show-icon
329
- class="alert-padding"
330
- ></el-alert>
331
- <code-editor
332
- :mode="'json'"
333
- :readonly="false"
334
- v-model="importTemplate"
335
- ></code-editor>
336
- <div slot="footer" class="dialog-footer">
337
- <el-button type="primary" @click="doJsonImport" class="button-sty"
338
- >{{ i18nt("designer.hint.import") }}
339
- </el-button>
340
- <el-button @click="showImportJsonDialogFlag = false" class="button-sty"
341
- >{{ i18nt("designer.hint.cancel") }}
342
- </el-button>
343
- </div>
344
- </el-dialog>
345
-
346
- <el-dialog
347
- :title="i18nt('designer.toolbar.exportJson')"
348
- :visible.sync="showExportJsonDialogFlag"
349
- v-if="showExportJsonDialogFlag"
350
- :show-close="true"
351
- class="small-padding-dialog preview-dialog"
352
- center
353
- v-dialog-drag
354
- :close-on-click-modal="false"
355
- :close-on-press-escape="false"
356
- :destroy-on-close="true"
357
- :append-to-body="true"
358
- :modal-append-to-body="true"
359
- >
360
- <code-editor
361
- :mode="'json'"
362
- :readonly="true"
363
- v-model="jsonContent"
364
- ></code-editor>
365
- <div slot="footer" class="dialog-footer">
366
- <el-button
367
- type="primary"
368
- class="copy-json-btn button-sty"
369
- :data-clipboard-text="jsonRawContent"
370
- @click="copyFormJson"
371
- >{{ i18nt("designer.hint.copyJson") }}
372
- </el-button>
373
- <el-button @click="saveFormJson" class="button-sty">{{
374
- i18nt("designer.hint.saveFormJson")
375
- }}</el-button>
376
- <el-button
377
- type=""
378
- @click="showExportJsonDialogFlag = false"
379
- class="button-sty"
380
- >
381
- {{ i18nt("designer.hint.closePreview") }}
382
- </el-button>
383
- </div>
384
- </el-dialog>
385
-
386
- <el-dialog
387
- :title="i18nt('designer.toolbar.exportCode')"
388
- :visible.sync="showExportCodeDialogFlag"
389
- v-if="showExportCodeDialogFlag"
390
- :show-close="true"
391
- class="small-padding-dialog preview-dialog"
392
- center
393
- v-dialog-drag
394
- width="65%"
395
- :close-on-click-modal="false"
396
- :close-on-press-escape="false"
397
- :destroy-on-close="true"
398
- :append-to-body="true"
399
- :modal-append-to-body="true"
400
- >
401
- <el-tabs
402
- type="border-card"
403
- class="no-box-shadow no-padding"
404
- v-model="activeCodeTab"
405
- >
406
- <el-tab-pane label="Vue" name="vue">
407
- <code-editor
408
- :mode="'html'"
409
- :readonly="true"
410
- v-model="vueCode"
411
- :user-worker="false"
412
- ></code-editor>
413
- </el-tab-pane>
414
- <el-tab-pane label="HTML" name="html">
415
- <code-editor
416
- :mode="'html'"
417
- :readonly="true"
418
- v-model="htmlCode"
419
- :user-worker="false"
420
- ></code-editor>
421
- </el-tab-pane>
422
- </el-tabs>
423
- <div slot="footer" class="dialog-footer">
424
- <el-button
425
- type="primary"
426
- class="copy-vue-btn button-sty"
427
- :data-clipboard-text="vueCode"
428
- @click="copyVueCode"
429
- >
430
- {{ i18nt("designer.hint.copyVueCode") }}
431
- </el-button>
432
- <el-button
433
- type="primary"
434
- class="copy-html-btn button-sty"
435
- :data-clipboard-text="htmlCode"
436
- @click="copyHtmlCode"
437
- >{{ i18nt("designer.hint.copyHtmlCode") }}
438
- </el-button>
439
- <el-button @click="saveVueCode" class="button-sty">{{
440
- i18nt("designer.hint.saveVueCode")
441
- }}</el-button>
442
- <el-button @click="saveHtmlCode" class="button-sty">{{
443
- i18nt("designer.hint.saveHtmlCode")
444
- }}</el-button>
445
- <el-button
446
- type=""
447
- @click="showExportCodeDialogFlag = false"
448
- class="button-sty"
449
- >
450
- {{ i18nt("designer.hint.closePreview") }}
451
- </el-button>
452
- </div>
453
- </el-dialog>
454
-
455
- <el-dialog
456
- :title="i18nt('designer.hint.exportFormData')"
457
- :visible.sync="showFormDataDialogFlag"
458
- v-if="showFormDataDialogFlag"
459
- :show-close="true"
460
- class="dialog-title-light-bg preview-dialog"
461
- center
462
- v-dialog-drag
463
- :close-on-click-modal="false"
464
- :close-on-press-escape="false"
465
- :destroy-on-close="true"
466
- :append-to-body="true"
467
- :modal-append-to-body="true"
468
- >
469
- <div style="border: 1px solid #dcdfe6">
470
- <code-editor
471
- :mode="'json'"
472
- :readonly="true"
473
- v-model="formDataJson"
474
- ></code-editor>
475
- </div>
476
- <div slot="footer" class="dialog-footer">
477
- <el-button
478
- type="primary"
479
- class="copy-form-data-json-btn button-sty"
480
- :data-clipboard-text="formDataRawJson"
481
- @click="copyFormDataJson"
482
- >
483
- {{ i18nt("designer.hint.copyFormData") }}
484
- </el-button>
485
- <el-button @click="saveFormData" class="button-sty">{{
486
- i18nt("designer.hint.saveFormData")
487
- }}</el-button>
488
- <el-button
489
- type=""
490
- @click="showFormDataDialogFlag = false"
491
- class="button-sty"
492
- >
493
- {{ i18nt("designer.hint.closePreview") }}
494
- </el-button>
495
- </div>
496
- </el-dialog>
497
-
498
- <el-dialog
499
- :title="i18nt('designer.toolbar.generateSFC')"
500
- :visible.sync="showExportSFCDialogFlag"
501
- v-if="showExportSFCDialogFlag"
502
- :show-close="true"
503
- class="small-padding-dialog preview-dialog"
504
- center
505
- v-dialog-drag
506
- width="65%"
507
- :close-on-click-modal="false"
508
- :close-on-press-escape="false"
509
- :destroy-on-close="true"
510
- :append-to-body="true"
511
- :modal-append-to-body="true"
512
- >
513
- <el-tabs
514
- type="border-card"
515
- class="no-box-shadow no-padding"
516
- v-model="activeSFCTab"
517
- >
518
- <el-tab-pane label="Vue2" name="vue2">
519
- <code-editor
520
- :mode="'html'"
521
- :readonly="true"
522
- v-model="sfcCode"
523
- :user-worker="false"
524
- ></code-editor>
525
- </el-tab-pane>
526
- <el-tab-pane label="Vue3" name="vue3">
527
- <code-editor
528
- :mode="'html'"
529
- :readonly="true"
530
- v-model="sfcCodeV3"
531
- :user-worker="false"
532
- ></code-editor>
533
- </el-tab-pane>
534
- </el-tabs>
535
- <div slot="footer" class="dialog-footer">
536
- <el-button
537
- type="primary"
538
- class="copy-vue2-sfc-btn button-sty"
539
- :data-clipboard-text="sfcCode"
540
- @click="copyV2SFC"
541
- >{{ i18nt("designer.hint.copyVue2SFC") }}
542
- </el-button>
543
- <el-button
544
- type="primary"
545
- class="copy-vue3-sfc-btn button-sty"
546
- :data-clipboard-text="sfcCodeV3"
547
- @click="copyV3SFC"
548
- >{{ i18nt("designer.hint.copyVue3SFC") }}
549
- </el-button>
550
- <el-button @click="saveV2SFC" class="button-sty">{{
551
- i18nt("designer.hint.saveVue2SFC")
552
- }}</el-button>
553
- <el-button @click="saveV3SFC" class="button-sty">{{
554
- i18nt("designer.hint.saveVue3SFC")
555
- }}</el-button>
556
- <el-button
557
- type=""
558
- @click="showExportSFCDialogFlag = false"
559
- class="button-sty"
560
- >
561
- {{ i18nt("designer.hint.closePreview") }}
562
- </el-button>
563
- </div>
564
- </el-dialog>
565
- <el-dialog
566
- :title="i18nt('表单编辑')"
567
- v-if="showFormConfigDialog"
568
- :visible.sync="showFormConfigDialog"
569
- :modal="false"
570
- :show-close="!0"
571
- custom-class="dialog-style list-dialog"
572
- :close-on-click-modal="!1"
573
- :close-on-press-escape="!1"
574
- :destroy-on-close="!0"
575
- v-el-drag-dialog
576
- v-el-dialog-center
577
- >
578
- <div class="cont" style="height: auto; max-height: 500px">
579
- <el-scrollbar class="setting-scrollbar">
580
- <form-setting
581
- :designer="designer"
582
- :form-config="designer.formConfig"
583
- ></form-setting>
584
- </el-scrollbar>
585
- </div>
586
- </el-dialog>
587
- </div>
588
- </template>
589
-
590
- <script>
591
- import VFormRender from "../../../../components/xform/form-render/index";
592
- import indexMixin from "./indexMixin.js";
593
- import FormSetting from "../../../../components/xform/form-designer/setting-panel/form-setting";
594
-
595
- export default {
596
- name: "ToolbarPanel",
597
- components: {
598
- VFormRender,
599
- FormSetting,
600
- },
601
- inject: ["readonly"],
602
- mixins: [indexMixin],
603
- data() {
604
- return {
605
- defaultProps: {
606
- label: "name", //这里是树结构中需显示的数据(即接口返回的需展示在页面上的参数)
607
- children: [],
608
- isLeaf: "leaf",
609
- },
610
- treeOption: {
611
- title: "机构分类",
612
- defaultProps: {
613
- label: "name",
614
- children: [],
615
- isLeaf: "leaf",
616
- },
617
- url1: "/user/sale_org/getAllList",
618
- url2: "/user/sale_org/getChildren",
619
- formRewriteMap: {
620
- saleOrgId: "id",
621
- saleOrgName: "name",
622
- },
623
- preHadnleData(row) {
624
- row.leaf = !row.hasChild;
625
- },
626
- treeNodeParam(row) {
627
- return {
628
- parent: row.id,
629
- enabled: true,
630
- };
631
- },
632
- },
633
- };
634
- },
635
- methods: {
636
- handleNodeClick(data, node, v) {
637
- let treeOption = this.treeOption;
638
- let formRewriteMap = treeOption.formRewriteMap || {};
639
- let formData = {};
640
- Object.keys(formRewriteMap).forEach((key) => {
641
- // this.$set(this.formData, key, data[formRewriteMap[key]]);
642
- formData[key] = data[formRewriteMap[key]];
643
- });
644
-
645
- this.$forceUpdate();
646
- /*
647
- this.searchEvent();*/
648
- },
649
- // 异步树叶子节点懒加载逻辑
650
- loadNode(node, resolve) {
651
- let treeOption = this.treeOption;
652
- let id = node && node.data && node.data.id ? node.data.id || "" : "";
653
- let param = (treeOption.treeNodeParam
654
- ? treeOption.treeNodeParam(node?.data || {})
655
- : null) || {
656
- parent: id,
657
- enabled: true,
658
- };
659
- let url = !id ? treeOption.url1 : treeOption.url2;
660
- this.$http({
661
- url: url,
662
- method: "post",
663
- data: param,
664
- success: (res) => {
665
- res.objx.forEach((value) => {
666
- treeOption.preHadnleData(value);
667
- });
668
- resolve(res.objx);
669
- },
670
- });
671
- },
672
- },
673
- };
674
- </script>
675
-
676
- <style lang="scss" scoped>
677
- div.toolbar-container {
678
- //min-width: 728px; /* 解决工具按钮栏换行的问题 */
679
- /* 上一行css有问题,当窗口宽度不足时会把按钮挤出到右边的属性设置区,弃之! */
680
- }
681
-
682
- .left-toolbar {
683
- float: left;
684
- font-size: 16px;
685
- }
686
-
687
- .right-toolbar {
688
- float: right;
689
- //width: 420px;
690
- text-align: right;
691
- overflow: hidden;
692
-
693
- .right-toolbar-con {
694
- text-align: right;
695
-
696
- .el-button {
697
- margin-left: 15px;
698
- margin-right: 15px;
699
- font-size: 14px;
700
- vertical-align: middle;
701
-
702
- &.el-button--primary {
703
- padding: 7px 14px;
704
- }
705
- }
706
- }
707
- }
708
-
709
- .el-button i {
710
- margin-right: 3px;
711
- }
712
-
713
- .small-padding-dialog {
714
- ::v-deep .el-dialog__header {
715
- //padding-top: 3px;
716
- //padding-bottom: 3px;
717
- background: #f1f2f3;
718
- }
719
-
720
- ::v-deep .el-dialog__body {
721
- //padding: 12px 15px 12px 15px;
722
- padding: 0;
723
-
724
- .el-alert.alert-padding {
725
- padding: 0 10px;
726
- }
727
- }
728
-
729
- ::v-deep .ace-container {
730
- border: 1px solid #dcdfe6;
731
- }
732
- }
733
-
734
- .dialog-title-light-bg {
735
- ::v-deep .el-dialog__header {
736
- background: #f1f2f3;
737
- }
738
- }
739
-
740
- .no-box-shadow {
741
- box-shadow: none;
742
- }
743
-
744
- .no-padding.el-tabs--border-card {
745
- ::v-deep .el-tabs__content {
746
- padding: 0;
747
- }
748
- }
749
-
750
- .form-render-wrapper {
751
- //height: calc(100vh - 142px);
752
- //all: revert !important; /* 防止表单继承el-dialog等外部样式,未生效,原因不明?? */
753
- }
754
-
755
- .form-render-wrapper.h5-layout {
756
- margin: 0 auto;
757
- width: 420px;
758
- border-radius: 15px;
759
- //border-width: 10px;
760
- box-shadow: 0 0 1px 10px #495060;
761
- height: calc(100vh - 142px);
762
- overflow-y: auto;
763
- overflow-x: hidden;
764
- }
765
-
766
- .form-render-wrapper.pad-layout {
767
- margin: 0 auto;
768
- width: 960px;
769
- border-radius: 15px;
770
- //border-width: 10px;
771
- box-shadow: 0 0 1px 10px #495060;
772
- height: calc(100vh - 125px);
773
- overflow-y: auto;
774
- overflow-x: hidden;
775
- }
776
-
777
- .node-tree-drawer ::v-deep {
778
- .el-drawer {
779
- padding: 10px;
780
- overflow: auto;
781
- }
782
-
783
- .el-drawer__header {
784
- margin-bottom: 12px;
785
- padding: 5px 5px 0;
786
- }
787
-
788
- .el-drawer__body {
789
- padding-left: 5px;
790
- }
791
- }
792
-
793
- /*.node-tree-scroll-bar {*/
794
- /* height: 100%;*/
795
- /* overflow: auto;*/
796
- /*}*/
797
-
798
- .node-tree ::v-deep {
799
- .el-tree > .el-tree-node:after {
800
- border-top: none;
801
- }
802
-
803
- .el-tree-node {
804
- position: relative;
805
- padding-left: 12px;
806
- }
807
-
808
- .el-tree-node__content {
809
- padding-left: 0 !important;
810
- }
811
-
812
- .el-tree-node__expand-icon.is-leaf {
813
- display: none;
814
- }
815
-
816
- .el-tree-node__children {
817
- padding-left: 12px;
818
- overflow: visible !important; /* 加入此行让el-tree宽度自动撑开,超出宽度el-draw自动出现水平滚动条! */
819
- }
820
-
821
- .el-tree-node :last-child:before {
822
- height: 38px;
823
- }
824
-
825
- .el-tree > .el-tree-node:before {
826
- border-left: none;
827
- }
828
-
829
- .el-tree > .el-tree-node:after {
830
- border-top: none;
831
- }
832
-
833
- .el-tree-node:before {
834
- content: "";
835
- left: -4px;
836
- position: absolute;
837
- right: auto;
838
- border-width: 1px;
839
- }
840
-
841
- .el-tree-node:after {
842
- content: "";
843
- left: -4px;
844
- position: absolute;
845
- right: auto;
846
- border-width: 1px;
847
- }
848
-
849
- .el-tree-node:before {
850
- border-left: 1px dashed #4386c6;
851
- bottom: 0px;
852
- height: 100%;
853
- top: -10px;
854
- width: 1px;
855
- }
856
-
857
- .el-tree-node:after {
858
- border-top: 1px dashed #4386c6;
859
- height: 20px;
860
- top: 12px;
861
- width: 16px;
862
- }
863
-
864
- .el-tree-node.is-current > .el-tree-node__content {
865
- background: #c2d6ea !important;
866
- }
867
-
868
- .el-tree-node__expand-icon {
869
- margin-left: -3px;
870
- padding: 6px 6px 6px 0px;
871
- font-size: 16px;
872
- }
873
- }
874
- </style>
1
+ <template>
2
+ <div class="toolbar-container">
3
+ <div class="left-toolbar">
4
+ <el-button
5
+ type="text"
6
+ :disabled="undoDisabled"
7
+ :title="i18nt('designer.toolbar.undoHint')"
8
+ @click="undoHistory"
9
+ >
10
+ <svg-icon icon-class="undo" />
11
+ </el-button>
12
+ <el-button
13
+ type="text"
14
+ :disabled="redoDisabled"
15
+ :title="i18nt('designer.toolbar.redoHint')"
16
+ @click="redoHistory"
17
+ >
18
+ <svg-icon icon-class="redo" />
19
+ </el-button>
20
+ <el-button-group>
21
+ <el-button
22
+ :type="layoutType === 'PC' ? 'info' : ''"
23
+ @click="changeLayoutType('PC')"
24
+ size="mini"
25
+ >
26
+ {{ i18nt("designer.toolbar.pcLayout") }}
27
+ </el-button>
28
+ <!-- <el-button :type="layoutType === 'Pad' ? 'info' : ''" @click="changeLayoutType('Pad')">{{ i18nt('designer.toolbar.padLayout') }}</el-button>-->
29
+ <el-button
30
+ :type="layoutType === 'H5' ? 'info' : ''"
31
+ @click="changeLayoutType('H5')"
32
+ size="mini"
33
+ >
34
+ {{ i18nt("designer.toolbar.mobileLayout") }}
35
+ </el-button>
36
+ </el-button-group>
37
+ <!-- <el-button type="" style="margin-left: 20px" :title="i18nt('designer.toolbar.nodeTreeHint')" @click="showNodeTreeDrawer"><svg-icon icon-class="node-tree" /></el-button>-->
38
+ </div>
39
+
40
+ <el-drawer
41
+ :title="i18nt('designer.toolbar.nodeTreeTitle')"
42
+ direction="ltr"
43
+ :visible.sync="showNodeTreeDrawerFlag"
44
+ :modal="false"
45
+ :size="280"
46
+ :destroy-on-close="true"
47
+ class="node-tree-drawer"
48
+ >
49
+ <el-tree
50
+ ref="nodeTree"
51
+ :data="nodeTreeData"
52
+ node-key="id"
53
+ default-expand-all
54
+ highlight-current
55
+ class="node-tree"
56
+ icon-class="el-icon-arrow-right"
57
+ @node-click="onNodeTreeClick"
58
+ ></el-tree>
59
+ </el-drawer>
60
+
61
+ <div class="right-toolbar" :style="{ width: 'auto' }">
62
+ <div class="right-toolbar-con">
63
+ <!-- <el-button type="text" @click="showFormConfigDialog=true">
64
+ <i class="iconfont icon-liebiaoshezhi-list-setting"/>
65
+ 表单/列表设置
66
+ </el-button>-->
67
+ <el-button
68
+ type="primary"
69
+ @click="saveReportTemplate()"
70
+ plain
71
+ v-if="
72
+ designer.vueInstance.isDev &&
73
+ designer.vueInstance.menuKindAuth.editAuth === 1 &&
74
+ !readonly
75
+ "
76
+ >
77
+ <i class="el-icon-check" />
78
+ 保存
79
+ </el-button>
80
+ <el-divider direction="vertical"></el-divider>
81
+ <el-button
82
+ v-if="showToolButton('clearDesignerButton') && !readonly"
83
+ type="text"
84
+ @click="clearFormWidget"
85
+ >
86
+ <i class="el-icon-delete" />
87
+ {{ i18nt("designer.toolbar.clear") }}
88
+ </el-button>
89
+ <el-button
90
+ v-if="showToolButton('previewFormButton')"
91
+ type="text"
92
+ @click="previewForm"
93
+ >
94
+ <i class="el-icon-view" />
95
+ {{ i18nt("designer.toolbar.preview") }}
96
+ </el-button>
97
+ <el-divider direction="vertical"></el-divider>
98
+ <el-button
99
+ v-if="showToolButton('importJsonButton') && !readonly"
100
+ type="text"
101
+ @click="importJson"
102
+ >
103
+ {{ i18nt("designer.toolbar.importJson") }}
104
+ </el-button>
105
+ <el-button
106
+ v-if="showToolButton('exportJsonButton')"
107
+ type="text"
108
+ @click="exportJson"
109
+ >
110
+ {{ i18nt("designer.toolbar.exportJson") }}
111
+ </el-button>
112
+ <!--<el-button v-if="showToolButton('exportCodeButton')" type="text" @click="exportCode">{{ i18nt('designer.toolbar.exportCode') }}</el-button>
113
+ <el-button v-if="showToolButton('generateSFCButton')" type="text" @click="generateSFC">
114
+ <svg-icon icon-class="vue-sfc" />
115
+ {{ i18nt('designer.toolbar.generateSFC') }}
116
+ </el-button> -->
117
+ <template v-for="(idx, slotName) in $slots">
118
+ <slot :name="slotName"></slot>
119
+ </template>
120
+ </div>
121
+ </div>
122
+
123
+ <el-dialog
124
+ :title="i18nt('designer.toolbar.preview')"
125
+ :visible.sync="showPreviewDialogFlag"
126
+ v-if="showPreviewDialogFlag"
127
+ :show-close="true"
128
+ :close-on-click-modal="false"
129
+ :close-on-press-escape="false"
130
+ center
131
+ v-dialog-drag
132
+ :destroy-on-close="true"
133
+ :append-to-body="true"
134
+ :modal-append-to-body="true"
135
+ class="small-padding-dialog preview-dialog"
136
+ width="75%"
137
+ :fullscreen="true"
138
+ @close="showPreviewDialogFlag = false"
139
+ >
140
+ <div>
141
+ <div
142
+ class="form-render-wrapper"
143
+ id="containt"
144
+ :class="[
145
+ layoutType === 'H5'
146
+ ? 'h5-layout'
147
+ : layoutType === 'Pad'
148
+ ? 'pad-layout'
149
+ : '',
150
+ ]"
151
+ >
152
+ <VFormRender
153
+ ref="preForm"
154
+ :form-json="formJson"
155
+ :form-data="testFormData"
156
+ :preview-state="true"
157
+ :option-data="testOptionData"
158
+ @appendButtonClick="testOnAppendButtonClick"
159
+ @buttonClick="testOnButtonClick"
160
+ @formChange="handleFormChange"
161
+ :reportTemplate.sync="reportTemplate"
162
+ v-if="showRender"
163
+ visible-key="showRender"
164
+ :parent-target="_self"
165
+ @reload="$reloadHandle"
166
+ >
167
+ <!--
168
+ <div slot="testSlot">aaaa</div>
169
+ -->
170
+ </VFormRender>
171
+ </div>
172
+ </div>
173
+ <!-- <el-tabs v-model="activeName" class="tab-box">
174
+ <el-tab-pane label="常规" name="first">
175
+ <div>
176
+ <div class="form-render-wrapper" id="containt"
177
+ :class="[layoutType === 'H5' ? 'h5-layout' : layoutType === 'Pad' ? 'pad-layout' : '']">
178
+ <VFormRender
179
+ ref="preForm"
180
+ :form-json="formJson"
181
+ :form-data="testFormData"
182
+ :preview-state="true"
183
+ :option-data="testOptionData"
184
+ @appendButtonClick="testOnAppendButtonClick"
185
+ @buttonClick="testOnButtonClick"
186
+ @formChange="handleFormChange"
187
+ :reportTemplate.sync="reportTemplate"
188
+ v-if="showRender" visible-key="showRender" :parent-target="_self" @reload="$reloadHandle"
189
+ >
190
+ &lt;!&ndash;
191
+ <div slot="testSlot">aaaa</div>
192
+ &ndash;&gt;
193
+ </VFormRender>
194
+ </div>
195
+ </div>
196
+ <code-editor v-model="testFunc" style="display: none"></code-editor>
197
+ </el-tab-pane>
198
+ <el-tab-pane label="列表" name="second">
199
+ <template v-if="false">
200
+ <div class="grid-height">
201
+ <vxe-grid ref="table-m1" v-bind="vxeOption" @resizable-change="$vxeTableUtil.onColumnWitchChange"
202
+ @custom="$vxeTableUtil.customHandle">
203
+ <template #form>
204
+ <div class="clearfix screen-btns">
205
+ <div class="fl">
206
+ <vxe-button status="primary" class="button-sty" icon="el-icon-plus">新增
207
+ </vxe-button>
208
+ </div>
209
+ <div class="fr">
210
+ <vxe-button icon="el-icon-brush" class="button-sty" type="text" status="primary" plain
211
+ @click="formData={}">重置
212
+ </vxe-button>
213
+ <vxe-button status="warning" icon="el-icon-search" class="button-sty">搜索
214
+ </vxe-button>
215
+ </div>
216
+ </div>
217
+ <template v-if="searchFields.length>0">
218
+ <vxe-form ref="form" class="screen-box" title-width="92px" title-align="right" :data="formData">
219
+ <vxe-form-item v-for="(item,index) in searchFields"
220
+ :key="index" :title="item.label+':'">
221
+ <template v-slot>
222
+ <el-input v-model="formData[item.prop]" size="small" clearable/>
223
+ </template>
224
+ </vxe-form-item>
225
+ </vxe-form>
226
+ </template>
227
+ </template>
228
+ </vxe-grid>
229
+ </div>
230
+ </template>
231
+ <template v-else>
232
+ <div id="containt">
233
+ <div class="tree-box fl">
234
+ <div class="tit"><b>机构分类</b></div>
235
+ <el-tree
236
+ :props="treeOption.defaultProps"
237
+ :load="loadNode"
238
+ node-key="id"
239
+ ref="tree"
240
+ highlight-current
241
+ lazy
242
+ :expand-on-click-node="false"
243
+ @node-click="handleNodeClick"
244
+ class="tree-list"
245
+ icon-class="el-icon-arrow-down"
246
+ ></el-tree>
247
+ </div>
248
+ <label id="labBtn">
249
+ <div class="icon">
250
+ <i class="el-icon-more"></i>
251
+ <i class="el-icon-more"></i>
252
+ </div>
253
+ </label>
254
+ <div class="main-right fr" style="padding-left:6px;">
255
+ <div class="grid-height">
256
+ <vxe-grid ref="table-m1" v-bind="vxeOption" @resizable-change="$vxeTableUtil.onColumnWitchChange"
257
+ @custom="$vxeTableUtil.customHandle">
258
+ <template #form>
259
+ <div class="clearfix screen-btns">
260
+ <div class="fl">
261
+ <vxe-button status="primary" class="button-sty" icon="el-icon-plus">新增
262
+ </vxe-button>
263
+ </div>
264
+ <div class="fr">
265
+ <vxe-button icon="el-icon-brush" class="button-sty" type="text" status="primary" plain
266
+ @click="formData={}">重置
267
+ </vxe-button>
268
+ <vxe-button status="warning" icon="el-icon-search" class="button-sty">搜索
269
+ </vxe-button>
270
+ </div>
271
+ </div>
272
+ <template v-if="searchFields.length>0">
273
+ <vxe-form ref="form" class="screen-box" title-width="92px" title-align="right" :data="formData">
274
+ <vxe-form-item v-for="(item,index) in searchFields"
275
+ :key="index" :title="item.label+':'">
276
+ <template v-slot>
277
+ <el-input v-model="formData[item.prop]" size="small" clearable/>
278
+ </template>
279
+ </vxe-form-item>
280
+ </vxe-form>
281
+ </template>
282
+ </template>
283
+ </vxe-grid>
284
+ </div>
285
+ </div>
286
+ </div>
287
+ </template>
288
+ </el-tab-pane>
289
+ </el-tabs>-->
290
+ <div slot="footer" class="dialog-footer" v-if="false">
291
+ <!-- <el-button type="primary" @click="getFormData" class="button-sty">{{ i18nt('designer.hint.getFormData') }}</el-button>
292
+ <el-button type="primary" @click="resetForm" class="button-sty">{{ i18nt('designer.hint.resetForm') }}</el-button>
293
+ <el-button type="primary" @click="setFormDisabled" class="button-sty">{{ i18nt('designer.hint.disableForm') }}</el-button>
294
+ <el-button type="primary" @click="setFormEnabled" class="button-sty">{{ i18nt('designer.hint.enableForm') }}</el-button>
295
+ <el-button type="" @click="showPreviewDialogFlag = false" class="button-sty">{{ i18nt('designer.hint.closePreview') }}</el-button> -->
296
+ <el-button v-if="false" @click="printFormJson" class="button-sty"
297
+ >PrintFormJson</el-button
298
+ >
299
+ <el-button v-if="false" @click="testValidate" class="button-sty"
300
+ >TestValidate</el-button
301
+ >
302
+ <el-button v-if="false" @click="testSetFormData" class="button-sty"
303
+ >TestSF</el-button
304
+ >
305
+ <el-button @click="$refs['preForm'].saveForm()" class="button-sty"
306
+ >测试保存</el-button
307
+ >
308
+ </div>
309
+ </el-dialog>
310
+
311
+ <el-dialog
312
+ :title="i18nt('designer.toolbar.importJson')"
313
+ :visible.sync="showImportJsonDialogFlag"
314
+ v-if="showImportJsonDialogFlag"
315
+ :show-close="true"
316
+ class="small-padding-dialog preview-dialog"
317
+ center
318
+ v-dialog-drag
319
+ :close-on-click-modal="false"
320
+ :close-on-press-escape="false"
321
+ :destroy-on-close="true"
322
+ :append-to-body="true"
323
+ :modal-append-to-body="true"
324
+ >
325
+ <el-alert
326
+ type="info"
327
+ :title="i18nt('designer.hint.importJsonHint')"
328
+ show-icon
329
+ class="alert-padding"
330
+ ></el-alert>
331
+ <code-editor
332
+ :mode="'json'"
333
+ :readonly="false"
334
+ v-model="importTemplate"
335
+ ></code-editor>
336
+ <div slot="footer" class="dialog-footer">
337
+ <el-button type="primary" @click="doJsonImport" class="button-sty"
338
+ >{{ i18nt("designer.hint.import") }}
339
+ </el-button>
340
+ <el-button @click="showImportJsonDialogFlag = false" class="button-sty"
341
+ >{{ i18nt("designer.hint.cancel") }}
342
+ </el-button>
343
+ </div>
344
+ </el-dialog>
345
+
346
+ <el-dialog
347
+ :title="i18nt('designer.toolbar.exportJson')"
348
+ :visible.sync="showExportJsonDialogFlag"
349
+ v-if="showExportJsonDialogFlag"
350
+ :show-close="true"
351
+ class="small-padding-dialog preview-dialog"
352
+ center
353
+ v-dialog-drag
354
+ :close-on-click-modal="false"
355
+ :close-on-press-escape="false"
356
+ :destroy-on-close="true"
357
+ :append-to-body="true"
358
+ :modal-append-to-body="true"
359
+ >
360
+ <code-editor
361
+ :mode="'json'"
362
+ :readonly="true"
363
+ v-model="jsonContent"
364
+ ></code-editor>
365
+ <div slot="footer" class="dialog-footer">
366
+ <el-button
367
+ type="primary"
368
+ class="copy-json-btn button-sty"
369
+ :data-clipboard-text="jsonRawContent"
370
+ @click="copyFormJson"
371
+ >{{ i18nt("designer.hint.copyJson") }}
372
+ </el-button>
373
+ <el-button @click="saveFormJson" class="button-sty">{{
374
+ i18nt("designer.hint.saveFormJson")
375
+ }}</el-button>
376
+ <el-button
377
+ type=""
378
+ @click="showExportJsonDialogFlag = false"
379
+ class="button-sty"
380
+ >
381
+ {{ i18nt("designer.hint.closePreview") }}
382
+ </el-button>
383
+ </div>
384
+ </el-dialog>
385
+
386
+ <el-dialog
387
+ :title="i18nt('designer.toolbar.exportCode')"
388
+ :visible.sync="showExportCodeDialogFlag"
389
+ v-if="showExportCodeDialogFlag"
390
+ :show-close="true"
391
+ class="small-padding-dialog preview-dialog"
392
+ center
393
+ v-dialog-drag
394
+ width="65%"
395
+ :close-on-click-modal="false"
396
+ :close-on-press-escape="false"
397
+ :destroy-on-close="true"
398
+ :append-to-body="true"
399
+ :modal-append-to-body="true"
400
+ >
401
+ <el-tabs
402
+ type="border-card"
403
+ class="no-box-shadow no-padding"
404
+ v-model="activeCodeTab"
405
+ >
406
+ <el-tab-pane label="Vue" name="vue">
407
+ <code-editor
408
+ :mode="'html'"
409
+ :readonly="true"
410
+ v-model="vueCode"
411
+ :user-worker="false"
412
+ ></code-editor>
413
+ </el-tab-pane>
414
+ <el-tab-pane label="HTML" name="html">
415
+ <code-editor
416
+ :mode="'html'"
417
+ :readonly="true"
418
+ v-model="htmlCode"
419
+ :user-worker="false"
420
+ ></code-editor>
421
+ </el-tab-pane>
422
+ </el-tabs>
423
+ <div slot="footer" class="dialog-footer">
424
+ <el-button
425
+ type="primary"
426
+ class="copy-vue-btn button-sty"
427
+ :data-clipboard-text="vueCode"
428
+ @click="copyVueCode"
429
+ >
430
+ {{ i18nt("designer.hint.copyVueCode") }}
431
+ </el-button>
432
+ <el-button
433
+ type="primary"
434
+ class="copy-html-btn button-sty"
435
+ :data-clipboard-text="htmlCode"
436
+ @click="copyHtmlCode"
437
+ >{{ i18nt("designer.hint.copyHtmlCode") }}
438
+ </el-button>
439
+ <el-button @click="saveVueCode" class="button-sty">{{
440
+ i18nt("designer.hint.saveVueCode")
441
+ }}</el-button>
442
+ <el-button @click="saveHtmlCode" class="button-sty">{{
443
+ i18nt("designer.hint.saveHtmlCode")
444
+ }}</el-button>
445
+ <el-button
446
+ type=""
447
+ @click="showExportCodeDialogFlag = false"
448
+ class="button-sty"
449
+ >
450
+ {{ i18nt("designer.hint.closePreview") }}
451
+ </el-button>
452
+ </div>
453
+ </el-dialog>
454
+
455
+ <el-dialog
456
+ :title="i18nt('designer.hint.exportFormData')"
457
+ :visible.sync="showFormDataDialogFlag"
458
+ v-if="showFormDataDialogFlag"
459
+ :show-close="true"
460
+ class="dialog-title-light-bg preview-dialog"
461
+ center
462
+ v-dialog-drag
463
+ :close-on-click-modal="false"
464
+ :close-on-press-escape="false"
465
+ :destroy-on-close="true"
466
+ :append-to-body="true"
467
+ :modal-append-to-body="true"
468
+ >
469
+ <div style="border: 1px solid #dcdfe6">
470
+ <code-editor
471
+ :mode="'json'"
472
+ :readonly="true"
473
+ v-model="formDataJson"
474
+ ></code-editor>
475
+ </div>
476
+ <div slot="footer" class="dialog-footer">
477
+ <el-button
478
+ type="primary"
479
+ class="copy-form-data-json-btn button-sty"
480
+ :data-clipboard-text="formDataRawJson"
481
+ @click="copyFormDataJson"
482
+ >
483
+ {{ i18nt("designer.hint.copyFormData") }}
484
+ </el-button>
485
+ <el-button @click="saveFormData" class="button-sty">{{
486
+ i18nt("designer.hint.saveFormData")
487
+ }}</el-button>
488
+ <el-button
489
+ type=""
490
+ @click="showFormDataDialogFlag = false"
491
+ class="button-sty"
492
+ >
493
+ {{ i18nt("designer.hint.closePreview") }}
494
+ </el-button>
495
+ </div>
496
+ </el-dialog>
497
+
498
+ <el-dialog
499
+ :title="i18nt('designer.toolbar.generateSFC')"
500
+ :visible.sync="showExportSFCDialogFlag"
501
+ v-if="showExportSFCDialogFlag"
502
+ :show-close="true"
503
+ class="small-padding-dialog preview-dialog"
504
+ center
505
+ v-dialog-drag
506
+ width="65%"
507
+ :close-on-click-modal="false"
508
+ :close-on-press-escape="false"
509
+ :destroy-on-close="true"
510
+ :append-to-body="true"
511
+ :modal-append-to-body="true"
512
+ >
513
+ <el-tabs
514
+ type="border-card"
515
+ class="no-box-shadow no-padding"
516
+ v-model="activeSFCTab"
517
+ >
518
+ <el-tab-pane label="Vue2" name="vue2">
519
+ <code-editor
520
+ :mode="'html'"
521
+ :readonly="true"
522
+ v-model="sfcCode"
523
+ :user-worker="false"
524
+ ></code-editor>
525
+ </el-tab-pane>
526
+ <el-tab-pane label="Vue3" name="vue3">
527
+ <code-editor
528
+ :mode="'html'"
529
+ :readonly="true"
530
+ v-model="sfcCodeV3"
531
+ :user-worker="false"
532
+ ></code-editor>
533
+ </el-tab-pane>
534
+ </el-tabs>
535
+ <div slot="footer" class="dialog-footer">
536
+ <el-button
537
+ type="primary"
538
+ class="copy-vue2-sfc-btn button-sty"
539
+ :data-clipboard-text="sfcCode"
540
+ @click="copyV2SFC"
541
+ >{{ i18nt("designer.hint.copyVue2SFC") }}
542
+ </el-button>
543
+ <el-button
544
+ type="primary"
545
+ class="copy-vue3-sfc-btn button-sty"
546
+ :data-clipboard-text="sfcCodeV3"
547
+ @click="copyV3SFC"
548
+ >{{ i18nt("designer.hint.copyVue3SFC") }}
549
+ </el-button>
550
+ <el-button @click="saveV2SFC" class="button-sty">{{
551
+ i18nt("designer.hint.saveVue2SFC")
552
+ }}</el-button>
553
+ <el-button @click="saveV3SFC" class="button-sty">{{
554
+ i18nt("designer.hint.saveVue3SFC")
555
+ }}</el-button>
556
+ <el-button
557
+ type=""
558
+ @click="showExportSFCDialogFlag = false"
559
+ class="button-sty"
560
+ >
561
+ {{ i18nt("designer.hint.closePreview") }}
562
+ </el-button>
563
+ </div>
564
+ </el-dialog>
565
+ <el-dialog
566
+ :title="i18nt('表单编辑')"
567
+ v-if="showFormConfigDialog"
568
+ :visible.sync="showFormConfigDialog"
569
+ :modal="false"
570
+ :show-close="!0"
571
+ custom-class="dialog-style list-dialog"
572
+ :close-on-click-modal="!1"
573
+ :close-on-press-escape="!1"
574
+ :destroy-on-close="!0"
575
+ v-el-drag-dialog
576
+ v-el-dialog-center
577
+ >
578
+ <div class="cont" style="height: auto; max-height: 500px">
579
+ <el-scrollbar class="setting-scrollbar">
580
+ <form-setting
581
+ :designer="designer"
582
+ :form-config="designer.formConfig"
583
+ ></form-setting>
584
+ </el-scrollbar>
585
+ </div>
586
+ </el-dialog>
587
+ </div>
588
+ </template>
589
+
590
+ <script>
591
+ import VFormRender from "../../../../components/xform/form-render/index";
592
+ import indexMixin from "./indexMixin.js";
593
+ import FormSetting from "../../../../components/xform/form-designer/setting-panel/form-setting";
594
+
595
+ export default {
596
+ name: "ToolbarPanel",
597
+ components: {
598
+ VFormRender,
599
+ FormSetting,
600
+ },
601
+ inject: ["readonly"],
602
+ mixins: [indexMixin],
603
+ data() {
604
+ return {
605
+ defaultProps: {
606
+ label: "name", //这里是树结构中需显示的数据(即接口返回的需展示在页面上的参数)
607
+ children: [],
608
+ isLeaf: "leaf",
609
+ },
610
+ treeOption: {
611
+ title: "机构分类",
612
+ defaultProps: {
613
+ label: "name",
614
+ children: [],
615
+ isLeaf: "leaf",
616
+ },
617
+ url1: "/user/sale_org/getAllList",
618
+ url2: "/user/sale_org/getChildren",
619
+ formRewriteMap: {
620
+ saleOrgId: "id",
621
+ saleOrgName: "name",
622
+ },
623
+ preHadnleData(row) {
624
+ row.leaf = !row.hasChild;
625
+ },
626
+ treeNodeParam(row) {
627
+ return {
628
+ parent: row.id,
629
+ enabled: true,
630
+ };
631
+ },
632
+ },
633
+ };
634
+ },
635
+ methods: {
636
+ handleNodeClick(data, node, v) {
637
+ let treeOption = this.treeOption;
638
+ let formRewriteMap = treeOption.formRewriteMap || {};
639
+ let formData = {};
640
+ Object.keys(formRewriteMap).forEach((key) => {
641
+ // this.$set(this.formData, key, data[formRewriteMap[key]]);
642
+ formData[key] = data[formRewriteMap[key]];
643
+ });
644
+
645
+ this.$forceUpdate();
646
+ /*
647
+ this.searchEvent();*/
648
+ },
649
+ // 异步树叶子节点懒加载逻辑
650
+ loadNode(node, resolve) {
651
+ let treeOption = this.treeOption;
652
+ let id = node && node.data && node.data.id ? node.data.id || "" : "";
653
+ let param = (treeOption.treeNodeParam
654
+ ? treeOption.treeNodeParam(node?.data || {})
655
+ : null) || {
656
+ parent: id,
657
+ enabled: true,
658
+ };
659
+ let url = !id ? treeOption.url1 : treeOption.url2;
660
+ this.$http({
661
+ url: url,
662
+ method: "post",
663
+ data: param,
664
+ success: (res) => {
665
+ res.objx.forEach((value) => {
666
+ treeOption.preHadnleData(value);
667
+ });
668
+ resolve(res.objx);
669
+ },
670
+ });
671
+ },
672
+ },
673
+ };
674
+ </script>
675
+
676
+ <style lang="scss" scoped>
677
+ div.toolbar-container {
678
+ //min-width: 728px; /* 解决工具按钮栏换行的问题 */
679
+ /* 上一行css有问题,当窗口宽度不足时会把按钮挤出到右边的属性设置区,弃之! */
680
+ }
681
+
682
+ .left-toolbar {
683
+ float: left;
684
+ font-size: 16px;
685
+ }
686
+
687
+ .right-toolbar {
688
+ float: right;
689
+ //width: 420px;
690
+ text-align: right;
691
+ overflow: hidden;
692
+
693
+ .right-toolbar-con {
694
+ text-align: right;
695
+
696
+ .el-button {
697
+ margin-left: 15px;
698
+ margin-right: 15px;
699
+ font-size: 14px;
700
+ vertical-align: middle;
701
+
702
+ &.el-button--primary {
703
+ padding: 7px 14px;
704
+ }
705
+ }
706
+ }
707
+ }
708
+
709
+ .el-button i {
710
+ margin-right: 3px;
711
+ }
712
+
713
+ .small-padding-dialog {
714
+ ::v-deep .el-dialog__header {
715
+ //padding-top: 3px;
716
+ //padding-bottom: 3px;
717
+ background: #f1f2f3;
718
+ }
719
+
720
+ ::v-deep .el-dialog__body {
721
+ //padding: 12px 15px 12px 15px;
722
+ padding: 0;
723
+
724
+ .el-alert.alert-padding {
725
+ padding: 0 10px;
726
+ }
727
+ }
728
+
729
+ ::v-deep .ace-container {
730
+ border: 1px solid #dcdfe6;
731
+ }
732
+ }
733
+
734
+ .dialog-title-light-bg {
735
+ ::v-deep .el-dialog__header {
736
+ background: #f1f2f3;
737
+ }
738
+ }
739
+
740
+ .no-box-shadow {
741
+ box-shadow: none;
742
+ }
743
+
744
+ .no-padding.el-tabs--border-card {
745
+ ::v-deep .el-tabs__content {
746
+ padding: 0;
747
+ }
748
+ }
749
+
750
+ .form-render-wrapper {
751
+ //height: calc(100vh - 142px);
752
+ //all: revert !important; /* 防止表单继承el-dialog等外部样式,未生效,原因不明?? */
753
+ }
754
+
755
+ .form-render-wrapper.h5-layout {
756
+ margin: 0 auto;
757
+ width: 420px;
758
+ border-radius: 15px;
759
+ //border-width: 10px;
760
+ box-shadow: 0 0 1px 10px #495060;
761
+ height: calc(100vh - 142px);
762
+ overflow-y: auto;
763
+ overflow-x: hidden;
764
+ }
765
+
766
+ .form-render-wrapper.pad-layout {
767
+ margin: 0 auto;
768
+ width: 960px;
769
+ border-radius: 15px;
770
+ //border-width: 10px;
771
+ box-shadow: 0 0 1px 10px #495060;
772
+ height: calc(100vh - 125px);
773
+ overflow-y: auto;
774
+ overflow-x: hidden;
775
+ }
776
+
777
+ .node-tree-drawer ::v-deep {
778
+ .el-drawer {
779
+ padding: 10px;
780
+ overflow: auto;
781
+ }
782
+
783
+ .el-drawer__header {
784
+ margin-bottom: 12px;
785
+ padding: 5px 5px 0;
786
+ }
787
+
788
+ .el-drawer__body {
789
+ padding-left: 5px;
790
+ }
791
+ }
792
+
793
+ /*.node-tree-scroll-bar {*/
794
+ /* height: 100%;*/
795
+ /* overflow: auto;*/
796
+ /*}*/
797
+
798
+ .node-tree ::v-deep {
799
+ .el-tree > .el-tree-node:after {
800
+ border-top: none;
801
+ }
802
+
803
+ .el-tree-node {
804
+ position: relative;
805
+ padding-left: 12px;
806
+ }
807
+
808
+ .el-tree-node__content {
809
+ padding-left: 0 !important;
810
+ }
811
+
812
+ .el-tree-node__expand-icon.is-leaf {
813
+ display: none;
814
+ }
815
+
816
+ .el-tree-node__children {
817
+ padding-left: 12px;
818
+ overflow: visible !important; /* 加入此行让el-tree宽度自动撑开,超出宽度el-draw自动出现水平滚动条! */
819
+ }
820
+
821
+ .el-tree-node :last-child:before {
822
+ height: 38px;
823
+ }
824
+
825
+ .el-tree > .el-tree-node:before {
826
+ border-left: none;
827
+ }
828
+
829
+ .el-tree > .el-tree-node:after {
830
+ border-top: none;
831
+ }
832
+
833
+ .el-tree-node:before {
834
+ content: "";
835
+ left: -4px;
836
+ position: absolute;
837
+ right: auto;
838
+ border-width: 1px;
839
+ }
840
+
841
+ .el-tree-node:after {
842
+ content: "";
843
+ left: -4px;
844
+ position: absolute;
845
+ right: auto;
846
+ border-width: 1px;
847
+ }
848
+
849
+ .el-tree-node:before {
850
+ border-left: 1px dashed #4386c6;
851
+ bottom: 0px;
852
+ height: 100%;
853
+ top: -10px;
854
+ width: 1px;
855
+ }
856
+
857
+ .el-tree-node:after {
858
+ border-top: 1px dashed #4386c6;
859
+ height: 20px;
860
+ top: 12px;
861
+ width: 16px;
862
+ }
863
+
864
+ .el-tree-node.is-current > .el-tree-node__content {
865
+ background: #c2d6ea !important;
866
+ }
867
+
868
+ .el-tree-node__expand-icon {
869
+ margin-left: -3px;
870
+ padding: 6px 6px 6px 0px;
871
+ font-size: 16px;
872
+ }
873
+ }
874
+ </style>