diff --git a/backend/app/api/endpoints/finance.py b/backend/app/api/endpoints/finance.py index ee6edbb..7ee069f 100644 --- a/backend/app/api/endpoints/finance.py +++ b/backend/app/api/endpoints/finance.py @@ -29,6 +29,30 @@ def summary(): db.close() +@router.get("/plans") +def token_plans(): + db = _session() + try: + return ApiResponse(data=finance_service.list_token_plans(db)) + finally: + db.close() + + +@router.patch("/plans/{plan_id}") +def update_token_plan(plan_id: str, body: dict = Body(...)): + db = _session() + try: + finance_service.update_token_plan( + db, plan_id, amount=int(body.get("amount") or 0), price=float(body.get("price") or 0), + name=str(body.get("name") or ""), badge=str(body.get("badge") or ""), desc=str(body.get("desc") or ""), + ) + return ApiResponse(message="充值套餐已更新") + except (ValueError, FinanceServiceError) as exc: + _raise(exc if isinstance(exc, FinanceServiceError) else FinanceServiceError("积分和价格格式不正确")) + finally: + db.close() + + @router.get("/orders") def orders( page: int = Query(1, ge=1), diff --git a/backend/app/services/finance_service.py b/backend/app/services/finance_service.py index 519629c..479dbc8 100644 --- a/backend/app/services/finance_service.py +++ b/backend/app/services/finance_service.py @@ -28,6 +28,23 @@ def _money(cents): class FinanceService: + @staticmethod + def list_token_plans(db): + rows = db.execute(text('SELECT id,name,amount,price,badge,"desc",virtual_product_id FROM token_plans ORDER BY price ASC')).fetchall() + return [dict(row._mapping) for row in rows] + + @staticmethod + def update_token_plan(db, plan_id: str, *, amount: int, price: float, name: str, badge: str, desc: str): + if amount <= 0 or price < 0 or not name.strip(): + raise FinanceServiceError("套餐名称、正数积分和非负价格不正确") + result = db.execute(text('''UPDATE token_plans SET name=:name,amount=:amount,price=:price,badge=:badge,"desc"=:desc WHERE id=:id'''), { + "id": plan_id, "name": name.strip()[:80], "amount": amount, "price": price, + "badge": badge.strip()[:80], "desc": desc.strip()[:200], + }) + if result.rowcount == 0: + raise FinanceServiceError("充值套餐不存在", 404) + db.commit() + @staticmethod def _tables_ready(db) -> bool: names = { diff --git a/digital-avatar-app/src/views/TokenCharge.vue b/digital-avatar-app/src/views/TokenCharge.vue index 3ef8e3e..1b5fe94 100644 --- a/digital-avatar-app/src/views/TokenCharge.vue +++ b/digital-avatar-app/src/views/TokenCharge.vue @@ -37,29 +37,7 @@ - - 支付方式 - - - - 微信支付 - ✓ - - - - 支付宝 - ✓ - - {{ paymentNotice }} @@ -119,8 +97,6 @@ import { type TokenPaymentOrder } from '@/api' import { isInUniWebView, onNativeMessage } from '@/utils/uniapp-bridge' -import wechatPayIcon from '@/assets/wechat-pay.svg' -import alipayIcon from '@/assets/alipay.svg' const router = useRouter() @@ -141,7 +117,7 @@ const plans = ref(null) // 支付方式 -const paymentMethod = ref<'wechat' | 'alipay'>('wechat') +const paymentMethod = 'wechat' const paymentNotice = ref('') const paymentNoticeTone = ref<'pending' | 'success' | 'error'>('pending') const pendingOrderId = ref(sessionStorage.getItem('hh_pending_payment_order') || '') diff --git a/frontend/src/api/index.js b/frontend/src/api/index.js index ca8c925..c6d3949 100644 --- a/frontend/src/api/index.js +++ b/frontend/src/api/index.js @@ -96,6 +96,8 @@ export const uploadAvatarPhoto = (id, formData) => request.post(`/avatars/${id}/ // Finance (数字分身积分订单) export const getFinanceSummary = () => request.get('/finance/summary') +export const getFinancePlans = () => request.get('/finance/plans') +export const updateFinancePlan = (id, data) => request.patch(`/finance/plans/${id}`, data) export const getFinanceOrders = (params) => request.get('/finance/orders', { params }) export const updateFinanceOrderStatus = (orderNo, data) => request.patch(`/finance/orders/${orderNo}/status`, data) export const requestFinanceRefund = (orderNo, data) => request.post(`/finance/orders/${orderNo}/refund`, data) diff --git a/frontend/src/views/Finance.vue b/frontend/src/views/Finance.vue index c7b718b..d5bc11a 100644 --- a/frontend/src/views/Finance.vue +++ b/frontend/src/views/Finance.vue @@ -16,6 +16,16 @@ + + + + {{ Number(row.amount).toLocaleString() }} + ¥{{ money(row.price) }} + + + 调整 + + @@ -23,13 +33,13 @@ - + 查询 - - {{ row.order_no }}{{ row.user_nickname || '会会用户' }} · {{ row.user_phone || '--' }} + + {{ row.order_no }}支付编号:{{ row.provider_order_no || '--' }}{{ row.user_nickname || '会会用户' }} · {{ row.user_phone || '--' }} {{ Number(row.points_amount || 0).toLocaleString() }} ¥{{ money(row.price) }} @@ -87,25 +97,37 @@ 取消确认开具 + + + + + + + + + 取消保存 +
{{ paymentNotice }}