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 @@ Loading
-
{{ title }}
+
+ {{ text }} +
+
@@ -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 @@
-
- -
-