serial-group.vue 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <template>
  2. <template v-for="item in data" :key="item.id">
  3. <Serial
  4. :data="item"
  5. @updateShape="(value: any) => store.setItem('serial', { id: item.id, value })"
  6. @addShape="addHandler"
  7. @delShape="delItem(store, item)"
  8. v-if="!itemHasRegistor(item.id)"
  9. />
  10. <template v-else>
  11. <component :is="renderer(item.id)" :item="item" />
  12. </template>
  13. </template>
  14. </template>
  15. <script setup lang="ts">
  16. import Serial from "./serial.vue";
  17. import { useStore, useStoreRenderProcessors } from "../../store";
  18. import { computed, watch } from "vue";
  19. import { useHistory } from "@/core/hook/use-history";
  20. import { ShapeType } from "..";
  21. import {
  22. addTable,
  23. autoGenTable,
  24. delItem,
  25. getCurrentNdx,
  26. joinKey,
  27. SerialData,
  28. syncTable,
  29. } from ".";
  30. import { useExpose } from "@/core/hook/use-expose";
  31. import { useConfig } from "@/core/hook/use-config";
  32. defineProps<{ type?: ShapeType }>();
  33. const store = useStore();
  34. const data = computed(() => store.getTypeItems("serial"));
  35. const history = useHistory();
  36. const { itemHasRegistor, renderer } = useStoreRenderProcessors();
  37. const addHandler = (value: SerialData) => {
  38. value.content = getCurrentNdx(store);
  39. store.addItem("serial", value);
  40. };
  41. const jTable = computed(() =>
  42. store.getTypeItems("table").find((item) => item.key === joinKey)
  43. );
  44. const draw = useExpose();
  45. const config = useConfig();
  46. const updateJoinTable = () => {
  47. const items = data.value;
  48. let table = jTable.value;
  49. if (!autoGenTable.value || !config.serailAutoGenTable || items.length === 0) {
  50. table && history.preventTrack(() => store.delItem("table", table!.id));
  51. return;
  52. }
  53. if (!table) {
  54. history.preventTrack(() => {
  55. store.addItem("table", (table = addTable(draw)));
  56. });
  57. }
  58. if (syncTable(table!, data.value)) {
  59. history.preventTrack(() =>
  60. store.setItem("table", {
  61. id: table!.id,
  62. value: table!,
  63. })
  64. );
  65. }
  66. };
  67. watch(() => data.value.length, updateJoinTable, { immediate: true });
  68. </script>