nextday / templates /index.html
Ethscriptions's picture
Upload index.html
2515793 verified
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>次日排片最优化(独立站)</title>
<link rel="stylesheet" href="/static/styles.css">
</head>
<body>
<main class="container">
<header class="page-head">
<h1>🎬 次日排片最优化(随机贪心构造 + 蒙特卡洛评估)</h1>
<p>按规则自动生成次日排片。硬性规则不满足直接淘汰,软性规则按评分排序,输出 Top10 方案和甘特图。</p>
</header>
<section class="panel">
<h2>日期与参数</h2>
<div class="row row-3">
<label class="field">
<span>基准日期(默认今天)</span>
<input id="base_date" type="date">
</label>
<div class="field readonly">
<span>目标日期</span>
<div id="target_date_tip" class="tip">-</div>
</div>
<div class="actions inline-end">
<button id="save_cfg_btn" type="button" class="btn secondary">保存参数</button>
<button id="reset_cfg_btn" type="button" class="btn secondary">恢复默认参数</button>
<button id="load_data_btn" type="button" class="btn primary">加载数据并生成可编辑微调约束</button>
</div>
</div>
<div class="grid-3">
<section class="subpanel">
<h3>营业与黄金时段</h3>
<label class="field"><span>营业开始</span><input id="business_start" type="time"></label>
<label class="field"><span>营业结束</span><input id="business_end" type="time"></label>
<label class="field"><span>场次转换基准(分钟)</span><input id="turnaround_base" type="number" min="5" max="40" step="1"></label>
<label class="field"><span>黄金时段开始</span><input id="golden_start" type="time"></label>
<label class="field"><span>黄金时段结束</span><input id="golden_end" type="time"></label>
<label class="field checkbox"><input id="efficiency_enabled" type="checkbox"><span>启用排片效率分析表(18规则)</span></label>
<label class="field"><span>效率规则扣分系数</span><input id="efficiency_penalty_coef" type="number" min="0.1" max="10" step="0.1"></label>
<label class="field"><span>效率日增减上限 C</span><input id="eff_daily_delta_cap" type="number" min="0" max="20" step="1"></label>
</section>
<section class="subpanel">
<h3>硬性规则参数</h3>
<label class="field checkbox"><input id="rule1_enabled" type="checkbox"><span>规则一:同影片最小开场间隔</span></label>
<label class="field"><span>规则一间隔(分钟)</span><input id="rule1_gap" type="number" min="5" max="180" step="1"></label>
<label class="field checkbox"><input id="rule4_enabled" type="checkbox"><span>规则四:首末场强约束</span></label>
<label class="field"><span>最早场不得晚于</span><input id="rule4_earliest" type="time"></label>
<label class="field"><span>最晚场不得早于</span><input id="rule4_latest" type="time"></label>
<label class="field checkbox"><input id="rule13_enabled" type="checkbox"><span>规则十三:2/8/9号厅禁3D</span></label>
<label class="field"><span>禁3D影厅号(逗号分隔)</span><input id="rule13_forbidden_halls" type="text"></label>
<label class="field"><span>TMS 缺片允许场次数</span><input id="tms_allowance" type="number" min="0" max="50" step="1"></label>
</section>
<section class="subpanel">
<h3>软性规则参数</h3>
<label class="field checkbox"><input id="rule2_enabled" type="checkbox"><span>规则二:30分钟内开场超阈值</span></label>
<label class="field"><span>规则二阈值(场)</span><input id="rule2_threshold" type="number" min="1" max="20" step="1"></label>
<label class="field"><span>规则二窗口(分钟)</span><input id="rule2_window_minutes" type="number" min="5" max="120" step="5"></label>
<label class="field"><span>规则二每超1场扣分</span><input id="rule2_penalty" type="number" min="1" max="200" step="1"></label>
<label class="field checkbox"><input id="rule3_enabled" type="checkbox"><span>规则三:场次开场断档扣分</span></label>
<label class="field"><span>规则三断档阈值(分钟)</span><input id="rule3_gap_minutes" type="number" min="10" max="180" step="5"></label>
<label class="field"><span>规则三扣分系数</span><input id="rule3_penalty" type="number" min="1" max="100" step="1"></label>
<label class="field checkbox"><input id="rule9_enabled" type="checkbox"><span>规则九:黄金热门密度</span></label>
<label class="field"><span>规则九热门TopN</span><input id="rule9_hot_top_n" type="number" min="1" max="10" step="1"></label>
<label class="field"><span>规则九最小占比</span><input id="rule9_min_ratio" type="number" min="0.05" max="0.9" step="0.05"></label>
<label class="field"><span>规则九扣分</span><input id="rule9_penalty" type="number" min="1" max="200" step="1"></label>
</section>
</div>
<div class="row row-3">
<section class="subpanel">
<h3>规则二豁免时段</h3>
<label class="field"><span>例如:14:00-15:00, 19:00-20:00</span><textarea id="rule2_exempt_ranges" rows="3"></textarea></label>
</section>
<section class="subpanel">
<h3>规则十一与十二</h3>
<label class="field checkbox"><input id="rule11_enabled" type="checkbox"><span>规则十一:22:00后热门影片</span></label>
<label class="field"><span>规则十一起算时间</span><input id="rule11_after_time" type="time"></label>
<label class="field"><span>规则十一扣分</span><input id="rule11_penalty" type="number" min="1" max="200" step="1"></label>
<label class="field checkbox"><input id="rule12_enabled" type="checkbox"><span>规则十二:票房Top5需黄金场</span></label>
<label class="field"><span>规则十二每片扣分</span><input id="rule12_penalty_each" type="number" min="1" max="200" step="1"></label>
</section>
<section class="subpanel">
<h3>计算参数</h3>
<label class="field"><span>Monte Carlo迭代次数</span><input id="iterations" type="number" min="20" max="100000" step="10"></label>
<label class="field"><span>随机种子(可复现)</span><input id="random_seed" type="number" min="0" max="99999999" step="1"></label>
</section>
</div>
<section class="subpanel">
<h3>影厅维护/包场时段</h3>
<div class="actions"><button id="add_maintenance_btn" type="button" class="btn secondary small">新增一行</button></div>
<div class="table-wrap">
<table id="maintenance_table" class="simple-table">
<thead>
<tr>
<th>影厅</th>
<th>开始(HH:MM)</th>
<th>结束(HH:MM)</th>
<th>操作</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
</section>
</section>
<section id="loaded_section" class="panel hidden">
<h2>微调约束与后台任务</h2>
<div id="load_summary" class="tip"></div>
<details>
<summary>🗑️ 剔除特殊场次 (包场/无效数据)</summary>
<div class="actions select-actions">
<button id="exclude_select_all_btn" type="button" class="btn secondary small">场次全选</button>
<button id="exclude_select_none_btn" type="button" class="btn secondary small">场次全不选</button>
<button id="exclude_select_suspected_btn" type="button" class="btn secondary small">仅选疑似特殊</button>
<button id="exclude_clear_btn" type="button" class="btn secondary small">清空全部剔除条件</button>
</div>
<div class="row row-2">
<label class="field">
<span>按场次剔除(仅影响效率分析与默认微调建议)</span>
<select id="exclude_select" multiple size="10"></select>
</label>
<label class="field">
<span>按影片整组剔除</span>
<select id="exclude_movie_select" multiple size="10"></select>
</label>
</div>
<div class="row row-2">
<label class="field">
<span>按影厅整组剔除</span>
<select id="exclude_hall_select" multiple size="7"></select>
</label>
<div class="subpanel compact">
<h4>快速规则</h4>
<label class="field checkbox"><input id="exclude_rule_zero_sales" type="checkbox"><span>剔除零票零票房场次</span></label>
<label class="field checkbox"><input id="exclude_rule_early_morning" type="checkbox"><span>剔除早场(10:00前)</span></label>
<p class="muted small">建议先点“仅选疑似特殊”,再按影片/影厅微调。</p>
</div>
</div>
<div class="row row-2 align-end">
<div id="exclude_effect_tip" class="tip"></div>
<div class="actions inline-start">
<button id="apply_exclude_btn" type="button" class="btn secondary">应用剔除并重算微调建议</button>
</div>
</div>
</details>
<h3>微调约束(留空则不生效)</h3>
<p class="muted">可按影片设置:最多/最少/固定场次、场次占比范围、黄金场次范围。仅勾选行参与约束。</p>
<div class="actions select-actions">
<button id="tuning_select_all_btn" type="button" class="btn secondary small">影片一键全选</button>
<button id="tuning_select_none_btn" type="button" class="btn secondary small">影片一键全不选</button>
<button id="tuning_clear_sessions_btn" type="button" class="btn secondary small">场次约束一键清空</button>
<button id="tuning_clear_ratio_btn" type="button" class="btn secondary small">占比约束一键清空</button>
</div>
<div class="table-wrap tuning-wrap">
<table id="tuning_table" class="simple-table"></table>
</div>
<h3>后台运算控制</h3>
<p class="muted">支持暂停、继续、停止;任务状态实时刷新。</p>
<div class="metrics" id="job_metrics"></div>
<div class="progress-wrap"><div id="job_progress_bar"></div></div>
<div id="job_caption" class="tip"></div>
<div class="actions">
<button id="run_btn" type="button" class="btn primary">后台生成 Top10</button>
<button id="pause_btn" type="button" class="btn secondary">暂停</button>
<button id="resume_btn" type="button" class="btn secondary">继续</button>
<button id="stop_btn" type="button" class="btn danger">停止</button>
</div>
<div class="row row-2">
<section>
<h4>淘汰原因统计(Top)</h4>
<div class="table-wrap"><table id="reject_reason_table" class="simple-table"></table></div>
</section>
<section>
<h4>淘汰详细统计(Top)</h4>
<div class="table-wrap"><table id="reject_detail_table" class="simple-table"></table></div>
</section>
</div>
</section>
<section id="results_section" class="panel hidden">
<h2>Top10 结果</h2>
<div id="results_metrics" class="metrics"></div>
<details>
<summary>硬性淘汰统计</summary>
<div class="row row-2">
<div class="table-wrap"><table id="phase_stats_table" class="simple-table"></table></div>
<div class="table-wrap"><table id="reason_stats_table" class="simple-table"></table></div>
</div>
<div class="table-wrap"><table id="detail_stats_table" class="simple-table"></table></div>
<pre id="reject_examples" class="code-block"></pre>
</details>
<details>
<summary>影片目标(由效率规则推导)</summary>
<pre id="movie_targets_json" class="code-block"></pre>
</details>
<details>
<summary>当日效率基准</summary>
<div class="table-wrap"><table id="today_eff_table" class="simple-table"></table></div>
</details>
<div id="candidate_tabs" class="tab-bar"></div>
<section id="candidate_content"></section>
</section>
<div id="message" class="message hidden"></div>
</main>
<script src="/static/app.js"></script>
</body>
</html>