Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
ai_web_page_prod
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
haojie
ai_web_page_prod
Commits
db714491
Commit
db714491
authored
Apr 25, 2023
by
haojie
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1
parent
77a60532
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
473 additions
and
74 deletions
+473
-74
src/components/custom/ImgSizeRadioGroup.vue
+1
-1
src/components/custom/SelectModel.vue
+28
-0
src/components/custom/SelectModelDialog.vue
+265
-0
src/constants/router.ts
+24
-10
src/pages/CreationRecord/components/MappingRecord.vue
+4
-1
src/pages/ModelGeneration/components/GenerateResult/index.less
+4
-4
src/pages/ModelGeneration/components/GenerateResult/index.tsx
+17
-27
src/pages/ModelGeneration/index.vue
+36
-17
src/pages/ModelTemplate/index.vue
+14
-5
src/utils/OutsideRequest.ts
+33
-0
src/utils/api/Task.ts
+17
-8
src/utils/http/http.ts
+29
-0
vite.config.ts
+1
-1
No files found.
src/components/custom/ImgSizeRadioGroup.vue
View file @
db714491
...
...
@@ -29,7 +29,7 @@
:class=
"
{ active: item.value == Current_btn }"
@click="onBtnChange(item)"
>
<div
class=
"img-size-text"
>
{{
item
.
siz
e
}}
</div>
<div
class=
"img-size-text"
>
{{
item
.
valu
e
}}
</div>
<div
class=
"label-text"
>
{{
item
.
label
}}
</div>
</div>
</
template
>
...
...
src/components/custom/SelectModel.vue
View file @
db714491
<
template
>
<div
class=
"custom-select-model"
>
<div
class=
"select-model-btns"
>
<ResetButton
class=
"model-btn"
v-for=
"item in options"
:key=
"item.label"
>
{{
item
.
label
}}
</ResetButton
>
</div>
<div
class=
"model-dialog-box"
>
<CustomInput
v-model=
"InputValue"
:placeholder=
"placeholder"
...
...
@@ -40,6 +50,7 @@
<OnWaitVue
v-else
label=
"未搜索到模特"
></OnWaitVue>
</div>
</div>
</div>
</template>
<
script
lang=
"ts"
setup
>
...
...
@@ -52,10 +63,12 @@ import { debounce } from '@/utils/tool';
import
request
from
'@/utils/request'
;
import
{
show_message
}
from
'@/utils/tdesign_tool'
;
import
{
getUserCookie
}
from
'@/utils/api/userApi'
;
import
ResetButton
from
'@/components/custom/resetbutton.vue'
;
const
props
=
withDefaults
(
defineProps
<
{
tool_url
:
string
;
placeholder
?:
string
;
options
:
any
[];
}
>
(),
{
placeholder
:
'请输入'
,
...
...
@@ -144,6 +157,20 @@ const InputChange = debounce(Search, 1000);
@import
'@/style/variables.less'
;
.custom-select-model
{
width
:
100%
;
.select-model-btns
{
display
:
flex
;
justify-content
:
space-between
;
.model-btn
{
width
:
48%
!important
;
&:hover
{
border
:
1px
solid
#00f9f9
!important
;
background
:
#181818
!important
;
color
:
white
;
}
}
}
.model-dialog-box
{
margin-top
:
6px
;
.select-model-input
{
width
:
100%
!important
;
height
:
auto
!important
;
...
...
@@ -187,5 +214,6 @@ const InputChange = debounce(Search, 1000);
}
}
}
}
}
</
style
>
src/components/custom/SelectModelDialog.vue
0 → 100644
View file @
db714491
<
template
>
<div
class=
"custom-chose-model-dialog"
>
<t-dialog
class=
"chose-model-dialog"
v-model:visible=
"visible"
placement=
"center"
:cancelBtn=
"null"
>
<template
#
confirmBtn
>
<ResetButton
@
click=
"ConfirmEnvent"
>
确认
</ResetButton>
</
template
>
<
template
#
header
>
{{
dialog_title
}}
</
template
>
<
template
#
body
>
<div
class=
"model-dialog-box"
>
<CustomInput
v-model=
"InputValue"
:placeholder=
"placeholder"
@
inputChange=
"InputChange"
align=
"left"
class=
"select-model-input"
>
<template
#
rightIcon
>
<span
class=
"right-input-icon"
>
<ChevronDown></ChevronDown>
</span>
</
template
>
</CustomInput>
<div
class=
"search-area-box narrow-scrollbar"
>
<OnWaitVue
v-if=
"SearchStatus == 'wait'"
label=
"未有图片,快去上方输入模特样式吧"
></OnWaitVue>
<OnLoading
v-else-if=
"SearchStatus == 'loading'"
label=
"搜索中"
></OnLoading>
<div
class=
"search-result-image"
v-else-if=
"SearchList.list.length"
>
<img
v-for=
"item in SearchList.list"
:key=
"item.image"
:src=
"item.image"
@
click=
"ChoseModel(item)"
:class=
"{ 'image-active': item.image == SearchList.image }"
/>
<
template
v-for=
"(item, index) in SearchList.list"
:key=
"item.image + '1'"
>
<i
v-if=
"index !== SearchList.list.length - 1"
></i>
</
template
>
</div>
<OnWaitVue
v-else
label=
"未搜索到模特"
></OnWaitVue>
</div>
</div>
</template>
</t-dialog>
<ResetButton
class=
"open-dialog-btn"
@
click=
"visible = true"
>
{{
label
}}
</ResetButton>
</div>
</template>
<
script
lang=
"ts"
setup
>
import
ResetButton
from
'@/components/custom/resetbutton.vue'
;
import
{
Dialog
as
TDialog
}
from
'tdesign-vue-next'
;
import
{
reactive
,
ref
,
watch
}
from
'vue'
;
import
CustomInput
from
'@/components/custom/input/index.vue'
;
import
ChevronDown
from
'@/assets/svg/select/chevron-down.svg'
;
import
OnWaitVue
from
'./ImgLoadingStatus/OnWait.vue'
;
import
OnLoading
from
'./ImgLoadingStatus/OnLoading.vue'
;
import
{
debounce
}
from
'@/utils/tool'
;
import
request
from
'@/utils/request'
;
import
{
show_message
}
from
'@/utils/tdesign_tool'
;
import
{
getUserCookie
}
from
'@/utils/api/userApi'
;
const
props
=
withDefaults
(
defineProps
<
{
modelValue
:
boolean
;
dialog_title
?:
string
;
label
?:
string
;
placeholder
?:
string
;
tool_url
:
string
;
}
>
(),
{
placeholder
:
'请输入'
,
label
:
'选择模特'
,
dialog_title
:
'请选择'
,
}
);
const
emit
=
defineEmits
([
'update:modelValue'
,
'SubmitImage'
]);
const
visible
=
ref
(
props
.
modelValue
);
const
InputValue
=
ref
(
''
);
// 当前搜索状态
const
SearchStatus
=
ref
(
'wait'
);
const
SearchList
=
reactive
({
list
:
[],
// 当前选择的图片
image
:
''
,
});
// 确认事件
const
ConfirmEnvent
=
()
=>
{
if
(
!
SearchList
.
image
)
{
show_message
(
'未选择图片'
);
return
;
}
// 关闭弹窗并提交图片
visible
.
value
=
false
;
emit
(
'SubmitImage'
);
};
const
Search
=
async
()
=>
{
console
.
log
(
'开始搜索'
);
try
{
if
(
!
InputValue
.
value
)
{
return
;
}
if
(
!
props
.
tool_url
)
{
show_message
(
'未配置搜索功能'
);
return
;
}
const
res
:
any
=
await
request
.
post
(
props
.
tool_url
,
{
key
:
InputValue
.
value
,
},
{
headers
:
{
authorization
:
`Bearer
${
getUserCookie
()}
`
,
},
}
);
// const res:any = await dddd();
// 搜索成功
SearchStatus
.
value
=
'loading'
;
setTimeout
(()
=>
{
SearchList
.
list
=
[
{
image
:
'data:image/jpeg;base64,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'
,
},
{
image
:
'data:image/jpeg;base64,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'
,
},
{
image
:
'data:image/jpeg;base64,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'
,
},
{
image
:
'data:image/jpeg;base64,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'
,
},
{
image
:
'data:image/jpeg;base64,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'
,
},
{
image
:
'data:image/jpeg;base64,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'
,
},
];
// success
SearchStatus
.
value
=
'success'
;
},
2000
);
}
catch
(
e
)
{
console
.
log
(
e
);
}
};
// 选择模特
const
ChoseModel
=
(
item
:
any
)
=>
{
if
(
item
.
image
!=
SearchList
.
image
)
{
SearchList
.
image
=
item
.
image
;
// 提交图片链接
emit
(
'SubmitModel'
,
SearchList
.
image
);
}
};
// 防抖
const
InputChange
=
debounce
(
Search
,
1000
);
watch
(
()
=>
props
.
modelValue
,
(
v
)
=>
{
visible
.
value
=
v
;
}
);
watch
(
()
=>
visible
.
value
,
(
v
)
=>
{
emit
(
'update:modelValue'
,
v
);
}
);
</
script
>
<
style
lang=
"less"
>
@import
'@/style/variables.less'
;
.custom-chose-model-dialog
{
width
:
48%
;
.open-dialog-btn
{
width
:
100%
!important
;
}
.chose-model-dialog
{
.t-dialog
{
background
:
#2d2d2d
;
border
:
none
;
width
:
600px
;
.t-dialog__header-content
{
color
:
white
;
}
.t-dialog__close
{
color
:
#ddd
;
&:hover
{
color
:
#2d2d2d
;
}
}
}
.model-dialog-box
{
margin-top
:
6px
;
.select-model-input
{
width
:
100%
!important
;
height
:
auto
!important
;
color
:
white
;
.right-input-icon
{
padding-right
:
12px
;
}
}
.search-area-box
{
width
:
100%
;
height
:
389px
;
background
:
#181818
;
border
:
@
main-border
;
border-radius
:
8px
;
margin-top
:
6px
;
display
:
flex
;
justify-content
:
center
;
align-items
:
center
;
overflow-y
:
auto
;
.search-result-image
{
width
:
100%
;
height
:
100%
;
padding
:
12px
;
display
:
flex
;
justify-content
:
space-between
;
flex-wrap
:
wrap
;
row-gap
:
12px
;
i
{
width
:
150px
;
}
img
{
width
:
150px
;
height
:
150px
;
border-radius
:
8px
;
cursor
:
pointer
;
border
:
1.5px
solid
transparent
;
transition
:
border
0.2s
;
}
.image-active
{
border
:
1.5px
solid
#00f9f9
;
transition
:
border
0.2s
;
}
}
}
}
}
}
</
style
>
src/constants/router.ts
View file @
db714491
...
...
@@ -4,22 +4,36 @@ import { TASKTYPE } from '@/utils/api/Task';
// 跳转产品详情页
export
const
JumpDetailPage
=
(
item
:
any
)
=>
{
// 本地写死
//
item.type = TASKTYPE.MODEL_GENERATION;
item
.
type
=
TASKTYPE
.
MODEL_GENERATION
;
// 模板选择
//
item.type = TASKTYPE.MODELTEMPLATE;
item
.
type
=
TASKTYPE
.
MODELTEMPLATE
;
let
path
=
''
;
if
(
item
.
type
==
TASKTYPE
.
CHAT
)
{
// if (item.type == TASKTYPE.CHAT) {
// // 文案1
// path = '/CopywritingGeneration';
// } else if (item.type == TASKTYPE.PAINTING) {
// // 绘图2
// path = '/ImageGeneration';
// } else if (item.type == TASKTYPE.MODEL_GENERATION) {
// // 模特生成+换衣 4
// path = '/ModelGeneration';
// } else if (item.type == TASKTYPE.MODELTEMPLATE) {
// // 选择模特模板
// path = '/ModelTemplate';
// }
item
.
url
=
'ModelTemplate'
;
if
(
item
.
url
.
indexOf
(
'ModelTemplate'
)
!==
-
1
)
{
// 选择模特模板
path
=
'/ModelTemplate'
;
}
else
if
(
item
.
url
.
indexOf
(
'ModelGeneration'
)
!==
-
1
)
{
// 模特生成
path
=
'/ModelGeneration'
;
}
else
if
(
item
.
url
.
indexOf
(
'CopywritingGeneration'
)
!==
-
1
)
{
// 文案1
path
=
'/CopywritingGeneration'
;
}
else
if
(
item
.
type
==
TASKTYPE
.
PAINTING
)
{
}
else
if
(
item
.
url
.
indexOf
(
'ImageGeneration'
)
!==
-
1
)
{
// 绘图2
path
=
'/ImageGeneration'
;
}
else
if
(
item
.
type
==
TASKTYPE
.
MODEL_GENERATION
)
{
// 模特生成+换衣 4
path
=
'/ModelGeneration'
;
}
else
if
(
item
.
type
==
TASKTYPE
.
MODELTEMPLATE
)
{
// 选择模特模板
path
=
'/ModelTemplate'
;
}
if
(
path
)
{
const
url
=
router
.
resolve
({
...
...
src/pages/CreationRecord/components/MappingRecord.vue
View file @
db714491
...
...
@@ -103,7 +103,10 @@ const columns = [
];
// 图片链接
const
getImage
=
(
row
:
any
)
=>
{
if
(
row
.
response
&&
row
.
response
.
url
&&
row
.
response
.
url
[
0
])
{
const
res
=
row
.
response
;
// 必须是数组
const
is_array
=
Object
.
prototype
.
toString
.
call
(
res
.
url
)
===
'[object Array]'
;
if
(
res
&&
res
.
url
&&
res
.
url
[
0
]
&&
is_array
)
{
return
row
.
response
.
url
[
0
];
}
return
imgs
.
empty
;
...
...
src/pages/ModelGeneration/components/GenerateResult/index.less
View file @
db714491
...
...
@@ -29,14 +29,14 @@
flex-direction: column;
.result-img-box {
display: flex;
justify-content:
center
;
justify-content:
space-between
;
align-items: center;
flex-wrap: wrap;
row-gap: 20px;
width: 100%;
.result-img {
width:
80
%;
height:
100%
;
width:
48
%;
height:
330px
;
border-radius: 8px;
.img {
width: 100%;
...
...
@@ -51,7 +51,7 @@
justify-content: space-between;
align-items: flex-end;
.reset-down-load-btn {
width:
48
% !important;
width:
100
% !important;
border: 2px solid #00dddd !important;
font-weight: 600 !important;
font-size: @font-size-16;
...
...
src/pages/ModelGeneration/components/GenerateResult/index.tsx
View file @
db714491
...
...
@@ -4,34 +4,18 @@ import CustomResetButton from '@/components/custom/resetbutton.vue';
import
OnWait
from
'@/components/custom/ImgLoadingStatus/OnWait.vue'
;
import
OnLoading
from
'@/components/custom/ImgLoadingStatus/OnLoading.vue'
;
import
RadioGroup
from
'@/components/custom/RadioGroup.vue'
;
import
request
from
'@/utils/request'
;
export
default
defineComponent
({
props
:
{
list
:
Object
as
any
,
SelectImageGroup
:
Object
as
any
,
status
:
String
,
page_module
:
Number
,
edit_image
:
String
,
},
emits
:
[
'update:page_module'
,
'update:status'
,
'update:edit_image'
],
emits
:
[
'update:page_module'
,
'update:status'
,
'update:edit_image'
,
'submit'
],
setup
(
props
,
{
emit
})
{
// 按钮组
const
btn_list
=
[
{
label
:
1
,
value
:
1
,
},
{
label
:
2
,
value
:
2
,
},
{
label
:
3
,
value
:
3
,
},
{
label
:
4
,
value
:
4
,
},
];
const
SplitImage
=
reactive
({
// 选择切割第几张图片
value
:
1
,
...
...
@@ -50,7 +34,6 @@ export default defineComponent({
// 接口回调中提交要修改的图片链接
emit
(
'update:edit_image'
,
// ' https://img1.baidu.com/it/u=1210516829,3619266924&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=750'
new
URL
(
'../../../../assets/img/mote2.png'
,
import
.
meta
.
url
).
href
);
resolve
(
'三秒后出现'
);
...
...
@@ -60,6 +43,10 @@ export default defineComponent({
console
.
log
(
e
);
}
};
// 提交图片
const
SubmitImage
=
()
=>
{
emit
(
'submit'
,
SplitImage
.
value
);
};
// 图片切割并打开图片合并模块
const
Composition
=
async
()
=>
{
// 提交图片切割任务
...
...
@@ -81,7 +68,6 @@ export default defineComponent({
return
(
<
div
class=
"load-success-box"
>
<
div
class=
"result-img-box narrow-scrollbar"
>
{
/* 结果可选择 */
}
{
props
.
list
?
props
.
list
.
map
((
item
:
any
)
=>
(
<
div
class=
"result-img"
>
...
...
@@ -90,17 +76,21 @@ export default defineComponent({
))
:
''
}
</
div
>
{
Object
.
keys
(
props
.
SelectImageGroup
).
length
?
(
<
RadioGroup
v
-
model=
{
SplitImage
.
value
}
list=
{
btn_list
}
list=
{
props
.
SelectImageGroup
.
options
}
class=
"chose-img-group"
></
RadioGroup
>
)
:
(
''
)
}
<
div
class=
"download-img-box"
>
<
CustomResetButton
class=
"reset-next-btn"
onClick=
{
Composition
}
>
图片合成
</
CustomResetButton
>
<
CustomResetButton
class=
"reset-down-load-btn"
>
下载
<
CustomResetButton
class=
"reset-down-load-btn"
onClick=
{
SubmitImage
}
>
提交
</
CustomResetButton
>
</
div
>
</
div
>
...
...
src/pages/ModelGeneration/index.vue
View file @
db714491
...
...
@@ -68,7 +68,9 @@
v-model:status=
"AdminData.status"
v-model:page_module=
"AdminData.page_module"
v-model:edit_image=
"AdminData.edit_image"
:list=
"test_list"
:SelectImageGroup=
"SelectImageGroup"
:list=
"AdminData.callback_list"
@
submit=
"SubmitModel"
></GenerateResult>
</div>
</div>
...
...
@@ -91,6 +93,7 @@ import CustomTextArea from '@/components/custom/textarea.vue';
import
CustomInput
from
'@/components/custom/input/index.vue'
;
import
CustomResetButton
from
'@/components/custom/resetbutton.vue'
;
import
GenerateResult
from
'./components/GenerateResult'
;
import
{
useRequest
}
from
'@/utils/http/http'
;
import
{
onBeforeMount
,
nextTick
,
...
...
@@ -111,35 +114,32 @@ import { Validationrules, ChangePageHeight } from '@/utils/tool';
import
{
useRoute
}
from
'vue-router'
;
import
{
show_message
}
from
'@/utils/tdesign_tool'
;
import
CompositeImage
from
'./components/CompositeImage.vue'
;
import
request
from
'@/utils/request'
;
const
loading
=
ref
(
false
);
const
route
=
useRoute
();
// 当前
const
id
=
route
.
query
.
id
;
// 模特生成测试列表
const
test_list
=
[
'https://img1.baidu.com/it/u=1210516829,3619266924&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=750'
,
];
// el
const
GenerationBox
=
ref
();
// 定时器
let
IntervalImg
:
any
=
null
;
// 本次提交的数量
const
CurSubmitNum
=
ref
(
0
);
// 上传策略状态
const
StrategyStatus
=
ref
(
false
);
// 右侧选择图片按钮组
const
SelectImageGroup
=
ref
({});
// 上传策略
const
StrategyConfig
=
ref
({});
const
AdminData
=
reactive
({
list
:
[],
// 回调图片列表
callback_list
:
[],
callback_list
:
[
'http://11'
,
'http://11'
,
'http://11'
,
'http://11'
],
/**
* 模特生成状态
* loading-生成中
* success-结束
*/
status
:
'
success
'
,
status
:
''
,
/**
* 当前显示的模块
* 1--模特生成
...
...
@@ -152,6 +152,8 @@ const AdminData = reactive({
reset_num
:
1
,
});
const
scenario_id
=
ref
();
//当前prompt
const
current_prompt
=
ref
(
''
);
// 元素高度和页面高度比较
const
getElementHeight
=
()
=>
{
if
(
GenerationBox
.
value
)
{
...
...
@@ -168,8 +170,6 @@ const getAdminComponent = async () => {
// 取id
scenario_id
.
value
=
res
.
data
.
id
;
let
list
=
res
.
data
.
form
;
// 测试用的数据
list
=
FormExample3
;
if
(
list
.
length
)
{
// 修改数据
list
.
forEach
((
item
:
any
)
=>
{
...
...
@@ -198,6 +198,10 @@ const getAdminComponent = async () => {
if
(
!
it
.
value
)
{
it
.
value
=
''
;
}
if
(
it
.
name
==
'select_image'
)
{
// 将列表传给右侧模块
SelectImageGroup
.
value
=
it
;
}
});
});
}
else
{
...
...
@@ -234,6 +238,24 @@ watch(
}
}
);
// 提交模特
const
SubmitModel
=
async
(
index
:
number
)
=>
{
const
url
=
SelectImageGroup
.
value
.
tool_url
;
if
(
!
url
)
{
show_message
(
'tool_url empty'
);
}
let
params
:
any
=
{};
params
.
prompt
=
current_prompt
.
value
;
const
newIndex
=
parseInt
(
index
+
''
)
-
1
;
params
.
url
=
AdminData
.
callback_list
[
newIndex
];
try
{
// 提交
const
res
:
any
=
await
useRequest
(
'post'
,
url
,
params
);
console
.
log
(
res
);
}
catch
(
e
)
{
console
.
log
(
e
);
}
};
// 获取图片回调
const
ImageCallback
=
async
(
uuid
:
string
)
=>
{
try
{
...
...
@@ -247,10 +269,7 @@ const ImageCallback = async (uuid: string) => {
if
(
res
.
data
.
image
.
length
>
AdminData
.
callback_list
.
length
)
{
AdminData
.
callback_list
=
res
.
data
.
image
;
}
if
(
res
.
data
.
image
.
length
==
4
||
res
.
data
.
image
.
length
==
CurSubmitNum
.
value
)
{
if
(
res
.
data
.
image
.
length
==
4
)
{
// 关闭定时器
closeInterval
();
}
...
...
@@ -300,10 +319,10 @@ const onSubmit = async (params: any) => {
parameters
:
params
,
});
if
(
res
.
code
==
0
)
{
// 记录本次提交的数量
CurSubmitNum
.
value
=
params
.
number
;
// 开启定时器
openInterval
(
res
.
data
.
uuid
);
// 保存prompt
current_prompt
.
value
=
res
.
data
.
prompt
;
AdminData
.
status
=
'loading'
;
}
console
.
log
(
res
);
...
...
src/pages/ModelTemplate/index.vue
View file @
db714491
...
...
@@ -48,11 +48,19 @@
></CustomInput>
</
template
>
<
template
v-else-if=
"it.component_type == 'select_model'"
>
<SelectModel
<!-- -->
<SelectModelDialog
v-model=
"it.dialog_visible"
:label=
"it.label"
:dialog_title=
"it.dialog_title"
:placeholder=
"it.placeholder"
:tool_url=
"it.tool_url"
@
SubmitModel=
"SubmitModel"
></SelectModel>
></SelectModelDialog>
</
template
>
<
template
v-else-if=
"it.component_type == 'button'"
>
<CustomResetButton
width=
"48%"
>
{{
it
.
label
}}
</CustomResetButton>
</
template
>
<
template
v-else-if=
"it.component_type == 'local_upload'"
>
<LocalUpload
@
SubmitImg=
"SubmitImg"
></LocalUpload>
...
...
@@ -96,9 +104,9 @@ import CustomSelect from '@/components/custom/Select.vue';
import
CustomTextArea
from
'@/components/custom/textarea.vue'
;
import
CustomInput
from
'@/components/custom/input/index.vue'
;
import
CustomResetButton
from
'@/components/custom/resetbutton.vue'
;
import
SelectModel
from
'@/components/custom/SelectModel.vue'
;
import
CustomGenerateResult
from
'./components/GenerateResult'
;
import
LocalUpload
from
'@/components/custom/LocalUpload.vue'
;
import
SelectModelDialog
from
'@/components/custom/SelectModelDialog.vue'
;
import
{
nextTick
,
onBeforeMount
,
...
...
@@ -173,7 +181,6 @@ const getAdminComponent = async () => {
// 取id
scenario_id
.
value
=
res
.
data
.
id
;
let
list
=
res
.
data
.
form
;
list
=
FormExample4
;
if
(
list
.
length
)
{
// 修改数据
list
.
forEach
((
item
:
any
)
=>
{
...
...
@@ -196,6 +203,8 @@ const getAdminComponent = async () => {
it
.
component_type
=
'select_model'
;
}
else
if
(
it
.
type
==
'local_upload'
)
{
it
.
component_type
=
'local_upload'
;
}
else
if
(
it
.
type
==
'button'
)
{
it
.
component_type
=
'button'
;
}
// 判断value的值
if
(
!
it
.
value
)
{
...
...
src/utils/OutsideRequest.ts
0 → 100644
View file @
db714491
import
axios
from
'axios'
;
import
{
MessagePlugin
}
from
'tdesign-vue-next'
;
const
instance
=
axios
.
create
({
timeout
:
6000000
,
// withCredentials: mode == 'development' ? false : true,
withCredentials
:
false
,
});
// 请求头
instance
.
interceptors
.
request
.
use
((
config
:
any
)
=>
{
return
config
;
});
instance
.
interceptors
.
response
.
use
(
(
response
)
=>
{
const
{
data
}
=
response
;
if
(
data
.
code
===
0
)
{
return
data
;
}
else
{
MessagePlugin
.
error
(
data
.
msg
||
'请求错误'
);
return
Promise
.
reject
(
data
.
msg
);
}
},
(
err
)
=>
{
console
.
log
(
err
);
if
(
'response'
in
err
)
{
const
{
message
:
msg
}
=
err
.
response
.
data
;
MessagePlugin
.
error
(
msg
||
'请求错误'
);
return
err
.
response
;
}
}
);
export
default
instance
;
src/utils/api/Task.ts
View file @
db714491
...
...
@@ -207,12 +207,10 @@ export const FormExample2 = [
placeholder
:
'详细描述产品细节,生成的文案更加完美。'
,
options
:
[
{
size
:
'1600x1600'
,
label
:
'亚马逊产品图尺寸'
,
value
:
'1600x1600'
,
},
{
size
:
'600x180'
,
label
:
'亚马逊a+主图'
,
value
:
'600x180'
,
},
...
...
@@ -325,15 +323,17 @@ export const FormExample4 = [
name
:
'模特样式'
,
lists
:
[
{
// 选择模特
// 选择模特
弹窗
type
:
'select_model'
,
name
:
'model_1'
,
label
:
'
模特样式
'
,
value
:
null
,
label
:
'
选择模特
'
,
value
:
''
,
span
:
24
,
tool_url
:
'http://ai-gpt.test/api/users/photo/search'
,
dialog_title
:
'请选择一个模特'
,
placeholder
:
'输入模特性别、区域、服装类别 “例如:女模特、亚洲、连衣裙”'
,
tool_url
:
''
,
dialog_visible
:
false
,
rules
:
[
{
type
:
'required'
,
...
...
@@ -341,6 +341,17 @@ export const FormExample4 = [
},
],
},
{
// 跳转到生成页面
type
:
'button'
,
name
:
'model_2'
,
label
:
'模特生成'
,
value
:
''
,
span
:
24
,
tool_url
:
''
,
dialog_title
:
'请选择一个模特'
,
rules
:
[],
},
],
},
// 图片尺寸
...
...
@@ -357,12 +368,10 @@ export const FormExample4 = [
placeholder
:
'详细描述产品细节,生成的文案更加完美。'
,
options
:
[
{
size
:
'1600x1600'
,
label
:
'亚马逊产品图尺寸'
,
value
:
'1600x1600'
,
},
{
size
:
'600x180'
,
label
:
'亚马逊a+主图'
,
value
:
'600x180'
,
},
...
...
src/utils/http/http.ts
View file @
db714491
import
{
RequestMethodResponse
}
from
'tdesign-vue-next'
;
import
{
v4
}
from
'uuid'
;
import
request
from
'@/utils/otherRequest'
;
import
request2
from
'@/utils/OutsideRequest'
;
import
{
getUserCookie
}
from
'../api/userApi'
;
/**
* 可复用的http请求
...
...
@@ -53,3 +55,30 @@ export const UploadImageToAly = (config: any, file: File) => {
},
1000
);
});
};
// 请求外部链接
export
const
useRequest
=
(
type
:
'get'
|
'post'
,
url
:
string
,
data
:
any
,
needToken
:
boolean
=
true
)
=>
{
if
(
type
==
'get'
)
{
return
request2
.
get
(
url
,
{
params
:
data
,
headers
:
needToken
?
{
authorization
:
`Bearer
${
getUserCookie
()}
`
,
}
:
{},
});
}
else
if
(
type
==
'post'
)
{
return
request2
.
post
(
url
,
data
,
{
headers
:
needToken
?
{
authorization
:
`Bearer
${
getUserCookie
()}
`
,
}
:
{},
});
}
};
vite.config.ts
View file @
db714491
...
...
@@ -13,7 +13,7 @@ export default defineConfig(({ mode }) => {
const
newDate
=
`
${
date
.
getFullYear
()}
-
${
date
.
getMonth
()
+
1
}
-
${
date
.
getDate
()}
--
${
date
.
getHours
()}
.
${
date
.
getMinutes
()}
`
;
const
api
=
1
?
'http://45.207.61.22:91'
:
'http://ai-gpt.test'
;
const
api
=
0
?
'http://45.207.61.22:91'
:
'http://ai-gpt.test'
;
return
{
base
:
'/'
,
resolve
:
{
...
...
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