|
@@ -2,7 +2,8 @@
|
|
<template>
|
|
<template>
|
|
<div class="prompt">
|
|
<div class="prompt">
|
|
<el-text tag="b">画面描述</el-text>
|
|
<el-text tag="b">画面描述</el-text>
|
|
- <el-text tag="p">建议使用“形容词+动词+风格”的格式,使用“,”隔开.</el-text>
|
|
|
|
|
|
+ <el-text tag="p">建议使用“形容词+动词+风格”的格式,使用“,”隔开</el-text>
|
|
|
|
+ <!-- TODO @fan:style 看看能不能哟 unocss 替代 -->
|
|
<el-input
|
|
<el-input
|
|
v-model="prompt"
|
|
v-model="prompt"
|
|
maxlength="1024"
|
|
maxlength="1024"
|
|
@@ -32,7 +33,7 @@
|
|
</div>
|
|
</div>
|
|
<div class="model">
|
|
<div class="model">
|
|
<div>
|
|
<div>
|
|
- <el-text tag="b">模型</el-text>
|
|
|
|
|
|
+ <el-text tag="b">模型选择</el-text>
|
|
</div>
|
|
</div>
|
|
<el-space wrap class="model-list">
|
|
<el-space wrap class="model-list">
|
|
<div
|
|
<div
|
|
@@ -52,14 +53,13 @@
|
|
</div>
|
|
</div>
|
|
<div class="image-style">
|
|
<div class="image-style">
|
|
<div>
|
|
<div>
|
|
- <el-text tag="b">样式</el-text>
|
|
|
|
|
|
+ <el-text tag="b">风格选择</el-text>
|
|
</div>
|
|
</div>
|
|
<el-space wrap class="image-style-list">
|
|
<el-space wrap class="image-style-list">
|
|
<div
|
|
<div
|
|
:class="selectImageStyle === imageStyle ? 'image-style-item selectImageStyle' : 'image-style-item'"
|
|
:class="selectImageStyle === imageStyle ? 'image-style-item selectImageStyle' : 'image-style-item'"
|
|
v-for="imageStyle in imageStyleList"
|
|
v-for="imageStyle in imageStyleList"
|
|
- :key="imageStyle"
|
|
|
|
-
|
|
|
|
|
|
+ :key="imageStyle.key"
|
|
>
|
|
>
|
|
<el-image
|
|
<el-image
|
|
:src="imageStyle.image"
|
|
:src="imageStyle.image"
|
|
@@ -72,7 +72,7 @@
|
|
</div>
|
|
</div>
|
|
<div class="image-size">
|
|
<div class="image-size">
|
|
<div>
|
|
<div>
|
|
- <el-text tag="b">尺寸</el-text>
|
|
|
|
|
|
+ <el-text tag="b">画面比例</el-text>
|
|
</div>
|
|
</div>
|
|
<el-space wrap class="size-list">
|
|
<el-space wrap class="size-list">
|
|
<div class="size-item"
|
|
<div class="size-item"
|
|
@@ -97,7 +97,7 @@
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|
|
<script setup lang="ts">
|
|
<script setup lang="ts">
|
|
-import {ImageApi, ImageDallReqVO} from '@/api/ai/image';
|
|
|
|
|
|
+import {ImageApi, ImageDrawReqVO} from '@/api/ai/image';
|
|
|
|
|
|
// image 模型
|
|
// image 模型
|
|
interface ImageModelVO {
|
|
interface ImageModelVO {
|
|
@@ -109,6 +109,7 @@ interface ImageModelVO {
|
|
// image 大小
|
|
// image 大小
|
|
interface ImageSizeVO {
|
|
interface ImageSizeVO {
|
|
key: string
|
|
key: string
|
|
|
|
+ name: string,
|
|
style: string,
|
|
style: string,
|
|
width: string,
|
|
width: string,
|
|
height: string,
|
|
height: string,
|
|
@@ -120,21 +121,24 @@ const drawIn = ref<boolean>(false) // 生成中
|
|
const selectHotWord = ref<string>('') // 选中的热词
|
|
const selectHotWord = ref<string>('') // 选中的热词
|
|
const hotWords = ref<string[]>(['中国旗袍', '古装美女', '卡通头像', '机甲战士', '童话小屋', '中国长城']) // 热词
|
|
const hotWords = ref<string[]>(['中国旗袍', '古装美女', '卡通头像', '机甲战士', '童话小屋', '中国长城']) // 热词
|
|
const selectModel = ref<any>({}) // 模型
|
|
const selectModel = ref<any>({}) // 模型
|
|
|
|
+// TODO @fan:image 改成项目里自己的哈
|
|
|
|
+// TODO @fan:这个 image,要不看看网上有没合适的图片,作为占位符,啊哈哈
|
|
const models = ref<ImageModelVO[]>([
|
|
const models = ref<ImageModelVO[]>([
|
|
- {
|
|
|
|
- key: 'dall-e-2',
|
|
|
|
- name: 'dall2',
|
|
|
|
- image: 'https://h5.cxyhub.com/images/model_1.png',
|
|
|
|
- },
|
|
|
|
{
|
|
{
|
|
key: 'dall-e-3',
|
|
key: 'dall-e-3',
|
|
- name: 'dall3',
|
|
|
|
|
|
+ name: 'DALL·E 3',
|
|
image: 'https://h5.cxyhub.com/images/model_2.png',
|
|
image: 'https://h5.cxyhub.com/images/model_2.png',
|
|
},
|
|
},
|
|
|
|
+ {
|
|
|
|
+ key: 'dall-e-2',
|
|
|
|
+ name: 'DALL·E 2',
|
|
|
|
+ image: 'https://h5.cxyhub.com/images/model_1.png',
|
|
|
|
+ },
|
|
]) // 模型
|
|
]) // 模型
|
|
selectModel.value = models.value[0]
|
|
selectModel.value = models.value[0]
|
|
|
|
|
|
const selectImageStyle = ref<any>({}) // style 样式
|
|
const selectImageStyle = ref<any>({}) // style 样式
|
|
|
|
+// TODO @fan:image 改成项目里自己的哈
|
|
const imageStyleList = ref<ImageModelVO[]>([
|
|
const imageStyleList = ref<ImageModelVO[]>([
|
|
{
|
|
{
|
|
key: 'vivid',
|
|
key: 'vivid',
|
|
@@ -180,11 +184,13 @@ const props = defineProps({})
|
|
// 定义 emits
|
|
// 定义 emits
|
|
const emits = defineEmits(['onDrawStart', 'onDrawComplete'])
|
|
const emits = defineEmits(['onDrawStart', 'onDrawComplete'])
|
|
|
|
|
|
|
|
+// TODO @fan:如果是简单注释,建议用 /** */,主要是现在项目里是这种风格哈,保持一致好点~
|
|
|
|
+// TODO @fan:handler 应该改成 handle 哈
|
|
/**
|
|
/**
|
|
* 热词 - click
|
|
* 热词 - click
|
|
*/
|
|
*/
|
|
const handlerHotWordClick = async (hotWord: string) => {
|
|
const handlerHotWordClick = async (hotWord: string) => {
|
|
- // 取消
|
|
|
|
|
|
+ // 取消选中
|
|
if (selectHotWord.value == hotWord) {
|
|
if (selectHotWord.value == hotWord) {
|
|
selectHotWord.value = ''
|
|
selectHotWord.value = ''
|
|
return
|
|
return
|
|
@@ -238,14 +244,17 @@ const handlerGenerateImage = async () => {
|
|
// 回调
|
|
// 回调
|
|
emits('onDrawStart', selectModel.value.key)
|
|
emits('onDrawStart', selectModel.value.key)
|
|
const form = {
|
|
const form = {
|
|
|
|
+ platform: 'OpenAI',
|
|
prompt: prompt.value, // 提示词
|
|
prompt: prompt.value, // 提示词
|
|
model: selectModel.value.key, // 模型
|
|
model: selectModel.value.key, // 模型
|
|
- style: selectImageStyle.value.key, // 图像生成的风格
|
|
|
|
- width: selectImageSize.value.width, // size不能为空
|
|
|
|
- height: selectImageSize.value.height, // size不能为空
|
|
|
|
- } as ImageDallReqVO
|
|
|
|
|
|
+ width: selectImageSize.value.width, // size 不能为空
|
|
|
|
+ height: selectImageSize.value.height, // size 不能为空
|
|
|
|
+ options: {
|
|
|
|
+ style: selectImageStyle.value.key, // 图像生成的风格
|
|
|
|
+ }
|
|
|
|
+ } as ImageDrawReqVO
|
|
// 发送请求
|
|
// 发送请求
|
|
- await ImageApi.dall(form)
|
|
|
|
|
|
+ await ImageApi.drawImage(form)
|
|
} finally {
|
|
} finally {
|
|
// 回调
|
|
// 回调
|
|
emits('onDrawComplete', selectModel.value.key)
|
|
emits('onDrawComplete', selectModel.value.key)
|