NuclearDispersionSystem/ant-design-vue-jeecg/node_modules/vxe-table/packages/tools/src/utils.js
2023-09-14 14:47:11 +08:00

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