7e45645c99f5fef01f940e5496b1dc856b1fbd9a.svn-base 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. import Vue from 'vue'
  2. import { getEventPath } from '@/utils/util'
  3. import JVxeTable, { AllCells, JVXETypes } from './index'
  4. import './less/j-vxe-table.less'
  5. // 引入 vxe-table
  6. import 'xe-utils'
  7. import VXETable, { Grid } from 'vxe-table'
  8. import VXETablePluginAntd from 'vxe-table-plugin-antd'
  9. import 'vxe-table/lib/index.css'
  10. import 'vxe-table-plugin-antd/dist/style.css'
  11. import { getEnhancedMixins, installAllCell, installOneCell } from '@/components/jeecg/JVxeTable/utils/cellUtils'
  12. // VxeGrid所有的方法映射
  13. const VxeGridMethodsMap = {}
  14. Object.keys(Grid.methods).forEach(key => {
  15. // 使用eval可以避免闭包(但是要注意不要写es6的代码)
  16. VxeGridMethodsMap[key] = eval(`(function(){return this.$refs.vxe.${key}.apply(this.$refs.vxe,arguments)})`)
  17. })
  18. // 将Grid所有的方法都映射(继承)到JVxeTable上
  19. JVxeTable.methods = Object.assign({}, VxeGridMethodsMap, JVxeTable.methods)
  20. // VXETable 全局配置
  21. const VXETableSettings = {
  22. // z-index 起始值
  23. zIndex: 1000,
  24. table: {
  25. validConfig: {
  26. // 校验提示方式:强制使用tooltip
  27. message: 'tooltip'
  28. }
  29. }
  30. }
  31. // 执行注册方法
  32. Vue.use(VXETable, VXETableSettings)
  33. VXETable.use(VXETablePluginAntd)
  34. Vue.component(JVxeTable.name, JVxeTable)
  35. // 注册自定义组件
  36. installAllCell(VXETable)
  37. // 添加事件拦截器 event.clearActived
  38. // 比如点击了某个组件的弹出层面板之后,此时被激活单元格不应该被自动关闭,通过返回 false 可以阻止默认的行为。
  39. VXETable.interceptor.add('event.clearActived', function (params, event, target) {
  40. // 获取组件增强
  41. let col = params.column.own
  42. const interceptor = getEnhancedMixins(col.$type, 'interceptor')
  43. // 执行增强
  44. let flag = interceptor['event.clearActived'].apply(this, arguments)
  45. if (flag === false) {
  46. return false
  47. }
  48. let path = getEventPath(event)
  49. for (let p of path) {
  50. let className = p.className || ''
  51. className = typeof className === 'string' ? className : className.toString()
  52. /* --- 特殊处理以下组件,点击以下标签时不清空编辑状态 --- */
  53. // 点击的标签是JInputPop
  54. if (className.includes('j-input-pop')) {
  55. return false
  56. }
  57. // 点击的标签是JPopup的弹出层、部门选择、用户选择
  58. if (className.includes('j-popup-modal') || className.includes('j-depart-select-modal') || className.includes('j-user-select-modal')) {
  59. return false
  60. }
  61. // 执行增强
  62. let flag = interceptor['event.clearActived.className'].apply(this, [className, ...arguments])
  63. if (flag === false) {
  64. return false
  65. }
  66. }
  67. })
  68. /**
  69. * 注册map
  70. * @param type 类型
  71. * @param cell 输入组件
  72. * @param span 显示组件,可空,默认为 JVxeNormalCell 组件
  73. */
  74. export function mapCell(type, cell, span) {
  75. let cells = {[type]: cell}
  76. if (span) {
  77. cells[type + ':span'] = span
  78. }
  79. return cells
  80. }
  81. /**
  82. * 注册自定义组件
  83. *
  84. * @param type 类型
  85. * @param cell 输入组件
  86. * @param span 显示组件,可空,默认为 JVxeNormalCell 组件
  87. */
  88. export function installCell(type, cell, span) {
  89. let exclude = [JVXETypes.rowNumber, JVXETypes.rowCheckbox, JVXETypes.rowRadio, JVXETypes.rowExpand, JVXETypes.rowDragSort]
  90. if (exclude.includes(type)) {
  91. throw new Error(`【installCell】不能使用"${type}"作为组件的type,因为这是关键字。`)
  92. }
  93. Object.assign(AllCells, mapCell(type, cell, span))
  94. installOneCell(VXETable, type)
  95. }