diff --git a/.env.production b/.env.production index d66e1fb..38c6a8d 100644 --- a/.env.production +++ b/.env.production @@ -1,6 +1,6 @@ NODE_ENV=production VITE_APP_PREVIEW=false -VITE_APP_API_BASE_URL=https://wechat.api.puabadge.com/web/ -VITE_APP_API_URL=https://wechat.api.puabadge.com/web/ -VITE_APP_API_WX_URL=https://wechat.api.puabadge.com/web/ -WECHAT_AUTH_URL=https://wechat.api.puabadge.com/api/auth/page \ No newline at end of file +VITE_APP_API_BASE_URL=https://shop.api.suwa3d.com/api/web/ +VITE_APP_API_URL=https://shop.api.suwa3d.com/api/web/ +VITE_APP_API_WX_URL=https://shop.api.suwa3d.com/api/web/ +WECHAT_AUTH_URL=https://shop.api.suwa3d.com/api/auth/page \ No newline at end of file diff --git a/components.d.ts b/components.d.ts index b4f54b9..d47b30b 100644 --- a/components.d.ts +++ b/components.d.ts @@ -13,11 +13,16 @@ declare module '@vue/runtime-core' { Backup: typeof import('./src/components/arFrame/backup.vue')['default'] Backup2: typeof import('./src/components/arFrame/backup2.vue')['default'] Brand: typeof import('./src/components/brand/index.vue')['default'] + ElAlert: typeof import('element-plus/es')['ElAlert'] ElButton: typeof import('element-plus/es')['ElButton'] + ElDialog: typeof import('element-plus/es')['ElDialog'] ElIcon: typeof import('element-plus/es')['ElIcon'] + ElImage: typeof import('element-plus/es')['ElImage'] ElInput: typeof import('element-plus/es')['ElInput'] ElRadioButton: typeof import('element-plus/es')['ElRadioButton'] ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup'] + ElTabPane: typeof import('element-plus/es')['ElTabPane'] + ElTabs: typeof import('element-plus/es')['ElTabs'] Gsplat: typeof import('./src/components/arFrame/gsplat.vue')['default'] Hint: typeof import('./src/components/hint/hint.vue')['default'] Loading: typeof import('./src/components/loading/index.vue')['default'] @@ -27,11 +32,11 @@ declare module '@vue/runtime-core' { Tensorflow: typeof import('./src/components/arFrame/tensorflow.vue')['default'] VanActionSheet: typeof import('vant/es')['ActionSheet'] VanAddressEdit: typeof import('vant/es')['AddressEdit'] - VanButton: typeof import('vant/es')['Button'] VanDivider: typeof import('vant/es')['Divider'] - VanField: typeof import('vant/es')['Field'] VanIcon: typeof import('vant/es')['Icon'] VanList: typeof import('vant/es')['List'] + VanLoading: typeof import('vant/es')['Loading'] + VanOverlay: typeof import('vant/es')['Overlay'] VanPullRefresh: typeof import('vant/es')['PullRefresh'] VanStepper: typeof import('vant/es')['Stepper'] VanUploader: typeof import('vant/es')['Uploader'] diff --git a/src/api/badge.ts b/src/api/badge.ts index ebd4ae7..1cbe5fe 100644 --- a/src/api/badge.ts +++ b/src/api/badge.ts @@ -162,7 +162,39 @@ export const getMultiUrl = (params: any) => { // 获取坐骑列表 export const getMountsList = (params: any) => { - return request('products/mountsList', { + return request('cartoon/mountsList', { + method: 'GET', + params, + }) +} + +// 生成多视图数据 +export const generateViews = (data: any) => { + return request('views/generateViews', { + method: 'POST', + data, + }) +} + +// 多视图列表 +export const listViews = (params: any) => { + return request('views/listViews', { + method: 'GET', + params, + }) +} + +// 水平翻转图片 +export const flipViews = (params: any) => { + return request('views/flipViews', { + method: 'GET', + params, + }) +} + +// 确认后视图 +export const confirmViews = (params: any) => { + return request('views/confirmViews', { method: 'GET', params, }) diff --git a/src/assets/badge/1.png b/src/assets/badge/1.png deleted file mode 100644 index aa1bbfc..0000000 Binary files a/src/assets/badge/1.png and /dev/null differ diff --git a/src/assets/badge/2.png b/src/assets/badge/2.png deleted file mode 100644 index df7ec8a..0000000 Binary files a/src/assets/badge/2.png and /dev/null differ diff --git a/src/assets/badge/3.png b/src/assets/badge/3.png deleted file mode 100644 index adf2d0f..0000000 Binary files a/src/assets/badge/3.png and /dev/null differ diff --git a/src/assets/badge/4.png b/src/assets/badge/4.png deleted file mode 100644 index 7506caa..0000000 Binary files a/src/assets/badge/4.png and /dev/null differ diff --git a/src/assets/badge/fanzhuan.png b/src/assets/badge/fanzhuan.png new file mode 100644 index 0000000..c700fb0 Binary files /dev/null and b/src/assets/badge/fanzhuan.png differ diff --git a/src/assets/badge/shili.png b/src/assets/badge/shili.png new file mode 100644 index 0000000..8b2254e Binary files /dev/null and b/src/assets/badge/shili.png differ diff --git a/src/assets/badge/wenjian.png b/src/assets/badge/wenjian.png new file mode 100644 index 0000000..4bd89f2 Binary files /dev/null and b/src/assets/badge/wenjian.png differ diff --git a/src/config/cartoon.ts b/src/config/cartoon.ts index b7ed2fd..c135a2e 100644 --- a/src/config/cartoon.ts +++ b/src/config/cartoon.ts @@ -110,7 +110,7 @@ export const cartoonConfig = { }, spacing: { pagePadding: '16px', - sectionMargin: '16px', + sectionMargin: '8px', itemGap: '8px' } }, diff --git a/src/lang/data/en.ts b/src/lang/data/en.ts index cfa71ab..f1e324a 100644 --- a/src/lang/data/en.ts +++ b/src/lang/data/en.ts @@ -158,5 +158,50 @@ const en = { "请输入背面文字": "Please enter back text", "请输入顶部文字": "Please enter top text", "请输入底部文字": "Please enter bottom text", + "坐骑类型": "Ride Type", + "智能生成": "Smart Generation", + "自定义": "Custom", + "请选择坐骑类型": "Please select ride type", + "场景道具": "Scene Props", + "请输入场景道具": "Please enter scene props", + "手办摇摇乐": "Shake Toy", + "手办挂饰": "Handheld Pendant", + "场景手办": "Scene Figure", + "A款底座": "A Base", + "B款底座": "B Base", + "C款底座": "C Base", + "D款底座": "D Base", + "E款底座": "E Base", + "F款底座": "F Base", + "后视图": "Rear View", + "多主体手办下单前需先生成正确的后视图": "Multi-subject figures require generating the correct rear view before placing an order", + "请输入提示词,描述需要生成的后视图要求": "Please enter a prompt describing the requirements for generating the rear view", + "编辑": "Edit", + "生成后视图": "Generate Rear View", + "预设提示词": "Preset Prompt", + "请等待前一张后视图生成完成": "Please wait for the previous rear view to finish generating", + "订单ID不能为空": "Order ID cannot be empty", + "后视图生成提交成功": "Rear view generation submitted successfully", + "生成后视图提交失败,请重试": "Failed to submit rear view generation, please try again", + "镜像处理成功": "Mirror processing successful", + "镜像处理失败": "Mirror processing failed", + "请先选择后视图": "Please select a rear view first", + "后视图确认成功": "Rear view confirmed successfully", + "后视图确认失败": "Rear view confirmation failed", + "请输入后视图提示词": "Please enter rear view prompt", + "请输入后视图提示词,描述需要生成的后视图要求": "Please enter a rear view prompt describing the requirements for generating the rear view", + "选择预设提示词": "Select Preset Prompt", + "提示词": "Prompt", + "暂无预设提示词": "No preset prompts available", + "取消": "Cancel", + "后视图要求": "Rear View Requirements", + "1. 后视图应与前视图保持角色和动作的一致性": "1. The rear view should maintain character and action consistency with the front view", + "2. 模型需要水平旋转180度": "2. The model needs to be rotated 180 degrees horizontally", + "3. 确保后视图清晰可见,无明显遮挡": "3. Ensure the rear view is clear and visible with no obvious obstructions", + "4. 后视图应展示角色的背面特征": "4. The rear view should display the character's back features", + "镜像": "Mirror", + "选择": "Select", + "镜像处理": "Mirror Processing", + "确认选择后视图": "Confirm Rear View Selection", } export default en \ No newline at end of file diff --git a/src/lang/data/ko.ts b/src/lang/data/ko.ts index 852f3f5..955a0dd 100644 --- a/src/lang/data/ko.ts +++ b/src/lang/data/ko.ts @@ -158,5 +158,50 @@ const ko = { "请输入背面文字": "뒷면 텍스트를 입력하세요", "请输入顶部文字": "상단 텍스트를 입력하세요", "请输入底部文字": "하단 텍스트를 입력하세요", + "坐骑类型": "좌석 유형", + "智能生成": "스마트 생성", + "自定义": "사용자 정의", + "请选择坐骑类型": "좌석 유형을 선택하세요", + "场景道具": "장소 도구", + "请输入场景道具": "장소 도구를 입력하세요", + "手办摇摇乐": "피규어 흔들림", + "手办挂饰": "피규어 걸이", + "场景手办": "장소 피규어", + "A款底座": "A 베이스", + "B款底座": "B 베이스", + "C款底座": "C 베이스", + "D款底座": "D 베이스", + "E款底座": "E 베이스", + "F款底座": "F 베이스", + "后视图": "후면 뷰", + "多主体手办下单前需先生成正确的后视图": "다중 주체 피규어는 주문 전에 올바른 후면 뷰를 먼저 생성해야 합니다", + "请输入提示词,描述需要生成的后视图要求": "후면 뷰 생성 요구사항을 설명하는 프롬프트를 입력하세요", + "编辑": "편집", + "生成后视图": "후면 뷰 생성", + "预设提示词": "사전 설정 프롬프트", + "请等待前一张后视图生成完成": "이전 후면 뷰 생성이 완료될 때까지 기다려주세요", + "订单ID不能为空": "주문 ID는 비어 있을 수 없습니다", + "后视图生成提交成功": "후면 뷰 생성 제출 성공", + "生成后视图提交失败,请重试": "후면 뷰 생성 제출 실패, 다시 시도해주세요", + "镜像处理成功": "미러 처리 성공", + "镜像处理失败": "미러 처리 실패", + "请先选择后视图": "먼저 후면 뷰를 선택하세요", + "后视图确认成功": "후면 뷰 확인 성공", + "后视图确认失败": "후면 뷰 확인 실패", + "请输入后视图提示词": "후면 뷰 프롬프트를 입력하세요", + "请输入后视图提示词,描述需要生成的后视图要求": "생성할 후면 뷰 요구사항을 설명하는 후면 뷰 프롬프트를 입력하세요", + "选择预设提示词": "사전 설정 프롬프트 선택", + "提示词": "프롬프트", + "暂无预设提示词": "사전 설정 프롬프트 없음", + "取消": "취소", + "后视图要求": "후면 뷰 요구사항", + "1. 后视图应与前视图保持角色和动作的一致性": "1. 후면 뷰는 전면 뷰와 캐릭터 및 동작의 일관성을 유지해야 합니다", + "2. 模型需要水平旋转180度": "2. 모델은 수평으로 180도 회전해야 합니다", + "3. 确保后视图清晰可见,无明显遮挡": "3. 후면 뷰가 명확하고 보이며 명백한 가림이 없어야 합니다", + "4. 后视图应展示角色的背面特征": "4. 후면 뷰는 캐릭터의 뒷면 특징을 보여줘야 합니다", + "镜像": "미러", + "选择": "선택", + "镜像处理": "미러 처리", + "确认选择后视图": "후면 뷰 선택 확인", } export default ko \ No newline at end of file diff --git a/src/lang/data/zh-CN.ts b/src/lang/data/zh-CN.ts index 3d6af2c..c845fad 100644 --- a/src/lang/data/zh-CN.ts +++ b/src/lang/data/zh-CN.ts @@ -158,5 +158,53 @@ const zhCN = { "请输入背面文字": "请输入背面文字", "请输入顶部文字": "请输入顶部文字", "请输入底部文字": "请输入底部文字", + "坐骑类型": "坐骑类型", + "智能生成": "智能生成", + "自定义": "自定义", + "请选择坐骑类型": "请选择坐骑类型", + "场景道具": "场景道具", + "请输入场景道具": "请输入场景道具", + "手办摇摇乐": "手办摇摇乐", + "手办挂饰": "手办挂饰", + "场景手办": "场景手办", + "A款底座": "A款底座", + "B款底座": "B款底座", + "C款底座": "C款底座", + "D款底座": "D款底座", + "E款底座": "E款底座", + "F款底座": "F款底座", + "G款底座": "G款底座", + "H款底座": "H款底座", + "I款底座": "I款底座", + "后视图": "后视图", + "多主体手办下单前需先生成正确的后视图": "多主体手办下单前需先生成正确的后视图", + "请输入提示词,描述需要生成的后视图要求": "请输入提示词,描述需要生成的后视图要求", + "编辑": "编辑", + "生成后视图": "生成后视图", + "预设提示词": "预设提示词", + "请等待前一张后视图生成完成": "请等待前一张后视图生成完成", + "订单ID不能为空": "订单ID不能为空", + "后视图生成提交成功": "后视图生成提交成功", + "生成后视图提交失败,请重试": "生成后视图提交失败,请重试", + "镜像处理成功": "镜像处理成功", + "镜像处理失败": "镜像处理失败", + "请先选择后视图": "请先选择后视图", + "后视图确认成功": "后视图确认成功", + "后视图确认失败": "后视图确认失败", + "请输入后视图提示词": "请输入后视图提示词", + "请输入后视图提示词,描述需要生成的后视图要求": "请输入后视图提示词,描述需要生成的后视图要求", + "选择预设提示词": "选择预设提示词", + "提示词": "提示词", + "暂无预设提示词": "暂无预设提示词", + "取消": "取消", + "后视图要求": "后视图要求", + "1. 后视图应与前视图保持角色和动作的一致性": "1. 后视图应与前视图保持角色和动作的一致性", + "2. 模型需要水平旋转180度": "2. 模型需要水平旋转180度", + "3. 确保后视图清晰可见,无明显遮挡": "3. 确保后视图清晰可见,无明显遮挡", + "4. 后视图应展示角色的背面特征": "4. 后视图应展示角色的背面特征", + "镜像": "镜像", + "选择": "选择", + "镜像处理": "镜像处理", + "确认选择后视图": "确认选择后视图", } export default zhCN \ No newline at end of file diff --git a/src/lang/data/zh-TW.ts b/src/lang/data/zh-TW.ts index b855d36..1f4148d 100644 --- a/src/lang/data/zh-TW.ts +++ b/src/lang/data/zh-TW.ts @@ -158,5 +158,50 @@ const zhCT = { "请输入背面文字": "請輸入背面文字", "请输入顶部文字": "請輸入頂部文字", "请输入底部文字": "請輸入底部文字", + "坐骑类型": "坐騎類型", + "智能生成": "智能生成", + "自定义": "自定義", + "请选择坐骑类型": "請選擇坐騎類型", + "场景道具": "場景道具", + "请输入场景道具": "請輸入場景道具", + "手办摇摇乐": "手辦搖搖樂", + "手办挂饰": "手辦掛飾", + "场景手办": "場景手辦", + "A款底座": "A款底座", + "B款底座": "B款底座", + "C款底座": "C款底座", + "D款底座": "D款底座", + "E款底座": "E款底座", + "F款底座": "F款底座", + "后视图": "後視圖", + "多主体手办下单前需先生成正确的后视图": "多主體手辦下單前需先生成正確的後視圖", + "请输入提示词,描述需要生成的后视图要求": "請輸入提示詞,描述需要生成的後視圖要求", + "编辑": "編輯", + "生成后视图": "生成後視圖", + "预设提示词": "預設提示詞", + "请等待前一张后视图生成完成": "請等待前一張後視圖生成完成", + "订单ID不能为空": "訂單ID不能為空", + "后视图生成提交成功": "後視圖生成提交成功", + "生成后视图提交失败,请重试": "生成後視圖提交失敗,請重試", + "镜像处理成功": "鏡像處理成功", + "镜像处理失败": "鏡像處理失敗", + "请先选择后视图": "請先選擇後視圖", + "后视图确认成功": "後視圖確認成功", + "后视图确认失败": "後視圖確認失敗", + "请输入后视图提示词": "請輸入後視圖提示詞", + "请输入后视图提示词,描述需要生成的后视图要求": "請輸入後視圖提示詞,描述需要生成的後視圖要求", + "选择预设提示词": "選擇預設提示詞", + "提示词": "提示詞", + "暂无预设提示词": "暫無預設提示詞", + "取消": "取消", + "后视图要求": "後視圖要求", + "1. 后视图应与前视图保持角色和动作的一致性": "1. 後視圖應與前視圖保持角色和動作的一致性", + "2. 模型需要水平旋转180度": "2. 模型需要水平旋轉180度", + "3. 确保后视图清晰可见,无明显遮挡": "3. 確保後視圖清晰可見,無明顯遮擋", + "4. 后视图应展示角色的背面特征": "4. 後視圖應展示角色的背面特徵", + "镜像": "鏡像", + "选择": "選擇", + "镜像处理": "鏡像處理", + "确认选择后视图": "確認選擇後視圖", } export default zhCT \ No newline at end of file diff --git a/src/views/cartoon/index.vue b/src/views/cartoon/index.vue index 2d4867f..89bd70b 100644 --- a/src/views/cartoon/index.vue +++ b/src/views/cartoon/index.vue @@ -88,53 +88,6 @@ -
-
-
- - - {{ toValueWithout("照片示例") }} - - -
-
-
- -
-
- -
-
- -
-
- -
-
-
-
-
-
-
-
- + -
-
- {{ toValueWithout("点击上传照片") }} -
-
- *{{ toValueWithout("上传照片时建议勾选[原图]") }} -
-
- -
- -
- -
-
{{ toValueWithout("风格类型") }} @@ -147,7 +100,7 @@
-
+
{{ toValueWithout("多视角参考图") }}
@@ -176,7 +129,7 @@
+
+
+
+
+ + +
+
+ {{ toValueWithout("点击上传照片") }} +
+
+ *{{ toValueWithout("上传照片时建议勾选[原图]") }} +
+
+ +
+ +
+ +
+
@@ -268,11 +243,6 @@ import { toValueWithout } from '@/lang/utils' import { cartoonConfig } from '@/config/cartoon' import leafIcon from '@/assets/badge/leaf.png' import arrowIcon from '@/assets/badge/arrow.png' -import example1 from '@/assets/badge/1.png' -import example2 from '@/assets/badge/2.png' -import example3 from '@/assets/badge/3.png' -import example4 from '@/assets/badge/4.png' -// Element Plus 图标通过组件自动导入,这里使用文本符号作为替代 // 初始化翻译功能 const { t } = useTranslation(); @@ -332,6 +302,7 @@ const typeId = ref(0) const subjectId = ref(0) const typeName = ref('') const subjectName = ref('') +const isViews = ref(0) const getOrderStat = () => { badgeApi.getOrderStat({}).then((res: any) => { orderStat.value = res @@ -341,9 +312,9 @@ const getOrderStat = () => { typeName.value = res.type_name subjectId.value = res.subject_id subjectName.value = res.subject_name - if (res.type_id === 4) { - getKindList() - } else if (res.type_id === 8) { + isViews.value = res.is_views + getKindList() + if (res.type_id === 8) { mountsId.value = 0 getmountsList() } else if (res.type_id === 9) { @@ -361,12 +332,7 @@ const shouldShowPhotoExample = computed(() => { // 计算属性:是否显示风格类型 const shouldShowKindList = computed(() => { - return typeId.value === 4 && kindList.value.length > 0 -}) - -// 计算属性:是否显示多视角参考图 -const shouldShowMultiView = computed(() => { - return typeId.value === 4 && config.productLimits.multiViewSupported.includes(prodId.value) + return kindList.value.length > 0 }) const kindList = ref([]) @@ -403,7 +369,10 @@ const getmountsList = () => { } badgeApi.getMountsList({ prod_id: prodId.value, - type_id: typeId.value + type_id: typeId.value, + status: 1, + page: 1, + size: 1000 }).then((res: any) => { if (res && res.list && res.list.length > 0) { mountsList.value = res.list @@ -645,7 +614,7 @@ const getPid = async () => { sendToOss(imgurl.value, res.url), ] await Promise.all(uploadTasks) - if (shouldShowMultiView.value && referPicture.value.length > 0) { + if (isViews.value == 1 && referPicture.value.length > 0) { const multiUrlTasks = referPicture.value.map((item) => { return badgeApi.getMultiUrl({ pid: pid.value, @@ -1064,7 +1033,7 @@ onMounted(() => { align-items: center; justify-content: flex-start; flex-wrap: wrap; - padding: 16px 36px; + padding: 16px; } .kind-box-item { margin-right: 10px; @@ -1114,7 +1083,7 @@ onMounted(() => { left: 0; width: 100%; height: 100%; - object-fit: cover; + object-fit: contain; border-radius: 8px; transition: transform 0.2s; } diff --git a/src/views/cartoon/previewOrder.vue b/src/views/cartoon/previewOrder.vue index dbd5d02..5e307e9 100644 --- a/src/views/cartoon/previewOrder.vue +++ b/src/views/cartoon/previewOrder.vue @@ -103,9 +103,149 @@
-
+
+
+ {{ toValueWithout("后视图") }} +
+
+

{{ toValueWithout("多主体手办下单前需先生成正确的后视图") }}

+
+ + +
+ + + {{ toValueWithout("编辑") }} + +
+ + +
+ + {{ toValueWithout("生成后视图") }} + + + {{ toValueWithout("预设提示词") }} + +
+ +
+ + +
+ +
+
+ {{ toValueWithout("生成中...") }} +
+
+ + +
+ +
+ + {{ toValueWithout("生成中,请稍后...") }} +
+ +
+ + {{ toValueWithout("镜像") }} + + + {{ toValueWithout("选择") }} + +
+
+
+
+ +
+ + + +
+
+
+
+ + + +
+
+
{{ tip.title || `${toValueWithout('提示词')} ${String(index + 1)}` }}
+
{{ tip.content }}
+
+
+ {{ toValueWithout("暂无预设提示词") }} +
+
+ +
@@ -179,9 +319,9 @@
\ No newline at end of file