sh-view 2.1.0 → 2.2.0

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 (128) hide show
  1. package/package.json +9 -13
  2. package/packages/components/global-components/sh-alert/index.vue +175 -173
  3. package/packages/components/global-components/sh-badge/index.vue +57 -43
  4. package/packages/components/global-components/sh-card/index.vue +24 -16
  5. package/packages/components/global-components/sh-code-editor/index.vue +250 -260
  6. package/packages/components/global-components/sh-col/index.vue +44 -36
  7. package/packages/components/global-components/sh-corner/index.vue +230 -228
  8. package/packages/components/global-components/sh-count-to/index.vue +60 -51
  9. package/packages/components/global-components/sh-drawer/index.vue +209 -182
  10. package/packages/components/global-components/sh-drawer/scrollbar.js +44 -42
  11. package/packages/components/global-components/sh-empty/index.vue +0 -1
  12. package/packages/components/global-components/sh-form/form.vue +110 -0
  13. package/packages/components/global-components/sh-form/js/props.js +76 -63
  14. package/packages/components/global-components/sh-form/js/useForm.js +236 -0
  15. package/packages/components/global-components/sh-form/query.vue +70 -0
  16. package/packages/components/global-components/sh-header/index.vue +35 -50
  17. package/packages/components/global-components/sh-icon/css/index.scss +44 -0
  18. package/packages/components/global-components/sh-icon/index.vue +24 -11
  19. package/packages/components/global-components/sh-image/index.vue +47 -38
  20. package/packages/components/global-components/sh-list/index.vue +42 -37
  21. package/packages/components/global-components/sh-loading/index.vue +12 -8
  22. package/packages/components/global-components/sh-modal/index.vue +49 -40
  23. package/packages/components/global-components/sh-noticebar/index.vue +68 -54
  24. package/packages/components/global-components/sh-poptip/index.vue +247 -130
  25. package/packages/components/global-components/sh-progress/index.vue +71 -69
  26. package/packages/components/global-components/sh-pull-refresh/index.vue +156 -157
  27. package/packages/components/global-components/sh-result/index.vue +37 -28
  28. package/packages/components/global-components/sh-row/index.vue +21 -18
  29. package/packages/components/global-components/sh-split/index.vue +115 -109
  30. package/packages/components/global-components/sh-table/components/importModal.vue +95 -86
  31. package/packages/components/global-components/sh-table/components/sh-column.vue +54 -0
  32. package/packages/components/global-components/sh-table/{index.vue → grid.vue} +34 -145
  33. package/packages/components/global-components/sh-table/js/tableMethods.js +175 -0
  34. package/packages/components/global-components/sh-table/js/useTable.js +592 -0
  35. package/packages/components/global-components/sh-table/table.vue +269 -0
  36. package/packages/components/global-components/sh-tabs/index.vue +118 -93
  37. package/packages/components/global-components/sh-tag/index.vue +52 -51
  38. package/packages/components/global-components/sh-toolbar/index.vue +53 -47
  39. package/packages/components/global-components/sh-tree/components/table-tree.vue +152 -139
  40. package/packages/components/global-components/sh-tree/index.vue +218 -195
  41. package/packages/components/global-components/sh-tree/mixin/treeProps.js +118 -120
  42. package/packages/components/global-components/sh-upload/index.vue +308 -51
  43. package/packages/components/global-components/sh-water-fall/index.vue +4 -11
  44. package/packages/components/index.js +5 -3
  45. package/packages/components/other-components/sh-cron-modal/components/cron-content.vue +140 -129
  46. package/packages/components/other-components/sh-cron-modal/css/index.scss +0 -5
  47. package/packages/components/other-components/sh-cron-modal/index.vue +81 -67
  48. package/packages/components/other-components/sh-cron-modal/mixin/cron-emits.js +1 -0
  49. package/packages/components/other-components/sh-cron-modal/mixin/cron-hooks.js +179 -0
  50. package/packages/components/other-components/sh-cron-modal/mixin/cron-props.js +9 -0
  51. package/packages/components/other-components/sh-cron-modal/tabs/cron-day-box.vue +101 -92
  52. package/packages/components/other-components/sh-cron-modal/tabs/cron-hour-box.vue +68 -56
  53. package/packages/components/other-components/sh-cron-modal/tabs/cron-minute-box.vue +68 -56
  54. package/packages/components/other-components/sh-cron-modal/tabs/cron-month-box.vue +68 -56
  55. package/packages/components/other-components/sh-cron-modal/tabs/cron-second-box.vue +68 -56
  56. package/packages/components/other-components/sh-cron-modal/tabs/cron-week-box.vue +126 -115
  57. package/packages/components/other-components/sh-cron-modal/tabs/cron-year-box.vue +59 -46
  58. package/packages/components/other-components/sh-menu/index.vue +73 -60
  59. package/packages/components/other-components/sh-menu/menu-group-content.vue +71 -59
  60. package/packages/components/other-components/sh-menu/menu-item-content.vue +40 -30
  61. package/packages/components/other-components/sh-menu-card/index.vue +70 -64
  62. package/packages/components/other-components/sh-menu-card/menu-box.vue +50 -44
  63. package/packages/components/other-components/sh-preview/components/sh-excel.vue +182 -0
  64. package/packages/components/other-components/sh-preview/components/sh-word.vue +73 -0
  65. package/packages/components/other-components/sh-preview/index.vue +86 -85
  66. package/packages/components/other-components/sh-preview/js/data-hook.js +37 -0
  67. package/packages/components/other-components/sh-preview/js/data-props.js +11 -0
  68. package/packages/components/other-components/sh-system-tip/index.vue +28 -24
  69. package/packages/css/index.js +4 -4
  70. package/packages/directive/module/prevent-click.js +1 -1
  71. package/packages/directive/module/resize.js +11 -154
  72. package/packages/index.js +39 -39
  73. package/packages/mixin/index.js +86 -87
  74. package/packages/vxeTable/render/cell/vxe-render-checkbox.vue +14 -5
  75. package/packages/vxeTable/render/cell/vxe-render-checkgroup.vue +43 -36
  76. package/packages/vxeTable/render/cell/vxe-render-code.vue +14 -5
  77. package/packages/vxeTable/render/cell/vxe-render-goption.vue +34 -24
  78. package/packages/vxeTable/render/cell/vxe-render-href.vue +21 -11
  79. package/packages/vxeTable/render/cell/vxe-render-img.vue +16 -10
  80. package/packages/vxeTable/render/cell/vxe-render-input.vue +83 -79
  81. package/packages/vxeTable/render/cell/vxe-render-money.vue +14 -6
  82. package/packages/vxeTable/render/cell/vxe-render-progress.vue +28 -19
  83. package/packages/vxeTable/render/cell/vxe-render-radio.vue +14 -5
  84. package/packages/vxeTable/render/cell/vxe-render-radiogroup.vue +43 -36
  85. package/packages/vxeTable/render/cell/vxe-render-select.vue +44 -36
  86. package/packages/vxeTable/render/cell/vxe-render-switch.vue +14 -5
  87. package/packages/vxeTable/render/cell/vxe-render-table.vue +51 -78
  88. package/packages/vxeTable/render/cell/vxe-render-textarea.vue +14 -5
  89. package/packages/vxeTable/render/cell/vxe-render-time.vue +23 -13
  90. package/packages/vxeTable/render/cell/vxe-render-tree.vue +23 -27
  91. package/packages/vxeTable/render/cell/vxe-render-upload.vue +11 -7
  92. package/packages/vxeTable/render/filters/vxe-filter-input.vue +25 -43
  93. package/packages/vxeTable/render/footer/vxe-footer-input.vue +23 -13
  94. package/packages/vxeTable/render/footer/vxe-footer-money.vue +30 -20
  95. package/packages/vxeTable/render/globalRenders.jsx +1 -1
  96. package/packages/vxeTable/render/header/vxe-header-money.vue +31 -21
  97. package/packages/vxeTable/render/mixin/cell-hooks.js +162 -0
  98. package/packages/vxeTable/render/mixin/cell-props.js +23 -0
  99. package/packages/vxeTable/render/mixin/filter-hooks.js +28 -0
  100. package/packages/components/global-components/sh-form/components/form-item.vue +0 -25
  101. package/packages/components/global-components/sh-form/css/index.scss +0 -55
  102. package/packages/components/global-components/sh-form/index.vue +0 -114
  103. package/packages/components/global-components/sh-form/js/methods.js +0 -146
  104. package/packages/components/global-components/sh-form/mixin/defaultData.js +0 -32
  105. package/packages/components/global-components/sh-icon/css/default/index.scss +0 -27
  106. package/packages/components/global-components/sh-icon/css/font/index.scss +0 -16
  107. package/packages/components/global-components/sh-icon/icon-default.vue +0 -32
  108. package/packages/components/global-components/sh-icon/icon-font.vue +0 -32
  109. package/packages/components/global-components/sh-poptip/popper.js +0 -115
  110. package/packages/components/global-components/sh-query/index.vue +0 -317
  111. package/packages/components/global-components/sh-table/js/methods.js +0 -549
  112. package/packages/components/global-components/sh-table/mixin/defaultData.js +0 -94
  113. package/packages/components/global-components/sh-upload/js/mixin.js +0 -257
  114. package/packages/components/other-components/sh-cron-modal/mixin/cron-box.js +0 -169
  115. package/packages/vxeTable/render/mixin/cell-mixin.js +0 -195
  116. /package/packages/components/global-components/sh-icon/css/default/{fonts/ionicons.svg → ionicons.svg} +0 -0
  117. /package/packages/components/global-components/sh-icon/css/default/{fonts/ionicons.ttf → ionicons.ttf} +0 -0
  118. /package/packages/components/global-components/sh-icon/css/default/{fonts/ionicons.woff → ionicons.woff} +0 -0
  119. /package/packages/components/global-components/sh-icon/css/default/{fonts/ionicons.woff2 → ionicons.woff2} +0 -0
  120. /package/packages/components/global-components/sh-icon/css/font/{fonts/iconfont.js → iconfont.js} +0 -0
  121. /package/packages/components/global-components/sh-icon/css/font/{fonts/iconfont.json → iconfont.json} +0 -0
  122. /package/packages/components/global-components/sh-icon/css/font/{fonts/iconfont.ttf → iconfont.ttf} +0 -0
  123. /package/packages/components/global-components/sh-icon/css/font/{fonts/iconfont.woff → iconfont.woff} +0 -0
  124. /package/packages/components/global-components/sh-icon/css/font/{fonts/iconfont.woff2 → iconfont.woff2} +0 -0
  125. /package/packages/{assets/css → css}/animated.scss +0 -0
  126. /package/packages/{assets/css → css}/loader.scss +0 -0
  127. /package/packages/{assets/css → css}/main.scss +0 -0
  128. /package/packages/{assets/css → css}/theme.scss +0 -0
