diff --git a/apps/FrontendDesigner/.env.development b/apps/FrontendDesigner/.env.development
index 5cd5fd5..c5413b7 100644
--- a/apps/FrontendDesigner/.env.development
+++ b/apps/FrontendDesigner/.env.development
@@ -1,4 +1,24 @@
-# 开发环境配置
+# 生产环境配置
VITE_BASE_URL=/api
-VITE_DEV_MODE=true
-VITE_LOG_LEVEL=info
\ No newline at end of file
+VITE_PROJECTTYPE=admin
+# Vercel 部署环境变量配置示例
+# 复制此文件为 .env.local 并填入实际值
+
+# Google AI API Key(用于 AI 功能)
+VITE_GOOGLE_API_KEY=your_google_api_key_here
+
+
+# Stripe 支付配置
+VITE_STRIPE_PUBLISHABLE_KEY=pk_test_your_stripe_publishable_key
+
+# 应用配置
+VITE_APP_TITLE=DeotalandAI
+VITE_APP_DESCRIPTION=AI-Powered Creation Platform
+
+# 开发环境配置
+VITE_DEV_MODE=false
+VITE_LOG_LEVEL=error
+
+# 生产环境配置(在 Vercel 中设置)
+# NODE_ENV=production
+# VERCEL=true
\ No newline at end of file
diff --git a/apps/FrontendDesigner/.env.example b/apps/FrontendDesigner/.env.production
similarity index 58%
rename from apps/FrontendDesigner/.env.example
rename to apps/FrontendDesigner/.env.production
index 7d859f1..1789adf 100644
--- a/apps/FrontendDesigner/.env.example
+++ b/apps/FrontendDesigner/.env.production
@@ -1,11 +1,12 @@
-# 生产环境配置
-VITE_BASE_URL=https://api.deotaland.ai
-# Vercel 部署环境变量配置示例
-# 复制此文件为 .env.local 并填入实际值
-
+# 开发环境变量配置
# Google AI API Key(用于 AI 功能)
VITE_GOOGLE_API_KEY=your_google_api_key_here
+VITE_PROJECTTYPE=admin
+# 基础API地址(生产环境)
+VITE_BASE_URL=https://api.deotaland.ai
+# 基础API地址(备用)
+VITE_APP_BASE_API=https://api.deotaland.ai
# Stripe 支付配置
VITE_STRIPE_PUBLISHABLE_KEY=pk_test_your_stripe_publishable_key
@@ -15,9 +16,5 @@ VITE_APP_TITLE=DeotalandAI
VITE_APP_DESCRIPTION=AI-Powered Creation Platform
# 开发环境配置
-VITE_DEV_MODE=false
-VITE_LOG_LEVEL=error
-
-# 生产环境配置(在 Vercel 中设置)
-# NODE_ENV=production
-# VERCEL=true
\ No newline at end of file
+VITE_DEV_MODE=true
+VITE_LOG_LEVEL=debug
\ No newline at end of file
diff --git a/apps/FrontendDesigner/src/App.vue b/apps/FrontendDesigner/src/App.vue
index db947b3..84ffbc2 100644
--- a/apps/FrontendDesigner/src/App.vue
+++ b/apps/FrontendDesigner/src/App.vue
@@ -151,6 +151,11 @@ onUnmounted(() => {
\ No newline at end of file
diff --git a/apps/FrontendDesigner/src/views/admin/AdminDisassemblyDetail/AdminDisassemblyDetail.js b/apps/FrontendDesigner/src/views/admin/AdminDisassemblyDetail/AdminDisassemblyDetail.js
index f374616..294beb0 100644
--- a/apps/FrontendDesigner/src/views/admin/AdminDisassemblyDetail/AdminDisassemblyDetail.js
+++ b/apps/FrontendDesigner/src/views/admin/AdminDisassemblyDetail/AdminDisassemblyDetail.js
@@ -4,9 +4,9 @@ export class AdminDisassemblyDetail {
constructor() {
}
//拆件
- async disassemble(imgurl,callback,errorCallback) {
+ async disassemble(imgurl,callback,errorCallback,config) {
try{
- const result = await gimiServer.handleGenerateImage(imgurl, prompt.Hairseparation)
+ const result = await gimiServer.handleGenerateImage(imgurl, prompt.Hairseparation,config)
console.log('resultresult',result);
callback(result)
}catch(error){
diff --git a/apps/FrontendDesigner/src/views/admin/AdminDisassemblyDetail/AdminDisassemblyDetail.vue b/apps/FrontendDesigner/src/views/admin/AdminDisassemblyDetail/AdminDisassemblyDetail.vue
index dc68526..83ae8a9 100644
--- a/apps/FrontendDesigner/src/views/admin/AdminDisassemblyDetail/AdminDisassemblyDetail.vue
+++ b/apps/FrontendDesigner/src/views/admin/AdminDisassemblyDetail/AdminDisassemblyDetail.vue
@@ -39,9 +39,9 @@
-
+
{{ $t('admin.disassemblyOrders.detail.preview') }}
@@ -84,8 +84,8 @@
{{ $t('admin.disassemblyOrders.detail.disassembly') }}
@@ -152,22 +152,25 @@
saveModel(index,result)"
:show-delete="true"
@delete="deleteModel(index)"
/>
模型 {{ index + 1 }}
-
+
-
@@ -230,7 +233,7 @@
-
+ -->
@@ -276,9 +279,10 @@
@@ -497,6 +439,7 @@ onMounted(() => {
padding: 8px 12px;
white-space: nowrap;
vertical-align: middle;
+ text-align: center !important;
}
.disassembly-table :deep(.el-table__row) {
@@ -513,7 +456,7 @@ onMounted(() => {
font-weight: 600;
border-bottom: 2px solid #e5e7eb;
white-space: nowrap !important;
- text-align: center;
+ text-align: center !important;
text-overflow: ellipsis;
overflow: hidden;
}
@@ -523,6 +466,15 @@ onMounted(() => {
word-break: keep-all;
overflow: hidden;
text-overflow: ellipsis;
+ text-align: center !important;
+}
+
+/* 表格内容居中 */
+.disassembly-table :deep(.el-table__body td .cell) {
+ text-align: center !important;
+ display: flex;
+ align-items: center;
+ justify-content: center;
}
/* 操作按钮容器 */
@@ -531,13 +483,26 @@ onMounted(() => {
gap: 6px;
flex-wrap: nowrap;
align-items: center;
- justify-content: flex-start;
+ justify-content: center;
overflow: hidden;
}
.actions-container .el-button {
flex-shrink: 0;
white-space: nowrap;
+ min-width: 80px;
+}
+
+/* 完成拆件按钮样式 */
+.actions-container .el-button--success {
+ background: linear-gradient(135deg, #10b981 0%, #059669 100%);
+ border: none;
+ transition: all 0.3s ease;
+}
+
+.actions-container .el-button--success:hover {
+ transform: translateY(-2px);
+ box-shadow: 0 4px 12px rgba(16, 185, 129, 0.4);
}
/* 分页样式 */
@@ -595,6 +560,19 @@ onMounted(() => {
.disassembly-table :deep(.el-table) {
min-width: 800px;
}
+
+ /* 移动端操作按钮适配 */
+ .actions-container {
+ flex-direction: column;
+ gap: 8px;
+ align-items: stretch;
+ }
+
+ .actions-container .el-button {
+ width: 100%;
+ min-width: auto;
+ margin: 0;
+ }
}
@media (min-width: 769px) and (max-width: 1024px) {
diff --git a/apps/FrontendDesigner/src/views/admin/AdminOrders/AdminOrders.js b/apps/FrontendDesigner/src/views/admin/AdminOrders/AdminOrders.js
new file mode 100644
index 0000000..a3512f6
--- /dev/null
+++ b/apps/FrontendDesigner/src/views/admin/AdminOrders/AdminOrders.js
@@ -0,0 +1,73 @@
+import { adminApi,requestUtils} from '@deotaland/utils';
+
+export class AdminOrders {
+ constructor() {
+ // 初始化防抖函数
+ this.debouncedSaveProgress = this.createDebouncedSaveProgress();
+ }
+
+ /**
+ * 创建防抖的保存进度函数
+ * 防止频繁调用API,延迟1秒执行
+ */
+ createDebouncedSaveProgress() {
+ let timeout;
+ return (params) => {
+ return new Promise((resolve, reject) => {
+ clearTimeout(timeout);
+ timeout = setTimeout(async () => {
+ try {
+ const result = await requestUtils.common(adminApi.default.updateOrderStatus, params);
+ resolve(result);
+ } catch (error) {
+ reject(error);
+ }
+ }, 1000); // 1秒防抖延迟
+ });
+ };
+ }
+ //获取订单详情
+ getOrderDetail(params){
+ return requestUtils.common(adminApi.default.getOrderDetailt,params);
+ }
+ //获取订单列表
+ getOrderList(params){
+ return requestUtils.common(adminApi.default.getOrderList,params);
+ }
+ //同意退款
+ refundApprove(params){
+ return requestUtils.common(adminApi.default.refundApprove,params);
+ }
+ //拒绝退款
+ refundReject(params){
+ return requestUtils.common(adminApi.default.refundReject,params);
+ }
+ //同意/拒绝订单
+ updateOrderStatus(type=0,audit_reject_reason='',data){//0未通过,1已通过
+ let params = {
+ id:data.id,
+ order_status:type==0?1:2
+ }
+ if(audit_reject_reason&&type==0){
+ params.audit_reject_reason = audit_reject_reason;
+ }
+ return requestUtils.common(adminApi.default.updateOrderStatus,params);
+ }
+ //完成拆件
+ completeDisassembly(data){
+ let params = {
+ order_status:3,
+ id:data.id
+ }
+ return requestUtils.common(adminApi.default.updateOrderStatus,params);
+ }
+ //订单统计
+ getOrderStatistics(){
+ return requestUtils.common(adminApi.default.getOrderStatistics);
+ }
+ //保存拆件进度(带防抖功能)
+ saveDisassemblyProgress(params){
+ // 使用防抖函数来避免频繁调用API
+ return this.debouncedSaveProgress(params);
+ }
+}
\ No newline at end of file
diff --git a/apps/FrontendDesigner/src/views/admin/AdminOrders.vue b/apps/FrontendDesigner/src/views/admin/AdminOrders/AdminOrders.vue
similarity index 57%
rename from apps/FrontendDesigner/src/views/admin/AdminOrders.vue
rename to apps/FrontendDesigner/src/views/admin/AdminOrders/AdminOrders.vue
index 37fb73d..a4d8eec 100644
--- a/apps/FrontendDesigner/src/views/admin/AdminOrders.vue
+++ b/apps/FrontendDesigner/src/views/admin/AdminOrders/AdminOrders.vue
@@ -37,7 +37,7 @@