diff --git a/src/api/workshop.ts b/src/api/workshop.ts
index 1032a94..501407b 100644
--- a/src/api/workshop.ts
+++ b/src/api/workshop.ts
@@ -192,4 +192,39 @@ export function addTryOnEffectComment(data: Object) {
method: 'post',
data,
})
-}
\ No newline at end of file
+}
+
+/**
+ * like outfit接口
+ * @param styleId 设置like的styleid
+*/
+export function setStyleFavorite(styleId: Object) {
+ return request({
+ url: `/api/style/set-favorite/${styleId}`,
+ method: 'post',
+ })
+}
+
+/**
+ * 取消like outfit接口
+ * @param styleId 取消like的styleid
+*/
+export function cancelStyleFavorite(styleId: Object) {
+ return request({
+ url: `/api/style/cancel-favorite/${styleId}`,
+ method: 'post',
+ })
+}
+
+/**
+ * try on 返推outfitId
+ * @param tryOnEffectsId tryOnId
+*/
+export function retrieveAndRegenerate(data: Object) {
+ return request({
+ url: `/api/style/retrieveAndRegenerate`,
+ method: 'get',
+ params: data,
+ })
+}
+
diff --git a/src/assets/icons/reTry.svg b/src/assets/icons/reTry.svg
new file mode 100644
index 0000000..230cd29
--- /dev/null
+++ b/src/assets/icons/reTry.svg
@@ -0,0 +1,9 @@
+
diff --git a/src/components/FooterNavigation.vue b/src/components/FooterNavigation.vue
index f9621a4..b807a97 100644
--- a/src/components/FooterNavigation.vue
+++ b/src/components/FooterNavigation.vue
@@ -25,13 +25,13 @@
})
.then(() => {
MyEvent.emit('clear-generate-state')
- MyEvent.emit('clearAllCache')
+ // MyEvent.emit('clearAllCache')
nav.path && router.push(nav.path)
})
.catch(() => {})
}
const navs = [
- { label: 'Home', icon: 'home', size: 73, path: '/workshop/home' },
+ { label: 'Home', icon: 'home', size: 73, path: '/workshop/home', on: onHome },
{ label: 'Library', icon: 'library', size: 53, path: '/workshop/library' },
// { label: 'Profile', icon: 'profile', size: 55, path: '/workshop/profile' }
]
diff --git a/src/components/gradientButton.vue b/src/components/gradientButton.vue
new file mode 100644
index 0000000..3acfb3a
--- /dev/null
+++ b/src/components/gradientButton.vue
@@ -0,0 +1,58 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/router/index.ts b/src/router/index.ts
index 04c585e..f5ecdf9 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -121,7 +121,7 @@ const router = createRouter({
},
{
path: '/workshop/selectStyle',
- name: 'SelectStyle',
+ name: 'selectStyle',
component: () => import('../views/Workshop/selectStyle.vue'),
meta: { verify: ()=> VerifyIDs(2) }
},
@@ -133,7 +133,7 @@ const router = createRouter({
},
{
path: '/workshop/product',
- name: 'Product',
+ name: 'product',
component: () => import('../views/Workshop/product.vue'),
meta: { verify: ()=> VerifyIDs(4) }
},
diff --git a/src/stores/modules/generate.ts b/src/stores/modules/generate.ts
index 6b50236..72bf0f4 100644
--- a/src/stores/modules/generate.ts
+++ b/src/stores/modules/generate.ts
@@ -9,7 +9,10 @@ export const useGenerateStore = defineStore({
return {
style: {
id: '',
- oldId: '' //表示从生成页面返回回来,需要调整的样式id
+ path: '',
+ taskId:'',
+ isLike: false, //是否喜欢
+ status: ''
},
styleList: [{}, {}, {}, {}],
model: {
@@ -68,7 +71,7 @@ export const useGenerateStore = defineStore({
/** 进店记录id */
visitRecordId: (state) => state.customerInfo.visitRecordId,
/** 服装id */
- styleId: (state) => state.style.id || state.style.oldId,
+ styleId: (state) => state.style.id,
/** 模特照片id */
modelPhotoId: (state) => state.model.id,
/** 原始试穿id不包含魔改id */
@@ -82,23 +85,19 @@ export const useGenerateStore = defineStore({
},
actions: {
selectStyle(data: any) {
- this.style.id = data.id
- },
- //生成后去掉id 设置oldId来修改样式
- useStyleGenerate() {
- if (!this.style.id) return
- this.style.oldId = this.style.id
- // this.style.id = ''
- },
- updateStyle(data) {
- if (data.id == this.style.oldId) {
- this.style.oldId = ''
- }
- if(data.id == this.style.id) {
- this.style.id = ''
+ this.style = {
+ ...data,
}
- console.log(this.style)
},
+ clearStyle() {
+ this.style = {
+ id: '',
+ path: '',
+ isLike: false,
+ taskId:'',
+ status: ''
+ }
+ },
//模特相关
selectModel(data: any) {
this.model.id = data.id
@@ -110,7 +109,10 @@ export const useGenerateStore = defineStore({
this.styleList = [{}, {}, {}, {}]
this.style = {
id: '',
- oldId: ''
+ path: '',
+ isLike: false,
+ taskId:'',
+ status: ''
}
this.model = {
id: ''
diff --git a/src/stores/modules/h_generate.ts b/src/stores/modules/h_generate.ts
index 871bdc8..cbb76b8 100644
--- a/src/stores/modules/h_generate.ts
+++ b/src/stores/modules/h_generate.ts
@@ -60,7 +60,6 @@ export const useHGenerateStore = defineStore({
},
//设置默认数据
clearGenerateData() {
- this.clearProductData()
this.clearCustomizeInfo()
},
}
diff --git a/src/utils/tools.ts b/src/utils/tools.ts
index 65a05ec..eac100e 100644
--- a/src/utils/tools.ts
+++ b/src/utils/tools.ts
@@ -156,4 +156,31 @@ export async function DownloadImages(list: Array<{ url: string, name?: string }>
*/
export function encryptPassword(password: string): string {
return CryptoJS.MD5(password).toString()
+}
+
+/**
+ * 图片分享到WhatsApp
+ * @param url 图片URL
+ * @returns 无
+ */
+export async function shareImageToWhatsapp (url: string){
+ // 把图片 URL 转为 Blob
+ const blob = await fetch(url).then((res) => res.blob())
+
+ // 创建文件对象
+ const file = new File([blob], 'image.jpg', { type: 'image/jpeg' })
+
+ // 判断浏览器是否支持文件分享
+ if (navigator.canShare && navigator.canShare({ files: [file] })) {
+ await navigator.share({
+ files: [file]
+ })
+ } else {
+ // 你可以附加一些自定义文本
+ const message = 'share image ' + url
+
+ // 构造WhatsApp链接
+ const whatsappLink = `https://api.whatsapp.com/send/?text=${encodeURIComponent(message)}`
+ window.open(whatsappLink, '_blank')
+ }
}
\ No newline at end of file
diff --git a/src/views/Workshop/creation/creation-list.vue b/src/views/Workshop/creation/creation-list.vue
index 9e1c179..793a6ad 100644
--- a/src/views/Workshop/creation/creation-list.vue
+++ b/src/views/Workshop/creation/creation-list.vue
@@ -40,6 +40,10 @@
navLst.forEach((v) => {
if (v.flowType === query.value.flowType) navActive.value = v.value
})
+ navLst.forEach((v) => {
+ if (v.flowType === query.value.active) navActive.value = v.value
+ })
+
const clickNav = (v) => {
if (v.value === navActive.value || loading.value) return
navActive.value = v.value
diff --git a/src/views/Workshop/customize.vue b/src/views/Workshop/customize.vue
index 77b2ede..2dd3429 100644
--- a/src/views/Workshop/customize.vue
+++ b/src/views/Workshop/customize.vue
@@ -3,21 +3,21 @@
import { ref, onMounted, computed } from 'vue'
import {
generateTryOnEffect,
- generateTryOnEffectDemo,
setTryOnEffectFavorite,
cancelTryOnEffectFavorite
} from '@/api/workshop'
const emit = defineEmits(['viewType'])
import { useRouter, useRoute } from 'vue-router'
- import { useGenerateStore } from '@/stores'
+ import { useGenerateStore, useHGenerateStore } from '@/stores'
import { FlowType, IsHistoryFlow } from '@/types/enum'
const generateStore = useGenerateStore()
+ const hGenerateStore = useHGenerateStore()
const router = useRouter()
const route = useRoute()
const query = computed(() => route.query)
const isHistoryFlow = computed(() => IsHistoryFlow(query.value.flowType))
const customizeInfo = isHistoryFlow.value
- ? generateStore.customizeInfoDemo
+ ? hGenerateStore.customizeInfo
: generateStore.customizeInfo
const loading = ref(false)
const onSend = () => {
@@ -53,7 +53,7 @@
}
if (isHistoryFlow.value) {
data['originalTryOnId'] =
- type === 'reload' ? customizeInfo.oldTryOnId : generateStore.customizeInfoDemo.tryOnId
+ type === 'reload' ? customizeInfo.oldTryOnId : hGenerateStore.originalTryOnId
} else {
data['styleId'] = generateStore.styleId
data['originalTryOnId'] =
@@ -62,7 +62,7 @@
generateTryOnEffect(data)
.then((res: any) => {
customizeInfo.count++
- customizeInfo.tryOnId = res.tryOnId
+ customizeInfo.tryOnId = res.id
customizeInfo.tryOnUrl = res.tryOnUrl
customizeInfo.styleUrl = res.styleUrl
customizeInfo.isRegenerated = res.isRegenerated
@@ -102,7 +102,11 @@
}
const onFinish = () => {
// router.push({ name: 'creation', query: query.value })
- router.push({ name: 'creation', query: { flowType: FlowType.H_AI } })
+ const query_ = {
+ ...query.value,
+ active: FlowType.H_AI
+ }
+ router.push({ name: 'creation', query: query_ })
// if (isHistoryFlow.value) {
// router.push({ name: 'end' })
// } else {
@@ -280,7 +284,7 @@
}
> .btns {
margin-top: 4rem;
- width: 68%;
+ min-width: 68%;
display: flex;
// justify-content: center;
justify-content: space-between;
diff --git a/src/views/Workshop/homeNav.vue b/src/views/Workshop/homeNav.vue
index 2463de8..e78924b 100644
--- a/src/views/Workshop/homeNav.vue
+++ b/src/views/Workshop/homeNav.vue
@@ -6,8 +6,8 @@ const route = useRoute()
import { showConfirmDialog } from 'vant'
import MyEvent from '@/utils/myEvent'
import { FlowType, IsHistoryFlow } from '@/types/enum'
-import { useGenerateStore } from '@/stores'
-const generateStore = useGenerateStore()
+import { useHGenerateStore } from '@/stores'
+const hGenerateStore = useHGenerateStore()
//const props = defineProps({
@@ -66,13 +66,22 @@ onMounted(()=>{
path: 'uploadFace',
imgPath: new URL('@/assets/images/nav3.png',import.meta.url).href,
flowTypeList: [FlowType.H_TRYON,FlowType.H_AI],
+ click(){
+ hGenerateStore.clearCustomizeInfo()
+ },
},
{
path: 'customize',
imgPath: new URL('@/assets/images/nav4.png',import.meta.url).href,
flowTypeList: [FlowType.H_TRYON,FlowType.H_AI],
click(){
- generateStore.updatePhotoInfo({})
+ hGenerateStore.clearCustomizeInfo()
+ hGenerateStore.uploadCustomizeInfo({
+ tryOnId: hGenerateStore.originalTryOn.id,
+ tryOnUrl: hGenerateStore.originalTryOn.tryOnUrl,
+ isFavorite: hGenerateStore.originalTryOn.isLike,
+ styleUrl: hGenerateStore.style.url,
+ })
},
},
]
diff --git a/src/views/Workshop/product.vue b/src/views/Workshop/product.vue
index bbce885..7b867ce 100644
--- a/src/views/Workshop/product.vue
+++ b/src/views/Workshop/product.vue
@@ -61,7 +61,7 @@ const startGenerate = ()=>{
generateTryOnEffect(value).then((res:any)=>{
data.isLoading = false;
generateStore.originalTryOn.isLike = false
- generateStore.originalTryOn.id = res.tryOnId
+ generateStore.originalTryOn.id = res.id
generateStore.originalTryOn.tryOnUrl = res.tryOnUrl
// generateStore.useStyleGenerate()//生成后需要对选择衣服页面设置不可选中样式
generateStore.setIsGenerate(false)
diff --git a/src/views/Workshop/uploadFace2.vue b/src/views/Workshop/uploadFace2.vue
index d65d254..8099571 100644
--- a/src/views/Workshop/uploadFace2.vue
+++ b/src/views/Workshop/uploadFace2.vue
@@ -2,9 +2,10 @@
import { ref, reactive, onMounted, computed } from 'vue'
import { useRouter, useRoute } from 'vue-router'
import { uploadCustomerPhoto } from '@/api/workshop'
- import { useGenerateStore } from '@/stores'
+ import { useGenerateStore, useHGenerateStore } from '@/stores'
import { IsHistoryFlow } from '@/types/enum'
const generateStore = useGenerateStore()
+ const hGenerateStore = useHGenerateStore()
const emit = defineEmits(['view-type'])
onMounted(() => {
@@ -47,7 +48,7 @@
formData.append('file', fileData.file)
uploadCustomerPhoto(formData).then((res) => {
generateStore.updatePhotoInfo({ ...res, file: fileData.file })
- isHistoryFlow.value ? generateStore.clearCustomizeInfoDemo() : generateStore.clearCustomizeInfo()
+ isHistoryFlow.value ? hGenerateStore.clearCustomizeInfo() : generateStore.clearCustomizeInfo()
router.push({ name: 'customize', query: query.value })
})
}
diff --git a/src/views/asistant/components/GenerateLoading.vue b/src/views/asistant/components/GenerateLoading.vue
index 05c7914..f5871b1 100644
--- a/src/views/asistant/components/GenerateLoading.vue
+++ b/src/views/asistant/components/GenerateLoading.vue
@@ -4,12 +4,19 @@
- {{ title }}
+
@@ -54,6 +131,18 @@ const props = defineProps({
font-size: 4.8rem;
letter-spacing: 0.02em;
line-height: 124%;
+ position: relative;
+}
+
+.loading-dot{
+ height: 100%;
+ aspect-ratio: 1/1;
+ background: radial-gradient(ellipse 150% 150% at center, #ffffff,rgba(255,255,255,.4), transparent);
+ border-radius: 50%;
+ position: absolute;
+ top: 50%;
+ left: 0;
+ transform: translate(-100%, -50%);
}
@keyframes rotate {
diff --git a/src/views/asistant/index.vue b/src/views/asistant/index.vue
index 91dbaa2..2acd0ca 100644
--- a/src/views/asistant/index.vue
+++ b/src/views/asistant/index.vue
@@ -3,11 +3,8 @@
-
-
-
-
-