fast-crud-ui3 1.5.15-beta2 → 1.5.16-tsc-beta

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 +497 -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 +7 -7
  62. package/lib/fast-crud-ui3.es.js +1123 -1080
  63. package/lib/fast-crud-ui3.umd.js +7 -7
  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 +25 -0
  69. package/lib/model/editComponentConfig.d.ts +25 -0
  70. package/lib/model/fastTableOption.d.ts +355 -0
  71. package/lib/model/filterComponentConfig.d.ts +57 -0
  72. package/lib/model/opt.d.ts +20 -0
  73. package/lib/model/order.d.ts +7 -0
  74. package/lib/model/pageQuery.d.ts +23 -0
  75. package/lib/model/query.d.ts +33 -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 +14 -0
  83. package/lib/util/util.d.ts +252 -0
  84. package/package.json +18 -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 +65 -0
  154. package/packages/model/editComponentConfig.js +72 -0
  155. package/packages/model/fastTableOption.js +538 -0
  156. package/packages/model/filterComponentConfig.js +185 -0
  157. package/packages/model/opt.js +21 -0
  158. package/packages/model/order.js +16 -0
  159. package/packages/model/pageQuery.js +31 -0
  160. package/packages/model/query.js +93 -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 +833 -0
@@ -0,0 +1,538 @@
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
+ import Vue from 'vue'
10
+
11
+ class FastTableOption {
12
+ /**
13
+ * 当前组件。一般配置当前组件(this), 这样钩子函数中可以使用this
14
+ * @type {Vue}
15
+ */
16
+ context;
17
+ ref; // FastTable组件的this引用
18
+ /**
19
+ * 唯一id值。用于浏览器缓存时不同fast-table之间的隔离,不配置则内部默认生成
20
+ * @type {string}
21
+ */
22
+ id = ''; // 用于在全局标识唯一FastTable实例:涉及一些localStorage数据, 默认取值为${baseUrl}
23
+ /**
24
+ * 表格标题。配置后默认会显示在表格上方
25
+ * @type {string}
26
+ */
27
+ title = ''; // 标题: 显示在表头上方
28
+ /**
29
+ * 是否显示标题。默认true
30
+ * @type {boolean}
31
+ */
32
+ showTitle = true; // 是否显示标题
33
+ /**
34
+ * 表格Rest接口的根path。
35
+ * @type {string}
36
+ */
37
+ baseUrl = ''; // 内部接口的根url
38
+ pageUrl = ''; // 分页url: 默认为${baseUrl}/page
39
+ listUrl = ''; // 列表url: 默认为${baseUrl}/list
40
+ insertUrl = ''; // 新增url: 默认为${baseUrl}/insert
41
+ batchInsertUrl = ''; // 批量新增url: 默认为${baseUrl}/insert/batch
42
+ updateUrl = ''; // 更新url: 默认为${baseUrl}/update
43
+ batchUpdateUrl = ''; // 批量更新url: 默认为${baseUrl}/update/batch
44
+ deleteUrl = ''; // 删除url: 默认为${baseUrl}/delete
45
+ batchDeleteUrl = ''; // 批量删除url: 默认为${baseUrl}/delete/batch
46
+ uploadUrl = ''; // 文件上传接口: 默认为${baseUrl}/upload
47
+ exportUrl = ''; // 数据导出接口: 默认为${baseUrl}/export
48
+ existsUrl = ''; // 存在性判断接口: 默认为${baseUrl}/exists
49
+ enableDblClickEdit = true;
50
+ enableMulti = true; // 启用多选
51
+ enableIndex = false; // 是否启用序号列
52
+ enableColumnFilter = true; // 启用列过滤:即动筛
53
+ enableFilterCache = true; // 启用过滤条件缓存(支持值: true/false),若为true则缓存到session中,有效期为会话
54
+ lazyLoad = false; // 不立即加载数据
55
+ editType = 'inline'; // inline/form
56
+ queryable = true; //是否允许查询, 这个在静态表格等场景是有用的, 用于隐藏查询等按钮
57
+ insertable = true; // 是否支持内置新建
58
+ updatable = true; // 是否支持内置编辑
59
+ deletable = true; // 是否支持内置删除
60
+ exportable = true; // 是否支持导出
61
+ idField = 'id'; // 主键字段名
62
+ createTimeField = ''; // 创建时间字段名: 如果配置了,则内部动态构造3个存筛(当天/当周/当月), 此值必须为显示列
63
+ parent = { // TODO 待实现 父子表级联(父表取choseRow作为选中的行)
64
+ option: FastTableOption, // 父表的option
65
+ map: Object // 指定映射关系, 例如: {parentId: 'id'} —— 表示当前option中的parentId值关联 parent.option的id值, 以此作为构建当前表的预置筛选条件, 限定关联条件; 支持多个关联key映射
66
+ };
67
+ sortField; // 排序字段: 默认取createTimeField或idField
68
+ sortDesc = true; // 默认降序
69
+ moreButtons = []; // “更多”按钮扩展,定义: {label: String, click: Function<Promise>, icon: Component, showable: Boolean|Function<Boolean>, disable: Boolean|Function<Boolean>, }
70
+ pagination = {
71
+ layout: 'total, sizes, prev, pager, next, jumper', 'page-sizes': [10, 20, 50, 100, 200], size: 10
72
+ };
73
+ style = {
74
+ flexHeight: false, // 表格是否使用弹性高度: 自适应高度, 撑满全屏
75
+ bodyRowHeight: '50px', // 行高
76
+ size: 'default', // 尺寸
77
+ formLabelWidth: 'auto', // 表单标签宽度:
78
+ formLayout: null, // 表单布局: 只作用于form表单, 对快筛和行内编辑无效
79
+ quickFilterSpan: 3, // 快筛每行几个筛选项
80
+ quickFilterGridGap: '10px 20px', // 快筛项之间的间距(grid布局中的gap)
81
+ };
82
+ render; // 渲染函数, 当前table需要被pick时有用
83
+ conds = []; // 固定的筛选条件,内部无法取消
84
+ condGroups = []; // 开发层面预置的条件组——即存筛,例如: [{label: '成年男孩', conds: [{col: 'sex', val: '1'}, {col: 'age', opt: Opt.LE, val: 18}]}], important: 要求conds中每个col都必须启用了filter,只要有一项未启用则整个筛选组无效
85
+ condExtra = {}; // 扩展的查询条件, 可在#quickFilter插槽中使用。例如配置了keyword, 则可将query.extra.keyword绑定到自定义输入控件上
86
+
87
+ beforeReset;
88
+ beforeLoad;
89
+ loadSuccess;
90
+ loadFail;
91
+ beforeInsert;
92
+ insertSuccess;
93
+ insertFail;
94
+ beforeUpdate;
95
+ updateSuccess;
96
+ updateFail;
97
+ beforeDelete;
98
+ deleteSuccess;
99
+ deleteFail;
100
+ beforeToInsert; // 进入新建前(行内编辑新建前,或新建表单弹窗前)
101
+ beforeToUpdate; // 进入更新前(行内编辑更新前,或更新表单弹窗前)
102
+ beforeDeleteTip;
103
+ beforeCancel; // 工能区中取消按钮点击前
104
+ beforeExport; // 导出前
105
+ exportSuccess; // 导出成功后
106
+ exportFail; // 导出失败后
107
+
108
+ static $http; // Axios实例
109
+ static $router; // VueRouter实例
110
+
111
+ constructor({
112
+ context,
113
+ id = '',
114
+ title = '',
115
+ showTitle = true,
116
+ module = '', // @deprecated 1.6, 替换为baseUrl
117
+ baseUrl = '',
118
+ pageUrl = '',
119
+ listUrl = '',
120
+ insertUrl = '',
121
+ batchInsertUrl = '',
122
+ updateUrl = '',
123
+ batchUpdateUrl = '',
124
+ deleteUrl = '',
125
+ batchDeleteUrl = '',
126
+ uploadUrl = '',
127
+ exportUrl = '',
128
+ existsUrl = '',
129
+ enableDblClickEdit = true,
130
+ enableMulti = true,
131
+ enableIndex = false,
132
+ enableColumnFilter = true,
133
+ enableFilterCache = true,
134
+ lazyLoad = false,
135
+ editType = 'inline',
136
+ queryable = true,
137
+ insertable = true,
138
+ updatable = true,
139
+ deletable = true,
140
+ exportable = true,
141
+ idField = 'id',
142
+ createTimeField = '',
143
+ sortField = '',
144
+ sortDesc = true,
145
+ moreButtons = [],
146
+ pagination = {
147
+ layout: 'total, sizes, prev, pager, next, jumper',
148
+ 'page-sizes': [10, 20, 50, 100, 200],
149
+ size: 10
150
+ },
151
+ style = {},
152
+ render = () => [],
153
+ conds = [],
154
+ condGroups = [],
155
+ condExtra = {},
156
+ beforeReset = ({query}) => Promise.resolve(),
157
+ beforeLoad = ({query}) => Promise.resolve(),
158
+ loadSuccess = ({query, res}) => Promise.resolve(res), // res为数据而非response
159
+ loadFail = ({query, error}) => Promise.resolve(),
160
+ beforeToInsert = (rows) => Promise.resolve(),
161
+ beforeInsert = ({fatRows, rows, editRows}) => Promise.resolve(editRows),
162
+ insertSuccess = ({fatRows, rows, editRows, res}) => Promise.resolve(),
163
+ insertFail = ({fatRows, rows, editRows, error}) => Promise.resolve(),
164
+ beforeToUpdate = ({fatRows, rows}) => Promise.resolve(),
165
+ beforeUpdate = ({fatRows, rows, editRows}) => Promise.resolve(editRows),
166
+ updateSuccess = ({fatRows, rows, editRows, res}) => Promise.resolve(),
167
+ updateFail = ({fatRows, rows, editRows, error}) => Promise.resolve(),
168
+ beforeDeleteTip = ({fatRows, rows}) => Promise.resolve(),
169
+ beforeDelete = ({fatRows, rows}) => Promise.resolve(rows),
170
+ deleteSuccess = ({fatRows, rows, res}) => Promise.resolve(),
171
+ deleteFail = ({fatRows, rows, error}) => Promise.resolve(),
172
+ beforeCancel = ({fatRows, rows, status}) => Promise.resolve(),
173
+ beforeExport = ({columns, pageQuery}) => Promise.resolve(columns),
174
+ exportSuccess = ({columns, pageQuery, data}) => Promise.resolve(),
175
+ exportFail = ({columns, pageQuery, error}) => Promise.resolve()
176
+ }) {
177
+ util.assert(util.isString(title), 'title必须为字符串')
178
+ util.assert(util.isBoolean(showTitle) || util.isFunction(showTitle), 'showTitle必须为布尔值或返回布尔值的函数')
179
+ util.assert(util.isString(id), 'id必须为字符串')
180
+ util.assert(util.isString(module), 'module必须为字符串')
181
+ util.assert(util.isString(baseUrl), 'baseUrl必须是字符串')
182
+ util.assert(util.isBoolean(enableDblClickEdit) || util.isFunction(enableDblClickEdit), 'enableDblClickEdit必须为布尔值或返回布尔值的函数')
183
+ util.assert(util.isBoolean(enableMulti) || util.isFunction(enableMulti), 'enableMulti必须为布尔值或返回布尔值的函数')
184
+ util.assert(util.isBoolean(enableIndex) || util.isFunction(enableIndex), 'enableIndex必须为布尔值或返回布尔值的函数')
185
+ util.assert(util.isBoolean(enableColumnFilter) || util.isFunction(enableColumnFilter), 'enableColumnFilter必须为布尔值或返回布尔值的函数')
186
+ util.assert(util.isBoolean(enableFilterCache) || util.isFunction(enableFilterCache), 'enableFilterCache必须为布尔值或返回布尔值的函数')
187
+ util.assert(util.isBoolean(lazyLoad) || util.isFunction(lazyLoad), 'lazyLoad必须为布尔值或返回布尔值的函数')
188
+ util.assert(['inline', 'form'].includes(editType), 'editType必须为inline或form')
189
+ util.assert(util.isBoolean(queryable) || util.isFunction(queryable), 'queryable必须为布尔值或返回布尔值的函数')
190
+ util.assert(util.isBoolean(insertable) || util.isFunction(insertable), 'insertable必须为布尔值或返回布尔值的函数')
191
+ util.assert(util.isBoolean(updatable) || util.isFunction(updatable), 'updatable必须为布尔值或返回布尔值的函数')
192
+ util.assert(util.isBoolean(deletable) || util.isFunction(deletable), 'deletable必须为布尔值或返回布尔值的函数')
193
+ util.assert(util.isBoolean(exportable) || util.isFunction(exportable), 'exportable必须为布尔值或返回布尔值的函数')
194
+ util.assert(util.isString(idField), 'idField必须为字符串')
195
+ util.assert(util.isString(createTimeField), 'createTimeField必须为字符串')
196
+ util.assert(util.isString(sortField), 'sortField必须为字符串')
197
+ util.assert(util.isBoolean(sortDesc), 'sortDesc必须为布尔值')
198
+ util.assert(util.isArray(moreButtons), 'moreButtons必须是数组')
199
+ util.assert(util.isObject(pagination), 'pagination必须是对象')
200
+ util.assert(util.isFunction(beforeReset), 'beforeReset必须为函数')
201
+ util.assert(util.isFunction(beforeLoad), 'beforeLoad必须为函数')
202
+ util.assert(util.isFunction(loadSuccess), 'loadSuccess必须为函数')
203
+ util.assert(util.isFunction(loadFail), 'loadFail必须为函数')
204
+ util.assert(util.isFunction(beforeToInsert), 'beforeToInsert必须为函数')
205
+ util.assert(util.isFunction(beforeInsert), 'beforeInsert必须为函数')
206
+ util.assert(util.isFunction(insertSuccess), 'insertSuccess必须为函数')
207
+ util.assert(util.isFunction(insertFail), 'insertFail必须为函数')
208
+ util.assert(util.isFunction(beforeToUpdate), 'beforeToUpdate必须为函数')
209
+ util.assert(util.isFunction(beforeUpdate), 'beforeUpdate必须为函数')
210
+ util.assert(util.isFunction(updateSuccess), 'updateSuccess必须为函数')
211
+ util.assert(util.isFunction(updateFail), 'updateFail必须为函数')
212
+ util.assert(util.isFunction(beforeDeleteTip), 'beforeDeleteTip必须为函数')
213
+ util.assert(util.isFunction(beforeDelete), 'beforeDelete必须为函数')
214
+ util.assert(util.isFunction(deleteSuccess), 'deleteSuccess必须为函数')
215
+ util.assert(util.isFunction(deleteFail), 'deleteFail必须为函数')
216
+ util.assert(util.isFunction(beforeCancel), 'beforeCancel必须为函数')
217
+ util.assert(util.isFunction(render), "render必须是一个函数")
218
+ util.assert(util.isFunction(beforeExport), "beforeExport必须是一个函数")
219
+ util.assert(util.isFunction(exportSuccess), "exportSuccess必须是一个函数")
220
+ util.assert(util.isFunction(exportFail), "exportFail必须是一个函数")
221
+ util.assert(util.isArray(conds), "conds必须是Cond对象(或可转换为Cond对象的json)组成的数组")
222
+ util.assert(util.isArray(condGroups), 'condGroups必须是数组')
223
+ util.assert(util.isObject(condExtra), 'condExtra必须是对象')
224
+
225
+ this.context = context;
226
+ this.title = title;
227
+ this.baseUrl = util.defaultIfBlank(baseUrl, module);
228
+ this.id = util.defaultIfBlank(id, this.baseUrl)
229
+ this.pageUrl = util.defaultIfBlank(pageUrl, this.baseUrl + '/page');
230
+ this.listUrl = util.defaultIfBlank(listUrl, this.baseUrl + '/list');
231
+ this.insertUrl = util.defaultIfBlank(insertUrl, this.baseUrl + '/insert');
232
+ this.batchInsertUrl = util.defaultIfBlank(batchInsertUrl, this.baseUrl + '/insert/batch');
233
+ this.updateUrl = util.defaultIfBlank(updateUrl, this.baseUrl + '/update');
234
+ this.batchUpdateUrl = util.defaultIfBlank(batchUpdateUrl, this.baseUrl + '/update/batch');
235
+ this.deleteUrl = util.defaultIfBlank(deleteUrl, this.baseUrl + '/delete');
236
+ this.batchDeleteUrl = util.defaultIfBlank(batchDeleteUrl, this.baseUrl + '/delete/batch');
237
+ this.uploadUrl = util.defaultIfBlank(uploadUrl, this.baseUrl + '/upload');
238
+ this.exportUrl = util.defaultIfBlank(exportUrl, this.baseUrl + '/export');
239
+ this.existsUrl = util.defaultIfBlank(existsUrl, this.baseUrl + '/exists');
240
+ this.enableDblClickEdit = enableDblClickEdit;
241
+ this.enableMulti = enableMulti;
242
+ this.enableIndex = enableIndex;
243
+ this.enableColumnFilter = enableColumnFilter;
244
+ this.enableFilterCache = enableFilterCache;
245
+ this.lazyLoad = lazyLoad;
246
+ this.editType = editType;
247
+ this.queryable = queryable;
248
+ this.insertable = insertable;
249
+ this.updatable = updatable;
250
+ this.deletable = deletable;
251
+ this.exportable = exportable;
252
+ this.idField = idField;
253
+ this.createTimeField = createTimeField;
254
+ this.sortField = util.defaultIfBlank(sortField, util.defaultIfBlank(createTimeField, idField));
255
+ this.sortDesc = sortDesc;
256
+ this.moreButtons = moreButtons;
257
+ util.mergeValue(this.pagination, pagination, true, true)
258
+ util.mergeValue(this.style, style, true, true)
259
+ this.conds = conds.map(c => Cond.build(c));
260
+ this.condGroups = condGroups;
261
+ this.condExtra = condExtra;
262
+
263
+ this.beforeReset = beforeReset;
264
+ this.beforeLoad = beforeLoad;
265
+ this.loadSuccess = loadSuccess;
266
+ this.loadFail = loadFail;
267
+
268
+ this.beforeToInsert = beforeToInsert;
269
+ this.beforeInsert = beforeInsert;
270
+ this.insertSuccess = insertSuccess;
271
+ this.insertFail = insertFail;
272
+
273
+ this.beforeToUpdate = beforeToUpdate;
274
+ this.beforeUpdate = beforeUpdate;
275
+ this.updateSuccess = updateSuccess;
276
+ this.updateFail = updateFail;
277
+
278
+ this.beforeDeleteTip = beforeDeleteTip;
279
+ this.beforeDelete = beforeDelete;
280
+ this.deleteSuccess = deleteSuccess;
281
+ this.deleteFail = deleteFail;
282
+
283
+ this.beforeCancel = beforeCancel;
284
+
285
+ this.render = render;
286
+ this.beforeExport = beforeExport;
287
+ this.exportSuccess = exportSuccess;
288
+ this.exportFail = exportFail;
289
+ }
290
+
291
+ /**
292
+ * 向内置条件组中增加条件
293
+ * @param cond
294
+ * @param repeatable 是否允许重复的col, 默认false, 即若多次添加相同col的条件, 只会保留最新的
295
+ */
296
+ addCond(cond, repeatable = false) {
297
+ const c = Cond.build(cond)
298
+ if (repeatable === false) {
299
+ this.removeCond(c.col)
300
+ }
301
+ this.conds.push(c)
302
+ }
303
+
304
+ /**
305
+ * 从内置条件组中移除条件
306
+ * @param col
307
+ */
308
+ removeCond(col) {
309
+ for (let i = this.conds.length - 1; i >= 0; i--) {
310
+ if (this.conds[i].col === col) {
311
+ this.conds.splice(i, 1)
312
+ }
313
+ }
314
+ }
315
+
316
+ /**
317
+ * 新增行, 返回promise
318
+ * @param fatRows
319
+ * @returns {Promise<void>|Promise<unknown>}
320
+ */
321
+ _insertRows(fatRows) {
322
+ if (fatRows.length === 0) {
323
+ return Promise.resolve();
324
+ }
325
+ return new Promise((resolve, reject) => {
326
+ const {context, beforeInsert} = this;
327
+ const rows = fatRows.map(r => r.row);
328
+ const editRows = fatRows.map(r => r.editRow);
329
+ beforeInsert.call(context, {
330
+ fatRows: fatRows,
331
+ rows: rows,
332
+ editRows: editRows
333
+ }).then((postData) => {
334
+ const {insertUrl, batchInsertUrl, insertSuccess, insertFail} = this;
335
+ const postPromise = (postData.length === 1 ? post(insertUrl, postData[0]) : post(batchInsertUrl, postData))
336
+ postPromise.then(res => {
337
+ resolve();
338
+ insertSuccess.call(context, {
339
+ fatRows: fatRows,
340
+ rows: rows,
341
+ editRows: editRows,
342
+ res: res
343
+ }).then(() => {
344
+ ElMessage.success(`成功新增${postData.length}条记录`); // TODO 成功几条使用后端返回的数据
345
+ });
346
+ }).catch(err => {
347
+ reject(err);
348
+ insertFail.call(context, {
349
+ fatRows: fatRows,
350
+ rows: rows,
351
+ editRows: editRows,
352
+ error: err
353
+ }).then(() => {
354
+ ElMessage.error('新增失败:' + JSON.stringify(err));
355
+ });
356
+ })
357
+ }).catch(err => {
358
+ reject(err);
359
+ })
360
+ });
361
+ }
362
+
363
+ /**
364
+ * 更新行
365
+ * @param fatRows
366
+ * @return 返回promise, 若成功更新则resolve; 若失败或取消, 则返回reject err或用户自定义的内容
367
+ */
368
+ _updateRows(fatRows) {
369
+ if (fatRows.length === 0) {
370
+ return Promise.resolve();
371
+ }
372
+ return new Promise((resolve, reject) => {
373
+ const {context, beforeUpdate} = this;
374
+ const rows = fatRows.map(r => r.row);
375
+ const editRows = fatRows.map(r => r.editRow);
376
+ beforeUpdate.call(context, {
377
+ fatRows: fatRows,
378
+ rows: rows,
379
+ editRows: editRows
380
+ }).then((postData) => {
381
+ const {updateUrl, batchUpdateUrl, updateSuccess, updateFail} = this;
382
+ const postPromise = (postData.length === 1 ? post(updateUrl, postData[0]) : post(batchUpdateUrl, postData))
383
+ postPromise.then(res => {
384
+ resolve();
385
+ updateSuccess.call(context, {
386
+ fatRows: fatRows,
387
+ rows: rows,
388
+ editRows: editRows,
389
+ res: res
390
+ }).then(() => {
391
+ ElMessage.success(`成功更新${postData.length}条记录`); // TODO 成功几条使用后端返回的数据
392
+ });
393
+ }).catch(err => {
394
+ reject(err);
395
+ updateFail.call(context, {
396
+ fatRows: fatRows,
397
+ rows: rows,
398
+ editRows: editRows,
399
+ error: err
400
+ }).then(() => {
401
+ ElMessage.error('更新失败:' + JSON.stringify(err));
402
+ });
403
+ })
404
+ }).catch(err => {
405
+ reject(err);
406
+ })
407
+ });
408
+ }
409
+
410
+ /**
411
+ * 列表查询
412
+ * @param query 查询条件 Query类型
413
+ * @param config
414
+ */
415
+ _list(query, config) {
416
+ this.conds.forEach(c => query.addCond(c)) // 内置conds添加
417
+ return post(this.listUrl, query.toJson(), config)
418
+ }
419
+
420
+ /**
421
+ * 导出
422
+ * @param columnConfigs
423
+ * @param pageQuery
424
+ */
425
+ _exportData(columnConfigs, pageQuery) {
426
+ const {context, beforeExport} = this
427
+ beforeExport.call(context, {
428
+ columns: columnConfigs,
429
+ pageQuery: pageQuery
430
+ }).then(() => {
431
+ openDialog({
432
+ component: ExportConfirm,
433
+ props: {
434
+ columns: columnConfigs
435
+ },
436
+ dialogProps: {
437
+ title: '导出设置',
438
+ width: '60%',
439
+ okClose: false,
440
+ handleOk: ({columns, all = false}) => {
441
+ // 导出数据
442
+ const {title, exportUrl, exportSuccess, exportFail} = this;
443
+ post(exportUrl, {
444
+ columns: columns,
445
+ all: all, // false-当前页; true-全部
446
+ pageQuery: pageQuery
447
+ }, {
448
+ responseType: 'blob'
449
+ }).then((data) => {
450
+ const url = window.URL.createObjectURL(data);
451
+ const link = document.createElement('a')
452
+ link.href = url;
453
+ const dateStr = util.dateFormat(new Date(), 'YYYYMMDDHHmmssSSS')
454
+ link.setAttribute('download', `${title ? title : 'download'}_${dateStr}.xlsx`)
455
+ document.body.appendChild(link)
456
+ link.click()
457
+ link.remove()
458
+ exportSuccess.call(context, {
459
+ columns: columnConfigs,
460
+ pageQuery: pageQuery,
461
+ data: data
462
+ })
463
+ }).catch((err) => {
464
+ exportFail.call(context, {
465
+ columns: columnConfigs,
466
+ pageQuery: pageQuery,
467
+ error: err
468
+ }).then(() => {
469
+ ElMessage.error('导出失败:' + err.message)
470
+ })
471
+ })
472
+ },
473
+ // handleCancel: (who) => {
474
+ // console.log(`你取消了下载..${who}触发cancel`)
475
+ // }
476
+ }
477
+ }).then(({columns, all = false}) => {
478
+ // do nothing, dialog props中配置了handleOk
479
+ }).catch(() => {
480
+ // do nothing
481
+ })
482
+ })
483
+ }
484
+
485
+ /**
486
+ * 存在性判断
487
+ */
488
+ _exist(conds = []) {
489
+ if (util.isEmpty(conds)) {
490
+ return Promise.resolve()
491
+ }
492
+ const {existsUrl} = this
493
+ return new Promise((resolve, reject) => {
494
+ post(existsUrl, conds).then(result => {
495
+ resolve(result)
496
+ }).catch(err => {
497
+ reject(err)
498
+ })
499
+ })
500
+ }
501
+
502
+ /**
503
+ * 利用/list接口构造选项列表数据
504
+ * @param query
505
+ * @param valKey
506
+ * @param labelKey
507
+ * @return {Promise<*>}
508
+ */
509
+ _buildSelectOptions(query, valKey, labelKey) {
510
+ return new Promise((resolve, reject) => {
511
+ const key = `OPTIONS:${this.id}_${valKey}_${labelKey}_` + md5(JSON.stringify(util.sortKey(query)))
512
+ let options = getFromSessionStorage(key)
513
+ if (util.isArray(options)) {
514
+ try {
515
+ resolve(options)
516
+ return
517
+ } catch (err) {
518
+ console.log(err)
519
+ deleteFromSessionStorage(key)
520
+ }
521
+ }
522
+ this._list(query).then(res => {
523
+ options = res.filter(item => util.isObject(item)).map(item => {
524
+ const obj = {}
525
+ obj[valKey] = item[valKey]
526
+ obj[labelKey] = item[labelKey]
527
+ return obj
528
+ })
529
+ setToSessionStorage(key, options, 1)
530
+ resolve(options)
531
+ }).catch(err => {
532
+ reject(err)
533
+ })
534
+ })
535
+ }
536
+ }
537
+
538
+ export default FastTableOption