setup.ts 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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 { EnumRouterName } from '@/common/constants/enumRouterName';
  5. import { getTableColumns, getTableEvent, initData } from "@/common/export/table";
  6. import { findChildList, getClassName } from "@/common/setup/table/button";
  7. import { ComposeTableParam, TableEventCB } from "@/common/setup/table/interface";
  8. import { OperationTabMenu } from '@/services/go/commonService/interface';
  9. import { onUnmounted, ref } from "vue";
  10. import { BuyAndSellMarket } from './interface';
  11. const buyAndSellEunm = 'buyAndSell'
  12. export function handleSpotBtnList(menuType: EnumRouterName) {
  13. let firstBtn: BtnList[] = []
  14. // 买大厅数据
  15. const buyMarket: BuyAndSellMarket = {
  16. isMarket: true,
  17. btnList: []
  18. }
  19. // 卖大厅数据
  20. const sellMarket: BuyAndSellMarket = {
  21. isMarket: true,
  22. btnList: []
  23. }
  24. // 表格操作按钮列表
  25. const list = findChildList(menuType);
  26. if (list) {
  27. const fnMap = (arr: OperationTabMenu[]) => {
  28. return arr.map(e => {
  29. const { code, title } = e;
  30. return { lable: title, code, className: getClassName(code) }
  31. })
  32. }
  33. // 过滤报价大厅按钮列表
  34. const temp = list.children.filter(e => e.type === 2)
  35. firstBtn = fnMap(temp)
  36. const fn = (code: EnumRouterName) => {
  37. const findResult = list.children.find(e => e.code === code)
  38. const result: BuyAndSellMarket = { isMarket: false, btnList: [] }
  39. if (findResult) {
  40. result.isMarket = true
  41. const arr = findResult.children.filter(e => e.type === 2)
  42. result.btnList = fnMap(arr)
  43. }
  44. return result
  45. }
  46. // 处理买大厅
  47. Object.assign(buyMarket, fn(EnumRouterName.spot_trade_warehouse_buy_hall))
  48. // 处理卖大厅
  49. Object.assign(sellMarket, fn(EnumRouterName.spot_trade_warehouse_sell_hall))
  50. }
  51. return { firstBtn, buyMarket, sellMarket }
  52. }
  53. // 表格 + 表头 + 右键 + 单击表格 + 按钮列表 通用处理逻辑
  54. export function handleComposeTable<T>({ queryFn, menuType, isDetail, tableName, tableFilterKey }: ComposeTableParam) {
  55. // 右键逻辑
  56. const { contextMenu, openContext, closeContext: closeContextAction } = handleContextMenu();
  57. // 表头数据
  58. const { columns, registerColumn, updateColumn } = getTableColumns();
  59. // 控制异步组件
  60. const componentId = ref<string>('');
  61. // 关闭组件
  62. function closeComponent(isRefresh: boolean) {
  63. componentId.value = '';
  64. if (isRefresh) {
  65. queryFn()
  66. }
  67. }
  68. // 右键回调函数
  69. const eventsCB: TableEventCB = {
  70. contextmenuCB: (record: T, value: ContextMenuTemp) => {
  71. // 控制打开右键
  72. contextMenu.value = value
  73. },
  74. clickCB: (record: T) => {
  75. componentId.value = buyAndSellEunm
  76. }
  77. }
  78. // 表格事件
  79. const { expandedRowKeys, selectedRow, Rowclick } = getTableEvent<T>(eventsCB);
  80. // 表格操作按钮列表
  81. const { firstBtn } = handleSpotBtnList(menuType)
  82. firstBtn.push({ lable: '买卖大厅', code: buyAndSellEunm, className: 'btnPrimary' })
  83. // 关闭右键
  84. function closeContext(value: BtnList | null) {
  85. // 打开对应的弹窗组件
  86. if (value) componentId.value = value.code;
  87. // 关闭右键
  88. closeContextAction()
  89. }
  90. onUnmounted(() => {
  91. // 离开组件,手动关闭右键,防止出现bug
  92. closeContextAction()
  93. })
  94. initData(() => {
  95. // 获取列表数据
  96. queryFn();
  97. // 注册表头信息 过滤
  98. registerColumn(tableName, tableFilterKey);
  99. }); return {
  100. contextMenu, openContext, closeContext, // 右键
  101. columns, registerColumn, updateColumn, // 表头
  102. expandedRowKeys, selectedRow, Rowclick, // 表格折腾面板数据与单击、双击事件
  103. componentId, closeComponent, // 控制异步组件
  104. firstBtn, // 表格按钮
  105. }
  106. }