vxe-table-demonic
Version:
一个基于 vue 的 PC 端表单/表格组件,支持增删改查、虚拟列表、虚拟树、懒加载、快捷菜单、数据校验、树形结构、打印导出、表单渲染、数据分页、弹窗、自定义模板、渲染器、JSON 配置式...
48 lines (40 loc) • 1.62 kB
text/typescript
import { watch } from 'vue'
import XEUtils from 'xe-utils'
import { OptionInfo } from './optionInfo'
import { VxeSelectConstructor } from '../../../types/all'
export interface XEOptionProvide {
option: OptionInfo;
}
export function isOption (option: any) {
return option instanceof OptionInfo
}
export function createOption ($xeselect: VxeSelectConstructor, _vm: any) {
return isOption(_vm) ? _vm : new OptionInfo($xeselect, _vm)
}
export function watchOption (props: any, option: OptionInfo) {
Object.keys(props).forEach(name => {
watch(() => props[name], (value: any) => {
option.update(name, value)
})
})
}
export function assemOption ($xeselect: VxeSelectConstructor, el: HTMLDivElement, option: OptionInfo, optgroup?: XEOptionProvide | null) {
const { reactData } = $xeselect
const { staticOptions } = reactData
const parentElem = el.parentNode
const parentOption = optgroup ? optgroup.option : null
const parentCols = parentOption ? parentOption.options : staticOptions
if (parentElem && parentCols) {
parentCols.splice(XEUtils.arrayIndexOf(parentElem.children, el), 0, option)
reactData.staticOptions = staticOptions.slice(0)
}
}
export function destroyOption ($xeselect: VxeSelectConstructor, option: OptionInfo) {
const { reactData } = $xeselect
const { staticOptions } = reactData
const matchObj = XEUtils.findTree(staticOptions, (item) => item.id === option.id, { children: 'options' })
if (matchObj) {
matchObj.items.splice(matchObj.index, 1)
}
reactData.staticOptions = staticOptions.slice(0)
}