import JVxeCellMixins from '@/components/jeecg/JVxeTable/mixins/JVxeCellMixins'
|
|
// tags 组件的显示组件
|
export const TagsSpanCell = {
|
name: 'JVxeTagsCell',
|
mixins: [JVxeCellMixins],
|
data() {
|
return {
|
innerTags: [],
|
}
|
},
|
watch: {
|
innerValue: {
|
immediate: true,
|
handler(value) {
|
if (value !== this.innerTags.join(';')) {
|
let rv = replaceValue(value)
|
this.innerTags = rv.split(';')
|
this.handleChangeCommon(rv)
|
}
|
},
|
},
|
},
|
methods: {
|
renderTags(h) {
|
let tags = []
|
for (let tag of this.innerTags) {
|
if (tag) {
|
let tagProps = {}
|
let tagStyle = {}
|
let setTagColor = this.originColumn.setTagColor
|
if (typeof setTagColor === 'function') {
|
/**
|
* 设置 tag 颜色
|
*
|
* @param event 包含的字段:
|
* event.tagValue 当前tag的值
|
* event.value 当前原始值
|
* event.row 当前行的所有值
|
* event.column 当前列的配置
|
* event.column.own 当前列的原始配置
|
* @return Array | String 可以返回一个数组,数据第一项是tag背景颜色,第二项是字体颜色。也可以返回一个字符串,即tag背景颜色
|
*/
|
let color = setTagColor({
|
tagValue: tag,
|
value: this.innerValue,
|
row: this.row,
|
column: this.column,
|
})
|
if (Array.isArray(color)) {
|
tagProps.color = color[0]
|
tagStyle.color = color[1]
|
} else if (color && typeof color === 'string') {
|
tagProps.color = color
|
}
|
}
|
tags.push(h('a-tag', {
|
props: tagProps,
|
style: tagStyle,
|
}, [tag]))
|
}
|
}
|
return tags
|
},
|
},
|
render(h) {
|
return h('div', {}, [
|
this.renderTags(h)
|
])
|
},
|
}
|
|
// tags 组件的输入框
|
export const TagsInputCell = {
|
name: 'JVxeTagsInputCell',
|
mixins: [JVxeCellMixins],
|
data() {
|
return {
|
innerTagValue: '',
|
}
|
},
|
watch: {
|
innerValue: {
|
immediate: true,
|
handler(value) {
|
if (value !== this.innerTagValue) {
|
this.handleInputChange(value)
|
}
|
},
|
},
|
},
|
methods: {
|
|
handleInputChange(value, event) {
|
this.innerTagValue = replaceValue(value, event)
|
this.handleChangeCommon(this.innerTagValue)
|
return this.innerTagValue
|
},
|
|
},
|
render(h) {
|
return h('a-input', {
|
props: {
|
value: this.innerValue,
|
...this.cellProps
|
},
|
on: {
|
change: (event) => {
|
let {target, target: {value}} = event
|
let newValue = this.handleInputChange(value, event)
|
if (newValue !== value) {
|
target.value = newValue
|
}
|
}
|
},
|
})
|
},
|
}
|
|
// 将值每隔两位加上一个分号
|
function replaceValue(value, event) {
|
if (value) {
|
// 首先去掉现有的分号
|
value = value.replace(/;/g, '')
|
// 然后再遍历添加分号
|
let rv = ''
|
let splitArr = value.split('')
|
let count = 0
|
splitArr.forEach((val, index) => {
|
rv += val
|
let position = index + 1
|
if (position % 2 === 0 && position < splitArr.length) {
|
count++
|
rv += ';'
|
}
|
})
|
if (event && count > 0) {
|
let {target, target: {selectionStart}} = event
|
target.selectionStart = selectionStart + count
|
target.selectionEnd = selectionStart + count
|
}
|
return rv
|
}
|
return ''
|
}
|