index.tsx 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import { DesignComp } from "@/modules/editor/defines/DesignTemp/DesignComp";
  2. import { css } from "@linaria/core";
  3. import { defineUI } from "queenjs";
  4. import { computed, onUnmounted } from "vue";
  5. import { Container, Draggable } from "vue-dndrop";
  6. import { useEditor } from "../../..";
  7. import { HotKeyCtrl } from "../../../controllers/HotKeyCtrl";
  8. import Canvas from "../../Canvas";
  9. import ErrorComp from "../../CompUI/placeHoder";
  10. export default defineUI({
  11. setup() {
  12. const editor = useEditor();
  13. const { store, actions, config } = editor;
  14. const hotKeyCtrl = new HotKeyCtrl(editor);
  15. hotKeyCtrl.init();
  16. onUnmounted(() => {
  17. hotKeyCtrl.destroy();
  18. });
  19. const compsGroup = computed(() => {
  20. const normalArr: DesignComp[] = [];
  21. const posArr: DesignComp[] = [];
  22. store.designData.content.forEach((d) => {
  23. if (d.compKey === "Container") {
  24. posArr.push(d);
  25. } else {
  26. normalArr.push(d);
  27. }
  28. });
  29. console.log(normalArr, posArr);
  30. return {
  31. normalArr,
  32. posArr,
  33. };
  34. });
  35. return () => (
  36. <div class={contentStyle}>
  37. <div class="relative z-10">
  38. {compsGroup.value.posArr.map((d) => {
  39. const Comp: any = config.compUI[d.compKey]?.Component;
  40. return Comp ? <Comp key={d.id} compId={d.id} /> : undefined;
  41. })}
  42. </div>
  43. {store.isEditMode ? (
  44. <Container
  45. style={store.designData.pageStyle}
  46. onDrop={(e: any) => actions.moveComp(e.removedIndex, e.addedIndex)}
  47. non-drag-area-selector={".drag-disable"}
  48. >
  49. {compsGroup.value.normalArr.map((d) => {
  50. const Comp: any =
  51. config.compUI[d.compKey]?.Component || ErrorComp;
  52. return (
  53. <Draggable key={d.id}>
  54. <Comp compId={d.id} />
  55. </Draggable>
  56. );
  57. })}
  58. </Container>
  59. ) : (
  60. <Canvas />
  61. )}
  62. </div>
  63. );
  64. },
  65. });
  66. const contentStyle = css`
  67. position: relative;
  68. border: 1px solid transparent;
  69. @apply min-h-750px bg-white;
  70. .dndrop-container.vertical > .dndrop-draggable-wrapper {
  71. overflow: unset;
  72. }
  73. `;