feat(workbench): AI脚本诊断列表支持分页——每页20条前端切片,复用pager组件,空态colspan改动态(09-02)
This commit is contained in:
1 parent
d0cbd41d29
commit
c21b5b43b9
2 files changed
+14
-2
No files matched your search
@@ -148,3 +148,7 @@
|
||||
②新增「执行方式判定」节(P0):工作台复盘走 POST /api/run + skills:['脚本复盘'] 独立 AI 会话任务;对话内多条脚本复盘=每条一个独立上下文,禁止混审(一条脚本=一个独立上下文)
|
||||
- 同步:用户级副本与源同位置自动生效;dsh 副本 `script-review` 逐处同步(保留其缺「MCN工作台」协作行环境差异)
|
||||
- 经验:复盘技能评价尺子=「引用文件自动同步 + 自身维度人工同步」双轨——创作侧改 references 内文件复盘不用动,改 SKILL.md/框架新增硬规则(references 外)复盘必须人工补
|
||||
|
||||
## AI脚本诊断列表加分页(14:11)
|
||||
- renderReviews 全量渲染 → 每页 20 条前端切片分页(PAGE_SIZE=20,slice((page-1)*20, page*20)),复用现有 pagerHtml/bindPager/list-footer;空态 colspan 13→动态 `5+DIMS.length+1`(原 13 为滞后值);openScriptDetail/openReviewDetail 仍用全量 items 查找不受分页影响
|
||||
- 语法 node --check 通过;静态文件改动无需重启服务;已带 ?v= 重开 #/reviews
|
||||
@@ -881,7 +881,10 @@ async function renderReviews(view) {
|
||||
const fmtScore = (v) => (typeof v === 'number' && Number.isFinite(v) ? v : '-');
|
||||
const GEN = { rewrite: '爆款视频创作', new: '账号列表创作', abc: 'ABC融合创作' };
|
||||
|
||||
const rows = items.map((row) => {
|
||||
// 分页:每页 20 条,前端切片;详情/查找仍用全量 items
|
||||
const PAGE_SIZE = 20;
|
||||
let page = 1;
|
||||
const buildRows = () => items.slice((page - 1) * PAGE_SIZE, page * PAGE_SIZE).map((row) => {
|
||||
const sd = dimsOf(row);
|
||||
const rv = reviewOf(row);
|
||||
const dimsTd = DIMS.map((dim) => {
|
||||
@@ -900,15 +903,18 @@ async function renderReviews(view) {
|
||||
</tr>`;
|
||||
}).join('');
|
||||
|
||||
const render = () => {
|
||||
view.innerHTML = `
|
||||
<div class="page">
|
||||
<div class="page-toolbar">${toolbarBack()}<span class="page-title">AI脚本诊断</span><span class="pager-info">按生成时间倒序 · 共 ${items.length} 条</span></div>
|
||||
<div class="table-wrap"><table class="table">
|
||||
<thead><tr><th>ID</th><th>账号</th><th>生成方式</th><th>脚本标题</th><th>生成时间</th>${DIMS.map((h) => `<th style="text-align:center">${h}</th>`).join('')}<th>操作</th></tr></thead>
|
||||
<tbody>${rows || '<tr><td colspan="13" class="empty">暂无 AI 写脚本(AI 创作的脚本会出现在这里)</td></tr>'}</tbody>
|
||||
<tbody>${buildRows() || `<tr><td colspan="${5 + DIMS.length + 1}" class="empty">暂无 AI 写脚本(AI 创作的脚本会出现在这里)</td></tr>`}</tbody>
|
||||
</table></div>
|
||||
<div class="list-footer">${pagerHtml(items.length, page, PAGE_SIZE)}</div>
|
||||
</div>`;
|
||||
bindBack(view);
|
||||
bindPager(view, (p) => { page = p; render(); });
|
||||
view.querySelectorAll('[data-open]').forEach((a) => a.addEventListener('click', () => openScriptDetail(a.dataset.open)));
|
||||
view.querySelectorAll('[data-review]').forEach((a) => a.addEventListener('click', () => openReviewDetail(a.dataset.review)));
|
||||
view.querySelectorAll('[data-review-row]').forEach((b) => b.addEventListener('click', () => {
|
||||
@@ -921,6 +927,8 @@ async function renderReviews(view) {
|
||||
btn: b,
|
||||
});
|
||||
}));
|
||||
};
|
||||
render();
|
||||
|
||||
async function openScriptDetail(rewriteId) {
|
||||
// 打开源 vs AI 对比(复用视频脚本弹窗逻辑的精简版)
|
||||
|
||||
Reference in new issue
Block a user