123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- import { AllCells, JVXETypes } from '@/components/jeecg/JVxeTable'
- import JVxeCellMixins from '../mixins/JVxeCellMixins'
- export const JVXERenderType = {
- editer: 'editer',
- spaner: 'spaner',
- default: 'default',
- }
- /** 安装所有vxe组件 */
- export function installAllCell(VXETable) {
- // 遍历所有组件批量注册
- Object.keys(AllCells).forEach(type => installOneCell(VXETable, type))
- }
- /** 安装单个vxe组件 */
- export function installOneCell(VXETable, type) {
- const switches = getEnhancedMixins(type, 'switches')
- if (switches.editRender === false) {
- installCellRender(VXETable, type, AllCells[type])
- } else {
- installEditRender(VXETable, type, AllCells[type])
- }
- }
- /** 注册可编辑组件 */
- export function installEditRender(VXETable, type, comp, spanComp) {
- // 获取当前组件的增强
- const enhanced = getEnhancedMixins(type)
- // span 组件
- if (!spanComp && AllCells[type + ':span']) {
- spanComp = AllCells[type + ':span']
- } else {
- spanComp = AllCells[JVXETypes.normal]
- }
- // 添加渲染
- VXETable.renderer.add(JVXETypes._prefix + type, {
- // 可编辑模板
- renderEdit: createRender(comp, enhanced, JVXERenderType.editer),
- // 显示模板
- renderCell: createRender(spanComp, enhanced, JVXERenderType.spaner),
- // 增强注册
- ...enhanced.installOptions,
- })
- }
- /** 注册普通组件 */
- export function installCellRender(VXETable, type, comp = AllCells[JVXETypes.normal]) {
- // 获取当前组件的增强
- const enhanced = getEnhancedMixins(type)
- VXETable.renderer.add(JVXETypes._prefix + type, {
- // 默认显示模板
- renderDefault: createRender(comp, enhanced, JVXERenderType.default),
- // 增强注册
- ...enhanced.installOptions,
- })
- }
- function createRender(comp, enhanced, renderType) {
- return function (h, renderOptions, params) {
- return [h(comp, {
- props: {
- value: params.row[params.column.property],
- row: params.row,
- column: params.column,
- params: params,
- renderOptions: renderOptions,
- renderType: renderType,
- }
- })]
- }
- }
- // 已混入的组件增强
- const AllCellsMixins = new Map()
- /** 获取某个组件的增强 */
- export function getEnhanced(type) {
- let cell = AllCells[type]
- if (cell && cell.enhanced) {
- return cell.enhanced
- }
- return null
- }
- /**
- * 获取某个组件的增强(混入默认值)
- *
- * @param type JVXETypes
- * @param name 可空,增强名称,留空返回所有增强
- */
- export function getEnhancedMixins(type, name) {
- const getByName = (e) => name ? e[name] : e
- if (AllCellsMixins.has(type)) {
- return getByName(AllCellsMixins.get(type))
- }
- let defEnhanced = JVxeCellMixins.enhanced
- let enhanced = getEnhanced(type)
- if (enhanced) {
- Object.keys(defEnhanced).forEach(key => {
- let def = defEnhanced[key]
- if (enhanced.hasOwnProperty(key)) {
- // 方法如果存在就不覆盖
- if (typeof def !== 'function' && typeof def !== 'string') {
- enhanced[key] = Object.assign({}, def, enhanced[key])
- }
- } else {
- enhanced[key] = def
- }
- })
- AllCellsMixins.set(type, enhanced)
- return getByName(enhanced)
- }
- AllCellsMixins.set(type, defEnhanced)
- return getByName(defEnhanced)
- }
- /** 辅助方法:替换${...}变量 */
- export function replaceProps(col, value) {
- if (value && typeof value === 'string') {
- let text = value
- text = text.replace(/\${title}/g, col.title)
- text = text.replace(/\${key}/g, col.key)
- text = text.replace(/\${defaultValue}/g, col.defaultValue)
- return text
- }
- return value
- }
|