olp-table 5.3.4 → 5.3.5

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/package.json +12 -92
  2. package/.env.build +0 -1
  3. package/README.md +0 -26
  4. package/babel.config.js +0 -5
  5. package/jsconfig.json +0 -22
  6. package/public/favicon.ico +0 -0
  7. package/public/index.html +0 -17
  8. package/rmMode.bat +0 -1
  9. package/src/App.vue +0 -199
  10. package/src/api/crud.js +0 -22
  11. package/src/api/dist.js +0 -6
  12. package/src/assets/iconfont/iconfont.css +0 -20
  13. package/src/assets/iconfont/iconfont.json +0 -16
  14. package/src/assets/iconfont/iconfont.ttf +0 -0
  15. package/src/assets/iconfont/iconfont.woff +0 -0
  16. package/src/assets/iconfont/iconfont.woff2 +0 -0
  17. package/src/assets/logo.png +0 -0
  18. package/src/components/auto-height/index.vue +0 -75
  19. package/src/components/codemirror-tag.vue +0 -100
  20. package/src/components/lazy-load-select.vue +0 -107
  21. package/src/components/ol-dialog-excel.vue +0 -112
  22. package/src/components/ol-dialog-import.vue +0 -304
  23. package/src/components/ol-dialog-json.vue +0 -82
  24. package/src/components/ol-dialog-table.vue +0 -81
  25. package/src/components/ol-dialog-upload-file.vue +0 -208
  26. package/src/components/ol-dict-tag.vue +0 -271
  27. package/src/components/ol-select-dom.vue +0 -71
  28. package/src/components/ol-table-filter.vue +0 -28
  29. package/src/components/ol-table-render.vue +0 -44
  30. package/src/components/ol-table-select.vue +0 -150
  31. package/src/components/pinia-init.vue +0 -18
  32. package/src/components/table/model/ModelMixins.js +0 -43
  33. package/src/components/table/model/model-index.vue +0 -121
  34. package/src/components/table/model/ot-left-right.vue +0 -18
  35. package/src/components/table/model/ot-left-tree-right-table.scss +0 -14
  36. package/src/components/table/model/ot-left-tree-right-table.vue +0 -41
  37. package/src/components/table/model/ot-top-1-bottom-2.vue +0 -39
  38. package/src/components/table/model/ot-top-2-bottom-1.vue +0 -38
  39. package/src/components/table/model/ot-top-2-bottom-2.vue +0 -38
  40. package/src/components/table/model/ot-top-bottom.vue +0 -18
  41. package/src/components/table/model/splitpanesModel.css +0 -22
  42. package/src/components/table/model/splitpanesModel.vue +0 -54
  43. package/src/components/table/ol-form/index.vue +0 -537
  44. package/src/components/table/ol-form-v3/index.vue +0 -455
  45. package/src/components/table/ol-main-form-sub-table/index.vue +0 -601
  46. package/src/components/table/ol-pager/index.vue +0 -46
  47. package/src/components/table/ol-table/components/ol-table-column-config/columnIndex.vue +0 -233
  48. package/src/components/table/ol-table/components/ol-table-column-config/index.vue +0 -145
  49. package/src/components/table/ol-table/components/ol-table-column-dict-color/index.vue +0 -88
  50. package/src/components/table/ol-table/index.vue +0 -232
  51. package/src/components/table/ol-table-operate/index.vue +0 -61
  52. package/src/components/table/ol-table-search/index.vue +0 -17
  53. package/src/components/table/ol-table-tool-btn/index.vue +0 -60
  54. package/src/components/tree/components/o-tree.vue +0 -289
  55. package/src/components/tree/index.vue +0 -46
  56. package/src/components/v-component/index.vue +0 -43
  57. package/src/config/dev-config.js +0 -5
  58. package/src/config/prod-config.js +0 -5
  59. package/src/config/shared-config.js +0 -20
  60. package/src/data.js +0 -9378
  61. package/src/directives/permission/hasPermi.js +0 -63
  62. package/src/directives/permission/hasRole.js +0 -30
  63. package/src/main.js +0 -55
  64. package/src/mixins/VTMixin/DefaultMethods.js +0 -749
  65. package/src/mixins/VTMixin/OTMixinBody.js +0 -105
  66. package/src/mixins/VTMixin/OTMixinBodyFooter.js +0 -93
  67. package/src/mixins/VTMixin/OTMixinBodyMethods.js +0 -420
  68. package/src/mixins/VTMixin/OTMixinColumnMethod.js +0 -450
  69. package/src/mixins/VTMixin/OTMixinInitMethod.js +0 -130
  70. package/src/mixins/VTMixin/OTMixinPager.js +0 -38
  71. package/src/mixins/VTMixin/OTMixinSortable.js +0 -43
  72. package/src/mixins/VTMixin/index.js +0 -18
  73. package/src/package/index.js +0 -20
  74. package/src/plugins/axios.js +0 -61
  75. package/src/store/dict.js +0 -76
  76. package/src/store/dictType.js +0 -52
  77. package/src/store/permi.js +0 -45
  78. package/src/styles/common.scss +0 -37
  79. package/src/styles/index.scss +0 -48
  80. package/src/styles/theme.scss +0 -32
  81. package/src/utils/AESCRUDUtils.js +0 -87
  82. package/src/utils/DateUtils.js +0 -35
  83. package/src/utils/ExcelUtil.js +0 -159
  84. package/src/utils/TableSortUtil.js +0 -91
  85. package/src/utils/columnProp.js +0 -3
  86. package/src/utils/groupCompute.js +0 -68
  87. package/src/utils/http/httpFactory.js +0 -92
  88. package/src/utils/http/httpFactory2.js +0 -79
  89. package/src/utils/http/httpUtil.js +0 -123
  90. package/src/utils/http/httpUtils.js +0 -38
  91. package/src/utils/loadStyle.js +0 -14
  92. package/src/utils/message.js +0 -56
  93. package/src/utils/object.js +0 -80
  94. package/src/utils/security/TokenUtil.js +0 -19
  95. package/src/utils/tree.js +0 -54
  96. package/src/utils/util.js +0 -127
  97. package/src/views/Test/index.vue +0 -77
  98. package/src/views/Test/index2.vue +0 -33
  99. package/src/views/components/btn-config/index.vue +0 -202
  100. package/src/views/components/option-config/index.vue +0 -192
  101. package/src/views/db/chineseToEnglish.vue +0 -127
  102. package/src/views/db/filed.vue +0 -395
  103. package/src/views/db/index.vue +0 -192
  104. package/src/views/db/preview/index.vue +0 -139
  105. package/src/views/db/preview/left.vue +0 -204
  106. package/src/views/db/preview/right.vue +0 -466
  107. package/src/views/groupTable/index.vue +0 -137
  108. package/src/views/groupTable/ol-table-column-config/columnIndex.vue +0 -194
  109. package/src/views/groupTable/ol-table-column-config/index.vue +0 -92
  110. package/src/views/table/add-or-edit/config/base-config/index.vue +0 -539
  111. package/src/views/table/add-or-edit/config/base-config/table-form.vue +0 -333
  112. package/src/views/table/add-or-edit/config/column-config/header-config.vue +0 -475
  113. package/src/views/table/add-or-edit/config/column-config/index.vue +0 -790
  114. package/src/views/table/add-or-edit/config/data/column.js +0 -218
  115. package/src/views/table/add-or-edit/config/data/crud.js +0 -122
  116. package/src/views/table/add-or-edit/config/data/events.js +0 -109
  117. package/src/views/table/add-or-edit/config/data/method.js +0 -127
  118. package/src/views/table/add-or-edit/config/data/option.js +0 -725
  119. package/src/views/table/add-or-edit/config/data/page.js +0 -79
  120. package/src/views/table/add-or-edit/config/field-config/filed-config-table.vue +0 -42
  121. package/src/views/table/add-or-edit/config/field-config/index.vue +0 -91
  122. package/src/views/table/add-or-edit/config/form-config/index.vue +0 -1179
  123. package/src/views/table/add-or-edit/config/index.vue +0 -376
  124. package/src/views/table/add-or-edit/config/initFormObject.js +0 -25
  125. package/src/views/table/add-or-edit/config/script-config/LeftMeun.vue +0 -71
  126. package/src/views/table/add-or-edit/config/script-config/index.vue +0 -70
  127. package/src/views/table/add-or-edit/config/table-config/btn-config.vue +0 -340
  128. package/src/views/table/add-or-edit/config/table-config/btn-sort.vue +0 -132
  129. package/src/views/table/add-or-edit/config/table-config/index.vue +0 -446
  130. package/src/views/table/add-or-edit/configOld/dataTags/filed-config-table-model.vue +0 -41
  131. package/src/views/table/add-or-edit/configOld/dataTags/filed-config.vue +0 -74
  132. package/src/views/table/add-or-edit/configOld/dataTags/index.vue +0 -439
  133. package/src/views/table/add-or-edit/configOld/dataTags/set-table-sql.vue +0 -79
  134. package/src/views/table/add-or-edit/configOld/dataTags/table-on-config.vue +0 -74
  135. package/src/views/table/add-or-edit/configOld/index.vue +0 -127
  136. package/src/views/table/add-or-edit/configOld/tableTags/columnConfig.js +0 -5
  137. package/src/views/table/add-or-edit/configOld/tableTags/index.vue +0 -353
  138. package/src/views/table/add-or-edit/configOld/tableTags/operation-but-config.vue +0 -75
  139. package/src/views/table/add-or-edit/configOld/tableTags/tool-but-config.vue +0 -92
  140. package/src/views/table/add-or-edit/index.vue +0 -201
  141. package/src/views/table/add-or-edit/themeModel/index.vue +0 -53
  142. package/src/views/table/add-or-edit/themeModel/init-model-table.vue +0 -48
  143. package/src/views/table/add-or-edit/themeModel/init-model.vue +0 -81
  144. package/src/views/table/add-or-edit/themeModel/left-right.vue +0 -24
  145. package/src/views/table/add-or-edit/themeModel/left-tree-right-table.vue +0 -75
  146. package/src/views/table/add-or-edit/themeModel/olTableSearchModelMixins.js +0 -42
  147. package/src/views/table/add-or-edit/themeModel/splitpanesThemeModel.vue +0 -49
  148. package/src/views/table/add-or-edit/themeModel/top-1-bottom-2.vue +0 -29
  149. package/src/views/table/add-or-edit/themeModel/top-2-bottom-1.vue +0 -32
  150. package/src/views/table/add-or-edit/themeModel/top-2-bottom-2.vue +0 -32
  151. package/src/views/table/add-or-edit/themeModel/top-bottom.vue +0 -14
  152. package/src/views/table/index.vue +0 -43
  153. package/src/views/table/index2.vue +0 -199
  154. package/src/views/table/preview/index.vue +0 -29
  155. package/src/views/tree/components/config-core-data.vue +0 -85
  156. package/src/views/tree/components/config-core-table.vue +0 -362
  157. package/src/views/tree/components/config-core-tree/data/events.js +0 -95
  158. package/src/views/tree/components/config-core-tree/data/option.js +0 -88
  159. package/src/views/tree/components/config-core-tree/data/prop.js +0 -28
  160. package/src/views/tree/components/config-core-tree/index.vue +0 -181
  161. package/src/views/tree/components/config-core.vue +0 -42
  162. package/src/views/tree/components/form-config/index.vue +0 -967
  163. package/src/views/tree/index.vue +0 -424
  164. package/vue.config.js +0 -44
  165. /package/{olp-table/demo.html → demo.html} +0 -0
  166. /package/{olp-table/fonts → fonts}/iconfont.1720006583309.7e4906d9.woff +0 -0
  167. /package/{olp-table/fonts → fonts}/iconfont.1720006583309.947a27f0.ttf +0 -0
  168. /package/{olp-table/olp-table.common.js → olp-table.common.js} +0 -0
  169. /package/{olp-table/olp-table.css → olp-table.css} +0 -0
  170. /package/{olp-table/olp-table.umd.js → olp-table.umd.js} +0 -0
  171. /package/{olp-table/olp-table.umd.min.js → olp-table.umd.min.js} +0 -0
