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
Show 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 @@
{{
detail
?.
options
?.
seed
}}
</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>
</
template
>
<
script
setup
lang=
"ts"
>
import
{
ImageApi
,
ImageVO
}
from
'@/api/ai/image'
import
ImageCard
from
'./ImageCard.vue'
import
{
AiPlatformEnum
,
Dall3StyleList
,
ImageModelVO
,
StableDiffusionClipGuidancePresets
,
StableDiffusionSamplers
,
...
...
src/views/ai/image/index/components/dall3/index.vue
View file @
e881b9ce
...
...
@@ -37,7 +37,7 @@
</div>
<el-space
wrap
class=
"model-list"
>
<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"
:key=
"model.key"
>
...
...
@@ -52,12 +52,8 @@
</div>
<el-space
wrap
class=
"image-style-list"
>
<div
:class=
"
selectImageStyle === imageStyle.key
? 'image-style-item selectImageStyle'
: 'image-style-item'
"
v-for=
"imageStyle in imageStyleList"
:class=
"style === imageStyle.key ? 'image-style-item selectImageStyle' : 'image-style-item'"
v-for=
"imageStyle in Dall3StyleList"
:key=
"imageStyle.key"
>
<el-image
:src=
"imageStyle.image"
fit=
"contain"
@
click=
"handleStyleClick(imageStyle)"
/>
...
...
@@ -72,11 +68,13 @@
<el-space
wrap
class=
"size-list"
>
<div
class=
"size-item"
v-for=
"imageSize in
image
SizeList"
v-for=
"imageSize in
Dall3
SizeList"
:key=
"imageSize.key"
@
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>
<div
class=
"size-font"
>
{{
imageSize
.
name
}}
</div>
...
...
@@ -91,103 +89,53 @@
</
template
>
<
script
setup
lang=
"ts"
>
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
()
// 消息弹窗
// 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
drawIn
=
ref
<
boolean
>
(
false
)
// 生成中
const
selectHotWord
=
ref
<
string
>
(
''
)
// 选中的热词
const
model
=
ref
<
string
>
(
'dall-e-3'
)
// 模型
const
size
=
ref
<
string
>
(
'1024x1024'
)
// 选中 size
const
selectModel
=
ref
<
string
>
(
'dall-e-3'
)
// 模型
const
selectSize
=
ref
<
string
>
(
'1024x1024'
)
// 选中 size
const
style
=
ref
<
string
>
(
'vivid'
)
// style 样式
const
selectImageStyle
=
ref
<
string
>
(
'vivid'
)
// style 样式
const
emits
=
defineEmits
([
'onDrawStart'
,
'onDrawComplete'
])
// 定义 emits
const
imageStyleList
=
ref
<
ImageModelVO
[]
>
([
{
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
)
=>
{
// 取消选中
//
情况一:
取消选中
if
(
selectHotWord
.
value
==
hotWord
)
{
selectHotWord
.
value
=
''
return
}
// 选中
// 情况二:选中
selectHotWord
.
value
=
hotWord
// 替换提示词
prompt
.
value
=
hotWord
}
/**
模型 - click
*/
/**
选择 model 模型
*/
const
handleModelClick
=
async
(
model
:
ImageModelVO
)
=>
{
m
odel
.
value
=
model
.
key
selectM
odel
.
value
=
model
.
key
}
/**
样式 - click
*/
/**
选择 style 样式
*/
const
handleStyleClick
=
async
(
imageStyle
:
ImageModelVO
)
=>
{
s
electImageS
tyle
.
value
=
imageStyle
.
key
style
.
value
=
imageStyle
.
key
}
/**
size - click
*/
/**
选择 size 大小
*/
const
handleSizeClick
=
async
(
imageSize
:
ImageSizeVO
)
=>
{
size
.
value
=
imageSize
.
key
s
electS
ize
.
value
=
imageSize
.
key
}
/** 图片生产 */
...
...
@@ -198,37 +146,35 @@ const handleGenerateImage = async () => {
// 加载中
drawIn
.
value
=
true
// 回调
emits
(
'onDrawStart'
,
model
.
value
)
const
imageSize
=
imageSizeList
.
value
.
find
((
item
)
=>
item
.
key
===
s
ize
.
value
)
as
ImageSizeVO
emits
(
'onDrawStart'
,
AiPlatformEnum
.
OPENAI
)
const
imageSize
=
Dall3SizeList
.
find
((
item
)
=>
item
.
key
===
selectS
ize
.
value
)
as
ImageSizeVO
const
form
=
{
platform
:
'OpenAI'
,
platform
:
AiPlatformEnum
.
OPENAI
,
prompt
:
prompt
.
value
,
// 提示词
model
:
m
odel
.
value
,
// 模型
model
:
selectM
odel
.
value
,
// 模型
width
:
imageSize
.
width
,
// size 不能为空
height
:
imageSize
.
height
,
// size 不能为空
options
:
{
style
:
s
electImageS
tyle
.
value
// 图像生成的风格
style
:
style
.
value
// 图像生成的风格
}
}
as
ImageDrawReqVO
// 发送请求
await
ImageApi
.
drawImage
(
form
)
}
finally
{
// 回调
emits
(
'onDrawComplete'
,
model
.
value
)
emits
(
'onDrawComplete'
,
AiPlatformEnum
.
OPENAI
)
// 加载结束
drawIn
.
value
=
false
}
}
/** 填充值 */
const
settingValues
=
async
(
imageDetail
:
ImageVO
)
=>
{
prompt
.
value
=
imageDetail
.
prompt
model
.
value
=
imageDetail
.
model
//
selectImageStyle
.
value
=
imageDetail
.
options
?.
style
//
const
imageSize
=
imageSizeList
.
value
.
find
(
(
item
)
=>
item
.
key
===
`
${
imageDetail
.
width
}
x
${
imageDetail
.
height
}
`
const
settingValues
=
async
(
detail
:
ImageVO
)
=>
{
prompt
.
value
=
detail
.
prompt
selectModel
.
value
=
detail
.
model
style
.
value
=
detail
.
options
?.
style
const
imageSize
=
Dall3SizeList
.
find
(
(
item
)
=>
item
.
key
===
`
${
detail
.
width
}
x
${
detail
.
height
}
`
)
as
ImageSizeVO
await
handleSizeClick
(
imageSize
)
}
...
...
src/views/ai/image/index/components/stableDiffusion/index.vue
View file @
e881b9ce
...
...
@@ -137,6 +137,7 @@
import
{
ImageApi
,
ImageDrawReqVO
,
ImageVO
}
from
'@/api/ai/image'
import
{
hasChinese
}
from
'@/views/ai/utils/utils'
import
{
AiPlatformEnum
,
ImageHotEnglishWords
,
StableDiffusionClipGuidancePresets
,
StableDiffusionSamplers
,
...
...
@@ -187,10 +188,10 @@ const handleGenerateImage = async () => {
// 加载中
drawIn
.
value
=
true
// 回调
emits
(
'onDrawStart'
,
'StableDiffusion'
)
emits
(
'onDrawStart'
,
AiPlatformEnum
.
STABLE_DIFFUSION
)
// 发送请求
const
form
=
{
platform
:
'StableDiffusion'
,
platform
:
AiPlatformEnum
.
STABLE_DIFFUSION
,
model
:
'stable-diffusion-v1-6'
,
prompt
:
prompt
.
value
,
// 提示词
width
:
width
.
value
,
// 图片宽度
...
...
@@ -207,7 +208,7 @@ const handleGenerateImage = async () => {
await
ImageApi
.
drawImage
(
form
)
}
finally
{
// 回调
emits
(
'onDrawComplete'
,
'StableDiffusion'
)
emits
(
'onDrawComplete'
,
AiPlatformEnum
.
STABLE_DIFFUSION
)
// 加载结束
drawIn
.
value
=
false
}
...
...
src/views/ai/utils/constants.ts
View file @
e881b9ce
...
...
@@ -66,7 +66,7 @@ export interface ImageModelVO {
image
?:
string
}
export
const
StableDiffusionSamplers
=
ref
<
ImageModelVO
[]
>
(
[
export
const
StableDiffusionSamplers
:
ImageModelVO
[]
=
[
{
key
:
'DDIM'
,
name
:
'DDIM'
...
...
@@ -107,9 +107,9 @@ export const StableDiffusionSamplers = ref<ImageModelVO[]>([
key
:
'K_LMS'
,
name
:
'K_LMS'
}
]
)
]
export
const
StableDiffusionStylePresets
=
ref
<
ImageModelVO
[]
>
(
[
export
const
StableDiffusionStylePresets
:
ImageModelVO
[]
=
[
{
key
:
'3d-model'
,
name
:
'3d-model'
...
...
@@ -179,9 +179,9 @@ export const StableDiffusionStylePresets = ref<ImageModelVO[]>([
key
:
'tile-texture'
,
name
:
'tile-texture'
}
]
)
]
export
const
StableDiffusionClipGuidancePresets
=
ref
<
ImageModelVO
[]
>
(
[
export
const
StableDiffusionClipGuidancePresets
:
ImageModelVO
[]
=
[
{
key
:
'NONE'
,
name
:
'NONE'
...
...
@@ -210,9 +210,9 @@ export const StableDiffusionClipGuidancePresets = ref<ImageModelVO[]>([
key
:
'SLOWEST'
,
name
:
'SLOWEST'
}
]
)
]
export
const
Dall3Models
=
ref
<
ImageModelVO
[]
>
(
[
export
const
Dall3Models
:
ImageModelVO
[]
=
[
{
key
:
'dall-e-3'
,
name
:
'DALL·E 3'
,
...
...
@@ -223,4 +223,49 @@ export const Dall3Models = ref<ImageModelVO[]>([
name
:
'DALL·E 2'
,
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