This commit is contained in:
李志鹏
2025-11-18 11:40:49 +08:00
parent 4598bce188
commit 42c7fff73a
4 changed files with 72 additions and 39 deletions

View File

@@ -52,18 +52,13 @@ export function generateTryOnEffect(data: Object) {
/**
* 生成试穿效果-演示
* @param data 试穿效果数据
* @param data.customerId 顾客ID
* @param data.visitRecordId 进店记录id
* @param data.styleId 样式id
* @param data.modelPhotoId 模型照片id
* @param data.customerPhotoId 顾客照片id
* @param data.prompt 提示词
* @param data.originalTryOnId 原始试穿效果id
* @param data.isRegenerated 是否重新生成 0-否1-是
* @param data.tryonUrl AI魔改url
*/
export function generateTryOnEffectDemo(data: Object) {
return request({
url: '/api/try-on-effects/reFace/{customerPhotold}o',
url: '/api/try-on-effects/reFace',
method: 'post',
data,
})

View File

@@ -37,32 +37,56 @@
const generate = (type?: 'reload') => {
customizeInfo.oldInputText = customizeInfo.inputText
customizeInfo.oldTryOnId = customizeInfo.tryOnId
const data = {
customerId: generateStore.customerId,
visitRecordId: generateStore.visitRecordId,
styleId: generateStore.styleId,
// modelPhotoId: generateStore.modelPhotoId,
originalTryOnId: type === 'reload' ? customizeInfo.oldTryOnId : generateStore.originalTryOnId,
isRegenerated: 1,
prompt: customizeInfo.inputText
loading.value = true
if (isDemo.value) {
const data = {
prompt: customizeInfo.inputText,
tryonUrl: customizeInfo.tryOnUrl
}
if (generateStore.customerPhotoId && customizeInfo.count === 0) {
data['customerPhotoId'] = generateStore.customerPhotoId
}
generateTryOnEffectDemo(data)
.then((res: any) => {
customizeInfo.count++
// customizeInfo.tryOnId = res.tryOnId
customizeInfo.tryOnUrl = res.tryOnUrl
// customizeInfo.styleUrl = res.styleUrl
// customizeInfo.isRegenerated = res.isRegenerated
// customizeInfo.isFavorite = !!res.isFavorite
loading.value = false
})
.catch((err) => {
console.error(err)
loading.value = false
})
} else {
const data = {
customerId: generateStore.customerId,
visitRecordId: generateStore.visitRecordId,
styleId: generateStore.styleId,
// modelPhotoId: generateStore.modelPhotoId,
originalTryOnId: type === 'reload' ? customizeInfo.oldTryOnId : generateStore.originalTryOnId,
isRegenerated: 1,
prompt: customizeInfo.inputText
}
if (generateStore.customerPhotoId && customizeInfo.count === 0)
data['customerPhotoId'] = generateStore.customerPhotoId
generateTryOnEffect(data)
.then((res: any) => {
customizeInfo.count++
customizeInfo.tryOnId = res.tryOnId
customizeInfo.tryOnUrl = res.tryOnUrl
customizeInfo.styleUrl = res.styleUrl
customizeInfo.isRegenerated = res.isRegenerated
customizeInfo.isFavorite = !!res.isFavorite
loading.value = false
})
.catch((err) => {
console.error(err)
loading.value = false
})
}
if (generateStore.customerPhotoId && customizeInfo.count === 0)
data['customerPhotoId'] = generateStore.customerPhotoId
loading.value = true;
(isDemo.value ? generateTryOnEffectDemo : generateTryOnEffect)(data)
.then((res: any) => {
customizeInfo.count++
customizeInfo.tryOnId = res.tryOnId
customizeInfo.tryOnUrl = res.tryOnUrl
customizeInfo.styleUrl = res.styleUrl
customizeInfo.isRegenerated = res.isRegenerated
customizeInfo.isFavorite = !!res.isFavorite
loading.value = false
})
.catch((err) => {
console.error(err)
loading.value = false
})
}
if (customizeInfo.tryOnId === '') generate()
@@ -96,6 +120,10 @@
router.push({ name: 'creation' })
}
}
// 选择另一个穿搭
const onChooseAnotherOutfit = () => {
router.push({ name: 'SelectStyle' })
}
</script>
<template>
@@ -132,6 +160,8 @@
</div>
</div>
<div class="btns">
<button v-show="!isDemo" @click="onChooseAnotherOutfit">Choose another outfit</button>
<span></span>
<button @click="onFinish">Finish</button>
</div>
</div>
@@ -262,16 +292,18 @@
}
> .btns {
margin-top: 5rem;
width: 100%;
width: 85%;
display: flex;
justify-content: center;
// justify-content: center;
justify-content: space-between;
> button {
box-sizing: content-box;
font-family: satoshiRegular;
// margin: 0 1.8rem;
border: none;
margin: 0 5.2rem 0 auto;
width: 23.8rem;
// margin: 0 5.2rem 0 auto;
min-width: 18rem;
padding: 0 3.5rem;
height: 6.9rem;
border-radius: 1.3rem;
background: #000;

View File

@@ -20,16 +20,18 @@
}
// 跳过上传
const handleFinish = () => {
generateStore.updatePhotoInfo({})
if (!isDemo.value) {
if (isDemo.value) {
handleUploadFace();
} else {
generateStore.updatePhotoInfo({})
generateStore.clearCustomizeInfo()
generateStore.uploadCustomizeInfo({
tryOnId: generateStore.originalTryOn.id,
tryOnUrl: generateStore.originalTryOn.tryOnUrl,
isFavorite: generateStore.originalTryOn.isLike
})
router.push({ name: 'customize', query: query.value })
}
router.push({ name: 'customize', query: query.value })
}
</script>

View File

@@ -22,6 +22,7 @@ import HeaderTitle from '@/components/HeaderTitle.vue'
import FooterNavigation from '@/components/FooterNavigation.vue'
import { ref } from 'vue'
import { useRouter } from 'vue-router'
import { showToast } from 'vant'
import {useUserInfoStore} from '@/stores'
const router = useRouter()
const userInfoStore = useUserInfoStore()
@@ -32,6 +33,9 @@ const options = ref<any[]>([
])
const handleSelect = (value: string) => {
if (value === 'male') {// 男性开发中
return showToast(`This feature is currently under development. Please select the 'Female' option for now.`)
}
const generateParams = userInfoStore.getGenerateParams()
generateParams.sex = value
userInfoStore.setGenerateParams(generateParams)