42131fe7d7b73cb45c9a2b1d86259106c9112718.svn-base 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. import { AllCells, JVXETypes } from '@/components/jeecg/JVxeTable'
  2. import JVxeCellMixins from '../mixins/JVxeCellMixins'
  3. export const JVXERenderType = {
  4. editer: 'editer',
  5. spaner: 'spaner',
  6. default: 'default',
  7. }
  8. /** 安装所有vxe组件 */
  9. export function installAllCell(VXETable) {
  10. // 遍历所有组件批量注册
  11. Object.keys(AllCells).forEach(type => installOneCell(VXETable, type))
  12. }
  13. /** 安装单个vxe组件 */
  14. export function installOneCell(VXETable, type) {
  15. const switches = getEnhancedMixins(type, 'switches')
  16. if (switches.editRender === false) {
  17. installCellRender(VXETable, type, AllCells[type])
  18. } else {
  19. installEditRender(VXETable, type, AllCells[type])
  20. }
  21. }
  22. /** 注册可编辑组件 */
  23. export function installEditRender(VXETable, type, comp, spanComp) {
  24. // 获取当前组件的增强
  25. const enhanced = getEnhancedMixins(type)
  26. // span 组件
  27. if (!spanComp && AllCells[type + ':span']) {
  28. spanComp = AllCells[type + ':span']
  29. } else {
  30. spanComp = AllCells[JVXETypes.normal]
  31. }
  32. // 添加渲染
  33. VXETable.renderer.add(JVXETypes._prefix + type, {
  34. // 可编辑模板
  35. renderEdit: createRender(comp, enhanced, JVXERenderType.editer),
  36. // 显示模板
  37. renderCell: createRender(spanComp, enhanced, JVXERenderType.spaner),
  38. // 增强注册
  39. ...enhanced.installOptions,
  40. })
  41. }
  42. /** 注册普通组件 */
  43. export function installCellRender(VXETable, type, comp = AllCells[JVXETypes.normal]) {
  44. // 获取当前组件的增强
  45. const enhanced = getEnhancedMixins(type)
  46. VXETable.renderer.add(JVXETypes._prefix + type, {
  47. // 默认显示模板
  48. renderDefault: createRender(comp, enhanced, JVXERenderType.default),
  49. // 增强注册
  50. ...enhanced.installOptions,
  51. })
  52. }
  53. function createRender(comp, enhanced, renderType) {
  54. return function (h, renderOptions, params) {
  55. return [h(comp, {
  56. props: {
  57. value: params.row[params.column.property],
  58. row: params.row,
  59. column: params.column,
  60. params: params,
  61. renderOptions: renderOptions,
  62. renderType: renderType,
  63. }
  64. })]
  65. }
  66. }
  67. // 已混入的组件增强
  68. const AllCellsMixins = new Map()
  69. /** 获取某个组件的增强 */
  70. export function getEnhanced(type) {
  71. let cell = AllCells[type]
  72. if (cell && cell.enhanced) {
  73. return cell.enhanced
  74. }
  75. return null
  76. }
  77. /**
  78. * 获取某个组件的增强(混入默认值)
  79. *
  80. * @param type JVXETypes
  81. * @param name 可空,增强名称,留空返回所有增强
  82. */
  83. export function getEnhancedMixins(type, name) {
  84. const getByName = (e) => name ? e[name] : e
  85. if (AllCellsMixins.has(type)) {
  86. return getByName(AllCellsMixins.get(type))
  87. }
  88. let defEnhanced = JVxeCellMixins.enhanced
  89. let enhanced = getEnhanced(type)
  90. if (enhanced) {
  91. Object.keys(defEnhanced).forEach(key => {
  92. let def = defEnhanced[key]
  93. if (enhanced.hasOwnProperty(key)) {
  94. // 方法如果存在就不覆盖
  95. if (typeof def !== 'function' && typeof def !== 'string') {
  96. enhanced[key] = Object.assign({}, def, enhanced[key])
  97. }
  98. } else {
  99. enhanced[key] = def
  100. }
  101. })
  102. AllCellsMixins.set(type, enhanced)
  103. return getByName(enhanced)
  104. }
  105. AllCellsMixins.set(type, defEnhanced)
  106. return getByName(defEnhanced)
  107. }
  108. /** 辅助方法:替换${...}变量 */
  109. export function replaceProps(col, value) {
  110. if (value && typeof value === 'string') {
  111. let text = value
  112. text = text.replace(/\${title}/g, col.title)
  113. text = text.replace(/\${key}/g, col.key)
  114. text = text.replace(/\${defaultValue}/g, col.defaultValue)
  115. return text
  116. }
  117. return value
  118. }