compose.ts 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. import { BtnList } from '@/common/components/btnList/interface';
  2. import { ContextMenuTemp } from "@/common/components/contextMenu/interface";
  3. import { handleContextMenu } from "@/common/components/contextMenu/setup";
  4. import { TabList } from '@/common/components/description/interface';
  5. import { getTableColumns, getTableEvent, initData } from "@/common/export/table";
  6. import { handleModalComponent } from '@/common/setup/asyncComponent';
  7. import { onUnmounted, ref, Ref } from "vue";
  8. import { getBtnList_, getOrderBtnList, getThirdMenuData } from "./button";
  9. import { handleTableDrawer } from "./drawer";
  10. import { ComposeOrderTableParam, ComposeTableDetailParam, ComposeTableParam, TableEventCB } from "./interface";
  11. export type { ComposeTableParam, ComposeTableDetailParam };
  12. // 表格 + 表头 + 右键 + 单击表格 + 按钮列表 通用处理逻辑
  13. export function handleComposeTable<T>({ queryFn, menuType, isDetail, tableName, tableFilterKey }: ComposeTableParam) {
  14. // 右键逻辑
  15. const { contextMenu, openContext, closeContext: closeContextAction } = handleContextMenu();
  16. // 表头数据
  17. const { columns, registerColumn, updateColumn } = getTableColumns();
  18. // 右键回调函数
  19. const eventsCB: TableEventCB = {
  20. contextmenuCB: (record: T, value: ContextMenuTemp) => {
  21. // 控制打开右键
  22. contextMenu.value = value
  23. }
  24. }
  25. // 表格事件
  26. const { expandedRowKeys, selectedRow, Rowclick } = getTableEvent<T>(eventsCB);
  27. // 表格操作按钮列表
  28. const [firstBtn, secondBtn] = getBtnList_(menuType, isDetail).value;
  29. // 控制异步组件
  30. const { componentId, closeComponent, openComponent } = handleModalComponent(queryFn, selectedRow);
  31. // 关闭右键
  32. function closeContext(value: BtnList | null) {
  33. // 打开对应的弹窗组件
  34. if (value) openComponent(value, selectedRow.value)
  35. // 关闭右键
  36. closeContextAction()
  37. }
  38. onUnmounted(() => {
  39. // 离开组件,手动关闭右键,防止出现bug
  40. closeContextAction()
  41. })
  42. initData(() => {
  43. // 获取列表数据
  44. queryFn();
  45. // 注册表头信息 过滤
  46. registerColumn(tableName, tableFilterKey);
  47. }); return {
  48. contextMenu, openContext, closeContext, // 右键
  49. columns, registerColumn, updateColumn, // 表头
  50. expandedRowKeys, selectedRow, Rowclick, // 表格折腾面板数据与单击、双击事件
  51. componentId, closeComponent, openComponent, // 控制异步组件
  52. firstBtn, secondBtn, // 表格按钮
  53. }
  54. }
  55. // 表格 + 表头 + 表格明细 + 单击表格 通用处理逻辑
  56. export function handleComposeTable_detail<T>({ queryFn, tableName, tableFilterKey, menuType }: ComposeTableDetailParam) {
  57. // 控制 drawer 组件是否显示
  58. const { visible, openDrawer, closeDrawer } = handleTableDrawer()
  59. // 表头数据
  60. const { columns, registerColumn, updateColumn } = getTableColumns();
  61. // 明细列表数据
  62. const detailTableList = ref<any[]>([])
  63. // 明细表头数据
  64. const { columns: columnsDetail, registerColumn: registerColumnDetail, updateColumn: updateColumnDetail } = getTableColumns();
  65. // 缓存点击选中的数据
  66. let cacheSelectedRow: null | Ref<T> = null
  67. // 单击回调
  68. const events: TableEventCB = {
  69. clickCB: (value: T) => {
  70. if (cacheSelectedRow) {
  71. // 点击同一个
  72. if (JSON.stringify(cacheSelectedRow.value) === JSON.stringify(value)) {
  73. visible.value ? closeDrawer() : openDrawer()
  74. } else {
  75. openDrawer()
  76. }
  77. } else {
  78. openDrawer()
  79. }
  80. },
  81. };
  82. // 表格事件
  83. const { expandedRowKeys, selectedRow, Rowclick } = getTableEvent<T>(events);
  84. cacheSelectedRow = selectedRow as Ref<T>
  85. // 明细tab 列表
  86. const data = getThirdMenuData()
  87. const list = data.find((e) => e.code === menuType);
  88. const tabList = ref<TabList[]>([])
  89. list?.children.forEach(el => {
  90. const { code, title, type } = el
  91. if (type === 3) {
  92. tabList.value.push({ lable: title, code })
  93. }
  94. })
  95. initData(() => {
  96. queryFn();
  97. registerColumn(tableName, tableFilterKey);
  98. });
  99. return {
  100. visible, openDrawer, closeDrawer, // 控制 drawer 组件是否显示
  101. columns, registerColumn, updateColumn, // 表头数据
  102. columnsDetail, registerColumnDetail, updateColumnDetail, detailTableList,// 明细表头数据
  103. expandedRowKeys, selectedRow, Rowclick, // 表格事件
  104. tabList,
  105. }
  106. }
  107. // 获取单据table通用逻辑
  108. export function handleComposeOrderTable<T>({ queryFn, recordList, isDetail, tableName, }: ComposeOrderTableParam) {
  109. // 右键逻辑
  110. const { contextMenu, openContext, closeContext: closeContextAction } = handleContextMenu();
  111. // 表头数据
  112. const { columns, registerColumn, updateColumn } = getTableColumns();
  113. // 右键回调函数
  114. const eventsCB: TableEventCB = {
  115. contextmenuCB: (record: T, value: ContextMenuTemp) => {
  116. // 控制打开右键
  117. contextMenu.value = value
  118. }
  119. }
  120. // 表格事件
  121. const { expandedRowKeys, selectedRow, Rowclick } = getTableEvent<T>(eventsCB);
  122. // 表格操作按钮列表
  123. const btnList = getOrderBtnList(recordList, isDetail).value;
  124. console.log('表格操作按钮列表', btnList)
  125. // 控制异步组件
  126. const { componentId, closeComponent, openComponent } = handleModalComponent(queryFn, selectedRow);
  127. // 关闭右键
  128. function closeContext(value: BtnList | null) {
  129. // 打开对应的弹窗组件
  130. if (value) openComponent(value, selectedRow.value)
  131. // 关闭右键
  132. closeContextAction()
  133. }
  134. onUnmounted(() => {
  135. // 离开组件,手动关闭右键,防止出现bug
  136. closeContextAction()
  137. })
  138. initData(() => {
  139. // 获取列表数据
  140. queryFn();
  141. // 注册表头信息 过滤
  142. registerColumn(tableName, []);
  143. }); return {
  144. contextMenu, openContext, closeContext, // 右键
  145. columns, registerColumn, updateColumn, // 表头
  146. expandedRowKeys, selectedRow, Rowclick, // 表格折腾面板数据与单击、双击事件
  147. componentId, closeComponent, openComponent, // 控制异步组件
  148. btnList, // 表格按钮
  149. }
  150. }