123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- import Vue from 'vue'
- import { getEventPath } from '@/utils/util'
- import JVxeTable, { AllCells, JVXETypes } from './index'
- import './less/j-vxe-table.less'
- // 引入 vxe-table
- import 'xe-utils'
- import VXETable, { Grid } from 'vxe-table'
- import VXETablePluginAntd from 'vxe-table-plugin-antd'
- import 'vxe-table/lib/index.css'
- import 'vxe-table-plugin-antd/dist/style.css'
- import { getEnhancedMixins, installAllCell, installOneCell } from '@/components/jeecg/JVxeTable/utils/cellUtils'
- // VxeGrid所有的方法映射
- const VxeGridMethodsMap = {}
- Object.keys(Grid.methods).forEach(key => {
- // 使用eval可以避免闭包(但是要注意不要写es6的代码)
- VxeGridMethodsMap[key] = eval(`(function(){return this.$refs.vxe.${key}.apply(this.$refs.vxe,arguments)})`)
- })
- // 将Grid所有的方法都映射(继承)到JVxeTable上
- JVxeTable.methods = Object.assign({}, VxeGridMethodsMap, JVxeTable.methods)
- // VXETable 全局配置
- const VXETableSettings = {
- // z-index 起始值
- zIndex: 1000,
- table: {
- validConfig: {
- // 校验提示方式:强制使用tooltip
- message: 'tooltip'
- }
- }
- }
- // 执行注册方法
- Vue.use(VXETable, VXETableSettings)
- VXETable.use(VXETablePluginAntd)
- Vue.component(JVxeTable.name, JVxeTable)
- // 注册自定义组件
- installAllCell(VXETable)
- // 添加事件拦截器 event.clearActived
- // 比如点击了某个组件的弹出层面板之后,此时被激活单元格不应该被自动关闭,通过返回 false 可以阻止默认的行为。
- VXETable.interceptor.add('event.clearActived', function (params, event, target) {
- // 获取组件增强
- let col = params.column.own
- const interceptor = getEnhancedMixins(col.$type, 'interceptor')
- // 执行增强
- let flag = interceptor['event.clearActived'].apply(this, arguments)
- if (flag === false) {
- return false
- }
- let path = getEventPath(event)
- for (let p of path) {
- let className = p.className || ''
- className = typeof className === 'string' ? className : className.toString()
- /* --- 特殊处理以下组件,点击以下标签时不清空编辑状态 --- */
- // 点击的标签是JInputPop
- if (className.includes('j-input-pop')) {
- return false
- }
- // 点击的标签是JPopup的弹出层、部门选择、用户选择
- if (className.includes('j-popup-modal') || className.includes('j-depart-select-modal') || className.includes('j-user-select-modal')) {
- return false
- }
- // 执行增强
- let flag = interceptor['event.clearActived.className'].apply(this, [className, ...arguments])
- if (flag === false) {
- return false
- }
- }
- })
- /**
- * 注册map
- * @param type 类型
- * @param cell 输入组件
- * @param span 显示组件,可空,默认为 JVxeNormalCell 组件
- */
- export function mapCell(type, cell, span) {
- let cells = {[type]: cell}
- if (span) {
- cells[type + ':span'] = span
- }
- return cells
- }
- /**
- * 注册自定义组件
- *
- * @param type 类型
- * @param cell 输入组件
- * @param span 显示组件,可空,默认为 JVxeNormalCell 组件
- */
- export function installCell(type, cell, span) {
- let exclude = [JVXETypes.rowNumber, JVXETypes.rowCheckbox, JVXETypes.rowRadio, JVXETypes.rowExpand, JVXETypes.rowDragSort]
- if (exclude.includes(type)) {
- throw new Error(`【installCell】不能使用"${type}"作为组件的type,因为这是关键字。`)
- }
- Object.assign(AllCells, mapCell(type, cell, span))
- installOneCell(VXETable, type)
- }
|