diff --git a/modules/web/static/css/dashboard.css b/modules/web/static/css/dashboard.css
index f78a149..c0151f0 100644
--- a/modules/web/static/css/dashboard.css
+++ b/modules/web/static/css/dashboard.css
@@ -337,6 +337,26 @@
white-space: nowrap;
}
+.dashboard-risk-item--daily-loss {
+ flex: 1.4 1 8.75rem;
+ min-width: 8.75rem;
+}
+
+.dashboard-risk-item--daily-loss .dashboard-risk-value {
+ white-space: normal;
+ line-height: 1.35;
+ font-size: 0.86rem;
+}
+
+.dashboard-risk-sub {
+ margin-top: 0.14rem;
+ font-size: 0.68rem;
+ font-weight: 500;
+ line-height: 1.3;
+ color: var(--text-muted);
+ white-space: normal;
+}
+
.dashboard-risk-value.risk-switch-on {
color: var(--profit);
}
diff --git a/modules/web/static/js/dashboard.js b/modules/web/static/js/dashboard.js
index 6e96b87..f025b75 100644
--- a/modules/web/static/js/dashboard.js
+++ b/modules/web/static/js/dashboard.js
@@ -367,8 +367,9 @@
riskGridEl.innerHTML = items.map(function (it) {
var val = it.valueHtml != null ? it.valueHtml : escHtml(it.value);
var cls = 'dashboard-risk-value' + (it.valueClass ? ' ' + it.valueClass : '');
+ var itemCls = 'dashboard-risk-item' + (it.itemClass ? ' ' + it.itemClass : '');
return (
- '
' +
+ '
' +
'
' + escHtml(it.label) + '
' +
'
' + val + '
' +
'
'
@@ -376,6 +377,30 @@
}).join('');
}
+ function buildDailyRiskItem(used, lim, slipBuf, cap) {
+ var main = used != null ? fmtNum(used) + '%' : '—';
+ if (lim != null) {
+ main += ' / ' + fmtNum(lim) + '%';
+ }
+ var item = {
+ label: '日亏损风控',
+ itemClass: 'dashboard-risk-item--daily-loss',
+ };
+ var sub = '';
+ if (slipBuf != null && cap != null) {
+ sub = '滑点 ' + fmtNum(slipBuf) + '% · 合计≤' + fmtNum(cap) + '%';
+ } else if (slipBuf != null) {
+ sub = '滑点 ' + fmtNum(slipBuf) + '%';
+ }
+ if (sub) {
+ item.valueHtml = escHtml(main) +
+ '
' + escHtml(sub) + '
';
+ } else {
+ item.value = main;
+ }
+ return item;
+ }
+
function fmtHours(h) {
if (h == null) return '—';
var n = Number(h);
@@ -459,19 +484,9 @@
var dailyRiskCap = lim.daily_loss_total_cap_pct != null
? lim.daily_loss_total_cap_pct
: st.daily_loss_total_cap_pct;
- var dailyRiskText = dailyRiskUsed != null ? fmtNum(dailyRiskUsed) + '%' : '—';
- if (dailyRiskLim != null && dailyRiskUsed != null) {
- dailyRiskText += ' / ' + fmtNum(dailyRiskLim) + '%';
- if (slipBuf != null) {
- dailyRiskText += '(+滑点' + fmtNum(slipBuf) + '%';
- if (dailyRiskCap != null) {
- dailyRiskText += ',合计≤' + fmtNum(dailyRiskCap) + '%';
- }
- dailyRiskText += ')';
- }
- } else if (dailyRiskLim != null) {
- dailyRiskText += ' / ' + fmtNum(dailyRiskLim) + '%';
- }
+ var dailyRiskItem = buildDailyRiskItem(
+ dailyRiskUsed, dailyRiskLim, slipBuf, dailyRiskCap,
+ );
var marginPct = risk.margin_pct_used;
var maxMarginPct = lim.max_margin_pct;
var rollMaxPct = lim.roll_max_margin_pct;
@@ -502,7 +517,7 @@
},
{ label: '持仓限制', value: active + ' / ' + (maxPos != null ? maxPos : '—') },
{ label: '日持仓限制', value: dailyOpens + ' / ' + (dailyPosLim != null ? dailyPosLim : '—') },
- { label: '日亏损风控', value: dailyRiskText },
+ dailyRiskItem,
{ label: '手动平仓次数', value: manualCnt + ' / ' + (manualLim != null ? manualLim : '—') },
{
label: '综合保证金占比',