component.tsx 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import { watch } from "vue";
  2. import { string } from "vue-types";
  3. import { useCompData, useCreateChild } from ".";
  4. import { Image, Text } from "../../../basicUI";
  5. import { createUIComp } from "../../../defines/createUIComp";
  6. export const Component = createUIComp({
  7. props: {
  8. compId: string().isRequired,
  9. },
  10. setup(props) {
  11. const { children, value } = useCompData(props.compId);
  12. const createList = useCreateChild("list");
  13. watch(
  14. () => [value.columns],
  15. () => {
  16. const { columns } = value;
  17. const offset = columns - children.list.length;
  18. if (offset > 0) {
  19. children.list.push(...createList(offset));
  20. } else {
  21. children.list.splice(columns, offset * -1);
  22. }
  23. }
  24. );
  25. return () => {
  26. return (
  27. <div class="flex">
  28. <div class="flex-1 mx-0.3rem leading-2 relative z-10 w-0">
  29. <Text.Component compId={children.text} class="mt-0.2rem" />
  30. <div class="flex mt-0.2rem flex-wrap mr-0.8rem ml-0.2rem">
  31. {children.list.map((d: any, i: number) => (
  32. <Image.Component
  33. key={i}
  34. compId={d}
  35. class="-ml-0.2rem mb-0.2rem w-0.72rem h-0.72rem object-cover rounded-1/2 overflow-hidden"
  36. />
  37. ))}
  38. </div>
  39. </div>
  40. <div class="w-2.5rem relative pb-0.58rem mr-0.03rem">
  41. <Image.Component
  42. compId={children.img1}
  43. class="w-2.5rem h-4.17rem object-cover"
  44. />
  45. <div class="absolute bottom-0 right-1rem">
  46. <Image.Component
  47. compId={children.img2}
  48. class="w-3.17rem h-2.4rem object-cover"
  49. />
  50. </div>
  51. </div>
  52. </div>
  53. );
  54. };
  55. },
  56. });