【代码优化】AI:增加枚举类

This commit is contained in:
YunaiV 2024-07-03 13:52:00 +08:00
parent 8da1c04b55
commit 33cf98e306
6 changed files with 97 additions and 29 deletions

View File

@ -32,6 +32,7 @@ import { ImageApi, ImageVO, ImageMjActionVO, ImageMjButtonsVO } from '@/api/ai/i
import ImageDetailDrawer from './ImageDetailDrawer.vue' import ImageDetailDrawer from './ImageDetailDrawer.vue'
import ImageTaskCard from './ImageTaskCard.vue' import ImageTaskCard from './ImageTaskCard.vue'
import { ElLoading, LoadingOptionsResolved } from 'element-plus' import { ElLoading, LoadingOptionsResolved } from 'element-plus'
import { AiImageStatusEnum } from '@/views/ai/utils/constants'
const message = useMessage() // const message = useMessage() //
@ -80,7 +81,7 @@ const getImageList = async (apply: boolean = false) => {
// watch // watch
const newWatImages = {} const newWatImages = {}
imageList.value.forEach((item) => { imageList.value.forEach((item) => {
if (item.status === 10) { if (item.status === AiImageStatusEnum.IN_PROGRESS) {
newWatImages[item.id] = item newWatImages[item.id] = item
} }
}) })
@ -102,7 +103,7 @@ const refreshWatchImages = async () => {
const list = (await ImageApi.getImageListMyByIds(imageIds)) as ImageVO[] const list = (await ImageApi.getImageListMyByIds(imageIds)) as ImageVO[]
const newWatchImages = {} const newWatchImages = {}
list.forEach((image) => { list.forEach((image) => {
if (image.status === 10) { if (image.status === AiImageStatusEnum.IN_PROGRESS) {
newWatchImages[image.id] = image newWatchImages[image.id] = image
} else { } else {
const index = imageList.value.findIndex((oldImage) => image.id === oldImage.id) const index = imageList.value.findIndex((oldImage) => image.id === oldImage.id)

View File

@ -2,9 +2,20 @@
<el-card body-class="" class="image-card"> <el-card body-class="" class="image-card">
<div class="image-operation"> <div class="image-operation">
<div> <div>
<el-button type="primary" text bg v-if="imageDetail?.status === 10">生成中</el-button> <el-button
<el-button text bg v-else-if="imageDetail?.status === 20">已完成</el-button> type="primary"
<el-button type="danger" text bg v-else-if="imageDetail?.status === 30">异常</el-button> text
bg
v-if="imageDetail?.status === AiImageStatusEnum.IN_PROGRESS"
>
生成中
</el-button>
<el-button text bg v-else-if="imageDetail?.status === AiImageStatusEnum.SUCCESS">
已完成
</el-button>
<el-button type="danger" text bg v-else-if="imageDetail?.status === AiImageStatusEnum.FAIL">
异常
</el-button>
</div> </div>
<!-- TODO @fan1按钮要不调整成详情下载再次生成删除2如果是再次生成就把当前的参数填写到左侧的框框里 --> <!-- TODO @fan1按钮要不调整成详情下载再次生成删除2如果是再次生成就把当前的参数填写到左侧的框框里 -->
<div> <div>
@ -26,7 +37,9 @@
<div class="image-wrapper" ref="cardImageRef"> <div class="image-wrapper" ref="cardImageRef">
<!-- TODO @fan要不加个点击大图预览 --> <!-- TODO @fan要不加个点击大图预览 -->
<img class="image" :src="imageDetail?.picUrl" /> <img class="image" :src="imageDetail?.picUrl" />
<div v-if="imageDetail?.status === 30">{{ imageDetail?.errorMessage }}</div> <div v-if="imageDetail?.status === AiImageStatusEnum.FAIL">
{{ imageDetail?.errorMessage }}
</div>
</div> </div>
<!-- TODO @fanstyle 使用 unocss 替代下 --> <!-- TODO @fanstyle 使用 unocss 替代下 -->
<div class="image-mj-btns"> <div class="image-mj-btns">
@ -46,7 +59,8 @@
import { Delete, Download, More } from '@element-plus/icons-vue' import { Delete, Download, More } from '@element-plus/icons-vue'
import { ImageVO, ImageMjButtonsVO } from '@/api/ai/image' import { ImageVO, ImageMjButtonsVO } from '@/api/ai/image'
import { PropType } from 'vue' import { PropType } from 'vue'
import { ElLoading, ElMessageBox } from 'element-plus' import { ElLoading } from 'element-plus'
import { AiImageStatusEnum } from '@/views/ai/utils/constants'
const cardImageRef = ref<any>() // image ref const cardImageRef = ref<any>() // image ref
const cardImageLoadingInstance = ref<any>() // image ref const cardImageLoadingInstance = ref<any>() // image ref
@ -65,7 +79,7 @@ const handlerBtnClick = async (type, imageDetail: ImageVO) => {
const handlerLoading = async (status: number) => { const handlerLoading = async (status: number) => {
// TODO @fan Loading // TODO @fan Loading
if (status === 10) { if (status === AiImageStatusEnum.IN_PROGRESS) {
cardImageLoadingInstance.value = ElLoading.service({ cardImageLoadingInstance.value = ElLoading.service({
target: cardImageRef.value, target: cardImageRef.value,
text: '生成中...' text: '生成中...'

View File

@ -3,15 +3,19 @@
<div class="ai-image"> <div class="ai-image">
<div class="left"> <div class="left">
<div class="segmented"> <div class="segmented">
<el-segmented v-model="selectModel" :options="modelOptions" /> <el-segmented v-model="selectPlatform" :options="platformOptions" />
</div> </div>
<div class="modal-switch-container"> <div class="modal-switch-container">
<!-- TODO @fan1建议 Dall3 改成 OpenAI 绘图因为 dall3 其实本质是模型2涉及到中英文的地方中文和英文之间有个空格哈 --> <Dall3
<Dall3 v-if="selectModel === 'DALL3绘画'" v-if="selectPlatform === AiPlatformEnum.OPENAI"
@on-draw-start="handlerDrawStart" @on-draw-start="handlerDrawStart"
@on-draw-complete="handlerDrawComplete" /> @on-draw-complete="handlerDrawComplete"
<Midjourney v-if="selectModel === 'MJ绘画'" /> />
<StableDiffusion v-if="selectModel === 'Stable Diffusion'" @on-draw-complete="handlerDrawComplete" /> <Midjourney v-if="selectPlatform === AiPlatformEnum.MIDJOURNEY" />
<StableDiffusion
v-if="selectPlatform === AiPlatformEnum.STABLE_DIFFUSION"
@on-draw-complete="handlerDrawComplete"
/>
</div> </div>
</div> </div>
<div class="main"> <div class="main">
@ -26,18 +30,31 @@ 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 ImageTask from './ImageTask.vue'
import { AiPlatformEnum } from '@/views/ai/utils/constants'
// ref
const imageTaskRef = ref<any>() // image task ref const imageTaskRef = ref<any>() // image task ref
// //
const selectModel = ref('Stable Diffusion') const selectPlatform = ref('StableDiffusion')
const modelOptions = ['DALL3绘画', 'MJ绘画', 'Stable Diffusion'] const platformOptions = [
{
label: 'DALL3 绘画',
value: AiPlatformEnum.OPENAI
},
{
label: 'MJ 绘画',
value: AiPlatformEnum.MIDJOURNEY
},
{
label: 'Stable Diffusion',
value: AiPlatformEnum.STABLE_DIFFUSION
}
]
const drawIn = ref<boolean>(false) // const drawIn = ref<boolean>(false) //
/** 绘画 - start */ /** 绘画 - start */
const handlerDrawStart = async (type) => { const handlerDrawStart = async (type) => {
// todo // todo @fan
drawIn.value = true drawIn.value = true
} }
@ -47,15 +64,9 @@ const handlerDrawComplete = async (type) => {
// todo // todo
await imageTaskRef.value.getImageList() await imageTaskRef.value.getImageList()
} }
//
onMounted( async () => {
})
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.ai-image { .ai-image {
position: absolute; position: absolute;
left: 0; left: 0;
@ -101,5 +112,4 @@ onMounted( async () => {
background-color: #f7f8fa; background-color: #f7f8fa;
} }
} }
</style> </style>

View File

@ -121,7 +121,7 @@
:active-value="true" :active-value="true"
:inactive-value="false" :inactive-value="false"
@change="handleUpdatePublicStatusChange(scope.row)" @change="handleUpdatePublicStatusChange(scope.row)"
:disabled="scope.row.status !== 20" :disabled="scope.row.status !== AiImageStatusEnum.SUCCESS"
/> />
</template> </template>
</el-table-column> </el-table-column>
@ -165,6 +165,7 @@ import { getIntDictOptions, DICT_TYPE, getStrDictOptions, getBoolDictOptions } f
import { dateFormatter } from '@/utils/formatTime' import { dateFormatter } from '@/utils/formatTime'
import { ImageApi, ImageVO } from '@/api/ai/image' import { ImageApi, ImageVO } from '@/api/ai/image'
import * as UserApi from '@/api/system/user' import * as UserApi from '@/api/system/user'
import { AiImageStatusEnum } from '@/views/ai/utils/constants'
/** AI 绘画 列表 */ /** AI 绘画 列表 */
defineOptions({ name: 'AiImageManager' }) defineOptions({ name: 'AiImageManager' })

View File

@ -158,7 +158,7 @@
:active-value="true" :active-value="true"
:inactive-value="false" :inactive-value="false"
@change="handleUpdatePublicStatusChange(scope.row)" @change="handleUpdatePublicStatusChange(scope.row)"
:disabled="scope.row.status !== 20" :disabled="scope.row.status !== AiMusicStatusEnum.SUCCESS"
/> />
</template> </template>
</el-table-column> </el-table-column>
@ -199,6 +199,7 @@ import { getIntDictOptions, getBoolDictOptions, DICT_TYPE } from '@/utils/dict'
import { dateFormatter } from '@/utils/formatTime' import { dateFormatter } from '@/utils/formatTime'
import { MusicApi, MusicVO } from '@/api/ai/music' import { MusicApi, MusicVO } from '@/api/ai/music'
import * as UserApi from '@/api/system/user' import * as UserApi from '@/api/system/user'
import { AiMusicStatusEnum } from '@/views/ai/utils/constants'
/** AI 音乐 列表 */ /** AI 音乐 列表 */
defineOptions({ name: 'AiMusicManager' }) defineOptions({ name: 'AiMusicManager' })

View File

@ -0,0 +1,41 @@
/**
* Created by
*
* AI
*
* src/utils/constants.ts
* AI /views/ai/utils/constants.ts
*/
/**
* AI
*/
export const AiPlatformEnum = {
OPENAI: 'OpenAI',
Ollama: 'Ollama',
YI_YAN: 'YiYan', // 百度
XING_HUO: 'XingHuo', // 讯飞
QIAN_WEN: 'QianWen', // 阿里
GEMIR: 'gemir', // 谷歌
STABLE_DIFFUSION: 'StableDiffusion', // Stability AI
MIDJOURNEY: 'Midjourney', // Midjourney
SUNO: 'Suno' // Suno AI
}
/**
* AI
*/
export const AiImageStatusEnum = {
IN_PROGRESS: 10, // 进行中
SUCCESS: 20, // 已完成
FAIL: 30 // 已失败
}
/**
* AI
*/
export const AiMusicStatusEnum = {
IN_PROGRESS: 10, // 进行中
SUCCESS: 20, // 已完成
FAIL: 30 // 已失败
}