index.tsx 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. import { useResource } from "@/modules/resource";
  2. import { css, cx } from "@linaria/core";
  3. import { Button } from "ant-design-vue";
  4. import { defineComponent, onMounted } from "vue";
  5. import AssetsList from "../components/AssetsList";
  6. import MaterialTemplateModal from "./components/MaterialTemplateModal";
  7. const materialType = [
  8. { name: "视频", key: "video" },
  9. { name: "图片", key: "image" },
  10. { name: "渲染任务", key: "task" },
  11. ];
  12. export default defineComponent({
  13. setup() {
  14. const resource = useResource();
  15. const showModal = (type: string) => {
  16. resource.showModal(<MaterialTemplateModal type={type} />, {
  17. title: `${type === "image" ? "图片" : "视频"}模板中心`,
  18. width: "1000px",
  19. });
  20. };
  21. const changeType = (v: string) => {
  22. resource.store.setSourceType(v);
  23. loadPage();
  24. };
  25. const loadPage = () => {
  26. resource.controls.materialListCtrl.state.query = {
  27. fileType: resource.store.type,
  28. };
  29. resource.controls.materialListCtrl.loadPage(1);
  30. };
  31. onMounted(() => loadPage());
  32. return () => {
  33. return (
  34. <div class={rootStyles}>
  35. <h3 class="text-22px">我的素材</h3>
  36. <div class="flex items-center justify-between mt-20px">
  37. <div class="filter space-x-60px">
  38. {materialType.map((d) => (
  39. <span
  40. key={d.key}
  41. onClick={() => changeType(d.key)}
  42. class={cx(
  43. resource.store.type == d.key && "active",
  44. "cursor-pointer btn_tab"
  45. )}
  46. >
  47. {d.name}
  48. </span>
  49. ))}
  50. </div>
  51. <div>
  52. <Button
  53. ghost
  54. type="primary"
  55. onClick={resource.actions.uploadMaterial}
  56. >
  57. 上传素材
  58. </Button>
  59. <Button
  60. ghost
  61. type="primary"
  62. class="ml-25px"
  63. onClick={() => showModal("image")}
  64. >
  65. 生成图片
  66. </Button>
  67. <Button
  68. ghost
  69. type="primary"
  70. class="ml-15px"
  71. onClick={() => showModal("video")}
  72. >
  73. 生成视频
  74. </Button>
  75. </div>
  76. </div>
  77. <AssetsList
  78. columns={6}
  79. class="mt-30px"
  80. control={resource.controls.materialListCtrl}
  81. item={(record: any) => (
  82. <resource.components.MaterialItem
  83. use="show"
  84. record={record}
  85. onDelete={() => resource.actions.deleteMaterial(record)}
  86. onDownload={() => resource.actions.downloadMaterial(record)}
  87. />
  88. )}
  89. />
  90. </div>
  91. );
  92. };
  93. },
  94. });
  95. const rootStyles = css`
  96. .btn_tab {
  97. padding: 3px 5px;
  98. &:hover,
  99. &.active {
  100. color: @inf-primary-color;
  101. }
  102. }
  103. `;