fast-crud-ui3 1.5.16 → 1.5.17

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 (168) hide show
  1. package/lib/assets/fonts/iconfont.d.ts +0 -0
  2. package/lib/components/checkbox-group/index.d.ts +2 -0
  3. package/lib/components/checkbox-group/src/fast-checkbox-group.d.ts +72 -0
  4. package/lib/components/content-dialog/index.d.ts +2 -0
  5. package/lib/components/content-dialog/src/fast-cell-content.d.ts +83 -0
  6. package/lib/components/json-viewer/index.d.ts +2 -0
  7. package/lib/components/json-viewer/src/fast-json-viewer.d.ts +48 -0
  8. package/lib/components/mapping.d.ts +5 -0
  9. package/lib/components/object-picker/index.d.ts +2 -0
  10. package/lib/components/object-picker/src/fast-object-picker.d.ts +132 -0
  11. package/lib/components/select/index.d.ts +2 -0
  12. package/lib/components/select/src/fast-select.d.ts +83 -0
  13. package/lib/components/table/index.d.ts +2 -0
  14. package/lib/components/table/src/RowConfirm.d.ts +39 -0
  15. package/lib/components/table/src/dynamic-filter-form.d.ts +118 -0
  16. package/lib/components/table/src/dynamic-filter-list.d.ts +57 -0
  17. package/lib/components/table/src/easy-filter.d.ts +118 -0
  18. package/lib/components/table/src/export-confirm.d.ts +12 -0
  19. package/lib/components/table/src/quick-filter-form.d.ts +42 -0
  20. package/lib/components/table/src/row-form.d.ts +33 -0
  21. package/lib/components/table/src/stored-filter-manager.d.ts +55 -0
  22. package/lib/components/table/src/stored-filter.d.ts +37 -0
  23. package/lib/components/table/src/table-head-cell.d.ts +9 -0
  24. package/lib/components/table/src/table.d.ts +507 -0
  25. package/lib/components/table/src/util.d.ts +77 -0
  26. package/lib/components/table-column/config.d.ts +5 -0
  27. package/lib/components/table-column/index.d.ts +2 -0
  28. package/lib/components/table-column/src/table-column.d.ts +256 -0
  29. package/lib/components/table-column-date-picker/config.d.ts +5 -0
  30. package/lib/components/table-column-date-picker/index.d.ts +2 -0
  31. package/lib/components/table-column-date-picker/src/table-column-date-picker.d.ts +173 -0
  32. package/lib/components/table-column-file/config.d.ts +5 -0
  33. package/lib/components/table-column-file/index.d.ts +2 -0
  34. package/lib/components/table-column-file/src/table-column-file.d.ts +285 -0
  35. package/lib/components/table-column-img/config.d.ts +5 -0
  36. package/lib/components/table-column-img/index.d.ts +2 -0
  37. package/lib/components/table-column-img/src/table-column-img.d.ts +285 -0
  38. package/lib/components/table-column-input/config.d.ts +5 -0
  39. package/lib/components/table-column-input/index.d.ts +2 -0
  40. package/lib/components/table-column-input/src/table-column-input.d.ts +173 -0
  41. package/lib/components/table-column-number/config.d.ts +5 -0
  42. package/lib/components/table-column-number/index.d.ts +2 -0
  43. package/lib/components/table-column-number/src/table-column-number.d.ts +173 -0
  44. package/lib/components/table-column-object/config.d.ts +5 -0
  45. package/lib/components/table-column-object/index.d.ts +2 -0
  46. package/lib/components/table-column-object/src/table-column-object.d.ts +315 -0
  47. package/lib/components/table-column-select/config.d.ts +5 -0
  48. package/lib/components/table-column-select/index.d.ts +2 -0
  49. package/lib/components/table-column-select/src/table-column-select.d.ts +276 -0
  50. package/lib/components/table-column-switch/config.d.ts +5 -0
  51. package/lib/components/table-column-switch/index.d.ts +2 -0
  52. package/lib/components/table-column-switch/src/table-column-switch.d.ts +175 -0
  53. package/lib/components/table-column-textarea/config.d.ts +5 -0
  54. package/lib/components/table-column-textarea/index.d.ts +2 -0
  55. package/lib/components/table-column-textarea/src/table-column-textarea.d.ts +173 -0
  56. package/lib/components/table-column-time-picker/config.d.ts +5 -0
  57. package/lib/components/table-column-time-picker/index.d.ts +2 -0
  58. package/lib/components/table-column-time-picker/src/table-column-time-picker.d.ts +173 -0
  59. package/lib/components/upload/index.d.ts +2 -0
  60. package/lib/components/upload/src/fast-upload.d.ts +120 -0
  61. package/lib/fast-crud-ui3.cjs.js +44 -17
  62. package/lib/fast-crud-ui3.es.js +9978 -5939
  63. package/lib/fast-crud-ui3.umd.js +44 -17
  64. package/lib/global.d.ts +42 -0
  65. package/lib/index.d.ts +56 -0
  66. package/lib/mixins/table-column.d.ts +104 -0
  67. package/lib/mixins/upload.d.ts +15 -0
  68. package/lib/model/cond.d.ts +48 -0
  69. package/lib/model/editComponentConfig.d.ts +25 -0
  70. package/lib/model/fastTableOption.d.ts +510 -0
  71. package/lib/model/filterComponentConfig.d.ts +55 -0
  72. package/lib/model/opt.d.ts +20 -0
  73. package/lib/model/order.d.ts +28 -0
  74. package/lib/model/pageQuery.d.ts +43 -0
  75. package/lib/model/query.d.ts +101 -0
  76. package/lib/model/rel.d.ts +5 -0
  77. package/lib/style.css +1 -1
  78. package/lib/util/cache.d.ts +17 -0
  79. package/lib/util/dialog.d.ts +49 -0
  80. package/lib/util/escape.d.ts +7 -0
  81. package/lib/util/http.d.ts +8 -0
  82. package/lib/util/pick.d.ts +9 -0
  83. package/lib/util/util.d.ts +311 -0
  84. package/package.json +19 -5
  85. package/packages/assets/fonts/iconfont.css +163 -0
  86. package/packages/assets/fonts/iconfont.js +1 -0
  87. package/packages/assets/fonts/iconfont.ttf +0 -0
  88. package/packages/assets/fonts/iconfont.woff +0 -0
  89. package/packages/assets/fonts/iconfont.woff2 +0 -0
  90. package/packages/components/checkbox-group/index.js +7 -0
  91. package/packages/components/checkbox-group/src/fast-checkbox-group.vue +83 -0
  92. package/packages/components/content-dialog/index.js +7 -0
  93. package/packages/components/content-dialog/src/fast-cell-content.vue +115 -0
  94. package/packages/components/json-viewer/index.js +7 -0
  95. package/packages/components/json-viewer/src/fast-json-viewer.vue +54 -0
  96. package/packages/components/mapping.js +95 -0
  97. package/packages/components/object-picker/index.js +7 -0
  98. package/packages/components/object-picker/src/fast-object-picker.vue +170 -0
  99. package/packages/components/select/index.js +7 -0
  100. package/packages/components/select/src/fast-select.vue +89 -0
  101. package/packages/components/table/index.js +7 -0
  102. package/packages/components/table/src/RowConfirm.vue +87 -0
  103. package/packages/components/table/src/dynamic-filter-form.vue +253 -0
  104. package/packages/components/table/src/dynamic-filter-list.vue +172 -0
  105. package/packages/components/table/src/easy-filter.vue +129 -0
  106. package/packages/components/table/src/export-confirm.vue +55 -0
  107. package/packages/components/table/src/quick-filter-form.vue +140 -0
  108. package/packages/components/table/src/row-form.vue +137 -0
  109. package/packages/components/table/src/stored-filter-manager.vue +240 -0
  110. package/packages/components/table/src/stored-filter.vue +180 -0
  111. package/packages/components/table/src/table-head-cell.vue +41 -0
  112. package/packages/components/table/src/table.vue +1309 -0
  113. package/packages/components/table/src/util.js +496 -0
  114. package/packages/components/table-column/config.js +64 -0
  115. package/packages/components/table-column/index.js +7 -0
  116. package/packages/components/table-column/src/table-column.vue +44 -0
  117. package/packages/components/table-column-date-picker/config.js +139 -0
  118. package/packages/components/table-column-date-picker/index.js +7 -0
  119. package/packages/components/table-column-date-picker/src/table-column-date-picker.vue +54 -0
  120. package/packages/components/table-column-file/config.js +83 -0
  121. package/packages/components/table-column-file/index.js +7 -0
  122. package/packages/components/table-column-file/src/table-column-file.vue +79 -0
  123. package/packages/components/table-column-img/config.js +83 -0
  124. package/packages/components/table-column-img/index.js +7 -0
  125. package/packages/components/table-column-img/src/table-column-img.vue +82 -0
  126. package/packages/components/table-column-input/config.js +77 -0
  127. package/packages/components/table-column-input/index.js +7 -0
  128. package/packages/components/table-column-input/src/table-column-input.vue +60 -0
  129. package/packages/components/table-column-number/config.js +89 -0
  130. package/packages/components/table-column-number/index.js +7 -0
  131. package/packages/components/table-column-number/src/table-column-number.vue +54 -0
  132. package/packages/components/table-column-object/config.js +66 -0
  133. package/packages/components/table-column-object/index.js +7 -0
  134. package/packages/components/table-column-object/src/table-column-object.vue +75 -0
  135. package/packages/components/table-column-select/config.js +66 -0
  136. package/packages/components/table-column-select/index.js +7 -0
  137. package/packages/components/table-column-select/src/table-column-select.vue +101 -0
  138. package/packages/components/table-column-switch/config.js +55 -0
  139. package/packages/components/table-column-switch/index.js +7 -0
  140. package/packages/components/table-column-switch/src/table-column-switch.vue +82 -0
  141. package/packages/components/table-column-textarea/config.js +77 -0
  142. package/packages/components/table-column-textarea/index.js +7 -0
  143. package/packages/components/table-column-textarea/src/table-column-textarea.vue +56 -0
  144. package/packages/components/table-column-time-picker/config.js +62 -0
  145. package/packages/components/table-column-time-picker/index.js +7 -0
  146. package/packages/components/table-column-time-picker/src/table-column-time-picker.vue +53 -0
  147. package/packages/components/upload/index.js +7 -0
  148. package/packages/components/upload/src/fast-upload.vue +272 -0
  149. package/packages/global.d.ts +42 -0
  150. package/packages/index.js +145 -0
  151. package/packages/mixins/table-column.js +133 -0
  152. package/packages/mixins/upload.js +14 -0
  153. package/packages/model/cond.js +74 -0
  154. package/packages/model/editComponentConfig.js +72 -0
  155. package/packages/model/fastTableOption.js +761 -0
  156. package/packages/model/filterComponentConfig.js +191 -0
  157. package/packages/model/opt.js +21 -0
  158. package/packages/model/order.js +37 -0
  159. package/packages/model/pageQuery.js +52 -0
  160. package/packages/model/query.js +161 -0
  161. package/packages/model/rel.js +5 -0
  162. package/packages/style.scss +5 -0
  163. package/packages/util/cache.js +92 -0
  164. package/packages/util/dialog.js +133 -0
  165. package/packages/util/escape.js +34 -0
  166. package/packages/util/http.js +18 -0
  167. package/packages/util/pick.js +92 -0
  168. package/packages/util/util.js +892 -0
