Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
phsl
/
admin
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
e881b9ce
authored
Jul 09, 2024
by
YunaiV
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
【代码优化】AI:绘图 index.vue 代码梳理 70%(Dall3.vue)
parent
7706e46b
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
106 additions
and
107 deletions
+106
-107
src/views/ai/image/index/components/ImageDetail.vue
+8
-1
src/views/ai/image/index/components/dall3/index.vue
+41
-95
src/views/ai/image/index/components/stableDiffusion/index.vue
+4
-3
src/views/ai/utils/constants.ts
+53
-8
No files found.
src/views/ai/image/index/components/ImageDetail.vue
View file @
e881b9ce
...
@@ -112,14 +112,21 @@
...
@@ -112,14 +112,21 @@
{{
detail
?.
options
?.
seed
}}
{{
detail
?.
options
?.
seed
}}
</div>
</div>
</div>
</div>
<!-- Dall3 专属区域 -->
<div
class=
"item"
v-if=
"detail.platform === AiPlatformEnum.OPENAI && detail?.options?.style"
>
<div
class=
"tip"
>
风格选择
</div>
<div
class=
"body"
>
{{
Dall3StyleList
.
find
((
item
:
ImageModelVO
)
=>
item
.
key
===
detail
?.
options
?.
style
)?.
name
}}
</div>
</div>
</el-drawer>
</el-drawer>
</
template
>
</
template
>
<
script
setup
lang=
"ts"
>
<
script
setup
lang=
"ts"
>
import
{
ImageApi
,
ImageVO
}
from
'@/api/ai/image'
import
{
ImageApi
,
ImageVO
}
from
'@/api/ai/image'
import
ImageCard
from
'./ImageCard.vue'
import
{
import
{
AiPlatformEnum
,
AiPlatformEnum
,
Dall3StyleList
,
ImageModelVO
,
ImageModelVO
,
StableDiffusionClipGuidancePresets
,
StableDiffusionClipGuidancePresets
,
StableDiffusionSamplers
,
StableDiffusionSamplers
,
...
...
src/views/ai/image/index/components/dall3/index.vue
View file @
e881b9ce
...
@@ -37,7 +37,7 @@
...
@@ -37,7 +37,7 @@
</div>
</div>
<el-space
wrap
class=
"model-list"
>
<el-space
wrap
class=
"model-list"
>
<div
<div
:class=
"
m
odel === model.key ? 'modal-item selectModel' : 'modal-item'"
:class=
"
selectM
odel === model.key ? 'modal-item selectModel' : 'modal-item'"
v-for=
"model in Dall3Models"
v-for=
"model in Dall3Models"
:key=
"model.key"
:key=
"model.key"
>
>
...
@@ -52,12 +52,8 @@
...
@@ -52,12 +52,8 @@
</div>
</div>
<el-space
wrap
class=
"image-style-list"
>
<el-space
wrap
class=
"image-style-list"
>
<div
<div
:class=
"
:class=
"style === imageStyle.key ? 'image-style-item selectImageStyle' : 'image-style-item'"
selectImageStyle === imageStyle.key
v-for=
"imageStyle in Dall3StyleList"
? 'image-style-item selectImageStyle'
: 'image-style-item'
"
v-for=
"imageStyle in imageStyleList"
:key=
"imageStyle.key"
:key=
"imageStyle.key"
>
>
<el-image
:src=
"imageStyle.image"
fit=
"contain"
@
click=
"handleStyleClick(imageStyle)"
/>
<el-image
:src=
"imageStyle.image"
fit=
"contain"
@
click=
"handleStyleClick(imageStyle)"
/>
...
@@ -72,11 +68,13 @@
...
@@ -72,11 +68,13 @@
<el-space
wrap
class=
"size-list"
>
<el-space
wrap
class=
"size-list"
>
<div
<div
class=
"size-item"
class=
"size-item"
v-for=
"imageSize in
image
SizeList"
v-for=
"imageSize in
Dall3
SizeList"
:key=
"imageSize.key"
:key=
"imageSize.key"
@
click=
"handleSizeClick(imageSize)"
@
click=
"handleSizeClick(imageSize)"
>
>
<div
:class=
"size === imageSize.key ? 'size-wrapper selectImageSize' : 'size-wrapper'"
>
<div
:class=
"selectSize === imageSize.key ? 'size-wrapper selectImageSize' : 'size-wrapper'"
>
<div
:style=
"imageSize.style"
></div>
<div
:style=
"imageSize.style"
></div>
</div>
</div>
<div
class=
"size-font"
>
{{
imageSize
.
name
}}
</div>
<div
class=
"size-font"
>
{{
imageSize
.
name
}}
</div>
...
@@ -91,103 +89,53 @@
...
@@ -91,103 +89,53 @@
</
template
>
</
template
>
<
script
setup
lang=
"ts"
>
<
script
setup
lang=
"ts"
>
import
{
ImageApi
,
ImageDrawReqVO
,
ImageVO
}
from
'@/api/ai/image'
import
{
ImageApi
,
ImageDrawReqVO
,
ImageVO
}
from
'@/api/ai/image'
import
{
Dall3Models
,
ImageHotWords
}
from
'@/views/ai/utils/constants'
import
{
Dall3Models
,
Dall3StyleList
,
ImageHotWords
,
Dall3SizeList
,
ImageModelVO
,
AiPlatformEnum
}
from
'@/views/ai/utils/constants'
const
message
=
useMessage
()
// 消息弹窗
const
message
=
useMessage
()
// 消息弹窗
// image 模型
interface
ImageModelVO
{
key
:
string
name
:
string
image
:
string
}
// image 大小
interface
ImageSizeVO
{
key
:
string
name
:
string
style
:
string
width
:
string
height
:
string
}
// 定义属性
// 定义属性
const
prompt
=
ref
<
string
>
(
''
)
// 提示词
const
prompt
=
ref
<
string
>
(
''
)
// 提示词
const
drawIn
=
ref
<
boolean
>
(
false
)
// 生成中
const
drawIn
=
ref
<
boolean
>
(
false
)
// 生成中
const
selectHotWord
=
ref
<
string
>
(
''
)
// 选中的热词
const
selectHotWord
=
ref
<
string
>
(
''
)
// 选中的热词
const
model
=
ref
<
string
>
(
'dall-e-3'
)
// 模型
const
selectModel
=
ref
<
string
>
(
'dall-e-3'
)
// 模型
const
size
=
ref
<
string
>
(
'1024x1024'
)
// 选中 size
const
selectSize
=
ref
<
string
>
(
'1024x1024'
)
// 选中 size
const
style
=
ref
<
string
>
(
'vivid'
)
// style 样式
const
selectImageStyle
=
ref
<
string
>
(
'vivid'
)
// style 样式
const
imageStyleList
=
ref
<
ImageModelVO
[]
>
([
const
emits
=
defineEmits
([
'onDrawStart'
,
'onDrawComplete'
])
// 定义 emits
{
key
:
'vivid'
,
name
:
'清晰'
,
image
:
`/src/assets/ai/qingxi.jpg`
},
{
key
:
'natural'
,
name
:
'自然'
,
image
:
`/src/assets/ai/ziran.jpg`
}
])
// style
const
imageSizeList
=
ref
<
ImageSizeVO
[]
>
([
{
key
:
'1024x1024'
,
name
:
'1:1'
,
width
:
'1024'
,
height
:
'1024'
,
style
:
'width: 30px; height: 30px;background-color: #dcdcdc;'
},
{
key
:
'1024x1792'
,
name
:
'3:5'
,
width
:
'1024'
,
height
:
'1792'
,
style
:
'width: 30px; height: 50px;background-color: #dcdcdc;'
},
{
key
:
'1792x1024'
,
name
:
'5:3'
,
width
:
'1792'
,
height
:
'1024'
,
style
:
'width: 50px; height: 30px;background-color: #dcdcdc;'
}
])
// size
// 定义 Props
/** 选择热词 */
const
props
=
defineProps
({})
// 定义 emits
const
emits
=
defineEmits
([
'onDrawStart'
,
'onDrawComplete'
])
/** 热词 - click */
const
handleHotWordClick
=
async
(
hotWord
:
string
)
=>
{
const
handleHotWordClick
=
async
(
hotWord
:
string
)
=>
{
// 取消选中
//
情况一:
取消选中
if
(
selectHotWord
.
value
==
hotWord
)
{
if
(
selectHotWord
.
value
==
hotWord
)
{
selectHotWord
.
value
=
''
selectHotWord
.
value
=
''
return
return
}
}
// 选中
// 情况二:选中
selectHotWord
.
value
=
hotWord
selectHotWord
.
value
=
hotWord
// 替换提示词
prompt
.
value
=
hotWord
prompt
.
value
=
hotWord
}
}
/**
模型 - click
*/
/**
选择 model 模型
*/
const
handleModelClick
=
async
(
model
:
ImageModelVO
)
=>
{
const
handleModelClick
=
async
(
model
:
ImageModelVO
)
=>
{
m
odel
.
value
=
model
.
key
selectM
odel
.
value
=
model
.
key
}
}
/**
样式 - click
*/
/**
选择 style 样式
*/
const
handleStyleClick
=
async
(
imageStyle
:
ImageModelVO
)
=>
{
const
handleStyleClick
=
async
(
imageStyle
:
ImageModelVO
)
=>
{
s
electImageS
tyle
.
value
=
imageStyle
.
key
style
.
value
=
imageStyle
.
key
}
}
/**
size - click
*/
/**
选择 size 大小
*/
const
handleSizeClick
=
async
(
imageSize
:
ImageSizeVO
)
=>
{
const
handleSizeClick
=
async
(
imageSize
:
ImageSizeVO
)
=>
{
size
.
value
=
imageSize
.
key
s
electS
ize
.
value
=
imageSize
.
key
}
}
/** 图片生产 */
/** 图片生产 */
...
@@ -198,37 +146,35 @@ const handleGenerateImage = async () => {
...
@@ -198,37 +146,35 @@ const handleGenerateImage = async () => {
// 加载中
// 加载中
drawIn
.
value
=
true
drawIn
.
value
=
true
// 回调
// 回调
emits
(
'onDrawStart'
,
model
.
value
)
emits
(
'onDrawStart'
,
AiPlatformEnum
.
OPENAI
)
const
imageSize
=
imageSizeList
.
value
.
find
((
item
)
=>
item
.
key
===
s
ize
.
value
)
as
ImageSizeVO
const
imageSize
=
Dall3SizeList
.
find
((
item
)
=>
item
.
key
===
selectS
ize
.
value
)
as
ImageSizeVO
const
form
=
{
const
form
=
{
platform
:
'OpenAI'
,
platform
:
AiPlatformEnum
.
OPENAI
,
prompt
:
prompt
.
value
,
// 提示词
prompt
:
prompt
.
value
,
// 提示词
model
:
m
odel
.
value
,
// 模型
model
:
selectM
odel
.
value
,
// 模型
width
:
imageSize
.
width
,
// size 不能为空
width
:
imageSize
.
width
,
// size 不能为空
height
:
imageSize
.
height
,
// size 不能为空
height
:
imageSize
.
height
,
// size 不能为空
options
:
{
options
:
{
style
:
s
electImageS
tyle
.
value
// 图像生成的风格
style
:
style
.
value
// 图像生成的风格
}
}
}
as
ImageDrawReqVO
}
as
ImageDrawReqVO
// 发送请求
// 发送请求
await
ImageApi
.
drawImage
(
form
)
await
ImageApi
.
drawImage
(
form
)
}
finally
{
}
finally
{
// 回调
// 回调
emits
(
'onDrawComplete'
,
model
.
value
)
emits
(
'onDrawComplete'
,
AiPlatformEnum
.
OPENAI
)
// 加载结束
// 加载结束
drawIn
.
value
=
false
drawIn
.
value
=
false
}
}
}
}
/** 填充值 */
/** 填充值 */
const
settingValues
=
async
(
imageDetail
:
ImageVO
)
=>
{
const
settingValues
=
async
(
detail
:
ImageVO
)
=>
{
prompt
.
value
=
imageDetail
.
prompt
prompt
.
value
=
detail
.
prompt
model
.
value
=
imageDetail
.
model
selectModel
.
value
=
detail
.
model
//
style
.
value
=
detail
.
options
?.
style
selectImageStyle
.
value
=
imageDetail
.
options
?.
style
const
imageSize
=
Dall3SizeList
.
find
(
//
(
item
)
=>
item
.
key
===
`
${
detail
.
width
}
x
${
detail
.
height
}
`
const
imageSize
=
imageSizeList
.
value
.
find
(
(
item
)
=>
item
.
key
===
`
${
imageDetail
.
width
}
x
${
imageDetail
.
height
}
`
)
as
ImageSizeVO
)
as
ImageSizeVO
await
handleSizeClick
(
imageSize
)
await
handleSizeClick
(
imageSize
)
}
}
...
...
src/views/ai/image/index/components/stableDiffusion/index.vue
View file @
e881b9ce
...
@@ -137,6 +137,7 @@
...
@@ -137,6 +137,7 @@
import
{
ImageApi
,
ImageDrawReqVO
,
ImageVO
}
from
'@/api/ai/image'
import
{
ImageApi
,
ImageDrawReqVO
,
ImageVO
}
from
'@/api/ai/image'
import
{
hasChinese
}
from
'@/views/ai/utils/utils'
import
{
hasChinese
}
from
'@/views/ai/utils/utils'
import
{
import
{
AiPlatformEnum
,
ImageHotEnglishWords
,
ImageHotEnglishWords
,
StableDiffusionClipGuidancePresets
,
StableDiffusionClipGuidancePresets
,
StableDiffusionSamplers
,
StableDiffusionSamplers
,
...
@@ -187,10 +188,10 @@ const handleGenerateImage = async () => {
...
@@ -187,10 +188,10 @@ const handleGenerateImage = async () => {
// 加载中
// 加载中
drawIn
.
value
=
true
drawIn
.
value
=
true
// 回调
// 回调
emits
(
'onDrawStart'
,
'StableDiffusion'
)
emits
(
'onDrawStart'
,
AiPlatformEnum
.
STABLE_DIFFUSION
)
// 发送请求
// 发送请求
const
form
=
{
const
form
=
{
platform
:
'StableDiffusion'
,
platform
:
AiPlatformEnum
.
STABLE_DIFFUSION
,
model
:
'stable-diffusion-v1-6'
,
model
:
'stable-diffusion-v1-6'
,
prompt
:
prompt
.
value
,
// 提示词
prompt
:
prompt
.
value
,
// 提示词
width
:
width
.
value
,
// 图片宽度
width
:
width
.
value
,
// 图片宽度
...
@@ -207,7 +208,7 @@ const handleGenerateImage = async () => {
...
@@ -207,7 +208,7 @@ const handleGenerateImage = async () => {
await
ImageApi
.
drawImage
(
form
)
await
ImageApi
.
drawImage
(
form
)
}
finally
{
}
finally
{
// 回调
// 回调
emits
(
'onDrawComplete'
,
'StableDiffusion'
)
emits
(
'onDrawComplete'
,
AiPlatformEnum
.
STABLE_DIFFUSION
)
// 加载结束
// 加载结束
drawIn
.
value
=
false
drawIn
.
value
=
false
}
}
...
...
src/views/ai/utils/constants.ts
View file @
e881b9ce
...
@@ -66,7 +66,7 @@ export interface ImageModelVO {
...
@@ -66,7 +66,7 @@ export interface ImageModelVO {
image
?:
string
image
?:
string
}
}
export
const
StableDiffusionSamplers
=
ref
<
ImageModelVO
[]
>
(
[
export
const
StableDiffusionSamplers
:
ImageModelVO
[]
=
[
{
{
key
:
'DDIM'
,
key
:
'DDIM'
,
name
:
'DDIM'
name
:
'DDIM'
...
@@ -107,9 +107,9 @@ export const StableDiffusionSamplers = ref<ImageModelVO[]>([
...
@@ -107,9 +107,9 @@ export const StableDiffusionSamplers = ref<ImageModelVO[]>([
key
:
'K_LMS'
,
key
:
'K_LMS'
,
name
:
'K_LMS'
name
:
'K_LMS'
}
}
]
)
]
export
const
StableDiffusionStylePresets
=
ref
<
ImageModelVO
[]
>
(
[
export
const
StableDiffusionStylePresets
:
ImageModelVO
[]
=
[
{
{
key
:
'3d-model'
,
key
:
'3d-model'
,
name
:
'3d-model'
name
:
'3d-model'
...
@@ -179,9 +179,9 @@ export const StableDiffusionStylePresets = ref<ImageModelVO[]>([
...
@@ -179,9 +179,9 @@ export const StableDiffusionStylePresets = ref<ImageModelVO[]>([
key
:
'tile-texture'
,
key
:
'tile-texture'
,
name
:
'tile-texture'
name
:
'tile-texture'
}
}
]
)
]
export
const
StableDiffusionClipGuidancePresets
=
ref
<
ImageModelVO
[]
>
(
[
export
const
StableDiffusionClipGuidancePresets
:
ImageModelVO
[]
=
[
{
{
key
:
'NONE'
,
key
:
'NONE'
,
name
:
'NONE'
name
:
'NONE'
...
@@ -210,9 +210,9 @@ export const StableDiffusionClipGuidancePresets = ref<ImageModelVO[]>([
...
@@ -210,9 +210,9 @@ export const StableDiffusionClipGuidancePresets = ref<ImageModelVO[]>([
key
:
'SLOWEST'
,
key
:
'SLOWEST'
,
name
:
'SLOWEST'
name
:
'SLOWEST'
}
}
]
)
]
export
const
Dall3Models
=
ref
<
ImageModelVO
[]
>
(
[
export
const
Dall3Models
:
ImageModelVO
[]
=
[
{
{
key
:
'dall-e-3'
,
key
:
'dall-e-3'
,
name
:
'DALL·E 3'
,
name
:
'DALL·E 3'
,
...
@@ -223,4 +223,49 @@ export const Dall3Models = ref<ImageModelVO[]>([
...
@@ -223,4 +223,49 @@ export const Dall3Models = ref<ImageModelVO[]>([
name
:
'DALL·E 2'
,
name
:
'DALL·E 2'
,
image
:
`/src/assets/ai/dall3.jpg`
image
:
`/src/assets/ai/dall3.jpg`
}
}
])
]
export
const
Dall3StyleList
:
ImageModelVO
[]
=
[
{
key
:
'vivid'
,
name
:
'清晰'
,
image
:
`/src/assets/ai/qingxi.jpg`
},
{
key
:
'natural'
,
name
:
'自然'
,
image
:
`/src/assets/ai/ziran.jpg`
}
]
interface
ImageSizeVO
{
key
:
string
name
:
string
style
:
string
width
:
string
height
:
string
}
export
const
Dall3SizeList
:
ImageSizeVO
[]
=
[
{
key
:
'1024x1024'
,
name
:
'1:1'
,
width
:
'1024'
,
height
:
'1024'
,
style
:
'width: 30px; height: 30px;background-color: #dcdcdc;'
},
{
key
:
'1024x1792'
,
name
:
'3:5'
,
width
:
'1024'
,
height
:
'1792'
,
style
:
'width: 30px; height: 50px;background-color: #dcdcdc;'
},
{
key
:
'1792x1024'
,
name
:
'5:3'
,
width
:
'1792'
,
height
:
'1024'
,
style
:
'width: 50px; height: 30px;background-color: #dcdcdc;'
}
]
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment