olp-table 5.3.7 → 5.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/{olp-table/olp-table.common.js → olp-table.common.js} +67 -67
  2. package/{olp-table/olp-table.umd.js → olp-table.umd.js} +67 -67
  3. package/{olp-table/olp-table.umd.min.js → olp-table.umd.min.js} +67 -67
  4. package/package.json +7 -87
  5. package/.env.build +0 -1
  6. package/.env.prod +0 -1
  7. package/README.md +0 -26
  8. package/babel.config.js +0 -5
  9. package/jsconfig.json +0 -22
  10. package/public/favicon.ico +0 -0
  11. package/public/index.html +0 -17
  12. package/rmMode.bat +0 -1
  13. package/src/App.vue +0 -199
  14. package/src/api/crud.js +0 -22
  15. package/src/api/dist.js +0 -6
  16. package/src/assets/iconfont/iconfont.css +0 -20
  17. package/src/assets/iconfont/iconfont.json +0 -16
  18. package/src/assets/iconfont/iconfont.ttf +0 -0
  19. package/src/assets/iconfont/iconfont.woff +0 -0
  20. package/src/assets/iconfont/iconfont.woff2 +0 -0
  21. package/src/assets/logo.png +0 -0
  22. package/src/components/auto-height/index.vue +0 -75
  23. package/src/components/codemirror-tag.vue +0 -100
  24. package/src/components/lazy-load-select.vue +0 -107
  25. package/src/components/ol-dialog-excel.vue +0 -112
  26. package/src/components/ol-dialog-import.vue +0 -304
  27. package/src/components/ol-dialog-json.vue +0 -83
  28. package/src/components/ol-dialog-table.vue +0 -81
  29. package/src/components/ol-dialog-upload-file.vue +0 -208
  30. package/src/components/ol-dict-tag.vue +0 -271
  31. package/src/components/ol-select-dom.vue +0 -71
  32. package/src/components/ol-table-filter.vue +0 -28
  33. package/src/components/ol-table-render.vue +0 -44
  34. package/src/components/ol-table-select.vue +0 -154
  35. package/src/components/pinia-init.vue +0 -18
  36. package/src/components/table/model/ModelMixins.js +0 -43
  37. package/src/components/table/model/model-index.vue +0 -124
  38. package/src/components/table/model/ot-left-right.vue +0 -18
  39. package/src/components/table/model/ot-left-tree-right-table.scss +0 -14
  40. package/src/components/table/model/ot-left-tree-right-table.vue +0 -41
  41. package/src/components/table/model/ot-top-1-bottom-2.vue +0 -39
  42. package/src/components/table/model/ot-top-2-bottom-1.vue +0 -38
  43. package/src/components/table/model/ot-top-2-bottom-2.vue +0 -38
  44. package/src/components/table/model/ot-top-bottom.vue +0 -18
  45. package/src/components/table/model/splitpanesModel.css +0 -22
  46. package/src/components/table/model/splitpanesModel.vue +0 -54
  47. package/src/components/table/ol-form/index.vue +0 -544
  48. package/src/components/table/ol-form-v3/index.vue +0 -455
  49. package/src/components/table/ol-main-form-sub-table/index.vue +0 -611
  50. package/src/components/table/ol-pager/index.vue +0 -46
  51. package/src/components/table/ol-table/components/ol-table-column-config/columnIndex.vue +0 -233
  52. package/src/components/table/ol-table/components/ol-table-column-config/index.vue +0 -145
  53. package/src/components/table/ol-table/components/ol-table-column-dict-color/index.vue +0 -88
  54. package/src/components/table/ol-table/index.vue +0 -232
  55. package/src/components/table/ol-table-operate/index.vue +0 -61
  56. package/src/components/table/ol-table-search/index.vue +0 -17
  57. package/src/components/table/ol-table-tool-btn/index.vue +0 -60
  58. package/src/components/tree/components/o-tree.vue +0 -289
  59. package/src/components/tree/index.vue +0 -46
  60. package/src/components/v-component/index.vue +0 -43
  61. package/src/config/dev-config.js +0 -5
  62. package/src/config/prod-config.js +0 -5
  63. package/src/config/shared-config.js +0 -20
  64. package/src/data.js +0 -9378
  65. package/src/directives/permission/hasPermi.js +0 -63
  66. package/src/directives/permission/hasRole.js +0 -30
  67. package/src/main.js +0 -55
  68. package/src/mixins/VTMixin/DefaultMethods.js +0 -821
  69. package/src/mixins/VTMixin/OTMixinBody.js +0 -105
  70. package/src/mixins/VTMixin/OTMixinBodyFooter.js +0 -93
  71. package/src/mixins/VTMixin/OTMixinBodyMethods.js +0 -421
  72. package/src/mixins/VTMixin/OTMixinColumnMethod.js +0 -454
  73. package/src/mixins/VTMixin/OTMixinInitMethod.js +0 -130
  74. package/src/mixins/VTMixin/OTMixinPager.js +0 -38
  75. package/src/mixins/VTMixin/OTMixinSortable.js +0 -43
  76. package/src/mixins/VTMixin/index.js +0 -18
  77. package/src/package/index.js +0 -20
  78. package/src/plugins/axios.js +0 -61
  79. package/src/store/dict.js +0 -76
  80. package/src/store/dictType.js +0 -52
  81. package/src/store/permi.js +0 -45
  82. package/src/styles/common.scss +0 -37
  83. package/src/styles/index.scss +0 -48
  84. package/src/styles/theme.scss +0 -32
  85. package/src/utils/AESCRUDUtils.js +0 -87
  86. package/src/utils/DateUtils.js +0 -35
  87. package/src/utils/ExcelUtil.js +0 -159
  88. package/src/utils/TableSortUtil.js +0 -91
  89. package/src/utils/columnProp.js +0 -3
  90. package/src/utils/groupCompute.js +0 -68
  91. package/src/utils/http/httpFactory.js +0 -92
  92. package/src/utils/http/httpFactory2.js +0 -79
  93. package/src/utils/http/httpUtil.js +0 -123
  94. package/src/utils/http/httpUtils.js +0 -38
  95. package/src/utils/loadStyle.js +0 -14
  96. package/src/utils/message.js +0 -56
  97. package/src/utils/object.js +0 -80
  98. package/src/utils/security/TokenUtil.js +0 -19
  99. package/src/utils/tree.js +0 -54
  100. package/src/utils/util.js +0 -127
  101. package/src/views/Test/index.vue +0 -77
  102. package/src/views/Test/index2.vue +0 -33
  103. package/src/views/components/btn-config/index.vue +0 -202
  104. package/src/views/components/option-config/index.vue +0 -192
  105. package/src/views/db/chineseToEnglish.vue +0 -127
  106. package/src/views/db/filed.vue +0 -395
  107. package/src/views/db/index.vue +0 -192
  108. package/src/views/db/preview/index.vue +0 -139
  109. package/src/views/db/preview/left.vue +0 -204
  110. package/src/views/db/preview/right.vue +0 -466
  111. package/src/views/groupTable/index.vue +0 -137
  112. package/src/views/groupTable/ol-table-column-config/columnIndex.vue +0 -194
  113. package/src/views/groupTable/ol-table-column-config/index.vue +0 -92
  114. package/src/views/table/add-or-edit/config/base-config/index.vue +0 -539
  115. package/src/views/table/add-or-edit/config/base-config/table-form.vue +0 -333
  116. package/src/views/table/add-or-edit/config/column-config/header-config.vue +0 -475
  117. package/src/views/table/add-or-edit/config/column-config/index.vue +0 -790
  118. package/src/views/table/add-or-edit/config/data/column.js +0 -218
  119. package/src/views/table/add-or-edit/config/data/crud.js +0 -122
  120. package/src/views/table/add-or-edit/config/data/events.js +0 -109
  121. package/src/views/table/add-or-edit/config/data/method.js +0 -127
  122. package/src/views/table/add-or-edit/config/data/option.js +0 -725
  123. package/src/views/table/add-or-edit/config/data/page.js +0 -79
  124. package/src/views/table/add-or-edit/config/field-config/filed-config-table.vue +0 -42
  125. package/src/views/table/add-or-edit/config/field-config/index.vue +0 -91
  126. package/src/views/table/add-or-edit/config/form-config/index.vue +0 -1180
  127. package/src/views/table/add-or-edit/config/index.vue +0 -377
  128. package/src/views/table/add-or-edit/config/initFormObject.js +0 -25
  129. package/src/views/table/add-or-edit/config/script-config/LeftMeun.vue +0 -71
  130. package/src/views/table/add-or-edit/config/script-config/index.vue +0 -70
  131. package/src/views/table/add-or-edit/config/table-config/btn-config.vue +0 -340
  132. package/src/views/table/add-or-edit/config/table-config/btn-sort.vue +0 -132
  133. package/src/views/table/add-or-edit/config/table-config/index.vue +0 -446
  134. package/src/views/table/add-or-edit/configOld/dataTags/filed-config-table-model.vue +0 -41
  135. package/src/views/table/add-or-edit/configOld/dataTags/filed-config.vue +0 -74
  136. package/src/views/table/add-or-edit/configOld/dataTags/index.vue +0 -439
  137. package/src/views/table/add-or-edit/configOld/dataTags/set-table-sql.vue +0 -79
  138. package/src/views/table/add-or-edit/configOld/dataTags/table-on-config.vue +0 -74
  139. package/src/views/table/add-or-edit/configOld/index.vue +0 -127
  140. package/src/views/table/add-or-edit/configOld/tableTags/columnConfig.js +0 -5
  141. package/src/views/table/add-or-edit/configOld/tableTags/index.vue +0 -353
  142. package/src/views/table/add-or-edit/configOld/tableTags/operation-but-config.vue +0 -75
  143. package/src/views/table/add-or-edit/configOld/tableTags/tool-but-config.vue +0 -92
  144. package/src/views/table/add-or-edit/index.vue +0 -201
  145. package/src/views/table/add-or-edit/themeModel/index.vue +0 -53
  146. package/src/views/table/add-or-edit/themeModel/init-model-table.vue +0 -48
  147. package/src/views/table/add-or-edit/themeModel/init-model.vue +0 -81
  148. package/src/views/table/add-or-edit/themeModel/left-right.vue +0 -24
  149. package/src/views/table/add-or-edit/themeModel/left-tree-right-table.vue +0 -75
  150. package/src/views/table/add-or-edit/themeModel/olTableSearchModelMixins.js +0 -42
  151. package/src/views/table/add-or-edit/themeModel/splitpanesThemeModel.vue +0 -49
  152. package/src/views/table/add-or-edit/themeModel/top-1-bottom-2.vue +0 -29
  153. package/src/views/table/add-or-edit/themeModel/top-2-bottom-1.vue +0 -32
  154. package/src/views/table/add-or-edit/themeModel/top-2-bottom-2.vue +0 -32
  155. package/src/views/table/add-or-edit/themeModel/top-bottom.vue +0 -14
  156. package/src/views/table/index.vue +0 -43
  157. package/src/views/table/index2.vue +0 -199
  158. package/src/views/table/preview/index.vue +0 -29
  159. package/src/views/tree/components/config-core-data.vue +0 -85
  160. package/src/views/tree/components/config-core-table.vue +0 -362
  161. package/src/views/tree/components/config-core-tree/data/events.js +0 -95
  162. package/src/views/tree/components/config-core-tree/data/option.js +0 -88
  163. package/src/views/tree/components/config-core-tree/data/prop.js +0 -28
  164. package/src/views/tree/components/config-core-tree/index.vue +0 -181
  165. package/src/views/tree/components/config-core.vue +0 -42
  166. package/src/views/tree/components/form-config/index.vue +0 -967
  167. package/src/views/tree/index.vue +0 -424
  168. package/vue.config.js +0 -44
  169. /package/{olp-table/demo.html → demo.html} +0 -0
  170. /package/{olp-table/fonts → fonts}/iconfont.1720006583309.7e4906d9.woff +0 -0
  171. /package/{olp-table/fonts → fonts}/iconfont.1720006583309.947a27f0.ttf +0 -0
@@ -1,1180 +0,0 @@
1
- <template>
2
- <div>
3
- <!-- 头部部分(操作按钮,总的配置信息) -->
4
- <div class="header">
5
- <el-form label-width="80">
6
- <el-row>
7
- <el-col :span="6">
8
- <el-form-item label="表单类型">
9
- <el-radio-group v-model="formType">
10
- <el-radio :value="0" :label="0">基础表单</el-radio>
11
- <el-radio :value="1" :label="1">设计器表单</el-radio>
12
- <!-- <el-radio :label="2" >编程文件表单</el-radio>-->
13
- </el-radio-group>
14
- </el-form-item>
15
- </el-col>
16
- <el-col :span="6" v-if="formType == 0">
17
- <el-form-item label="表单设计">
18
- <!-- 表单设计 -->
19
- <el-radio-group v-model="formConfig" style="margin-left: 50px;" @change="refreshForm">
20
- <el-radio :value="0" :label="0">快捷设计</el-radio>
21
- <el-radio :value="1" :label="1">编码设计</el-radio>
22
- </el-radio-group>
23
- </el-form-item>
24
- </el-col>
25
- <el-col :span="6" v-if="formType == 1">
26
- <el-form-item label="表单名称">
27
- <olDictTag v-model="customForm" @change="onChangeForm" placeholder="请输入表单名称"
28
- code="online,form_designer,description,id" like="desc_code"
29
- ></olDictTag>
30
- </el-form-item>
31
- </el-col>
32
- <el-col :span="6" v-if="formType == 2">
33
- <el-form-item label="表单文件路径">
34
- <el-input style="margin-left: 20px;width:500px" v-model="customUrl"
35
- placeholder="请输入表单文件路径:views/xxx">
36
- <template #append>
37
- <el-button :icon="Search" @click="$refs.vComponent.setComponent(customUrl,'init')"/>
38
- </template>
39
- </el-input>
40
- </el-form-item>
41
- </el-col>
42
- <el-button type="primary" style="margin-left: 40px" @click="showViewForm">表单弹框预览</el-button>
43
- <el-button type="primary" v-if="formConfig == 0" @click="addColumn">新增列</el-button>
44
- </el-row>
45
- <el-row>
46
- <el-col :span="6">
47
- <el-form-item label="后端API">
48
- <el-input v-model="form.saveUrl"
49
- style="margin-left: 20px;"></el-input>
50
- </el-form-item>
51
- </el-col>
52
-
53
- <el-col :span="4" v-if="props.type == 'edit' && formType == 0 && !form.saveUrl">
54
- <span style="margin-left:5px;color:red;float: left;position: relative;line-height: 30px;">更新条件*</span>
55
- <el-form-item label-width="12">
56
- <el-input ref="updateKey" v-model="form.updateKey"></el-input>
57
- </el-form-item>
58
- </el-col>
59
- <el-col :span="4" v-else-if="props.type != 'edit' && formType == 0 && !form.saveUrl">
60
- <span style="margin-left:5px;float: left;position: relative;line-height: 30px;">uuid</span>
61
- <el-form-item label-width="12">
62
- <el-input ref="updateKey" v-model="form.updateKey"></el-input>
63
- </el-form-item>
64
- </el-col>
65
- <el-col :span="6">
66
- <el-form-item label="请求类型">
67
- <el-radio-group v-model="form.requestType">
68
- <el-radio value="post" label="POST">POST</el-radio>
69
- <el-radio value="put" label="PUT">PUT</el-radio>
70
- </el-radio-group>
71
- </el-form-item>
72
- </el-col>
73
-
74
- <el-col :span="4">
75
- <vForm ref="vFormViewer" v-if="dialogTableVisible"></vForm>
76
- </el-col>
77
- </el-row>
78
- </el-form>
79
- </div>
80
-
81
-
82
- <el-row style="height:565px" :gutter="24">
83
-
84
- <!-- 基础表单 -->
85
- <el-col :span="10" v-if="formType == 0">
86
- <el-card class="box-card">
87
- <!-- 编辑表单实时预览 -->
88
- <el-scrollbar max-height="500px">
89
- <!-- 动态表单-->
90
- <avue-form v-model="state.baseForm" :option="baseOption">
91
- <!-- 动态生成插槽 -->
92
- <template v-for="slotRow in dynamicSlotsTable" :key="slotRow.slotName" #[slotRow.slotName]="{ disabled, size }">
93
- <!-- 根据配置动态渲染插槽内容 -->
94
- <ol-table-select @olTableSelectChange="olTableSelectChange" :slotName="slotRow.slotName" :http="http"
95
- :uuid="slotRow.config.uuid"
96
- :config="slotRow.config"></ol-table-select>
97
- </template>
98
- </avue-form>
99
- </el-scrollbar>
100
- </el-card>
101
- </el-col>
102
-
103
- <!-- 表单设计 -->
104
- <el-col :span="14" v-if="formType == 0">
105
- <!-- 快捷设计 -->
106
- <el-card class="box-card" v-show="formConfig == 0">
107
- <!-- 表单 -->
108
- <el-form :inline="true" :model="baseOption" size="small" class="demo-form-inline">
109
- <el-row>
110
- <el-col :span="6">
111
- <el-form-item label="每行个数">
112
- <el-input-number style="width: 120px" v-model="designForm.span" placeholder="请输入每行的个数"
113
- @change="designFormChange"
114
- :min="1" :max="4"/>
115
- </el-form-item>
116
- </el-col>
117
- <el-col :span="8">
118
- <el-form-item label="label宽度">
119
- <el-input-number style="width: 150px" v-model="baseOption.labelWidth" placeholder="label宽度"
120
- @change="designFormChange"
121
- />
122
- </el-form-item>
123
- </el-col>
124
- <el-col :span="9">
125
- <el-form-item label="复制选中字段">
126
- <el-radio-group v-model="copeFiled">
127
- <el-radio :value="0" :label="0" @click.stop="copeFiledMethod">字段</el-radio>
128
- <el-radio :value="1" :label="1" @click.stop="copeFiledMethod(1)">隐藏</el-radio>
129
- <el-radio :value="2" :label="2" @click.stop="copeFiledMethod(2)">显示</el-radio>
130
- <!-- <el-radio :label="2" >编程文件表单</el-radio>-->
131
- </el-radio-group>
132
- </el-form-item>
133
- </el-col>
134
- <el-col :span="8">
135
- <el-form-item label="弹框标题">
136
- <el-input v-model="baseOption.title"
137
- style="margin-left: 20px;"></el-input>
138
- </el-form-item>
139
- </el-col>
140
- <el-col :span="8">
141
- <el-form-item label="弹窗宽度">
142
- <el-input-number style="width: 240px" v-model="baseOption.diaLogWidth" placeholder="请输入弹窗宽度"
143
- @change="designFormChange"
144
- :min="100" :max="1920"/>
145
- </el-form-item>
146
- </el-col>
147
- <el-col :span="8">
148
- <el-form-item label="弹窗高度">
149
- <el-input-number style="width: 240px" v-model="baseOption.diaLogHeight" placeholder="请输入弹窗高度"
150
- @change="designFormChange"
151
- :min="50" :max="1080"/>
152
- </el-form-item>
153
- </el-col>
154
- </el-row>
155
-
156
- </el-form>
157
-
158
- <!-- 表格 -->
159
- <vxe-grid
160
- v-bind="gridOptions"
161
- ref="vexGridRef"
162
- @edit-closed="dictChange"
163
- :expand-config="{labelField: 'seq'}"
164
- resizable
165
- >
166
- <!-- 通用弹窗 -->
167
- <template #change="{column,row}">
168
- <olCodemirrorTag
169
- :size="'small'" v-model="row[column.field]" @confirm="refreshForm"/>
170
- </template>
171
- <!-- 通用输入框 -->
172
- <template #input_default="{column,row}">
173
- <el-input v-model="row[column.field]" @change="refreshForm" size="small"></el-input>
174
- </template>
175
- <!-- 通用多选框 -->
176
- <template #checkedBox_header="{ column }">
177
- <div style="display: flex;align-items: center;">
178
- <el-checkbox v-model="column.params.all" @change="headerClick(column)"></el-checkbox>
179
- <span style="margin-left: 5px;">{{ column.title }} </span>
180
-
181
- </div>
182
- </template>
183
- <template #checkedBox_default="{ column, row }">
184
- <el-checkbox v-model="row[column.field]" true-value="1" false-value="0"
185
- @change="refreshForm"/>
186
- </template>
187
- <!-- 通用下拉框 -->
188
- <template #select_default="{column,row}">
189
- <olDictTag
190
- code="select_dom"
191
- :size="'small'"
192
- v-model="row[column.field]"
193
- @change="dictChange(row)"></olDictTag>
194
- </template>
195
- <!-- 展开行 -->
196
- <template #seq="{ rowIndex}">
197
- <span>{{ rowIndex + 1 }}</span>
198
- </template>
199
- <template #content="{ row }">
200
- <div style="padding:30px 0 12px;display: flex;">
201
- <avue-form ref="formRef"
202
- :option="expandForm"
203
- v-model="row.form"
204
- @change="refreshForm()"
205
- >
206
- <!-- 通用弹窗 -->
207
- <template #attrs>
208
- <olCodemirrorTag v-model="row.form['attrs']"/>
209
- </template>
210
- </avue-form>
211
- </div>
212
- </template>
213
- <template #operate="{ row }">
214
- <vxe-button size="mini" @click="removeRowEvent(row)" style="padding:0" icon="vxe-icon-delete"
215
- status="danger" type="text"/>
216
- <vxe-button size="mini" style="padding:0" type="text">
217
- <span class="vxe-icon-sort"/>
218
- </vxe-button>
219
- </template>
220
- </vxe-grid>
221
- </el-card>
222
-
223
- <!-- 编码设计 -->
224
- <div style="width:100%;height:calc(100% - 40px);position: relative;" v-show="formConfig == 1">
225
- <codemirror
226
- ref="mycode"
227
- style="height: 92%;max-height: 510px;text-align: left;"
228
- v-model="codeForm"
229
- :autofocus="true"
230
- :lint="true"
231
- :indent-with-tab="true"
232
- :lineWrapping="true"
233
- :tabSize="2"
234
- :extensions="state.extensions"
235
- />
236
- <el-button @click="codeToData(true)" type="primary" style="height:40px;width: 100%;">生成</el-button>
237
- </div>
238
-
239
- </el-col>
240
-
241
- <!-- 自定义表单 -->
242
- <el-col :span="24" v-if="formType == 1 || formType == 2" style="height: 100%;">
243
- <el-card class="box-card">
244
- <el-scrollbar max-height="500px">
245
- <VFormRender v-if="formType == 1" :key="formKey" :form-json="formJson" :form-data="formData"
246
- :option-data="optionData"
247
- ref="vFormRef">
248
- </VFormRender>
249
- <vComponent ref="vComponent" v-if="formType == 2"/>
250
- </el-scrollbar>
251
- </el-card>
252
- </el-col>
253
- </el-row>
254
-
255
- </div>
256
- </template>
257
-
258
- <script setup>
259
- import vForm from "@/components/table/ol-form"
260
- import {Delete, Search} from '@element-plus/icons-vue'
261
- import {reactive, ref, defineExpose, defineEmits, nextTick, onMounted, defineProps, inject, markRaw,computed} from "vue";
262
- import vComponent from "@/components/v-component/index.vue";
263
- import {Codemirror} from "vue-codemirror";
264
- import {javascript} from "@codemirror/lang-javascript";
265
- import {oneDark} from "@codemirror/theme-one-dark";
266
- import {useMessage} from "@/utils/message";
267
- import {get, post} from "@/utils/http/httpUtils";
268
- import Sortable from "sortablejs";
269
- import {storeDictType} from "@/store/dictType";
270
- import {storeDict} from "@/store/dict";
271
- import VXETable from "vxe-table";
272
- import {handleTree} from "@/utils/tree";
273
- import {initDictTable} from "@/api/dist";
274
- import OlTableSelect from "@/components/ol-table-select.vue";
275
-
276
-
277
- const msg = useMessage() // 消息弹窗
278
- const http = inject('http')
279
- const dictType = storeDictType();
280
- const props = defineProps({type: {}});
281
- const customUrl = ref(undefined)
282
-
283
- const vexGridRef = ref(null)
284
- const vFormViewer = ref(null)
285
- const dialogTableVisible = ref(false)
286
-
287
- function setShow() {
288
- updateSort()
289
- }
290
-
291
- function showViewForm() {
292
- dialogTableVisible.value = true;
293
- nextTick(() => {
294
- let data = {
295
- type: formType.value,
296
- theme: 't1'
297
- }
298
- data.form = data.type == 0 ? baseOption.value : formJson.value
299
- vFormViewer.value.init(data)
300
- })
301
- }
302
-
303
- // 基础表单
304
- const baseOption = ref({
305
- submitBtn: false,
306
- emptyBtn: false,
307
- labelWidth: 125,
308
- comCommit: false,//如果为true,只提交form
309
- column: []
310
- })
311
- //编码设计
312
- const codeForm = ref()
313
- const copeFiled = ref();
314
- const dict = storeDict();
315
- //表单类型
316
- const formType = ref(0)
317
- //表单设计
318
- const formConfig = ref(0)
319
- //快捷设计表单
320
- const designForm = ref({
321
- span: 2,
322
- })
323
- //快捷设计表格
324
- const gridOptions = ref({
325
- border: true,
326
- resizable: true,
327
- showOverflow: true,
328
- size: 'mini',
329
- height: 450,
330
- editConfig: {
331
- trigger: 'click',
332
- mode: 'cell'
333
- },
334
- rowConfig: {
335
- useKey: true,
336
- },
337
- align: 'center',
338
- columns: [
339
-
340
- {
341
- title: '操作',
342
- width: 70,
343
- slots: {
344
- default: 'operate'
345
- }
346
- },
347
- {type: 'checkbox', width: 40,},
348
- {
349
- type: "expand",
350
- width: 61,
351
- title: "序号",
352
- className: 'colExpand',
353
- slots: {
354
- content: 'content',
355
- default: 'seq'
356
- },
357
- },
358
- {
359
- field: 'prop',
360
- minWidth: 130,
361
- editRender: {props: {clearable: true}, events: {change: refreshForm}, name: 'input'},
362
- title: "字段名"
363
- },
364
- {
365
- field: 'title',
366
- width: 120,
367
- title: "标题"
368
- },
369
- {
370
- field: 'showName',
371
- width: 120,
372
- title: "label",
373
- editRender: {props: {clearable: true}, events: {change: refreshForm}, name: 'input'},
374
- },
375
- {
376
- title: '必填',
377
- field: 'required',
378
- width: 70,
379
- params: {
380
- all: null
381
- },
382
- slots: {
383
- header: 'checkedBox_header',
384
- default: 'checkedBox_default'
385
- },
386
- },
387
- {
388
- title: ' 不保存',
389
- field: 'tableField',
390
- width: 90,
391
- params: {
392
- all: null
393
- },
394
- slots: {
395
- header: 'checkedBox_header',
396
- default: 'checkedBox_default'
397
- },
398
- },
399
- {
400
- title: '控件类型',
401
- field: 'selectDom',
402
- width: 100,
403
- editRender: {props: {clearable: true, filterable: true}, name: '$select', events: {change: refreshForm}, options: dict.val('select_dom')}
404
- },
405
- {
406
- title: '数据字典',
407
- field: 'dictCode',
408
- allowCreate: true,
409
- width: 120,
410
- filterable: true,
411
- //数据字典属性的配置对象
412
- props: {
413
- label: 'dictLabel',
414
- value: 'dictValue'
415
- },
416
- editRender: {
417
- props: {clearable: true, filterable: true}, name: '$select',
418
- events: {change: refreshForm}, options: dictType.val()
419
- }
420
- },
421
- {
422
- title: '更新回调',
423
- field: 'change',
424
- width: 100,
425
- slots: {
426
- default: 'change'
427
- },
428
- },
429
- ],
430
- data: []
431
- })
432
- //展开行表单
433
- const expandForm = ref({
434
- submitBtn: false,
435
- emptyBtn: false,
436
- span: 8,
437
- column: [
438
- {
439
- label: '禁用',
440
- prop: 'disabled',
441
- type: 'switch',
442
- value: false,
443
- dicData: [{
444
- label: '否',
445
- value: false
446
- }, {
447
- label: '是',
448
- value: true
449
- }]
450
- },
451
- {
452
- label: '隐藏',
453
- prop: 'display',
454
- type: 'switch',
455
- value: true,
456
- dicData: [{
457
- label: '否',
458
- value: true
459
- }, {
460
- label: '是',
461
- value: false
462
- }]
463
- },
464
- {
465
- label: '标题宽度',
466
- prop: 'labelWidth',
467
- },
468
- {
469
- label: '默认值',
470
- prop: 'value',
471
- },
472
- {
473
- label: '输入框提示',
474
- prop: 'placeholder',
475
- },
476
- {
477
- label: '数据字典表',
478
- prop: 'dictTable',
479
- },
480
- {
481
- label: '字典dictUrl',
482
- prop: 'dictUrl',
483
- },
484
- {
485
- label: '其他属性',
486
- prop: 'attrs',
487
- slots: {
488
- default: 'attrs'
489
- },
490
- },
491
- ]
492
- })
493
- //自定义表单值
494
- const formJson = ref({})
495
- const formData = reactive({})
496
- const formKey = ref(0)
497
- const optionData = reactive({})
498
- const vFormRef = ref(null)
499
- const customForm = ref("")
500
-
501
- const copeFiledMethod = (value) => {
502
- let checkboxRecords = vexGridRef.value.getCheckboxRecords();
503
- if (checkboxRecords.length != 0) {
504
- let filed = "";
505
- for (let {prop} of checkboxRecords) {
506
- if (filed.length != 0) {
507
- filed += ",";
508
- }
509
- filed += prop;
510
- }
511
- if (value == 1) {
512
- filed = "hideColumn('" + filed + "');";
513
- } else if (value == 2) {
514
- filed = "showColumn('" + filed + "');";
515
- }
516
- navigator.clipboard.writeText(filed).then(() => {
517
- msg.success("复制成功!" + filed);
518
- }).catch(err => {
519
- msg.error("复制失败!" + filed);
520
- });
521
- }
522
- }
523
- //表头全选框更新
524
- const headerClick = (column) => {
525
- gridOptions.value.data.forEach(item => {
526
- if (column.params.all) {
527
- item.rules = [{
528
- required: true,
529
- message: '请输入' + item.title,
530
- trigger: 'blur'
531
- }]
532
- item[column.field] = '1'
533
- } else {
534
- item[column.field] = '0'
535
- item.rules = null
536
- }
537
- })
538
- refreshForm()
539
- }
540
-
541
- //获取数据
542
- const setData = (data) => {
543
- if (!data) {
544
- return
545
- }
546
- formType.value = parseInt(data.formMain.designer)
547
- for (let key of Object.keys(form)) {
548
- form[key] = data.formMain[key];
549
- }
550
- customForm.value = data.formMain.customForm
551
- //基础表单
552
- //JSON字符串
553
- if (data.formJson.optionJson) {
554
- codeForm.value = data.formJson.optionJson
555
- codeToData()
556
- }
557
- if (data.formJson.customJson) {
558
- //自定义表单
559
- formJson.value = JSON.parse(data.formJson.customJson)
560
- }
561
- }
562
-
563
- function getColumn(item) {
564
- let obj = {
565
- prop: item.field,
566
- title: item.title || item.label,
567
- sort: gridOptions.value.data ? gridOptions.value.data.length : 0,
568
- //为空默认文本框
569
- selectDom: item.selectDom ? item.selectDom : 1,
570
- dictCode: item.dictCode,
571
- form: {dictTable: item.dictTable}
572
- }
573
- return obj;
574
- }
575
-
576
- //列配置新增多选更新
577
- const updateData = (row, column) => {
578
- if (row[column.field] == '1') {
579
- for (const item of gridOptions.value.data) {
580
- if (item.prop == row.field) return
581
- }
582
- let tableObj = getColumn(row);
583
- gridOptions.value.data.push(tableObj)
584
- } else {
585
- gridOptions.value.data = gridOptions.value.data.filter(item => item.prop != row.field)
586
- }
587
- reloadData();
588
- refreshForm()
589
- }
590
-
591
- function parseJson(column) {
592
- let attrs = column.attrs;
593
- if (attrs) {
594
- try {
595
- attrs = JSON.parse(attrs)
596
- for (let key of Object.keys(attrs)) {
597
- column[key] = attrs;
598
- }
599
- } catch (e) {
600
- console.error("解析attrs异常", attrs)
601
- }
602
- }
603
- }
604
-
605
- function reloadData(data) {
606
- if (data) {
607
- gridOptions.value.data = data;
608
- }
609
- if (vexGridRef.value) {
610
- vexGridRef.value.reloadData(gridOptions.value.data)
611
- }
612
- }
613
-
614
- //列配置新增全选与全不选
615
- const setAll = ({list, isAll}) => {
616
- let data = []
617
- if (isAll) {
618
- for (let item of list) {
619
- data.push(getColumn(item));
620
- }
621
- }
622
- reloadData(data);
623
- refreshForm()
624
- }
625
-
626
- //基础表单 > 快捷设计表单更新
627
- const designFormChange = () => {
628
- //行数转换为尺寸
629
- baseOption.value.span = parseInt(24 / designForm.value.span)
630
- //JSON格式化
631
- codeForm.value = jsonFormat(baseOption.value)
632
- updateSort()
633
- }
634
-
635
-
636
- //控件类型更新
637
- const dictChange = ({row}) => {
638
- console.info('控件类型发生改变了',row)
639
- if(row.selectDom === '22'){//如果是表格选择器,则展开行,因为一定要配置其他属性,所以需要展开行
640
- if(row.form.attrs == null || row.form.attrs === ''){
641
- row.form.attrs = '{\n' +
642
- ' "olTableSelect":{\n' +
643
- ' "uuid":"1901841070608990208",\n' +
644
- ' "key":"id",//数据库要存的值,如:外键ID或某个编码\n' +
645
- ' "label":"name",//选中数据后回显的数据\n' +
646
- ' "labelIsAppendCode":false,//默认,可不填或不该\n' +
647
- ' "otherResult":"name:name,age:age,sex:sex"//需要额外字段数据格式配置:"源字段1:目标字段1,源字段2:目标字段2"\n' +
648
- ' }\n' +
649
- '}'
650
- }
651
- vexGridRef.value.setRowExpand([row], true);//展开行
652
- }
653
- nextTick(() => {
654
- baseOption.value.column.forEach(item => {
655
- if (item.prop == row.prop) {
656
- item.type = getFormType(row)//控件类型
657
- codeForm.value = jsonFormat(baseOption.value)
658
- return
659
- }
660
- })
661
- })
662
-
663
- }
664
- let update = true;
665
-
666
- function refreshForm() {
667
- if (update != true) {
668
- setTimeout(() => {
669
- refreshForm()
670
- }, 200)
671
- }
672
- update = false;
673
- let data = JSON.parse(JSON.stringify(gridOptions.value.data));
674
- let columns = []
675
- let index = 1;
676
- for (let d of data) {
677
- d.sort = index;
678
- let column = getCodeColumn(d);
679
- columns.push(column);
680
- index++;
681
- }
682
- columns.sort((a, b) => {
683
- return a.sort - b.sort
684
- })
685
- setCodeForm(columns)
686
- setBaseOption(columns);
687
- update = true;
688
- }
689
-
690
- function setDictCode(column) {
691
- if (column.selectDom != 1 && (column.dictCode || column.dictTable || column.dictUrl)) {
692
- getDicData(column)
693
- }
694
- }
695
-
696
- function codeToData(alter) {
697
- try {
698
- getFormatter();
699
- let value = JSON.parse(codeForm.value);
700
- setSort(value);
701
- codeForm.value = jsonFormat(value)
702
- //更新快捷设计表格的数据
703
- setTableData(value)
704
- if (!value.labelWidth) value.labelWidth = 125
705
- baseOption.value = value;
706
- setBaseOption(value.column);
707
- value.span = value.span ? value.span : 12
708
- //计算表单每行个数
709
- designForm.value.span = parseInt(24 / value.span)
710
- nextTick(() => {
711
- refreshForm()
712
- })
713
- if (alter) {
714
- msg.success("生成成功!");
715
- }
716
- } catch (e) {
717
- console.error(e)
718
- msg.error('生成失败,请检查对象格式是否正确' + e)
719
- }
720
- }
721
-
722
- function setCodeForm(columns) {
723
- let option = JSON.parse(JSON.stringify(baseOption.value));
724
- option.column = JSON.parse(JSON.stringify(columns));
725
- codeForm.value = jsonFormat(option)
726
- }
727
-
728
- function setEvents(column) {
729
- for (let event of events) {
730
- if (column[event] != undefined && column[event] != '') {
731
- try {
732
- let e = replaceDollarBraces(column[event]);
733
- column[event] = eval("(params)=>{" + e + "}");
734
- } catch (e) {
735
- console.error(e)
736
- }
737
- } else {
738
- delete column[event];
739
- }
740
- }
741
- }
742
-
743
- function replaceDollarBraces(str) {
744
- return str.replace(/\$\{?([^{}]+)\}?/g, function (match, innerContent) {
745
- return innerContent ? `'${innerContent}'` : match;
746
- });
747
- }
748
-
749
- function setBaseOption(columns) {
750
- columns = JSON.parse(JSON.stringify(columns));
751
- for (let column of columns) {
752
- try {
753
- parseJson(column);
754
- setEvents(column);
755
- setDictCode(column)
756
- } catch (e) {
757
- console.error(e)
758
- }
759
- }
760
- baseOption.value.column = columns;
761
- }
762
-
763
- let events = ['change'];
764
-
765
- function getFormatter() {
766
- //正则表达式替换字符串的值
767
- let v = codeForm.value.replace(/,}/gi, "}").replace(/,]/gi, "]");
768
- codeForm.value = JSON.stringify(JSON.parse(v), null, 4)
769
- }
770
-
771
- function setSort(value) {
772
- value.column.sort((a, b) => {
773
- return a.sort - b.sort
774
- })
775
- for (let i = 0; i < value.column.length; i++) {
776
- value.column.sort = i + 1
777
- }
778
- }
779
-
780
- function getCodeColumn(row) {
781
- let columnObj = {};
782
- for (let column of gridOptions.value.columns) {
783
- if (column.field !== undefined && row[column.field] !== undefined && row[column.field] !== '' && row[column.field] !== null) {
784
- columnObj[column.field] = row[column.field];
785
- }
786
- }
787
- for (let column of expandForm.value.column) {
788
- if (column.prop !== undefined && row.form[column.prop] !== undefined && row.form[column.prop] !== '' && row.form[column.prop] !== null) {
789
- columnObj[column.prop] = row.form[column.prop];
790
- }
791
- }
792
- columnObj.label = columnObj.showName ? columnObj.showName : columnObj.title;
793
- if (columnObj.required == '1') {
794
- columnObj.rules = [{
795
- required: true,
796
- message: '请输入' + row.title,
797
- trigger: 'blur'
798
- }]
799
- }
800
- if (columnObj.required == '0') {
801
- delete columnObj.rules;
802
- delete columnObj.required;
803
- }
804
- if (columnObj != 1) {
805
- columnObj.type = getFormType(row)
806
- }
807
- return columnObj;
808
- }
809
-
810
- function getTableRow(data) {
811
- let obj = JSON.parse(JSON.stringify(data));
812
- obj.form = {};
813
- for (let column of gridOptions.value.columns) {
814
- if (column.field !== undefined && data[column.field] !== undefined && data[column.field].toString().trim() !== '') {
815
- obj[column.field] = data[column.field];
816
- }
817
- }
818
- for (let column of expandForm.value.column) {
819
- if (column.prop !== undefined && data[column.prop] !== undefined && data[column.prop].toString().trim() !== '') {
820
- obj.form[column.prop] = data[column.prop];
821
- }
822
- }
823
- for (let event of events) {
824
- if (obj[event] != undefined && !(obj[event] instanceof Function)) {
825
- obj[event] = obj[event].toString()
826
- }
827
- }
828
- if (data.label) {
829
- obj.showName = data.label;
830
- if (!obj.title) {
831
- obj.title = data.label;
832
- }
833
- }
834
-
835
- if (data.label) {
836
- obj.showName = data.label;
837
- obj.title = data.label;
838
- }
839
- delete obj.type;
840
- return obj
841
- }
842
-
843
- //编码设计生成后更新快捷设计表格数据
844
- const setTableData = (value) => {
845
- let datas = [];
846
- for (let column of value.column) {
847
- let data = getTableRow(column);
848
- datas.push(data);
849
- }
850
- nextTick(() => {
851
- gridOptions.value.data = datas;
852
- })
853
- }
854
-
855
- function setDicData(column) {
856
- baseOption.value.column.forEach(item => {
857
- if (item.prop == column.prop) {
858
- item.dicData = column.dicData
859
- return
860
- }
861
- })
862
- }
863
-
864
- const setDictUrl = (column) => {
865
- let dictUrl = column.dictUrl.split(",");
866
- let url;
867
- let label = 'label';
868
- let value = 'value';
869
- let parentId = 'parentId';
870
- // get,url,label,value,parent_id
871
- let doGet = true;
872
- if (dictUrl.length > 1
873
- ) {
874
- if (dictUrl[0].toString().toLowerCase() == 'post') {
875
- doGet = false;
876
- }
877
- url = dictUrl[1];
878
- label = dictUrl[2];
879
- value = dictUrl[3];
880
- parentId = dictUrl[4];
881
- } else {
882
- url = dictUrl[0];
883
- }
884
-
885
- if (doGet) {
886
- get(http, url).then((data) => {
887
- column.dicData.length = 0;
888
- if (column.type == 'tree') {
889
- for (let da of data) {
890
- da['label'] = da[label]
891
- da['value'] = da[value]
892
- }
893
- column.dicData = handleTree(data, value, parentId);
894
- } else {
895
- data.forEach((d) => {
896
- column.dicData.push(d);
897
- })
898
- }
899
- })
900
- } else {
901
- post(http, column.dictUrl, false, false).then(({data}) => {
902
- column.dicData.length = 0;
903
- if (column.type == 'tree') {
904
- for (let da of data) {
905
- da['label'] = da[label]
906
- da['value'] = da[value]
907
- }
908
- column.dicData = handleTree(data, value, parentId);
909
- } else {
910
- data.forEach((da) => {
911
- da['label'] = da[label]
912
- da['value'] = da[value]
913
- column.dicData.push(da);
914
- })
915
- }
916
- })
917
- }
918
- }
919
- //获取字典
920
- const getDicData = (column) => {
921
- let code = column.dictCode
922
- if (code == "" || !code) {
923
- delete column.dicData
924
- } else if (column.dictTable) {
925
- getParameter(column);
926
- } else if (column.dictUrl) {
927
- setDictUrl(column);
928
- } else {
929
- const dict = storeDict();
930
- column.dicData = dict.val(column.dictCode)
931
- setDicData(column)
932
- }
933
- }
934
-
935
- function getParameter(column) {
936
- let params = {}
937
- let dictTable = JSON.parse(JSON.stringify(column.dictTable));
938
- if (dictTable instanceof Object) {
939
- params = dictTable;
940
- } else {
941
- dictTable = column.dictTable.split(",");
942
- params["dbName"] = dictTable[0];
943
- params["tableName"] = dictTable[1];
944
- params["label"] = dictTable[2];
945
- params["value"] = dictTable[3];
946
- if (dictTable[4]) {
947
- params["parentValue"] = dictTable[4];
948
- }
949
- }
950
- initDictTable(http, params).then((data) => {
951
- column.dicData.length = 0;
952
- for (let d of data) {
953
- d.label = d.dictLabel;
954
- d.value = d.dictValue;
955
- }
956
- if (params["parentValue"]) {
957
- data = handleTree(data, 'value', 'parentValue');
958
- column.dicData.push(data);
959
- } else {
960
- for (let d of data) {
961
- d.label = d.dictLabel;
962
- d.value = d.dictValue;
963
- column.dicData.push(d);
964
- }
965
- }
966
- setDicData(column)
967
- })
968
-
969
- }
970
-
971
- //JSON格式化
972
- const jsonFormat = (val) => {
973
- return JSON.stringify(JSON.parse(JSON.stringify(val)), null, 4)
974
- }
975
-
976
- //控件类型转换
977
- const getFormType = (row) => {
978
- let val = row.selectDom
979
- if (val != '' || val != undefined || val) {
980
- let type = ""
981
- let map = {
982
- input: '1',
983
- select: '2',
984
- datetime: '3',
985
- time: '30',
986
- radio: '4',
987
- checkbox: '5',
988
- date: '6',
989
- number: '7',
990
- tree: '15',
991
- textarea: '10'
992
- }
993
- if (isNaN(val)) {
994
- //不是数字,通过健找值
995
- type = map[val]
996
- } else {
997
- //是数字,通过值找健
998
- // 使用 Object.values() 获取对象的所有值
999
- const arr = Object.values(map);
1000
- // 使用 Array.prototype.indexOf() 查找指定值在数组中的索引位置
1001
- const index = arr.indexOf(val);
1002
- // 使用 Object.keys()[index] 获取对应索引位置的键名
1003
- type = Object.keys(map)[index];
1004
- if (type == "") {
1005
- type = 'input'
1006
- } else if (['select', 'checkbox', 'radio', 'tree'].indexOf(type) != -1) {
1007
- getDicData(row)
1008
- }
1009
- }
1010
- return type
1011
- }
1012
- }
1013
- onMounted(() => {
1014
- updateSort()
1015
- })
1016
-
1017
- function addColumn() {
1018
- gridOptions.value.data.push({
1019
- sort: gridOptions.value.data.length,
1020
- prop: "",
1021
- title: "",
1022
- showName: "",
1023
- selectDom: "1",
1024
- label: "",
1025
- type: "input",
1026
- form:{}
1027
- });
1028
- refreshForm();
1029
- }
1030
-
1031
- //表格拖动更新
1032
- const updateSort = () => {
1033
- nextTick(() => {
1034
- if (!vexGridRef.value) {
1035
- return;
1036
- }
1037
- //el绑定元素需要找到vxe的DOM下的tbody元素
1038
- Sortable.create(vexGridRef.value.$el.querySelector('.body--wrapper>.vxe-table--body tbody'), {
1039
- animation: 130,//拖拽动画过渡时间
1040
- handle: '.vxe-icon-sort',
1041
- // 结束拖拽
1042
- onEnd: function (/**Event*/{oldIndex, newIndex}) {
1043
- const list = JSON.parse(JSON.stringify(gridOptions.value.data)) //保存旧数据
1044
- const targetRow = list.splice(oldIndex, 1)[0] //保存移动的元素并删除原列表中移动的元素
1045
- list.splice(newIndex, 0, targetRow) //插入到目标新索引中
1046
- const newsArr = JSON.parse(JSON.stringify(list)) //重新赋值数组
1047
- //将新表格数据重新排序
1048
- for (let i = 0; i < newsArr.length; i++) {
1049
- newsArr[i].sort = i
1050
- }
1051
- gridOptions.value.data = newsArr;
1052
- //把表单的排序号和表格的排序号保持一致
1053
- newsArr.forEach(tableItem => {
1054
- baseOption.value.column.forEach(formItem => {
1055
- if (tableItem.prop == formItem.prop) {
1056
- formItem.sort = tableItem.sort
1057
- }
1058
- })
1059
- })
1060
- //将表单重新排序
1061
- baseOption.value.column.sort((a, b) => {
1062
- return a.sort - b.sort
1063
- })
1064
- codeForm.value = jsonFormat(baseOption.value)
1065
- },
1066
- });
1067
- });
1068
- }
1069
- const form = reactive({
1070
- updateKey: '',
1071
- saveUrl: '',
1072
- title: '',
1073
- requestType: 'post',
1074
- formType: props.type,
1075
- })
1076
- const state = reactive({
1077
- extensions: [javascript(), oneDark],
1078
- values: null,
1079
- err: false,
1080
- baseForm: {},
1081
- baseFormRender: {},
1082
- })
1083
-
1084
- const formMap = reactive({})
1085
-
1086
- // 更换表单
1087
- const onChangeForm = (value) => {
1088
- if (value) {
1089
- get(http, "/online/formDesigner/queryById", {
1090
- id: value
1091
- }).then((data) => {
1092
- formJson.value = JSON.parse(data.formJson)
1093
- formKey.value++
1094
- })
1095
- }
1096
- }
1097
- const getForm = () => {
1098
- return markRaw(form)
1099
- }
1100
- // 获取新增表单配置数据
1101
- const getData = () => {
1102
- if (formType.value == 0 && gridOptions.value.data.length == 0) {
1103
- return undefined;
1104
- }
1105
- refreshForm();
1106
- let obj = {
1107
- vexTable: gridOptions.value,
1108
- baseForm: baseOption.value,
1109
- codeForm: codeForm.value,
1110
- designer: formType.value,
1111
- customJson: formJson.value,
1112
- customForm: customForm.value
1113
- }
1114
- return obj
1115
- }
1116
- /**
1117
- * 右边字段配置删除行数据
1118
- * @param row
1119
- * @returns {Promise<void>}
1120
- */
1121
- const removeRowEvent = async (row) => {
1122
- const type = await VXETable.modal.confirm('您确定要删除该数据?')
1123
- const $grid = vexGridRef.value
1124
- if ($grid && type === 'confirm') {
1125
- await $grid.remove(row)
1126
- gridOptions.value.data = gridOptions.value.data.filter(item => item._X_ROW_KEY != row._X_ROW_KEY)
1127
- removeColumnEvent(row)
1128
- }
1129
- }
1130
- /**
1131
- * 删除表单属性(快捷设计属性)
1132
- * @param row
1133
- */
1134
- const removeColumnEvent = (row) => {
1135
- baseOption.value.column = baseOption.value.column.filter(item => item.prop != row.prop)
1136
- codeForm.value = jsonFormat(baseOption.value)
1137
- }
1138
-
1139
- /**
1140
- * 表格选择器回调函数
1141
- * @param data
1142
- */
1143
- function olTableSelectChange(slotName,data){
1144
- console.info('插槽名称', slotName)
1145
- console.info('表格回传的数据', data)
1146
- }
1147
-
1148
- // 动态获取需要渲染的插槽名称列表
1149
- const dynamicSlotsTable = computed(() => {
1150
- const result = baseOption.value.column
1151
- .filter((item) => item.selectDom === '22') // 筛选出需要动态插槽的字段(表单选择)
1152
- .map((item) => {
1153
- let slotObj = {slotName: item.prop}
1154
- slotObj.config = item.attrs!=null?JSON.parse(item.attrs).olTableSelect:{}
1155
- return slotObj;
1156
- }); // 获取字段名作为插槽名
1157
- return result;
1158
- });
1159
-
1160
- // 对外暴露
1161
- defineExpose({
1162
- setData, updateData, setAll, getData, setShow, getForm
1163
- })
1164
- </script>
1165
-
1166
- <style lang="scss" scoped>
1167
- .cm-editor {
1168
- height: 100%;
1169
- }
1170
-
1171
-
1172
- :deep(.el-form-item) {
1173
- margin-bottom: 5px;
1174
- }
1175
-
1176
- .box-card {
1177
- width: calc(100% - 24px);
1178
- height: calc(100% - 24px);
1179
- }
1180
- </style>