editbom.ts 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import { defineStore } from "pinia";
  2. import { computed, ref, watch } from "vue";
  3. import {
  4. convertUniverData2ObjectList,
  5. array2mindmapData,
  6. } from "@/utils/convert";
  7. import type { Workbook, FUniver, Univer } from "@univerjs/presets";
  8. import { ElMessage } from "element-plus";
  9. export const useEditBomStore = defineStore("editBom", () => {
  10. const BpmTools = ref<any>(null);
  11. const workbook = ref<Workbook | null>(null);
  12. const univerApi = ref<FUniver | null>(null);
  13. const univer = ref<Univer | null>(null);
  14. /**
  15. * 思维导图数据与excel数据转换
  16. * 拦截思维导图数据 转换成excel数据
  17. */
  18. const mindmapData = computed({
  19. get() {
  20. const fWorkbook = univerApi.value?.getActiveWorkbook();
  21. const fWorksheet = fWorkbook?.getActiveSheet();
  22. const rows = fWorksheet?.getLastRow() || 0;
  23. const columns = fWorksheet?.getLastColumn() || 0;
  24. const range = fWorksheet?.getRange(0, 0, rows + 1, columns + 1);
  25. // 获取表格数据
  26. const rowData = range?.getValues();
  27. if (!rowData) {
  28. ElMessage.error("数据异常");
  29. return [];
  30. }
  31. // 表格数据转换成对象列表
  32. const json = convertUniverData2ObjectList(rowData);
  33. // 转换成mindmap数据
  34. const list = array2mindmapData(json);
  35. return {
  36. id: "root",
  37. data: {
  38. type: "root",
  39. },
  40. children: list,
  41. };
  42. },
  43. set(value: any) {
  44. console.log("修改mindmap:", value);
  45. // 1、移动行数据 sheet.moveRows(要移动的行(范围), 目标位置)
  46. // 2、新增行数据 sheet.insertRowAfter(目标行)
  47. // 3、修改行数据
  48. // 3.1 获取范围
  49. // 3.2 设置范围值
  50. if (!workbook.value) return;
  51. },
  52. });
  53. watch(
  54. () => univerApi.value,
  55. (api) => {
  56. if(api) {
  57. // 开始编辑事件 params.cancel = true 阻止编辑
  58. api.addEvent(api.Event.BeforeSheetEditStart, params => {
  59. console.log('BeforeSheetEditStart', params)
  60. // params.cancel = true
  61. });
  62. api.addEvent(api.Event.SheetEditChanging, params => {
  63. console.log('SheetEditChanging', params)
  64. });
  65. }
  66. }
  67. );
  68. return {
  69. workbook,
  70. mindmapData,
  71. univer,
  72. univerApi,
  73. BpmTools,
  74. };
  75. });