diff --git a/src/assets/css/style.css b/src/assets/css/style.css index b27916f..d3b349a 100644 --- a/src/assets/css/style.css +++ b/src/assets/css/style.css @@ -20,6 +20,10 @@ button.sandblasted-blurred::after { } button.sandblasted-blurred::before { backdrop-filter: blur(9.5rem); + -webkit-backdrop-filter: blur(9.5rem); + -moz-backdrop-filter: blur(9.5rem); + -ms-backdrop-filter: blur(9.5rem); + -o-backdrop-filter: blur(9.5rem); } button.sandblasted-blurred::after { opacity: 0.1; diff --git a/src/assets/css/style.less b/src/assets/css/style.less index 11dcf72..9e08bce 100644 --- a/src/assets/css/style.less +++ b/src/assets/css/style.less @@ -22,6 +22,10 @@ button.sandblasted-blurred { &::before { backdrop-filter: blur(9.5rem); + -webkit-backdrop-filter: blur(9.5rem); + -moz-backdrop-filter: blur(9.5rem); + -ms-backdrop-filter: blur(9.5rem); + -o-backdrop-filter: blur(9.5rem); } &::after { diff --git a/src/stores/modules/generate.ts b/src/stores/modules/generate.ts index 183d34f..bb3e41a 100644 --- a/src/stores/modules/generate.ts +++ b/src/stores/modules/generate.ts @@ -1,6 +1,7 @@ // 每一个存储的模块,命名规则use开头,store结尾 import { defineStore } from 'pinia' import MyEvent from '@/utils/myEvent' +import { uploadCustomerPhoto } from '@/api/workshop' MyEvent.add('clear-generate-state', () => useGenerateStore().clearGenerateData()) export const useGenerateStore = defineStore({ @@ -32,6 +33,9 @@ export const useGenerateStore = defineStore({ /** AI魔改信息 */ customizeInfo: { inputText: '', + count: 0, + oldInputText: '', + oldTryOnId: '', tryOnId: '', tryOnUrl: '', @@ -108,12 +112,18 @@ export const useGenerateStore = defineStore({ /** 清空 AI魔改信息 */ clearCustomizeInfo() { this.customizeInfo.inputText = '' + this.customizeInfo.count = 0 this.customizeInfo.tryOnId = '' this.customizeInfo.tryOnUrl = '' this.customizeInfo.styleUrl = '' this.customizeInfo.isRegenerated = '' this.customizeInfo.isFavorite = false }, + uploadCustomizeInfo(data: object){ + for (const key in data) { + this.customizeInfo[key] = data[key] + } + }, clearCustomerInfo(){ this.customerInfo = { customerId: '', diff --git a/src/utils/request.ts b/src/utils/request.ts index 8b25c6f..e047ce9 100644 --- a/src/utils/request.ts +++ b/src/utils/request.ts @@ -89,8 +89,7 @@ service.interceptors.response.use( position: 'top', icon: 'none' }) - - return Promise.reject(new Error('error')) + return Promise.reject(new Error(res.errMsg || res.message || 'error')) } else { // 默认只返回data,不返回状态码和message // 通过 meta 中的 responseAll 配置来取决后台是否返回所有数据(包括状态码,message和data) diff --git a/src/utils/tools.ts b/src/utils/tools.ts index 0f81fc0..69b2286 100644 --- a/src/utils/tools.ts +++ b/src/utils/tools.ts @@ -108,7 +108,7 @@ export function FormatDate(value: Date | number | string, format: string = 'yyyy * @param onError 下载错误回调 * @param onSuccess 下载成功回调 */ -export async function DownloadImages(list: Array<{ url: string, name: string }>, onProgress?: (count: number, total: number, item: any) => void, onError?: (count: number, total: number, item: any) => void, onSuccess?: (successCount: number, errCount: number) => void) { +export async function DownloadImages(list: Array<{ url: string, name?: string }>, onProgress?: (count: number, total: number, item: any) => void, onError?: (count: number, total: number, item: any) => void, onSuccess?: (successCount: number, errCount: number) => void) { const total = list.length; let count = 0; let successCount = 0; @@ -124,7 +124,7 @@ export async function DownloadImages(list: Array<{ url: string, name: string }>, const blob = this.response; const a = document.createElement('a'); a.href = URL.createObjectURL(blob); - a.download = list[i].name || list[i].url; + a.download = list[i].name || list[i].url.split('/').pop().split('?').shift(); a.click(); successCount++; typeof onProgress === "function" && onProgress(count, total, list[i]); diff --git a/src/views/Workshop/creation/creation-details.vue b/src/views/Workshop/creation/creation-details.vue index 5810ae8..6057d36 100644 --- a/src/views/Workshop/creation/creation-details.vue +++ b/src/views/Workshop/creation/creation-details.vue @@ -4,15 +4,12 @@ import { DownloadImages } from '@/utils/tools' const router = useRouter() const query = computed(() => router.currentRoute.value.query) - const styleUrl = computed(() => query.value.styleUrl) + const styleUrl = computed(() => query.value.styleUrl as string) onMounted(() => {}) const loading = ref(false) const onDownload = () => { - DownloadImages([{ - url: styleUrl.value, - name: 'lane-crawford.png' - }]) + DownloadImages([{ url: styleUrl.value }]) } const onEdit = () => { console.log('edit') diff --git a/src/views/Workshop/creation/creation-list.vue b/src/views/Workshop/creation/creation-list.vue index 26ada1e..ba31482 100644 --- a/src/views/Workshop/creation/creation-list.vue +++ b/src/views/Workshop/creation/creation-list.vue @@ -13,7 +13,7 @@ const router = useRouter() const emit = defineEmits(['view-type']) const query = computed(() => router.currentRoute.value.query) - const visitRecordId = computed(() => query.value.visitRecordId) + const visitRecordId = computed(() => query.value.visitRecordId)// 访问记录ID import { useGenerateStore } from '@/stores' const generateStore = useGenerateStore() @@ -85,11 +85,7 @@ if (v.loading) return v.loading = true v.selected = false - const obj = { - url: v.tryOnUrl, - name: v.tryOnUrl.split('/').pop() - } - DownloadImages([obj], null, null, () => { + DownloadImages([{ url: v.tryOnUrl }], null, null, () => { v.loading = false v.downloaded = true }) @@ -114,8 +110,7 @@ v.loading = true downloadList.push({ index: i, - url: v.tryOnUrl, - name: v.tryOnUrl.split('/').pop() + url: v.tryOnUrl }) } }) @@ -223,7 +218,7 @@ // justify-content: space-around; .item { width: 47%; - height: 52.9rem; + height: 62.2rem; // overflow: hidden; border-radius: var(--border-radius); background-color: #fff; @@ -233,7 +228,7 @@ > img { width: 100%; height: 100%; - object-fit: contain; + object-fit: cover; border-radius: var(--border-radius); } > .corner { diff --git a/src/views/Workshop/customize.vue b/src/views/Workshop/customize.vue index 672b124..3e0115b 100644 --- a/src/views/Workshop/customize.vue +++ b/src/views/Workshop/customize.vue @@ -25,25 +25,29 @@ // console.log('发送消息:', text) } const onReload = () => { + customizeInfo.inputText = customizeInfo.oldInputText + generate("reload") customizeInfo.inputText = '' - generate() } // 生成结果 - const generate = () => { + 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: generateStore.originalTryOnId, + originalTryOnId: type === "reload" ? customizeInfo.oldTryOnId : generateStore.originalTryOnId, isRegenerated: 1, prompt: customizeInfo.inputText } - if (generateStore.customerPhotoId) data["customerPhotoId"] = generateStore.customerPhotoId + if (generateStore.customerPhotoId && customizeInfo.count === 0) data["customerPhotoId"] = generateStore.customerPhotoId loading.value = true generateTryOnEffect(data) .then((res:any) => { + customizeInfo.count++ customizeInfo.tryOnId = res.tryOnId customizeInfo.tryOnUrl = res.tryOnUrl customizeInfo.styleUrl = res.styleUrl @@ -113,7 +117,7 @@