@@ -0,0 +1,761 @@
1
+ import {ElMessage} from "element-plus";
2
+ import md5 from "md5";
3
+ import * as util from '../util/util.js'
4
+ import {post} from "../util/http.js";
5
+ import {openDialog} from "../util/dialog.js";
6
+ import {deleteFromSessionStorage, getFromSessionStorage, setToSessionStorage} from "../util/cache.js";
7
+ import ExportConfirm from "../components/table/src/export-confirm.vue";
8
+ import Cond from './cond.js'
9
+
10
+ /**
11
+ * @typedef {import('vue').ComponentPublicInstance} ComponentInstance
12
+ */
13
+ class FastTableOption {
14
+ /**
15
+ * 当前组件。一般配置当前组件(this), 这样钩子函数中可以使用this
16
+ * @type {ComponentInstance | null}
17
+ */
18
+ context;
19
+ ref; // FastTable组件的this引用, 不对外提供配置
20
+ /**
21
+ * 唯一id值。用于浏览器缓存时不同fast-table之间的隔离,不配置则内部默认生成(取baseUrl)
22
+ * @type {string}
23
+ */
24
+ id = ''; // 用于在全局标识唯一FastTable实例:涉及一些localStorage数据, 默认取值为${baseUrl}
25
+ /**
26
+ * 表格标题。配置后默认会显示在表格上方
27
+ * @type {string}
28
+ */
29
+ title = '';
30
+ /**
31
+ * 是否显示标题。默认true
32
+ * @type {boolean}
33
+ */
34
+ showTitle = true; // 是否显示标题
35
+ /**
36
+ * 表格Rest接口的根path。
37
+ * @type {string}
38
+ */
39
+ baseUrl = ''; // 内部接口的根url
40
+ /**
41
+ * 表格分页接口path。默认 ${baseUrl}/page
42
+ * @type {string}
43
+ */
44
+ pageUrl = '';
45
+ /**
46
+ * 列表url: 默认为${baseUrl}/list
47
+ * @type {string}
48
+ */
49
+ listUrl = '';
50
+ /**
51
+ * 新增url: 默认为${baseUrl}/insert
52
+ * @type {string}
53
+ */
54
+ insertUrl = '';
55
+ /**
56
+ * 批量新增url: 默认为${baseUrl}/insert/batch
57
+ * @type {string}
58
+ */
59
+ batchInsertUrl = '';
60
+ /**
61
+ * 更新url: 默认为${baseUrl}/update
62
+ * @type {string}
63
+ */
64
+ updateUrl = '';
65
+ /**
66
+ * 批量更新url: 默认为${baseUrl}/update/batch
67
+ * @type {string}
68
+ */
69
+ batchUpdateUrl = '';
70
+ /**
71
+ * 删除url: 默认为${baseUrl}/delete
72
+ * @type {string}
73
+ */
74
+ deleteUrl = '';
75
+ /**
76
+ * 批量删除url: 默认为${baseUrl}/delete/batch
77
+ * @type {string}
78
+ */
79
+ batchDeleteUrl = '';
80
+ /**
81
+ * 文件上传接口: 默认为${baseUrl}/upload
82
+ * @type {string}
83
+ */
84
+ uploadUrl = '';
85
+ /**
86
+ * 数据导出接口: 默认为${baseUrl}/export
87
+ * @type {string}
88
+ */
89
+ exportUrl = '';
90
+ /**
91
+ * 存在性判断接口path: 默认为${baseUrl}/exists
92
+ * @type {string}
93
+ */
94
+ existsUrl = '';
95
+ /**
96
+ * 是否启用双击编辑。默认true
97
+ * @type {boolean}
98
+ */
99
+ enableDblClickEdit = true;
100
+ /**
101
+ * 是否启用表格多选。默认启用
102
+ * @type {boolean}
103
+ */
104
+ enableMulti = true;
105
+ /**
106
+ * 是否启用序号列
107
+ * @type {boolean}
108
+ */
109
+ enableIndex = false;
110
+ /**
111
+ * 启用列过滤:即动筛。默认启用,若为false, 则表头均无法点击
112
+ * @type {boolean}
113
+ */
114
+ enableColumnFilter = true;
115
+ /**
116
+ * 是否启用过滤条件缓存(页面刷新后过滤条件不丢失),若为true则缓存到session中,有效期为会话。默认启用
117
+ * @type {boolean}
118
+ */
119
+ enableFilterCache = true;
120
+ /**
121
+ * 是否延迟加载分页数据,即不立即加载数据。默认false,若设置true, 则表格渲染后不立即加载数据,需要手动触发加载。
122
+ * @type {boolean}
123
+ */
124
+ lazyLoad = false;
125
+ /**
126
+ * 编辑模式。可选值: inline/form, 默认为inline,即双击行内编辑,若配置为form,则双击将打开弹窗。
127
+ * @type {string}
128
+ */
129
+ editType = 'inline'; // inline/form
130
+ /**
131
+ * 是否允许分页查询。默认为true。若为false, 则查询等按钮会隐藏, 一般静态表格(前端静态数据)有用。
132
+ * @type {boolean}
133
+ */
134
+ queryable = true;
135
+ /**
136
+ * 是否支持内置新建功能。默认为true
137
+ * @type {boolean}
138
+ */
139
+ insertable = true;
140
+ /**
141
+ * 是否支持内置编辑。默认true
142
+ * @type {boolean}
143
+ */
144
+ updatable = true;
145
+ /**
146
+ * 是否支持内置删除。默认true
147
+ * @type {boolean}
148
+ */
149
+ deletable = true;
150
+ /**
151
+ * 是否支持导出。默认true
152
+ * @type {boolean}
153
+ */
154
+ exportable = true;
155
+ /**
156
+ * 主键字段名。默认为"id"。必须正确设置,否则更新、删除等功能无法使用。
157
+ * @type {string}
158
+ */
159
+ idField = 'id';
160
+ /**
161
+ * "创建时间"的字段名。如果配置了,则内部动态构造3个存筛(当天/当周/当月), 此值必须为显示列
162
+ * @type {string}
163
+ */
164
+ createTimeField = '';
165
+ /**
166
+ * TODO 待实现 父子表级联(父表取choseRow作为选中的行)
167
+ * @type {{map: Object | ObjectConstructor, option: FastTableOption}}
168
+ */
169
+ parent = {
170
+ option: FastTableOption, // 父表的option
171
+ map: Object // 指定映射关系, 例如: {parentId: 'id'} —— 表示当前option中的parentId值关联 parent.option的id值, 以此作为构建当前表的预置筛选条件, 限定关联条件; 支持多个关联key映射
172
+ };
173
+ /**
174
+ * 表格默认的排序字段。默认依次取createTimeField、idField
175
+ */
176
+ sortField;
177
+ /**
178
+ * 降序。若为false, 则为升序
179
+ * @type {boolean}
180
+ */
181
+ sortDesc = true;
182
+ /**
183
+ * 配置【更多】下拉功能按钮。定义: {label: String, click: Function<Promise>, icon: Component, showable: Boolean|Function<Boolean>, disable: Boolean|Function<Boolean>, }
184
+ * @type {[]}
185
+ */
186
+ moreButtons = [];
187
+ /**
188
+ * 分页条配置
189
+ * @type {{layout: string, size: number, "page-sizes": number[]}}
190
+ */
191
+ pagination = {
192
+ layout: 'total, sizes, prev, pager, next, jumper', 'page-sizes': [10, 20, 50, 100, 200], size: 10
193
+ };
194
+ /**
195
+ * 样式配置
196
+ * @type {{flexHeight: boolean, quickFilterGridGap: string, formLabelWidth: string, formLayout: null, quickFilterSpan: number, bodyRowHeight: string, size: string}}
197
+ */
198
+ style = {
199
+ flexHeight: false, // 表格是否使用弹性高度: 自适应高度, 撑满全屏
200
+ bodyRowHeight: '50px', // 行高
201
+ size: 'default', // 尺寸
202
+ formLabelWidth: 'auto', // 表单标签宽度:
203
+ formLayout: null, // 表单布局: 只作用于form表单, 对快筛和行内编辑无效
204
+ quickFilterSpan: 3, // 快筛每行几个筛选项
205
+ quickFilterGridGap: '10px 20px', // 快筛项之间的间距(grid布局中的gap)
206
+ };
207
+ /**
208
+ * render函数。当前FastTableOption对应的表格若被pick时有用
209
+ * @type {Function}
210
+ */
211
+ render; // 渲染函数, 当前table需要被pick时有用
212
+ /**
213
+ * 内置固定的筛选条件。将始终在分页查询条件里,无法被用户取消
214
+ * @type {Cond[]}
215
+ */
216
+ conds = []; // 固定的筛选条件,内部无法取消
217
+ /**
218
+ * 开发者预置的条件组——即存筛,例如: [{label: '成年男孩', conds: [{col: 'sex', val: '1'}, {col: 'age', opt: Opt.LE, val: 18}]}] <br/>
219
+ * 注意: 要求conds中每个col都必须启用了filter,只要有一项未启用则整个筛选组无效。
220
+ * @type {[]}
221
+ */
222
+ condGroups = [];
223
+ /**
224
+ * 扩展的查询条件, 可配合#quickFilter插槽使用。例如配置了keyword(表格中并不存在此列), 则可将query.extra.keyword绑定到自定义输入控件上,
225
+ * 后端配合针对此值做自定义筛选功能。
226
+ * @type {{}}
227
+ */
228
+ condExtra = {};
229
+
230
+ /**
231
+ * 重置按钮点击前触发的钩子函数
232
+ * @type {Function}
233
+ */
234
+ beforeReset;
235
+ /**
236
+ * 分页请求前触发的钩子函数
237
+ * @type {Function}
238
+ */
239
+ beforeLoad;
240
+ /**
241
+ * 分页请求成功后的钩子函数
242
+ * @type {Function}
243
+ */
244
+ loadSuccess;
245
+ /**
246
+ * 分页请求失败后的钩子函数
247
+ * @type {Function}
248
+ */
249
+ loadFail;
250
+ /**
251
+ * 进入新建前(行内模式新增一行前,表单模式为弹窗前)的钩子函数
252
+ * @type {Function}
253
+ */
254
+ beforeToInsert;
255
+ /**
256
+ * 插入请求前执行的钩子函数
257
+ * @type {Function}
258
+ */
259
+ beforeInsert;
260
+ /**
261
+ * 插入成功后的钩子函数
262
+ * @type {Function}
263
+ */
264
+ insertSuccess;
265
+ /**
266
+ * 插入失败后的钩子函数
267
+ * @type {Function}
268
+ */
269
+ insertFail;
270
+ /**
271
+ * 进入更新模式前的钩子函数(行内模式为行切换为可编辑模式前,表单模式为弹窗前)
272
+ * @type {Function}
273
+ */
274
+ beforeToUpdate;
275
+ /**
276
+ * 更新请求前的钩子函数
277
+ * @type {Function}
278
+ */
279
+ beforeUpdate;
280
+ /**
281
+ * 更新成功后的钩子函数。
282
+ * @type {Function}
283
+ */
284
+ updateSuccess;
285
+ /**
286
+ * 更新失败后的钩子函数
287
+ * @type {Function}
288
+ */
289
+ updateFail;
290
+ /**
291
+ * 删除提示前的钩子函数
292
+ * @type {Function}
293
+ */
294
+ beforeDeleteTip;
295
+ /**
296
+ * 删除请求前的钩子函数
297
+ * @type {Function}
298
+ */
299
+ beforeDelete;
300
+ /**
301
+ * 删除请求成功后的钩子函数
302
+ * @type {Function}
303
+ */
304
+ deleteSuccess;
305
+ /**
306
+ * 删除请求失败后的钩子函数
307
+ * @type {Function}
308
+ */
309
+ deleteFail;
310
+ /**
311
+ * 点击取消按钮前的钩子函数(处于新建、编辑模式时会有取消按钮)
312
+ * @type {Function}
313
+ */
314
+ beforeCancel;
315
+ /**
316
+ * 导出请求前的钩子函数
317
+ * @type {Function}
318
+ */
319
+ beforeExport;
320
+ /**
321
+ * 导出成功后的钩子函数
322
+ * @type {Function}
323
+ */
324
+ exportSuccess;
325
+ /**
326
+ * 导出失败后的钩子函数
327
+ * @type Function
328
+ */
329
+ exportFail; // 导出失败后
330
+
331
+ static $http; // Axios实例
332
+ static $router; // VueRouter实例
333
+
334
+ constructor({
335
+ context,
336
+ id = '',
337
+ title = '',
338
+ showTitle = true,
339
+ module = '', // deprecated 1.6, 替换为baseUrl
340
+ baseUrl = '',
341
+ pageUrl = '',
342
+ listUrl = '',
343
+ insertUrl = '',
344
+ batchInsertUrl = '',
345
+ updateUrl = '',
346
+ batchUpdateUrl = '',
347
+ deleteUrl = '',
348
+ batchDeleteUrl = '',
349
+ uploadUrl = '',
350
+ exportUrl = '',
351
+ existsUrl = '',
352
+ enableDblClickEdit = true,
353
+ enableMulti = true,
354
+ enableIndex = false,
355
+ enableColumnFilter = true,
356
+ enableFilterCache = true,
357
+ lazyLoad = false,
358
+ editType = 'inline',
359
+ queryable = true,
360
+ insertable = true,
361
+ updatable = true,
362
+ deletable = true,
363
+ exportable = true,
364
+ idField = 'id',
365
+ createTimeField = '',
366
+ sortField = '',
367
+ sortDesc = true,
368
+ moreButtons = [],
369
+ pagination = {
370
+ layout: 'total, sizes, prev, pager, next, jumper',
371
+ 'page-sizes': [10, 20, 50, 100, 200],
372
+ size: 10
373
+ },
374
+ style = {},
375
+ render = () => [],
376
+ conds = [],
377
+ condGroups = [],
378
+ condExtra = {},
379
+ beforeReset = ({query}) => Promise.resolve(),
380
+ beforeLoad = ({query}) => Promise.resolve(),
381
+ loadSuccess = ({query, res}) => Promise.resolve(res), // res为数据而非response
382
+ loadFail = ({query, error}) => Promise.resolve(),
383
+ beforeToInsert = (rows) => Promise.resolve(),
384
+ beforeInsert = ({fatRows, rows, editRows}) => Promise.resolve(editRows),
385
+ insertSuccess = ({fatRows, rows, editRows, res}) => Promise.resolve(),
386
+ insertFail = ({fatRows, rows, editRows, error}) => Promise.resolve(),
387
+ beforeToUpdate = ({fatRows, rows}) => Promise.resolve(),
388
+ beforeUpdate = ({fatRows, rows, editRows}) => Promise.resolve(editRows),
389
+ updateSuccess = ({fatRows, rows, editRows, res}) => Promise.resolve(),
390
+ updateFail = ({fatRows, rows, editRows, error}) => Promise.resolve(),
391
+ beforeDeleteTip = ({fatRows, rows}) => Promise.resolve(),
392
+ beforeDelete = ({fatRows, rows}) => Promise.resolve(rows),
393
+ deleteSuccess = ({fatRows, rows, res}) => Promise.resolve(),
394
+ deleteFail = ({fatRows, rows, error}) => Promise.resolve(),
395
+ beforeCancel = ({fatRows, rows, status}) => Promise.resolve(),
396
+ beforeExport = ({columns, pageQuery}) => Promise.resolve(columns),
397
+ exportSuccess = ({columns, pageQuery, data}) => Promise.resolve(),
398
+ exportFail = ({columns, pageQuery, error}) => Promise.resolve()
399
+ }) {
400
+ util.assert(util.isString(title), 'title必须为字符串')
401
+ util.assert(util.isBoolean(showTitle) || util.isFunction(showTitle), 'showTitle必须为布尔值或返回布尔值的函数')
402
+ util.assert(util.isString(id), 'id必须为字符串')
403
+ util.assert(util.isString(module), 'module必须为字符串')
404
+ util.assert(util.isString(baseUrl), 'baseUrl必须是字符串')
405
+ util.assert(util.isBoolean(enableDblClickEdit) || util.isFunction(enableDblClickEdit), 'enableDblClickEdit必须为布尔值或返回布尔值的函数')
406
+ util.assert(util.isBoolean(enableMulti) || util.isFunction(enableMulti), 'enableMulti必须为布尔值或返回布尔值的函数')
407
+ util.assert(util.isBoolean(enableIndex) || util.isFunction(enableIndex), 'enableIndex必须为布尔值或返回布尔值的函数')
408
+ util.assert(util.isBoolean(enableColumnFilter) || util.isFunction(enableColumnFilter), 'enableColumnFilter必须为布尔值或返回布尔值的函数')
409
+ util.assert(util.isBoolean(enableFilterCache) || util.isFunction(enableFilterCache), 'enableFilterCache必须为布尔值或返回布尔值的函数')
410
+ util.assert(util.isBoolean(lazyLoad) || util.isFunction(lazyLoad), 'lazyLoad必须为布尔值或返回布尔值的函数')
411
+ util.assert(['inline', 'form'].includes(editType), 'editType必须为inline或form')
412
+ util.assert(util.isBoolean(queryable) || util.isFunction(queryable), 'queryable必须为布尔值或返回布尔值的函数')
413
+ util.assert(util.isBoolean(insertable) || util.isFunction(insertable), 'insertable必须为布尔值或返回布尔值的函数')
414
+ util.assert(util.isBoolean(updatable) || util.isFunction(updatable), 'updatable必须为布尔值或返回布尔值的函数')
415
+ util.assert(util.isBoolean(deletable) || util.isFunction(deletable), 'deletable必须为布尔值或返回布尔值的函数')
416
+ util.assert(util.isBoolean(exportable) || util.isFunction(exportable), 'exportable必须为布尔值或返回布尔值的函数')
417
+ util.assert(util.isString(idField), 'idField必须为字符串')
418
+ util.assert(util.isString(createTimeField), 'createTimeField必须为字符串')
419
+ util.assert(util.isString(sortField), 'sortField必须为字符串')
420
+ util.assert(util.isBoolean(sortDesc), 'sortDesc必须为布尔值')
421
+ util.assert(util.isArray(moreButtons), 'moreButtons必须是数组')
422
+ util.assert(util.isObject(pagination), 'pagination必须是对象')
423
+ util.assert(util.isFunction(beforeReset), 'beforeReset必须为函数')
424
+ util.assert(util.isFunction(beforeLoad), 'beforeLoad必须为函数')
425
+ util.assert(util.isFunction(loadSuccess), 'loadSuccess必须为函数')
426
+ util.assert(util.isFunction(loadFail), 'loadFail必须为函数')
427
+ util.assert(util.isFunction(beforeToInsert), 'beforeToInsert必须为函数')
428
+ util.assert(util.isFunction(beforeInsert), 'beforeInsert必须为函数')
429
+ util.assert(util.isFunction(insertSuccess), 'insertSuccess必须为函数')
430
+ util.assert(util.isFunction(insertFail), 'insertFail必须为函数')
431
+ util.assert(util.isFunction(beforeToUpdate), 'beforeToUpdate必须为函数')
432
+ util.assert(util.isFunction(beforeUpdate), 'beforeUpdate必须为函数')
433
+ util.assert(util.isFunction(updateSuccess), 'updateSuccess必须为函数')
434
+ util.assert(util.isFunction(updateFail), 'updateFail必须为函数')
435
+ util.assert(util.isFunction(beforeDeleteTip), 'beforeDeleteTip必须为函数')
436
+ util.assert(util.isFunction(beforeDelete), 'beforeDelete必须为函数')
437
+ util.assert(util.isFunction(deleteSuccess), 'deleteSuccess必须为函数')
438
+ util.assert(util.isFunction(deleteFail), 'deleteFail必须为函数')
439
+ util.assert(util.isFunction(beforeCancel), 'beforeCancel必须为函数')
440
+ util.assert(util.isFunction(render), "render必须是一个函数")
441
+ util.assert(util.isFunction(beforeExport), "beforeExport必须是一个函数")
442
+ util.assert(util.isFunction(exportSuccess), "exportSuccess必须是一个函数")
443
+ util.assert(util.isFunction(exportFail), "exportFail必须是一个函数")
444
+ util.assert(util.isArray(conds), "conds必须是Cond对象(或可转换为Cond对象的json)组成的数组")
445
+ util.assert(util.isArray(condGroups), 'condGroups必须是数组')
446
+ util.assert(util.isObject(condExtra), 'condExtra必须是对象')
447
+
448
+ this.context = context;
449
+ this.title = title;
450
+ this.baseUrl = util.defaultIfBlank(baseUrl, module);
451
+ this.id = util.defaultIfBlank(id, this.baseUrl)
452
+ this.pageUrl = util.defaultIfBlank(pageUrl, this.baseUrl + '/page');
453
+ this.listUrl = util.defaultIfBlank(listUrl, this.baseUrl + '/list');
454
+ this.insertUrl = util.defaultIfBlank(insertUrl, this.baseUrl + '/insert');
455
+ this.batchInsertUrl = util.defaultIfBlank(batchInsertUrl, this.baseUrl + '/insert/batch');
456
+ this.updateUrl = util.defaultIfBlank(updateUrl, this.baseUrl + '/update');
457
+ this.batchUpdateUrl = util.defaultIfBlank(batchUpdateUrl, this.baseUrl + '/update/batch');
458
+ this.deleteUrl = util.defaultIfBlank(deleteUrl, this.baseUrl + '/delete');
459
+ this.batchDeleteUrl = util.defaultIfBlank(batchDeleteUrl, this.baseUrl + '/delete/batch');
460
+ this.uploadUrl = util.defaultIfBlank(uploadUrl, this.baseUrl + '/upload');
461
+ this.exportUrl = util.defaultIfBlank(exportUrl, this.baseUrl + '/export');
462
+ this.existsUrl = util.defaultIfBlank(existsUrl, this.baseUrl + '/exists');
463
+ this.enableDblClickEdit = enableDblClickEdit;
464
+ this.enableMulti = enableMulti;
465
+ this.enableIndex = enableIndex;
466
+ this.enableColumnFilter = enableColumnFilter;
467
+ this.enableFilterCache = enableFilterCache;
468
+ this.lazyLoad = lazyLoad;
469
+ this.editType = editType;
470
+ this.queryable = queryable;
471
+ this.insertable = insertable;
472
+ this.updatable = updatable;
473
+ this.deletable = deletable;
474
+ this.exportable = exportable;
475
+ this.idField = idField;
476
+ this.createTimeField = createTimeField;
477
+ this.sortField = util.defaultIfBlank(sortField, util.defaultIfBlank(createTimeField, idField));
478
+ this.sortDesc = sortDesc;
479
+ this.moreButtons = moreButtons;
480
+ util.mergeValue(this.pagination, pagination, true, true)
481
+ util.mergeValue(this.style, style, true, true)
482
+ this.conds = conds.map(c => Cond.build(c));
483
+ this.condGroups = condGroups;
484
+ this.condExtra = condExtra;
485
+
486
+ this.beforeReset = beforeReset;
487
+ this.beforeLoad = beforeLoad;
488
+ this.loadSuccess = loadSuccess;
489
+ this.loadFail = loadFail;
490
+
491
+ this.beforeToInsert = beforeToInsert;
492
+ this.beforeInsert = beforeInsert;
493
+ this.insertSuccess = insertSuccess;
494
+ this.insertFail = insertFail;
495
+
496
+ this.beforeToUpdate = beforeToUpdate;
497
+ this.beforeUpdate = beforeUpdate;
498
+ this.updateSuccess = updateSuccess;
499
+ this.updateFail = updateFail;
500
+
501
+ this.beforeDeleteTip = beforeDeleteTip;
502
+ this.beforeDelete = beforeDelete;
503
+ this.deleteSuccess = deleteSuccess;
504
+ this.deleteFail = deleteFail;
505
+
506
+ this.beforeCancel = beforeCancel;
507
+
508
+ this.render = render;
509
+ this.beforeExport = beforeExport;
510
+ this.exportSuccess = exportSuccess;
511
+ this.exportFail = exportFail;
512
+ }
513
+
514
+ /**
515
+ * 向内置条件组中增加条件
516
+ * @param cond
517
+ * @param repeatable 是否允许重复的col, 默认false, 即若多次添加相同col的条件, 只会保留最新的
518
+ */
519
+ addCond(cond, repeatable = false) {
520
+ const c = Cond.build(cond)
521
+ if (repeatable === false) {
522
+ this.removeCond(c.col)
523
+ }
524
+ this.conds.push(c)
525
+ }
526
+
527
+ /**
528
+ * 从内置条件组中移除条件
529
+ * @param col
530
+ */
531
+ removeCond(col) {
532
+ for (let i = this.conds.length - 1; i >= 0; i--) {
533
+ if (this.conds[i].col === col) {
534
+ this.conds.splice(i, 1)
535
+ }
536
+ }
537
+ }
538
+
539
+ /**
540
+ * 新增行, 返回promise
541
+ * @param fatRows
542
+ * @returns {Promise<void>|Promise<unknown>}
543
+ */
544
+ _insertRows(fatRows) {
545
+ if (fatRows.length === 0) {
546
+ return Promise.resolve();
547
+ }
548
+ return new Promise((resolve, reject) => {
549
+ const {context, beforeInsert} = this;
550
+ const rows = fatRows.map(r => r.row);
551
+ const editRows = fatRows.map(r => r.editRow);
552
+ beforeInsert.call(context, {
553
+ fatRows: fatRows,
554
+ rows: rows,
555
+ editRows: editRows
556
+ }).then((postData) => {
557
+ const {insertUrl, batchInsertUrl, insertSuccess, insertFail} = this;
558
+ const postPromise = (postData.length === 1 ? post(insertUrl, postData[0]) : post(batchInsertUrl, postData))
559
+ postPromise.then(res => {
560
+ resolve();
561
+ insertSuccess.call(context, {
562
+ fatRows: fatRows,
563
+ rows: rows,
564
+ editRows: editRows,
565
+ res: res
566
+ }).then(() => {
567
+ ElMessage.success(`成功新增${postData.length}条记录`); // TODO 成功几条使用后端返回的数据
568
+ });
569
+ }).catch(err => {
570
+ reject(err);
571
+ insertFail.call(context, {
572
+ fatRows: fatRows,
573
+ rows: rows,
574
+ editRows: editRows,
575
+ error: err
576
+ }).then(() => {
577
+ ElMessage.error('新增失败:' + JSON.stringify(err));
578
+ });
579
+ })
580
+ }).catch(err => {
581
+ reject(err);
582
+ })
583
+ });
584
+ }
585
+
586
+ /**
587
+ * 更新行
588
+ * @param fatRows
589
+ * @return 返回promise, 若成功更新则resolve; 若失败或取消, 则返回reject err或用户自定义的内容
590
+ */
591
+ _updateRows(fatRows) {
592
+ if (fatRows.length === 0) {
593
+ return Promise.resolve();
594
+ }
595
+ return new Promise((resolve, reject) => {
596
+ const {context, beforeUpdate} = this;
597
+ const rows = fatRows.map(r => r.row);
598
+ const editRows = fatRows.map(r => r.editRow);
599
+ beforeUpdate.call(context, {
600
+ fatRows: fatRows,
601
+ rows: rows,
602
+ editRows: editRows
603
+ }).then((postData) => {
604
+ const {updateUrl, batchUpdateUrl, updateSuccess, updateFail} = this;
605
+ const postPromise = (postData.length === 1 ? post(updateUrl, postData[0]) : post(batchUpdateUrl, postData))
606
+ postPromise.then(res => {
607
+ resolve();
608
+ updateSuccess.call(context, {
609
+ fatRows: fatRows,
610
+ rows: rows,
611
+ editRows: editRows,
612
+ res: res
613
+ }).then(() => {
614
+ ElMessage.success(`成功更新${postData.length}条记录`); // TODO 成功几条使用后端返回的数据
615
+ });
616
+ }).catch(err => {
617
+ reject(err);
618
+ updateFail.call(context, {
619
+ fatRows: fatRows,
620
+ rows: rows,
621
+ editRows: editRows,
622
+ error: err
623
+ }).then(() => {
624
+ ElMessage.error('更新失败:' + JSON.stringify(err));
625
+ });
626
+ })
627
+ }).catch(err => {
628
+ reject(err);
629
+ })
630
+ });
631
+ }
632
+
633
+ /**
634
+ * 列表查询
635
+ * @param query 查询条件 Query类型
636
+ * @param config
637
+ */
638
+ _list(query, config) {
639
+ this.conds.forEach(c => query.addCond(c)) // 内置conds添加
640
+ return post(this.listUrl, query.toJson(), config)
641
+ }
642
+
643
+ /**
644
+ * 导出
645
+ * @param columnConfigs
646
+ * @param pageQuery
647
+ */
648
+ _exportData(columnConfigs, pageQuery) {
649
+ const {context, beforeExport} = this
650
+ beforeExport.call(context, {
651
+ columns: columnConfigs,
652
+ pageQuery: pageQuery
653
+ }).then(() => {
654
+ openDialog({
655
+ component: ExportConfirm,
656
+ props: {
657
+ columns: columnConfigs
658
+ },
659
+ dialogProps: {
660
+ title: '导出设置',
661
+ width: '60%',
662
+ okClose: false,
663
+ handleOk: ({columns, all = false}) => {
664
+ // 导出数据
665
+ const {title, exportUrl, exportSuccess, exportFail} = this;
666
+ post(exportUrl, {
667
+ columns: columns,
668
+ all: all, // false-当前页; true-全部
669
+ pageQuery: pageQuery
670
+ }, {
671
+ responseType: 'blob'
672
+ }).then((data) => {
673
+ const url = window.URL.createObjectURL(data);
674
+ const link = document.createElement('a')
675
+ link.href = url;
676
+ const dateStr = util.dateFormat(new Date(), 'YYYYMMDDHHmmssSSS')
677
+ link.setAttribute('download', `${title ? title : 'download'}_${dateStr}.xlsx`)
678
+ document.body.appendChild(link)
679
+ link.click()
680
+ link.remove()
681
+ exportSuccess.call(context, {
682
+ columns: columnConfigs,
683
+ pageQuery: pageQuery,
684
+ data: data
685
+ })
686
+ }).catch((err) => {
687
+ exportFail.call(context, {
688
+ columns: columnConfigs,
689
+ pageQuery: pageQuery,
690
+ error: err
691
+ }).then(() => {
692
+ ElMessage.error('导出失败:' + err.message)
693
+ })
694
+ })
695
+ },
696
+ // handleCancel: (who) => {
697
+ // console.log(`你取消了下载..${who}触发cancel`)
698
+ // }
699
+ }
700
+ }).then(({columns, all = false}) => {
701
+ // do nothing, dialog props中配置了handleOk
702
+ }).catch(() => {
703
+ // do nothing
704
+ })
705
+ })
706
+ }
707
+
708
+ /**
709
+ * 存在性判断
710
+ */
711
+ _exist(conds = []) {
712
+ if (util.isEmpty(conds)) {
713
+ return Promise.resolve()
714
+ }
715
+ const {existsUrl} = this
716
+ return new Promise((resolve, reject) => {
717
+ post(existsUrl, conds).then(result => {
718
+ resolve(result)
719
+ }).catch(err => {
720
+ reject(err)
721
+ })
722
+ })
723
+ }
724
+
725
+ /**
726
+ * 利用/list接口构造选项列表数据
727
+ * @param query
728
+ * @param valKey
729
+ * @param labelKey
730
+ * @return {Promise<*>}
731
+ */
732
+ _buildSelectOptions(query, valKey, labelKey) {
733
+ return new Promise((resolve, reject) => {
734
+ const key = `OPTIONS:${this.id}_${valKey}_${labelKey}_` + md5(JSON.stringify(util.sortKey(query)))
735
+ let options = getFromSessionStorage(key)
736
+ if (util.isArray(options)) {
737
+ try {
738
+ resolve(options)
739
+ return
740
+ } catch (err) {
741
+ console.log(err)
742
+ deleteFromSessionStorage(key)
743
+ }
744
+ }
745
+ this._list(query).then(res => {
746
+ options = res.filter(item => util.isObject(item)).map(item => {
747
+ const obj = {}
748
+ obj[valKey] = item[valKey]
749
+ obj[labelKey] = item[labelKey]
750
+ return obj
751
+ })
752
+ setToSessionStorage(key, options, 1)
753
+ resolve(options)
754
+ }).catch(err => {
755
+ reject(err)
756
+ })
757
+ })
758
+ }
759
+ }
760
+
761
+ export default FastTableOption