ImageTask.vue 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <template>
  2. <el-card class="dr-task" body-class="task-card" shadow="never">
  3. <template #header>绘画任务</template>
  4. <ImageTaskCard v-for="image in imageList" :key="image" :image-detail="image" @on-btn-click="handlerImageBtnClick" />
  5. </el-card>
  6. <!-- 图片 detail 抽屉 -->
  7. <ImageDetailDrawer
  8. :show="showTaskDetail"
  9. @handler-drawer-close="handlerDrawerClose"
  10. />
  11. </template>
  12. <script setup lang="ts">
  13. import {ImageApi, ImageDetailVO} from '@/api/ai/image';
  14. import ImageDetailDrawer from './ImageDetailDrawer.vue'
  15. import ImageTaskCard from './ImageTaskCard.vue'
  16. import {bool} from "vue-types";
  17. const imageList = ref<ImageDetailVO[]>([]) // image 列表
  18. const showTaskDetail = ref<bool>(false) // 是否显示 task 详情
  19. /**
  20. * 图片人物 - detail
  21. */
  22. const handlerTaskDetail = async () => {
  23. showTaskDetail.value = !showTaskDetail.value
  24. }
  25. /**
  26. * 抽屉 - close
  27. */
  28. const handlerDrawerClose = async () => {
  29. showTaskDetail.value = false
  30. }
  31. /**
  32. * 任务 - detail
  33. */
  34. const handlerDrawerOpen = async () => {
  35. showTaskDetail.value = true
  36. }
  37. /**
  38. * 获取 - image 列表
  39. */
  40. const getImageList = async () => {
  41. const { list } = await ImageApi.getImageList({pageNo: 1, pageSize: 20})
  42. imageList.value = list
  43. }
  44. /**
  45. * 图片 - btn click
  46. */
  47. const handlerImageBtnClick = async (type, imageDetail: ImageDetailVO) => {
  48. if (type === 'more') {
  49. await handlerDrawerOpen()
  50. }
  51. }
  52. //
  53. defineExpose({getImageList})
  54. //
  55. onMounted(async () => {
  56. await getImageList()
  57. })
  58. </script>
  59. <style lang="scss">
  60. .task-card {
  61. display: flex;
  62. flex-direction: row;
  63. flex-wrap: wrap;
  64. >div {
  65. margin-right: 20px;
  66. margin-bottom: 20px;
  67. }
  68. }
  69. </style>
  70. <style scoped lang="scss">
  71. .dr-task {
  72. width: 100%;
  73. height: 100%;
  74. }
  75. </style>