index.vue 4.0 KB

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