【代码优化】AI:绘图 index.vue 代码梳理 20%

This commit is contained in:
YunaiV 2024-07-08 23:29:27 +08:00
parent 6224602152
commit 80d87b8e99
4 changed files with 33 additions and 45 deletions

View File

@ -13,8 +13,8 @@
<!-- </div>--> <!-- </div>-->
<!-- </div>--> <!-- </div>-->
<div class="body"> <div class="body">
<!-- TODO @fan: 要不这里只展示图片不用 ImageTaskCard --> <!-- TODO @fan: 要不这里只展示图片不用 ImageCard -->
<ImageTaskCard :image-detail="imageDetail" /> <ImageCard :image-detail="imageDetail" />
</div> </div>
</div> </div>
<!-- 时间 --> <!-- 时间 -->
@ -60,7 +60,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { ImageApi, ImageVO } from '@/api/ai/image' import { ImageApi, ImageVO } from '@/api/ai/image'
import ImageTaskCard from './ImageTaskCard.vue' import ImageCard from './ImageCard.vue'
const showDrawer = ref<boolean>(false) // const showDrawer = ref<boolean>(false) //
const imageDetail = ref<ImageVO>({} as ImageVO) // const imageDetail = ref<ImageVO>({} as ImageVO) //

View File

@ -1,10 +1,11 @@
<template> <template>
<el-card class="dr-task" body-class="task-card" shadow="never"> <el-card class="dr-task" body-class="task-card" shadow="never">
<template #header>绘画任务</template> <template #header>绘画任务</template>
<!-- 图片列表 -->
<div class="task-image-list" ref="imageTaskRef"> <div class="task-image-list" ref="imageTaskRef">
<ImageTaskCard <ImageCard
v-for="image in imageList" v-for="image in imageList"
:key="image" :key="image.id"
:image-detail="image" :image-detail="image"
@on-btn-click="handleImageBtnClick" @on-btn-click="handleImageBtnClick"
@on-mj-btn-click="handleImageMjBtnClick" @on-mj-btn-click="handleImageMjBtnClick"
@ -20,8 +21,9 @@
/> />
</div> </div>
</el-card> </el-card>
<!-- 图片 detail 抽屉 -->
<ImageDetailDrawer <!-- 图片详情 -->
<ImageDetail
:show="isShowImageDetail" :show="isShowImageDetail"
:id="showImageDetailId" :id="showImageDetailId"
@handle-drawer-close="handleDrawerClose" @handle-drawer-close="handleDrawerClose"
@ -29,8 +31,8 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ImageApi, ImageVO, ImageMjActionVO, ImageMjButtonsVO } from '@/api/ai/image' import { ImageApi, ImageVO, ImageMjActionVO, ImageMjButtonsVO } from '@/api/ai/image'
import ImageDetailDrawer from './ImageDetailDrawer.vue' import ImageDetail from './ImageDetail.vue'
import ImageTaskCard from './ImageTaskCard.vue' import ImageCard from './ImageCard.vue'
import { ElLoading, LoadingOptionsResolved } from 'element-plus' import { ElLoading, LoadingOptionsResolved } from 'element-plus'
import { AiImageStatusEnum } from '@/views/ai/utils/constants' import { AiImageStatusEnum } from '@/views/ai/utils/constants'
import { downloadImage } from '@/utils/download' import { downloadImage } from '@/utils/download'
@ -181,6 +183,7 @@ onUnmounted(async () => {
}) })
</script> </script>
<!-- TODO fan 2 scss 可以合并么 -->
<style lang="scss"> <style lang="scss">
.task-card { .task-card {
margin: 0; margin: 0;
@ -197,8 +200,7 @@ onUnmounted(async () => {
align-content: flex-start; align-content: flex-start;
height: 100%; height: 100%;
overflow: auto; overflow: auto;
padding: 20px; padding: 20px 20px 140px;
padding-bottom: 140px;
box-sizing: border-box; /* 确保内边距不会增加高度 */ box-sizing: border-box; /* 确保内边距不会增加高度 */
> div { > div {
@ -224,7 +226,6 @@ onUnmounted(async () => {
align-items: center; align-items: center;
} }
</style> </style>
<style scoped lang="scss"> <style scoped lang="scss">
.dr-task { .dr-task {
width: 100%; width: 100%;

View File

@ -12,10 +12,7 @@
@on-draw-start="handleDrawStart" @on-draw-start="handleDrawStart"
@on-draw-complete="handleDrawComplete" @on-draw-complete="handleDrawComplete"
/> />
<Midjourney <Midjourney v-if="selectPlatform === AiPlatformEnum.MIDJOURNEY" ref="midjourneyRef" />
v-if="selectPlatform === AiPlatformEnum.MIDJOURNEY"
ref="midjourneyRef"
/>
<StableDiffusion <StableDiffusion
v-if="selectPlatform === AiPlatformEnum.STABLE_DIFFUSION" v-if="selectPlatform === AiPlatformEnum.STABLE_DIFFUSION"
ref="stableDiffusionRef" ref="stableDiffusionRef"
@ -24,22 +21,20 @@
</div> </div>
</div> </div>
<div class="main"> <div class="main">
<ImageTask ref="imageTaskRef" @on-regeneration="handleRegeneration" /> <ImageList ref="imageListRef" @on-regeneration="handleRegeneration" />
</div> </div>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
// TODO @fan /views/ai/image/index /views/ai/image/manager
import Dall3 from './dall3/index.vue' import Dall3 from './dall3/index.vue'
import Midjourney from './midjourney/index.vue' import Midjourney from './midjourney/index.vue'
import StableDiffusion from './stable-diffusion/index.vue' import StableDiffusion from './stable-diffusion/index.vue'
import ImageTask from './ImageTask.vue' import ImageList from './components/ImageList.vue'
import { AiPlatformEnum } from '@/views/ai/utils/constants' import { AiPlatformEnum } from '@/views/ai/utils/constants'
import {ImageVO} from "@/api/ai/image"; import { ImageVO } from '@/api/ai/image'
const imageListRef = ref<any>() // image ref
const imageTaskRef = ref<any>() // image task ref
const dall3Ref = ref<any>() // openai ref const dall3Ref = ref<any>() // openai ref
const midjourneyRef = ref<any>() // midjourney ref const midjourneyRef = ref<any>() // midjourney ref
const stableDiffusionRef = ref<any>() // stable diffusion ref const stableDiffusionRef = ref<any>() // stable diffusion ref
@ -61,35 +56,27 @@ const platformOptions = [
} }
] ]
/** 绘画 - start */ /** 绘画 start */
const handleDrawStart = async (type) => { const handleDrawStart = async (type) => {}
}
/** 绘画 - complete */ /** 绘画 complete */
const handleDrawComplete = async (type) => { const handleDrawComplete = async (type) => {
await imageTaskRef.value.getImageList() await imageListRef.value.getImageList()
} }
/** 绘画 - 重新生成 */ /** 重新生成:将画图详情填充到对应平台 */
const handleRegeneration = async (imageDetail: ImageVO) => { const handleRegeneration = async (image: ImageVO) => {
// //
selectPlatform.value = imageDetail.platform selectPlatform.value = image.platform
console.log('切换平台', imageDetail.platform) // image
// imageDetail await nextTick()
if (imageDetail.platform === AiPlatformEnum.MIDJOURNEY) { if (image.platform === AiPlatformEnum.MIDJOURNEY) {
await nextTick(async () => { midjourneyRef.value.settingValues(image)
midjourneyRef.value.settingValues(imageDetail) } else if (image.platform === AiPlatformEnum.OPENAI) {
}) dall3Ref.value.settingValues(image)
} else if (imageDetail.platform === AiPlatformEnum.OPENAI) { } else if (image.platform === AiPlatformEnum.STABLE_DIFFUSION) {
await nextTick(async () => { stableDiffusionRef.value.settingValues(image)
dall3Ref.value.settingValues(imageDetail)
})
} else if (imageDetail.platform === AiPlatformEnum.STABLE_DIFFUSION) {
await nextTick(async () => {
stableDiffusionRef.value.settingValues(imageDetail)
})
} }
} }
</script> </script>