From 3983f4ad7568112b56fa42650ab2c6df4e4e761d Mon Sep 17 00:00:00 2001 From: 18631081161 <2088094923@qq.com> Date: Sat, 28 Mar 2026 18:30:52 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=90=8E=E5=8F=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- admin/src/api/goldPrice.ts | 12 + admin/src/api/order.ts | 16 +- admin/src/api/product.ts | 4 + admin/src/views/order/OrderList.vue | 456 +++++++++++++++++-- admin/src/views/product/ProductForm.vue | 52 ++- admin/src/views/product/ProductList.vue | 92 +++- admin/src/views/settings/GoldPrice.vue | 105 ++++- server/migrations/002_add_order_source.sql | 2 + server/migrations/003_add_order_returns.sql | 25 + server/migrations/004_add_platinum_price.sql | 6 + server/src/controllers/adminOrder.ts | 214 ++++++++- server/src/controllers/adminProduct.ts | 15 +- server/src/controllers/goldPrice.ts | 116 +++-- server/src/controllers/specDataIO.ts | 229 ++++++++-- server/src/routes/admin.ts | 16 +- 15 files changed, 1185 insertions(+), 175 deletions(-) create mode 100644 server/migrations/002_add_order_source.sql create mode 100644 server/migrations/003_add_order_returns.sql create mode 100644 server/migrations/004_add_platinum_price.sql diff --git a/admin/src/api/goldPrice.ts b/admin/src/api/goldPrice.ts index 84282049..5b164a58 100644 --- a/admin/src/api/goldPrice.ts +++ b/admin/src/api/goldPrice.ts @@ -11,3 +11,15 @@ export function getLatestGoldPrice() { export function setGoldPrice(price: number) { return http.post('/admin/gold-price', { price }) } + +export function getPlatinumPriceLogs() { + return http.get('/admin/platinum-price') +} + +export function getLatestPlatinumPrice() { + return http.get('/admin/platinum-price/latest') +} + +export function setPlatinumPrice(price: number) { + return http.post('/admin/platinum-price', { price }) +} diff --git a/admin/src/api/order.ts b/admin/src/api/order.ts index d8b2819f..76672986 100644 --- a/admin/src/api/order.ts +++ b/admin/src/api/order.ts @@ -10,7 +10,8 @@ export function getOrderDetail(id: number) { export function createOrder(data: { userId: number - items: { productId: number; specDataId: number; quantity: number }[] + source?: string + items: { barcode: string; quantity: number }[] receiverName?: string receiverPhone?: string receiverAddress?: string @@ -40,3 +41,16 @@ export function updateOrderStatus(id: number, data: { }) { return http.put(`/admin/orders/${id}/status`, data) } + +export function returnOrder(id: number, data: { + returnReason: string + refundProof?: string + refundTime?: string + items: { orderItemId: number; quantity: number }[] +}) { + return http.post(`/admin/orders/${id}/return`, data) +} + +export function getOrderReturns(id: number) { + return http.get(`/admin/orders/${id}/returns`) +} diff --git a/admin/src/api/product.ts b/admin/src/api/product.ts index 7a50e212..085363fe 100644 --- a/admin/src/api/product.ts +++ b/admin/src/api/product.ts @@ -55,3 +55,7 @@ export function deleteSpecData(productId: number, specId: number) { export function updateSpecData(productId: number, specId: number, data: any) { return http.put(`/admin/products/${productId}/spec-data/${specId}`, data) } + +export function lookupBarcodes(barcodes: string[]) { + return http.post('/admin/spec-data/lookup', { barcodes }) +} diff --git a/admin/src/views/order/OrderList.vue b/admin/src/views/order/OrderList.vue index 8045c766..625d9097 100644 --- a/admin/src/views/order/OrderList.vue +++ b/admin/src/views/order/OrderList.vue @@ -21,6 +21,7 @@ + @@ -105,6 +106,11 @@ ¥{{ Number(row.total_price).toFixed(2) }} + + + @@ -159,38 +167,111 @@ - + - - - - - - - - - - - - - 商品列表 -
-
- - - - - - - - 删除 -
-
- + 添加商品 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + 商品列表 +
+
+ + 添加 +
+
+ + 导入 CSV + +
+
+ + + + + + + + + + + + + + + + + + + + + +
+ 共 {{ previewItems.length }} 件商品,合计 + + ¥{{ previewItems.reduce((s, i) => s + Number(i.totalPrice) * i.quantity, 0).toFixed(2) }} + +
+
@@ -312,14 +393,126 @@ 确认取消订单
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+ 退货 {{ returnCheckedItems.reduce((s, i) => s + i.returnQty, 0) }} 件,退款金额 + + ¥{{ returnCheckedItems.reduce((s, i) => s + i.returnQty * Number(i.unitPrice), 0).toFixed(2) }} + +
+ + + + + + + + + + 上传凭证 + +
+ +
+
+
+ + + + + +
+
+ + +
+ + + +
+
暂无退货记录
+
+
+
+ 退货 #{{ idx + 1 }} + {{ formatTime(record.created_at) }} +
+
+ 退货原因:{{ record.return_reason }} +
+
+ 退款 ¥{{ Number(record.refund_amount).toFixed(2) }} + 退款时间: {{ formatTime(record.refund_time) }} + +
+ + + + + + + + +
+
+