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

View File

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

View File

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

View File

@ -194,9 +194,6 @@ async function submitWithdraw() {
submitting.value = true
try {
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')
close()
} finally {

View File

@ -75,12 +75,8 @@ export const useUserStore = defineStore('user', () => {
balance.value = formatUsdcBalance(String(avail))
}
})
sdk.onConnect(() => {
console.log('[UserStore] UserSocket 已连接')
})
sdk.onDisconnect(() => {
console.log('[UserStore] UserSocket 已断开')
})
sdk.onConnect(() => {})
sdk.onDisconnect(() => {})
sdk.onError((e) => {
console.error('[UserStore] UserSocket 错误:', e)
})
@ -161,7 +157,6 @@ export const useUserStore = defineStore('user', () => {
if (!headers) return
try {
const res = await getUserInfo(headers)
console.log('[fetchUserInfo] 接口响应:', JSON.stringify(res, null, 2))
const data = res.data as Record<string, unknown> | undefined
// 接口返回 data.userInfo 或 data.user取实际用户对象若仍含 userInfo 则再取一层
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[] {
const range = selectedTimeRange.value
return markets.value.map((market) => {
const list = markets.value
return list.map((market, i) => {
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 {
name: name + (name.length >= 32 ? '…' : ''),
name,
data: generateDataForMarket(chance || 20, range),
}
})
@ -432,7 +436,7 @@ function buildOption(seriesArr: ChartSeriesItem[], containerWidth?: number) {
itemGap: 12,
},
grid: {
left: 16,
left: 8,
right: 48,
top: 40,
bottom: isMobile ? 44 : 28,
@ -458,6 +462,15 @@ function initChart() {
chartInstance = echarts.init(chartContainerRef.value)
const w = chartContainerRef.value.clientWidth
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() {
@ -556,7 +569,6 @@ function onTradeSubmit(payload: {
marketId?: string
}) {
// APIpayload marketId
console.log('Trade submit', payload)
}
const toastStore = useToastStore()

View File

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

View File

@ -64,7 +64,6 @@ const connectWithWallet = async () => {
})
const walletAddress = accounts[0]
console.log('Connected to wallet with account:', walletAddress)
if (!walletAddress || !/^0x[0-9a-fA-F]{40}$/.test(walletAddress)) {
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) {
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 {
detailError.value = res.msg || t('error.loadFailed')
eventDetail.value = null
@ -791,7 +808,7 @@ function buildOption(chartData: [number, number][], containerWidth?: number) {
axisPointer: { animation: false },
},
grid: {
left: 48,
left: 8,
right: 48,
top: 16,
bottom: isMobile ? 44 : 28,