diff --git a/src/views/AccountView/AccountView.vue b/src/views/AccountView/AccountView.vue index 5b13f81..845a3b2 100644 --- a/src/views/AccountView/AccountView.vue +++ b/src/views/AccountView/AccountView.vue @@ -136,7 +136,9 @@ - +

通信卡充值记录

共 {{ simRechargeTotal }} 条
@@ -144,7 +146,7 @@ - + @@ -227,6 +229,35 @@ 确认修改 + +

ICCID:{{ simRechargeCard?.iccid || '--' }}

+ + +
@@ -262,6 +293,11 @@ const orders = ref([]); const orderTotal = ref(0); const orderPages = ref(1); co const usage = ref([]); const usageTotal = ref(0); const usagePages = ref(1); const usagePageNum = ref(1) const simCards = ref([]); const simTotal = ref(0); const simPages = ref(1); const simPageNum = ref(1) const simRechargeLogs = ref([]); const simRechargeTotal = ref(0); const simRechargePages = ref(1); const simRechargePageNum = ref(1) +const simPackages = ref([]) +const simRechargeOpen = ref(false) +const simRechargeCard = ref(null) +const selectedSimPackageId = ref(0) +const simRecharging = ref(false) const editOpen = ref(false); const saving = ref(false); const editForm = ref({ name: '', email: '' }) const orderColumns = [ @@ -397,6 +433,14 @@ async function loadTrafficPackages() { trafficPackages.value = [] } } +async function loadSimPackages() { + try { + const list = await request.get(urls.SIM_PACKAGES) + simPackages.value = Array.isArray(list) ? list : [] + } catch { + simPackages.value = [] + } +} async function load() { const results = await Promise.allSettled([ loadProfile(), @@ -406,7 +450,8 @@ async function load() { loadSim(), loadDeviceCount(), loadAccountExtensions(), - loadTrafficPackages() + loadTrafficPackages(), + loadSimPackages() ]) if (results.some((result) => result.status === 'rejected')) ui.toast('部分账户数据加载失败') } @@ -461,6 +506,39 @@ async function cancelTrafficOrder(id) { ui.toast(error.message || '取消失败') } } +function openSimRecharge(card) { + simRechargeCard.value = card + selectedSimPackageId.value = simPackages.value[0]?.id || 0 + simRechargeOpen.value = true +} +async function submitSimRecharge() { + if (!simRechargeCard.value?.id) return + if (!selectedSimPackageId.value) { + ui.toast('请选择套餐') + return + } + simRecharging.value = true + let orderCreated = false + try { + const order = await request.post( + urls.SIM_CARD_RECHARGE_ORDERS(simRechargeCard.value.id), + { packageId: Number(selectedSimPackageId.value) } + ) + orderCreated = true + const payment = await createPayment('sim_recharge_order', order.id) + ui.toast(describePayment(payment)) + simRechargeOpen.value = false + await loadSim() + } catch (error) { + ui.toast(error.message || '充值下单失败') + if (orderCreated) { + simRechargeOpen.value = false + await loadSim() + } + } finally { + simRecharging.value = false + } +} async function saveProfile() { saving.value = true; try { const updated = await request.put(urls.ACCOUNT_PROFILE, editForm.value); profile.value = updated; userStore.user = { ...(userStore.user || {}), ...updated }; localStorage.setItem('user', JSON.stringify(userStore.user)); editOpen.value = false; ui.toast('账户资料已保存') } catch (error) { ui.toast(error.message || '保存账户资料失败') } finally { saving.value = false } } onMounted(load)