import * as React from "react"; import { YMDHms } from "@utils/time"; import { toUpper, map as RDmap, clone } from "ramda"; import { OrderSideEnum, OrderTypeEnum, PositionSideEnum } from "@shared/types"; import { getIncomeTypeLabel, getMarginTypeLabel, getOrderStatusLabel, getOrderTypeLabel, getSideTypeLabel } from "@components/OrderList/columnConfigs/mappings"; import { formatFloor, formatMoney, toDefaultNumber } from "@utils/FormatNumber"; import { PositionColumnsDelivery } from "@components/OrderList/columnComps/PositionColumnsDelivery"; import { PositionColumnsLeverage } from "@components/OrderList/columnComps/PositionColumnsLeverage"; import { PositionColumnsPosMargin } from "@components/OrderList/columnComps/PositionColumnsPosMargin"; import Button from "@components/Button"; import { getValueByContr } from "@utils/contractRules"; export const settingMaps: any = { createTime: { code: "createTime", name: "时间", width: 120, render(value: any): React.ReactNode { return
{YMDHms(value)}
; } }, positionSymbol: { code: "symbol", name: "合约", width: 100, render(value: any, row: any): React.ReactNode { const isLong = row?.positionSide === PositionSideEnum.Long; return (
{toUpper(value)} {getMarginTypeLabel(row?.marginType)}
); } }, symbol: { code: "symbol", name: "合约", width: 70, render(value: any): React.ReactNode { return
{toUpper(value)}
; } }, orderType: { code: "orderType", name: "交易类型", width: 60, render(value: OrderTypeEnum): React.ReactNode { return
{getOrderTypeLabel(value)}
; } }, side: { code: "side", name: "方向", width: 40, render(value: any, row: any): React.ReactNode { const isBuy = value === OrderSideEnum.Buy; return (
{getSideTypeLabel(value, row.positionSide)}
); } }, price: { code: "price", name: "价格", width: 80, render(value: any): React.ReactNode { return
{formatMoney(formatFloor(value, 2))}
; } }, orderQty: { code: "orderQty", name: "数量", width: 80, render(value: any, row: any): React.ReactNode { return
{`${formatFloor(value, 3)} ${toUpper(row?.base || "")}`}
; } }, leverage: { code: "leverage", name: "杠杆", width: 60, render(value: any, row: any): React.ReactNode { return ( ); } }, positionAmt: { code: "positionAmt", name: `数量`, width: 80, render(value: any, row: any): React.ReactNode { const isLong = row?.positionSide === PositionSideEnum.Long; return (
{getValueByContr({ value, multiplier: row?.pair?.ctVal, scale: row?.pair?.ctValScale })} {row?.base}
); } }, avgEntryPrice: { code: "avgEntryPrice", name: "开仓均价", width: 80, render(value: any, row: any): React.ReactNode { return
{formatMoney(formatFloor(value, row?.pair?.tickSizeScale))}
; } }, markPrice: { code: "markPrice", name: "标记价格", width: 80, render(value: any, row: any): React.ReactNode { return
{formatMoney(formatFloor(value, row?.pair?.tickSizeScale))}
; } }, liquidationPrice: { code: "liquidationPrice", name: "强平价格", width: 80, render(value: any, row: any): React.ReactNode { return
{formatMoney(formatFloor(value, row?.pair?.tickSizeScale))}
; } }, posMargin: { code: "posMargin", name: "保证金", width: 70, render(value: any, row: any): React.ReactNode { return ; } }, posMarginRate: { code: "posMarginRate", name: "保证金比率", width: 100 }, unrealisedPnl: { code: "unrealisedPnl", name: "未实现盈亏(回报率%)", width: 150, render(value: any, row: any): React.ReactNode { const isNegative = toDefaultNumber(value) < 0; const { quote, earningRate } = row; return (
{`${formatMoney(formatFloor(value, row?.pair?.costSizeScale))} ${toUpper(quote)}`} {`(${isNegative ? "" : "+"}${formatFloor(earningRate, 2)}%)`}
); } }, positionDelivery: { code: "positionDelivery", name: "仓位止盈止损", width: 100, render(value: any, row: any): React.ReactNode { return ( ); } }, cumQty: { code: "cumQty", name: "成交数量", width: 80, render(value: any, row: any): React.ReactNode { return
{`${formatFloor(value, 3)} ${toUpper(row?.base || "")}`}
; } }, postOnly: { code: "postOnly", name: "被动订单", width: 80, render(value: any): React.ReactNode { return
{value ? "是" : "否"}
; } }, marginType: { code: "marginType", name: "仓位模式", width: 100, render(value: any): React.ReactNode { return
{value}
; } }, avgPrice: { code: "avgPrice", name: "成交均价", width: 80, render(value: any): React.ReactNode { return
{formatMoney(formatFloor(value, 2))}
; } }, filledPrice: { code: "filledPrice", name: "成交均价", width: 80, render(value: any): React.ReactNode { return
{formatMoney(formatFloor(value, 2))}
; } }, commission: { code: "commission", name: "手续费", width: 80, render(value: any, row: any): React.ReactNode { return (
{formatFloor(value)} {row?.commissionAsset}
); } }, positionQty: { code: "positionQty", name: "最大持仓量", width: 80, render(value: any): React.ReactNode { return
{formatFloor(value, 3)}
; } }, realProfit: { code: "realProfit", name: "已实现盈亏", width: 100, render(value: any, row: any): React.ReactNode { return (
{formatMoney(formatFloor(value))} {row.commissionAsset}
); } }, closeProfit: { code: "realProfit", name: "平仓收益", width: 100, render(value: any, row: any): React.ReactNode { return (
{formatMoney(formatFloor(value))} {row.commissionAsset}
); } }, incomeType: { code: "incomeType", name: "类型", width: 60, render(value: any): React.ReactNode { return
{getIncomeTypeLabel(value)}
; } }, conditionalPrice: { code: "conditionalPrice", name: "触发条件", width: 80, render(): React.ReactNode { return
{"最新价格 ≥ 19,998.00"}
; } }, oneKeyClose: { code: "oneKeyClose", name: (
一键平仓
) as any, align: "right", width: 100, render(): React.ReactNode { return (
市价全平
); } }, killAllOrders: { code: "killAllOrders", name: (
{ console.log(`全部撤单`); }} >{`全部撤单`}
) as any, align: "right", width: 80, render(): React.ReactNode { return ; } }, closingTime: { code: "closingTime", name: "仓位关闭时间", width: 80, render(value: any): React.ReactNode { return
{YMDHms(value)}
; } }, marginCloseOutAmt: { code: "marginCloseOutAmt", name: "强平数量", width: 80, render(value: any, row: any): React.ReactNode { return (
{formatFloor(value, 3)} {row?.quote || ""}
); } }, income: { code: "income", name: "总额", align: "right", width: 60, render(value: any, row: any): React.ReactNode { console.log(row); const positive = Number(value) >= 0; return (
{positive ? "+" : ""} {formatMoney(formatFloor(value))} {row?.currency}
); } }, orderStatus: { code: "orderStatus", name: "状态", width: 100, render(value: any): React.ReactNode { return
{getOrderStatusLabel(value)}
; } }, filledQty: { code: "filledQty", name: "数量", width: 80, render(value: any, row: any): React.ReactNode { return
{`${formatFloor(value, 3)} ${toUpper(row?.base || "")}`}
; } }, taker: { code: "taker", name: "角色", width: 80, render(value: any): React.ReactNode { return
{`${value ? "吃单方" : "挂单方"}`}
; } } }; export const getColumn = (code: string) => settingMaps[code]; export const getColumns = (codes: Array) => RDmap(getColumn, codes); export const getConditionalColumns = (needToBeClone: Array) => { const _clonedColumns = clone(needToBeClone); const _len = _clonedColumns.length; _clonedColumns.splice(_len - 2, 0, getColumn("conditionalPrice")); return _clonedColumns; };