diff --git a/apps/FrontendDesigner/src/components/admin/AdminLayout.vue b/apps/FrontendDesigner/src/components/admin/AdminLayout.vue index 731c761..e394f4c 100644 --- a/apps/FrontendDesigner/src/components/admin/AdminLayout.vue +++ b/apps/FrontendDesigner/src/components/admin/AdminLayout.vue @@ -269,10 +269,10 @@ const handleUserAction = async (command) => { localStorage.removeItem('user') localStorage.removeItem('permissionButtonList') localStorage.removeItem('permissionRouter') - router.push('/login') - setTimeout(() => { - window.location.reload(); - }, 50); + router.replace('/login') + // setTimeout(() => { + // window.location.reload(); + // }, 50); }) break } diff --git a/apps/FrontendDesigner/src/locales/lang/en-US.js b/apps/FrontendDesigner/src/locales/lang/en-US.js index a471746..8f8d2d0 100644 --- a/apps/FrontendDesigner/src/locales/lang/en-US.js +++ b/apps/FrontendDesigner/src/locales/lang/en-US.js @@ -23,7 +23,12 @@ export default { all: 'All', operation:'Operation', }, - + greetingCard: { + cancelButton: 'Cancel', + exportButton: 'Export', + greetingCard: 'Greeting Card', + exportSuccess: 'Export Successful', + }, // Shop Management shop: { pleaseEnterAddress: 'Please enter address', @@ -602,6 +607,7 @@ export default { dateRange: 'Date Range', orderNumber: 'Order Number', customer: 'Customer', + series: 'Series', total: 'Total Amount', payment: 'Payment Method', date: 'Order Date', @@ -636,6 +642,7 @@ export default { logisticsStatus: 'Logistics Status', currentLocation: 'Current Location', noLogisticsData: 'No logistics data available', + previewCard: 'Preview Card', stats: { total: 'Total Orders', pending: 'Pending', @@ -1040,6 +1047,8 @@ export default { productName: 'Product Name', enterProductName: 'Enter Product Name', productImage: 'Product Image', + mark: 'Mark', + enterMark: 'Enter Product Mark', imageUploadTip: 'Support JPG, PNG, GIF format, max size 5MB', imageTypeError: 'Please upload image file only', imageSizeError: 'Image size cannot exceed 5MB', diff --git a/apps/FrontendDesigner/src/locales/lang/zh-CN.js b/apps/FrontendDesigner/src/locales/lang/zh-CN.js index a8e8b5b..6493b6f 100644 --- a/apps/FrontendDesigner/src/locales/lang/zh-CN.js +++ b/apps/FrontendDesigner/src/locales/lang/zh-CN.js @@ -1,5 +1,11 @@ // 中文语言包 export default { + greetingCard: { + cancelButton: '取消', + exportButton: '导出', + greetingCard: '贺卡', + exportSuccess: '导出成功', + }, orderManagement: { title: '订单', description: '查看和管理您的购买和订阅信息', @@ -454,6 +460,7 @@ orderManagement: { dateRange: '日期范围', orderNumber: '订单号', customer: '客户', + series: '系列', total: '总金额', payment: '支付方式', date: '下单日期', @@ -488,6 +495,7 @@ orderManagement: { logisticsStatus: '物流状态', currentLocation: '当前位置', noLogisticsData: '暂无物流信息', + previewCard: '预览贺卡', stats: { total: '总订单', pending: '待处理', @@ -893,6 +901,8 @@ orderManagement: { productName: '产品名称', enterProductName: '请输入产品名称', productImage: '产品图片', + mark: '标识', + enterMark: '请输入产品标识', imageUploadTip: '支持JPG、PNG、GIF格式,最大5MB', imageTypeError: '请上传图片文件', imageSizeError: '图片大小不能超过5MB', diff --git a/apps/FrontendDesigner/src/router/index.js b/apps/FrontendDesigner/src/router/index.js index 194a3d6..9c0e83c 100644 --- a/apps/FrontendDesigner/src/router/index.js +++ b/apps/FrontendDesigner/src/router/index.js @@ -328,7 +328,6 @@ const routes = [ requiresAuth: true }, children: [ - { path: 'disassembly-orders/:id', name: 'AdminDisassemblyDetail', diff --git a/apps/FrontendDesigner/src/stores/index.js b/apps/FrontendDesigner/src/stores/index.js index bf6fe9e..c3dea89 100644 --- a/apps/FrontendDesigner/src/stores/index.js +++ b/apps/FrontendDesigner/src/stores/index.js @@ -12,6 +12,7 @@ export const useAuthStore = defineStore('auth', { router: null, routesUpdated: 0,//路由更新次数 routerList: window.location.hostname.indexOf('local') === -1 ? [] : permissionRoutes,//侧边栏路由 + // routerList:[],//侧边栏路由 }), getters: { diff --git a/apps/FrontendDesigner/src/views/AdminLogin/AdminLogin.vue b/apps/FrontendDesigner/src/views/AdminLogin/AdminLogin.vue index e8f3056..7f6a2ff 100644 --- a/apps/FrontendDesigner/src/views/AdminLogin/AdminLogin.vue +++ b/apps/FrontendDesigner/src/views/AdminLogin/AdminLogin.vue @@ -155,7 +155,7 @@ const handleLogin = async () => { let data = response.data; authStore.login(data,()=>{ window.location.reload(); - // router.push('/admin') + // router.replace('/') }) } catch (error) { ElMessage.error(t('admin.login.loginFailed')) diff --git a/apps/FrontendDesigner/src/views/admin/AdminOrders/AdminOrders.vue b/apps/FrontendDesigner/src/views/admin/AdminOrders/AdminOrders.vue index 3d83969..8f8c396 100644 --- a/apps/FrontendDesigner/src/views/admin/AdminOrders/AdminOrders.vue +++ b/apps/FrontendDesigner/src/views/admin/AdminOrders/AdminOrders.vue @@ -124,6 +124,11 @@ {{ (row?.order_info?.shipping?.firstName || '-')+(row?.order_info?.shipping?.lastName || '-') }} + + + @@ -492,7 +516,13 @@ import { } from '@element-plus/icons-vue' import { ElMessage, ElMessageBox } from 'element-plus' import {AdminOrders} from './AdminOrders' - +const previewVisible = ref(false) +const currentPreviewCard = ref({ + imageUrl: '', + message: '', + cardMessage: '', + id: '' +}) // 物流服务实例 const logisticsService = new LogistIcsService() const adminOrders = new AdminOrders() @@ -542,6 +572,15 @@ const handleDisassemble = (order) => { params: { id: order.id } }) } + +// 预览贺卡 - 仅A1系列显示 +const handlePreviewCard = (order) => { + currentPreviewCard.value.imageUrl = order?.order_info?.greetingCard?.imageUrl || '' + currentPreviewCard.value.message = order?.order_info?.greetingCard?.message || '' + currentPreviewCard.value.cardMessage = order?.order_info?.greetingCard?.cardMessage || '' + currentPreviewCard.value.id = order?.order_info?.greetingCard?.id || '' + previewVisible.value = true +} // 发货表单 const shippingForm = reactive({ trackingNo: '', diff --git a/apps/FrontendDesigner/src/views/admin/AdminRoleManagement/AdminUserList.vue b/apps/FrontendDesigner/src/views/admin/AdminRoleManagement/AdminUserList.vue index d4e69ed..88eca06 100644 --- a/apps/FrontendDesigner/src/views/admin/AdminRoleManagement/AdminUserList.vue +++ b/apps/FrontendDesigner/src/views/admin/AdminRoleManagement/AdminUserList.vue @@ -117,7 +117,7 @@ - + @@ -261,7 +261,7 @@ const userFormRules = reactive({ ], email: [ { required: true, message: t('admin.userList.emailRequired'), trigger: 'blur' }, - { type: 'email', message: t('admin.userList.emailFormat'), trigger: 'blur' } + { message: t('admin.userList.emailFormat'), trigger: 'blur' } ], password: [ { required: true, message: t('admin.userList.passwordRequired'), trigger: 'blur' }, diff --git a/apps/FrontendDesigner/src/views/admin/AdminRoleManagement/index.js b/apps/FrontendDesigner/src/views/admin/AdminRoleManagement/index.js index 7b6825c..57df434 100644 --- a/apps/FrontendDesigner/src/views/admin/AdminRoleManagement/index.js +++ b/apps/FrontendDesigner/src/views/admin/AdminRoleManagement/index.js @@ -314,7 +314,12 @@ export class AdminRoleManagement { userId: data.id, newPassword: data.newPassword } - return requestUtils.common(adminApi.default.resetAdminUserPassword, params); + const requestUrl = { + method: adminApi.default.resetAdminUserPassword.method, + url: adminApi.default.resetAdminUserPassword.url.replace('{userId}', data.id)+'?newPassword='+data.newPassword, + isLoading: adminApi.default.resetAdminUserPassword.isLoading + } + return requestUtils.common(requestUrl, params); } //根据用户ID查询管理员用户详情 async getAdminUserDetail(data) { diff --git a/apps/FrontendDesigner/src/views/admin/ProductManagement/ProductManagement.vue b/apps/FrontendDesigner/src/views/admin/ProductManagement/ProductManagement.vue index 71e49c9..086facb 100644 --- a/apps/FrontendDesigner/src/views/admin/ProductManagement/ProductManagement.vue +++ b/apps/FrontendDesigner/src/views/admin/ProductManagement/ProductManagement.vue @@ -143,6 +143,13 @@ + + + + { amount: 0, currency: 'USD', current_price_id: '', - image: '' + image: '', + mark: '' } dialogVisible.value = true } @@ -381,7 +390,8 @@ const showEditDialog = async (product) => { amount: product.amount, currency: product.currency, current_price_id: product.current_price_id || '', - image: response.product_info?.image || '' + image: response.product_info?.image || '', + mark: response.product_info?.mark || '' } dialogVisible.value = true } diff --git a/apps/FrontendDesigner/src/views/admin/ProductManagement/index.js b/apps/FrontendDesigner/src/views/admin/ProductManagement/index.js index cf3462a..770fe88 100644 --- a/apps/FrontendDesigner/src/views/admin/ProductManagement/index.js +++ b/apps/FrontendDesigner/src/views/admin/ProductManagement/index.js @@ -9,6 +9,7 @@ export class ProductManagement { currency: data.currency,//货币类型,默认USD product_info:{ image:data.image,//产品图片 + mark:data.mark,//产品标识 } } return await requestUtils.common(adminApi.default.createProduct, params); @@ -39,6 +40,7 @@ export class ProductManagement { "current_price_id": data.current_price_id,//当前价格ID product_info:{ image:data.image,//产品图片 + mark:data.mark,//产品标识 } } return await requestUtils.common(adminApi.default.updateProduct, params); diff --git a/apps/frontend/package.json b/apps/frontend/package.json index 0f56056..c53d75c 100644 --- a/apps/frontend/package.json +++ b/apps/frontend/package.json @@ -29,7 +29,6 @@ "country-state-city": "^3.2.1", "dayjs": "^1.11.13", "element-plus": "^2.11.7", - "html2canvas": "^1.4.1", "install": "^0.13.0", "jose": "^6.1.1", "motion-v": "^1.7.4", @@ -37,7 +36,6 @@ "nprogress": "^0.2.0", "pinia": "^3.0.4", "pinia-plugin-persistedstate": "^4.7.1", - "qrcode": "^1.5.4", "three": "^0.180.0", "twind": "^0.16.19", "vue": "^3.5.24", diff --git a/apps/frontend/src/App.vue b/apps/frontend/src/App.vue index 17ab19a..ac847f1 100644 --- a/apps/frontend/src/App.vue +++ b/apps/frontend/src/App.vue @@ -101,6 +101,13 @@ onMounted(() => { \ No newline at end of file diff --git a/packages/ui/src/index.js b/packages/ui/src/index.js index 00a95de..c9889f7 100644 --- a/packages/ui/src/index.js +++ b/packages/ui/src/index.js @@ -1,10 +1,10 @@ import 'element-plus/dist/index.css' +import './style.css' // UI组件库入口文件 import LoadingCom from './components/LoadingCom/index.vue' +import CardPreview from './components/CardPreview/CardPreview.vue' import CanvasEditor from './components/CanvasEditor/CanvasEditor.vue' -import './style.css' - // 创建带有Dt前缀的组件 const DtLoadingCom = { ...LoadingCom, @@ -20,17 +20,26 @@ const DtCanvasEditor = { app.component('DtCanvasEditor', DtCanvasEditor) } } +const DtCardPreview = { + ...CardPreview, + name: 'DtCardPreview', + install(app) { + app.component('DtCardPreview', DtCardPreview) + } +} // 组件列表 const components = [ DtLoadingCom, - DtCanvasEditor + DtCanvasEditor, + DtCardPreview ] // 导出组件 export { DtLoadingCom, - DtCanvasEditor + DtCanvasEditor, + DtCardPreview } // 批量注册组件的函数 diff --git a/packages/ui/vite.config.js b/packages/ui/vite.config.js index be9450e..975f928 100644 --- a/packages/ui/vite.config.js +++ b/packages/ui/vite.config.js @@ -1,8 +1,6 @@ import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import { resolve } from 'path' -import { fileURLToPath, URL } from 'node:url' - export default defineConfig({ plugins: [vue()], build: { diff --git a/packages/utils/src/api/frontend/greetingCard.js b/packages/utils/src/api/frontend/greetingCard.js new file mode 100644 index 0000000..6be56e9 --- /dev/null +++ b/packages/utils/src/api/frontend/greetingCard.js @@ -0,0 +1,9 @@ +const greetingCardApi = { + GENERATE_IMAGE:{url:'/api-core/front/gemini/generate-image',method:'POST',isLoading: true,},// 生图模型任务创建 + CREATE_GREETING_CARD:{url:'/api-base/greeting-card',method:'POST',isLoading: true,},// 创建贺卡 + UPDATE_GREETING_CARD:{url:'/api-base/greeting-card/update',method:'POST',isLoading: true,},// 更新贺卡 + DELETE_GREETING_CARD:{url:'/api-base/greeting-card/delete/{id}',method:'POST',isLoading: true,},// 删除贺卡 + GET_GREETING_CARD_DETAIL:{url:'/api-base/greeting-card/public/{id}',method:'GET',isLoading: true,},// 查询贺卡详情 + GET_MY_GREETING_CARD_LIST:{url:'/api-base/greeting-card/my-list',method:'GET',isLoading: true,},// 查询我的贺卡列表 +} +export default greetingCardApi; diff --git a/packages/utils/src/api/frontend/index.js b/packages/utils/src/api/frontend/index.js index 989c582..fc12678 100644 --- a/packages/utils/src/api/frontend/index.js +++ b/packages/utils/src/api/frontend/index.js @@ -11,6 +11,7 @@ import rechargeconfig from './rechargeconfig.js'; import voucher from './voucher.js'; import shop from './shop.js'; import agreement from './agreement.js'; +import greetingCard from './greetingCard.js'; export default { ...meshy, ...login, @@ -25,4 +26,5 @@ export default { ...voucher, ...shop, ...agreement, + ...greetingCard, }; \ No newline at end of file diff --git a/packages/utils/src/servers/meshyserver.js b/packages/utils/src/servers/meshyserver.js index fc94409..8f21f9c 100644 --- a/packages/utils/src/servers/meshyserver.js +++ b/packages/utils/src/servers/meshyserver.js @@ -45,9 +45,8 @@ export class MeshyServer extends FileServer { ai_model: 'latest', enable_pbr: false, should_remesh: false, - should_texture: false,//是否生成纹理 + should_texture: false, save_pre_remeshed_model: true, - // target_polycount:300000, ...config } } diff --git a/packages/utils/src/utils/request.js b/packages/utils/src/utils/request.js index d8d95ce..12135b4 100644 --- a/packages/utils/src/utils/request.js +++ b/packages/utils/src/utils/request.js @@ -17,7 +17,7 @@ const getEnvBaseURL = () => { // } var baseURL = ''; const hostname = window.location.hostname; - if(hostname=='localhost'||hostname=='192.168.101.2'){ + if(hostname=='localhost'||hostname=='192.168.0.146'){ baseURL = '/api' }else if(hostname.indexOf('deotaland.ai')>-1||hostname.indexOf('deota.cn')>-1){ baseURL = 'https://api.deotaland.ai' diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b74583a..b996bb5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -177,9 +177,6 @@ importers: element-plus: specifier: ^2.11.7 version: 2.11.7(vue@3.5.24) - html2canvas: - specifier: ^1.4.1 - version: 1.4.1 install: specifier: ^0.13.0 version: 0.13.0 @@ -201,9 +198,6 @@ importers: pinia-plugin-persistedstate: specifier: ^4.7.1 version: 4.7.1(pinia@3.0.4) - qrcode: - specifier: ^1.5.4 - version: 1.5.4 three: specifier: ^0.180.0 version: 0.180.0 @@ -280,9 +274,18 @@ importers: packages/ui: dependencies: + dom-to-image-more: + specifier: ^3.7.2 + version: 3.7.2 element-plus: specifier: ^2.0.0 version: 2.11.7(vue@3.5.24) + html2canvas: + specifier: ^1.4.1 + version: 1.4.1 + qrcode: + specifier: ^1.5.4 + version: 1.5.4 vue: specifier: ^3.0.0 version: 3.5.24 @@ -2242,6 +2245,10 @@ packages: entities: 2.2.0 dev: false + /dom-to-image-more@3.7.2: + resolution: {integrity: sha512-uQf+pHv6eQhgfI8t2bFuinV0KsPyT8TZgCLwcSU8uBVgN9v6leb0mMpvp6HQAlAcplP3NCcGjxbdqef6pTzvmw==} + dev: false + /dom7@3.0.0: resolution: {integrity: sha512-oNlcUdHsC4zb7Msx7JN3K0Nro1dzJ48knvBOnDPKJ2GV9wl1i5vydJZUSyOfrkKFDZEud/jBsTk92S/VGSAe/g==} dependencies: