Resolve B-98 visual review deviations and B-97 atomicity finding: - Scoped mentorView header to title/subtitle + theme toggle only (hides date, refresh, background refresh, system management and account menus). - Map contact avatars by stable id to the final day/night palette (52科比 and self stay blue; others use the final violet/green/orange/red/teal/ purple/yellow tones). - Grade badges read A级/B级/C级; pinned contacts render a pin + 置顶 badge; row-side pin controls are removed (chat header keeps pinning). - Chat header drops grade badges; subtitle shows the active contact description/tagline. - Assistant message column caps at 900px and centers on wide screens; user bubble keeps its 60% cap. - Widen the directory search field (~218px target), keep filter/sort on the same row, and make the filter button icon-only (no chevron). - Follow-up links drop the leading icon; no '日期 · 回答完成' meta line; follow-up divider is 382px and left-aligned with the text column. - Own-message meta shows time only; composer height converges to ~85px while keeping auto-grow and the 168px cap. - Selected contact right inset ~10px, header action radius 8px, and a thin list scrollbar instead of the reserved gutter. - Remove the iFinD settings switch fragment from index.html so the mentor commit no longer carries half of the parallel iFinD work; the id contract test now tolerates dangling references introduced only by uncommitted working-tree edits. - Add contract + e2e assertions for the header visibility, avatar tone mapping, badge copy, chat subtitle, message max-width, composer height, and follow-up area. Co-authored-by: multica-agent <github@multica.ai>
111 lines
7.9 KiB
HTML
111 lines
7.9 KiB
HTML
<section id="mentorView" class="workspace-view page member-feature-view redesigned-mentor-view mentor-page-header">
|
|
<div class="member-gate" hidden><div class="member-gate-icon"><i data-lucide="lock-keyhole"></i></div><div><strong>问师仅对会员开放</strong><span>开通会员后可使用思维模型进行对话。会员状态可从顶部账号标识进入。</span></div></div>
|
|
<div id="mentorNotice" class="inline-notice" hidden></div>
|
|
<div class="mentor-layout">
|
|
<aside class="mentor-sidebar" aria-label="思维模型目录">
|
|
<div class="mentor-directory-tools">
|
|
<label class="mentor-search-field">
|
|
<span class="visually-hidden">搜索思维模型</span>
|
|
<i data-lucide="search"></i>
|
|
<input id="mentorSearchInput" type="search" maxlength="50" placeholder="搜索联系人或标签" autocomplete="off">
|
|
</label>
|
|
<div class="mentor-filter-menu">
|
|
<button id="mentorFilterToggle" class="mentor-filter-toggle" type="button" aria-haspopup="menu" aria-expanded="false" aria-label="筛选思维模型" title="筛选思维模型"><i data-lucide="filter"></i></button>
|
|
<div id="mentorFilterOptions" class="mentor-filter-options" role="menu" hidden>
|
|
<button type="button" class="active" data-mentor-grade="all" role="menuitem">全部<span id="mentorCount">0 位</span></button>
|
|
<button type="button" data-mentor-grade="A" role="menuitem">A级</button>
|
|
<button type="button" data-mentor-grade="B" role="menuitem">B级</button>
|
|
<button type="button" data-mentor-grade="C" role="menuitem">C级</button>
|
|
</div>
|
|
</div>
|
|
<button id="mentorSortToggle" class="mentor-sort-toggle" type="button" aria-pressed="false" title="整理联系人顺序"><i data-lucide="list-ordered"></i><span>整理</span></button>
|
|
</div>
|
|
<div id="mentorList" class="mentor-list"></div>
|
|
<div id="mentorListEmpty" class="mentor-list-empty" hidden>没有符合条件的思维模型</div>
|
|
<p id="mentorSortHint" class="mentor-sort-hint" hidden>拖动联系人,或使用箭头调整顺序</p>
|
|
</aside>
|
|
|
|
<section class="mentor-chat-panel" aria-label="问师对话">
|
|
<header class="mentor-chat-header">
|
|
<div class="mentor-chat-identity">
|
|
<span id="activeMentorAvatar" class="mentor-avatar" aria-hidden="true">师</span>
|
|
<div>
|
|
<div class="mentor-active-title"><h3 id="activeMentorName">--</h3></div>
|
|
<p id="activeMentorStatus">思维模型已就绪</p>
|
|
</div>
|
|
</div>
|
|
<div class="mentor-chat-actions">
|
|
<button id="mentorPinButton" class="icon-button mentor-header-action" type="button" aria-label="置顶当前思维模型" title="置顶"><i data-lucide="pin"></i></button>
|
|
<button id="mentorNoteButton" class="icon-button mentor-header-action" type="button" aria-label="备注标签" title="备注标签"><i data-lucide="tag"></i></button>
|
|
<button id="mentorProfileButton" class="icon-button mentor-header-action" type="button" aria-label="游资档案" title="游资档案"><i data-lucide="id-card"></i></button>
|
|
<button id="clearMentorChatButton" class="icon-button mentor-clear-button" type="button" disabled aria-label="清空当前对话" title="清空对话"><i data-lucide="trash-2"></i></button>
|
|
</div>
|
|
</header>
|
|
<div id="mentorMessages" class="mentor-messages" aria-live="polite"></div>
|
|
<div id="mentorQuickPrompts" class="mentor-quick-prompts">
|
|
<span class="mentor-prompt-label">开始一个话题</span>
|
|
<button type="button" data-mentor-prompt="怎么看今天的市场环境?"><i data-lucide="activity"></i>市场环境</button>
|
|
<button type="button" data-mentor-prompt="当前的市场主线和情绪周期是什么?"><i data-lucide="route"></i>主线与周期</button>
|
|
<button type="button" data-mentor-prompt="如果今天是空仓状态,你会怎么制定操作预案?"><i data-lucide="notebook-tabs"></i>空仓预案</button>
|
|
<button type="button" data-mentor-prompt="现在最需要防范的风险是什么?"><i data-lucide="shield-alert"></i>风险检查</button>
|
|
</div>
|
|
<form id="mentorChatForm" class="mentor-chat-form">
|
|
<div class="mentor-composer-main">
|
|
<label class="visually-hidden" for="mentorQuestion">向当前思维模型提问</label>
|
|
<textarea id="mentorQuestion" maxlength="2000" placeholder="输入市场、板块、个股代码或交易问题"></textarea>
|
|
<span class="mentor-composer-hint">Enter 发送 · Shift + Enter 换行</span>
|
|
</div>
|
|
<div class="mentor-composer-actions">
|
|
<button id="stopMentorQuestion" class="button ghost mentor-stop-button" type="button" hidden><i data-lucide="square"></i><span>停止</span></button>
|
|
<button id="sendMentorQuestion" class="button primary mentor-send-button" type="submit"><i data-lucide="send-horizontal"></i><span>发送</span></button>
|
|
</div>
|
|
</form>
|
|
</section>
|
|
|
|
</div>
|
|
<footer class="mentor-workspace-footer">
|
|
<span class="mentor-evidence-legend">等级仅表示公开素材完整度</span>
|
|
<p class="mentor-disclaimer">基于公开资料提炼的思维模型模拟,不代表本人观点,不构成投资建议。</p>
|
|
</footer>
|
|
|
|
<dialog id="mentorNoteDialog" class="mentor-floating-dialog mentor-note-dialog" aria-labelledby="mentorNoteDialogTitle">
|
|
<div class="mentor-dialog-head">
|
|
<div><span class="dialog-eyebrow">问师</span><h3 id="mentorNoteDialogTitle">备注标签</h3></div>
|
|
<button type="button" class="icon-button mentor-dialog-close" data-mentor-dialog-close="mentorNoteDialog" aria-label="关闭" title="关闭"><i data-lucide="x"></i></button>
|
|
</div>
|
|
<div class="mentor-dialog-body">
|
|
<label class="visually-hidden" for="mentorNoteInput">备注标签</label>
|
|
<textarea id="mentorNoteInput" maxlength="2000" placeholder="为该思维模型记录备注或标签"></textarea>
|
|
</div>
|
|
</dialog>
|
|
|
|
<dialog id="mentorProfileDialog" class="mentor-floating-dialog mentor-profile-dialog" aria-labelledby="mentorProfileDialogTitle">
|
|
<div class="mentor-dialog-head">
|
|
<div><span class="dialog-eyebrow">问师</span><h3 id="mentorProfileDialogTitle">游资档案</h3></div>
|
|
<button type="button" class="icon-button mentor-dialog-close" data-mentor-dialog-close="mentorProfileDialog" aria-label="关闭" title="关闭"><i data-lucide="x"></i></button>
|
|
</div>
|
|
<div class="mentor-profile-dialog-body">
|
|
<div class="mentor-profile-hero">
|
|
<span id="mentorProfileDialogAvatar" class="mentor-profile-avatar" aria-hidden="true">师</span>
|
|
<h3 id="mentorProfileDialogName">--</h3>
|
|
<p id="mentorProfileDialogTagline">--</p>
|
|
<div id="mentorProfileDialogBadges" class="mentor-profile-badges"></div>
|
|
</div>
|
|
<section class="mentor-profile-section">
|
|
<h4>关注维度</h4>
|
|
<div id="mentorProfileDialogFocus" class="mentor-active-focus"></div>
|
|
</section>
|
|
<section class="mentor-profile-section">
|
|
<h4>资料依据</h4>
|
|
<strong id="mentorProfileDialogSource">--</strong>
|
|
<p id="mentorProfileDialogEvidence">--</p>
|
|
</section>
|
|
<section class="mentor-profile-section mentor-profile-boundary">
|
|
<h4>数据边界</h4>
|
|
<p><i data-lucide="calendar-days"></i><span id="mentorProfileDialogDataDate">--</span></p>
|
|
<p><i data-lucide="database"></i><span>仅使用网页已提供的市场数据</span></p>
|
|
</section>
|
|
</div>
|
|
</dialog>
|
|
</section>
|