vxe-table-select-area
Version:
一个基于 vxe-table 的可区域选中复制、粘贴的组件
114 lines (103 loc) • 3.55 kB
JavaScript
import XEUtils from 'xe-utils'
import VXETable from '../../v-x-e-table'
import { warnLog } from '../../tools/log'
import { isEnableConf } from '../../tools/utils'
class ItemConfig {
constructor ($xeform, item) {
Object.assign(this, {
id: XEUtils.uniqueId('item_'),
title: item.title,
field: item.field,
span: item.span,
align: item.align,
titleAlign: item.titleAlign,
titleWidth: item.titleWidth,
titleColon: item.titleColon,
titleAsterisk: item.titleAsterisk,
titlePrefix: item.titlePrefix,
titleSuffix: item.titleSuffix,
titleOverflow: item.titleOverflow,
showTitle: item.showTitle,
resetValue: item.resetValue,
visible: item.visible,
visibleMethod: item.visibleMethod,
folding: item.folding,
collapseNode: item.collapseNode,
className: item.className,
contentClassName: item.className,
contentStyle: item.contentStyle,
titleClassName: item.titleClassName,
titleStyle: item.titleStyle,
itemRender: item.itemRender,
// 渲染属性
showError: false,
errRule: null,
slots: item.slots,
children: []
})
if (process.env.VUE_APP_VXE_TABLE_ENV === 'development') {
const compConf = item.itemRender ? VXETable.renderer.get(item.itemRender.name) : null
if (compConf && !compConf.renderItemContent && compConf.renderItem) {
warnLog('vxe.error.delProp', ['item-render.renderItem', 'item-render.renderItemContent'])
}
}
}
update (name, value) {
this[name] = value
}
}
export function isItem (option) {
return option instanceof ItemConfig
}
export function getItemConfig ($xeform, _vm, options) {
return isItem(_vm) ? _vm : new ItemConfig($xeform, _vm, options)
}
export const handleFieldOrItem = ($xeform, fieldOrItem) => {
if (fieldOrItem) {
return XEUtils.isString(fieldOrItem) ? $xeform.getItemByField(fieldOrItem) : fieldOrItem
}
return null
}
export function isHiddenItem ($xeform, formItem) {
const { collapseAll } = $xeform
const { folding, visible } = formItem
return visible === false || (folding && collapseAll)
}
export function isActivetem ($xeform, formItem) {
let { visibleMethod, itemRender, visible, field } = formItem
if (visible === false) {
return visible
}
const compConf = isEnableConf(itemRender) ? VXETable.renderer.get(itemRender.name) : null
if (!visibleMethod && compConf && compConf.itemVisibleMethod) {
visibleMethod = compConf.itemVisibleMethod
}
if (!visibleMethod) {
return true
}
const { data } = $xeform
return visibleMethod({ data, field, property: field, item: formItem, $form: $xeform, $grid: $xeform.xegrid })
}
export function createItem ($xeform, _vm) {
return getItemConfig($xeform, _vm)
}
export function destroyItem (_vm) {
const { $xeform, itemConfig } = _vm
const matchObj = XEUtils.findTree($xeform.staticItems, option => option === itemConfig)
if (matchObj) {
matchObj.items.splice(matchObj.index, 1)
}
}
export function assemItem (_vm) {
const { $el, $xeform, $xeformgather, itemConfig } = _vm
const itemGather = $xeformgather ? $xeformgather.itemConfig : null
itemConfig.slots = _vm.$scopedSlots
if (itemGather) {
if (!itemGather.children) {
itemGather.children = []
}
itemGather.children.splice([].indexOf.call($xeformgather.$el.children, $el), 0, itemConfig)
} else {
$xeform.staticItems.splice([].indexOf.call($xeform.$refs.hideItem.children, $el), 0, itemConfig)
}
}