ShareModal.tsx 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import { clipboard } from "@/utils";
  2. import { Image } from "@queenjs/ui";
  3. import { useQRCode } from "@vueuse/integrations/useQRCode";
  4. import { Button, Input } from "ant-design-vue";
  5. import { defineComponent } from "vue";
  6. import { any } from "vue-types";
  7. export default defineComponent({
  8. props: {
  9. record: any().isRequired,
  10. },
  11. emits: ["edit", "update", "changeThumnb"],
  12. setup(props, { slots, emit }) {
  13. let shareLink = location.origin + "/share.html?id=" + props.record._id;
  14. if (location.host == "www.infish.cn") {
  15. shareLink =
  16. location.origin +
  17. "/projects/queenshow/share.html?id=" +
  18. props.record._id;
  19. }
  20. const qrUrl = useQRCode(shareLink, { margin: 2 });
  21. return () => {
  22. const { record } = props;
  23. return (
  24. <div class="flex items-start">
  25. <div>
  26. <div class="scroll w-375px h-600px overflow-y-auto bg-light-50">
  27. {slots.preview?.()}
  28. </div>
  29. <div class="mt-20px text-center">
  30. <Button type="primary" ghost onClick={() => emit("edit")}>
  31. 编辑作品
  32. </Button>
  33. </div>
  34. </div>
  35. <div class="flex-1 ml-40px">
  36. <h3 class="mb-20px text-16px">设置</h3>
  37. <div class="flex">
  38. <div class="relative">
  39. <Image
  40. class="w-80px h-80px object-contain rounded-4px border-1px border-solid border-[#434343]"
  41. src={record.thumbnail}
  42. />
  43. <div
  44. class="absolute left-0 bottom-0 w-1/1 text-center py-5px text-14px bg-dark-200 bg-opacity-80 cursor-pointer"
  45. onClick={() => emit("changeThumnb")}
  46. >
  47. 更换封面
  48. </div>
  49. </div>
  50. <div class="flex-1 ml-20px">
  51. <Input
  52. class="w-1/1"
  53. defaultValue={record.title}
  54. placeholder="请输入标题"
  55. onBlur={(e: any) => emit("update", { title: e.target.value })}
  56. />
  57. {/* <Input placeholder="请输入描述" class="mt-10px w-1/1" /> */}
  58. </div>
  59. </div>
  60. <div class="mt-40px flex">
  61. <div>
  62. <h3 class=" text-16px">二维码</h3>
  63. <img class="mt-20px w-120px" src={qrUrl.value} />
  64. <div class="mt-10px text-center">
  65. <span class="ml-5px text-12px opacity-80">
  66. 微信扫一扫分享
  67. </span>
  68. </div>
  69. </div>
  70. <div class="flex-1 w-0 ml-60px">
  71. <h3 class=" text-16px">链接分享</h3>
  72. <div class="mt-20px">
  73. <div class="w-1/1 py-4px px-10px border-solid border-1px border-[#434343] rounded-2px truncate opacity-80">
  74. {shareLink}
  75. </div>
  76. <Button
  77. class="mt-10px"
  78. type="primary"
  79. ghost
  80. onClick={() => clipboard.copy(shareLink)}
  81. >
  82. 复制链接
  83. </Button>
  84. </div>
  85. </div>
  86. </div>
  87. </div>
  88. </div>
  89. );
  90. };
  91. },
  92. });