313 lines
10 KiB
Java
313 lines
10 KiB
Java
import XEUtils from 'xe-utils/methods/xe-utils'
|
|
import GlobalConfig from '../../conf'
|
|
import formats from '../../v-x-e-table/src/formats'
|
|
|
|
let zindexIndex = 0
|
|
let lastZindex = 1
|
|
|
|
function getColFuncWidth (isExists, defaultWidth = 16) {
|
|
return isExists ? defaultWidth : 0
|
|
}
|
|
|
|
class ColumnConfig {
|
|
/* eslint-disable @typescript-eslint/no-use-before-define */
|
|
constructor ($xetable, _vm, { renderHeader, renderCell, renderFooter, renderData } = {}) {
|
|
const $xegrid = $xetable.$xegrid
|
|
const proxyOpts = $xegrid ? $xegrid.proxyOpts : null
|
|
const formatter = _vm.formatter
|
|
const visible = XEUtils.isBoolean(_vm.visible) ? _vm.visible : true
|
|
if (_vm.cellRender && _vm.editRender) {
|
|
UtilTools.warn('vxe.error.errConflicts', ['column.cell-render', 'column.edit-render'])
|
|
}
|
|
// 在 v3.0 中废弃 editRender.type
|
|
if (_vm.editRender && _vm.editRender.type === 'visible') {
|
|
// UtilTools.warn('vxe.error.delProp', ['column.edit-render.type', 'column.cell-render'])
|
|
}
|
|
// 在 v3.0 中废弃 prop
|
|
if (_vm.prop) {
|
|
UtilTools.warn('vxe.error.delProp', ['column.prop', 'column.field'])
|
|
}
|
|
// 在 v3.0 中废弃 label
|
|
if (_vm.label) {
|
|
UtilTools.warn('vxe.error.delProp', ['column.label', 'column.title'])
|
|
}
|
|
// 在 v3.0 中废弃 type=index
|
|
if (_vm.type === 'index') {
|
|
UtilTools.warn('vxe.error.delProp', ['column.type=index', 'column.type=seq'])
|
|
} else if (_vm.type === 'selection') {
|
|
// 在 v3.0 中废弃 type=selection
|
|
UtilTools.warn('vxe.error.delProp', ['column.type=selection', 'column.type=checkbox'])
|
|
} else if (_vm.type === 'expand') {
|
|
if ($xetable.treeConfig && $xetable.treeOpts.line) {
|
|
UtilTools.error('vxe.error.errConflicts', ['tree-config.line', 'column.type=expand'])
|
|
}
|
|
if (_vm.slots && !_vm.slots.content && _vm.slots.default) {
|
|
UtilTools.warn('vxe.error.expandContent')
|
|
}
|
|
}
|
|
if (formatter) {
|
|
if (XEUtils.isString(formatter)) {
|
|
let globalFunc = formats.get(formatter)
|
|
if (!globalFunc && XEUtils[formatter]) {
|
|
globalFunc = XEUtils[formatter]
|
|
// 在 v3.0 中废弃挂载格式化方式
|
|
UtilTools.warn('vxe.error.errFormat', [formatter])
|
|
}
|
|
if (!XEUtils.isFunction(globalFunc)) {
|
|
UtilTools.error('vxe.error.notFunc', [formatter])
|
|
}
|
|
} else if (XEUtils.isArray(formatter)) {
|
|
let globalFunc = formats.get(formatter[0])
|
|
if (!globalFunc && XEUtils[formatter[0]]) {
|
|
globalFunc = XEUtils[formatter[0]]
|
|
// 在 v3.0 中废弃挂载格式化方式
|
|
UtilTools.warn('vxe.error.errFormat', [formatter[0]])
|
|
}
|
|
if (!XEUtils.isFunction(globalFunc)) {
|
|
UtilTools.error('vxe.error.notFunc', [formatter[0]])
|
|
}
|
|
}
|
|
}
|
|
Object.assign(this, {
|
|
// 基本属性
|
|
type: _vm.type,
|
|
// 在 v3.0 中废弃 prop
|
|
prop: _vm.prop,
|
|
property: _vm.field || _vm.prop,
|
|
title: _vm.title,
|
|
// 在 v3.0 中废弃 label
|
|
label: _vm.label,
|
|
width: _vm.width,
|
|
minWidth: _vm.minWidth,
|
|
resizable: _vm.resizable,
|
|
fixed: _vm.fixed,
|
|
align: _vm.align,
|
|
headerAlign: _vm.headerAlign,
|
|
footerAlign: _vm.footerAlign,
|
|
showOverflow: _vm.showOverflow,
|
|
showHeaderOverflow: _vm.showHeaderOverflow,
|
|
showFooterOverflow: _vm.showFooterOverflow,
|
|
className: _vm.class || _vm.className,
|
|
headerClassName: _vm.headerClassName,
|
|
footerClassName: _vm.footerClassName,
|
|
indexMethod: _vm.indexMethod,
|
|
seqMethod: _vm.seqMethod,
|
|
formatter: formatter,
|
|
sortable: _vm.sortable,
|
|
sortBy: _vm.sortBy,
|
|
sortMethod: _vm.sortMethod,
|
|
remoteSort: _vm.remoteSort,
|
|
filters: UtilTools.getFilters(_vm.filters),
|
|
filterMultiple: XEUtils.isBoolean(_vm.filterMultiple) ? _vm.filterMultiple : true,
|
|
filterMethod: _vm.filterMethod,
|
|
filterRender: _vm.filterRender,
|
|
treeNode: _vm.treeNode,
|
|
cellType: _vm.cellType,
|
|
cellRender: _vm.cellRender,
|
|
editRender: _vm.editRender,
|
|
contentRender: _vm.contentRender,
|
|
// 自定义参数
|
|
params: _vm.params,
|
|
// 渲染属性
|
|
id: XEUtils.uniqueId('col_'),
|
|
parentId: null,
|
|
visible,
|
|
halfVisible: false,
|
|
defaultVisible: visible,
|
|
checked: false,
|
|
halfChecked: false,
|
|
disabled: false,
|
|
level: 1,
|
|
rowSpan: 1,
|
|
colSpan: 1,
|
|
order: null,
|
|
renderWidth: 0,
|
|
renderHeight: 0,
|
|
resizeWidth: 0,
|
|
renderLeft: 0,
|
|
renderArgs: [], // 渲染参数可用于扩展
|
|
model: {},
|
|
renderHeader: renderHeader || _vm.renderHeader,
|
|
renderCell: renderCell || _vm.renderCell,
|
|
renderFooter: renderFooter || _vm.renderFooter,
|
|
renderData: renderData,
|
|
// 单元格插槽,只对 grid 有效
|
|
slots: _vm.slots,
|
|
own: _vm
|
|
})
|
|
if (proxyOpts && proxyOpts.beforeColumn) {
|
|
proxyOpts.beforeColumn({ $grid: $xegrid, column: this })
|
|
}
|
|
}
|
|
|
|
getTitle () {
|
|
// 在 v3.0 中废弃 label、type=index
|
|
return UtilTools.getFuncText(this.own.title || this.own.label || (this.type === 'seq' || this.type === 'index' ? GlobalConfig.i18n('vxe.table.seqTitle') : ''))
|
|
}
|
|
|
|
getKey () {
|
|
return this.property || (this.type ? `type=${this.type}` : null)
|
|
}
|
|
|
|
getMinWidth () {
|
|
const { type, filters, sortable, remoteSort, editRender } = this
|
|
return 40 + getColFuncWidth(type === 'checkbox' || type === 'selection', 18) + getColFuncWidth(filters) + getColFuncWidth(sortable || remoteSort) + getColFuncWidth(editRender, 32)
|
|
}
|
|
|
|
update (name, value) {
|
|
// 不支持双向的属性
|
|
if (name !== 'filters') {
|
|
this[name] = value
|
|
if (name === 'field') {
|
|
this.property = value
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function outLog (type) {
|
|
return function (message, params) {
|
|
const msg = UtilTools.getLog(message, params)
|
|
console[type](msg)
|
|
return msg
|
|
}
|
|
}
|
|
|
|
export const UtilTools = {
|
|
warn: outLog('warn'),
|
|
error: outLog('error'),
|
|
getLog (message, params) {
|
|
return `[vxe-table] ${XEUtils.template(GlobalConfig.i18n(message), params)}`
|
|
},
|
|
getFuncText (content) {
|
|
return XEUtils.isFunction(content) ? content() : (GlobalConfig.translate ? GlobalConfig.translate(content) : content)
|
|
},
|
|
nextZIndex () {
|
|
lastZindex = GlobalConfig.zIndex + zindexIndex++
|
|
return lastZindex
|
|
},
|
|
getLastZIndex () {
|
|
return lastZindex
|
|
},
|
|
// 行主键 key
|
|
getRowkey ($xetable) {
|
|
return $xetable.rowId || '_XID'
|
|
},
|
|
// 行主键 value
|
|
getRowid ($xetable, row) {
|
|
const rowId = XEUtils.get(row, UtilTools.getRowkey($xetable))
|
|
return rowId ? encodeURIComponent(rowId) : ''
|
|
},
|
|
// 获取所有的列,排除分组
|
|
getColumnList (columns) {
|
|
const result = []
|
|
columns.forEach(column => {
|
|
result.push(...(column.children && column.children.length ? UtilTools.getColumnList(column.children) : [column]))
|
|
})
|
|
return result
|
|
},
|
|
getClass (property, params) {
|
|
return property ? XEUtils.isFunction(property) ? property(params) : property : ''
|
|
},
|
|
getFilters (filters) {
|
|
if (filters && XEUtils.isArray(filters)) {
|
|
return filters.map(({ label, value, data, resetValue, checked }) => ({ label, value, data, resetValue, checked: !!checked }))
|
|
}
|
|
return filters
|
|
},
|
|
formatText (value, placeholder) {
|
|
return '' + (value === '' || value === null || value === undefined ? (placeholder ? GlobalConfig.emptyCell : '') : value)
|
|
},
|
|
getCellValue (row, column) {
|
|
return XEUtils.get(row, column.property)
|
|
},
|
|
getCellLabel (row, column, params) {
|
|
const { formatter } = column
|
|
const cellValue = UtilTools.getCellValue(row, column)
|
|
let cellLabel = cellValue
|
|
if (params && formatter) {
|
|
let rest, formatData
|
|
const { $table } = params
|
|
const colid = column.id
|
|
const fullAllDataRowMap = $table.fullAllDataRowMap
|
|
const cacheFormat = fullAllDataRowMap.has(row)
|
|
const formatParams = { cellValue, row, column }
|
|
if (cacheFormat) {
|
|
rest = fullAllDataRowMap.get(row)
|
|
formatData = rest.formatData
|
|
if (!formatData) {
|
|
formatData = fullAllDataRowMap.get(row).formatData = {}
|
|
}
|
|
if (rest && formatData[colid]) {
|
|
if (formatData[colid].value === cellValue) {
|
|
return formatData[colid].label
|
|
}
|
|
}
|
|
}
|
|
if (XEUtils.isString(formatter)) {
|
|
if (XEUtils[formatter]) {
|
|
cellLabel = XEUtils[formatter](cellValue)
|
|
} else if (formats.get(formatter)) {
|
|
cellLabel = formats.get(formatter)(formatParams)
|
|
} else {
|
|
cellLabel = ''
|
|
}
|
|
} else if (XEUtils.isArray(formatter)) {
|
|
if (XEUtils[formatter[0]]) {
|
|
cellLabel = XEUtils[formatter[0]](cellValue, ...formatter.slice(1))
|
|
} else if (formats.get(formatter[0])) {
|
|
cellLabel = formats.get(formatter[0])(formatParams, ...formatter.slice(1))
|
|
} else {
|
|
cellLabel = ''
|
|
}
|
|
} else {
|
|
cellLabel = formatter(formatParams)
|
|
}
|
|
if (formatData) {
|
|
formatData[colid] = { value: cellValue, label: cellLabel }
|
|
}
|
|
}
|
|
return cellLabel
|
|
},
|
|
setCellValue (row, column, value) {
|
|
return XEUtils.set(row, column.property, value)
|
|
},
|
|
getColumnConfig ($xetable, _vm, options) {
|
|
return _vm instanceof ColumnConfig ? _vm : new ColumnConfig($xetable, _vm, options)
|
|
},
|
|
// 组装列配置
|
|
assemColumn (_vm) {
|
|
const { $el, $xetable, $xecolumn, columnConfig } = _vm
|
|
const groupConfig = $xecolumn ? $xecolumn.columnConfig : null
|
|
columnConfig.slots = _vm.$scopedSlots
|
|
if (groupConfig && $xecolumn.$children.length > 0) {
|
|
if (!groupConfig.children) {
|
|
groupConfig.children = []
|
|
}
|
|
groupConfig.children.splice([].indexOf.call($xecolumn.$el.children, $el), 0, columnConfig)
|
|
} else {
|
|
$xetable.collectColumn.splice([].indexOf.call($xetable.$refs.hideColumn.children, $el), 0, columnConfig)
|
|
}
|
|
},
|
|
// 销毁列
|
|
destroyColumn (_vm) {
|
|
const { $xetable, columnConfig } = _vm
|
|
const matchObj = XEUtils.findTree($xetable.collectColumn, column => column === columnConfig)
|
|
if (matchObj) {
|
|
matchObj.items.splice(matchObj.index, 1)
|
|
}
|
|
},
|
|
hasChildrenList (item) {
|
|
return item && item.children && item.children.length > 0
|
|
},
|
|
parseFile (file) {
|
|
const name = file.name
|
|
const tIndex = XEUtils.lastIndexOf(name, '.')
|
|
const type = name.substring(tIndex + 1, name.length)
|
|
const filename = name.substring(0, tIndex)
|
|
return { filename, type }
|
|
}
|
|
}
|
|
|
|
export default UtilTools
|