Fix hedge-plan option list to 5-row scroll viewport and add auto-deploy rule.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -276,13 +276,11 @@
|
||||
});
|
||||
}
|
||||
|
||||
function pickContract(c, list) {
|
||||
function pickContract(c) {
|
||||
if (!c) return;
|
||||
state.selected = c;
|
||||
const el = $("hp-sel-inst");
|
||||
if (el) el.textContent = c.inst_id;
|
||||
const sel = $("hp-strike-select");
|
||||
if (sel) sel.value = c.inst_id;
|
||||
const tbody = $("hp-strike-tbody");
|
||||
if (tbody) {
|
||||
tbody.querySelectorAll(".opt-strike-row").forEach(function (r) {
|
||||
@@ -295,33 +293,6 @@
|
||||
updatePremiumLine();
|
||||
}
|
||||
|
||||
function strikeOptionLabel(c) {
|
||||
return (
|
||||
"K" +
|
||||
c.strike +
|
||||
" " +
|
||||
(c.moneyness_label || c.opt_type || "") +
|
||||
" " +
|
||||
fmtPxSz(c.ask, c.ask_sz, c.ask_estimated, c.tick_sz)
|
||||
);
|
||||
}
|
||||
|
||||
function fillStrikeSelect(list, prevInst) {
|
||||
const sel = $("hp-strike-select");
|
||||
if (!sel) return;
|
||||
const rest = (list || []).slice(5);
|
||||
sel.innerHTML = '<option value="">更多行权价(' + rest.length + ")…</option>";
|
||||
rest.forEach(function (c) {
|
||||
const opt = document.createElement("option");
|
||||
opt.value = c.inst_id;
|
||||
opt.textContent = strikeOptionLabel(c);
|
||||
sel.appendChild(opt);
|
||||
});
|
||||
if (prevInst && rest.some(function (c) { return c.inst_id === prevInst; })) {
|
||||
sel.value = prevInst;
|
||||
}
|
||||
}
|
||||
|
||||
function renderListStrikes() {
|
||||
const tbody = $("hp-strike-tbody");
|
||||
if (!tbody) return;
|
||||
@@ -332,7 +303,6 @@
|
||||
tbody.innerHTML = "";
|
||||
if (!exp) {
|
||||
tbody.innerHTML = '<tr><td colspan="5" class="muted">请选择到期日</td></tr>';
|
||||
fillStrikeSelect([], null);
|
||||
return;
|
||||
}
|
||||
const list = (exp.contracts || []).filter(function (c) {
|
||||
@@ -340,12 +310,9 @@
|
||||
});
|
||||
if (!list.length) {
|
||||
tbody.innerHTML = '<tr><td colspan="5" class="muted">无匹配合约</td></tr>';
|
||||
fillStrikeSelect([], null);
|
||||
return;
|
||||
}
|
||||
const visible = list.slice(0, 5);
|
||||
fillStrikeSelect(list, prevInst);
|
||||
visible.forEach(function (c) {
|
||||
list.forEach(function (c) {
|
||||
const tr = document.createElement("tr");
|
||||
tr.className = "opt-strike-row" + (c.moneyness ? " opt-row-" + c.moneyness : "");
|
||||
if (prevInst && c.inst_id === prevInst) tr.classList.add("opt-row-selected");
|
||||
@@ -366,21 +333,13 @@
|
||||
'">选用</button></td>';
|
||||
tbody.appendChild(tr);
|
||||
});
|
||||
if (list.length > 5) {
|
||||
const tip = document.createElement("tr");
|
||||
tip.innerHTML =
|
||||
'<td colspan="5" class="muted">仅显示前 5 行,其余 ' +
|
||||
(list.length - 5) +
|
||||
" 条请用上方下拉框选用</td>";
|
||||
tbody.appendChild(tip);
|
||||
}
|
||||
tbody.querySelectorAll(".hp-pick").forEach(function (btn) {
|
||||
btn.addEventListener("click", function () {
|
||||
const inst = btn.getAttribute("data-inst");
|
||||
const c = list.find(function (x) {
|
||||
return x.inst_id === inst;
|
||||
});
|
||||
pickContract(c, list);
|
||||
pickContract(c);
|
||||
});
|
||||
});
|
||||
}
|
||||
@@ -687,17 +646,6 @@
|
||||
});
|
||||
if ($("hp-exp-select")) $("hp-exp-select").addEventListener("change", renderListStrikes);
|
||||
if ($("hp-oo-exp-select")) $("hp-oo-exp-select").addEventListener("change", renderTStrikes);
|
||||
if ($("hp-strike-select")) {
|
||||
$("hp-strike-select").addEventListener("change", function () {
|
||||
const inst = $("hp-strike-select").value;
|
||||
if (!inst || !state.chain) return;
|
||||
const exp = currentExp("hp-exp-select");
|
||||
const c = ((exp && exp.contracts) || []).find(function (x) {
|
||||
return x.inst_id === inst;
|
||||
});
|
||||
if (c) pickContract(c);
|
||||
});
|
||||
}
|
||||
if ($("hp-sheets")) $("hp-sheets").addEventListener("input", updatePremiumLine);
|
||||
if ($("hp-preview-btn"))
|
||||
$("hp-preview-btn").addEventListener("click", function () {
|
||||
|
||||
@@ -3296,8 +3296,7 @@ html[data-theme="light"] .opt-be-dist-down {
|
||||
margin: 4px 0;
|
||||
align-items: center;
|
||||
}
|
||||
.hedge-plan-page-wrap .hp-opt-toolbar select,
|
||||
.hedge-plan-page-wrap .hp-strike-pick-label select {
|
||||
.hedge-plan-page-wrap .hp-opt-toolbar select {
|
||||
max-width: 168px;
|
||||
font-size: 0.72rem;
|
||||
padding: 3px 6px;
|
||||
@@ -3309,9 +3308,14 @@ html[data-theme="light"] .opt-be-dist-down {
|
||||
min-height: 26px;
|
||||
font-size: 0.72rem;
|
||||
}
|
||||
.hedge-plan-page-wrap .hp-strike-table-wrap--5 {
|
||||
max-height: 168px; /* 表头 + 约 5 行 */
|
||||
/* 视口约 5 行数据 + 表头;超出表内滚动 */
|
||||
.hedge-plan-page-wrap .hp-strike-table-wrap--5,
|
||||
.hedge-plan-page-wrap .options-strike-table-wrap--t {
|
||||
max-height: 220px;
|
||||
min-height: 220px;
|
||||
overflow-y: auto;
|
||||
margin-top: 4px;
|
||||
flex: 1 1 auto;
|
||||
}
|
||||
.hedge-plan-page-wrap .hp-opt-bal-line {
|
||||
margin-top: 4px;
|
||||
@@ -3319,12 +3323,10 @@ html[data-theme="light"] .opt-be-dist-down {
|
||||
.hedge-plan-page-wrap .hp-acct-hint {
|
||||
display: none;
|
||||
}
|
||||
.hedge-plan-page-wrap .options-strike-table-wrap--t {
|
||||
max-height: 168px;
|
||||
}
|
||||
.hedge-plan-page-wrap .options-dual-grid {
|
||||
grid-template-columns: 1fr 1fr;
|
||||
align-items: stretch;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.hedge-plan-page-wrap .options-dual-grid > .card {
|
||||
height: 100%;
|
||||
@@ -3332,6 +3334,10 @@ html[data-theme="light"] .opt-be-dist-down {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
.hedge-plan-page-wrap .hp-preview-card {
|
||||
margin-top: 8px;
|
||||
clear: both;
|
||||
}
|
||||
.hedge-plan-page-wrap .hp-pick.active,
|
||||
.hedge-plan-page-wrap .opt-row-selected td {
|
||||
background: rgba(90, 140, 255, 0.18);
|
||||
|
||||
Reference in New Issue
Block a user