This commit is contained in:
2026-05-28 15:07:05 +08:00
parent 9954a73543
commit da0b61b8e2
5 changed files with 44 additions and 15 deletions

View File

@ -106,13 +106,17 @@ const responseInterceptor = <T = unknown>(response: AxiosResponse<ApiResponse<T>
removeStorage('userInfo')
removeStorage('menusInfo')
removeStorage('permissionsInfo')
window.location.href = '/user/login'
throw new Error(data.msg)
setTimeout(()=>{
window.location.href = '/user/login'
}, 1000)
break
case -101:
data.msg = 'token错误'
removeStorage('token')
window.location.href = '/user/login'
throw new Error(data.msg)
setTimeout(()=>{
window.location.href = '/user/login'
}, 1000)
break
default:
throw new Error(data.msg || '操作失败!')
}

View File

@ -4,6 +4,7 @@ import { MQTTClient } from '@/utils/mqttClient'
import { useUserStore } from './user'
import { useOrderPositionStore } from '@/stores/modules/orderPosition.ts'
import { formatDate } from '@/utils/timeUtils'
import { initMqttKeyApi } from '@/api/modules/user'
// ============================================================
// 类型声明
@ -47,6 +48,8 @@ export const useTransactionStore = defineStore('transaction', () => {
const positionList = ref<PositionItem[]>([])
/** 做市商浮动盈亏数据 Map<account_id, float_profit_loss> */
const marketFloatProfitMap = ref<Map<string, string>>(new Map())
/** 做市商平仓盈亏数据 Map<account_id, close_profit_loss> */
const marketCloseProfitMap = ref<Map<string, string>>(new Map())
// ------------------ 初始化 ------------------
@ -61,6 +64,8 @@ export const useTransactionStore = defineStore('transaction', () => {
try {
// 先调用 initMqttKey 接口获取 MQTT key
const foreignDeviceNo = sessionStorage.getItem('foreign_device_no') || ''
const mqttKey = await initMqttKeyApi({ device_no: foreignDeviceNo })
// 使用 mqttKey 连接
await mqttClient.connect(import.meta.env.VITE_MQTT_TRANSACTION_HOST as string, {
username: `${redis_key}`,
@ -87,7 +92,7 @@ export const useTransactionStore = defineStore('transaction', () => {
mqttClient.onTopicMessages({
[topic]: (_topic: string, msg: string): void => {
// console.log(_topic, msg)
console.log(_topic, msg)
let [type, data] = msg.split('|')
switch (type) {
@ -112,22 +117,26 @@ export const useTransactionStore = defineStore('transaction', () => {
/**
*
* account_id:float_profit_loss (84:6992.730000)
* account_id:float_profit_loss:close_profit_loss (84:0.000000:0.000000)
*/
const handleMarketFloatProfit = (data: string): void => {
if (!data) return
const fields = data.split(':')
if (fields.length < 2) return
if (fields.length < 3) return
const account_id = fields[0]
const float_profit_loss = fields[1]
const float_profit_loss = fields[1] as string
const close_profit_loss = fields[2] as string
// 更新 Map
// 更新浮动盈亏 Map
marketFloatProfitMap.value.set(account_id, float_profit_loss)
// 触发响应式更新(创建新的 Map 实例)
marketFloatProfitMap.value = new Map(marketFloatProfitMap.value)
// 更新平仓盈亏 Map
marketCloseProfitMap.value.set(account_id, close_profit_loss)
marketCloseProfitMap.value = new Map(marketCloseProfitMap.value)
}
@ -169,6 +178,7 @@ export const useTransactionStore = defineStore('transaction', () => {
mqttClient?.disconnect()
positionList.value = []
marketFloatProfitMap.value.clear()
marketCloseProfitMap.value.clear()
}
/**
@ -183,6 +193,7 @@ export const useTransactionStore = defineStore('transaction', () => {
mqttClient,
positionList,
marketFloatProfitMap,
marketCloseProfitMap,
initMarketConditionsMQTT,
getPositionList,
requestMarketFloatProfit,

View File

@ -1,7 +1,7 @@
import mqtt from 'mqtt'
import type { MqttClient, IClientOptions, IClientPublishOptions } from 'mqtt'
import type { QoS } from 'mqtt-packet'
import { initMqttKeyApi } from '@/api/modules/user'
// import { initMqttKeyApi } from '@/api/modules/user'
/**
*
*
@ -100,9 +100,9 @@ class MQTTClient {
*
*/
this.client.on('reconnect',async () => {
const foreignDeviceNo = sessionStorage.getItem('foreign_device_no') || ''
const mqttKey = await initMqttKeyApi({ device_no: foreignDeviceNo })
console.log("initMqttKey result:", mqttKey)
// const foreignDeviceNo = sessionStorage.getItem('foreign_device_no') || ''
// const mqttKey = await initMqttKeyApi({ device_no: foreignDeviceNo })
// console.log("initMqttKey result:", mqttKey)
console.log('🔄 MQTT 正在重连...')
})

View File

@ -35,6 +35,9 @@
<template #floatProfitLoss="{ row }">
<span>{{ getMarketFloatProfit(row.id) }}</span>
</template>
<template #closeProfitLoss="{ row }">
<span>{{ getMarketCloseProfit(row.id) }}</span>
</template>
<template #pointSpread="{ row }">
<el-button type="primary" size="small" @click="handleViewPointDiff(row)"> 查看 </el-button>
</template>
@ -266,6 +269,17 @@ const getMarketFloatProfit = (accountId: string | number): string => {
return parts[0] + '.' + (parts[1] + '00').slice(0, 2)
}
/**
* @description 获取做市商的平仓盈亏值
*/
const getMarketCloseProfit = (accountId: string | number): string => {
const profit = transactionStore.marketCloseProfitMap.get(String(accountId))
if (!profit) return '--'
const parts = profit.split('.')
if (parts.length === 1) return profit + '.00'
return parts[0] + '.' + (parts[1] + '00').slice(0, 2)
}
/**
* @description 获取浮动盈亏样式类
*/

View File

@ -49,7 +49,7 @@ export const marketTableColumns = [
//浮动盈亏
{ label: '浮动盈亏', slotName: 'floatProfitLoss', align: 'center' as const, width: '100px', isNumber: true },
//平仓盈亏
{ label: '平仓盈亏', prop: 'closeProfitLoss', align: 'center' as const, width: '150px', isNumber: true },
{ label: '平仓盈亏', slotName: 'closeProfitLoss', align: 'center' as const, width: '150px', isNumber: true },
//风险金
{ label: '风险金', prop: 'riskMargin', align: 'center' as const, width: '150px', isNumber: true },
//服务费