优化:UI和日志

This commit is contained in:
ivan 2026-02-26 19:29:20 +08:00
parent 95d20a9bb1
commit 6b12938c89
9 changed files with 59 additions and 32 deletions

View File

@ -112,27 +112,34 @@ export class UserSdk {
// 拼接 Token // 拼接 Token
const separator = baseUrl.includes('?') ? '&' : '?'; const separator = baseUrl.includes('?') ? '&' : '?';
this.url = `${baseUrl}${separator}token=${this.token}`; this.url = `${baseUrl}${separator}token=${this.token}`;
console.log('[UserSdk] 初始化:', {
url: this.url.replace(/token=[^&]+/, 'token=***'),
autoReconnect: this.autoReconnect,
reconnectInterval: this.reconnectInterval,
maxReconnectAttempts: this.maxReconnectAttempts,
});
} }
// 连接 // 连接
public connect() { public connect() {
if (this.ws) { if (this.ws) {
console.warn("UserSdk: WebSocket already connected or connecting"); console.warn('[UserSdk] 已连接或正在连接,跳过');
return; return;
} }
try { try {
console.log(`UserSdk: Connecting to ${this.url}...`); console.log('[UserSdk] 正在连接...', this.url.replace(/token=[^&]+/, 'token=***'));
this.ws = new WebSocket(this.url); this.ws = new WebSocket(this.url);
this.ws.onopen = (event: Event) => { this.ws.onopen = (event: Event) => {
console.log("UserSdk: Connected"); console.log('[UserSdk] 已连接');
this.reconnectAttempts = 0; this.reconnectAttempts = 0;
this.listeners.connect.forEach(cb => cb(event)); this.listeners.connect.forEach(cb => cb(event));
}; };
this.ws.onclose = (event: CloseEvent) => { this.ws.onclose = (event: CloseEvent) => {
console.log(`UserSdk: Disconnected (Code: ${event.code})`); console.log('[UserSdk] 已断开', { code: event.code, reason: event.reason, wasClean: event.wasClean });
this.ws = null; this.ws = null;
this.listeners.disconnect.forEach(cb => cb(event)); this.listeners.disconnect.forEach(cb => cb(event));
@ -142,7 +149,7 @@ export class UserSdk {
}; };
this.ws.onerror = (event: Event) => { this.ws.onerror = (event: Event) => {
console.error("UserSdk: Error", event); console.error('[UserSdk] WebSocket 错误', event);
this.listeners.error.forEach(cb => cb(event)); this.listeners.error.forEach(cb => cb(event));
}; };
@ -152,18 +159,19 @@ export class UserSdk {
const msg = JSON.parse(raw) as UserMsg; const msg = JSON.parse(raw) as UserMsg;
this.handleMessage(msg); this.handleMessage(msg);
} catch (e) { } catch (e) {
console.error("UserSdk: Failed to parse message", event.data); console.error('[UserSdk] 消息解析失败', event.data, e);
} }
}; };
} catch (e) { } catch (e) {
console.error("UserSdk: Connection failed", e); console.error('[UserSdk] 连接失败', e);
if (this.autoReconnect) this.handleReconnect(); if (this.autoReconnect) this.handleReconnect();
} }
} }
// 断开连接 // 断开连接
public disconnect() { public disconnect() {
console.log('[UserSdk] 主动断开连接');
this.isExplicitClose = true; this.isExplicitClose = true;
if (this.ws) { if (this.ws) {
this.ws.close(); this.ws.close();
@ -175,31 +183,35 @@ export class UserSdk {
private handleMessage(msg: UserMsg) { private handleMessage(msg: UserMsg) {
switch (msg.type) { switch (msg.type) {
case 'welcome': case 'welcome':
console.log('[UserSdk] 收到 welcome', msg.msg ?? msg);
this.listeners.welcome.forEach(cb => cb(msg)); this.listeners.welcome.forEach(cb => cb(msg));
break; break;
case 'order_update': case 'order_update':
console.log('[UserSdk] 收到 order_update', msg.data);
this.listeners.order.forEach(cb => cb(msg.data)); this.listeners.order.forEach(cb => cb(msg.data));
break; break;
case 'position_update': case 'position_update':
console.log('[UserSdk] 收到 position_update', msg.data);
this.listeners.position.forEach(cb => cb(msg.data)); this.listeners.position.forEach(cb => cb(msg.data));
break; break;
case 'balance_update': case 'balance_update':
console.log('[UserSdk] 收到 balance_update', msg.data);
this.listeners.balance.forEach(cb => cb(msg.data)); this.listeners.balance.forEach(cb => cb(msg.data));
break; break;
default: default:
console.warn("UserSdk: Unknown message type", msg); console.warn('[UserSdk] 未知消息类型', msg);
} }
} }
// 重连逻辑 // 重连逻辑
private handleReconnect() { private handleReconnect() {
if (this.reconnectAttempts >= this.maxReconnectAttempts) { if (this.reconnectAttempts >= this.maxReconnectAttempts) {
console.error("UserSdk: Max reconnect attempts reached"); console.error('[UserSdk] 已达最大重连次数', this.maxReconnectAttempts);
return; return;
} }
this.reconnectAttempts++; this.reconnectAttempts++;
console.log(`UserSdk: Reconnecting in ${this.reconnectInterval}ms (Attempt ${this.reconnectAttempts})...`); console.log('[UserSdk] 重连中...', { attempt: this.reconnectAttempts, max: this.maxReconnectAttempts, delayMs: this.reconnectInterval });
setTimeout(() => { setTimeout(() => {
this.connect(); this.connect();
}, this.reconnectInterval); }, this.reconnectInterval);

View File

@ -230,7 +230,6 @@ export async function getPmTagMain(): Promise<CategoryTreeResponse> {
const res = await get<{ code: number; data: GetPmTagCatalogData; msg: string }>( const res = await get<{ code: number; data: GetPmTagCatalogData; msg: string }>(
'/pmTagCatalog/getPmTagCatalogPublic' '/pmTagCatalog/getPmTagCatalogPublic'
) )
console.log('[getPmTagCatalogPublic] 原始响应:', JSON.stringify(res, null, 2))
let raw: PmTagCatalogItem[] = [] let raw: PmTagCatalogItem[] = []
const d = res.data const d = res.data
if (d && typeof d === 'object' && !Array.isArray(d)) { if (d && typeof d === 'object' && !Array.isArray(d)) {

View File

@ -1684,7 +1684,6 @@ const showDepositForBuy = computed(() => !canAffordBuy.value)
/** Buy 模式且余额不足时显示 Deposit否则显示 Buy Yes/No */ /** Buy 模式且余额不足时显示 Deposit否则显示 Buy Yes/No */
const deposit = () => { const deposit = () => {
console.log('Depositing amount:', amount.value)
// API // API
} }
@ -1731,7 +1730,6 @@ async function submitOrder() {
return return
} }
const uid = userStore?.user?.ID ?? 0 const uid = userStore?.user?.ID ?? 0
console.log('[submitOrder] 用户信息: user=', userStore.user, 'uid=', uid)
const userIdNum = const userIdNum =
typeof uid === 'number' typeof uid === 'number'
? uid ? uid
@ -1739,7 +1737,6 @@ async function submitOrder() {
? parseInt(String(uid), 10) ? parseInt(String(uid), 10)
: 0 : 0
if (!Number.isFinite(userIdNum) || userIdNum <= 0) { if (!Number.isFinite(userIdNum) || userIdNum <= 0) {
console.warn('[submitOrder] 用户信息异常: user=', userStore.user, 'uid=', uid)
orderError.value = t('trade.userError') orderError.value = t('trade.userError')
return return
} }

View File

@ -194,9 +194,6 @@ async function submitWithdraw() {
submitting.value = true submitting.value = true
try { try {
await new Promise((r) => setTimeout(r, 800)) await new Promise((r) => setTimeout(r, 800))
const dest =
destinationType.value === 'wallet' ? connectedAddress.value : customAddress.value.trim()
console.log('Withdraw', { amount: amount.value, network: selectedNetwork.value, to: dest })
emit('success') emit('success')
close() close()
} finally { } finally {

View File

@ -75,12 +75,8 @@ export const useUserStore = defineStore('user', () => {
balance.value = formatUsdcBalance(String(avail)) balance.value = formatUsdcBalance(String(avail))
} }
}) })
sdk.onConnect(() => { sdk.onConnect(() => {})
console.log('[UserStore] UserSocket 已连接') sdk.onDisconnect(() => {})
})
sdk.onDisconnect(() => {
console.log('[UserStore] UserSocket 已断开')
})
sdk.onError((e) => { sdk.onError((e) => {
console.error('[UserStore] UserSocket 错误:', e) console.error('[UserStore] UserSocket 错误:', e)
}) })
@ -161,7 +157,6 @@ export const useUserStore = defineStore('user', () => {
if (!headers) return if (!headers) return
try { try {
const res = await getUserInfo(headers) const res = await getUserInfo(headers)
console.log('[fetchUserInfo] 接口响应:', JSON.stringify(res, null, 2))
const data = res.data as Record<string, unknown> | undefined const data = res.data as Record<string, unknown> | undefined
// 接口返回 data.userInfo 或 data.user取实际用户对象若仍含 userInfo 则再取一层 // 接口返回 data.userInfo 或 data.user取实际用户对象若仍含 userInfo 则再取一层
let u = (data?.userInfo ?? data?.user ?? data) as Record<string, unknown> let u = (data?.userInfo ?? data?.user ?? data) as Record<string, unknown>

View File

@ -348,11 +348,15 @@ function generateDataForMarket(baseChance: number, range: string): [number, numb
function generateAllData(): ChartSeriesItem[] { function generateAllData(): ChartSeriesItem[] {
const range = selectedTimeRange.value const range = selectedTimeRange.value
return markets.value.map((market) => { const list = markets.value
return list.map((market, i) => {
const chance = marketChance(market) const chance = marketChance(market)
const name = (market.question || 'Market').slice(0, 32) const base = (market.question || 'Market').slice(0, 32)
const baseName = base + (base.length >= 32 ? '…' : '')
// name ECharts
const name = list.length > 1 ? `${baseName} (${i + 1}/${list.length})` : baseName
return { return {
name: name + (name.length >= 32 ? '…' : ''), name,
data: generateDataForMarket(chance || 20, range), data: generateDataForMarket(chance || 20, range),
} }
}) })
@ -432,7 +436,7 @@ function buildOption(seriesArr: ChartSeriesItem[], containerWidth?: number) {
itemGap: 12, itemGap: 12,
}, },
grid: { grid: {
left: 16, left: 8,
right: 48, right: 48,
top: 40, top: 40,
bottom: isMobile ? 44 : 28, bottom: isMobile ? 44 : 28,
@ -458,6 +462,15 @@ function initChart() {
chartInstance = echarts.init(chartContainerRef.value) chartInstance = echarts.init(chartContainerRef.value)
const w = chartContainerRef.value.clientWidth const w = chartContainerRef.value.clientWidth
chartInstance.setOption(buildOption(chartData.value, w)) chartInstance.setOption(buildOption(chartData.value, w))
// 便
console.log('[EventMarkets] 数据分析:', {
marketsCount: markets.value.length,
chartSeriesCount: chartData.value.length,
containerWidth: w,
legendData: chartData.value.map((s) => ({ name: s.name, nameLen: s.name.length, points: s.data.length })),
eventDetail: eventDetail.value ? { title: eventDetail.value.title, id: eventDetail.value.ID } : null,
})
} }
function updateChartData() { function updateChartData() {
@ -556,7 +569,6 @@ function onTradeSubmit(payload: {
marketId?: string marketId?: string
}) { }) {
// APIpayload marketId // APIpayload marketId
console.log('Trade submit', payload)
} }
const toastStore = useToastStore() const toastStore = useToastStore()

View File

@ -612,7 +612,6 @@ async function loadEvents(page: number, append: boolean, keyword?: string) {
}) })
} catch (e) { } catch (e) {
if (!append) eventList.value = [] if (!append) eventList.value = []
console.warn('getPmEventList failed', e)
} }
} }

View File

@ -64,7 +64,6 @@ const connectWithWallet = async () => {
}) })
const walletAddress = accounts[0] const walletAddress = accounts[0]
console.log('Connected to wallet with account:', walletAddress)
if (!walletAddress || !/^0x[0-9a-fA-F]{40}$/.test(walletAddress)) { if (!walletAddress || !/^0x[0-9a-fA-F]{40}$/.test(walletAddress)) {
throw new Error('Invalid wallet address format. Please check your wallet connection.') throw new Error('Invalid wallet address format. Please check your wallet connection.')

View File

@ -296,6 +296,23 @@ async function loadEventDetail() {
}) })
if (res.code === 0 || res.code === 200) { if (res.code === 0 || res.code === 200) {
eventDetail.value = res.data ?? null eventDetail.value = res.data ?? null
// 便
const ev = eventDetail.value
console.log('[TradeDetail] 单个市场详情:', {
id: ev?.ID ?? ev?.id,
title: ev?.title,
slug: ev?.slug,
volume: ev?.volume,
endDate: ev?.endDate,
marketsCount: ev?.markets?.length ?? 0,
firstMarket: ev?.markets?.[0]
? {
question: ev.markets[0].question,
outcomePrices: ev.markets[0].outcomePrices,
marketId: ev.markets[0].marketId,
}
: null,
})
} else { } else {
detailError.value = res.msg || t('error.loadFailed') detailError.value = res.msg || t('error.loadFailed')
eventDetail.value = null eventDetail.value = null
@ -791,7 +808,7 @@ function buildOption(chartData: [number, number][], containerWidth?: number) {
axisPointer: { animation: false }, axisPointer: { animation: false },
}, },
grid: { grid: {
left: 48, left: 8,
right: 48, right: 48,
top: 16, top: 16,
bottom: isMobile ? 44 : 28, bottom: isMobile ? 44 : 28,