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 @@
{{ row.lastSyncAt ? `${Number(row.usedGb || 0).toFixed(1)} / ${row.planGb || 0} GB` : '暂无运营商同步数据' }}
{{ simStatus(row).name }}
{{ fmtTime(row.lastSyncAt) }}
- 运营商通道未接入
+
+ 充值
+
通信卡充值记录
共 {{ simRechargeTotal }} 条
@@ -144,7 +146,7 @@
{{ cardLabel(row.simCardId) }}
{{ row.amountGb }} GB
{{ money(row.totalPrice) }}
- {{ payStatusName(row.payStatus) }}
+ {{ payStatusName(row.payStatus || row.paymentStatus) }}
{{ rechargeStatusName(row.rechargeStatus) }}
{{ fmtTime(row.createdAt) }}
@@ -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)