UI.tsx 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import { css, cx } from "@linaria/core";
  2. import { Button } from "ant-design-vue";
  3. import { defineComponent, onMounted } from "vue";
  4. import { any } from "vue-types";
  5. import MaterialItem from "@/modules/resource/components/MaterialItem";
  6. import { SourceController } from "./SourceController";
  7. import AssetsList from "@/components/AssetsList";
  8. const TabNames = {
  9. "video":"视频",
  10. "image": "图片",
  11. "task": "渲染任务"
  12. }
  13. const BtnNames = {
  14. "video":"生成视频",
  15. "image": "生成图片",
  16. "upload": "上传素材"
  17. }
  18. export default defineComponent({
  19. props: {
  20. Controller: any<SourceController>().isRequired
  21. },
  22. setup(props) {
  23. onMounted(() =>{
  24. const ctrl = props.Controller.getCurrControl()
  25. ctrl.loadPage(1);
  26. });
  27. return () => {
  28. const state = props.Controller.state;
  29. const control = props.Controller.getCurrControl()
  30. return (
  31. <div class={rootStyles}>
  32. <h3 class="text-22px">我的素材</h3>
  33. <div class="flex items-center justify-between mt-20px">
  34. <div class="filter space-x-60px">
  35. {state.tabs.map((d) => (
  36. <span
  37. key={d}
  38. onClick={() => props.Controller.switchTab(d)}
  39. class={cx(
  40. state.currTab == d && "active",
  41. "cursor-pointer btn_tab"
  42. )}
  43. >
  44. {TabNames[d as "video"]}
  45. </span>
  46. ))}
  47. </div>
  48. <div>
  49. {
  50. state.btns.map((name, index)=>
  51. <Button
  52. ghost
  53. key={name}
  54. type="primary"
  55. class={"primary" + (index > 0 ? " ml-25px" : "")}
  56. onClick={()=>props.Controller.onBtnClick(name)}
  57. >
  58. {BtnNames[name as "video"]}
  59. </Button>
  60. )
  61. }
  62. </div>
  63. </div>
  64. <AssetsList
  65. columns={6}
  66. class="mt-30px"
  67. control={control}
  68. item={(record: any) => (
  69. <MaterialItem
  70. record={record}
  71. use={ state.currTab == "task" ? "task" : "show"}
  72. onDelete={() => props.Controller.onItemClick("delete", record)}
  73. onDownload={() =>props.Controller.onItemClick("download", record)}
  74. />
  75. )}
  76. />
  77. </div>
  78. );
  79. };
  80. },
  81. });
  82. const rootStyles = css`
  83. .btn_tab {
  84. padding: 3px 5px;
  85. &:hover,
  86. &.active {
  87. color: @inf-primary-color;
  88. }
  89. }
  90. `;