fogact 1.2.4 → 1.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/web-server.js +481 -22
- package/frontend/admin/admin-panel-v2.js +115 -7
- package/frontend/admin/index.html +3 -1
- package/frontend/user/assets/CardBind-CsCxihhP-fogact-live.js +1 -1
- package/frontend/user/assets/CardBind-CsCxihhP.js +1 -1
- package/lib/commands/restore.js +136 -47
- package/lib/commands/test.js +53 -18
- package/lib/services/activation-orchestrator.js +1 -0
- package/lib/services/database.js +58 -0
- package/lib/services/node-service.js +36 -18
- package/package.json +1 -1
|
@@ -174,11 +174,21 @@ function getCodeStatusMeta(code) {
|
|
|
174
174
|
active: { label: code.statusLabel || '活跃', className: 'bg-green-50 text-green-700' },
|
|
175
175
|
used: { label: code.statusLabel || '活跃', className: 'bg-green-50 text-green-700' },
|
|
176
176
|
disabled: { label: code.statusLabel || '已禁用', className: 'bg-error-container text-on-error-container' },
|
|
177
|
-
expired: { label: code.statusLabel || '已过期', className: 'bg-error-container text-on-error-container' }
|
|
177
|
+
expired: { label: code.statusLabel || '已过期', className: 'bg-error-container text-on-error-container' },
|
|
178
|
+
merged: { label: code.statusLabel || '已注销', className: 'bg-surface-container-high text-on-surface-variant' }
|
|
178
179
|
};
|
|
179
180
|
return meta[key] || meta.unused;
|
|
180
181
|
}
|
|
181
182
|
|
|
183
|
+
function getCodeBillingLabel(code) {
|
|
184
|
+
const billingType = code.billingType || code.quota?.billingType || code.quota?.type || code.type || 'quota';
|
|
185
|
+
const cycleType = code.cycleType || code.quota?.cycleType || code.quota?.type || code.type || 'fixed';
|
|
186
|
+
const unit = code.quotaUnit || code.quota?.unit || 'tokens';
|
|
187
|
+
const billingLabel = { duration: '周期卡', monthly: '周期卡', quota: '额度卡', fixed: '额度卡', count: '次数卡' }[billingType] || billingType;
|
|
188
|
+
const cycleLabel = { monthly: '月度', daily: '日包', fixed: '固定' }[cycleType] || cycleType;
|
|
189
|
+
return `${billingLabel} · ${cycleLabel} · ${unit}`;
|
|
190
|
+
}
|
|
191
|
+
|
|
182
192
|
function clone(value) {
|
|
183
193
|
return JSON.parse(JSON.stringify(value));
|
|
184
194
|
}
|
|
@@ -474,7 +484,7 @@ const Dashboard = {
|
|
|
474
484
|
{ label: '总用户数', value: stats.totalUsers || 0, icon: 'group', color: 'primary', sub: '全部用户' },
|
|
475
485
|
{ label: '活跃用户', value: stats.activeUsers || 0, icon: 'trending_up', color: 'tertiary', sub: '当前活跃状态' },
|
|
476
486
|
{ label: '总激活码', value: stats.totalCodes || 0, icon: 'key', color: 'secondary', sub: `未激活 ${stats.unusedCodes || 0}` },
|
|
477
|
-
{ label: '已过期', value: stats.expiredCodes || 0, icon: 'schedule', color: 'error', sub: stats.
|
|
487
|
+
{ label: '已过期', value: stats.expiredCodes || 0, icon: 'schedule', color: 'error', sub: `已注销 ${stats.mergedCodes || 0}` }
|
|
478
488
|
];
|
|
479
489
|
|
|
480
490
|
const container = document.querySelector('#dashboard-panel .grid');
|
|
@@ -779,6 +789,7 @@ const CodeManagement = {
|
|
|
779
789
|
<tr class="bg-surface-container-high">
|
|
780
790
|
<th class="text-left px-4 py-3 text-xs font-bold uppercase tracking-wider text-on-surface-variant">激活码</th>
|
|
781
791
|
<th class="text-left px-4 py-3 text-xs font-bold uppercase tracking-wider text-on-surface-variant">服务类型</th>
|
|
792
|
+
<th class="text-left px-4 py-3 text-xs font-bold uppercase tracking-wider text-on-surface-variant">叠卡规格</th>
|
|
782
793
|
<th class="text-left px-4 py-3 text-xs font-bold uppercase tracking-wider text-on-surface-variant">状态</th>
|
|
783
794
|
<th class="text-left px-4 py-3 text-xs font-bold uppercase tracking-wider text-on-surface-variant">创建时间</th>
|
|
784
795
|
<th class="text-left px-4 py-3 text-xs font-bold uppercase tracking-wider text-on-surface-variant">过期时间</th>
|
|
@@ -799,6 +810,10 @@ const CodeManagement = {
|
|
|
799
810
|
</div>
|
|
800
811
|
</td>
|
|
801
812
|
<td class="px-4 py-3 text-sm text-on-surface-variant">${escapeHtml(code.serviceLabel || code.service)}</td>
|
|
813
|
+
<td class="px-4 py-3 text-xs text-on-surface-variant">
|
|
814
|
+
<div>${escapeHtml(getCodeBillingLabel(code))}</div>
|
|
815
|
+
<div class="mt-1 opacity-70">${escapeHtml(code.subServiceType || code.sub_service_type || code.category || '标准运营')}</div>
|
|
816
|
+
</td>
|
|
802
817
|
<td class="px-4 py-3"><span class="px-2 py-1 rounded-lg text-xs font-medium ${status.className}">${status.label}</span></td>
|
|
803
818
|
<td class="px-4 py-3 text-sm text-on-surface-variant">${formatDate(code.createdAt)}</td>
|
|
804
819
|
<td class="px-4 py-3 text-sm text-on-surface-variant">${formatDate(code.expiresAt)}</td>
|
|
@@ -996,6 +1011,26 @@ const CodeManagement = {
|
|
|
996
1011
|
</select>
|
|
997
1012
|
</div>
|
|
998
1013
|
|
|
1014
|
+
<!-- 叠卡规格 -->
|
|
1015
|
+
<div class="grid grid-cols-1 sm:grid-cols-3 gap-3">
|
|
1016
|
+
<div>
|
|
1017
|
+
<label class="block text-sm font-medium text-on-surface mb-2">套餐类型</label>
|
|
1018
|
+
<input id="code-sub-service-type" type="text" value="标准运营" class="w-full px-4 py-2 bg-surface-container-low border-none rounded-xl text-sm outline-none" />
|
|
1019
|
+
</div>
|
|
1020
|
+
<div>
|
|
1021
|
+
<label class="block text-sm font-medium text-on-surface mb-2">额度单位</label>
|
|
1022
|
+
<select id="code-quota-unit" class="w-full px-4 py-2 bg-surface-container-low border-none rounded-xl text-sm outline-none">
|
|
1023
|
+
<option value="tokens">tokens</option>
|
|
1024
|
+
<option value="requests">requests</option>
|
|
1025
|
+
<option value="balance">统一余额</option>
|
|
1026
|
+
</select>
|
|
1027
|
+
</div>
|
|
1028
|
+
<div>
|
|
1029
|
+
<label class="block text-sm font-medium text-on-surface mb-2">刷新时区</label>
|
|
1030
|
+
<input value="Asia/Shanghai" disabled class="w-full px-4 py-2 bg-surface-container-low border-none rounded-xl text-sm outline-none opacity-80" />
|
|
1031
|
+
</div>
|
|
1032
|
+
</div>
|
|
1033
|
+
|
|
999
1034
|
<!-- 服务渠道 -->
|
|
1000
1035
|
<div>
|
|
1001
1036
|
<label class="block text-sm font-medium text-on-surface mb-2">服务渠道</label>
|
|
@@ -1108,8 +1143,41 @@ const CodeManagement = {
|
|
|
1108
1143
|
<option value="active" ${code.status === 'active' || code.status === 'used' ? 'selected' : ''}>活跃</option>
|
|
1109
1144
|
<option value="disabled" ${code.status === 'disabled' ? 'selected' : ''}>已禁用</option>
|
|
1110
1145
|
<option value="expired" ${code.status === 'expired' ? 'selected' : ''}>已过期</option>
|
|
1146
|
+
<option value="merged" ${code.status === 'merged' ? 'selected' : ''}>已注销</option>
|
|
1111
1147
|
</select>
|
|
1112
1148
|
</div>
|
|
1149
|
+
<div class="grid grid-cols-1 sm:grid-cols-2 gap-3">
|
|
1150
|
+
<div>
|
|
1151
|
+
<label class="block text-sm font-medium text-on-surface mb-2">计费类型</label>
|
|
1152
|
+
<select id="edit-code-billing-type" class="w-full px-4 py-2 bg-surface-container-low border-none rounded-xl text-sm outline-none">
|
|
1153
|
+
<option value="duration" ${(code.billingType || code.quota?.billingType || code.quota?.type) === 'duration' || code.quota?.type === 'monthly' ? 'selected' : ''}>周期卡</option>
|
|
1154
|
+
<option value="quota" ${(code.billingType || code.quota?.billingType || code.quota?.type || 'quota') === 'quota' || code.quota?.type === 'fixed' ? 'selected' : ''}>额度卡</option>
|
|
1155
|
+
<option value="count" ${(code.billingType || code.quota?.billingType) === 'count' ? 'selected' : ''}>次数卡</option>
|
|
1156
|
+
</select>
|
|
1157
|
+
</div>
|
|
1158
|
+
<div>
|
|
1159
|
+
<label class="block text-sm font-medium text-on-surface mb-2">周期类型</label>
|
|
1160
|
+
<select id="edit-code-cycle-type" class="w-full px-4 py-2 bg-surface-container-low border-none rounded-xl text-sm outline-none">
|
|
1161
|
+
<option value="monthly" ${(code.cycleType || code.quota?.cycleType || code.quota?.type) === 'monthly' ? 'selected' : ''}>月度</option>
|
|
1162
|
+
<option value="daily" ${(code.cycleType || code.quota?.cycleType) === 'daily' ? 'selected' : ''}>日包</option>
|
|
1163
|
+
<option value="fixed" ${(code.cycleType || code.quota?.cycleType || code.quota?.type || 'fixed') === 'fixed' ? 'selected' : ''}>固定</option>
|
|
1164
|
+
</select>
|
|
1165
|
+
</div>
|
|
1166
|
+
</div>
|
|
1167
|
+
<div class="grid grid-cols-1 sm:grid-cols-2 gap-3">
|
|
1168
|
+
<div>
|
|
1169
|
+
<label class="block text-sm font-medium text-on-surface mb-2">套餐类型</label>
|
|
1170
|
+
<input id="edit-code-sub-service-type" type="text" value="${escapeHtml(code.subServiceType || code.sub_service_type || code.category || '标准运营')}" class="w-full px-4 py-2 bg-surface-container-low border-none rounded-xl text-sm outline-none" />
|
|
1171
|
+
</div>
|
|
1172
|
+
<div>
|
|
1173
|
+
<label class="block text-sm font-medium text-on-surface mb-2">额度单位</label>
|
|
1174
|
+
<select id="edit-code-quota-unit" class="w-full px-4 py-2 bg-surface-container-low border-none rounded-xl text-sm outline-none">
|
|
1175
|
+
<option value="tokens" ${(code.quotaUnit || code.quota?.unit || 'tokens') === 'tokens' ? 'selected' : ''}>tokens</option>
|
|
1176
|
+
<option value="requests" ${(code.quotaUnit || code.quota?.unit) === 'requests' ? 'selected' : ''}>requests</option>
|
|
1177
|
+
<option value="balance" ${(code.quotaUnit || code.quota?.unit) === 'balance' ? 'selected' : ''}>统一余额</option>
|
|
1178
|
+
</select>
|
|
1179
|
+
</div>
|
|
1180
|
+
</div>
|
|
1113
1181
|
<div>
|
|
1114
1182
|
<label class="block text-sm font-medium text-on-surface mb-2">过期时间</label>
|
|
1115
1183
|
<input id="edit-code-expire" type="date" value="${code.expiresAt ? new Date(code.expiresAt).toISOString().split('T')[0] : ''}" class="w-full px-4 py-2 bg-surface-container-low border-none rounded-xl text-sm outline-none" />
|
|
@@ -1136,7 +1204,9 @@ const CodeManagement = {
|
|
|
1136
1204
|
const serviceCheckboxes = document.querySelectorAll('.service-checkbox:checked');
|
|
1137
1205
|
const services = lockedService ? [lockedService.label] : Array.from(serviceCheckboxes).map(cb => cb.value);
|
|
1138
1206
|
const count = parseInt(document.getElementById('code-count').value, 10);
|
|
1139
|
-
|
|
1207
|
+
const note = document.getElementById('code-note').value.trim();
|
|
1208
|
+
const subServiceType = document.getElementById('code-sub-service-type').value.trim() || '标准运营';
|
|
1209
|
+
const quotaUnit = document.getElementById('code-quota-unit').value || 'tokens';
|
|
1140
1210
|
|
|
1141
1211
|
if (!services.length) {
|
|
1142
1212
|
UI.showNotification('请至少选择一个服务渠道', 'error');
|
|
@@ -1172,11 +1242,23 @@ const CodeManagement = {
|
|
|
1172
1242
|
duration: durationMonths * 30,
|
|
1173
1243
|
quota: {
|
|
1174
1244
|
type: 'monthly',
|
|
1245
|
+
billingType: 'duration',
|
|
1246
|
+
cycleType: 'monthly',
|
|
1247
|
+
unit: quotaUnit,
|
|
1248
|
+
resetTimezone: 'Asia/Shanghai',
|
|
1175
1249
|
dailyQuota,
|
|
1250
|
+
dailyLimit: dailyQuota,
|
|
1176
1251
|
refreshTime,
|
|
1177
1252
|
used: 0,
|
|
1178
|
-
total: dailyQuota
|
|
1179
|
-
|
|
1253
|
+
total: dailyQuota * durationMonths * 30,
|
|
1254
|
+
periodDays: durationMonths * 30
|
|
1255
|
+
},
|
|
1256
|
+
billingType: 'duration',
|
|
1257
|
+
cycleType: 'monthly',
|
|
1258
|
+
quotaUnit,
|
|
1259
|
+
resetTimezone: 'Asia/Shanghai',
|
|
1260
|
+
subServiceType,
|
|
1261
|
+
category: subServiceType
|
|
1180
1262
|
};
|
|
1181
1263
|
} else {
|
|
1182
1264
|
const totalQuota = parseInt(document.getElementById('code-total-quota').value, 10);
|
|
@@ -1196,9 +1278,19 @@ const CodeManagement = {
|
|
|
1196
1278
|
duration: durationDays,
|
|
1197
1279
|
quota: {
|
|
1198
1280
|
type: 'fixed',
|
|
1281
|
+
billingType: 'quota',
|
|
1282
|
+
cycleType: 'fixed',
|
|
1283
|
+
unit: quotaUnit,
|
|
1284
|
+
resetTimezone: 'Asia/Shanghai',
|
|
1199
1285
|
total: totalQuota,
|
|
1200
1286
|
used: 0
|
|
1201
|
-
}
|
|
1287
|
+
},
|
|
1288
|
+
billingType: 'quota',
|
|
1289
|
+
cycleType: 'fixed',
|
|
1290
|
+
quotaUnit,
|
|
1291
|
+
resetTimezone: 'Asia/Shanghai',
|
|
1292
|
+
subServiceType,
|
|
1293
|
+
category: subServiceType
|
|
1202
1294
|
};
|
|
1203
1295
|
}
|
|
1204
1296
|
|
|
@@ -1224,11 +1316,27 @@ const CodeManagement = {
|
|
|
1224
1316
|
|
|
1225
1317
|
async updateCode(id) {
|
|
1226
1318
|
const expiresAt = document.getElementById('edit-code-expire').value;
|
|
1319
|
+
const billingType = document.getElementById('edit-code-billing-type').value;
|
|
1320
|
+
const cycleType = document.getElementById('edit-code-cycle-type').value;
|
|
1321
|
+
const quotaUnit = document.getElementById('edit-code-quota-unit').value;
|
|
1322
|
+
const subServiceType = document.getElementById('edit-code-sub-service-type').value.trim() || '标准运营';
|
|
1227
1323
|
const payload = {
|
|
1228
1324
|
service: getActiveServiceOption()?.label || document.getElementById('edit-code-service').value,
|
|
1229
1325
|
status: document.getElementById('edit-code-status').value,
|
|
1230
1326
|
expiresAt: expiresAt ? new Date(expiresAt).toISOString() : null,
|
|
1231
|
-
notes: document.getElementById('edit-code-note').value.trim()
|
|
1327
|
+
notes: document.getElementById('edit-code-note').value.trim(),
|
|
1328
|
+
billingType,
|
|
1329
|
+
cycleType,
|
|
1330
|
+
quotaUnit,
|
|
1331
|
+
resetTimezone: 'Asia/Shanghai',
|
|
1332
|
+
subServiceType,
|
|
1333
|
+
category: subServiceType,
|
|
1334
|
+
quota: {
|
|
1335
|
+
billingType,
|
|
1336
|
+
cycleType,
|
|
1337
|
+
unit: quotaUnit,
|
|
1338
|
+
resetTimezone: 'Asia/Shanghai'
|
|
1339
|
+
}
|
|
1232
1340
|
};
|
|
1233
1341
|
|
|
1234
1342
|
try {
|
|
@@ -654,8 +654,10 @@
|
|
|
654
654
|
<select id="code-status-filter" class="px-4 py-2 bg-surface-container-low border-none rounded-xl text-sm focus:ring-2 ring-primary/20 outline-none">
|
|
655
655
|
<option value="">所有状态</option>
|
|
656
656
|
<option value="unused">未使用</option>
|
|
657
|
-
<option value="
|
|
657
|
+
<option value="active">已激活</option>
|
|
658
|
+
<option value="disabled">已禁用</option>
|
|
658
659
|
<option value="expired">已过期</option>
|
|
660
|
+
<option value="merged">已注销</option>
|
|
659
661
|
</select>
|
|
660
662
|
</div>
|
|
661
663
|
|
|
@@ -18,4 +18,4 @@ import{j as Xe,r as _,d as h,x,A as t,D as v,H as n,u as a,E as i,F as se,z as g
|
|
|
18
18
|
*
|
|
19
19
|
* This source code is licensed under the ISC license.
|
|
20
20
|
* See the LICENSE file in the root directory of this source tree.
|
|
21
|
-
*/const De=Z("UnlinkIcon",[["path",{d:"m18.84 12.25 1.72-1.71h-.02a5.004 5.004 0 0 0-.12-7.07 5.006 5.006 0 0 0-6.95 0l-1.72 1.71",key:"yqzxt4"}],["path",{d:"m5.17 11.75-1.71 1.71a5.004 5.004 0 0 0 .12 7.07 5.006 5.006 0 0 0 6.95 0l1.71-1.71",key:"4qinb0"}],["line",{x1:"8",x2:"8",y1:"2",y2:"5",key:"1041cp"}],["line",{x1:"2",x2:"5",y1:"8",y2:"8",key:"14m1p5"}],["line",{x1:"16",x2:"16",y1:"19",y2:"22",key:"rzdirn"}],["line",{x1:"19",x2:"22",y1:"16",y2:"16",key:"ox905f"}]]),ct={class:"max-w-7xl mx-auto space-y-6"},mt={key:0,class:"flex items-center justify-center py-20"},ft={class:"mx-auto max-w-md text-center space-y-4"},vt={class:"w-14 h-14 rounded-2xl bg-red-500/10 flex items-center justify-center mx-auto"},pt={class:"space-y-2"},xt={class:"text-sm text-muted-foreground"},bt={key:0,class:"rounded-lg border border-blue-200 dark:border-blue-500/20 bg-blue-50 dark:bg-blue-500/5 p-4"},gt={class:"flex gap-3"},_t={class:"shrink-0 mt-0.5"},yt={class:"text-sm"},ht={class:"font-medium text-blue-800 dark:text-blue-400"},kt={class:"font-mono"},wt={key:1,class:"rounded-lg border border-red-200 dark:border-red-500/20 bg-red-50 dark:bg-red-500/5 p-4"},Ct={class:"flex gap-3"},$t={class:"shrink-0 mt-0.5"},qt={key:2,class:"rounded-lg border border-amber-200 dark:border-amber-500/20 bg-amber-50 dark:bg-amber-500/5 p-4"},jt={class:"flex gap-3"},It={class:"shrink-0 mt-0.5"},Et={class:"flex items-center gap-2 text-base font-semibold"},Pt={class:"w-8 h-8 rounded-lg bg-primary/10 flex items-center justify-center"},Kt={class:"grid grid-cols-2 lg:grid-cols-4 gap-4"},Dt={class:"rounded-xl border border-border/60 bg-muted/20 p-4"},St={class:"flex items-center justify-between mb-2"},Ut={class:"relative flex items-center justify-center"},Bt={class:"w-10 h-10 -rotate-90"},Mt={class:"absolute text-[9px] font-bold text-primary"},At={class:"text-lg font-bold tabular-nums"},zt={class:"text-xs text-muted-foreground mt-0.5"},Vt={class:"rounded-xl border border-border/60 bg-muted/20 p-4"},Lt={class:"flex items-center justify-between mb-2"},Nt={class:"w-10 h-10 rounded-lg bg-emerald-500/10 flex items-center justify-center"},Rt={class:"text-lg font-bold tabular-nums"},Tt={class:"text-sm text-muted-foreground font-normal"},Ht={class:"rounded-xl border border-border/60 bg-muted/20 p-4"},Xt={class:"flex items-center justify-between mb-2"},Ft={class:"w-10 h-10 rounded-lg bg-amber-500/10 flex items-center justify-center"},Gt={class:"text-lg font-bold tabular-nums"},Jt={class:"text-xs text-muted-foreground mt-0.5"},Qt={class:"rounded-xl border border-border/60 bg-muted/20 p-4"},Ot={class:"flex items-center justify-between mb-2"},Wt={class:"w-10 h-10 rounded-lg bg-blue-500/10 flex items-center justify-center"},Zt={class:"text-lg font-bold tabular-nums"},Yt={class:"text-xs text-muted-foreground mt-0.5"},es={class:"space-y-2"},ts={class:"flex items-center justify-between text-sm"},ss={class:"font-semibold tabular-nums"},as={class:"flex items-center gap-2 text-base font-semibold"},ls={class:"w-8 h-8 rounded-lg bg-primary/10 flex items-center justify-center"},ns={class:"relative"},os={class:"rounded-xl border border-border/60 bg-muted/20 p-4"},is={class:"flex items-start gap-3"},rs={class:"flex-1 min-w-0"},ds={class:"flex items-center gap-2 flex-wrap"},us={class:"font-mono text-sm font-medium"},cs={class:"mt-2 flex items-center gap-2 flex-wrap"},ms={class:"truncate"},fs={class:"border-t border-border/30 mt-2 pt-2 space-y-1.5"},vs={class:"flex items-center justify-between gap-2 text-xs"},ps={class:"text-muted-foreground"},xs={class:"flex items-center gap-3"},bs={class:"flex-1"},gs={class:"text-xs font-medium tabular-nums text-muted-foreground"},_s={key:0},ys={class:"flex items-start gap-3"},hs={class:"w-7 h-7 rounded-full bg-muted flex items-center justify-center text-xs font-bold text-muted-foreground shrink-0 mt-0.5"},ks={class:"flex-1 min-w-0"},ws={class:"flex items-center justify-between gap-2"},Cs={class:"flex items-center gap-2 flex-wrap min-w-0"},$s={class:"font-mono text-sm"},qs={class:"flex items-center shrink-0"},js={class:"flex items-center gap-0.5"},Is={class:"mt-2 flex items-center gap-2 flex-wrap"},Es={class:"truncate"},Ps={key:0,class:"border-t border-border/30 mt-2 pt-2"},Ks={key:1,class:"border-t border-border/30 mt-2 pt-2 space-y-1.5"},Ds={class:"flex items-center justify-between gap-2 text-xs"},Ss={class:"text-muted-foreground"},Us={class:"flex items-center gap-3"},Bs={class:"flex-1"},Ms={class:"text-xs font-medium tabular-nums text-muted-foreground"},As={key:1,class:"text-xs text-muted-foreground flex items-center gap-1.5 mt-3 ml-10"},zs={class:"text-center"},Vs={class:"w-14 h-14 rounded-2xl bg-primary/10 flex items-center justify-center mx-auto mb-3"},Ls={class:"flex items-center gap-2 text-base font-semibold"},Ns={class:"w-8 h-8 rounded-lg bg-blue-500/10 flex items-center justify-center"},Rs={class:"rounded-xl border border-blue-200/60 dark:border-blue-500/20 bg-blue-50/50 dark:bg-blue-500/5 p-4"},Ts={class:"font-mono text-base font-semibold"},Hs={key:0,class:"mt-2 text-xs leading-5 text-amber-700 dark:text-amber-300"},Xs={class:"flex items-center justify-between gap-3 rounded-xl border border-border/60 bg-background/70 p-4"},Fs={class:"flex items-center gap-2 text-base font-semibold"},Gs={class:"w-8 h-8 rounded-lg bg-emerald-500/10 flex items-center justify-center"},Js={class:"flex gap-2"},Qs={class:"relative flex-1"},Os={key:0,class:"space-y-3"},Ws={class:"text-sm font-medium text-muted-foreground"},Zs={class:"flex flex-wrap gap-2"},Ys={class:"font-mono text-xs"},ea=["onClick"],ta={class:"font-mono font-medium"},sa={class:"font-mono font-medium"},Se=10,ga=Xe({__name:"CardBind",setup(aa){const F=Je(),C=_(null),A=_(!1),z=_(null),V=_(""),G=_(!1),y=_([]),U=_(!1),B=_(!1),j=_(!1),I=_(!1),L=_(!1),J=_(null),Y=_(""),N=_(!1),Q=_(!1),$=h(()=>F.apiKeyInfo),ee=h(()=>{var s;return((s=C.value)==null?void 0:s.role)||"independent"}),p=h(()=>{var s;return((s=C.value)==null?void 0:s.chain)||[]}),te=h(()=>{var s;return((s=C.value)==null?void 0:s.primary_key_preview)||""}),Ue=h(()=>{var s;return!!((s=C.value)!=null&&s.orphaned_primary)}),oe=h(()=>!!z.value&&!C.value),ie=h(()=>ee.value==="independent"),R=h(()=>ee.value==="primary"),re=h(()=>ee.value==="child"),E=h(()=>R.value?p.value.slice(1):[]),de=h(()=>y.value.length<Se),Be=h(()=>{var s,e;return!oe.value&&(ie.value||R.value)&&((s=$.value)==null?void 0:s.status)!=="disabled"&&((e=$.value)==null?void 0:e.status)!=="expired"}),b=h(()=>{var s;return!R.value||p.value.length===0?null:Qe(p.value,((s=$.value)==null?void 0:s.billing_type)||"quota")});function ue(s){return s==="active"?"border-emerald-200 bg-emerald-50 text-emerald-700 dark:border-emerald-800 dark:bg-emerald-950 dark:text-emerald-300":s==="disabled"?"border-red-200 bg-red-50 text-red-700 dark:border-red-800 dark:bg-red-950 dark:text-red-300":"border-border bg-muted text-muted-foreground"}function ce(s){return s.status_label?s.status_label:{active:"正常",disabled:"已禁用"}[s.status]||s.status}function me(s){var c;const e=s.billing_type||((c=$.value)==null?void 0:c.billing_type)||"";if(e==="duration"){const m=s.daily_remaining??0,l=s.daily_quota||0;let o=`今日剩余 ${M(m)} / ${M(l)} 每日`;const f=ae(s.quota_pack_expires_at)&&s.quota_pack_remaining||0;return f>0&&(o+=` · 配额包 ${M(f)}`),o}if(e==="quota"){const m=s.remaining_quota??0,l=s.total_quota??0;let o=`剩余 ${M(m)} / ${M(l)}`;const f=ae(s.quota_pack_expires_at)&&s.quota_pack_remaining||0;return f>0&&(o+=` · 配额包 ${M(f)}`),o}if(e==="count"){const m=s.remaining_requests??s.remaining_count??0,l=s.max_requests??0;let o=`剩余 ${m} / ${l} 次`;const f=ae(s.requests_pack_expires_at)&&s.requests_pack_remaining||0;return f>0&&(o+=` · 请求包 ${f} 次`),o}return"-"}function O(s){if(s.total_quota!==void 0&&s.total_quota>0){const e=s.remaining_quota||0;return Math.round((s.total_quota-e)/s.total_quota*100)}if(s.max_requests!==void 0&&s.max_requests>0){const e=s.remaining_requests??s.remaining_count??0;return Math.round((s.max_requests-e)/s.max_requests*100)}if(s.daily_quota!==void 0&&s.daily_quota>0){const e=s.daily_remaining??0;return Math.round((s.daily_quota-e)/s.daily_quota*100)}return 0}function fe(s){if(s.expires_at){const e=ye(s.expires_at);return e==="已过期"?"已过期":`${he(s.expires_at,"yyyy-MM-dd")} 到期 (${e})`}return s.validity_days&&s.validity_days>0?`${s.validity_days} 天(激活后计算)`:"永久有效"}function ve(s){if(!s.expires_at)return!1;const e=new Date(s.expires_at).getTime()-Date.now();return e>0&&e<7*86400*1e3}function pe(s){return s.status_label==="未激活"||!s.activated&&s.status!=="active"}function W(s){return Ze(s.service_type||"",s.sub_service_type_name)}async function Me({isLatest:s}){var e,c,m,l;A.value=!0;try{const o=await X.getBindInfo();if(!s())return;z.value=null,C.value=o}catch(o){if(s()){const f=((c=(e=o==null?void 0:o.response)==null?void 0:e.data)==null?void 0:c.message)||((l=(m=o==null?void 0:o.response)==null?void 0:m.data)==null?void 0:l.error)||(o==null?void 0:o.message)||"获取绑定信息失败";z.value=f,w.error("加载失败",f)}}finally{s()&&(A.value=!1)}}const{reload:T}=st(Me,{resetBeforeLoad:s=>{A.value=!0,(s==="initial"||s==="active-key-change"||s==="manual-refresh")&&(C.value=null),z.value=null}});function xe(){const s=V.value.trim();if(!s)return;if(y.value.includes(s)){w.warning("该卡已在列表中");return}const e=F.activeKey;if(e&&e.key===s){w.error("不能绑定自己");return}if(!de.value){w.warning(`单次最多绑定 ${Se} 张卡`);return}y.value.push(s),V.value=""}function Ae(s){y.value.splice(s,1)}async function ze(){var s,e,c,m;if(y.value.length!==0){U.value=!0;try{const l=await X.cardBind(y.value);w.success("绑定成功",l.message||`成功绑定 ${y.value.length} 张卡`),y.value=[],await F.fetchInfo(),await T("bind-mutation")}catch(l){const o=((e=(s=l==null?void 0:l.response)==null?void 0:s.data)==null?void 0:e.message)||((m=(c=l==null?void 0:l.response)==null?void 0:c.data)==null?void 0:m.error)||(l==null?void 0:l.message)||"绑定失败";w.error("绑定失败",o)}finally{U.value=!1}}}function Ve(s){J.value=s.id,Y.value=s.key_preview,L.value=!0}async function Le(){var s,e,c,m;if(J.value){B.value=!0;try{const l=await X.cardUnbind([J.value]);w.success("解绑成功",l.message||"已成功解绑"),L.value=!1,J.value=null,Y.value="",await T("unbind-mutation")}catch(l){const o=((e=(s=l==null?void 0:l.response)==null?void 0:s.data)==null?void 0:e.message)||((m=(c=l==null?void 0:l.response)==null?void 0:c.data)==null?void 0:m.error)||(l==null?void 0:l.message)||"解绑失败";w.error("解绑失败",o)}finally{B.value=!1}}}async function Ne(){var s,e,c,m;I.value=!0;try{const l=await X.cardUnbindSelf();w.success("解绑成功",l.message||"已从主卡解绑"),N.value=!1,await F.fetchInfo(),await T("unbind-self-mutation")}catch(l){const o=((e=(s=l==null?void 0:l.response)==null?void 0:s.data)==null?void 0:e.message)||((m=(c=l==null?void 0:l.response)==null?void 0:c.data)==null?void 0:m.error)||(l==null?void 0:l.message)||"解绑失败";w.error("解绑失败",o)}finally{I.value=!1}}async function Re(s){if(s<=0||j.value)return;const e=[...E.value],c=e[s];e[s]=e[s-1],e[s-1]=c,await be(e)}async function Te(s){if(s>=E.value.length-1||j.value)return;const e=[...E.value],c=e[s];e[s]=e[s+1],e[s+1]=c,await be(e)}async function be(s){var e,c,m,l;j.value=!0;try{const o=s.map(f=>f.id);await X.cardBindReorder(o),await T("reorder-mutation")}catch(o){const f=((c=(e=o==null?void 0:o.response)==null?void 0:e.data)==null?void 0:c.message)||((l=(m=o==null?void 0:o.response)==null?void 0:m.data)==null?void 0:l.error)||(o==null?void 0:o.message)||"排序失败";w.error("排序失败",f)}finally{j.value=!1}}function He(s){return s.length<=8?s:s.substring(0,6)+"****"+s.substring(s.length-4)}return(s,e)=>{var c,m;return r(),x("div",ct,[e[55]||(e[55]=t("div",{class:"space-y-1"},[t("h1",{class:"text-2xl font-semibold tracking-tight"},"叠卡"),t("p",{class:"text-sm text-muted-foreground"}," 管理 API Key 绑定关系,查看聚合资源池 ")],-1)),A.value&&!C.value?(r(),x("div",mt,[n(a(K),{class:"h-6 w-6 animate-spin text-muted-foreground"})])):oe.value?(r(),v(a(S),{key:1,class:"border-border/60 bg-card/80 backdrop-blur-xl"},{default:i(()=>[n(a(D),{class:"p-8"},{default:i(()=>[t("div",ft,[t("div",vt,[n(a(H),{class:"h-7 w-7 text-red-500"})]),t("div",pt,[e[9]||(e[9]=t("h3",{class:"text-base font-semibold"},"绑定信息加载失败",-1)),t("p",xt,d(z.value),1),e[10]||(e[10]=t("p",{class:"text-xs text-muted-foreground"}," 当前无法确认这张卡的真实绑定状态,已暂时隐藏绑定入口,请稍后重试。 ",-1))]),n(a(k),{variant:"outline",onClick:e[0]||(e[0]=l=>a(T)("manual-refresh"))},{default:i(()=>[A.value?(r(),v(a(K),{key:0,class:"h-4 w-4 mr-2 animate-spin"})):g("",!0),e[11]||(e[11]=u(" 重新加载 ",-1))]),_:1})])]),_:1})]),_:1})):(r(),x(se,{key:2},[re.value?(r(),x("div",bt,[t("div",gt,[t("div",_t,[n(a(Oe),{class:"h-5 w-5 text-blue-500"})]),t("div",yt,[t("p",ht,[e[12]||(e[12]=u(" 此卡已绑定到主卡 ",-1)),t("span",kt,d(te.value),1),e[13]||(e[13]=u(",通过主卡消耗额度 ",-1))]),e[14]||(e[14]=t("p",{class:"mt-1 text-blue-700/80 dark:text-blue-400/70"}," 子卡不能独立消耗额度,所有请求将通过主卡的消耗链进行扣费。 ",-1))])])])):g("",!0),((c=$.value)==null?void 0:c.status)==="disabled"?(r(),x("div",wt,[t("div",Ct,[t("div",$t,[n(a(H),{class:"h-5 w-5 text-red-500"})]),e[15]||(e[15]=t("div",{class:"text-sm"},[t("p",{class:"font-medium text-red-800 dark:text-red-400"}," 当前 Key 已被禁用 "),t("p",{class:"mt-1 text-red-700/80 dark:text-red-400/70"}," 已禁用的 Key 无法进行绑定操作。 ")],-1))])])):((m=$.value)==null?void 0:m.status)==="expired"?(r(),x("div",qt,[t("div",jt,[t("div",It,[n(a(H),{class:"h-5 w-5 text-amber-500"})]),e[16]||(e[16]=t("div",{class:"text-sm"},[t("p",{class:"font-medium text-amber-800 dark:text-amber-400"}," 当前 Key 已过期 "),t("p",{class:"mt-1 text-amber-700/80 dark:text-amber-400/70"}," 已过期的 Key 无法进行绑定操作。 ")],-1))])])):g("",!0),R.value&&b.value?(r(),v(a(S),{key:3,class:"border-border/60 bg-card/80 backdrop-blur-xl"},{default:i(()=>[n(a(D),{class:"p-6 space-y-5"},{default:i(()=>{var l,o;return[t("div",Et,[t("div",Pt,[n(a(Pe),{class:"h-4 w-4 text-primary"})]),e[17]||(e[17]=u(" 聚合资源概览 ",-1))]),t("div",Kt,[t("div",Dt,[t("div",St,[e[19]||(e[19]=t("p",{class:"text-xs text-muted-foreground font-medium"},"总额度",-1)),t("div",Ut,[(r(),x("svg",Bt,[e[18]||(e[18]=t("circle",{cx:"20",cy:"20",r:"16",stroke:"currentColor","stroke-width":"3",fill:"none",class:"text-primary/15"},null,-1)),t("circle",{cx:"20",cy:"20",r:"16",stroke:"currentColor","stroke-width":"3",fill:"none","stroke-linecap":"round",class:"text-primary",style:Fe({strokeDasharray:`${b.value.usagePercent*1.005} 100.5`,transition:"stroke-dasharray 600ms ease"})},null,4)])),t("span",Mt,d(b.value.usagePercent)+"%",1)])]),t("p",At,d(a(_e)(b.value.totalRemaining,((l=$.value)==null?void 0:l.billing_type)||"")),1),t("p",zt," / "+d(a(_e)(b.value.totalCapacity,((o=$.value)==null?void 0:o.billing_type)||"")),1)]),t("div",Vt,[t("div",Lt,[e[20]||(e[20]=t("p",{class:"text-xs text-muted-foreground font-medium"}," 活跃卡数 ",-1)),t("div",Nt,[n(a(at),{class:"h-4 w-4 text-emerald-500"})])]),t("p",Rt,[u(d(b.value.activeCount),1),t("span",Tt," / "+d(b.value.totalCount)+" 张",1)]),e[21]||(e[21]=t("p",{class:"text-xs text-muted-foreground mt-0.5"},"活跃 / 总数",-1))]),t("div",Ht,[t("div",Xt,[e[22]||(e[22]=t("p",{class:"text-xs text-muted-foreground font-medium"}," 最远到期 ",-1)),t("div",Ft,[n(a(lt),{class:"h-4 w-4 text-amber-500"})])]),t("p",Gt,d(b.value.latestExpiry?a(ye)(b.value.latestExpiry):b.value.latestValidityDays?`${b.value.latestValidityDays}天`:"永久"),1),t("p",Jt,d(b.value.latestExpiry?a(he)(b.value.latestExpiry,"yyyy-MM-dd HH:mm:ss"):b.value.latestValidityDays?"激活后计算":"无过期时间"),1)]),t("div",Qt,[t("div",Ot,[e[23]||(e[23]=t("p",{class:"text-xs text-muted-foreground font-medium"},"消耗链",-1)),t("div",Wt,[n(a(ut),{class:"h-4 w-4 text-blue-500"})])]),t("p",Zt,[u(d(p.value.length),1),e[24]||(e[24]=t("span",{class:"text-sm text-muted-foreground font-normal"}," 张卡",-1))]),t("p",Yt," 1 主卡 + "+d(E.value.length)+" 子卡 ",1)])]),t("div",es,[t("div",ts,[e[25]||(e[25]=t("span",{class:"text-muted-foreground"},"使用率",-1)),t("span",ss,d(b.value.usagePercent)+"%",1)]),n(a(le),{"model-value":b.value.usagePercent,class:"h-2"},null,8,["model-value"])])]}),_:1})]),_:1})):g("",!0),R.value&&p.value.length>0?(r(),v(a(S),{key:4,class:"border-border/60 bg-card/80 backdrop-blur-xl"},{default:i(()=>[n(a(D),{class:"p-6 space-y-4"},{default:i(()=>[t("div",null,[t("div",as,[t("div",ls,[n(a(ne),{class:"h-4 w-4 text-primary"})]),e[26]||(e[26]=u(" 消耗链 ",-1))]),e[27]||(e[27]=t("p",{class:"text-sm text-muted-foreground mt-1 ml-10"}," 请求按此顺序依次消耗各卡额度 ",-1))]),t("div",ns,[t("div",os,[t("div",is,[e[29]||(e[29]=t("div",{class:"w-7 h-7 rounded-full bg-muted flex items-center justify-center text-xs font-bold text-muted-foreground shrink-0 mt-0.5"}," 1 ",-1)),t("div",rs,[t("div",ds,[t("span",us,d(p.value[0].key_preview),1),n(a(q),{variant:"outline",class:"text-[10px] px-1.5 py-0 h-[18px]"},{default:i(()=>[...e[28]||(e[28]=[u(" 主卡 ",-1)])]),_:1}),n(a(q),{variant:"outline",class:P(["text-[10px] px-1.5 py-0 h-[18px]",ue(p.value[0].status)])},{default:i(()=>[u(d(ce(p.value[0])),1)]),_:1},8,["class"])]),t("div",cs,[n(a(q),{variant:"outline",class:P(["max-w-full text-[10px] px-1.5 py-0 h-[18px]",a(ke)(p.value[0].service_type||"").badge]),title:W(p.value[0])},{default:i(()=>[t("span",ms,d(W(p.value[0])),1)]),_:1},8,["class","title"]),n(a(q),{variant:"outline",class:"text-[10px] px-1.5 py-0 h-[18px]"},{default:i(()=>[u(d(a(we)(p.value[0].billing_type||"")),1)]),_:1})]),t("div",fs,[t("div",vs,[t("span",ps,d(me(p.value[0])),1),t("span",{class:P(ve(p.value[0])?"text-red-500":"text-muted-foreground")},d(fe(p.value[0])),3)]),t("div",xs,[t("div",bs,[n(a(le),{"model-value":O(p.value[0]),class:"h-1.5"},null,8,["model-value"])]),t("span",gs,d(O(p.value[0]))+"%",1)])])])])]),E.value.length>0?(r(),x("div",_s,[(r(!0),x(se,null,ge(E.value,(l,o)=>(r(),x("div",{key:l.id},[e[32]||(e[32]=t("div",{class:"border-l-2 border-dashed border-primary/30 h-3 ml-4"},null,-1)),t("div",{class:P(["rounded-xl border p-4 transition-colors",pe(l)?"border-dashed border-border/50 bg-muted/10":"border-border/60 bg-muted/20 hover:bg-muted/30"])},[t("div",ys,[t("div",hs,d(o+2),1),t("div",ks,[t("div",ws,[t("div",Cs,[t("span",$s,d(l.key_preview),1),n(a(q),{variant:"outline",class:"text-[10px] px-1.5 py-0 h-[18px]"},{default:i(()=>[...e[30]||(e[30]=[u(" 子卡 ",-1)])]),_:1}),n(a(q),{variant:"outline",class:P(["text-[10px] px-1.5 py-0 h-[18px]",ue(l.status)])},{default:i(()=>[u(d(ce(l)),1)]),_:2},1032,["class"])]),t("div",qs,[t("div",js,[n(a(k),{variant:"ghost",size:"icon",class:"h-7 w-7",disabled:o===0||j.value,onClick:f=>Re(o),title:"上移"},{default:i(()=>[n(a(dt),{class:"h-3.5 w-3.5"})]),_:1},8,["disabled","onClick"]),n(a(k),{variant:"ghost",size:"icon",class:"h-7 w-7",disabled:o===E.value.length-1||j.value,onClick:f=>Te(o),title:"下移"},{default:i(()=>[n(a(rt),{class:"h-3.5 w-3.5"})]),_:1},8,["disabled","onClick"])]),n(a(tt),{orientation:"vertical",class:"mx-1.5 h-4"}),n(a(k),{variant:"ghost",size:"icon",class:"h-7 w-7 text-red-500 hover:text-red-600 hover:bg-red-50 dark:hover:bg-red-500/10",disabled:B.value,onClick:f=>Ve(l),title:"解绑"},{default:i(()=>[n(a(De),{class:"h-3.5 w-3.5"})]),_:1},8,["disabled","onClick"])])]),t("div",Is,[n(a(q),{variant:"outline",class:P(["max-w-full text-[10px] px-1.5 py-0 h-[18px]",a(ke)(l.service_type||"").badge]),title:W(l)},{default:i(()=>[t("span",Es,d(W(l)),1)]),_:2},1032,["class","title"]),n(a(q),{variant:"outline",class:"text-[10px] px-1.5 py-0 h-[18px]"},{default:i(()=>[u(d(a(we)(l.billing_type||"")),1)]),_:2},1024)]),pe(l)?(r(),x("div",Ps,[...e[31]||(e[31]=[t("p",{class:"text-xs text-muted-foreground"}," 排到时自动激活,开始计算有效期 ",-1)])])):(r(),x("div",Ks,[t("div",Ds,[t("span",Ss,d(me(l)),1),t("span",{class:P(ve(l)?"text-red-500":"text-muted-foreground")},d(fe(l)),3)]),t("div",Us,[t("div",Bs,[n(a(le),{"model-value":O(l),class:"h-1.5"},null,8,["model-value"])]),t("span",Ms,d(O(l))+"%",1)])]))])])],2)]))),128))])):g("",!0),j.value?(r(),x("p",As,[n(a(K),{class:"h-3.5 w-3.5 animate-spin"}),e[33]||(e[33]=u(" 正在更新排序... ",-1))])):g("",!0)])]),_:1})]),_:1})):g("",!0),ie.value?(r(),v(a(S),{key:5,class:"border-border/60 bg-card/80 backdrop-blur-xl"},{default:i(()=>[n(a(D),{class:"p-8"},{default:i(()=>[t("div",zs,[t("div",Vs,[n(a(Pe),{class:"h-7 w-7 text-primary/60"})]),e[34]||(e[34]=t("h3",{class:"text-base font-semibold"},"独立卡模式",-1)),e[35]||(e[35]=t("p",{class:"text-sm text-muted-foreground mt-1"}," 尚未绑定任何卡片,在下方添加子卡建立消耗链 ",-1))])]),_:1})]),_:1})):g("",!0),re.value?(r(),v(a(S),{key:6,class:"border-border/60 bg-card/80 backdrop-blur-xl"},{default:i(()=>[n(a(D),{class:"p-6 space-y-4"},{default:i(()=>[t("div",Ls,[t("div",Ns,[n(a(ne),{class:"h-4 w-4 text-blue-500"})]),e[36]||(e[36]=u(" 绑定信息 ",-1))]),t("div",Rs,[e[37]||(e[37]=t("p",{class:"text-sm text-muted-foreground mb-1"},"绑定的主卡",-1)),t("p",Ts,d(te.value),1),Ue.value?(r(),x("p",Hs," 主卡记录已不存在,请手动点击下方“解除绑定”清理当前绑定关系。 ")):g("",!0)]),t("div",Xs,[e[39]||(e[39]=t("div",{class:"space-y-1"},[t("p",{class:"text-sm font-medium text-foreground"},"解除绑定"),t("p",{class:"text-xs leading-5 text-muted-foreground"}," 解除后此卡将恢复为独立卡,可单独使用和管理。 ")],-1)),n(a(k),{variant:"secondary",size:"sm",class:"shrink-0",disabled:I.value,onClick:e[1]||(e[1]=l=>N.value=!0)},{default:i(()=>[I.value?(r(),v(a(K),{key:0,class:"h-4 w-4 animate-spin"})):(r(),v(a(De),{key:1,class:"h-4 w-4"})),e[38]||(e[38]=u(" 解除绑定 ",-1))]),_:1},8,["disabled"])])]),_:1})]),_:1})):g("",!0),Be.value?(r(),v(a(S),{key:7,class:"border-border/60 bg-card/80 backdrop-blur-xl"},{default:i(()=>[n(a(D),{class:"p-6 space-y-4"},{default:i(()=>[t("div",null,[t("div",Fs,[t("div",Gs,[n(a(Ke),{class:"h-4 w-4 text-emerald-500"})]),e[40]||(e[40]=u(" 绑定新卡 ",-1))]),e[41]||(e[41]=t("p",{class:"text-sm text-muted-foreground mt-1 ml-10"}," 输入子卡 API Key 进行绑定,子卡必须与主卡的服务类型、子服务类型和计费方式一致,且未绑定 ",-1))]),t("div",Js,[t("div",Qs,[n(a(Ye),{modelValue:V.value,"onUpdate:modelValue":e[2]||(e[2]=l=>V.value=l),type:G.value?"text":"password",placeholder:"请输入子卡 API Key",autocomplete:"off",spellcheck:"false",class:"pr-9 font-mono text-sm",disabled:U.value,onKeydown:Ge(xe,["enter"])},null,8,["modelValue","type","disabled"]),t("button",{type:"button",class:"absolute right-2.5 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground transition-colors",onClick:e[3]||(e[3]=l=>G.value=!G.value)},[G.value?(r(),v(a(nt),{key:0,class:"h-4 w-4"})):(r(),v(a(et),{key:1,class:"h-4 w-4"}))])]),n(a(k),{disabled:!V.value.trim()||!de.value||U.value,onClick:xe},{default:i(()=>[n(a(Ke),{class:"h-4 w-4 mr-1"}),e[42]||(e[42]=u(" 添加 ",-1))]),_:1},8,["disabled"])]),y.value.length>0?(r(),x("div",Os,[t("p",Ws," 待绑定("+d(y.value.length)+" 张) ",1),t("div",Zs,[(r(!0),x(se,null,ge(y.value,(l,o)=>(r(),x("div",{key:o,class:"inline-flex items-center gap-1.5 rounded-full border border-border/60 bg-muted/30 px-3 py-1 text-sm"},[t("span",Ys,d(He(l)),1),t("button",{type:"button",class:"text-muted-foreground hover:text-red-500 transition-colors",onClick:f=>Ae(o)},[n(a(We),{class:"h-3 w-3"})],8,ea)]))),128))])])):g("",!0),y.value.length>0?(r(),v(a(k),{key:1,class:"w-full",disabled:U.value,onClick:ze},{default:i(()=>[U.value?(r(),v(a(K),{key:0,class:"h-4 w-4 mr-2 animate-spin"})):(r(),v(a(ne),{key:1,class:"h-4 w-4 mr-2"})),u(" 绑定 "+d(y.value.length)+" 张卡 ",1)]),_:1},8,["disabled"])):g("",!0)]),_:1})]),_:1})):g("",!0),t("button",{type:"button",class:"flex items-center gap-1.5 text-sm text-muted-foreground hover:text-foreground transition-colors",onClick:e[4]||(e[4]=l=>Q.value=!Q.value)},[Q.value?(r(),v(a(it),{key:1,class:"h-4 w-4"})):(r(),v(a(ot),{key:0,class:"h-4 w-4"})),e[43]||(e[43]=u(" 绑定规则说明 ",-1))]),Q.value?(r(),v(a(S),{key:8,class:"border-border/40"},{default:i(()=>[n(a(D),{class:"p-5"},{default:i(()=>[...e[44]||(e[44]=[t("ul",{class:"space-y-2 text-sm text-muted-foreground"},[t("li",null,"1. 子卡必须与主卡类型(服务类型、子服务类型、计费方式)一致"),t("li",null,"2. 子卡不能是已绑定或已过期的卡"),t("li",null,'3. 绑定后子卡状态变为"已绑定",不再独立消耗额度'),t("li",null,"4. 消耗链按顺序使用,主卡额度耗尽后自动使用下一张子卡")],-1)])]),_:1})]),_:1})):g("",!0)],64)),n(a(Ee),{open:L.value,"onUpdate:open":e[6]||(e[6]=l=>L.value=l)},{default:i(()=>[n(a(Ce),{class:"sm:max-w-md"},{default:i(()=>[n(a($e),null,{default:i(()=>[n(a(qe),{class:"flex items-center gap-2"},{default:i(()=>[n(a(H),{class:"h-5 w-5 text-amber-500"}),e[45]||(e[45]=u(" 确认解绑 ",-1))]),_:1}),n(a(je),null,{default:i(()=>[e[46]||(e[46]=u(" 确定要解绑子卡 ",-1)),t("span",ta,d(Y.value),1),e[47]||(e[47]=u(" 吗?解绑后该卡将恢复为独立卡。 ",-1))]),_:1})]),_:1}),n(a(Ie),{class:"gap-2 sm:gap-3"},{default:i(()=>[n(a(k),{variant:"outline",disabled:B.value,onClick:e[5]||(e[5]=l=>L.value=!1)},{default:i(()=>[...e[48]||(e[48]=[u("取消",-1)])]),_:1},8,["disabled"]),n(a(k),{variant:"destructive",disabled:B.value,onClick:Le},{default:i(()=>[B.value?(r(),v(a(K),{key:0,class:"h-4 w-4 mr-2 animate-spin"})):g("",!0),e[49]||(e[49]=u(" 确认解绑 ",-1))]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1},8,["open"]),n(a(Ee),{open:N.value,"onUpdate:open":e[8]||(e[8]=l=>N.value=l)},{default:i(()=>[n(a(Ce),{class:"sm:max-w-md"},{default:i(()=>[n(a($e),null,{default:i(()=>[n(a(qe),{class:"flex items-center gap-2"},{default:i(()=>[n(a(H),{class:"h-5 w-5 text-amber-500"}),e[50]||(e[50]=u(" 确认解绑 ",-1))]),_:1}),n(a(je),null,{default:i(()=>[e[51]||(e[51]=u(" 确定要从主卡 ",-1)),t("span",sa,d(te.value),1),e[52]||(e[52]=u(" 解绑吗?解绑后此卡将恢复为独立卡。 ",-1))]),_:1})]),_:1}),n(a(Ie),{class:"gap-2 sm:gap-3"},{default:i(()=>[n(a(k),{variant:"outline",disabled:I.value,onClick:e[7]||(e[7]=l=>N.value=!1)},{default:i(()=>[...e[53]||(e[53]=[u("取消",-1)])]),_:1},8,["disabled"]),n(a(k),{variant:"destructive",disabled:I.value,onClick:Ne},{default:i(()=>[I.value?(r(),v(a(K),{key:0,class:"h-4 w-4 mr-2 animate-spin"})):g("",!0),e[54]||(e[54]=u(" 确认解绑 ",-1))]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1},8,["open"])])}}});export{ga as default};
|
|
21
|
+
*/const De=Z("UnlinkIcon",[["path",{d:"m18.84 12.25 1.72-1.71h-.02a5.004 5.004 0 0 0-.12-7.07 5.006 5.006 0 0 0-6.95 0l-1.72 1.71",key:"yqzxt4"}],["path",{d:"m5.17 11.75-1.71 1.71a5.004 5.004 0 0 0 .12 7.07 5.006 5.006 0 0 0 6.95 0l1.71-1.71",key:"4qinb0"}],["line",{x1:"8",x2:"8",y1:"2",y2:"5",key:"1041cp"}],["line",{x1:"2",x2:"5",y1:"8",y2:"8",key:"14m1p5"}],["line",{x1:"16",x2:"16",y1:"19",y2:"22",key:"rzdirn"}],["line",{x1:"19",x2:"22",y1:"16",y2:"16",key:"ox905f"}]]),ct={class:"max-w-7xl mx-auto space-y-6"},mt={key:0,class:"flex items-center justify-center py-20"},ft={class:"mx-auto max-w-md text-center space-y-4"},vt={class:"w-14 h-14 rounded-2xl bg-red-500/10 flex items-center justify-center mx-auto"},pt={class:"space-y-2"},xt={class:"text-sm text-muted-foreground"},bt={key:0,class:"rounded-lg border border-blue-200 dark:border-blue-500/20 bg-blue-50 dark:bg-blue-500/5 p-4"},gt={class:"flex gap-3"},_t={class:"shrink-0 mt-0.5"},yt={class:"text-sm"},ht={class:"font-medium text-blue-800 dark:text-blue-400"},kt={class:"font-mono"},wt={key:1,class:"rounded-lg border border-red-200 dark:border-red-500/20 bg-red-50 dark:bg-red-500/5 p-4"},Ct={class:"flex gap-3"},$t={class:"shrink-0 mt-0.5"},qt={key:2,class:"rounded-lg border border-amber-200 dark:border-amber-500/20 bg-amber-50 dark:bg-amber-500/5 p-4"},jt={class:"flex gap-3"},It={class:"shrink-0 mt-0.5"},Et={class:"flex items-center gap-2 text-base font-semibold"},Pt={class:"w-8 h-8 rounded-lg bg-primary/10 flex items-center justify-center"},Kt={class:"grid grid-cols-2 lg:grid-cols-4 gap-4"},Dt={class:"rounded-xl border border-border/60 bg-muted/20 p-4"},St={class:"flex items-center justify-between mb-2"},Ut={class:"relative flex items-center justify-center"},Bt={class:"w-10 h-10 -rotate-90"},Mt={class:"absolute text-[9px] font-bold text-primary"},At={class:"text-lg font-bold tabular-nums"},zt={class:"text-xs text-muted-foreground mt-0.5"},Vt={class:"rounded-xl border border-border/60 bg-muted/20 p-4"},Lt={class:"flex items-center justify-between mb-2"},Nt={class:"w-10 h-10 rounded-lg bg-emerald-500/10 flex items-center justify-center"},Rt={class:"text-lg font-bold tabular-nums"},Tt={class:"text-sm text-muted-foreground font-normal"},Ht={class:"rounded-xl border border-border/60 bg-muted/20 p-4"},Xt={class:"flex items-center justify-between mb-2"},Ft={class:"w-10 h-10 rounded-lg bg-amber-500/10 flex items-center justify-center"},Gt={class:"text-lg font-bold tabular-nums"},Jt={class:"text-xs text-muted-foreground mt-0.5"},Qt={class:"rounded-xl border border-border/60 bg-muted/20 p-4"},Ot={class:"flex items-center justify-between mb-2"},Wt={class:"w-10 h-10 rounded-lg bg-blue-500/10 flex items-center justify-center"},Zt={class:"text-lg font-bold tabular-nums"},Yt={class:"text-xs text-muted-foreground mt-0.5"},es={class:"space-y-2"},ts={class:"flex items-center justify-between text-sm"},ss={class:"font-semibold tabular-nums"},as={class:"flex items-center gap-2 text-base font-semibold"},ls={class:"w-8 h-8 rounded-lg bg-primary/10 flex items-center justify-center"},ns={class:"relative"},os={class:"rounded-xl border border-border/60 bg-muted/20 p-4"},is={class:"flex items-start gap-3"},rs={class:"flex-1 min-w-0"},ds={class:"flex items-center gap-2 flex-wrap"},us={class:"font-mono text-sm font-medium"},cs={class:"mt-2 flex items-center gap-2 flex-wrap"},ms={class:"truncate"},fs={class:"border-t border-border/30 mt-2 pt-2 space-y-1.5"},vs={class:"flex items-center justify-between gap-2 text-xs"},ps={class:"text-muted-foreground"},xs={class:"flex items-center gap-3"},bs={class:"flex-1"},gs={class:"text-xs font-medium tabular-nums text-muted-foreground"},_s={key:0},ys={class:"flex items-start gap-3"},hs={class:"w-7 h-7 rounded-full bg-muted flex items-center justify-center text-xs font-bold text-muted-foreground shrink-0 mt-0.5"},ks={class:"flex-1 min-w-0"},ws={class:"flex items-center justify-between gap-2"},Cs={class:"flex items-center gap-2 flex-wrap min-w-0"},$s={class:"font-mono text-sm"},qs={class:"flex items-center shrink-0"},js={class:"flex items-center gap-0.5"},Is={class:"mt-2 flex items-center gap-2 flex-wrap"},Es={class:"truncate"},Ps={key:0,class:"border-t border-border/30 mt-2 pt-2"},Ks={key:1,class:"border-t border-border/30 mt-2 pt-2 space-y-1.5"},Ds={class:"flex items-center justify-between gap-2 text-xs"},Ss={class:"text-muted-foreground"},Us={class:"flex items-center gap-3"},Bs={class:"flex-1"},Ms={class:"text-xs font-medium tabular-nums text-muted-foreground"},As={key:1,class:"text-xs text-muted-foreground flex items-center gap-1.5 mt-3 ml-10"},zs={class:"text-center"},Vs={class:"w-14 h-14 rounded-2xl bg-primary/10 flex items-center justify-center mx-auto mb-3"},Ls={class:"flex items-center gap-2 text-base font-semibold"},Ns={class:"w-8 h-8 rounded-lg bg-blue-500/10 flex items-center justify-center"},Rs={class:"rounded-xl border border-blue-200/60 dark:border-blue-500/20 bg-blue-50/50 dark:bg-blue-500/5 p-4"},Ts={class:"font-mono text-base font-semibold"},Hs={key:0,class:"mt-2 text-xs leading-5 text-amber-700 dark:text-amber-300"},Xs={class:"flex items-center justify-between gap-3 rounded-xl border border-border/60 bg-background/70 p-4"},Fs={class:"flex items-center gap-2 text-base font-semibold"},Gs={class:"w-8 h-8 rounded-lg bg-emerald-500/10 flex items-center justify-center"},Js={class:"flex gap-2"},Qs={class:"relative flex-1"},Os={key:0,class:"space-y-3"},Ws={class:"text-sm font-medium text-muted-foreground"},Zs={class:"flex flex-wrap gap-2"},Ys={class:"font-mono text-xs"},ea=["onClick"],ta={class:"font-mono font-medium"},sa={class:"font-mono font-medium"},Se=10,ga=Xe({__name:"CardBind",setup(aa){const F=Je(),C=_(null),A=_(!1),z=_(null),V=_(""),G=_(!1),y=_([]),U=_(!1),B=_(!1),j=_(!1),I=_(!1),L=_(!1),J=_(null),Y=_(""),N=_(!1),Q=_(!1),$=h(()=>F.apiKeyInfo),ee=h(()=>{var s;return((s=C.value)==null?void 0:s.role)||"independent"}),p=h(()=>{var s;return((s=C.value)==null?void 0:s.chain)||[]}),te=h(()=>{var s;return((s=C.value)==null?void 0:s.primary_key_preview)||""}),Ue=h(()=>{var s;return!!((s=C.value)!=null&&s.orphaned_primary)}),oe=h(()=>!!z.value&&!C.value),ie=h(()=>ee.value==="independent"),R=h(()=>ee.value==="primary"),re=h(()=>ee.value==="child"),E=h(()=>R.value?p.value.slice(1):[]),de=h(()=>y.value.length<Se),Be=h(()=>{var s,e;return!oe.value&&(ie.value||R.value)&&((s=$.value)==null?void 0:s.status)!=="disabled"&&((e=$.value)==null?void 0:e.status)!=="merged"}),b=h(()=>{var s;return!R.value||p.value.length===0?null:Qe(p.value,((s=$.value)==null?void 0:s.billing_type)||"quota")});function ue(s){return s==="active"?"border-emerald-200 bg-emerald-50 text-emerald-700 dark:border-emerald-800 dark:bg-emerald-950 dark:text-emerald-300":s==="disabled"?"border-red-200 bg-red-50 text-red-700 dark:border-red-800 dark:bg-red-950 dark:text-red-300":"border-border bg-muted text-muted-foreground"}function ce(s){return s.status_label?s.status_label:{active:"正常",disabled:"已禁用"}[s.status]||s.status}function me(s){var c;const e=s.billing_type||((c=$.value)==null?void 0:c.billing_type)||"";if(e==="duration"){const m=s.daily_remaining??0,l=s.daily_quota||0;let o=`今日剩余 ${M(m)} / ${M(l)} 每日`;const f=ae(s.quota_pack_expires_at)&&s.quota_pack_remaining||0;return f>0&&(o+=` · 配额包 ${M(f)}`),o}if(e==="quota"){const m=s.remaining_quota??0,l=s.total_quota??0;let o=`剩余 ${M(m)} / ${M(l)}`;const f=ae(s.quota_pack_expires_at)&&s.quota_pack_remaining||0;return f>0&&(o+=` · 配额包 ${M(f)}`),o}if(e==="count"){const m=s.remaining_requests??s.remaining_count??0,l=s.max_requests??0;let o=`剩余 ${m} / ${l} 次`;const f=ae(s.requests_pack_expires_at)&&s.requests_pack_remaining||0;return f>0&&(o+=` · 请求包 ${f} 次`),o}return"-"}function O(s){if(s.total_quota!==void 0&&s.total_quota>0){const e=s.remaining_quota||0;return Math.round((s.total_quota-e)/s.total_quota*100)}if(s.max_requests!==void 0&&s.max_requests>0){const e=s.remaining_requests??s.remaining_count??0;return Math.round((s.max_requests-e)/s.max_requests*100)}if(s.daily_quota!==void 0&&s.daily_quota>0){const e=s.daily_remaining??0;return Math.round((s.daily_quota-e)/s.daily_quota*100)}return 0}function fe(s){if(s.expires_at){const e=ye(s.expires_at);return e==="已过期"?"已过期":`${he(s.expires_at,"yyyy-MM-dd")} 到期 (${e})`}return s.validity_days&&s.validity_days>0?`${s.validity_days} 天(激活后计算)`:"永久有效"}function ve(s){if(!s.expires_at)return!1;const e=new Date(s.expires_at).getTime()-Date.now();return e>0&&e<7*86400*1e3}function pe(s){return s.status_label==="未激活"||!s.activated&&s.status!=="active"}function W(s){return Ze(s.service_type||"",s.sub_service_type_name)}async function Me({isLatest:s}){var e,c,m,l;A.value=!0;try{const o=await X.getBindInfo();if(!s())return;z.value=null,C.value=o}catch(o){if(s()){const f=((c=(e=o==null?void 0:o.response)==null?void 0:e.data)==null?void 0:c.message)||((l=(m=o==null?void 0:o.response)==null?void 0:m.data)==null?void 0:l.error)||(o==null?void 0:o.message)||"获取合并信息失败";z.value=f,w.error("加载失败",f)}}finally{s()&&(A.value=!1)}}const{reload:T}=st(Me,{resetBeforeLoad:s=>{A.value=!0,(s==="initial"||s==="active-key-change"||s==="manual-refresh")&&(C.value=null),z.value=null}});function xe(){const s=V.value.trim();if(!s)return;if(y.value.includes(s)){w.warning("该子卡已在列表中");return}const e=F.activeKey;if(e&&e.key===s){w.error("不能合并自己");return}if(!de.value){w.warning(`单次最多合并 ${Se} 张卡`);return}y.value.push(s),V.value=""}function Ae(s){y.value.splice(s,1)}async function ze(){var s,e,c,m;if(y.value.length!==0){U.value=!0;try{const l=await X.cardBind(y.value);w.success("合并成功",l.message||`成功合并 ${y.value.length} 张卡`),y.value=[],await F.fetchInfo(),await T("bind-mutation")}catch(l){const o=((e=(s=l==null?void 0:l.response)==null?void 0:s.data)==null?void 0:e.message)||((m=(c=l==null?void 0:l.response)==null?void 0:c.data)==null?void 0:m.error)||(l==null?void 0:l.message)||"合并失败";w.error("合并失败",o)}finally{U.value=!1}}}function Ve(s){J.value=s.id,Y.value=s.key_preview,L.value=!0}async function Le(){var s,e,c,m;if(J.value){B.value=!0;try{const l=await X.cardUnbind([J.value]);w.success("操作成功",l.message||"已取消"),L.value=!1,J.value=null,Y.value="",await T("unbind-mutation")}catch(l){const o=((e=(s=l==null?void 0:l.response)==null?void 0:s.data)==null?void 0:e.message)||((m=(c=l==null?void 0:l.response)==null?void 0:c.data)==null?void 0:m.error)||(l==null?void 0:l.message)||"操作失败";w.error("操作失败",o)}finally{B.value=!1}}}async function Ne(){var s,e,c,m;I.value=!0;try{const l=await X.cardUnbindSelf();w.success("操作成功",l.message||"叠卡合并后不能解绑"),N.value=!1,await F.fetchInfo(),await T("unbind-self-mutation")}catch(l){const o=((e=(s=l==null?void 0:l.response)==null?void 0:s.data)==null?void 0:e.message)||((m=(c=l==null?void 0:l.response)==null?void 0:c.data)==null?void 0:m.error)||(l==null?void 0:l.message)||"操作失败";w.error("操作失败",o)}finally{I.value=!1}}async function Re(s){if(s<=0||j.value)return;const e=[...E.value],c=e[s];e[s]=e[s-1],e[s-1]=c,await be(e)}async function Te(s){if(s>=E.value.length-1||j.value)return;const e=[...E.value],c=e[s];e[s]=e[s+1],e[s+1]=c,await be(e)}async function be(s){var e,c,m,l;j.value=!0;try{const o=s.map(f=>f.id);await X.cardBindReorder(o),await T("reorder-mutation")}catch(o){const f=((c=(e=o==null?void 0:o.response)==null?void 0:e.data)==null?void 0:c.message)||((l=(m=o==null?void 0:o.response)==null?void 0:m.data)==null?void 0:l.error)||(o==null?void 0:o.message)||"操作失败";w.error("操作失败",f)}finally{j.value=!1}}function He(s){return s.length<=8?s:s.substring(0,6)+"****"+s.substring(s.length-4)}return(s,e)=>{var c,m;return r(),x("div",ct,[e[55]||(e[55]=t("div",{class:"space-y-1"},[t("h1",{class:"text-2xl font-semibold tracking-tight"},"叠卡"),t("p",{class:"text-sm text-muted-foreground"}," 把未激活子卡合并到当前卡,额度或时长一次性转入 ")],-1)),A.value&&!C.value?(r(),x("div",mt,[n(a(K),{class:"h-6 w-6 animate-spin text-muted-foreground"})])):oe.value?(r(),v(a(S),{key:1,class:"border-border/60 bg-card/80 backdrop-blur-xl"},{default:i(()=>[n(a(D),{class:"p-8"},{default:i(()=>[t("div",ft,[t("div",vt,[n(a(H),{class:"h-7 w-7 text-red-500"})]),t("div",pt,[e[9]||(e[9]=t("h3",{class:"text-base font-semibold"},"合并信息加载失败",-1)),t("p",xt,d(z.value),1),e[10]||(e[10]=t("p",{class:"text-xs text-muted-foreground"}," 当前无法确认这张卡的叠卡状态,已暂时隐藏合并入口,请稍后重试。 ",-1))]),n(a(k),{variant:"outline",onClick:e[0]||(e[0]=l=>a(T)("manual-refresh"))},{default:i(()=>[A.value?(r(),v(a(K),{key:0,class:"h-4 w-4 mr-2 animate-spin"})):g("",!0),e[11]||(e[11]=u(" 重新加载 ",-1))]),_:1})])]),_:1})]),_:1})):(r(),x(se,{key:2},[re.value?(r(),x("div",bt,[t("div",gt,[t("div",_t,[n(a(Oe),{class:"h-5 w-5 text-blue-500"})]),t("div",yt,[t("p",ht,[e[12]||(e[12]=u(" 此卡已合并到主卡 ",-1)),t("span",kt,d(te.value),1),e[13]||(e[13]=u(",已合并到主卡 ",-1))]),e[14]||(e[14]=t("p",{class:"mt-1 text-blue-700/80 dark:text-blue-400/70"}," 子卡合并后会注销,额度或时长已转入主卡。 ",-1))])])])):g("",!0),((c=$.value)==null?void 0:c.status)==="disabled"?(r(),x("div",wt,[t("div",Ct,[t("div",$t,[n(a(H),{class:"h-5 w-5 text-red-500"})]),e[15]||(e[15]=t("div",{class:"text-sm"},[t("p",{class:"font-medium text-red-800 dark:text-red-400"}," 当前 Key 已被禁用 "),t("p",{class:"mt-1 text-red-700/80 dark:text-red-400/70"}," 已禁用的 Key 无法进行叠卡合并。 ")],-1))])])):((m=$.value)==null?void 0:m.status)==="expired"?(r(),x("div",qt,[t("div",jt,[t("div",It,[n(a(H),{class:"h-5 w-5 text-amber-500"})]),e[16]||(e[16]=t("div",{class:"text-sm"},[t("p",{class:"font-medium text-amber-800 dark:text-amber-400"}," 当前 Key 已过期 "),t("p",{class:"mt-1 text-amber-700/80 dark:text-amber-400/70"}," 可通过合并未激活子卡进行续期。 ")],-1))])])):g("",!0),R.value&&b.value?(r(),v(a(S),{key:3,class:"border-border/60 bg-card/80 backdrop-blur-xl"},{default:i(()=>[n(a(D),{class:"p-6 space-y-5"},{default:i(()=>{var l,o;return[t("div",Et,[t("div",Pt,[n(a(Pe),{class:"h-4 w-4 text-primary"})]),e[17]||(e[17]=u(" 聚合资源概览 ",-1))]),t("div",Kt,[t("div",Dt,[t("div",St,[e[19]||(e[19]=t("p",{class:"text-xs text-muted-foreground font-medium"},"总额度",-1)),t("div",Ut,[(r(),x("svg",Bt,[e[18]||(e[18]=t("circle",{cx:"20",cy:"20",r:"16",stroke:"currentColor","stroke-width":"3",fill:"none",class:"text-primary/15"},null,-1)),t("circle",{cx:"20",cy:"20",r:"16",stroke:"currentColor","stroke-width":"3",fill:"none","stroke-linecap":"round",class:"text-primary",style:Fe({strokeDasharray:`${b.value.usagePercent*1.005} 100.5`,transition:"stroke-dasharray 600ms ease"})},null,4)])),t("span",Mt,d(b.value.usagePercent)+"%",1)])]),t("p",At,d(a(_e)(b.value.totalRemaining,((l=$.value)==null?void 0:l.billing_type)||"")),1),t("p",zt," / "+d(a(_e)(b.value.totalCapacity,((o=$.value)==null?void 0:o.billing_type)||"")),1)]),t("div",Vt,[t("div",Lt,[e[20]||(e[20]=t("p",{class:"text-xs text-muted-foreground font-medium"}," 活跃卡数 ",-1)),t("div",Nt,[n(a(at),{class:"h-4 w-4 text-emerald-500"})])]),t("p",Rt,[u(d(b.value.activeCount),1),t("span",Tt," / "+d(b.value.totalCount)+" 张",1)]),e[21]||(e[21]=t("p",{class:"text-xs text-muted-foreground mt-0.5"},"活跃 / 总数",-1))]),t("div",Ht,[t("div",Xt,[e[22]||(e[22]=t("p",{class:"text-xs text-muted-foreground font-medium"}," 最远到期 ",-1)),t("div",Ft,[n(a(lt),{class:"h-4 w-4 text-amber-500"})])]),t("p",Gt,d(b.value.latestExpiry?a(ye)(b.value.latestExpiry):b.value.latestValidityDays?`${b.value.latestValidityDays}天`:"永久"),1),t("p",Jt,d(b.value.latestExpiry?a(he)(b.value.latestExpiry,"yyyy-MM-dd HH:mm:ss"):b.value.latestValidityDays?"激活后计算":"无过期时间"),1)]),t("div",Qt,[t("div",Ot,[e[23]||(e[23]=t("p",{class:"text-xs text-muted-foreground font-medium"},"合并记录",-1)),t("div",Wt,[n(a(ut),{class:"h-4 w-4 text-blue-500"})])]),t("p",Zt,[u(d(p.value.length),1),e[24]||(e[24]=t("span",{class:"text-sm text-muted-foreground font-normal"}," 张卡",-1))]),t("p",Yt," 1 主卡 + "+d(E.value.length)+" 子卡 ",1)])]),t("div",es,[t("div",ts,[e[25]||(e[25]=t("span",{class:"text-muted-foreground"},"使用率",-1)),t("span",ss,d(b.value.usagePercent)+"%",1)]),n(a(le),{"model-value":b.value.usagePercent,class:"h-2"},null,8,["model-value"])])]}),_:1})]),_:1})):g("",!0),R.value&&p.value.length>0?(r(),v(a(S),{key:4,class:"border-border/60 bg-card/80 backdrop-blur-xl"},{default:i(()=>[n(a(D),{class:"p-6 space-y-4"},{default:i(()=>[t("div",null,[t("div",as,[t("div",ls,[n(a(ne),{class:"h-4 w-4 text-primary"})]),e[26]||(e[26]=u(" 合并记录 ",-1))]),e[27]||(e[27]=t("p",{class:"text-sm text-muted-foreground mt-1 ml-10"}," 子卡合并后会注销,不再独立消耗额度 ",-1))]),t("div",ns,[t("div",os,[t("div",is,[e[29]||(e[29]=t("div",{class:"w-7 h-7 rounded-full bg-muted flex items-center justify-center text-xs font-bold text-muted-foreground shrink-0 mt-0.5"}," 1 ",-1)),t("div",rs,[t("div",ds,[t("span",us,d(p.value[0].key_preview),1),n(a(q),{variant:"outline",class:"text-[10px] px-1.5 py-0 h-[18px]"},{default:i(()=>[...e[28]||(e[28]=[u(" 主卡 ",-1)])]),_:1}),n(a(q),{variant:"outline",class:P(["text-[10px] px-1.5 py-0 h-[18px]",ue(p.value[0].status)])},{default:i(()=>[u(d(ce(p.value[0])),1)]),_:1},8,["class"])]),t("div",cs,[n(a(q),{variant:"outline",class:P(["max-w-full text-[10px] px-1.5 py-0 h-[18px]",a(ke)(p.value[0].service_type||"").badge]),title:W(p.value[0])},{default:i(()=>[t("span",ms,d(W(p.value[0])),1)]),_:1},8,["class","title"]),n(a(q),{variant:"outline",class:"text-[10px] px-1.5 py-0 h-[18px]"},{default:i(()=>[u(d(a(we)(p.value[0].billing_type||"")),1)]),_:1})]),t("div",fs,[t("div",vs,[t("span",ps,d(me(p.value[0])),1),t("span",{class:P(ve(p.value[0])?"text-red-500":"text-muted-foreground")},d(fe(p.value[0])),3)]),t("div",xs,[t("div",bs,[n(a(le),{"model-value":O(p.value[0]),class:"h-1.5"},null,8,["model-value"])]),t("span",gs,d(O(p.value[0]))+"%",1)])])])])]),E.value.length>0?(r(),x("div",_s,[(r(!0),x(se,null,ge(E.value,(l,o)=>(r(),x("div",{key:l.id},[e[32]||(e[32]=t("div",{class:"border-l-2 border-dashed border-primary/30 h-3 ml-4"},null,-1)),t("div",{class:P(["rounded-xl border p-4 transition-colors",pe(l)?"border-dashed border-border/50 bg-muted/10":"border-border/60 bg-muted/20 hover:bg-muted/30"])},[t("div",ys,[t("div",hs,d(o+2),1),t("div",ks,[t("div",ws,[t("div",Cs,[t("span",$s,d(l.key_preview),1),n(a(q),{variant:"outline",class:"text-[10px] px-1.5 py-0 h-[18px]"},{default:i(()=>[...e[30]||(e[30]=[u(" 子卡 ",-1)])]),_:1}),n(a(q),{variant:"outline",class:P(["text-[10px] px-1.5 py-0 h-[18px]",ue(l.status)])},{default:i(()=>[u(d(ce(l)),1)]),_:2},1032,["class"])]),t("div",qs,[t("div",js,[n(a(k),{variant:"ghost",size:"icon",class:"h-7 w-7",disabled:o===0||j.value,onClick:f=>Re(o),title:"合并记录不可排序"},{default:i(()=>[n(a(dt),{class:"h-3.5 w-3.5"})]),_:1},8,["disabled","onClick"]),n(a(k),{variant:"ghost",size:"icon",class:"h-7 w-7",disabled:o===E.value.length-1||j.value,onClick:f=>Te(o),title:"合并记录不可排序"},{default:i(()=>[n(a(rt),{class:"h-3.5 w-3.5"})]),_:1},8,["disabled","onClick"])]),n(a(tt),{orientation:"vertical",class:"mx-1.5 h-4"}),n(a(k),{variant:"ghost",size:"icon",class:"h-7 w-7 text-red-500 hover:text-red-600 hover:bg-red-50 dark:hover:bg-red-500/10",disabled:B.value,onClick:f=>Ve(l),title:"合并后不可解绑"},{default:i(()=>[n(a(De),{class:"h-3.5 w-3.5"})]),_:1},8,["disabled","onClick"])])]),t("div",Is,[n(a(q),{variant:"outline",class:P(["max-w-full text-[10px] px-1.5 py-0 h-[18px]",a(ke)(l.service_type||"").badge]),title:W(l)},{default:i(()=>[t("span",Es,d(W(l)),1)]),_:2},1032,["class","title"]),n(a(q),{variant:"outline",class:"text-[10px] px-1.5 py-0 h-[18px]"},{default:i(()=>[u(d(a(we)(l.billing_type||"")),1)]),_:2},1024)]),pe(l)?(r(),x("div",Ps,[...e[31]||(e[31]=[t("p",{class:"text-xs text-muted-foreground"}," 排到时自动激活,开始计算有效期 ",-1)])])):(r(),x("div",Ks,[t("div",Ds,[t("span",Ss,d(me(l)),1),t("span",{class:P(ve(l)?"text-red-500":"text-muted-foreground")},d(fe(l)),3)]),t("div",Us,[t("div",Bs,[n(a(le),{"model-value":O(l),class:"h-1.5"},null,8,["model-value"])]),t("span",Ms,d(O(l))+"%",1)])]))])])],2)]))),128))])):g("",!0),j.value?(r(),x("p",As,[n(a(K),{class:"h-3.5 w-3.5 animate-spin"}),e[33]||(e[33]=u(" 正在更新排序... ",-1))])):g("",!0)])]),_:1})]),_:1})):g("",!0),ie.value?(r(),v(a(S),{key:5,class:"border-border/60 bg-card/80 backdrop-blur-xl"},{default:i(()=>[n(a(D),{class:"p-8"},{default:i(()=>[t("div",zs,[t("div",Vs,[n(a(Pe),{class:"h-7 w-7 text-primary/60"})]),e[34]||(e[34]=t("h3",{class:"text-base font-semibold"},"独立卡模式",-1)),e[35]||(e[35]=t("p",{class:"text-sm text-muted-foreground mt-1"}," 尚未合并任何子卡,可在下方添加未激活子卡进行叠加充值 ",-1))])]),_:1})]),_:1})):g("",!0),re.value?(r(),v(a(S),{key:6,class:"border-border/60 bg-card/80 backdrop-blur-xl"},{default:i(()=>[n(a(D),{class:"p-6 space-y-4"},{default:i(()=>[t("div",Ls,[t("div",Ns,[n(a(ne),{class:"h-4 w-4 text-blue-500"})]),e[36]||(e[36]=u(" 合并信息 ",-1))]),t("div",Rs,[e[37]||(e[37]=t("p",{class:"text-sm text-muted-foreground mb-1"},"已合并到的主卡",-1)),t("p",Ts,d(te.value),1),Ue.value?(r(),x("p",Hs," 主卡记录已不存在,此合并记录仅保留用于追溯。 ")):g("",!0)]),t("div",Xs,[e[39]||(e[39]=t("div",{class:"space-y-1"},[t("p",{class:"text-sm font-medium text-foreground"},"不支持解绑"),t("p",{class:"text-xs leading-5 text-muted-foreground"}," 叠卡合并后子卡已注销,额度或时长已转入主卡。 ")],-1)),n(a(k),{variant:"secondary",size:"sm",class:"shrink-0",disabled:I.value,onClick:e[1]||(e[1]=l=>N.value=!0)},{default:i(()=>[I.value?(r(),v(a(K),{key:0,class:"h-4 w-4 animate-spin"})):(r(),v(a(De),{key:1,class:"h-4 w-4"})),e[38]||(e[38]=u(" 不支持解绑 ",-1))]),_:1},8,["disabled"])])]),_:1})]),_:1})):g("",!0),Be.value?(r(),v(a(S),{key:7,class:"border-border/60 bg-card/80 backdrop-blur-xl"},{default:i(()=>[n(a(D),{class:"p-6 space-y-4"},{default:i(()=>[t("div",null,[t("div",Fs,[t("div",Gs,[n(a(Ke),{class:"h-4 w-4 text-emerald-500"})]),e[40]||(e[40]=u(" 合并子卡 ",-1))]),e[41]||(e[41]=t("p",{class:"text-sm text-muted-foreground mt-1 ml-10"}," 输入未激活子卡 API Key 进行合并,子卡必须与主卡的服务类型、子服务类型和计费方式一致 ",-1))]),t("div",Js,[t("div",Qs,[n(a(Ye),{modelValue:V.value,"onUpdate:modelValue":e[2]||(e[2]=l=>V.value=l),type:G.value?"text":"password",placeholder:"请输入子卡 API Key",autocomplete:"off",spellcheck:"false",class:"pr-9 font-mono text-sm",disabled:U.value,onKeydown:Ge(xe,["enter"])},null,8,["modelValue","type","disabled"]),t("button",{type:"button",class:"absolute right-2.5 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground transition-colors",onClick:e[3]||(e[3]=l=>G.value=!G.value)},[G.value?(r(),v(a(nt),{key:0,class:"h-4 w-4"})):(r(),v(a(et),{key:1,class:"h-4 w-4"}))])]),n(a(k),{disabled:!V.value.trim()||!de.value||U.value,onClick:xe},{default:i(()=>[n(a(Ke),{class:"h-4 w-4 mr-1"}),e[42]||(e[42]=u(" 添加 ",-1))]),_:1},8,["disabled"])]),y.value.length>0?(r(),x("div",Os,[t("p",Ws," 待合并("+d(y.value.length)+" 张) ",1),t("div",Zs,[(r(!0),x(se,null,ge(y.value,(l,o)=>(r(),x("div",{key:o,class:"inline-flex items-center gap-1.5 rounded-full border border-border/60 bg-muted/30 px-3 py-1 text-sm"},[t("span",Ys,d(He(l)),1),t("button",{type:"button",class:"text-muted-foreground hover:text-red-500 transition-colors",onClick:f=>Ae(o)},[n(a(We),{class:"h-3 w-3"})],8,ea)]))),128))])])):g("",!0),y.value.length>0?(r(),v(a(k),{key:1,class:"w-full",disabled:U.value,onClick:ze},{default:i(()=>[U.value?(r(),v(a(K),{key:0,class:"h-4 w-4 mr-2 animate-spin"})):(r(),v(a(ne),{key:1,class:"h-4 w-4 mr-2"})),u(" 合并 "+d(y.value.length)+" 张子卡 ",1)]),_:1},8,["disabled"])):g("",!0)]),_:1})]),_:1})):g("",!0),t("button",{type:"button",class:"flex items-center gap-1.5 text-sm text-muted-foreground hover:text-foreground transition-colors",onClick:e[4]||(e[4]=l=>Q.value=!Q.value)},[Q.value?(r(),v(a(it),{key:1,class:"h-4 w-4"})):(r(),v(a(ot),{key:0,class:"h-4 w-4"})),e[43]||(e[43]=u(" 叠卡规则说明 ",-1))]),Q.value?(r(),v(a(S),{key:8,class:"border-border/40"},{default:i(()=>[n(a(D),{class:"p-5"},{default:i(()=>[...e[44]||(e[44]=[t("ul",{class:"space-y-2 text-sm text-muted-foreground"},[t("li",null,"1. 子卡必须与主卡类型(服务类型、子服务类型、计费方式)一致"),t("li",null,"2. 子卡必须未激活,不能是已激活、已过期、已禁用或已注销的卡"),t("li",null,"3. 合并后子卡会注销,额度或时长一次性转入主卡"),t("li",null,"4. 周期卡按子卡总价值折算为主卡可用天数,统一按北京时间计算")],-1)])]),_:1})]),_:1})):g("",!0)],64)),n(a(Ee),{open:L.value,"onUpdate:open":e[6]||(e[6]=l=>L.value=l)},{default:i(()=>[n(a(Ce),{class:"sm:max-w-md"},{default:i(()=>[n(a($e),null,{default:i(()=>[n(a(qe),{class:"flex items-center gap-2"},{default:i(()=>[n(a(H),{class:"h-5 w-5 text-amber-500"}),e[45]||(e[45]=u(" 不支持解绑 ",-1))]),_:1}),n(a(je),null,{default:i(()=>[e[46]||(e[46]=u(" 子卡合并后已注销,不能解绑: ",-1)),t("span",ta,d(Y.value),1),e[47]||(e[47]=u("。 ",-1))]),_:1})]),_:1}),n(a(Ie),{class:"gap-2 sm:gap-3"},{default:i(()=>[n(a(k),{variant:"outline",disabled:B.value,onClick:e[5]||(e[5]=l=>L.value=!1)},{default:i(()=>[...e[48]||(e[48]=[u("取消",-1)])]),_:1},8,["disabled"]),n(a(k),{variant:"destructive",disabled:B.value,onClick:Le},{default:i(()=>[B.value?(r(),v(a(K),{key:0,class:"h-4 w-4 mr-2 animate-spin"})):g("",!0),e[49]||(e[49]=u(" 不支持解绑 ",-1))]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1},8,["open"]),n(a(Ee),{open:N.value,"onUpdate:open":e[8]||(e[8]=l=>N.value=l)},{default:i(()=>[n(a(Ce),{class:"sm:max-w-md"},{default:i(()=>[n(a($e),null,{default:i(()=>[n(a(qe),{class:"flex items-center gap-2"},{default:i(()=>[n(a(H),{class:"h-5 w-5 text-amber-500"}),e[50]||(e[50]=u(" 不支持解绑 ",-1))]),_:1}),n(a(je),null,{default:i(()=>[e[51]||(e[51]=u(" 子卡已经合并到主卡 ",-1)),t("span",sa,d(te.value),1),e[52]||(e[52]=u(",不能再解绑。 ",-1))]),_:1})]),_:1}),n(a(Ie),{class:"gap-2 sm:gap-3"},{default:i(()=>[n(a(k),{variant:"outline",disabled:I.value,onClick:e[7]||(e[7]=l=>N.value=!1)},{default:i(()=>[...e[53]||(e[53]=[u("取消",-1)])]),_:1},8,["disabled"]),n(a(k),{variant:"destructive",disabled:I.value,onClick:Ne},{default:i(()=>[I.value?(r(),v(a(K),{key:0,class:"h-4 w-4 mr-2 animate-spin"})):g("",!0),e[54]||(e[54]=u(" 不支持解绑 ",-1))]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1},8,["open"])])}}});export{ga as default};
|
|
@@ -18,4 +18,4 @@ import{j as Xe,r as _,d as h,x,A as t,D as v,H as n,u as a,E as i,F as se,z as g
|
|
|
18
18
|
*
|
|
19
19
|
* This source code is licensed under the ISC license.
|
|
20
20
|
* See the LICENSE file in the root directory of this source tree.
|
|
21
|
-
*/const De=Z("UnlinkIcon",[["path",{d:"m18.84 12.25 1.72-1.71h-.02a5.004 5.004 0 0 0-.12-7.07 5.006 5.006 0 0 0-6.95 0l-1.72 1.71",key:"yqzxt4"}],["path",{d:"m5.17 11.75-1.71 1.71a5.004 5.004 0 0 0 .12 7.07 5.006 5.006 0 0 0 6.95 0l1.71-1.71",key:"4qinb0"}],["line",{x1:"8",x2:"8",y1:"2",y2:"5",key:"1041cp"}],["line",{x1:"2",x2:"5",y1:"8",y2:"8",key:"14m1p5"}],["line",{x1:"16",x2:"16",y1:"19",y2:"22",key:"rzdirn"}],["line",{x1:"19",x2:"22",y1:"16",y2:"16",key:"ox905f"}]]),ct={class:"max-w-7xl mx-auto space-y-6"},mt={key:0,class:"flex items-center justify-center py-20"},ft={class:"mx-auto max-w-md text-center space-y-4"},vt={class:"w-14 h-14 rounded-2xl bg-red-500/10 flex items-center justify-center mx-auto"},pt={class:"space-y-2"},xt={class:"text-sm text-muted-foreground"},bt={key:0,class:"rounded-lg border border-blue-200 dark:border-blue-500/20 bg-blue-50 dark:bg-blue-500/5 p-4"},gt={class:"flex gap-3"},_t={class:"shrink-0 mt-0.5"},yt={class:"text-sm"},ht={class:"font-medium text-blue-800 dark:text-blue-400"},kt={class:"font-mono"},wt={key:1,class:"rounded-lg border border-red-200 dark:border-red-500/20 bg-red-50 dark:bg-red-500/5 p-4"},Ct={class:"flex gap-3"},$t={class:"shrink-0 mt-0.5"},qt={key:2,class:"rounded-lg border border-amber-200 dark:border-amber-500/20 bg-amber-50 dark:bg-amber-500/5 p-4"},jt={class:"flex gap-3"},It={class:"shrink-0 mt-0.5"},Et={class:"flex items-center gap-2 text-base font-semibold"},Pt={class:"w-8 h-8 rounded-lg bg-primary/10 flex items-center justify-center"},Kt={class:"grid grid-cols-2 lg:grid-cols-4 gap-4"},Dt={class:"rounded-xl border border-border/60 bg-muted/20 p-4"},St={class:"flex items-center justify-between mb-2"},Ut={class:"relative flex items-center justify-center"},Bt={class:"w-10 h-10 -rotate-90"},Mt={class:"absolute text-[9px] font-bold text-primary"},At={class:"text-lg font-bold tabular-nums"},zt={class:"text-xs text-muted-foreground mt-0.5"},Vt={class:"rounded-xl border border-border/60 bg-muted/20 p-4"},Lt={class:"flex items-center justify-between mb-2"},Nt={class:"w-10 h-10 rounded-lg bg-emerald-500/10 flex items-center justify-center"},Rt={class:"text-lg font-bold tabular-nums"},Tt={class:"text-sm text-muted-foreground font-normal"},Ht={class:"rounded-xl border border-border/60 bg-muted/20 p-4"},Xt={class:"flex items-center justify-between mb-2"},Ft={class:"w-10 h-10 rounded-lg bg-amber-500/10 flex items-center justify-center"},Gt={class:"text-lg font-bold tabular-nums"},Jt={class:"text-xs text-muted-foreground mt-0.5"},Qt={class:"rounded-xl border border-border/60 bg-muted/20 p-4"},Ot={class:"flex items-center justify-between mb-2"},Wt={class:"w-10 h-10 rounded-lg bg-blue-500/10 flex items-center justify-center"},Zt={class:"text-lg font-bold tabular-nums"},Yt={class:"text-xs text-muted-foreground mt-0.5"},es={class:"space-y-2"},ts={class:"flex items-center justify-between text-sm"},ss={class:"font-semibold tabular-nums"},as={class:"flex items-center gap-2 text-base font-semibold"},ls={class:"w-8 h-8 rounded-lg bg-primary/10 flex items-center justify-center"},ns={class:"relative"},os={class:"rounded-xl border border-border/60 bg-muted/20 p-4"},is={class:"flex items-start gap-3"},rs={class:"flex-1 min-w-0"},ds={class:"flex items-center gap-2 flex-wrap"},us={class:"font-mono text-sm font-medium"},cs={class:"mt-2 flex items-center gap-2 flex-wrap"},ms={class:"truncate"},fs={class:"border-t border-border/30 mt-2 pt-2 space-y-1.5"},vs={class:"flex items-center justify-between gap-2 text-xs"},ps={class:"text-muted-foreground"},xs={class:"flex items-center gap-3"},bs={class:"flex-1"},gs={class:"text-xs font-medium tabular-nums text-muted-foreground"},_s={key:0},ys={class:"flex items-start gap-3"},hs={class:"w-7 h-7 rounded-full bg-muted flex items-center justify-center text-xs font-bold text-muted-foreground shrink-0 mt-0.5"},ks={class:"flex-1 min-w-0"},ws={class:"flex items-center justify-between gap-2"},Cs={class:"flex items-center gap-2 flex-wrap min-w-0"},$s={class:"font-mono text-sm"},qs={class:"flex items-center shrink-0"},js={class:"flex items-center gap-0.5"},Is={class:"mt-2 flex items-center gap-2 flex-wrap"},Es={class:"truncate"},Ps={key:0,class:"border-t border-border/30 mt-2 pt-2"},Ks={key:1,class:"border-t border-border/30 mt-2 pt-2 space-y-1.5"},Ds={class:"flex items-center justify-between gap-2 text-xs"},Ss={class:"text-muted-foreground"},Us={class:"flex items-center gap-3"},Bs={class:"flex-1"},Ms={class:"text-xs font-medium tabular-nums text-muted-foreground"},As={key:1,class:"text-xs text-muted-foreground flex items-center gap-1.5 mt-3 ml-10"},zs={class:"text-center"},Vs={class:"w-14 h-14 rounded-2xl bg-primary/10 flex items-center justify-center mx-auto mb-3"},Ls={class:"flex items-center gap-2 text-base font-semibold"},Ns={class:"w-8 h-8 rounded-lg bg-blue-500/10 flex items-center justify-center"},Rs={class:"rounded-xl border border-blue-200/60 dark:border-blue-500/20 bg-blue-50/50 dark:bg-blue-500/5 p-4"},Ts={class:"font-mono text-base font-semibold"},Hs={key:0,class:"mt-2 text-xs leading-5 text-amber-700 dark:text-amber-300"},Xs={class:"flex items-center justify-between gap-3 rounded-xl border border-border/60 bg-background/70 p-4"},Fs={class:"flex items-center gap-2 text-base font-semibold"},Gs={class:"w-8 h-8 rounded-lg bg-emerald-500/10 flex items-center justify-center"},Js={class:"flex gap-2"},Qs={class:"relative flex-1"},Os={key:0,class:"space-y-3"},Ws={class:"text-sm font-medium text-muted-foreground"},Zs={class:"flex flex-wrap gap-2"},Ys={class:"font-mono text-xs"},ea=["onClick"],ta={class:"font-mono font-medium"},sa={class:"font-mono font-medium"},Se=10,ga=Xe({__name:"CardBind",setup(aa){const F=Je(),C=_(null),A=_(!1),z=_(null),V=_(""),G=_(!1),y=_([]),U=_(!1),B=_(!1),j=_(!1),I=_(!1),L=_(!1),J=_(null),Y=_(""),N=_(!1),Q=_(!1),$=h(()=>F.apiKeyInfo),ee=h(()=>{var s;return((s=C.value)==null?void 0:s.role)||"independent"}),p=h(()=>{var s;return((s=C.value)==null?void 0:s.chain)||[]}),te=h(()=>{var s;return((s=C.value)==null?void 0:s.primary_key_preview)||""}),Ue=h(()=>{var s;return!!((s=C.value)!=null&&s.orphaned_primary)}),oe=h(()=>!!z.value&&!C.value),ie=h(()=>ee.value==="independent"),R=h(()=>ee.value==="primary"),re=h(()=>ee.value==="child"),E=h(()=>R.value?p.value.slice(1):[]),de=h(()=>y.value.length<Se),Be=h(()=>{var s,e;return!oe.value&&(ie.value||R.value)&&((s=$.value)==null?void 0:s.status)!=="disabled"&&((e=$.value)==null?void 0:e.status)!=="expired"}),b=h(()=>{var s;return!R.value||p.value.length===0?null:Qe(p.value,((s=$.value)==null?void 0:s.billing_type)||"quota")});function ue(s){return s==="active"?"border-emerald-200 bg-emerald-50 text-emerald-700 dark:border-emerald-800 dark:bg-emerald-950 dark:text-emerald-300":s==="disabled"?"border-red-200 bg-red-50 text-red-700 dark:border-red-800 dark:bg-red-950 dark:text-red-300":"border-border bg-muted text-muted-foreground"}function ce(s){return s.status_label?s.status_label:{active:"正常",disabled:"已禁用"}[s.status]||s.status}function me(s){var c;const e=s.billing_type||((c=$.value)==null?void 0:c.billing_type)||"";if(e==="duration"){const m=s.daily_remaining??0,l=s.daily_quota||0;let o=`今日剩余 ${M(m)} / ${M(l)} 每日`;const f=ae(s.quota_pack_expires_at)&&s.quota_pack_remaining||0;return f>0&&(o+=` · 配额包 ${M(f)}`),o}if(e==="quota"){const m=s.remaining_quota??0,l=s.total_quota??0;let o=`剩余 ${M(m)} / ${M(l)}`;const f=ae(s.quota_pack_expires_at)&&s.quota_pack_remaining||0;return f>0&&(o+=` · 配额包 ${M(f)}`),o}if(e==="count"){const m=s.remaining_requests??s.remaining_count??0,l=s.max_requests??0;let o=`剩余 ${m} / ${l} 次`;const f=ae(s.requests_pack_expires_at)&&s.requests_pack_remaining||0;return f>0&&(o+=` · 请求包 ${f} 次`),o}return"-"}function O(s){if(s.total_quota!==void 0&&s.total_quota>0){const e=s.remaining_quota||0;return Math.round((s.total_quota-e)/s.total_quota*100)}if(s.max_requests!==void 0&&s.max_requests>0){const e=s.remaining_requests??s.remaining_count??0;return Math.round((s.max_requests-e)/s.max_requests*100)}if(s.daily_quota!==void 0&&s.daily_quota>0){const e=s.daily_remaining??0;return Math.round((s.daily_quota-e)/s.daily_quota*100)}return 0}function fe(s){if(s.expires_at){const e=ye(s.expires_at);return e==="已过期"?"已过期":`${he(s.expires_at,"yyyy-MM-dd")} 到期 (${e})`}return s.validity_days&&s.validity_days>0?`${s.validity_days} 天(激活后计算)`:"永久有效"}function ve(s){if(!s.expires_at)return!1;const e=new Date(s.expires_at).getTime()-Date.now();return e>0&&e<7*86400*1e3}function pe(s){return s.status_label==="未激活"||!s.activated&&s.status!=="active"}function W(s){return Ze(s.service_type||"",s.sub_service_type_name)}async function Me({isLatest:s}){var e,c,m,l;A.value=!0;try{const o=await X.getBindInfo();if(!s())return;z.value=null,C.value=o}catch(o){if(s()){const f=((c=(e=o==null?void 0:o.response)==null?void 0:e.data)==null?void 0:c.message)||((l=(m=o==null?void 0:o.response)==null?void 0:m.data)==null?void 0:l.error)||(o==null?void 0:o.message)||"获取绑定信息失败";z.value=f,w.error("加载失败",f)}}finally{s()&&(A.value=!1)}}const{reload:T}=st(Me,{resetBeforeLoad:s=>{A.value=!0,(s==="initial"||s==="active-key-change"||s==="manual-refresh")&&(C.value=null),z.value=null}});function xe(){const s=V.value.trim();if(!s)return;if(y.value.includes(s)){w.warning("该卡已在列表中");return}const e=F.activeKey;if(e&&e.key===s){w.error("不能绑定自己");return}if(!de.value){w.warning(`单次最多绑定 ${Se} 张卡`);return}y.value.push(s),V.value=""}function Ae(s){y.value.splice(s,1)}async function ze(){var s,e,c,m;if(y.value.length!==0){U.value=!0;try{const l=await X.cardBind(y.value);w.success("绑定成功",l.message||`成功绑定 ${y.value.length} 张卡`),y.value=[],await F.fetchInfo(),await T("bind-mutation")}catch(l){const o=((e=(s=l==null?void 0:l.response)==null?void 0:s.data)==null?void 0:e.message)||((m=(c=l==null?void 0:l.response)==null?void 0:c.data)==null?void 0:m.error)||(l==null?void 0:l.message)||"绑定失败";w.error("绑定失败",o)}finally{U.value=!1}}}function Ve(s){J.value=s.id,Y.value=s.key_preview,L.value=!0}async function Le(){var s,e,c,m;if(J.value){B.value=!0;try{const l=await X.cardUnbind([J.value]);w.success("解绑成功",l.message||"已成功解绑"),L.value=!1,J.value=null,Y.value="",await T("unbind-mutation")}catch(l){const o=((e=(s=l==null?void 0:l.response)==null?void 0:s.data)==null?void 0:e.message)||((m=(c=l==null?void 0:l.response)==null?void 0:c.data)==null?void 0:m.error)||(l==null?void 0:l.message)||"解绑失败";w.error("解绑失败",o)}finally{B.value=!1}}}async function Ne(){var s,e,c,m;I.value=!0;try{const l=await X.cardUnbindSelf();w.success("解绑成功",l.message||"已从主卡解绑"),N.value=!1,await F.fetchInfo(),await T("unbind-self-mutation")}catch(l){const o=((e=(s=l==null?void 0:l.response)==null?void 0:s.data)==null?void 0:e.message)||((m=(c=l==null?void 0:l.response)==null?void 0:c.data)==null?void 0:m.error)||(l==null?void 0:l.message)||"解绑失败";w.error("解绑失败",o)}finally{I.value=!1}}async function Re(s){if(s<=0||j.value)return;const e=[...E.value],c=e[s];e[s]=e[s-1],e[s-1]=c,await be(e)}async function Te(s){if(s>=E.value.length-1||j.value)return;const e=[...E.value],c=e[s];e[s]=e[s+1],e[s+1]=c,await be(e)}async function be(s){var e,c,m,l;j.value=!0;try{const o=s.map(f=>f.id);await X.cardBindReorder(o),await T("reorder-mutation")}catch(o){const f=((c=(e=o==null?void 0:o.response)==null?void 0:e.data)==null?void 0:c.message)||((l=(m=o==null?void 0:o.response)==null?void 0:m.data)==null?void 0:l.error)||(o==null?void 0:o.message)||"排序失败";w.error("排序失败",f)}finally{j.value=!1}}function He(s){return s.length<=8?s:s.substring(0,6)+"****"+s.substring(s.length-4)}return(s,e)=>{var c,m;return r(),x("div",ct,[e[55]||(e[55]=t("div",{class:"space-y-1"},[t("h1",{class:"text-2xl font-semibold tracking-tight"},"叠卡"),t("p",{class:"text-sm text-muted-foreground"}," 管理 API Key 绑定关系,查看聚合资源池 ")],-1)),A.value&&!C.value?(r(),x("div",mt,[n(a(K),{class:"h-6 w-6 animate-spin text-muted-foreground"})])):oe.value?(r(),v(a(S),{key:1,class:"border-border/60 bg-card/80 backdrop-blur-xl"},{default:i(()=>[n(a(D),{class:"p-8"},{default:i(()=>[t("div",ft,[t("div",vt,[n(a(H),{class:"h-7 w-7 text-red-500"})]),t("div",pt,[e[9]||(e[9]=t("h3",{class:"text-base font-semibold"},"绑定信息加载失败",-1)),t("p",xt,d(z.value),1),e[10]||(e[10]=t("p",{class:"text-xs text-muted-foreground"}," 当前无法确认这张卡的真实绑定状态,已暂时隐藏绑定入口,请稍后重试。 ",-1))]),n(a(k),{variant:"outline",onClick:e[0]||(e[0]=l=>a(T)("manual-refresh"))},{default:i(()=>[A.value?(r(),v(a(K),{key:0,class:"h-4 w-4 mr-2 animate-spin"})):g("",!0),e[11]||(e[11]=u(" 重新加载 ",-1))]),_:1})])]),_:1})]),_:1})):(r(),x(se,{key:2},[re.value?(r(),x("div",bt,[t("div",gt,[t("div",_t,[n(a(Oe),{class:"h-5 w-5 text-blue-500"})]),t("div",yt,[t("p",ht,[e[12]||(e[12]=u(" 此卡已绑定到主卡 ",-1)),t("span",kt,d(te.value),1),e[13]||(e[13]=u(",通过主卡消耗额度 ",-1))]),e[14]||(e[14]=t("p",{class:"mt-1 text-blue-700/80 dark:text-blue-400/70"}," 子卡不能独立消耗额度,所有请求将通过主卡的消耗链进行扣费。 ",-1))])])])):g("",!0),((c=$.value)==null?void 0:c.status)==="disabled"?(r(),x("div",wt,[t("div",Ct,[t("div",$t,[n(a(H),{class:"h-5 w-5 text-red-500"})]),e[15]||(e[15]=t("div",{class:"text-sm"},[t("p",{class:"font-medium text-red-800 dark:text-red-400"}," 当前 Key 已被禁用 "),t("p",{class:"mt-1 text-red-700/80 dark:text-red-400/70"}," 已禁用的 Key 无法进行绑定操作。 ")],-1))])])):((m=$.value)==null?void 0:m.status)==="expired"?(r(),x("div",qt,[t("div",jt,[t("div",It,[n(a(H),{class:"h-5 w-5 text-amber-500"})]),e[16]||(e[16]=t("div",{class:"text-sm"},[t("p",{class:"font-medium text-amber-800 dark:text-amber-400"}," 当前 Key 已过期 "),t("p",{class:"mt-1 text-amber-700/80 dark:text-amber-400/70"}," 已过期的 Key 无法进行绑定操作。 ")],-1))])])):g("",!0),R.value&&b.value?(r(),v(a(S),{key:3,class:"border-border/60 bg-card/80 backdrop-blur-xl"},{default:i(()=>[n(a(D),{class:"p-6 space-y-5"},{default:i(()=>{var l,o;return[t("div",Et,[t("div",Pt,[n(a(Pe),{class:"h-4 w-4 text-primary"})]),e[17]||(e[17]=u(" 聚合资源概览 ",-1))]),t("div",Kt,[t("div",Dt,[t("div",St,[e[19]||(e[19]=t("p",{class:"text-xs text-muted-foreground font-medium"},"总额度",-1)),t("div",Ut,[(r(),x("svg",Bt,[e[18]||(e[18]=t("circle",{cx:"20",cy:"20",r:"16",stroke:"currentColor","stroke-width":"3",fill:"none",class:"text-primary/15"},null,-1)),t("circle",{cx:"20",cy:"20",r:"16",stroke:"currentColor","stroke-width":"3",fill:"none","stroke-linecap":"round",class:"text-primary",style:Fe({strokeDasharray:`${b.value.usagePercent*1.005} 100.5`,transition:"stroke-dasharray 600ms ease"})},null,4)])),t("span",Mt,d(b.value.usagePercent)+"%",1)])]),t("p",At,d(a(_e)(b.value.totalRemaining,((l=$.value)==null?void 0:l.billing_type)||"")),1),t("p",zt," / "+d(a(_e)(b.value.totalCapacity,((o=$.value)==null?void 0:o.billing_type)||"")),1)]),t("div",Vt,[t("div",Lt,[e[20]||(e[20]=t("p",{class:"text-xs text-muted-foreground font-medium"}," 活跃卡数 ",-1)),t("div",Nt,[n(a(at),{class:"h-4 w-4 text-emerald-500"})])]),t("p",Rt,[u(d(b.value.activeCount),1),t("span",Tt," / "+d(b.value.totalCount)+" 张",1)]),e[21]||(e[21]=t("p",{class:"text-xs text-muted-foreground mt-0.5"},"活跃 / 总数",-1))]),t("div",Ht,[t("div",Xt,[e[22]||(e[22]=t("p",{class:"text-xs text-muted-foreground font-medium"}," 最远到期 ",-1)),t("div",Ft,[n(a(lt),{class:"h-4 w-4 text-amber-500"})])]),t("p",Gt,d(b.value.latestExpiry?a(ye)(b.value.latestExpiry):b.value.latestValidityDays?`${b.value.latestValidityDays}天`:"永久"),1),t("p",Jt,d(b.value.latestExpiry?a(he)(b.value.latestExpiry,"yyyy-MM-dd HH:mm:ss"):b.value.latestValidityDays?"激活后计算":"无过期时间"),1)]),t("div",Qt,[t("div",Ot,[e[23]||(e[23]=t("p",{class:"text-xs text-muted-foreground font-medium"},"消耗链",-1)),t("div",Wt,[n(a(ut),{class:"h-4 w-4 text-blue-500"})])]),t("p",Zt,[u(d(p.value.length),1),e[24]||(e[24]=t("span",{class:"text-sm text-muted-foreground font-normal"}," 张卡",-1))]),t("p",Yt," 1 主卡 + "+d(E.value.length)+" 子卡 ",1)])]),t("div",es,[t("div",ts,[e[25]||(e[25]=t("span",{class:"text-muted-foreground"},"使用率",-1)),t("span",ss,d(b.value.usagePercent)+"%",1)]),n(a(le),{"model-value":b.value.usagePercent,class:"h-2"},null,8,["model-value"])])]}),_:1})]),_:1})):g("",!0),R.value&&p.value.length>0?(r(),v(a(S),{key:4,class:"border-border/60 bg-card/80 backdrop-blur-xl"},{default:i(()=>[n(a(D),{class:"p-6 space-y-4"},{default:i(()=>[t("div",null,[t("div",as,[t("div",ls,[n(a(ne),{class:"h-4 w-4 text-primary"})]),e[26]||(e[26]=u(" 消耗链 ",-1))]),e[27]||(e[27]=t("p",{class:"text-sm text-muted-foreground mt-1 ml-10"}," 请求按此顺序依次消耗各卡额度 ",-1))]),t("div",ns,[t("div",os,[t("div",is,[e[29]||(e[29]=t("div",{class:"w-7 h-7 rounded-full bg-muted flex items-center justify-center text-xs font-bold text-muted-foreground shrink-0 mt-0.5"}," 1 ",-1)),t("div",rs,[t("div",ds,[t("span",us,d(p.value[0].key_preview),1),n(a(q),{variant:"outline",class:"text-[10px] px-1.5 py-0 h-[18px]"},{default:i(()=>[...e[28]||(e[28]=[u(" 主卡 ",-1)])]),_:1}),n(a(q),{variant:"outline",class:P(["text-[10px] px-1.5 py-0 h-[18px]",ue(p.value[0].status)])},{default:i(()=>[u(d(ce(p.value[0])),1)]),_:1},8,["class"])]),t("div",cs,[n(a(q),{variant:"outline",class:P(["max-w-full text-[10px] px-1.5 py-0 h-[18px]",a(ke)(p.value[0].service_type||"").badge]),title:W(p.value[0])},{default:i(()=>[t("span",ms,d(W(p.value[0])),1)]),_:1},8,["class","title"]),n(a(q),{variant:"outline",class:"text-[10px] px-1.5 py-0 h-[18px]"},{default:i(()=>[u(d(a(we)(p.value[0].billing_type||"")),1)]),_:1})]),t("div",fs,[t("div",vs,[t("span",ps,d(me(p.value[0])),1),t("span",{class:P(ve(p.value[0])?"text-red-500":"text-muted-foreground")},d(fe(p.value[0])),3)]),t("div",xs,[t("div",bs,[n(a(le),{"model-value":O(p.value[0]),class:"h-1.5"},null,8,["model-value"])]),t("span",gs,d(O(p.value[0]))+"%",1)])])])])]),E.value.length>0?(r(),x("div",_s,[(r(!0),x(se,null,ge(E.value,(l,o)=>(r(),x("div",{key:l.id},[e[32]||(e[32]=t("div",{class:"border-l-2 border-dashed border-primary/30 h-3 ml-4"},null,-1)),t("div",{class:P(["rounded-xl border p-4 transition-colors",pe(l)?"border-dashed border-border/50 bg-muted/10":"border-border/60 bg-muted/20 hover:bg-muted/30"])},[t("div",ys,[t("div",hs,d(o+2),1),t("div",ks,[t("div",ws,[t("div",Cs,[t("span",$s,d(l.key_preview),1),n(a(q),{variant:"outline",class:"text-[10px] px-1.5 py-0 h-[18px]"},{default:i(()=>[...e[30]||(e[30]=[u(" 子卡 ",-1)])]),_:1}),n(a(q),{variant:"outline",class:P(["text-[10px] px-1.5 py-0 h-[18px]",ue(l.status)])},{default:i(()=>[u(d(ce(l)),1)]),_:2},1032,["class"])]),t("div",qs,[t("div",js,[n(a(k),{variant:"ghost",size:"icon",class:"h-7 w-7",disabled:o===0||j.value,onClick:f=>Re(o),title:"上移"},{default:i(()=>[n(a(dt),{class:"h-3.5 w-3.5"})]),_:1},8,["disabled","onClick"]),n(a(k),{variant:"ghost",size:"icon",class:"h-7 w-7",disabled:o===E.value.length-1||j.value,onClick:f=>Te(o),title:"下移"},{default:i(()=>[n(a(rt),{class:"h-3.5 w-3.5"})]),_:1},8,["disabled","onClick"])]),n(a(tt),{orientation:"vertical",class:"mx-1.5 h-4"}),n(a(k),{variant:"ghost",size:"icon",class:"h-7 w-7 text-red-500 hover:text-red-600 hover:bg-red-50 dark:hover:bg-red-500/10",disabled:B.value,onClick:f=>Ve(l),title:"解绑"},{default:i(()=>[n(a(De),{class:"h-3.5 w-3.5"})]),_:1},8,["disabled","onClick"])])]),t("div",Is,[n(a(q),{variant:"outline",class:P(["max-w-full text-[10px] px-1.5 py-0 h-[18px]",a(ke)(l.service_type||"").badge]),title:W(l)},{default:i(()=>[t("span",Es,d(W(l)),1)]),_:2},1032,["class","title"]),n(a(q),{variant:"outline",class:"text-[10px] px-1.5 py-0 h-[18px]"},{default:i(()=>[u(d(a(we)(l.billing_type||"")),1)]),_:2},1024)]),pe(l)?(r(),x("div",Ps,[...e[31]||(e[31]=[t("p",{class:"text-xs text-muted-foreground"}," 排到时自动激活,开始计算有效期 ",-1)])])):(r(),x("div",Ks,[t("div",Ds,[t("span",Ss,d(me(l)),1),t("span",{class:P(ve(l)?"text-red-500":"text-muted-foreground")},d(fe(l)),3)]),t("div",Us,[t("div",Bs,[n(a(le),{"model-value":O(l),class:"h-1.5"},null,8,["model-value"])]),t("span",Ms,d(O(l))+"%",1)])]))])])],2)]))),128))])):g("",!0),j.value?(r(),x("p",As,[n(a(K),{class:"h-3.5 w-3.5 animate-spin"}),e[33]||(e[33]=u(" 正在更新排序... ",-1))])):g("",!0)])]),_:1})]),_:1})):g("",!0),ie.value?(r(),v(a(S),{key:5,class:"border-border/60 bg-card/80 backdrop-blur-xl"},{default:i(()=>[n(a(D),{class:"p-8"},{default:i(()=>[t("div",zs,[t("div",Vs,[n(a(Pe),{class:"h-7 w-7 text-primary/60"})]),e[34]||(e[34]=t("h3",{class:"text-base font-semibold"},"独立卡模式",-1)),e[35]||(e[35]=t("p",{class:"text-sm text-muted-foreground mt-1"}," 尚未绑定任何卡片,在下方添加子卡建立消耗链 ",-1))])]),_:1})]),_:1})):g("",!0),re.value?(r(),v(a(S),{key:6,class:"border-border/60 bg-card/80 backdrop-blur-xl"},{default:i(()=>[n(a(D),{class:"p-6 space-y-4"},{default:i(()=>[t("div",Ls,[t("div",Ns,[n(a(ne),{class:"h-4 w-4 text-blue-500"})]),e[36]||(e[36]=u(" 绑定信息 ",-1))]),t("div",Rs,[e[37]||(e[37]=t("p",{class:"text-sm text-muted-foreground mb-1"},"绑定的主卡",-1)),t("p",Ts,d(te.value),1),Ue.value?(r(),x("p",Hs," 主卡记录已不存在,请手动点击下方“解除绑定”清理当前绑定关系。 ")):g("",!0)]),t("div",Xs,[e[39]||(e[39]=t("div",{class:"space-y-1"},[t("p",{class:"text-sm font-medium text-foreground"},"解除绑定"),t("p",{class:"text-xs leading-5 text-muted-foreground"}," 解除后此卡将恢复为独立卡,可单独使用和管理。 ")],-1)),n(a(k),{variant:"secondary",size:"sm",class:"shrink-0",disabled:I.value,onClick:e[1]||(e[1]=l=>N.value=!0)},{default:i(()=>[I.value?(r(),v(a(K),{key:0,class:"h-4 w-4 animate-spin"})):(r(),v(a(De),{key:1,class:"h-4 w-4"})),e[38]||(e[38]=u(" 解除绑定 ",-1))]),_:1},8,["disabled"])])]),_:1})]),_:1})):g("",!0),Be.value?(r(),v(a(S),{key:7,class:"border-border/60 bg-card/80 backdrop-blur-xl"},{default:i(()=>[n(a(D),{class:"p-6 space-y-4"},{default:i(()=>[t("div",null,[t("div",Fs,[t("div",Gs,[n(a(Ke),{class:"h-4 w-4 text-emerald-500"})]),e[40]||(e[40]=u(" 绑定新卡 ",-1))]),e[41]||(e[41]=t("p",{class:"text-sm text-muted-foreground mt-1 ml-10"}," 输入子卡 API Key 进行绑定,子卡必须与主卡的服务类型、子服务类型和计费方式一致,且未绑定 ",-1))]),t("div",Js,[t("div",Qs,[n(a(Ye),{modelValue:V.value,"onUpdate:modelValue":e[2]||(e[2]=l=>V.value=l),type:G.value?"text":"password",placeholder:"请输入子卡 API Key",autocomplete:"off",spellcheck:"false",class:"pr-9 font-mono text-sm",disabled:U.value,onKeydown:Ge(xe,["enter"])},null,8,["modelValue","type","disabled"]),t("button",{type:"button",class:"absolute right-2.5 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground transition-colors",onClick:e[3]||(e[3]=l=>G.value=!G.value)},[G.value?(r(),v(a(nt),{key:0,class:"h-4 w-4"})):(r(),v(a(et),{key:1,class:"h-4 w-4"}))])]),n(a(k),{disabled:!V.value.trim()||!de.value||U.value,onClick:xe},{default:i(()=>[n(a(Ke),{class:"h-4 w-4 mr-1"}),e[42]||(e[42]=u(" 添加 ",-1))]),_:1},8,["disabled"])]),y.value.length>0?(r(),x("div",Os,[t("p",Ws," 待绑定("+d(y.value.length)+" 张) ",1),t("div",Zs,[(r(!0),x(se,null,ge(y.value,(l,o)=>(r(),x("div",{key:o,class:"inline-flex items-center gap-1.5 rounded-full border border-border/60 bg-muted/30 px-3 py-1 text-sm"},[t("span",Ys,d(He(l)),1),t("button",{type:"button",class:"text-muted-foreground hover:text-red-500 transition-colors",onClick:f=>Ae(o)},[n(a(We),{class:"h-3 w-3"})],8,ea)]))),128))])])):g("",!0),y.value.length>0?(r(),v(a(k),{key:1,class:"w-full",disabled:U.value,onClick:ze},{default:i(()=>[U.value?(r(),v(a(K),{key:0,class:"h-4 w-4 mr-2 animate-spin"})):(r(),v(a(ne),{key:1,class:"h-4 w-4 mr-2"})),u(" 绑定 "+d(y.value.length)+" 张卡 ",1)]),_:1},8,["disabled"])):g("",!0)]),_:1})]),_:1})):g("",!0),t("button",{type:"button",class:"flex items-center gap-1.5 text-sm text-muted-foreground hover:text-foreground transition-colors",onClick:e[4]||(e[4]=l=>Q.value=!Q.value)},[Q.value?(r(),v(a(it),{key:1,class:"h-4 w-4"})):(r(),v(a(ot),{key:0,class:"h-4 w-4"})),e[43]||(e[43]=u(" 绑定规则说明 ",-1))]),Q.value?(r(),v(a(S),{key:8,class:"border-border/40"},{default:i(()=>[n(a(D),{class:"p-5"},{default:i(()=>[...e[44]||(e[44]=[t("ul",{class:"space-y-2 text-sm text-muted-foreground"},[t("li",null,"1. 子卡必须与主卡类型(服务类型、子服务类型、计费方式)一致"),t("li",null,"2. 子卡不能是已绑定或已过期的卡"),t("li",null,'3. 绑定后子卡状态变为"已绑定",不再独立消耗额度'),t("li",null,"4. 消耗链按顺序使用,主卡额度耗尽后自动使用下一张子卡")],-1)])]),_:1})]),_:1})):g("",!0)],64)),n(a(Ee),{open:L.value,"onUpdate:open":e[6]||(e[6]=l=>L.value=l)},{default:i(()=>[n(a(Ce),{class:"sm:max-w-md"},{default:i(()=>[n(a($e),null,{default:i(()=>[n(a(qe),{class:"flex items-center gap-2"},{default:i(()=>[n(a(H),{class:"h-5 w-5 text-amber-500"}),e[45]||(e[45]=u(" 确认解绑 ",-1))]),_:1}),n(a(je),null,{default:i(()=>[e[46]||(e[46]=u(" 确定要解绑子卡 ",-1)),t("span",ta,d(Y.value),1),e[47]||(e[47]=u(" 吗?解绑后该卡将恢复为独立卡。 ",-1))]),_:1})]),_:1}),n(a(Ie),{class:"gap-2 sm:gap-3"},{default:i(()=>[n(a(k),{variant:"outline",disabled:B.value,onClick:e[5]||(e[5]=l=>L.value=!1)},{default:i(()=>[...e[48]||(e[48]=[u("取消",-1)])]),_:1},8,["disabled"]),n(a(k),{variant:"destructive",disabled:B.value,onClick:Le},{default:i(()=>[B.value?(r(),v(a(K),{key:0,class:"h-4 w-4 mr-2 animate-spin"})):g("",!0),e[49]||(e[49]=u(" 确认解绑 ",-1))]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1},8,["open"]),n(a(Ee),{open:N.value,"onUpdate:open":e[8]||(e[8]=l=>N.value=l)},{default:i(()=>[n(a(Ce),{class:"sm:max-w-md"},{default:i(()=>[n(a($e),null,{default:i(()=>[n(a(qe),{class:"flex items-center gap-2"},{default:i(()=>[n(a(H),{class:"h-5 w-5 text-amber-500"}),e[50]||(e[50]=u(" 确认解绑 ",-1))]),_:1}),n(a(je),null,{default:i(()=>[e[51]||(e[51]=u(" 确定要从主卡 ",-1)),t("span",sa,d(te.value),1),e[52]||(e[52]=u(" 解绑吗?解绑后此卡将恢复为独立卡。 ",-1))]),_:1})]),_:1}),n(a(Ie),{class:"gap-2 sm:gap-3"},{default:i(()=>[n(a(k),{variant:"outline",disabled:I.value,onClick:e[7]||(e[7]=l=>N.value=!1)},{default:i(()=>[...e[53]||(e[53]=[u("取消",-1)])]),_:1},8,["disabled"]),n(a(k),{variant:"destructive",disabled:I.value,onClick:Ne},{default:i(()=>[I.value?(r(),v(a(K),{key:0,class:"h-4 w-4 mr-2 animate-spin"})):g("",!0),e[54]||(e[54]=u(" 确认解绑 ",-1))]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1},8,["open"])])}}});export{ga as default};
|
|
21
|
+
*/const De=Z("UnlinkIcon",[["path",{d:"m18.84 12.25 1.72-1.71h-.02a5.004 5.004 0 0 0-.12-7.07 5.006 5.006 0 0 0-6.95 0l-1.72 1.71",key:"yqzxt4"}],["path",{d:"m5.17 11.75-1.71 1.71a5.004 5.004 0 0 0 .12 7.07 5.006 5.006 0 0 0 6.95 0l1.71-1.71",key:"4qinb0"}],["line",{x1:"8",x2:"8",y1:"2",y2:"5",key:"1041cp"}],["line",{x1:"2",x2:"5",y1:"8",y2:"8",key:"14m1p5"}],["line",{x1:"16",x2:"16",y1:"19",y2:"22",key:"rzdirn"}],["line",{x1:"19",x2:"22",y1:"16",y2:"16",key:"ox905f"}]]),ct={class:"max-w-7xl mx-auto space-y-6"},mt={key:0,class:"flex items-center justify-center py-20"},ft={class:"mx-auto max-w-md text-center space-y-4"},vt={class:"w-14 h-14 rounded-2xl bg-red-500/10 flex items-center justify-center mx-auto"},pt={class:"space-y-2"},xt={class:"text-sm text-muted-foreground"},bt={key:0,class:"rounded-lg border border-blue-200 dark:border-blue-500/20 bg-blue-50 dark:bg-blue-500/5 p-4"},gt={class:"flex gap-3"},_t={class:"shrink-0 mt-0.5"},yt={class:"text-sm"},ht={class:"font-medium text-blue-800 dark:text-blue-400"},kt={class:"font-mono"},wt={key:1,class:"rounded-lg border border-red-200 dark:border-red-500/20 bg-red-50 dark:bg-red-500/5 p-4"},Ct={class:"flex gap-3"},$t={class:"shrink-0 mt-0.5"},qt={key:2,class:"rounded-lg border border-amber-200 dark:border-amber-500/20 bg-amber-50 dark:bg-amber-500/5 p-4"},jt={class:"flex gap-3"},It={class:"shrink-0 mt-0.5"},Et={class:"flex items-center gap-2 text-base font-semibold"},Pt={class:"w-8 h-8 rounded-lg bg-primary/10 flex items-center justify-center"},Kt={class:"grid grid-cols-2 lg:grid-cols-4 gap-4"},Dt={class:"rounded-xl border border-border/60 bg-muted/20 p-4"},St={class:"flex items-center justify-between mb-2"},Ut={class:"relative flex items-center justify-center"},Bt={class:"w-10 h-10 -rotate-90"},Mt={class:"absolute text-[9px] font-bold text-primary"},At={class:"text-lg font-bold tabular-nums"},zt={class:"text-xs text-muted-foreground mt-0.5"},Vt={class:"rounded-xl border border-border/60 bg-muted/20 p-4"},Lt={class:"flex items-center justify-between mb-2"},Nt={class:"w-10 h-10 rounded-lg bg-emerald-500/10 flex items-center justify-center"},Rt={class:"text-lg font-bold tabular-nums"},Tt={class:"text-sm text-muted-foreground font-normal"},Ht={class:"rounded-xl border border-border/60 bg-muted/20 p-4"},Xt={class:"flex items-center justify-between mb-2"},Ft={class:"w-10 h-10 rounded-lg bg-amber-500/10 flex items-center justify-center"},Gt={class:"text-lg font-bold tabular-nums"},Jt={class:"text-xs text-muted-foreground mt-0.5"},Qt={class:"rounded-xl border border-border/60 bg-muted/20 p-4"},Ot={class:"flex items-center justify-between mb-2"},Wt={class:"w-10 h-10 rounded-lg bg-blue-500/10 flex items-center justify-center"},Zt={class:"text-lg font-bold tabular-nums"},Yt={class:"text-xs text-muted-foreground mt-0.5"},es={class:"space-y-2"},ts={class:"flex items-center justify-between text-sm"},ss={class:"font-semibold tabular-nums"},as={class:"flex items-center gap-2 text-base font-semibold"},ls={class:"w-8 h-8 rounded-lg bg-primary/10 flex items-center justify-center"},ns={class:"relative"},os={class:"rounded-xl border border-border/60 bg-muted/20 p-4"},is={class:"flex items-start gap-3"},rs={class:"flex-1 min-w-0"},ds={class:"flex items-center gap-2 flex-wrap"},us={class:"font-mono text-sm font-medium"},cs={class:"mt-2 flex items-center gap-2 flex-wrap"},ms={class:"truncate"},fs={class:"border-t border-border/30 mt-2 pt-2 space-y-1.5"},vs={class:"flex items-center justify-between gap-2 text-xs"},ps={class:"text-muted-foreground"},xs={class:"flex items-center gap-3"},bs={class:"flex-1"},gs={class:"text-xs font-medium tabular-nums text-muted-foreground"},_s={key:0},ys={class:"flex items-start gap-3"},hs={class:"w-7 h-7 rounded-full bg-muted flex items-center justify-center text-xs font-bold text-muted-foreground shrink-0 mt-0.5"},ks={class:"flex-1 min-w-0"},ws={class:"flex items-center justify-between gap-2"},Cs={class:"flex items-center gap-2 flex-wrap min-w-0"},$s={class:"font-mono text-sm"},qs={class:"flex items-center shrink-0"},js={class:"flex items-center gap-0.5"},Is={class:"mt-2 flex items-center gap-2 flex-wrap"},Es={class:"truncate"},Ps={key:0,class:"border-t border-border/30 mt-2 pt-2"},Ks={key:1,class:"border-t border-border/30 mt-2 pt-2 space-y-1.5"},Ds={class:"flex items-center justify-between gap-2 text-xs"},Ss={class:"text-muted-foreground"},Us={class:"flex items-center gap-3"},Bs={class:"flex-1"},Ms={class:"text-xs font-medium tabular-nums text-muted-foreground"},As={key:1,class:"text-xs text-muted-foreground flex items-center gap-1.5 mt-3 ml-10"},zs={class:"text-center"},Vs={class:"w-14 h-14 rounded-2xl bg-primary/10 flex items-center justify-center mx-auto mb-3"},Ls={class:"flex items-center gap-2 text-base font-semibold"},Ns={class:"w-8 h-8 rounded-lg bg-blue-500/10 flex items-center justify-center"},Rs={class:"rounded-xl border border-blue-200/60 dark:border-blue-500/20 bg-blue-50/50 dark:bg-blue-500/5 p-4"},Ts={class:"font-mono text-base font-semibold"},Hs={key:0,class:"mt-2 text-xs leading-5 text-amber-700 dark:text-amber-300"},Xs={class:"flex items-center justify-between gap-3 rounded-xl border border-border/60 bg-background/70 p-4"},Fs={class:"flex items-center gap-2 text-base font-semibold"},Gs={class:"w-8 h-8 rounded-lg bg-emerald-500/10 flex items-center justify-center"},Js={class:"flex gap-2"},Qs={class:"relative flex-1"},Os={key:0,class:"space-y-3"},Ws={class:"text-sm font-medium text-muted-foreground"},Zs={class:"flex flex-wrap gap-2"},Ys={class:"font-mono text-xs"},ea=["onClick"],ta={class:"font-mono font-medium"},sa={class:"font-mono font-medium"},Se=10,ga=Xe({__name:"CardBind",setup(aa){const F=Je(),C=_(null),A=_(!1),z=_(null),V=_(""),G=_(!1),y=_([]),U=_(!1),B=_(!1),j=_(!1),I=_(!1),L=_(!1),J=_(null),Y=_(""),N=_(!1),Q=_(!1),$=h(()=>F.apiKeyInfo),ee=h(()=>{var s;return((s=C.value)==null?void 0:s.role)||"independent"}),p=h(()=>{var s;return((s=C.value)==null?void 0:s.chain)||[]}),te=h(()=>{var s;return((s=C.value)==null?void 0:s.primary_key_preview)||""}),Ue=h(()=>{var s;return!!((s=C.value)!=null&&s.orphaned_primary)}),oe=h(()=>!!z.value&&!C.value),ie=h(()=>ee.value==="independent"),R=h(()=>ee.value==="primary"),re=h(()=>ee.value==="child"),E=h(()=>R.value?p.value.slice(1):[]),de=h(()=>y.value.length<Se),Be=h(()=>{var s,e;return!oe.value&&(ie.value||R.value)&&((s=$.value)==null?void 0:s.status)!=="disabled"&&((e=$.value)==null?void 0:e.status)!=="merged"}),b=h(()=>{var s;return!R.value||p.value.length===0?null:Qe(p.value,((s=$.value)==null?void 0:s.billing_type)||"quota")});function ue(s){return s==="active"?"border-emerald-200 bg-emerald-50 text-emerald-700 dark:border-emerald-800 dark:bg-emerald-950 dark:text-emerald-300":s==="disabled"?"border-red-200 bg-red-50 text-red-700 dark:border-red-800 dark:bg-red-950 dark:text-red-300":"border-border bg-muted text-muted-foreground"}function ce(s){return s.status_label?s.status_label:{active:"正常",disabled:"已禁用"}[s.status]||s.status}function me(s){var c;const e=s.billing_type||((c=$.value)==null?void 0:c.billing_type)||"";if(e==="duration"){const m=s.daily_remaining??0,l=s.daily_quota||0;let o=`今日剩余 ${M(m)} / ${M(l)} 每日`;const f=ae(s.quota_pack_expires_at)&&s.quota_pack_remaining||0;return f>0&&(o+=` · 配额包 ${M(f)}`),o}if(e==="quota"){const m=s.remaining_quota??0,l=s.total_quota??0;let o=`剩余 ${M(m)} / ${M(l)}`;const f=ae(s.quota_pack_expires_at)&&s.quota_pack_remaining||0;return f>0&&(o+=` · 配额包 ${M(f)}`),o}if(e==="count"){const m=s.remaining_requests??s.remaining_count??0,l=s.max_requests??0;let o=`剩余 ${m} / ${l} 次`;const f=ae(s.requests_pack_expires_at)&&s.requests_pack_remaining||0;return f>0&&(o+=` · 请求包 ${f} 次`),o}return"-"}function O(s){if(s.total_quota!==void 0&&s.total_quota>0){const e=s.remaining_quota||0;return Math.round((s.total_quota-e)/s.total_quota*100)}if(s.max_requests!==void 0&&s.max_requests>0){const e=s.remaining_requests??s.remaining_count??0;return Math.round((s.max_requests-e)/s.max_requests*100)}if(s.daily_quota!==void 0&&s.daily_quota>0){const e=s.daily_remaining??0;return Math.round((s.daily_quota-e)/s.daily_quota*100)}return 0}function fe(s){if(s.expires_at){const e=ye(s.expires_at);return e==="已过期"?"已过期":`${he(s.expires_at,"yyyy-MM-dd")} 到期 (${e})`}return s.validity_days&&s.validity_days>0?`${s.validity_days} 天(激活后计算)`:"永久有效"}function ve(s){if(!s.expires_at)return!1;const e=new Date(s.expires_at).getTime()-Date.now();return e>0&&e<7*86400*1e3}function pe(s){return s.status_label==="未激活"||!s.activated&&s.status!=="active"}function W(s){return Ze(s.service_type||"",s.sub_service_type_name)}async function Me({isLatest:s}){var e,c,m,l;A.value=!0;try{const o=await X.getBindInfo();if(!s())return;z.value=null,C.value=o}catch(o){if(s()){const f=((c=(e=o==null?void 0:o.response)==null?void 0:e.data)==null?void 0:c.message)||((l=(m=o==null?void 0:o.response)==null?void 0:m.data)==null?void 0:l.error)||(o==null?void 0:o.message)||"获取合并信息失败";z.value=f,w.error("加载失败",f)}}finally{s()&&(A.value=!1)}}const{reload:T}=st(Me,{resetBeforeLoad:s=>{A.value=!0,(s==="initial"||s==="active-key-change"||s==="manual-refresh")&&(C.value=null),z.value=null}});function xe(){const s=V.value.trim();if(!s)return;if(y.value.includes(s)){w.warning("该子卡已在列表中");return}const e=F.activeKey;if(e&&e.key===s){w.error("不能合并自己");return}if(!de.value){w.warning(`单次最多合并 ${Se} 张卡`);return}y.value.push(s),V.value=""}function Ae(s){y.value.splice(s,1)}async function ze(){var s,e,c,m;if(y.value.length!==0){U.value=!0;try{const l=await X.cardBind(y.value);w.success("合并成功",l.message||`成功合并 ${y.value.length} 张卡`),y.value=[],await F.fetchInfo(),await T("bind-mutation")}catch(l){const o=((e=(s=l==null?void 0:l.response)==null?void 0:s.data)==null?void 0:e.message)||((m=(c=l==null?void 0:l.response)==null?void 0:c.data)==null?void 0:m.error)||(l==null?void 0:l.message)||"合并失败";w.error("合并失败",o)}finally{U.value=!1}}}function Ve(s){J.value=s.id,Y.value=s.key_preview,L.value=!0}async function Le(){var s,e,c,m;if(J.value){B.value=!0;try{const l=await X.cardUnbind([J.value]);w.success("操作成功",l.message||"已取消"),L.value=!1,J.value=null,Y.value="",await T("unbind-mutation")}catch(l){const o=((e=(s=l==null?void 0:l.response)==null?void 0:s.data)==null?void 0:e.message)||((m=(c=l==null?void 0:l.response)==null?void 0:c.data)==null?void 0:m.error)||(l==null?void 0:l.message)||"操作失败";w.error("操作失败",o)}finally{B.value=!1}}}async function Ne(){var s,e,c,m;I.value=!0;try{const l=await X.cardUnbindSelf();w.success("操作成功",l.message||"叠卡合并后不能解绑"),N.value=!1,await F.fetchInfo(),await T("unbind-self-mutation")}catch(l){const o=((e=(s=l==null?void 0:l.response)==null?void 0:s.data)==null?void 0:e.message)||((m=(c=l==null?void 0:l.response)==null?void 0:c.data)==null?void 0:m.error)||(l==null?void 0:l.message)||"操作失败";w.error("操作失败",o)}finally{I.value=!1}}async function Re(s){if(s<=0||j.value)return;const e=[...E.value],c=e[s];e[s]=e[s-1],e[s-1]=c,await be(e)}async function Te(s){if(s>=E.value.length-1||j.value)return;const e=[...E.value],c=e[s];e[s]=e[s+1],e[s+1]=c,await be(e)}async function be(s){var e,c,m,l;j.value=!0;try{const o=s.map(f=>f.id);await X.cardBindReorder(o),await T("reorder-mutation")}catch(o){const f=((c=(e=o==null?void 0:o.response)==null?void 0:e.data)==null?void 0:c.message)||((l=(m=o==null?void 0:o.response)==null?void 0:m.data)==null?void 0:l.error)||(o==null?void 0:o.message)||"操作失败";w.error("操作失败",f)}finally{j.value=!1}}function He(s){return s.length<=8?s:s.substring(0,6)+"****"+s.substring(s.length-4)}return(s,e)=>{var c,m;return r(),x("div",ct,[e[55]||(e[55]=t("div",{class:"space-y-1"},[t("h1",{class:"text-2xl font-semibold tracking-tight"},"叠卡"),t("p",{class:"text-sm text-muted-foreground"}," 把未激活子卡合并到当前卡,额度或时长一次性转入 ")],-1)),A.value&&!C.value?(r(),x("div",mt,[n(a(K),{class:"h-6 w-6 animate-spin text-muted-foreground"})])):oe.value?(r(),v(a(S),{key:1,class:"border-border/60 bg-card/80 backdrop-blur-xl"},{default:i(()=>[n(a(D),{class:"p-8"},{default:i(()=>[t("div",ft,[t("div",vt,[n(a(H),{class:"h-7 w-7 text-red-500"})]),t("div",pt,[e[9]||(e[9]=t("h3",{class:"text-base font-semibold"},"合并信息加载失败",-1)),t("p",xt,d(z.value),1),e[10]||(e[10]=t("p",{class:"text-xs text-muted-foreground"}," 当前无法确认这张卡的叠卡状态,已暂时隐藏合并入口,请稍后重试。 ",-1))]),n(a(k),{variant:"outline",onClick:e[0]||(e[0]=l=>a(T)("manual-refresh"))},{default:i(()=>[A.value?(r(),v(a(K),{key:0,class:"h-4 w-4 mr-2 animate-spin"})):g("",!0),e[11]||(e[11]=u(" 重新加载 ",-1))]),_:1})])]),_:1})]),_:1})):(r(),x(se,{key:2},[re.value?(r(),x("div",bt,[t("div",gt,[t("div",_t,[n(a(Oe),{class:"h-5 w-5 text-blue-500"})]),t("div",yt,[t("p",ht,[e[12]||(e[12]=u(" 此卡已合并到主卡 ",-1)),t("span",kt,d(te.value),1),e[13]||(e[13]=u(",已合并到主卡 ",-1))]),e[14]||(e[14]=t("p",{class:"mt-1 text-blue-700/80 dark:text-blue-400/70"}," 子卡合并后会注销,额度或时长已转入主卡。 ",-1))])])])):g("",!0),((c=$.value)==null?void 0:c.status)==="disabled"?(r(),x("div",wt,[t("div",Ct,[t("div",$t,[n(a(H),{class:"h-5 w-5 text-red-500"})]),e[15]||(e[15]=t("div",{class:"text-sm"},[t("p",{class:"font-medium text-red-800 dark:text-red-400"}," 当前 Key 已被禁用 "),t("p",{class:"mt-1 text-red-700/80 dark:text-red-400/70"}," 已禁用的 Key 无法进行叠卡合并。 ")],-1))])])):((m=$.value)==null?void 0:m.status)==="expired"?(r(),x("div",qt,[t("div",jt,[t("div",It,[n(a(H),{class:"h-5 w-5 text-amber-500"})]),e[16]||(e[16]=t("div",{class:"text-sm"},[t("p",{class:"font-medium text-amber-800 dark:text-amber-400"}," 当前 Key 已过期 "),t("p",{class:"mt-1 text-amber-700/80 dark:text-amber-400/70"}," 可通过合并未激活子卡进行续期。 ")],-1))])])):g("",!0),R.value&&b.value?(r(),v(a(S),{key:3,class:"border-border/60 bg-card/80 backdrop-blur-xl"},{default:i(()=>[n(a(D),{class:"p-6 space-y-5"},{default:i(()=>{var l,o;return[t("div",Et,[t("div",Pt,[n(a(Pe),{class:"h-4 w-4 text-primary"})]),e[17]||(e[17]=u(" 聚合资源概览 ",-1))]),t("div",Kt,[t("div",Dt,[t("div",St,[e[19]||(e[19]=t("p",{class:"text-xs text-muted-foreground font-medium"},"总额度",-1)),t("div",Ut,[(r(),x("svg",Bt,[e[18]||(e[18]=t("circle",{cx:"20",cy:"20",r:"16",stroke:"currentColor","stroke-width":"3",fill:"none",class:"text-primary/15"},null,-1)),t("circle",{cx:"20",cy:"20",r:"16",stroke:"currentColor","stroke-width":"3",fill:"none","stroke-linecap":"round",class:"text-primary",style:Fe({strokeDasharray:`${b.value.usagePercent*1.005} 100.5`,transition:"stroke-dasharray 600ms ease"})},null,4)])),t("span",Mt,d(b.value.usagePercent)+"%",1)])]),t("p",At,d(a(_e)(b.value.totalRemaining,((l=$.value)==null?void 0:l.billing_type)||"")),1),t("p",zt," / "+d(a(_e)(b.value.totalCapacity,((o=$.value)==null?void 0:o.billing_type)||"")),1)]),t("div",Vt,[t("div",Lt,[e[20]||(e[20]=t("p",{class:"text-xs text-muted-foreground font-medium"}," 活跃卡数 ",-1)),t("div",Nt,[n(a(at),{class:"h-4 w-4 text-emerald-500"})])]),t("p",Rt,[u(d(b.value.activeCount),1),t("span",Tt," / "+d(b.value.totalCount)+" 张",1)]),e[21]||(e[21]=t("p",{class:"text-xs text-muted-foreground mt-0.5"},"活跃 / 总数",-1))]),t("div",Ht,[t("div",Xt,[e[22]||(e[22]=t("p",{class:"text-xs text-muted-foreground font-medium"}," 最远到期 ",-1)),t("div",Ft,[n(a(lt),{class:"h-4 w-4 text-amber-500"})])]),t("p",Gt,d(b.value.latestExpiry?a(ye)(b.value.latestExpiry):b.value.latestValidityDays?`${b.value.latestValidityDays}天`:"永久"),1),t("p",Jt,d(b.value.latestExpiry?a(he)(b.value.latestExpiry,"yyyy-MM-dd HH:mm:ss"):b.value.latestValidityDays?"激活后计算":"无过期时间"),1)]),t("div",Qt,[t("div",Ot,[e[23]||(e[23]=t("p",{class:"text-xs text-muted-foreground font-medium"},"合并记录",-1)),t("div",Wt,[n(a(ut),{class:"h-4 w-4 text-blue-500"})])]),t("p",Zt,[u(d(p.value.length),1),e[24]||(e[24]=t("span",{class:"text-sm text-muted-foreground font-normal"}," 张卡",-1))]),t("p",Yt," 1 主卡 + "+d(E.value.length)+" 子卡 ",1)])]),t("div",es,[t("div",ts,[e[25]||(e[25]=t("span",{class:"text-muted-foreground"},"使用率",-1)),t("span",ss,d(b.value.usagePercent)+"%",1)]),n(a(le),{"model-value":b.value.usagePercent,class:"h-2"},null,8,["model-value"])])]}),_:1})]),_:1})):g("",!0),R.value&&p.value.length>0?(r(),v(a(S),{key:4,class:"border-border/60 bg-card/80 backdrop-blur-xl"},{default:i(()=>[n(a(D),{class:"p-6 space-y-4"},{default:i(()=>[t("div",null,[t("div",as,[t("div",ls,[n(a(ne),{class:"h-4 w-4 text-primary"})]),e[26]||(e[26]=u(" 合并记录 ",-1))]),e[27]||(e[27]=t("p",{class:"text-sm text-muted-foreground mt-1 ml-10"}," 子卡合并后会注销,不再独立消耗额度 ",-1))]),t("div",ns,[t("div",os,[t("div",is,[e[29]||(e[29]=t("div",{class:"w-7 h-7 rounded-full bg-muted flex items-center justify-center text-xs font-bold text-muted-foreground shrink-0 mt-0.5"}," 1 ",-1)),t("div",rs,[t("div",ds,[t("span",us,d(p.value[0].key_preview),1),n(a(q),{variant:"outline",class:"text-[10px] px-1.5 py-0 h-[18px]"},{default:i(()=>[...e[28]||(e[28]=[u(" 主卡 ",-1)])]),_:1}),n(a(q),{variant:"outline",class:P(["text-[10px] px-1.5 py-0 h-[18px]",ue(p.value[0].status)])},{default:i(()=>[u(d(ce(p.value[0])),1)]),_:1},8,["class"])]),t("div",cs,[n(a(q),{variant:"outline",class:P(["max-w-full text-[10px] px-1.5 py-0 h-[18px]",a(ke)(p.value[0].service_type||"").badge]),title:W(p.value[0])},{default:i(()=>[t("span",ms,d(W(p.value[0])),1)]),_:1},8,["class","title"]),n(a(q),{variant:"outline",class:"text-[10px] px-1.5 py-0 h-[18px]"},{default:i(()=>[u(d(a(we)(p.value[0].billing_type||"")),1)]),_:1})]),t("div",fs,[t("div",vs,[t("span",ps,d(me(p.value[0])),1),t("span",{class:P(ve(p.value[0])?"text-red-500":"text-muted-foreground")},d(fe(p.value[0])),3)]),t("div",xs,[t("div",bs,[n(a(le),{"model-value":O(p.value[0]),class:"h-1.5"},null,8,["model-value"])]),t("span",gs,d(O(p.value[0]))+"%",1)])])])])]),E.value.length>0?(r(),x("div",_s,[(r(!0),x(se,null,ge(E.value,(l,o)=>(r(),x("div",{key:l.id},[e[32]||(e[32]=t("div",{class:"border-l-2 border-dashed border-primary/30 h-3 ml-4"},null,-1)),t("div",{class:P(["rounded-xl border p-4 transition-colors",pe(l)?"border-dashed border-border/50 bg-muted/10":"border-border/60 bg-muted/20 hover:bg-muted/30"])},[t("div",ys,[t("div",hs,d(o+2),1),t("div",ks,[t("div",ws,[t("div",Cs,[t("span",$s,d(l.key_preview),1),n(a(q),{variant:"outline",class:"text-[10px] px-1.5 py-0 h-[18px]"},{default:i(()=>[...e[30]||(e[30]=[u(" 子卡 ",-1)])]),_:1}),n(a(q),{variant:"outline",class:P(["text-[10px] px-1.5 py-0 h-[18px]",ue(l.status)])},{default:i(()=>[u(d(ce(l)),1)]),_:2},1032,["class"])]),t("div",qs,[t("div",js,[n(a(k),{variant:"ghost",size:"icon",class:"h-7 w-7",disabled:o===0||j.value,onClick:f=>Re(o),title:"合并记录不可排序"},{default:i(()=>[n(a(dt),{class:"h-3.5 w-3.5"})]),_:1},8,["disabled","onClick"]),n(a(k),{variant:"ghost",size:"icon",class:"h-7 w-7",disabled:o===E.value.length-1||j.value,onClick:f=>Te(o),title:"合并记录不可排序"},{default:i(()=>[n(a(rt),{class:"h-3.5 w-3.5"})]),_:1},8,["disabled","onClick"])]),n(a(tt),{orientation:"vertical",class:"mx-1.5 h-4"}),n(a(k),{variant:"ghost",size:"icon",class:"h-7 w-7 text-red-500 hover:text-red-600 hover:bg-red-50 dark:hover:bg-red-500/10",disabled:B.value,onClick:f=>Ve(l),title:"合并后不可解绑"},{default:i(()=>[n(a(De),{class:"h-3.5 w-3.5"})]),_:1},8,["disabled","onClick"])])]),t("div",Is,[n(a(q),{variant:"outline",class:P(["max-w-full text-[10px] px-1.5 py-0 h-[18px]",a(ke)(l.service_type||"").badge]),title:W(l)},{default:i(()=>[t("span",Es,d(W(l)),1)]),_:2},1032,["class","title"]),n(a(q),{variant:"outline",class:"text-[10px] px-1.5 py-0 h-[18px]"},{default:i(()=>[u(d(a(we)(l.billing_type||"")),1)]),_:2},1024)]),pe(l)?(r(),x("div",Ps,[...e[31]||(e[31]=[t("p",{class:"text-xs text-muted-foreground"}," 排到时自动激活,开始计算有效期 ",-1)])])):(r(),x("div",Ks,[t("div",Ds,[t("span",Ss,d(me(l)),1),t("span",{class:P(ve(l)?"text-red-500":"text-muted-foreground")},d(fe(l)),3)]),t("div",Us,[t("div",Bs,[n(a(le),{"model-value":O(l),class:"h-1.5"},null,8,["model-value"])]),t("span",Ms,d(O(l))+"%",1)])]))])])],2)]))),128))])):g("",!0),j.value?(r(),x("p",As,[n(a(K),{class:"h-3.5 w-3.5 animate-spin"}),e[33]||(e[33]=u(" 正在更新排序... ",-1))])):g("",!0)])]),_:1})]),_:1})):g("",!0),ie.value?(r(),v(a(S),{key:5,class:"border-border/60 bg-card/80 backdrop-blur-xl"},{default:i(()=>[n(a(D),{class:"p-8"},{default:i(()=>[t("div",zs,[t("div",Vs,[n(a(Pe),{class:"h-7 w-7 text-primary/60"})]),e[34]||(e[34]=t("h3",{class:"text-base font-semibold"},"独立卡模式",-1)),e[35]||(e[35]=t("p",{class:"text-sm text-muted-foreground mt-1"}," 尚未合并任何子卡,可在下方添加未激活子卡进行叠加充值 ",-1))])]),_:1})]),_:1})):g("",!0),re.value?(r(),v(a(S),{key:6,class:"border-border/60 bg-card/80 backdrop-blur-xl"},{default:i(()=>[n(a(D),{class:"p-6 space-y-4"},{default:i(()=>[t("div",Ls,[t("div",Ns,[n(a(ne),{class:"h-4 w-4 text-blue-500"})]),e[36]||(e[36]=u(" 合并信息 ",-1))]),t("div",Rs,[e[37]||(e[37]=t("p",{class:"text-sm text-muted-foreground mb-1"},"已合并到的主卡",-1)),t("p",Ts,d(te.value),1),Ue.value?(r(),x("p",Hs," 主卡记录已不存在,此合并记录仅保留用于追溯。 ")):g("",!0)]),t("div",Xs,[e[39]||(e[39]=t("div",{class:"space-y-1"},[t("p",{class:"text-sm font-medium text-foreground"},"不支持解绑"),t("p",{class:"text-xs leading-5 text-muted-foreground"}," 叠卡合并后子卡已注销,额度或时长已转入主卡。 ")],-1)),n(a(k),{variant:"secondary",size:"sm",class:"shrink-0",disabled:I.value,onClick:e[1]||(e[1]=l=>N.value=!0)},{default:i(()=>[I.value?(r(),v(a(K),{key:0,class:"h-4 w-4 animate-spin"})):(r(),v(a(De),{key:1,class:"h-4 w-4"})),e[38]||(e[38]=u(" 不支持解绑 ",-1))]),_:1},8,["disabled"])])]),_:1})]),_:1})):g("",!0),Be.value?(r(),v(a(S),{key:7,class:"border-border/60 bg-card/80 backdrop-blur-xl"},{default:i(()=>[n(a(D),{class:"p-6 space-y-4"},{default:i(()=>[t("div",null,[t("div",Fs,[t("div",Gs,[n(a(Ke),{class:"h-4 w-4 text-emerald-500"})]),e[40]||(e[40]=u(" 合并子卡 ",-1))]),e[41]||(e[41]=t("p",{class:"text-sm text-muted-foreground mt-1 ml-10"}," 输入未激活子卡 API Key 进行合并,子卡必须与主卡的服务类型、子服务类型和计费方式一致 ",-1))]),t("div",Js,[t("div",Qs,[n(a(Ye),{modelValue:V.value,"onUpdate:modelValue":e[2]||(e[2]=l=>V.value=l),type:G.value?"text":"password",placeholder:"请输入子卡 API Key",autocomplete:"off",spellcheck:"false",class:"pr-9 font-mono text-sm",disabled:U.value,onKeydown:Ge(xe,["enter"])},null,8,["modelValue","type","disabled"]),t("button",{type:"button",class:"absolute right-2.5 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground transition-colors",onClick:e[3]||(e[3]=l=>G.value=!G.value)},[G.value?(r(),v(a(nt),{key:0,class:"h-4 w-4"})):(r(),v(a(et),{key:1,class:"h-4 w-4"}))])]),n(a(k),{disabled:!V.value.trim()||!de.value||U.value,onClick:xe},{default:i(()=>[n(a(Ke),{class:"h-4 w-4 mr-1"}),e[42]||(e[42]=u(" 添加 ",-1))]),_:1},8,["disabled"])]),y.value.length>0?(r(),x("div",Os,[t("p",Ws," 待合并("+d(y.value.length)+" 张) ",1),t("div",Zs,[(r(!0),x(se,null,ge(y.value,(l,o)=>(r(),x("div",{key:o,class:"inline-flex items-center gap-1.5 rounded-full border border-border/60 bg-muted/30 px-3 py-1 text-sm"},[t("span",Ys,d(He(l)),1),t("button",{type:"button",class:"text-muted-foreground hover:text-red-500 transition-colors",onClick:f=>Ae(o)},[n(a(We),{class:"h-3 w-3"})],8,ea)]))),128))])])):g("",!0),y.value.length>0?(r(),v(a(k),{key:1,class:"w-full",disabled:U.value,onClick:ze},{default:i(()=>[U.value?(r(),v(a(K),{key:0,class:"h-4 w-4 mr-2 animate-spin"})):(r(),v(a(ne),{key:1,class:"h-4 w-4 mr-2"})),u(" 合并 "+d(y.value.length)+" 张子卡 ",1)]),_:1},8,["disabled"])):g("",!0)]),_:1})]),_:1})):g("",!0),t("button",{type:"button",class:"flex items-center gap-1.5 text-sm text-muted-foreground hover:text-foreground transition-colors",onClick:e[4]||(e[4]=l=>Q.value=!Q.value)},[Q.value?(r(),v(a(it),{key:1,class:"h-4 w-4"})):(r(),v(a(ot),{key:0,class:"h-4 w-4"})),e[43]||(e[43]=u(" 叠卡规则说明 ",-1))]),Q.value?(r(),v(a(S),{key:8,class:"border-border/40"},{default:i(()=>[n(a(D),{class:"p-5"},{default:i(()=>[...e[44]||(e[44]=[t("ul",{class:"space-y-2 text-sm text-muted-foreground"},[t("li",null,"1. 子卡必须与主卡类型(服务类型、子服务类型、计费方式)一致"),t("li",null,"2. 子卡必须未激活,不能是已激活、已过期、已禁用或已注销的卡"),t("li",null,"3. 合并后子卡会注销,额度或时长一次性转入主卡"),t("li",null,"4. 周期卡按子卡总价值折算为主卡可用天数,统一按北京时间计算")],-1)])]),_:1})]),_:1})):g("",!0)],64)),n(a(Ee),{open:L.value,"onUpdate:open":e[6]||(e[6]=l=>L.value=l)},{default:i(()=>[n(a(Ce),{class:"sm:max-w-md"},{default:i(()=>[n(a($e),null,{default:i(()=>[n(a(qe),{class:"flex items-center gap-2"},{default:i(()=>[n(a(H),{class:"h-5 w-5 text-amber-500"}),e[45]||(e[45]=u(" 不支持解绑 ",-1))]),_:1}),n(a(je),null,{default:i(()=>[e[46]||(e[46]=u(" 子卡合并后已注销,不能解绑: ",-1)),t("span",ta,d(Y.value),1),e[47]||(e[47]=u("。 ",-1))]),_:1})]),_:1}),n(a(Ie),{class:"gap-2 sm:gap-3"},{default:i(()=>[n(a(k),{variant:"outline",disabled:B.value,onClick:e[5]||(e[5]=l=>L.value=!1)},{default:i(()=>[...e[48]||(e[48]=[u("取消",-1)])]),_:1},8,["disabled"]),n(a(k),{variant:"destructive",disabled:B.value,onClick:Le},{default:i(()=>[B.value?(r(),v(a(K),{key:0,class:"h-4 w-4 mr-2 animate-spin"})):g("",!0),e[49]||(e[49]=u(" 不支持解绑 ",-1))]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1},8,["open"]),n(a(Ee),{open:N.value,"onUpdate:open":e[8]||(e[8]=l=>N.value=l)},{default:i(()=>[n(a(Ce),{class:"sm:max-w-md"},{default:i(()=>[n(a($e),null,{default:i(()=>[n(a(qe),{class:"flex items-center gap-2"},{default:i(()=>[n(a(H),{class:"h-5 w-5 text-amber-500"}),e[50]||(e[50]=u(" 不支持解绑 ",-1))]),_:1}),n(a(je),null,{default:i(()=>[e[51]||(e[51]=u(" 子卡已经合并到主卡 ",-1)),t("span",sa,d(te.value),1),e[52]||(e[52]=u(",不能再解绑。 ",-1))]),_:1})]),_:1}),n(a(Ie),{class:"gap-2 sm:gap-3"},{default:i(()=>[n(a(k),{variant:"outline",disabled:I.value,onClick:e[7]||(e[7]=l=>N.value=!1)},{default:i(()=>[...e[53]||(e[53]=[u("取消",-1)])]),_:1},8,["disabled"]),n(a(k),{variant:"destructive",disabled:I.value,onClick:Ne},{default:i(()=>[I.value?(r(),v(a(K),{key:0,class:"h-4 w-4 mr-2 animate-spin"})):g("",!0),e[54]||(e[54]=u(" 不支持解绑 ",-1))]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1},8,["open"])])}}});export{ga as default};
|