From 86091b8e40567180c56f68ec8a0396ae7bc2a17a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E5=BF=97=E9=B9=8F?= <2916022834@qq.com>
Date: Thu, 23 Oct 2025 16:41:38 +0800
Subject: [PATCH 1/3] 121
---
src/stores/modules/generate.ts | 17 ++++++++++++-----
src/views/Workshop/customize.vue | 2 +-
2 files changed, 13 insertions(+), 6 deletions(-)
diff --git a/src/stores/modules/generate.ts b/src/stores/modules/generate.ts
index 6da1adc..f728c8a 100644
--- a/src/stores/modules/generate.ts
+++ b/src/stores/modules/generate.ts
@@ -21,11 +21,18 @@ export const useGenerateStore = defineStore({
}
},
getters: {
- customerId: (state) => state.userData.style.id,//顾客id
- visitRecordId: (state) => state.userData.style.id,//进店记录id
- styleId: (state) => state.userData.style.id,//服装id
- modelPhotoId: (state) => state.userData.model.id,//模特照片id
- originalTryOnId: (state) => state.userData.style.id,//原始试穿id
+ /** 顾客id */
+ customerId: (state) => state.userData.style.id,
+ /** 进店记录id */
+ visitRecordId: (state) => state.userData.style.id,
+ /** 服装id */
+ styleId: (state) => state.userData.style.id,
+ /** 模特照片id */
+ modelPhotoId: (state) => state.userData.model.id,
+ /** 原始试穿id */
+ originalTryOnId: (state) => state.userData.style.id,
+ /** 顾客照片id */
+ customerPhotoId: (state) => state.userData.id,
},
actions: {
selectStyle(data: any) {
diff --git a/src/views/Workshop/customize.vue b/src/views/Workshop/customize.vue
index b3a97e7..128d521 100644
--- a/src/views/Workshop/customize.vue
+++ b/src/views/Workshop/customize.vue
@@ -32,7 +32,7 @@
visitRecordId: store.visitRecordId,
styleId: store.styleId,
modelPhotoId: store.modelPhotoId,
- customerPhotoId: store.userData.id,
+ customerPhotoId: store.customerPhotoId,
originalTryOnId: store.originalTryOnId,
isRegenerated: isRegenerated ? 1 : 0,
prompt: inputText.value,
From c1d57f2347f2d09e7a82fe2d754ad78332f83554 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E5=BF=97=E9=B9=8F?= <2916022834@qq.com>
Date: Thu, 23 Oct 2025 17:01:13 +0800
Subject: [PATCH 2/3] 333
---
src/api/workshop.ts | 3 ++-
src/stores/modules/generate.ts | 17 ++++++++++---
src/views/Workshop/customize.vue | 39 +++++++++++++++++-------------
src/views/Workshop/uploadFace2.vue | 9 ++++---
4 files changed, 43 insertions(+), 25 deletions(-)
diff --git a/src/api/workshop.ts b/src/api/workshop.ts
index 52740d3..d644c17 100644
--- a/src/api/workshop.ts
+++ b/src/api/workshop.ts
@@ -6,7 +6,7 @@ const request = (config: any) => {
if (config.loading) useOverallStore().setLoading(true)
setTimeout(() => {
res({})
- if (!config.loading) useOverallStore().setLoading(false)
+ if (config.loading) useOverallStore().setLoading(false)
}, 1000)
})
}
@@ -42,6 +42,7 @@ export function uploadCustomerPhoto(data: FormData) {
url: '/api/customer-photos/upload',
method: 'post',
data,
+ loading: true,
})
}
/**
diff --git a/src/stores/modules/generate.ts b/src/stores/modules/generate.ts
index f728c8a..12010bf 100644
--- a/src/stores/modules/generate.ts
+++ b/src/stores/modules/generate.ts
@@ -17,7 +17,13 @@ export const useGenerateStore = defineStore({
id: -1,
}
},
- queryList: []
+ queryList: [],
+
+ /** 顾客照片信息 */
+ photoInfo: {
+ id: "",
+ url: "",
+ }
}
},
getters: {
@@ -32,7 +38,7 @@ export const useGenerateStore = defineStore({
/** 原始试穿id */
originalTryOnId: (state) => state.userData.style.id,
/** 顾客照片id */
- customerPhotoId: (state) => state.userData.id,
+ customerPhotoId: (state) => state.photoInfo.id,
},
actions: {
selectStyle(data: any) {
@@ -54,6 +60,11 @@ export const useGenerateStore = defineStore({
selectModel(data: any) {
this.userData.model.id = data.id
console.log(this.userData)
- }
+ },
+ /** 更新顾客照片信息 */
+ updatePhotoInfo(data: any) {
+ this.photoInfo.id = data.visitRecordId || ""
+ this.photoInfo.url = data.defaultImageUrl || ""
+ },
}
})
diff --git a/src/views/Workshop/customize.vue b/src/views/Workshop/customize.vue
index 128d521..9f99b4f 100644
--- a/src/views/Workshop/customize.vue
+++ b/src/views/Workshop/customize.vue
@@ -3,7 +3,11 @@
import FooterNavigation from '@/components/FooterNavigation.vue'
import GenerateLoading from '@/views/asistant/components/GenerateLoading.vue'
import { ref, onMounted } from 'vue'
- import { generateTryOnEffect, setTryOnEffectFavorite, cancelTryOnEffectFavorite } from '@/api/workshop'
+ import {
+ generateTryOnEffect,
+ setTryOnEffectFavorite,
+ cancelTryOnEffectFavorite
+ } from '@/api/workshop'
const emit = defineEmits(['viewType'])
import { useRouter } from 'vue-router'
import { useGenerateStore } from '@/stores'
@@ -11,18 +15,19 @@
const router = useRouter()
const inputText = ref('')
- const isLoved = ref(false)
+ const isFavorite = ref(false)
+ const tryOnUrl = ref('')
const loading = ref(false)
const onSend = () => {
if (inputText.value === '') return
- generate();
+ generate()
const text = inputText.value
inputText.value = ''
- console.log('发送消息:', text)
+ // console.log('发送消息:', text)
}
const onReload = () => {
inputText.value = ''
- generate(true);
+ generate(true)
}
// 生成结果
@@ -35,30 +40,30 @@
customerPhotoId: store.customerPhotoId,
originalTryOnId: store.originalTryOnId,
isRegenerated: isRegenerated ? 1 : 0,
- prompt: inputText.value,
-
- };
+ prompt: inputText.value
+ }
loading.value = true
generateTryOnEffect(data)
- .then(res => {
- console.log(res)
+ .then((res) => {
+ tryOnUrl.value = res.tryOnUrl
+ isFavorite.value = !!res.isFavorite
loading.value = false
})
- .catch(err => {
+ .catch((err) => {
console.error(err)
loading.value = false
})
}
- generate();
+ generate()
// 喜欢
const isLoveLoading = ref(false)
const onLove = () => {
if (isLoveLoading.value) return
- const http = isLoved.value ? cancelTryOnEffectFavorite : setTryOnEffectFavorite
+ const http = isFavorite.value ? cancelTryOnEffectFavorite : setTryOnEffectFavorite
isLoveLoading.value = true
- isLoved.value = !isLoved.value
- http("tryOnId")
+ isFavorite.value = !isFavorite.value
+ http('tryOnId')
.then(() => {
isLoveLoading.value = false
})
@@ -96,14 +101,14 @@
-

+
diff --git a/src/views/Workshop/uploadFace2.vue b/src/views/Workshop/uploadFace2.vue
index b0fe7ca..f5a5ca7 100644
--- a/src/views/Workshop/uploadFace2.vue
+++ b/src/views/Workshop/uploadFace2.vue
@@ -4,6 +4,9 @@
import { ref, reactive, onMounted } from 'vue'
import { useRouter } from 'vue-router'
import { uploadCustomerPhoto } from '@/api/workshop'
+ import { useGenerateStore } from '@/stores'
+ const generateStore = useGenerateStore()
+
const emit = defineEmits(['view-type'])
onMounted(() => {
emit('view-type', 1)
@@ -13,13 +16,12 @@
url:"",
file: null,
});
- console.log(fileData)
// 上传照片
const handleUploadFace = () => {
const input = document.createElement('input')
input.type = 'file'
input.accept = 'image/*'
- input.capture = 'camera'
+ // input.capture = 'camera'
input.click()
input.onchange = (e: any) => {
const file = e.target.files[0]
@@ -42,8 +44,7 @@
formData.append('visitRecordId', "1")
formData.append('file', fileData.file)
uploadCustomerPhoto(formData).then(res => {
- console.log(res, res.photoUrl)
-
+ generateStore.updatePhotoInfo(res);
router.push({ name: 'customize' })
})
}
From 9fff109c778588204bc56f5012641683d2f48824 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E5=BF=97=E9=B9=8F?= <2916022834@qq.com>
Date: Fri, 24 Oct 2025 11:47:07 +0800
Subject: [PATCH 3/3] =?UTF-8?q?=E8=AE=BE=E7=BD=AEstore?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/api/workshop.ts | 21 +++++++++++++++++
src/stores/modules/generate.ts | 25 +++++++++++++++++++--
src/views/Workshop/customize.vue | 36 +++++++++++++++++-------------
src/views/Workshop/uploadFace1.vue | 9 ++++++--
src/views/Workshop/uploadFace2.vue | 16 ++++++-------
5 files changed, 79 insertions(+), 28 deletions(-)
diff --git a/src/api/workshop.ts b/src/api/workshop.ts
index d644c17..9b6302d 100644
--- a/src/api/workshop.ts
+++ b/src/api/workshop.ts
@@ -24,6 +24,17 @@ const request = (config: any) => {
* @param data.isRegenerated 是否重新生成 0-否,1-是
*/
export function generateTryOnEffect(data: Object) {
+ return new Promise(resolve => {
+ setTimeout(() => {
+ resolve({
+ tryOnId: 1,
+ tryOnUrl: "http://118.31.39.42:3000/falls/1.png",
+ styleUrl: "http://118.31.39.42:3000/falls/1.png",
+ isRegenerated: 0,
+ isFavorite: 0,
+ })
+ }, 1000)
+ })
return request({
url: '/api/try-on-effects/generate',
method: 'post',
@@ -38,6 +49,16 @@ export function generateTryOnEffect(data: Object) {
* @param data.file 顾客照片文件
*/
export function uploadCustomerPhoto(data: FormData) {
+ return new Promise(resolve => {
+ useOverallStore().setLoading(true)
+ setTimeout(() => {
+ resolve({
+ visitRecordId: "2",
+ defaultImageUrl: URL.createObjectURL(data.get('file')),
+ })
+ useOverallStore().setLoading(false)
+ }, 1000)
+ })
return request({
url: '/api/customer-photos/upload',
method: 'post',
diff --git a/src/stores/modules/generate.ts b/src/stores/modules/generate.ts
index 12010bf..210cdae 100644
--- a/src/stores/modules/generate.ts
+++ b/src/stores/modules/generate.ts
@@ -23,7 +23,18 @@ export const useGenerateStore = defineStore({
photoInfo: {
id: "",
url: "",
- }
+ file: null,
+ },
+ /** AI魔改信息 */
+ customizeInfo: {
+ inputText:"",
+
+ tryOnId: "",
+ tryOnUrl: "",
+ styleUrl: "",
+ isRegenerated: "",
+ isFavorite: false,
+ },
}
},
getters: {
@@ -65,6 +76,16 @@ export const useGenerateStore = defineStore({
updatePhotoInfo(data: any) {
this.photoInfo.id = data.visitRecordId || ""
this.photoInfo.url = data.defaultImageUrl || ""
+ this.photoInfo.file = null
+ },
+ /** 更新AI魔改信息 */
+ clearCustomizeInfo(data: any) {
+ this.customizeInfo.inputText = data.inputText || ""
+ this.customizeInfo.tryOnId = data.tryOnId || ""
+ this.customizeInfo.tryOnUrl = data.tryOnUrl || ""
+ this.customizeInfo.styleUrl = data.styleUrl || ""
+ this.customizeInfo.isRegenerated = data.isRegenerated || ""
+ this.customizeInfo.isFavorite = data.isFavorite || ""
},
}
-})
+})
\ No newline at end of file
diff --git a/src/views/Workshop/customize.vue b/src/views/Workshop/customize.vue
index 9f99b4f..0573bb4 100644
--- a/src/views/Workshop/customize.vue
+++ b/src/views/Workshop/customize.vue
@@ -13,20 +13,19 @@
import { useGenerateStore } from '@/stores'
const store = useGenerateStore()
+ const customizeInfo = store.customizeInfo
const router = useRouter()
- const inputText = ref('')
- const isFavorite = ref(false)
- const tryOnUrl = ref('')
const loading = ref(false)
const onSend = () => {
- if (inputText.value === '') return
+ if (customizeInfo.inputText === '') return
generate()
- const text = inputText.value
- inputText.value = ''
+ customizeInfo.inputText = ''
+ // const text = inputText.value
+ // inputText.value = ''
// console.log('发送消息:', text)
}
const onReload = () => {
- inputText.value = ''
+ customizeInfo.inputText = ''
generate(true)
}
@@ -40,13 +39,16 @@
customerPhotoId: store.customerPhotoId,
originalTryOnId: store.originalTryOnId,
isRegenerated: isRegenerated ? 1 : 0,
- prompt: inputText.value
+ prompt: customizeInfo.inputText
}
loading.value = true
generateTryOnEffect(data)
.then((res) => {
- tryOnUrl.value = res.tryOnUrl
- isFavorite.value = !!res.isFavorite
+ 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) => {
@@ -54,15 +56,15 @@
loading.value = false
})
}
- generate()
+ if (customizeInfo.tryOnId === '') generate()
// 喜欢
const isLoveLoading = ref(false)
const onLove = () => {
if (isLoveLoading.value) return
- const http = isFavorite.value ? cancelTryOnEffectFavorite : setTryOnEffectFavorite
+ const http = customizeInfo.isFavorite ? cancelTryOnEffectFavorite : setTryOnEffectFavorite
+ customizeInfo.isFavorite = !customizeInfo.isFavorite
isLoveLoading.value = true
- isFavorite.value = !isFavorite.value
http('tryOnId')
.then(() => {
isLoveLoading.value = false
@@ -94,21 +96,23 @@
?
-
![]()
+
diff --git a/src/views/Workshop/uploadFace1.vue b/src/views/Workshop/uploadFace1.vue
index d4171a2..996f3e8 100644
--- a/src/views/Workshop/uploadFace1.vue
+++ b/src/views/Workshop/uploadFace1.vue
@@ -3,6 +3,8 @@
import FooterNavigation from '@/components/FooterNavigation.vue'
import { ref, onMounted } from 'vue'
import { useRouter } from 'vue-router'
+ import { useGenerateStore } from '@/stores'
+ const generateStore = useGenerateStore()
const emit = defineEmits(['view-type'])
onMounted(() => {
emit('view-type', 1)
@@ -11,10 +13,13 @@
const faceUrl = ref('')
// 上传照片
const handleUploadFace = () => {
+ generateStore.updatePhotoInfo({})
router.push({ name: 'uploadFace2' })
}
- // 完成上传
+ // 跳过上传
const handleFinish = () => {
+ generateStore.updatePhotoInfo({})
+ generateStore.clearCustomizeInfo({})
router.push({ name: 'customize' })
}
@@ -71,7 +76,7 @@
line-height: 132%;
}
}
- >.btns {
+ > .btns {
width: 100%;
display: flex;
justify-content: center;
diff --git a/src/views/Workshop/uploadFace2.vue b/src/views/Workshop/uploadFace2.vue
index f5a5ca7..6f6cc98 100644
--- a/src/views/Workshop/uploadFace2.vue
+++ b/src/views/Workshop/uploadFace2.vue
@@ -12,10 +12,7 @@
emit('view-type', 1)
})
const router = useRouter()
- const fileData = reactive({
- url:"",
- file: null,
- });
+ const fileData = generateStore.photoInfo
// 上传照片
const handleUploadFace = () => {
const input = document.createElement('input')
@@ -27,6 +24,7 @@
const file = e.target.files[0]
if (!file) return
const url = URL.createObjectURL(file)
+ fileData.id = ''
fileData.url = url
fileData.file = file
// const reader = new FileReader()
@@ -38,13 +36,15 @@
}
// 生成照片
const handleGenerate = () => {
+ if (fileData.id) return router.push({ name: 'customize' })
if (!fileData.file) return
const formData = new FormData()
- formData.append('customerId', "1")
- formData.append('visitRecordId', "1")
+ formData.append('customerId', '1')
+ formData.append('visitRecordId', '1')
formData.append('file', fileData.file)
- uploadCustomerPhoto(formData).then(res => {
- generateStore.updatePhotoInfo(res);
+ uploadCustomerPhoto(formData).then((res) => {
+ generateStore.updatePhotoInfo(res)
+ generateStore.clearCustomizeInfo({})
router.push({ name: 'customize' })
})
}