slide.vue 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <template>
  2. <Slide :menus="menus" :draw="draw" />
  3. </template>
  4. <script lang="ts" setup>
  5. import Slide from "../../../components/slide/slide.vue";
  6. import {
  7. paper as paperRaw,
  8. text,
  9. serial,
  10. table,
  11. test,
  12. PaperKey,
  13. draw as drawMenuRaw,
  14. } from "../../../components/slide/actions.ts";
  15. import { useDraw } from "../../../components/container/use-draw.ts";
  16. import { computed, h, nextTick, reactive, watch } from "vue";
  17. import { tabulationData } from "../../store";
  18. import { genTabulationData } from "./gen-tab.ts";
  19. import { defaultLayer } from "@/constant/index.ts";
  20. import { copy } from "@/utils/shared.ts";
  21. import { v4 as uuid } from "uuid";
  22. import SlideIcons from "@/example/components/slide/slide-icons.vue";
  23. import { iconGroups } from "@/example/constant.ts";
  24. const draw = useDraw();
  25. const paper = reactive({
  26. ...paperRaw,
  27. children: paperRaw.children.map((item) => ({
  28. ...item,
  29. active: computed(() => tabulationData.value.paperKey === item.key),
  30. handler: () => (tabulationData.value.paperKey = item.key as PaperKey),
  31. })),
  32. });
  33. const drawMenu = copy(drawMenuRaw);
  34. drawMenu.children!.shift();
  35. const menus = reactive([
  36. paper,
  37. drawMenu,
  38. {
  39. icon: "legend",
  40. name: "图例",
  41. value: uuid(),
  42. mount: (props: any) =>
  43. h(SlideIcons, { ...props, groups: [iconGroups[iconGroups.length - 1]] }),
  44. },
  45. {
  46. ...text,
  47. payload: { ...text.payload, preset: { ...text.payload.preset, fontSize: 16 } },
  48. },
  49. serial,
  50. table,
  51. ]);
  52. const setPaperAfterHandler = async (paperKey: PaperKey, oldPaperKey?: PaperKey) => {
  53. let isUpdate = false;
  54. // if (oldPaperKey) {
  55. // try {
  56. // await ElMessageBox.confirm(
  57. // "纸张已变化, 是否需要重新生成模板数据(会清空已有数据)?",
  58. // {
  59. // type: "info",
  60. // confirmButtonText: "生成",
  61. // cancelButtonText: "取消",
  62. // }
  63. // );
  64. // isUpdate = true;
  65. // } catch {
  66. // isUpdate = false;
  67. // }
  68. // }
  69. paperRaw.children.find((item) => item.key === paperKey)!.handler(draw);
  70. await nextTick();
  71. if (!isUpdate) return;
  72. const data = await genTabulationData(
  73. paperKey,
  74. tabulationData.value.store.config.compass.rotation,
  75. tabulationData.value.cover
  76. );
  77. draw.history.clear();
  78. draw.store.setStore({
  79. layers: {
  80. [defaultLayer]: data,
  81. },
  82. });
  83. };
  84. watch(() => tabulationData.value?.paperKey, setPaperAfterHandler, { immediate: true });
  85. if (import.meta.env.DEV) {
  86. menus.push(test);
  87. }
  88. </script>