cloud-web-corejs 1.0.281 → 1.1.0-dev.11

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