dsh-totonai 0.1.4 → 0.1.5
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/client/index.js +2 -5
- package/lib/index.js +10 -5
- package/lib/panel.js +11 -5
- package/package.json +1 -1
package/client/index.js
CHANGED
|
@@ -131,10 +131,7 @@ window.__ModuleLoader__.load({
|
|
|
131
131
|
h('div', { key: 'lv', style: { fontSize: 12, padding: '2px 8px', borderRadius: 999, border: '1px solid ' + C.border, color: d.active ? C.ok : C.warn } }, d.active ? d.displayName || d.level : L('未开通', 'Inactive')),
|
|
132
132
|
]),
|
|
133
133
|
d.active
|
|
134
|
-
?
|
|
135
|
-
h('div', { key: 'a' }, L('总额度 ', 'Quota ') + tok(d.tokenQuota) + ' token'),
|
|
136
|
-
h('div', { key: 'b' }, L('已用 ', 'Used ') + tok(d.usedToken) + ' token · ' + L('剩余 ', 'Left ') + tok(d.remainToken) + ' token'),
|
|
137
|
-
])
|
|
134
|
+
? null
|
|
138
135
|
: h('div', { key: 'kv', style: Object.assign({}, S.kv, { marginTop: 8 }) }, L('当前是免费档,充值后即可调用模型。', 'Free tier: recharge to unlock models.')),
|
|
139
136
|
h('div', { key: 'act', style: { marginTop: 10, display: 'flex', gap: 8 } }, [
|
|
140
137
|
h('button', { key: 'r', type: 'button', style: S.btn, disabled: refreshing, onClick: async () => { setRefreshing(true); try { await props.onRefresh() } finally { setRefreshing(false) } } }, refreshing ? L('刷新中…', 'Refreshing…') : L('刷新状态', 'Refresh')),
|
|
@@ -198,7 +195,7 @@ window.__ModuleLoader__.load({
|
|
|
198
195
|
onClick: () => setPick(Object.assign({}, pick, { level: k })),
|
|
199
196
|
}, [
|
|
200
197
|
h('div', { key: 'n', style: { fontSize: 13, fontWeight: 600 } }, p.display_name || k),
|
|
201
|
-
h('div', { key: 'p', style: { fontSize: 12, color: C.sub, marginTop: 4 } }, '¥' + (p.month_price || 0) + L(' / 月', ' / mo')
|
|
198
|
+
h('div', { key: 'p', style: { fontSize: 12, color: C.sub, marginTop: 4 } }, '¥' + (p.month_price || 0) + L(' / 月', ' / mo')),
|
|
202
199
|
])
|
|
203
200
|
})),
|
|
204
201
|
h('div', { key: 'per', style: Object.assign({}, S.row, { marginTop: 10 }) }, [
|
package/lib/index.js
CHANGED
|
@@ -9759,7 +9759,6 @@ async function doStatus(deps) {
|
|
|
9759
9759
|
}
|
|
9760
9760
|
const level = String(info.level ?? "free");
|
|
9761
9761
|
const quota = Number(info.token_quota ?? 0);
|
|
9762
|
-
const used = Number(info.used_token ?? 0);
|
|
9763
9762
|
return {
|
|
9764
9763
|
ok: true,
|
|
9765
9764
|
loggedIn: true,
|
|
@@ -9767,9 +9766,6 @@ async function doStatus(deps) {
|
|
|
9767
9766
|
level,
|
|
9768
9767
|
displayName: TIER_NAMES[level] ?? level,
|
|
9769
9768
|
active: level !== "free" && quota > 0,
|
|
9770
|
-
tokenQuota: quota,
|
|
9771
|
-
usedToken: used,
|
|
9772
|
-
remainToken: Math.max(0, quota - used),
|
|
9773
9769
|
baseURL: deps.baseURL,
|
|
9774
9770
|
qr: {
|
|
9775
9771
|
wechat: `${deps.baseURL}/qrcode/wechat`,
|
|
@@ -9804,7 +9800,16 @@ async function doRegister(deps, body) {
|
|
|
9804
9800
|
}
|
|
9805
9801
|
async function doQuote(deps) {
|
|
9806
9802
|
const cfg = await apiJson(deps.baseURL, "/api/package_config", { timeoutMs: deps.requestTimeoutMs });
|
|
9807
|
-
|
|
9803
|
+
const raw = cfg?.packages ?? {};
|
|
9804
|
+
const packages = {};
|
|
9805
|
+
for (const [level, info] of Object.entries(raw)) {
|
|
9806
|
+
packages[level] = {
|
|
9807
|
+
display_name: String(info?.display_name ?? level),
|
|
9808
|
+
month_price: Number(info?.month_price ?? 0),
|
|
9809
|
+
year_price: Number(info?.year_price ?? 0)
|
|
9810
|
+
};
|
|
9811
|
+
}
|
|
9812
|
+
return { ok: true, packages };
|
|
9808
9813
|
}
|
|
9809
9814
|
async function doClaim(deps, body) {
|
|
9810
9815
|
const level = String(body?.level ?? "");
|
package/lib/panel.js
CHANGED
|
@@ -43,7 +43,6 @@ async function doStatus(deps) {
|
|
|
43
43
|
}
|
|
44
44
|
const level = String(info.level ?? 'free');
|
|
45
45
|
const quota = Number(info.token_quota ?? 0);
|
|
46
|
-
const used = Number(info.used_token ?? 0);
|
|
47
46
|
return {
|
|
48
47
|
ok: true,
|
|
49
48
|
loggedIn: true,
|
|
@@ -51,9 +50,6 @@ async function doStatus(deps) {
|
|
|
51
50
|
level,
|
|
52
51
|
displayName: TIER_NAMES[level] ?? level,
|
|
53
52
|
active: level !== 'free' && quota > 0,
|
|
54
|
-
tokenQuota: quota,
|
|
55
|
-
usedToken: used,
|
|
56
|
-
remainToken: Math.max(0, quota - used),
|
|
57
53
|
baseURL: deps.baseURL,
|
|
58
54
|
qr: {
|
|
59
55
|
wechat: `${deps.baseURL}/qrcode/wechat`,
|
|
@@ -93,7 +89,17 @@ async function doRegister(deps, body) {
|
|
|
93
89
|
}
|
|
94
90
|
async function doQuote(deps) {
|
|
95
91
|
const cfg = await apiJson(deps.baseURL, '/api/package_config', { timeoutMs: deps.requestTimeoutMs });
|
|
96
|
-
|
|
92
|
+
// 只向面板暴露档位名称与价格:套餐里的 token 额度属于运营内部参数,不下发到客户端
|
|
93
|
+
const raw = (cfg?.packages ?? {});
|
|
94
|
+
const packages = {};
|
|
95
|
+
for (const [level, info] of Object.entries(raw)) {
|
|
96
|
+
packages[level] = {
|
|
97
|
+
display_name: String(info?.display_name ?? level),
|
|
98
|
+
month_price: Number(info?.month_price ?? 0),
|
|
99
|
+
year_price: Number(info?.year_price ?? 0),
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
return { ok: true, packages };
|
|
97
103
|
}
|
|
98
104
|
async function doClaim(deps, body) {
|
|
99
105
|
const level = String(body?.level ?? '');
|