sh-view 1.7.3 → 1.7.6
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.
- package/package.json +2 -2
- package/packages/components/global-components/{sh-layout → sh-split}/index.vue +1 -1
- package/packages/components/global-components/sh-upload/index.vue +182 -325
- package/packages/components/global-components/sh-upload/js/ajax.js +80 -0
- package/packages/components/global-components/sh-upload/js/mixin.js +257 -0
- package/packages/components/global-components/sh-vxe-form/js/methods.js +28 -41
- package/packages/components/global-components/sh-vxe-list/index.vue +25 -5
- package/packages/components/global-components/sh-vxe-query/index.vue +56 -32
- package/packages/components/global-components/sh-vxe-table/js/methods.js +81 -88
- package/packages/components/global-components/sh-vxe-toolbar/index.vue +3 -3
- package/packages/vxeTable/index.js +5 -6
- package/packages/components/global-components/sh-upload/components/u-img.vue +0 -63
- package/packages/components/global-components/sh-upload/components/u-list.vue +0 -100
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
v-bind="queryFormConfig"
|
|
8
8
|
:items="formItems"
|
|
9
9
|
:data="data"
|
|
10
|
-
:rules="
|
|
10
|
+
:rules="valid ? formRules : {}"
|
|
11
11
|
:valid-config="validConfig"
|
|
12
12
|
@submit="onFormSubmit"
|
|
13
13
|
@reset="onFormReset"
|
|
@@ -88,6 +88,9 @@ export default {
|
|
|
88
88
|
transformitem: {
|
|
89
89
|
type: Boolean,
|
|
90
90
|
default: true
|
|
91
|
+
},
|
|
92
|
+
valid: {
|
|
93
|
+
type: Boolean
|
|
91
94
|
}
|
|
92
95
|
},
|
|
93
96
|
emits: ['submit', 'reset', 'edit-closed', 'submit-invalid', 'collapsed'],
|
|
@@ -103,6 +106,8 @@ export default {
|
|
|
103
106
|
formOriginItems: [],
|
|
104
107
|
// 表单渲染项
|
|
105
108
|
formItems: [],
|
|
109
|
+
// 表单校验规则
|
|
110
|
+
formRules: {},
|
|
106
111
|
// 表格高级搜索默认配置
|
|
107
112
|
formConfigDefault: {
|
|
108
113
|
titleWidth: 100,
|
|
@@ -138,6 +143,13 @@ export default {
|
|
|
138
143
|
},
|
|
139
144
|
deep: true,
|
|
140
145
|
immediate: false
|
|
146
|
+
},
|
|
147
|
+
rules: {
|
|
148
|
+
handler(newvalue, oldValue) {
|
|
149
|
+
this.initEditRules(newvalue)
|
|
150
|
+
},
|
|
151
|
+
deep: true,
|
|
152
|
+
immediate: true
|
|
141
153
|
}
|
|
142
154
|
},
|
|
143
155
|
created() {
|
|
@@ -153,54 +165,66 @@ export default {
|
|
|
153
165
|
},
|
|
154
166
|
// 初始化表单字段
|
|
155
167
|
initFormData() {
|
|
156
|
-
const
|
|
157
|
-
let
|
|
158
|
-
|
|
168
|
+
const { items, data, $vUtils } = this
|
|
169
|
+
let queryItems = items.filter(item => item.search && item.search !== '0')
|
|
170
|
+
$vUtils.eachTree(queryItems, item => {
|
|
159
171
|
let renderProps = item.renderProps || item.itemRender?.props || {}
|
|
160
|
-
if (
|
|
161
|
-
|
|
172
|
+
if (!$vUtils.isNone(renderProps?.defaultValue) && $vUtils.isNone($vUtils.get(data, item.field))) {
|
|
173
|
+
$vUtils.set(data, item.field, renderProps.defaultValue)
|
|
162
174
|
}
|
|
163
175
|
})
|
|
164
176
|
},
|
|
165
177
|
// 初始化搜索表单
|
|
166
178
|
initFormItems() {
|
|
167
|
-
const that = this
|
|
168
179
|
let formItemsArr = [] // 表单项
|
|
169
|
-
let formItems =
|
|
180
|
+
let formItems = this.items.filter(item => item.search && item.search !== '0')
|
|
170
181
|
if (this.transformitem) {
|
|
171
|
-
let { itemsArr,
|
|
182
|
+
let { itemsArr, rules } = this.generateFormItem(formItems)
|
|
172
183
|
formItemsArr = itemsArr
|
|
184
|
+
this.initEditRules(rules)
|
|
173
185
|
} else {
|
|
174
186
|
formItemsArr = formItems
|
|
187
|
+
this.initEditRules(this.rules)
|
|
175
188
|
}
|
|
176
189
|
formItemsArr.forEach(item => {
|
|
177
190
|
item.visible = true
|
|
178
191
|
item.itemRender.props.disabled = false
|
|
179
192
|
})
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
if (formItemsArr.length >
|
|
183
|
-
|
|
184
|
-
|
|
193
|
+
this.formOriginItems = formItemsArr
|
|
194
|
+
this.formItems = formItemsArr
|
|
195
|
+
if (formItemsArr.length > this.globalConfig.formToggleNum && this.globalConfig.formToggle) {
|
|
196
|
+
this.formToggleBtnShow = true // 显示展开全部按钮
|
|
197
|
+
this.formBtnCollapsed(false)
|
|
185
198
|
}
|
|
186
199
|
this.initFormData()
|
|
187
200
|
},
|
|
201
|
+
// 初始化验证规则
|
|
202
|
+
initEditRules(rules) {
|
|
203
|
+
const { formRules, $vUtils } = this
|
|
204
|
+
if (rules && $vUtils.isPlainObject(rules)) {
|
|
205
|
+
Object.keys(rules).forEach(key => {
|
|
206
|
+
if (formRules[key]) {
|
|
207
|
+
formRules[key] = Array.from(new Set(formRules[key].concat(rules[key])))
|
|
208
|
+
} else {
|
|
209
|
+
formRules[key] = rules[key]
|
|
210
|
+
}
|
|
211
|
+
})
|
|
212
|
+
}
|
|
213
|
+
},
|
|
188
214
|
// 表单展开全部/收起切换事件
|
|
189
215
|
formBtnCollapsed(value) {
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
that.formItems = value ? that.formOriginItems : that.formOriginItems.slice(0, that.globalConfig.formToggleNum)
|
|
216
|
+
this.formCollapsed = value
|
|
217
|
+
this.formItems = value ? this.formOriginItems : this.formOriginItems.slice(0, this.globalConfig.formToggleNum)
|
|
193
218
|
this.$emit('collapsed', value)
|
|
194
219
|
},
|
|
195
220
|
// -------- 搜索
|
|
196
221
|
async onFormSubmit() {
|
|
197
|
-
let
|
|
198
|
-
let errMap = await
|
|
199
|
-
let data = that.data
|
|
222
|
+
let { data } = this
|
|
223
|
+
let errMap = await this.queryFormRef().validate()
|
|
200
224
|
if (!errMap) {
|
|
201
|
-
|
|
225
|
+
this.$emit('submit', data)
|
|
202
226
|
} else {
|
|
203
|
-
|
|
227
|
+
this.onFormSubmitInvalid({ data, errMap })
|
|
204
228
|
}
|
|
205
229
|
},
|
|
206
230
|
// 表单重置
|
|
@@ -223,31 +247,31 @@ export default {
|
|
|
223
247
|
},
|
|
224
248
|
// 自动生成表单渲染项
|
|
225
249
|
generateFormItem(items = []) {
|
|
226
|
-
const that = this
|
|
227
250
|
let itemsArr = []
|
|
228
|
-
let
|
|
229
|
-
|
|
230
|
-
|
|
251
|
+
let rules = {}
|
|
252
|
+
const { itemConfigDefault, readonly, disabled, isTrue, getDefaultMessage, $vUtils } = this
|
|
253
|
+
$vUtils.eachTree(items, ori => {
|
|
254
|
+
let tar = Object.assign({}, itemConfigDefault, ori)
|
|
231
255
|
let renderConfig = {
|
|
232
256
|
name: ori.renderName || '$vInput',
|
|
233
257
|
props: Object.assign({}, ori.renderProps || {})
|
|
234
258
|
}
|
|
235
|
-
if (
|
|
259
|
+
if (readonly || disabled) {
|
|
236
260
|
renderConfig.props.disabled = true
|
|
237
261
|
}
|
|
238
262
|
tar.itemRender = Object.assign({}, renderConfig, ori.itemRender || {})
|
|
239
263
|
// 首先提取校验配置
|
|
240
|
-
if (
|
|
264
|
+
if (isTrue(ori['renderRequire'])) {
|
|
241
265
|
// 若配置了校验参数则走校验参数,没配置则给默认校验条件
|
|
242
266
|
if (ori['requireProps'] && Array.isArray(ori['requireProps']) && ori['requireProps'].length > 0) {
|
|
243
|
-
|
|
267
|
+
rules[ori['field']] = ori['requireProps']
|
|
244
268
|
} else {
|
|
245
269
|
let dataType = 'string'
|
|
246
270
|
let arrayType = ['$vCheckgroup', '$vUpload', '$vTable']
|
|
247
|
-
if (arrayType.includes(ori['renderName']) || ((ori['renderName'] === '$vSelect' || ori['renderName'] === '$vTree') &&
|
|
271
|
+
if (arrayType.includes(ori['renderName']) || ((ori['renderName'] === '$vSelect' || ori['renderName'] === '$vTree') && isTrue(renderConfig.props.multiple))) {
|
|
248
272
|
dataType = 'array'
|
|
249
273
|
}
|
|
250
|
-
|
|
274
|
+
rules[ori['field']] = [{ required: true, message: getDefaultMessage(ori['renderName'], ori['title']), type: dataType }]
|
|
251
275
|
}
|
|
252
276
|
}
|
|
253
277
|
// 表单不支持编辑渲染过滤
|
|
@@ -256,7 +280,7 @@ export default {
|
|
|
256
280
|
itemsArr.push(tar)
|
|
257
281
|
}
|
|
258
282
|
})
|
|
259
|
-
return { itemsArr,
|
|
283
|
+
return { itemsArr, rules }
|
|
260
284
|
}
|
|
261
285
|
}
|
|
262
286
|
}
|
|
@@ -7,10 +7,9 @@ const vxeEvents = {
|
|
|
7
7
|
},
|
|
8
8
|
// 单选框变化
|
|
9
9
|
onRadioChange(params) {
|
|
10
|
-
const that = this
|
|
11
10
|
var { row } = params
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
this.selectionRows = [row]
|
|
12
|
+
this.$emit('radio-change', this.selectionRows, params)
|
|
14
13
|
},
|
|
15
14
|
// 复选框变化
|
|
16
15
|
onSelectionChange(params) {
|
|
@@ -63,15 +62,14 @@ const vxeEvents = {
|
|
|
63
62
|
},
|
|
64
63
|
// 只对 edit-config 配置时有效,单元格编辑状态下被关闭时会触发该事件
|
|
65
64
|
async onEditClosed(params) {
|
|
66
|
-
const that = this
|
|
67
65
|
let { row, column } = params
|
|
68
66
|
let { property, model, rname, rprops } = column
|
|
69
67
|
if ((model.update || model.change) && rname) {
|
|
70
|
-
let { rvalue, rtext } =
|
|
71
|
-
|
|
68
|
+
let { rvalue, rtext } = this.$vUtils.formatRender(model.value, property, row, rname, rprops, this, true)
|
|
69
|
+
this.$vUtils.set(row, column.property, rvalue)
|
|
72
70
|
model.change = false
|
|
73
71
|
}
|
|
74
|
-
|
|
72
|
+
this.$emit('edit-closed', params)
|
|
75
73
|
},
|
|
76
74
|
// 只对 edit-config 配置时有效,单元格被激活编辑时会触发该事件
|
|
77
75
|
async onEditActived(params) {
|
|
@@ -137,10 +135,9 @@ const vxeMethods = {
|
|
|
137
135
|
// // vxe组件方法可通过 this.tableRef() 调用
|
|
138
136
|
// 表格全选
|
|
139
137
|
setSelectionAll() {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
that.selectionRows = that.tableRef().getCheckboxRecords()
|
|
138
|
+
this.isAllChecked = !this.isAllChecked
|
|
139
|
+
this.tableRef().setAllCheckboxRow(this.isAllChecked)
|
|
140
|
+
this.selectionRows = this.tableRef().getCheckboxRecords()
|
|
144
141
|
},
|
|
145
142
|
// 表格打印、导出统一过滤列
|
|
146
143
|
columnDefaultFilterMethod({ column, $columnIndex }) {
|
|
@@ -188,11 +185,11 @@ const vxeMethods = {
|
|
|
188
185
|
},
|
|
189
186
|
// 默认求底部绑定方法vxe
|
|
190
187
|
tableFooterMethod({ columns, data }) {
|
|
191
|
-
|
|
188
|
+
const { footerCalculate, tableFooterCompute } = this
|
|
192
189
|
let footerData = []
|
|
193
|
-
let footerCalculateList =
|
|
190
|
+
let footerCalculateList = footerCalculate.calculate || []
|
|
194
191
|
footerCalculateList.forEach(key => {
|
|
195
|
-
footerData.push(
|
|
192
|
+
footerData.push(tableFooterCompute(columns, data, key, footerCalculate[key]))
|
|
196
193
|
})
|
|
197
194
|
return footerData
|
|
198
195
|
},
|
|
@@ -230,8 +227,8 @@ const vxeMethods = {
|
|
|
230
227
|
})
|
|
231
228
|
},
|
|
232
229
|
tableFooterSpanMethod({ $rowIndex, column, $columnIndex, data }) {
|
|
233
|
-
|
|
234
|
-
let defaultColumns =
|
|
230
|
+
const { columnsConfigDefault, tableGlobalConfig } = this
|
|
231
|
+
let defaultColumns = columnsConfigDefault.filter(item => tableGlobalConfig[item.type])
|
|
235
232
|
let colspan = defaultColumns.length || 1
|
|
236
233
|
if (column.type === 'seq') {
|
|
237
234
|
return { rowspan: 1, colspan: colspan }
|
|
@@ -256,47 +253,46 @@ const shMethods = {
|
|
|
256
253
|
},
|
|
257
254
|
// 初始化生成新表头数据
|
|
258
255
|
initTableColumns(columns = []) {
|
|
259
|
-
let
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
that.tableColumnsFixed = that.$vUtils.clone(columnsArr, true)
|
|
256
|
+
let { columnsArr, columnsFlatArr, formItemsArr, rules } = this.getTransfarColumn(columns)
|
|
257
|
+
this.tableColumnsFlat = columnsFlatArr
|
|
258
|
+
this.tableFormItems = formItemsArr
|
|
259
|
+
this.initEditRules(rules)
|
|
260
|
+
if (!this.tableReverse) {
|
|
261
|
+
this.tableColumnsFixed = this.$vUtils.clone(columnsArr, true)
|
|
266
262
|
} else {
|
|
267
|
-
|
|
263
|
+
this.tableColumnsFixed = this.getReverseColumn(this.columns)
|
|
268
264
|
}
|
|
269
265
|
},
|
|
270
266
|
// 初始化验证规则
|
|
271
267
|
initEditRules(rules) {
|
|
272
|
-
const
|
|
273
|
-
if (rules &&
|
|
268
|
+
const { tableEditRules, $vUtils } = this
|
|
269
|
+
if (rules && $vUtils.isPlainObject(rules)) {
|
|
274
270
|
Object.keys(rules).forEach(key => {
|
|
275
|
-
if (
|
|
276
|
-
|
|
271
|
+
if (tableEditRules[key]) {
|
|
272
|
+
tableEditRules[key] = Array.from(new Set(tableEditRules[key].concat(rules[key])))
|
|
277
273
|
} else {
|
|
278
|
-
|
|
274
|
+
tableEditRules[key] = rules[key]
|
|
279
275
|
}
|
|
280
276
|
})
|
|
281
277
|
}
|
|
282
278
|
},
|
|
283
279
|
// 初始化表头配置默认值
|
|
284
280
|
initColsDefaultValue() {
|
|
285
|
-
const
|
|
281
|
+
const { tableColumnsFlat, dataSourse, $vUtils } = this
|
|
286
282
|
let colsDefaultValue = {}
|
|
287
|
-
|
|
283
|
+
$vUtils.eachTree(tableColumnsFlat, item => {
|
|
288
284
|
let renderObj = item.editRender || item.cellRender || {}
|
|
289
285
|
let noRenderArr = ['$vGlobalOption']
|
|
290
|
-
if (!noRenderArr.includes(renderObj.name) &&
|
|
291
|
-
|
|
286
|
+
if (!noRenderArr.includes(renderObj.name) && !$vUtils.isNone(renderObj.props?.defaultValue)) {
|
|
287
|
+
$vUtils.set(colsDefaultValue, item.field, renderObj.props?.defaultValue)
|
|
292
288
|
}
|
|
293
289
|
})
|
|
294
|
-
|
|
295
|
-
if (Array.isArray(
|
|
296
|
-
|
|
290
|
+
this.tableRowDefaultData = colsDefaultValue
|
|
291
|
+
if (Array.isArray(dataSourse) && Object.keys(colsDefaultValue).length > 0) {
|
|
292
|
+
dataSourse.forEach(row => {
|
|
297
293
|
Object.keys(colsDefaultValue).forEach(field => {
|
|
298
|
-
if (
|
|
299
|
-
|
|
294
|
+
if ($vUtils.isNone($vUtils.get(row, field))) {
|
|
295
|
+
$vUtils.set(row, field, $vUtils.get(colsDefaultValue, field))
|
|
300
296
|
}
|
|
301
297
|
})
|
|
302
298
|
})
|
|
@@ -304,36 +300,36 @@ const shMethods = {
|
|
|
304
300
|
},
|
|
305
301
|
// 反转表格-反转表头及数据
|
|
306
302
|
getReverseColumn(oriColumns) {
|
|
307
|
-
const
|
|
303
|
+
const { reverseConfig, disabled, columnObjDefault, dataSourse } = this
|
|
308
304
|
let columns = []
|
|
309
|
-
let columnsNum =
|
|
310
|
-
let keyPrefix =
|
|
311
|
-
let titPrefix =
|
|
312
|
-
let valueRenderObj =
|
|
305
|
+
let columnsNum = reverseConfig.num
|
|
306
|
+
let keyPrefix = reverseConfig.keyPrefix || 'reversePre'
|
|
307
|
+
let titPrefix = reverseConfig.titPrefix || ''
|
|
308
|
+
let valueRenderObj = disabled ? { cellRender: { name: '$vRowCell' } } : { editRender: { name: '$vRowCell' } }
|
|
313
309
|
if (columnsNum) {
|
|
314
310
|
for (let i = 1; i <= columnsNum; i++) {
|
|
315
311
|
columns.push(
|
|
316
|
-
Object.assign({ field: `${keyPrefix}title${i}`, title: `名称${i}` },
|
|
317
|
-
Object.assign({ field: `${keyPrefix}value${i}`, title: `数值${i}` },
|
|
312
|
+
Object.assign({ field: `${keyPrefix}title${i}`, title: `名称${i}` }, columnObjDefault),
|
|
313
|
+
Object.assign({ field: `${keyPrefix}value${i}`, title: `数值${i}` }, columnObjDefault, valueRenderObj)
|
|
318
314
|
)
|
|
319
315
|
}
|
|
320
316
|
} else {
|
|
321
|
-
columns.push(Object.assign({ field: `${keyPrefix}title`, title: '名称', fixed: 'left' },
|
|
322
|
-
|
|
323
|
-
columns.push(Object.assign({ field: `${keyPrefix}value${index + 1}`, title: `${titPrefix}${index + 1}` },
|
|
317
|
+
columns.push(Object.assign({ field: `${keyPrefix}title`, title: '名称', fixed: 'left' }, columnObjDefault))
|
|
318
|
+
dataSourse.forEach((item, index) => {
|
|
319
|
+
columns.push(Object.assign({ field: `${keyPrefix}value${index + 1}`, title: `${titPrefix}${index + 1}` }, columnObjDefault, valueRenderObj))
|
|
324
320
|
})
|
|
325
321
|
}
|
|
326
322
|
return columns
|
|
327
323
|
},
|
|
328
324
|
// 反转表格-反转配置生成数据
|
|
329
325
|
getReverseData(oriData = []) {
|
|
330
|
-
const
|
|
326
|
+
const { reverseConfig, columns, $vUtils } = this
|
|
331
327
|
let data = []
|
|
332
|
-
let columnsNum =
|
|
333
|
-
let keyPrefix =
|
|
328
|
+
let columnsNum = reverseConfig.num
|
|
329
|
+
let keyPrefix = reverseConfig.keyPrefix || 'reversePre'
|
|
334
330
|
if (columnsNum) {
|
|
335
331
|
// 将表头平均分组
|
|
336
|
-
let chunkColumns =
|
|
332
|
+
let chunkColumns = $vUtils.chunk(columns, columnsNum)
|
|
337
333
|
chunkColumns.forEach((colGroup, colGroupIndex) => {
|
|
338
334
|
let item = {}
|
|
339
335
|
colGroup.forEach((column, columnIndex) => {
|
|
@@ -345,7 +341,7 @@ const shMethods = {
|
|
|
345
341
|
data.push(item)
|
|
346
342
|
})
|
|
347
343
|
} else {
|
|
348
|
-
data =
|
|
344
|
+
data = columns.map(column => {
|
|
349
345
|
const item = { [`${keyPrefix}title`]: column.title }
|
|
350
346
|
oriData.forEach((row, index) => {
|
|
351
347
|
item[`${keyPrefix}value${index + 1}`] = row[column.field] || ''
|
|
@@ -359,12 +355,12 @@ const shMethods = {
|
|
|
359
355
|
},
|
|
360
356
|
// 转换生成新表头数据
|
|
361
357
|
getTransfarColumn(oriArr = []) {
|
|
362
|
-
|
|
358
|
+
const { columnObjDefault, columnObj, tableGlobalConfig, isTrue, getDefaultMessage, turnColumnItemFilters, $vUtils } = this
|
|
363
359
|
let columnsFlatArr = []
|
|
364
360
|
let formItemsArr = []
|
|
365
361
|
let rules = {}
|
|
366
|
-
let columnsArr =
|
|
367
|
-
let tar = Object.assign({},
|
|
362
|
+
let columnsArr = $vUtils.mapTree(oriArr, ori => {
|
|
363
|
+
let tar = Object.assign({}, columnObjDefault, columnObj, ori)
|
|
368
364
|
if (ori.children && ori.children.length > 0) {
|
|
369
365
|
tar.sortable = false
|
|
370
366
|
tar.filter = false
|
|
@@ -374,17 +370,17 @@ const shMethods = {
|
|
|
374
370
|
props: Object.assign({}, ori.renderProps || {})
|
|
375
371
|
}
|
|
376
372
|
// 首先提取校验配置
|
|
377
|
-
if (
|
|
373
|
+
if (isTrue(tar['renderRequire'])) {
|
|
378
374
|
// 若配置了校验参数则走校验参数,没配置则给默认校验条件
|
|
379
375
|
if (tar['requireProps'] && Array.isArray(tar['requireProps']) && tar['requireProps'].length > 0) {
|
|
380
376
|
rules[tar['field']] = tar['requireProps']
|
|
381
377
|
} else {
|
|
382
378
|
let dataType = 'string'
|
|
383
379
|
let arrayType = ['$vCheckgroup', '$vUpload', '$vTable']
|
|
384
|
-
if (arrayType.includes(ori['renderName']) || ((ori['renderName'] === '$vSelect' || ori['renderName'] === '$vTree') &&
|
|
380
|
+
if (arrayType.includes(ori['renderName']) || ((ori['renderName'] === '$vSelect' || ori['renderName'] === '$vTree') && isTrue(renderConfig.props.multiple))) {
|
|
385
381
|
dataType = 'array'
|
|
386
382
|
}
|
|
387
|
-
rules[tar['field']] = [{ required: true, message:
|
|
383
|
+
rules[tar['field']] = [{ required: true, message: getDefaultMessage(tar['renderName'], tar['title']), type: dataType }]
|
|
388
384
|
}
|
|
389
385
|
}
|
|
390
386
|
// 个性化设置
|
|
@@ -413,7 +409,7 @@ const shMethods = {
|
|
|
413
409
|
tar.editRender = Object.assign({}, renderConfig, tar.editRender || {})
|
|
414
410
|
}
|
|
415
411
|
// 初始化表单查询配置
|
|
416
|
-
if (
|
|
412
|
+
if (tableGlobalConfig.search) {
|
|
417
413
|
let editFixedNames = ['$vImg', '$vHref', '$vUpload']
|
|
418
414
|
let formItem = Object.assign({}, tar)
|
|
419
415
|
formItem.itemRender = Object.assign({}, renderConfig, tar.editRender || {}, tar.itemRender || {})
|
|
@@ -427,7 +423,7 @@ const shMethods = {
|
|
|
427
423
|
}
|
|
428
424
|
// 初始化过滤条件
|
|
429
425
|
if (tar.filter === true || Number(tar.filter) === 1) {
|
|
430
|
-
|
|
426
|
+
turnColumnItemFilters(tar, renderConfig.props)
|
|
431
427
|
}
|
|
432
428
|
}
|
|
433
429
|
columnsFlatArr.push(tar)
|
|
@@ -547,28 +543,24 @@ const shMethods = {
|
|
|
547
543
|
}
|
|
548
544
|
},
|
|
549
545
|
// 自定义操作列点击事件
|
|
550
|
-
handleGoptionClick(btnObj, dataObj) {
|
|
551
|
-
const that = this
|
|
546
|
+
async handleGoptionClick(btnObj, dataObj) {
|
|
552
547
|
if (btnObj.code === 'delete' || btnObj.idConfirm) {
|
|
553
|
-
|
|
548
|
+
await this.msgconfirm({
|
|
554
549
|
content: btnObj.ConfirmContent || `确定${btnObj.content}吗?`
|
|
555
|
-
}).then(() => {
|
|
556
|
-
that.$emit('globaloption', btnObj, dataObj)
|
|
557
550
|
})
|
|
558
551
|
} else {
|
|
559
|
-
that.$emit('globaloption', btnObj, dataObj)
|
|
560
552
|
}
|
|
553
|
+
this.$emit('globaloption', btnObj, dataObj)
|
|
561
554
|
},
|
|
562
555
|
// 新增行按钮
|
|
563
556
|
async handleTableAddRow(rows, index = -1, isTool = false) {
|
|
564
|
-
const
|
|
565
|
-
let
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
addRows = await that.onToolbarBtnAddBefore(addRows)
|
|
557
|
+
const { tableRowDefaultData, onToolbarBtnAddBefore, rowConfig, $vUtils, tableRef } = this
|
|
558
|
+
let addRows = rows ? $vUtils.clone(rows, true) : tableRowDefaultData
|
|
559
|
+
if (!isTool && typeof onToolbarBtnAddBefore === 'function') {
|
|
560
|
+
addRows = await onToolbarBtnAddBefore(addRows)
|
|
569
561
|
}
|
|
570
562
|
// 删除主键,以防排序冲突
|
|
571
|
-
let mainKeyField =
|
|
563
|
+
let mainKeyField = rowConfig?.keyField || '_XID'
|
|
572
564
|
if (Array.isArray(addRows)) {
|
|
573
565
|
addRows.forEach(item => {
|
|
574
566
|
delete item[mainKeyField]
|
|
@@ -576,30 +568,31 @@ const shMethods = {
|
|
|
576
568
|
} else {
|
|
577
569
|
delete addRows[mainKeyField]
|
|
578
570
|
}
|
|
579
|
-
let { row: newRow } = await
|
|
580
|
-
await
|
|
581
|
-
if (!isTool)
|
|
571
|
+
let { row: newRow } = await tableRef().insertAt(addRows, index)
|
|
572
|
+
await tableRef().setActiveRow(newRow)
|
|
573
|
+
if (!isTool) this.$emit('toolbaroption', 'add', newRow, tableRef())
|
|
582
574
|
},
|
|
583
575
|
// 删除行按钮
|
|
584
576
|
async handleTableDeleteRow(rows, isTool = false) {
|
|
585
|
-
const that = this
|
|
586
577
|
let deleteRows = rows
|
|
587
578
|
if (isTool) {
|
|
588
|
-
let selectedRows =
|
|
589
|
-
if (selectedRows.length < 1)
|
|
579
|
+
let selectedRows = this.getSelectionData()
|
|
580
|
+
if (selectedRows.length < 1) {
|
|
581
|
+
this.msgwarning('请选择要删除的行!')
|
|
582
|
+
return
|
|
583
|
+
}
|
|
590
584
|
deleteRows = selectedRows
|
|
591
|
-
await
|
|
592
|
-
}
|
|
593
|
-
|
|
594
|
-
let result = await that.onToolbarBtnDeleteBefore(deleteRows)
|
|
585
|
+
await this.msgconfirm({ content: `确定删除吗?` })
|
|
586
|
+
} else if (typeof this.onToolbarBtnDeleteBefore === 'function') {
|
|
587
|
+
let result = await this.onToolbarBtnDeleteBefore(deleteRows)
|
|
595
588
|
if (!result) return
|
|
596
589
|
}
|
|
597
|
-
await
|
|
598
|
-
if (
|
|
599
|
-
let keyField =
|
|
600
|
-
|
|
590
|
+
await this.tableRef().remove(deleteRows)
|
|
591
|
+
if (this.selectionRows && this.selectionRows.length > 0) {
|
|
592
|
+
let keyField = this.rowConfig.keyField || this.$vTableSetup.table.rowConfig.keyField
|
|
593
|
+
this.selectionRows = this.selectionRows.filter(sr => !deleteRows.find(dr => dr[keyField] === sr[keyField]))
|
|
601
594
|
}
|
|
602
|
-
if (!isTool)
|
|
595
|
+
if (!isTool) this.$emit('toolbaroption', 'delete', deleteRows, this.tableRef())
|
|
603
596
|
}
|
|
604
597
|
}
|
|
605
598
|
|
|
@@ -104,12 +104,12 @@ export default {
|
|
|
104
104
|
},
|
|
105
105
|
rightBtns() {
|
|
106
106
|
let rBtns = []
|
|
107
|
-
let { rightConfig } = this
|
|
107
|
+
let { rightConfig, relation, leftActive } = this
|
|
108
108
|
if (rightConfig && Array.isArray(rightConfig)) {
|
|
109
109
|
rBtns = rightConfig
|
|
110
110
|
}
|
|
111
|
-
if (
|
|
112
|
-
rBtns = rBtns.filter(item => item.code && item.code.split(',').includes(
|
|
111
|
+
if (relation) {
|
|
112
|
+
rBtns = rBtns.filter(item => item.code && item.code.split(',').includes(leftActive))
|
|
113
113
|
}
|
|
114
114
|
return rBtns
|
|
115
115
|
},
|
|
@@ -96,13 +96,12 @@ let vxeOptions = {
|
|
|
96
96
|
return $$seq
|
|
97
97
|
} else if (tablePage) {
|
|
98
98
|
const { pagerConfig } = grid.props
|
|
99
|
-
const pageStart = seqConfig?.startIndex || (pagerConfig.pageSize
|
|
100
|
-
return
|
|
101
|
-
} else if (
|
|
102
|
-
return $seq
|
|
103
|
-
} else {
|
|
104
|
-
return seq === -1 ? $rowIndex + (seqConfig.startIndex || 1) : seq
|
|
99
|
+
const pageStart = seqConfig?.startIndex || (+pagerConfig.pageSize || 50) * ((+pagerConfig.currentPage || 1) - 1)
|
|
100
|
+
return treeConfig && $seq ? Number(pageStart) + Number($seq) + '.' + seq : Number(pageStart) + Number(seq)
|
|
101
|
+
} else if (treeConfig) {
|
|
102
|
+
return $seq ? $seq + '.' + seq : seq
|
|
105
103
|
}
|
|
104
|
+
return seq === -1 ? $rowIndex + (seqConfig.startIndex || 1) : seq
|
|
106
105
|
}
|
|
107
106
|
},
|
|
108
107
|
resizeConfig: {
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<img :src="imgsrc" />
|
|
3
|
-
</template>
|
|
4
|
-
|
|
5
|
-
<script>
|
|
6
|
-
export default {
|
|
7
|
-
name: 'UImg',
|
|
8
|
-
props: {
|
|
9
|
-
src: {
|
|
10
|
-
type: String
|
|
11
|
-
},
|
|
12
|
-
file: {
|
|
13
|
-
type: Object
|
|
14
|
-
},
|
|
15
|
-
baseUrl: {
|
|
16
|
-
type: String
|
|
17
|
-
}
|
|
18
|
-
},
|
|
19
|
-
data() {
|
|
20
|
-
return {
|
|
21
|
-
imgsrc: ''
|
|
22
|
-
}
|
|
23
|
-
},
|
|
24
|
-
watch: {
|
|
25
|
-
file: {
|
|
26
|
-
handler: function (val, oldVal) {
|
|
27
|
-
this.initMounted()
|
|
28
|
-
},
|
|
29
|
-
immediate: false,
|
|
30
|
-
deep: true
|
|
31
|
-
}
|
|
32
|
-
},
|
|
33
|
-
mounted() {
|
|
34
|
-
this.initMounted()
|
|
35
|
-
},
|
|
36
|
-
methods: {
|
|
37
|
-
// 初始化渲染
|
|
38
|
-
async initMounted() {
|
|
39
|
-
if (!this.src) {
|
|
40
|
-
this.imgsrc = this.file ? await this.getImagePreviewData(this.file) : ''
|
|
41
|
-
} else {
|
|
42
|
-
this.imgsrc = this.src.startsWith('http') ? this.src : this.baseUrl || this.$config.baseUrl.pro + this.src
|
|
43
|
-
}
|
|
44
|
-
},
|
|
45
|
-
// 生成预览图片列表
|
|
46
|
-
async getImagePreviewData(file) {
|
|
47
|
-
let fileReader = new FileReader()
|
|
48
|
-
return new Promise((resolve, reject) => {
|
|
49
|
-
try {
|
|
50
|
-
fileReader.readAsDataURL(file)
|
|
51
|
-
fileReader.onload = function (e) {
|
|
52
|
-
resolve(e.target.result)
|
|
53
|
-
}
|
|
54
|
-
} catch (e) {
|
|
55
|
-
reject(e)
|
|
56
|
-
}
|
|
57
|
-
})
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
</script>
|
|
62
|
-
|
|
63
|
-
<style scoped></style>
|