@@ -1,1179 +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
- time: '3',
985
- radio: '4',
986
- checkbox: '5',
987
- date: '6',
988
- number: '7',
989
- tree: '15',
990
- textarea: '10'
991
- }
992
- if (isNaN(val)) {
993
- //不是数字,通过健找值
994
- type = map[val]
995
- } else {
996
- //是数字,通过值找健
997
- // 使用 Object.values() 获取对象的所有值
998
- const arr = Object.values(map);
999
- // 使用 Array.prototype.indexOf() 查找指定值在数组中的索引位置
1000
- const index = arr.indexOf(val);
1001
- // 使用 Object.keys()[index] 获取对应索引位置的键名
1002
- type = Object.keys(map)[index];
1003
- if (type == "") {
1004
- type = 'input'
1005
- } else if (['select', 'checkbox', 'radio', 'tree'].indexOf(type) != -1) {
1006
- getDicData(row)
1007
- }
1008
- }
1009
- return type
1010
- }
1011
- }
1012
- onMounted(() => {
1013
- updateSort()
1014
- })
1015
-
1016
- function addColumn() {
1017
- gridOptions.value.data.push({
1018
- sort: gridOptions.value.data.length,
1019
- prop: "",
1020
- title: "",
1021
- showName: "",
1022
- selectDom: "1",
1023
- label: "",
1024
- type: "input",
1025
- form:{}
1026
- });
1027
- refreshForm();
1028
- }
1029
-
1030
- //表格拖动更新
1031
- const updateSort = () => {
1032
- nextTick(() => {
1033
- if (!vexGridRef.value) {
1034
- return;
1035
- }
1036
- //el绑定元素需要找到vxe的DOM下的tbody元素
1037
- Sortable.create(vexGridRef.value.$el.querySelector('.body--wrapper>.vxe-table--body tbody'), {
1038
- animation: 130,//拖拽动画过渡时间
1039
- handle: '.vxe-icon-sort',
1040
- // 结束拖拽
1041
- onEnd: function (/**Event*/{oldIndex, newIndex}) {
1042
- const list = JSON.parse(JSON.stringify(gridOptions.value.data)) //保存旧数据
1043
- const targetRow = list.splice(oldIndex, 1)[0] //保存移动的元素并删除原列表中移动的元素
1044
- list.splice(newIndex, 0, targetRow) //插入到目标新索引中
1045
- const newsArr = JSON.parse(JSON.stringify(list)) //重新赋值数组
1046
- //将新表格数据重新排序
1047
- for (let i = 0; i < newsArr.length; i++) {
1048
- newsArr[i].sort = i
1049
- }
1050
- gridOptions.value.data = newsArr;
1051
- //把表单的排序号和表格的排序号保持一致
1052
- newsArr.forEach(tableItem => {
1053
- baseOption.value.column.forEach(formItem => {
1054
- if (tableItem.prop == formItem.prop) {
1055
- formItem.sort = tableItem.sort
1056
- }
1057
- })
1058
- })
1059
- //将表单重新排序
1060
- baseOption.value.column.sort((a, b) => {
1061
- return a.sort - b.sort
1062
- })
1063
- codeForm.value = jsonFormat(baseOption.value)
1064
- },
1065
- });
1066
- });
1067
- }
1068
- const form = reactive({
1069
- updateKey: '',
1070
- saveUrl: '',
1071
- title: '',
1072
- requestType: 'post',
1073
- formType: props.type,
1074
- })
1075
- const state = reactive({
1076
- extensions: [javascript(), oneDark],
1077
- values: null,
1078
- err: false,
1079
- baseForm: {},
1080
- baseFormRender: {},
1081
- })
1082
-
1083
- const formMap = reactive({})
1084
-
1085
- // 更换表单
1086
- const onChangeForm = (value) => {
1087
- if (value) {
1088
- get(http, "/online/formDesigner/queryById", {
1089
- id: value
1090
- }).then((data) => {
1091
- formJson.value = JSON.parse(data.formJson)
1092
- formKey.value++
1093
- })
1094
- }
1095
- }
1096
- const getForm = () => {
1097
- return markRaw(form)
1098
- }
1099
- // 获取新增表单配置数据
1100
- const getData = () => {
1101
- if (formType.value == 0 && gridOptions.value.data.length == 0) {
1102
- return undefined;
1103
- }
1104
- refreshForm();
1105
- let obj = {
1106
- vexTable: gridOptions.value,
1107
- baseForm: baseOption.value,
1108
- codeForm: codeForm.value,
1109
- designer: formType.value,
1110
- customJson: formJson.value,
1111
- customForm: customForm.value
1112
- }
1113
- return obj
1114
- }
1115
- /**
1116
- * 右边字段配置删除行数据
1117
- * @param row
1118
- * @returns {Promise<void>}
1119
- */
1120
- const removeRowEvent = async (row) => {
1121
- const type = await VXETable.modal.confirm('您确定要删除该数据?')
1122
- const $grid = vexGridRef.value
1123
- if ($grid && type === 'confirm') {
1124
- await $grid.remove(row)
1125
- gridOptions.value.data = gridOptions.value.data.filter(item => item._X_ROW_KEY != row._X_ROW_KEY)
1126
- removeColumnEvent(row)
1127
- }
1128
- }
1129
- /**
1130
- * 删除表单属性(快捷设计属性)
1131
- * @param row
1132
- */
1133
- const removeColumnEvent = (row) => {
1134
- baseOption.value.column = baseOption.value.column.filter(item => item.prop != row.prop)
1135
- codeForm.value = jsonFormat(baseOption.value)
1136
- }
1137
-
1138
- /**
1139
- * 表格选择器回调函数
1140
- * @param data
1141
- */
1142
- function olTableSelectChange(slotName,data){
1143
- console.info('插槽名称', slotName)
1144
- console.info('表格回传的数据', data)
1145
- }
1146
-
1147
- // 动态获取需要渲染的插槽名称列表
1148
- const dynamicSlotsTable = computed(() => {
1149
- const result = baseOption.value.column
1150
- .filter((item) => item.selectDom === '22') // 筛选出需要动态插槽的字段(表单选择)
1151
- .map((item) => {
1152
- let slotObj = {slotName: item.prop}
1153
- slotObj.config = item.attrs!=null?JSON.parse(item.attrs).olTableSelect:{}
1154
- return slotObj;
1155
- }); // 获取字段名作为插槽名
1156
- return result;
1157
- });
1158
-
1159
- // 对外暴露
1160
- defineExpose({
1161
- setData, updateData, setAll, getData, setShow, getForm
1162
- })
1163
- </script>
1164
-
1165
- <style lang="scss" scoped>
1166
- .cm-editor {
1167
- height: 100%;
1168
- }
1169
-
1170
-
1171
- :deep(.el-form-item) {
1172
- margin-bottom: 5px;
1173
- }
1174
-
1175
- .box-card {
1176
- width: calc(100% - 24px);
1177
- height: calc(100% - 24px);
1178
- }
1179
- </style>