index.tsx 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. import { useMatch } from "@/modules/match";
  2. import { useQueditor } from "@queenjs-modules/queditor";
  3. import { List } from "@queenjs/ui";
  4. import { queenApi } from "queenjs";
  5. import { defineComponent } from "vue";
  6. import PanelCard from "../components/PanelCard";
  7. import PanelGroup from "../components/PanelGroup";
  8. import MatItem from "./MatItem";
  9. export default defineComponent({
  10. setup() {
  11. const queditor = useQueditor();
  12. const match = useMatch();
  13. queditor.controls.drager.on(
  14. "drop:selfDrop",
  15. async (event: DragEvent, { type, data }: any, extraData: any) => {
  16. const dropData = await data();
  17. // console.error("dropData: ", dropData);
  18. if (type == "asset3d.mat") {
  19. dropMat(dropData, extraData);
  20. } else if (type == "asset3d.mesh") {
  21. dropMesh(dropData, extraData);
  22. }
  23. }
  24. );
  25. function dropMesh(dropData: any, target: any) {
  26. console.log("dropData: ", dropData, target);
  27. //
  28. }
  29. // 拖拽面料
  30. function dropMat(mat: IMaterial, extraData: any) {
  31. const currGroup = findmatsGroup(extraData);
  32. if (!currGroup.matIds) currGroup.matIds = [];
  33. // TODO 判断重复拖拽
  34. if (currGroup.matIds.includes(mat.id)) {
  35. queenApi.messageError("不能重复添加色卡");
  36. return;
  37. }
  38. // update
  39. const targetPro = queditor.store.pack.products.find(
  40. (p) => p.id == extraData.productId
  41. );
  42. const targetCom = targetPro?.components.find(
  43. (c) => c.name == extraData.name
  44. );
  45. if (!targetCom) return;
  46. queditor.actions.updatePackProductCompMat(targetCom, mat, true);
  47. currGroup.matIds.push(mat.id);
  48. currGroup.index = currGroup.matIds.length - 1;
  49. }
  50. function findmatsGroup(target: MatsMatchComp) {
  51. const currGroup = match.store.menuOptions.sourceData.mat.find(
  52. (r: MatsMatchComp) =>
  53. r.name == target.name && r.productId == target.productId
  54. );
  55. return currGroup;
  56. }
  57. const handleChange = (key: string, matsGroup: MatsMatchComp) => {
  58. switch (key) {
  59. case "rename":
  60. match.actions.renameMatGroup();
  61. break;
  62. case "lock":
  63. match.actions.lockMatGroup();
  64. break;
  65. case "clear":
  66. match.actions.clearMatGroup(matsGroup);
  67. break;
  68. }
  69. };
  70. return () => {
  71. return (
  72. <PanelCard
  73. title="部件库"
  74. onSave={() => {
  75. console.error(queditor.store.pack);
  76. match.store.designDetail.scenePack.source =
  77. queditor.store.pack;
  78. match.actions.saveDesign();
  79. }}
  80. >
  81. {match.store.menuOptions.sourceData?.mat.map(
  82. (matsGroup: MatsMatchComp, index: number) => {
  83. return (
  84. <PanelGroup
  85. key={index}
  86. class="cursor-pointer"
  87. type="asset3d.mat"
  88. active={
  89. queditor.store.currActiveProdComp?.name == matsGroup.name
  90. }
  91. title={matsGroup.name}
  92. tools={["rename", "lock", "clear"]}
  93. target={matsGroup}
  94. onChange={(key) => handleChange(key, matsGroup)}
  95. onSelect={match.actions.switchMatsGroup}
  96. >
  97. <List data={matsGroup.matIds || []} columns={5} gap="5px">
  98. {{
  99. item: (matId: string, index: number) => {
  100. const currentMats =
  101. match.helper.findMatById(matId);
  102. return (
  103. <MatItem
  104. key={matId}
  105. mat={currentMats}
  106. active={index == matsGroup.index}
  107. onClick={() =>
  108. match.actions.switchMatsGroupIndex(
  109. matsGroup,
  110. index
  111. )
  112. }
  113. onAction={(key: string) => {
  114. switch (key) {
  115. case "delete":
  116. match.actions.deleteGroupMat(
  117. matsGroup,
  118. index
  119. );
  120. break;
  121. case "rename":
  122. match.actions.renameGroupMat(
  123. currentMats
  124. );
  125. break;
  126. }
  127. }}
  128. />
  129. );
  130. },
  131. empty: () => (
  132. <div class="my-30px text-12px text-center text-gray-500">
  133. 暂无数据
  134. </div>
  135. ),
  136. }}
  137. </List>
  138. </PanelGroup>
  139. );
  140. }
  141. )}
  142. <div class="mt-20px text-12px text-center text-gray-400">
  143. 没有更多了
  144. </div>
  145. </PanelCard>
  146. );
  147. };
  148. },
  149. });