@@ -1,549 +0,0 @@
1
- const vxeEvents = {
2
- // -------- 表格
3
- // 当前行变化
4
- onCurrentChange(params) {
5
- this.tableCurrentRowData = params
6
- this.$emit('current-change', params)
7
- },
8
- // 单选框变化
9
- onRadioChange(params) {
10
- var { row } = params
11
- this.selectionRows = [row]
12
- this.$emit('radio-change', this.selectionRows, params)
13
- },
14
- // 复选框变化
15
- onSelectionChange(params) {
16
- let { records } = params
17
- this.isAllChecked = this.tableRef().isAllCheckboxChecked()
18
- this.isIndeterminate = this.tableRef().isAllCheckboxIndeterminate()
19
- if (this.tableTreeConfig && this.tableTreeConfig?.transform) {
20
- let keyField = this.tableTreeConfig?.rowField || this.rowConfig.keyField || '_XID'
21
- let keyRowChild = '_X_ROW_CHILD'
22
- let childRowsKeys = []
23
- this.$vUtils.eachTree(records, row => {
24
- if (row[keyRowChild] && row[keyRowChild].length > 0) {
25
- row[keyRowChild].forEach(child => {
26
- childRowsKeys.push(child[keyField])
27
- })
28
- }
29
- })
30
- records = records.filter(row => !childRowsKeys.includes(row[keyField]))
31
- }
32
- this.selectionRows = records
33
- this.$emit('selection-change', this.selectionRows, params)
34
- },
35
- // 单元格点击事件
36
- onCellClick(params) {
37
- this.$emit('cell-click', params)
38
- },
39
- // 单元格双击事件
40
- onCellDblClick(params) {
41
- this.$emit('cell-dblclick', params)
42
- },
43
- // 单元格双击事件
44
- onHeaderCellClick(params) {
45
- this.$emit('header-cell-click', params)
46
- },
47
- // 排序变化事件
48
- onSortChange(params) {
49
- this.$emit('sort-change', params)
50
- },
51
- // 过滤变化事件
52
- onFilterChange(params) {
53
- this.$emit('filter-change', params)
54
- },
55
- // 当行展开或收起时会触发该事件
56
- onToggleRowExpand(params) {
57
- this.$emit('toggle-row-expand', params)
58
- },
59
- // 当树节点展开或收起时会触发该事件
60
- onToggleTreeExpand(params) {
61
- this.$emit('toggle-tree-expand', params)
62
- },
63
- // 只对 edit-config 配置时有效,单元格编辑状态下被关闭时会触发该事件
64
- async onEditClosed(params) {
65
- let { row, column } = params
66
- let { property, model, rname, rprops } = column
67
- if ((model.update || model.change) && rname) {
68
- let { rvalue, rtext } = this.$vUtils.formatRender(model.value, property, row, rname, rprops, this, true)
69
- this.$vUtils.set(row, column.property, rvalue)
70
- model.change = false
71
- }
72
- this.$emit('edit-closed', params)
73
- },
74
- // 只对 edit-config 配置时有效,单元格被激活编辑时会触发该事件
75
- async onEditActived(params) {
76
- this.$emit('edit-actived', params)
77
- },
78
- // 滚动事件
79
- onScroll(params) {
80
- this.$emit('scroll', params)
81
- },
82
- // 如果与工具栏关联,在自定义列按钮被手动点击后会触发该事件
83
- onCustom(params) {
84
- this.$emit('custom', params)
85
- },
86
- // 分页变化触发
87
- onPageChange(params) {
88
- this.selectionRows = []
89
- this.$emit('page-change', params)
90
- },
91
-
92
- // -------- 工具栏
93
- // 只对 toolbar.buttons 配置时有效,当左侧按钮被点击时会后触发该事件
94
- onToolbarButtonClick(params) {
95
- this.$emit('toolbar-button-click', params)
96
- },
97
- // 只对 toolbar.tools 配置时有效,当右侧工具被点击时会后触发该事件
98
- onToolbarToolClick(params) {
99
- this.$emit('toolbar-tool-click', params)
100
- }
101
- }
102
-
103
- const vxeFormEvents = {
104
- // 表单展开全部/收起切换事件
105
- onFormCollapsed(value) {
106
- const { tableRef } = this
107
- setTimeout(() => {
108
- tableRef().recalculate(true)
109
- })
110
- },
111
- // -------- 搜索
112
- onFormSubmit() {
113
- this.$emit('form-submit', this.queryData)
114
- },
115
- // 表单重置
116
- onFormReset(params) {
117
- this.$emit('form-reset', params)
118
- },
119
- // 表单项编辑回调
120
- onFormEditClosed(obj, renderbox, $form) {
121
- this.$emit('form-edit-closed', obj, renderbox, $form)
122
- },
123
- // 表单校验不通过
124
- onFormSubmitInvalid(obj) {
125
- this.$emit('form-submit-invalid', obj)
126
- }
127
- }
128
-
129
- const vxeMethods = {
130
- // // vxe组件方法可通过 this.tableRef() 调用
131
- // 表格全选
132
- setSelectionAll() {
133
- this.isAllChecked = !this.isAllChecked
134
- this.tableRef().setAllCheckboxRow(this.isAllChecked)
135
- this.selectionRows = this.tableRef().getCheckboxRecords()
136
- },
137
- // 表格打印、导出统一过滤列
138
- columnDefaultFilterMethod({ column, $columnIndex }) {
139
- let field = column.field
140
- let renderObj = column.cellRender || column.editRender
141
- let renderName = renderObj && renderObj.name
142
- let returnValue = true
143
- if (!field || ['seq', 'checkbox', 'radio'].includes(column.type)) {
144
- returnValue = false
145
- } else if (renderName === '$vGlobalOption') {
146
- returnValue = false
147
- }
148
- return returnValue
149
- },
150
- // 表格打印、导出统一导出前渲染数据
151
- getExportPrintDataByOption(obj = {}, type) {
152
- let { options, content } = obj
153
- let { data, columns, mode } = options
154
- if (!data) {
155
- if (mode === 'selected') {
156
- data = this.getSelectionData()
157
- } else {
158
- data = this.$vUtils.clone(this.tableRef().getTableData().fullData, true)
159
- let rnameColumns = columns.filter(col => col.rname)
160
- rnameColumns.forEach(col => {
161
- let { property, rname, rprops } = col
162
- data.forEach(row => {
163
- let cellValue = this.$vUtils.get(row, property)
164
- if (!this.$vUtils.isNone(cellValue)) {
165
- let { rvalue, rtext } = this.$vUtils.formatRender(cellValue, property, row, rname, rprops, this)
166
- this.$vUtils.set(row, property, rtext)
167
- }
168
- })
169
- })
170
- }
171
- options.data = data
172
- }
173
- return type === 'print' ? content : obj
174
- },
175
- // 表格导出-自定义工作簿
176
- exportSheetMethod({ options, workbook, worksheet }) {},
177
- // 表格导入方法
178
- setImportData(params) {
179
- this.$emit('import-confirm', params)
180
- },
181
- // 默认求底部绑定方法vxe
182
- tableFooterMethod({ columns, data }) {
183
- const { footerCalculate, tableFooterCompute } = this
184
- let footerData = []
185
- let footerCalculateList = footerCalculate.calculate || []
186
- footerCalculateList.forEach(key => {
187
- footerData.push(tableFooterCompute(columns, data, key, footerCalculate[key]))
188
- })
189
- return footerData
190
- },
191
- // 默认求底部计算方法(已改用footer渲染器,其他需要自行计算)
192
- tableFooterCompute(columns, data, computeType, typeObj = {}) {
193
- let emptyString = ''
194
- let computeName = typeObj.name || ''
195
- let computeData = typeObj.data || {}
196
- let textIndex = 0
197
- if (!computeName) {
198
- switch (computeType) {
199
- case 'subTotal':
200
- computeName = '合计'
201
- break
202
- case 'allTotal':
203
- computeName = '总计'
204
- break
205
- case 'mean':
206
- computeName = '平均'
207
- break
208
- default:
209
- }
210
- }
211
- return columns.map((column, columnIndex) => {
212
- let result = null
213
- if (column.type === 'seq' || column.type === 'total') {
214
- result = computeName
215
- textIndex = columnIndex
216
- } else {
217
- result = computeData[column.property] || emptyString
218
- this.$vUtils.set(column, `rfooter.index`, textIndex)
219
- this.$vUtils.set(column, `rfooter.${computeName}`, { computeType, result, typeObj })
220
- }
221
- return result
222
- })
223
- },
224
- tableFooterSpanMethod({ $rowIndex, column, $columnIndex, data }) {
225
- const { columnsConfigDefault, tableGlobalConfig } = this
226
- let defaultColumns = columnsConfigDefault.filter(item => tableGlobalConfig[item.type])
227
- let colspan = defaultColumns.length || 1
228
- if (column.type === 'seq') {
229
- return { rowspan: 1, colspan: colspan }
230
- } else if (column.type === 'checkbox' || column.type === 'radio') {
231
- return { rowspan: 1, colspan: 0 }
232
- } else {
233
- return { rowspan: 1, colspan: 1 }
234
- }
235
- }
236
- }
237
-
238
- const shMethods = {
239
- // 初始化
240
- initCreated() {},
241
- // 初始化生成新表头数据
242
- initTableColumns(columns = []) {
243
- let { columnsArr, columnsFlatArr, formItemsArr, rules } = this.getTransfarColumn(columns)
244
- this.tableColumnsFlat = columnsFlatArr
245
- this.tableFormItems = formItemsArr
246
- this.initEditRules(rules)
247
- this.tableColumnsFixed = this.$vUtils.clone(columnsArr, true)
248
- },
249
- // 初始化验证规则
250
- initEditRules(rules) {
251
- const { $vUtils } = this
252
- if (rules && $vUtils.isPlainObject(rules)) {
253
- Object.keys(rules).forEach(key => {
254
- if (this.tableEditRules[key]) {
255
- this.tableEditRules[key] = Array.from(new Set(this.tableEditRules[key].concat(rules[key])))
256
- } else {
257
- this.tableEditRules[key] = rules[key]
258
- }
259
- })
260
- }
261
- },
262
- // 初始化表头配置默认值
263
- initColsDefaultValue() {
264
- const { tableColumnsFlat, dataSourse, $vUtils } = this
265
- let colsDefaultValue = {}
266
- $vUtils.eachTree(tableColumnsFlat, item => {
267
- let renderObj = item.editRender || item.cellRender || {}
268
- let noRenderArr = ['$vGlobalOption']
269
- if (!noRenderArr.includes(renderObj.name) && !$vUtils.isNone(renderObj.props?.defaultValue)) {
270
- $vUtils.set(colsDefaultValue, item.field, renderObj.props?.defaultValue)
271
- }
272
- })
273
- this.tableRowDefaultData = colsDefaultValue
274
- if (Array.isArray(dataSourse) && Object.keys(colsDefaultValue).length > 0) {
275
- dataSourse.forEach(row => {
276
- Object.keys(colsDefaultValue).forEach(field => {
277
- if ($vUtils.isNone($vUtils.get(row, field))) {
278
- $vUtils.set(row, field, $vUtils.get(colsDefaultValue, field))
279
- }
280
- })
281
- })
282
- }
283
- },
284
- // 转换生成新表头数据
285
- getTransfarColumn(oriArr = []) {
286
- const { columnObjDefault, columnObj, tableGlobalConfig, isTrue, getDefaultMessage, turnColumnItemFilters, $vUtils } = this
287
- let columnsFlatArr = []
288
- let formItemsArr = []
289
- let rules = {}
290
- let columnsArr = $vUtils.mapTree(oriArr, ori => {
291
- let tar = Object.assign({}, columnObjDefault, columnObj, ori)
292
- if (ori.children && ori.children.length > 0) {
293
- tar.sortable = false
294
- tar.filter = false
295
- } else {
296
- let renderConfig = {
297
- name: ori.renderName || '$vInput',
298
- props: Object.assign({}, ori.renderProps || {})
299
- }
300
- // 首先提取校验配置
301
- if (isTrue(tar['renderRequire'])) {
302
- // 若配置了校验参数则走校验参数,没配置则给默认校验条件
303
- if (tar['requireProps'] && Array.isArray(tar['requireProps']) && tar['requireProps'].length > 0) {
304
- rules[tar['field']] = tar['requireProps']
305
- } else {
306
- let dataType = 'string'
307
- let arrayType = ['$vCheckgroup', '$vUpload', '$vTable']
308
- if (arrayType.includes(ori['renderName']) || ((ori['renderName'] === '$vSelect' || ori['renderName'] === '$vTree') && isTrue(renderConfig.props.multiple))) {
309
- dataType = 'array'
310
- }
311
- rules[tar['field']] = [{ required: true, message: getDefaultMessage(tar['renderName'], tar['title']), type: dataType }]
312
- }
313
- }
314
- // 个性化设置
315
- if (tar.renderName === '$vGlobalOption' || ['$vImg', '$vHref', '$vUpload'].includes(tar.renderName)) {
316
- tar.filter = false
317
- tar.sortable = false
318
- }
319
- if (tar.renderName === '$vGlobalOption') {
320
- tar.resizable = false
321
- }
322
- if (tar.renderName === '$vMoney' || ['number', 'float', 'integer'].includes(renderConfig.props.type)) {
323
- tar.cellType = 'number'
324
- }
325
- if (tar.renderName === '$vMoney' && renderConfig.props.bill) {
326
- tar.filter = false
327
- tar.headerClassName = tar.headerClassName ? `${tar.headerClassName} header-bill-cell` : 'header-bill-cell'
328
- }
329
- // 初始化排序条件
330
- if (Number(tar.sortable) === 0 || tar.sortable === 'false') {
331
- tar.sortable = false
332
- }
333
- // 判断单元格是否可编辑
334
- if (ori.readonly || ori.slots?.default || (!ori.renderName && !(tar.editRender && tar.editRender.name))) {
335
- tar.cellRender = Object.assign({}, renderConfig, tar.cellRender || {})
336
- } else {
337
- tar.editRender = Object.assign({}, renderConfig, tar.editRender || {})
338
- }
339
- // 初始化表单查询配置
340
- if (tableGlobalConfig.search) {
341
- let editFixedNames = ['$vImg', '$vHref', '$vUpload']
342
- let formItem = Object.assign({}, tar)
343
- formItem.itemRender = Object.assign({}, renderConfig, tar.editRender || {}, tar.itemRender || {})
344
- delete formItem.cellRender
345
- delete formItem.editRender
346
- formItem.itemRender.name = formItem.itemRender.name || '$vInput'
347
- // 此处修正, 对其不进行默认渲染
348
- if (formItem.search && formItem.search !== '0' && !editFixedNames.includes(formItem.itemRender.name)) {
349
- formItemsArr.push(formItem)
350
- }
351
- }
352
- // 初始化过滤条件
353
- if (tar.filter === true || Number(tar.filter) === 1) {
354
- turnColumnItemFilters(tar, renderConfig.props)
355
- }
356
- }
357
- columnsFlatArr.push(tar)
358
- return tar
359
- })
360
- return { columnsArr, columnsFlatArr, formItemsArr, rules }
361
- },
362
- // 转化表头过滤配置
363
- turnColumnItemFilters(column, props) {
364
- let columnRender = column.cellRender || column.editRender || column.contentRender
365
- let columnProps = Object.assign({}, props)
366
- columnProps.colRenderName = columnRender.name
367
- if (!column.filters) {
368
- switch (columnRender.name) {
369
- case '$select':
370
- case '$vSelect':
371
- case '$vCheckgroup':
372
- case '$vRadiogroup':
373
- case '$vSwitch':
374
- column.filters = Array.isArray(columnRender.props && columnRender.props.options) ? columnRender.props.options : false
375
- column.filterMultiple = true
376
- break
377
- case '$vInput':
378
- column.filters = [{ value: '', data: '' }]
379
- column.filterRender = { name: '$vFilterInput', props: columnProps }
380
- break
381
- default:
382
- column.filters = [{ value: '', data: '' }]
383
- column.filterRender = { name: '$vFilterInput', props: columnProps }
384
- break
385
- }
386
- }
387
- },
388
- // 获取默认验证信息
389
- getDefaultMessage(renderType, title) {
390
- let message = ''
391
- const selectRenders = ['$vSelect', '$vTree', '$vTime', '$vSwitch', '$vCheckbox', '$vCheckgroup', '$vRadio', '$vRadiogroup', '$vUpload']
392
- if (selectRenders.includes(renderType)) {
393
- message = '请选择' + title
394
- } else {
395
- message = '请输入' + title
396
- }
397
- return message
398
- },
399
- // 判断为true
400
- isTrue(value) {
401
- return String(value) === '1' || String(value).toLowerCase() === 'true'
402
- },
403
- // 全局搜索输入框事件
404
- handleTableFilter(obj) {
405
- const that = this
406
- let filterText = that.tableFilterText
407
- let filterData = null
408
- if (filterText) {
409
- let searchFields = []
410
- let tableColumnsAll = that.tableRef().getColumns()
411
- tableColumnsAll.forEach(col => {
412
- let renderObj = col.cellRender || col.editRender || col.itemRender
413
- let noSearchArr = ['$vGlobalOption', '$vImg', '$vCheckbox', '$vRadio', '$vUpload', '$vCode', 'seq', 'checkbox', 'radio']
414
- if (col.property && renderObj && renderObj.name && !noSearchArr.includes(renderObj.name) && !noSearchArr.includes(col.type)) {
415
- searchFields.push({ rkey: col.property, rname: renderObj.name, rprops: Object.assign({}, renderObj.props, col.rprops) })
416
- }
417
- })
418
- filterData = that.$vUtils.searchTree(that.dataSourse, row => {
419
- return searchFields.some(item => {
420
- let cellValue = that.$vUtils.get(row, item.rkey)
421
- if (that.$vxePluginNames.expendRenders && that.$vxePluginNames.expendRenders.includes(item.rname)) {
422
- let { rtext } = that.$vUtils.formatRender(cellValue, item.rkey, row, item.rname, item.rprops, that)
423
- return String(rtext).toLowerCase().indexOf(filterText) > -1
424
- }
425
- return that.$vUtils.trim(cellValue).toLowerCase().indexOf(filterText) > -1
426
- })
427
- })
428
- }
429
- if (that.tableFilterData === null && !filterText) {
430
- return
431
- }
432
- that.tableFilterData = filterData
433
- },
434
- // 获取选中数据
435
- getSelectionData() {
436
- return this.selectionRows || []
437
- },
438
- // 表格验证方法
439
- validate(rows = true) {
440
- return this.tableRef().validate(rows)
441
- },
442
- // 刷新表格视图
443
- refreshRender() {
444
- this.renderKey++
445
- },
446
- // 表格工具按钮点击
447
- handleTableTool({ code }) {
448
- switch (code) {
449
- case 'addRow':
450
- this.handleTableAddRow(null, undefined, true)
451
- break
452
- case 'deleteRow':
453
- this.handleTableDeleteRow(null, true)
454
- break
455
- case 'import':
456
- this.handleTableImportBtn()
457
- break
458
- case 'export':
459
- this.handleTableExportBtn()
460
- break
461
- case 'print':
462
- this.handleTablePrintBtn()
463
- break
464
- }
465
- },
466
- // 表格导出按钮
467
- handleTableExportBtn(options) {
468
- if (typeof this.onExportMethod === 'function') {
469
- return this.onExportMethod(options, this)
470
- }
471
- return this.tableRef().openExport(options)
472
- },
473
- // 表格导入按钮
474
- handleTableImportBtn() {
475
- this.importModal = true
476
- },
477
- // 表格打印按鈕
478
- handleTablePrintBtn(options) {
479
- if (typeof this.onPrintMethod === 'function') {
480
- return this.onPrintMethod(options, this)
481
- }
482
- return this.tableRef().openPrint(options)
483
- },
484
- // 表格切换全屏缩放按钮
485
- handleTableZoomBtn(val) {
486
- this.tableIsFullscreen = val
487
- if (val) {
488
- this.tableRef().zoom()
489
- } else {
490
- this.tableRef().revert()
491
- }
492
- },
493
- // 自定义操作列点击事件
494
- async handleGoptionClick(btnObj, dataObj) {
495
- if (btnObj.code === 'delete' || btnObj.idConfirm) {
496
- await this.msgconfirm({ content: btnObj.ConfirmContent || `确定${btnObj.content}吗?` })
497
- }
498
- this.$emit('globaloption', btnObj, dataObj)
499
- },
500
- // 新增行按钮
501
- async handleTableAddRow(rows, index = -1, isTool = false) {
502
- const { tableRowDefaultData, onToolbarBtnAddBefore, rowConfig, $vUtils, tableRef } = this
503
- let addRows = rows ? $vUtils.clone(rows, true) : tableRowDefaultData
504
- if (!isTool && typeof onToolbarBtnAddBefore === 'function') {
505
- addRows = await onToolbarBtnAddBefore(addRows)
506
- }
507
- // 删除主键,以防排序冲突
508
- let mainKeyField = rowConfig?.keyField || '_XID'
509
- if (Array.isArray(addRows)) {
510
- addRows.forEach(item => {
511
- delete item[mainKeyField]
512
- })
513
- } else {
514
- delete addRows[mainKeyField]
515
- }
516
- let { row: newRow } = await tableRef().insertAt(addRows, index)
517
- await tableRef().setActiveRow(newRow)
518
- if (!isTool) this.$emit('toolbaroption', 'add', newRow, tableRef())
519
- },
520
- // 删除行按钮
521
- async handleTableDeleteRow(rows, isTool = false) {
522
- let deleteRows = rows
523
- if (isTool) {
524
- let selectedRows = this.getSelectionData()
525
- if (selectedRows.length < 1) {
526
- this.msgwarning('请选择要删除的行!')
527
- return
528
- }
529
- deleteRows = selectedRows
530
- await this.msgconfirm({ content: `确定删除吗?` })
531
- } else if (typeof this.onToolbarBtnDeleteBefore === 'function') {
532
- let result = await this.onToolbarBtnDeleteBefore(deleteRows)
533
- if (!result) return
534
- }
535
- await this.tableRef().remove(deleteRows)
536
- if (this.selectionRows && this.selectionRows.length > 0) {
537
- let keyField = this.rowConfig.keyField || this.$vTableSetup.table.rowConfig.keyField
538
- this.selectionRows = this.selectionRows.filter(sr => !deleteRows.find(dr => dr[keyField] === sr[keyField]))
539
- }
540
- if (!isTool) this.$emit('toolbaroption', 'delete', deleteRows, this.tableRef())
541
- }
542
- }
543
-
544
- export default {
545
- ...vxeEvents,
546
- ...vxeFormEvents,
547
- ...vxeMethods,
548
- ...shMethods
549
- }
@@ -1,94 +0,0 @@
1
- export default {
2
- data() {
3
- return {
4
- // 全局配置
5
- globalConfigDefault: {
6
- tableName: '',
7
- title: false, // 是否显示 tableName
8
- checkbox: true, // 是否展示复选框
9
- radio: false, // 是否展示单选框
10
- seq: true, // 是否展示序号列
11
- ghost: false, // 是否开启透明
12
- search: false, // 表格是否开启查询,默认不开启,根据columns配置字段 search 为 true
13
- globalFilter: false, // 表格是否开启全局过滤
14
- zoom: false, // 表格是否开启缩放
15
- formToggleNum: 4,
16
- formToggle: true
17
- },
18
- // 表头默认值
19
- columnObjDefault: {
20
- minWidth: 120,
21
- sortable: true,
22
- filter: true
23
- },
24
- // 表头默认列
25
- columnsConfigDefault: [
26
- {
27
- title: '',
28
- type: 'checkbox',
29
- width: 60,
30
- align: 'center',
31
- fixed: 'left',
32
- sortable: false,
33
- resizable: false,
34
- className: 'table-row-checkbox'
35
- },
36
- {
37
- title: '单选',
38
- type: 'radio',
39
- width: 60,
40
- align: 'center',
41
- fixed: 'left',
42
- sortable: false,
43
- resizable: false,
44
- className: 'table-row-radio'
45
- },
46
- {
47
- title: '序号',
48
- type: 'seq',
49
- width: 70,
50
- align: 'center',
51
- fixed: 'left',
52
- sortable: false,
53
- resizable: false,
54
- className: 'table-row-seq'
55
- }
56
- ],
57
- exportConfigDefault: {
58
- type: 'xlsx',
59
- types: ['xlsx', 'csv', 'pdf', 'html', 'xml', 'txt'],
60
- mode: 'current',
61
- original: false,
62
- message: true,
63
- isHeader: true,
64
- isColgroup: true,
65
- isFooter: false,
66
- isMerge: false,
67
- isAllExpand: true,
68
- download: true,
69
- useStyle: false,
70
- columnFilterMethod: this.columnDefaultFilterMethod,
71
- sheetMethod: this.exportSheetMethod,
72
- beforeExportMethod: obj => this.getExportPrintDataByOption(obj, 'export')
73
- },
74
- printConfigDefault: {
75
- mode: 'current',
76
- original: false,
77
- message: true,
78
- isHeader: true,
79
- isColgroup: true,
80
- isFooter: false,
81
- isMerge: false,
82
- isAllExpand: true,
83
- download: true,
84
- useStyle: false,
85
- columnFilterMethod: this.columnDefaultFilterMethod,
86
- beforePrintMethod: obj => this.getExportPrintDataByOption(obj, 'print')
87
- }
88
- }
89
- },
90
- computed: {},
91
- methods: {},
92
- created() {},
93
- activated() {}
94
- }