index.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. <template>
  2. <div class="page-container">
  3. <div class="custom-menu-container">
  4. <div>
  5. <el-button link @click="handleSave" class="mr-8px"
  6. ><img class="w-1em mr-4px" :src="saveImg" />保存</el-button
  7. >
  8. <el-button link @click="handleSaveZip" class="mr-8px"
  9. ><img class="w-1em mr-4px" :src="saveImg" />压缩保存</el-button
  10. >
  11. <!-- <el-button link @click="openMindmap"><img class="w-1em mr-4px" :src="mindmapImg"/>思维导图模式</el-button> -->
  12. </div>
  13. <div>
  14. <!-- <el-button link @click="openMindmap" class="mr-8px"><img class="w-1em mr-4px" :src="saveImg"/>项目比对</el-button> -->
  15. <el-select placeholder="历史版本" style="width: 120px" size="small">
  16. <el-option label="2025.7.16 12:12" value="1"></el-option>
  17. </el-select>
  18. </div>
  19. </div>
  20. <Sheet
  21. ref="sheetRef"
  22. :created="onSheetCreated"
  23. :workbook="workbook"
  24. show-export-menu
  25. show-import-menu
  26. />
  27. </div>
  28. <MindmapModal ref="mindmapModalRef" />
  29. </template>
  30. <script setup lang="ts">
  31. import { onMounted, ref } from "vue";
  32. import type { UniverExpose } from "@/components/Sheet.vue";
  33. import Sheet from "@/components/Sheet.vue";
  34. import MindmapModal from "./MindmapModal.vue";
  35. // import mindmapImg from "@/assets/mindmap.svg";
  36. import saveImg from "@/assets/save.svg";
  37. import { useEditBomStore } from "@/store/editbom";
  38. import type { FUniver, Univer } from "@univerjs/presets";
  39. import { useRoute } from "vue-router";
  40. import { ElMessage } from "element-plus";
  41. import { unzipData, zipData } from "@/utils";
  42. const sheetRef = ref<UniverExpose | null>(null);
  43. const mindmapModalRef = ref<any>();
  44. const editBomStore = useEditBomStore();
  45. const route = useRoute();
  46. const workbook = ref<any>();
  47. const onSheetCreated = (univer: Univer, univerApi: FUniver) => {
  48. editBomStore.univer = univer;
  49. editBomStore.univerApi = univerApi;
  50. };
  51. // const openMindmap = () => {
  52. // mindmapModalRef.value.open();
  53. // };
  54. // 正常保存
  55. const handleSave = () => {
  56. const workbook = sheetRef.value?.getUniverSnapshot();
  57. console.log(workbook, window.parent);
  58. try {
  59. window.parent?.BpmTools?.program(
  60. {
  61. interfaceCode: "Common.doSaveOnlineData",
  62. model: {
  63. ...workbook,
  64. bom_id: route.query?.id,
  65. },
  66. },
  67. (res: any) => {
  68. console.log("保存结果:", res);
  69. ElMessage.success("保存成功!");
  70. }
  71. );
  72. } catch (error) {
  73. console.log(error);
  74. ElMessage.error("保存失败!");
  75. }
  76. };
  77. // 压缩保存
  78. const handleSaveZip = async () => {
  79. const workbook = sheetRef.value?.getUniverSnapshot();
  80. console.log(JSON.stringify(workbook), window.parent);
  81. const data = zipData(workbook);
  82. console.log('压缩之后:', data);
  83. console.log('解压之后:', unzipData(data));
  84. };
  85. onMounted(() => {
  86. if (!route.query?.id) return;
  87. window.parent?.BpmTools?.program(
  88. {
  89. interfaceCode: "Common.getBOM2OnlineData",
  90. bom_id: route.query.id,
  91. },
  92. (res: any) => {
  93. if (res?.code) {
  94. workbook.value = res?.data;
  95. }
  96. }
  97. );
  98. });
  99. </script>
  100. <style lang="less" scoped>
  101. .page-container {
  102. height: 100%;
  103. display: flex;
  104. flex-direction: column;
  105. /* align-items: center; */
  106. justify-content: center;
  107. height: 100%;
  108. }
  109. .custom-menu-container {
  110. position: absolute;
  111. right: 20px;
  112. top: 0;
  113. z-index: 99;
  114. height: 40px;
  115. line-height: 40px;
  116. display: inline-flex;
  117. align-items: center;
  118. justify-content: space-between;
  119. }
  120. </style>