paseo-req-kit 1.14.0 → 1.15.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -0
- package/docs/guide//347/273/264/346/212/244/350/200/205/346/214/207/345/215/227.md +2 -0
- package/engine/src/review-assets/app.css +153 -234
- package/engine/src/review-assets/app.html +44 -32
- package/engine/src/review-assets/app.js +11 -7
- package/engine/src/review-assets/check.css +11 -56
- package/engine/src/review-assets/check.html +48 -22
- package/engine/src/review-assets/check.js +169 -86
- package/engine/src/review-assets/code.css +15 -92
- package/engine/src/review-assets/code.html +41 -26
- package/engine/src/review-assets/code.js +196 -101
- package/engine/src/review-assets/rk-icons.js +98 -0
- package/engine/src/review-assets/rk-tokens.css +252 -0
- package/engine/src/review-assets/rk.css +252 -0
- package/engine/src/review.ts +6 -4
- package/package.json +1 -1
- package/paseo-plugin/package.json +1 -1
- package/site-dist/404.html +2 -2
- package/site-dist/assets/{app.VQ-QxRPH.js → app.D5s_yGHZ.js} +1 -1
- package/site-dist/assets/changelog.md.RJaBnmnw.js +1 -0
- package/site-dist/assets/chunks/@localSearchIndexroot.Dric-MbI.js +1 -0
- package/site-dist/assets/chunks/{VPLocalSearchBox.CT4Vlj76.js → VPLocalSearchBox.B4CyDsTr.js} +1 -1
- package/site-dist/assets/chunks/{theme.B_UmHHou.js → theme.CCocenmB.js} +2 -2
- package/site-dist/assets/{guide_getting-started.md.CZM53rO_.js → guide_getting-started.md.wFOkpMSx.js} +1 -1
- package/site-dist/assets/guide_maintainer.md.mFZprBj1.js +1 -0
- package/site-dist/assets/{guide_maintainer.md.C1v7EpSY.lean.js → guide_maintainer.md.mFZprBj1.lean.js} +1 -1
- package/site-dist/changelog.html +5 -5
- package/site-dist/guide/getting-started.html +5 -5
- package/site-dist/guide/how-it-works.html +4 -4
- package/site-dist/guide/index.html +4 -4
- package/site-dist/guide/install.html +4 -4
- package/site-dist/guide/maintainer.html +5 -5
- package/site-dist/guide/phases.html +4 -4
- package/site-dist/guide/project.html +4 -4
- package/site-dist/guide/user.html +4 -4
- package/site-dist/hashmap.json +1 -1
- package/site-dist/index.html +4 -4
- package/site-dist/reference/adr/0001-step-agents-under-origin-chat.html +4 -4
- package/site-dist/reference/adr/0002-no-directory-switch-in-chat.html +4 -4
- package/site-dist/reference/adr/0003-script-engine-not-hub.html +4 -4
- package/site-dist/reference/adr/0004-result-files.html +4 -4
- package/site-dist/reference/adr/0005-no-default-branch-local-commits-only.html +4 -4
- package/site-dist/reference/adr/0006-skill-install-targets.html +4 -4
- package/site-dist/reference/adr/0007-own-interview-skill.html +4 -4
- package/site-dist/reference/adr/0008-entries-do-not-call-entries.html +4 -4
- package/site-dist/reference/adr/0009-versioned-install-layout.html +4 -4
- package/site-dist/reference/adr/0010-generated-feature-overview.html +4 -4
- package/site-dist/reference/adr/0011-resume-after-completion.html +4 -4
- package/site-dist/reference/adr/0012-review-panel.html +4 -4
- package/site-dist/reference/adr/0013-no-release-tooling.html +4 -4
- package/site-dist/reference/adr/0014-notifier-slot.html +4 -4
- package/site-dist/reference/adr/0015-incremental-continue.html +4 -4
- package/site-dist/reference/adr/0016-upgrade-from-tags.html +4 -4
- package/site-dist/reference/adr/0017-use-paseo-capabilities.html +4 -4
- package/site-dist/reference/adr/0018-own-worktree-option.html +4 -4
- package/site-dist/reference/adr/0019-parallel-orchestration.html +4 -4
- package/site-dist/reference/adr/0020-scheduling-through-the-chat.html +4 -4
- package/site-dist/reference/adr/0021-npm-version-manager.html +4 -4
- package/site-dist/reference/adr/0022-develop-and-verify-phases.html +4 -4
- package/site-dist/reference/adr/0023-types-gate-slices.html +4 -4
- package/site-dist/reference/adr/0024-confirm-early-review-axes.html +4 -4
- package/site-dist/reference/adr/0025-joint-requirements.html +4 -4
- package/site-dist/reference/adr/0026-machine-records-and-api.html +4 -4
- package/site-dist/reference/adr/0027-paseo-plugin.html +4 -4
- package/site-dist/reference/adr/0028-external-integrations.html +4 -4
- package/site-dist/reference/adr/0029-requirements-from-cards.html +4 -4
- package/site-dist/reference/adr/0030-card-intake-process.html +4 -4
- package/site-dist/reference/adr/0031-fewer-interventions.html +4 -4
- package/site-dist/reference/adr/0032-npm-only-install.html +4 -4
- package/site-dist/reference/adr/0033-prototype-review-and-ui-check.html +4 -4
- package/site-dist/reference/adr/index.html +4 -4
- package/site-dist/reference/commands.html +4 -4
- package/site-dist/reference/config.html +4 -4
- package/site-dist/reference/contracts/cli-json.html +4 -4
- package/site-dist/reference/contracts/feature-files.html +4 -4
- package/site-dist/reference/contracts/index.html +4 -4
- package/site-dist/reference/contracts/notifier-event.html +4 -4
- package/site-dist/reference/contracts/result-file.html +4 -4
- package/site-dist/reference/contracts/spec.html +4 -4
- package/site-dist/reference/contracts/state.html +4 -4
- package/site-dist/reference/contracts/usage-record.html +4 -4
- package/site-dist/reference/contracts/verify.html +4 -4
- package/site-dist/reference/scope.html +4 -4
- package/site-dist/assets/changelog.md.CIKYJXpF.js +0 -1
- package/site-dist/assets/chunks/@localSearchIndexroot.h7oQE_np.js +0 -1
- package/site-dist/assets/guide_maintainer.md.C1v7EpSY.js +0 -1
- /package/site-dist/assets/{changelog.md.CIKYJXpF.lean.js → changelog.md.RJaBnmnw.lean.js} +0 -0
- /package/site-dist/assets/{guide_getting-started.md.CZM53rO_.lean.js → guide_getting-started.md.wFOkpMSx.lean.js} +0 -0
|
@@ -2,59 +2,68 @@
|
|
|
2
2
|
<html lang="zh-CN">
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="utf-8" />
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
|
|
6
6
|
<title>原型审查 · req-kit</title>
|
|
7
|
+
<link rel="stylesheet" href="rk-tokens.css" />
|
|
8
|
+
<link rel="stylesheet" href="rk.css" />
|
|
7
9
|
<link rel="stylesheet" href="app.css" />
|
|
10
|
+
<script src="rk-icons.js"></script>
|
|
8
11
|
</head>
|
|
9
12
|
<body>
|
|
10
|
-
<header class="top">
|
|
11
|
-
<
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
<
|
|
17
|
-
<div class="group" id="filesGroup" hidden><span class="label">页面</span><div class="seg" id="files"></div></div>
|
|
18
|
-
<div class="group" id="statesGroup" hidden><span class="label">状态</span><div class="seg" id="states"></div></div>
|
|
19
|
-
<div class="group"><span class="label">宽度</span><div class="seg" id="widths"></div></div>
|
|
20
|
-
<div class="group"><span class="label">操作</span><div class="seg" id="modes"></div></div>
|
|
21
|
-
<label class="check"><input type="checkbox" id="showRegions" checked /> 标出要看的地方</label>
|
|
22
|
-
<label class="check" id="diffWrap" hidden><input type="checkbox" id="showDiff" /> 标出这一版改了哪里</label>
|
|
23
|
-
</div>
|
|
13
|
+
<header class="rk-top">
|
|
14
|
+
<span class="rk-brand"><svg data-logo style="--ground: var(--rk-surface-0)"></svg><span>req<i>-</i>kit</span></span>
|
|
15
|
+
<span class="rk-top__sep rk-top__hide-sm"></span>
|
|
16
|
+
<span class="rk-top__title" id="title">正在打开…</span>
|
|
17
|
+
<span id="status" class="rk-badge rk-badge--muted" hidden></span>
|
|
18
|
+
<span class="rk-top__spacer"></span>
|
|
19
|
+
<button class="rk-btn rk-btn--ghost rk-btn--sm" type="button" data-rk-theme title="切换深浅色" aria-label="切换深浅色"><svg class="ic" data-i="sun"></svg></button>
|
|
24
20
|
</header>
|
|
25
21
|
|
|
22
|
+
<div class="ap-head">
|
|
23
|
+
<span class="rk-eyebrow">Prototype review</span>
|
|
24
|
+
<h1>在原型上点要改的地方,没问题就确认方案</h1>
|
|
25
|
+
<p class="hint" id="hint"></p>
|
|
26
|
+
</div>
|
|
27
|
+
|
|
26
28
|
<main class="layout">
|
|
27
29
|
<section class="stage" aria-label="原型">
|
|
28
|
-
<
|
|
29
|
-
|
|
30
|
+
<div class="ap-bar">
|
|
31
|
+
<div class="group" id="filesGroup" hidden><span class="label">页面</span><div class="seg rk-seg" id="files"></div></div>
|
|
32
|
+
<div class="group" id="statesGroup" hidden><span class="label">状态</span><div class="seg rk-seg" id="states"></div></div>
|
|
33
|
+
<div class="group"><span class="label">宽度</span><div class="seg rk-seg" id="widths"></div></div>
|
|
34
|
+
<div class="group"><span class="label">操作</span><div class="seg rk-seg" id="modes"></div></div>
|
|
35
|
+
<label class="check"><input type="checkbox" id="showRegions" checked /> 标出要看的地方</label>
|
|
36
|
+
<label class="check" id="diffWrap" hidden><input type="checkbox" id="showDiff" /> 标出这一版改了哪里</label>
|
|
37
|
+
</div>
|
|
38
|
+
<div class="frame-wrap rk-dots" id="frameWrap">
|
|
30
39
|
<div class="sizer" id="sizer"><iframe id="frame" title="界面原型"></iframe></div>
|
|
31
40
|
</div>
|
|
32
|
-
<
|
|
41
|
+
<div class="empty" id="empty" hidden></div>
|
|
33
42
|
</section>
|
|
34
43
|
|
|
35
44
|
<aside class="side">
|
|
36
45
|
<details class="card" id="guide" open>
|
|
37
46
|
<summary>怎么用</summary>
|
|
38
47
|
<ol>
|
|
39
|
-
<li
|
|
48
|
+
<li>先看<span class="ap-key ap-key--region">虚线框</span>标出来的地方(①②③),它们是这次要改的,下面有对应的验收标准。</li>
|
|
40
49
|
<li>想改哪里,就<strong>点哪里</strong>:选一种改法,再用自己的话补一句,不用专业词汇。</li>
|
|
41
50
|
<li>想换文字,<strong>双击文字</strong>直接改成你想要的字。</li>
|
|
42
|
-
<li
|
|
51
|
+
<li>都看完了,在最下面提交修改意见;没有要改的,就确认方案、开始写代码。</li>
|
|
43
52
|
</ol>
|
|
44
53
|
</details>
|
|
45
54
|
|
|
46
55
|
<section class="card">
|
|
47
|
-
<h2>要看的地方</h2>
|
|
56
|
+
<h2><svg class="ic ic-sm" data-i="sparkles" style="color: var(--rk-ai)"></svg>要看的地方</h2>
|
|
48
57
|
<ul class="list" id="regions"></ul>
|
|
49
58
|
</section>
|
|
50
59
|
|
|
51
60
|
<section class="card" id="changesCard" hidden>
|
|
52
|
-
<h2>这一版的变化</h2>
|
|
61
|
+
<h2><svg class="ic ic-sm" data-i="history"></svg>这一版的变化</h2>
|
|
53
62
|
<div id="changes"></div>
|
|
54
63
|
</section>
|
|
55
64
|
|
|
56
65
|
<section class="card">
|
|
57
|
-
<h2>我的意见 <span class="count" id="count"></span></h2>
|
|
66
|
+
<h2><svg class="ic ic-sm" data-i="message-square-plus" style="color: var(--rk-brand-text)"></svg>我的意见 <span class="count" id="count"></span></h2>
|
|
58
67
|
<ul class="list" id="comments"></ul>
|
|
59
68
|
<label class="field">
|
|
60
69
|
<span>总体意见(可以不写)</span>
|
|
@@ -62,16 +71,19 @@
|
|
|
62
71
|
</label>
|
|
63
72
|
<p class="muted small" id="saved"></p>
|
|
64
73
|
</section>
|
|
65
|
-
|
|
66
|
-
<section class="card actions" id="actions">
|
|
67
|
-
<p class="muted" id="actionNote"></p>
|
|
68
|
-
<button type="button" class="primary" id="submitChanges">提交修改意见</button>
|
|
69
|
-
<button type="button" class="secondary" id="approve">没有要改的,同意开始写代码</button>
|
|
70
|
-
<p id="result" class="result" role="status" aria-live="polite"></p>
|
|
71
|
-
</section>
|
|
72
74
|
</aside>
|
|
73
75
|
</main>
|
|
74
76
|
|
|
77
|
+
<footer class="rk-decide" id="actions">
|
|
78
|
+
<div class="rk-decide__in">
|
|
79
|
+
<div class="rk-decide__sum"><b id="actionNote"></b><span id="result" class="result rk-cap" role="status" aria-live="polite"></span></div>
|
|
80
|
+
<div class="rk-decide__acts">
|
|
81
|
+
<button type="button" class="rk-btn" id="approve">确认方案,开始写代码</button>
|
|
82
|
+
<button type="button" class="rk-btn rk-btn--primary" id="submitChanges">提交修改意见</button>
|
|
83
|
+
</div>
|
|
84
|
+
</div>
|
|
85
|
+
</footer>
|
|
86
|
+
|
|
75
87
|
<div class="pop" id="pop" role="dialog" aria-modal="false" aria-labelledby="popTitle" hidden>
|
|
76
88
|
<p class="pop-title" id="popTitle"></p>
|
|
77
89
|
<p class="pop-sub" id="popSub"></p>
|
|
@@ -85,8 +97,8 @@
|
|
|
85
97
|
<textarea id="note" rows="2"></textarea>
|
|
86
98
|
</label>
|
|
87
99
|
<div class="pop-actions">
|
|
88
|
-
<button type="button" class="
|
|
89
|
-
<button type="button" class="primary" id="popOk">添加</button>
|
|
100
|
+
<button type="button" class="rk-btn rk-btn--ghost" id="popCancel">取消</button>
|
|
101
|
+
<button type="button" class="rk-btn rk-btn--primary" id="popOk">添加</button>
|
|
90
102
|
</div>
|
|
91
103
|
</div>
|
|
92
104
|
|
|
@@ -169,15 +169,15 @@
|
|
|
169
169
|
const style = d.createElement("style");
|
|
170
170
|
style.id = "rk-style";
|
|
171
171
|
style.textContent = `
|
|
172
|
-
.rk-hover { outline: 2px solid #
|
|
173
|
-
.rk-region { outline: 2px dashed #
|
|
172
|
+
.rk-hover { outline: 2px solid #65a30d !important; outline-offset: 2px !important; cursor: pointer !important; }
|
|
173
|
+
.rk-region { outline: 2px dashed #6366f1 !important; outline-offset: 4px !important; }
|
|
174
174
|
.rk-changed { outline: 2px solid #10b981 !important; outline-offset: 2px !important; box-shadow: inset 0 0 0 9999px rgba(16,185,129,.10) !important; }
|
|
175
175
|
.rk-edited { box-shadow: inset 0 0 0 9999px rgba(250,204,21,.35) !important; }
|
|
176
|
-
.rk-flash { outline: 3px solid #
|
|
176
|
+
.rk-flash { outline: 3px solid #a8e01f !important; outline-offset: 3px !important; box-shadow: 0 0 0 9999px rgba(168,224,31,.12) !important; }
|
|
177
177
|
#rk-layer { position: absolute; left: 0; top: 0; width: 0; height: 0; z-index: 2147483646; }
|
|
178
|
-
#rk-layer > * { position: absolute; font: 700 12px/22px
|
|
179
|
-
.rk-badge { background: #
|
|
180
|
-
.rk-pin { background: #
|
|
178
|
+
#rk-layer > * { position: absolute; font: 700 12px/22px ui-monospace, Consolas, monospace; border-radius: 999px; text-align: center; box-shadow: 0 0 0 2px #05070d, 0 4px 12px rgba(0,0,0,.35); }
|
|
179
|
+
.rk-badge { background: #4f46e5; color: #fff; padding: 0 7px; pointer-events: none; white-space: nowrap; }
|
|
180
|
+
.rk-pin { background: #a8e01f; color: #0f1a02; min-width: 22px; height: 22px; padding: 0 5px; cursor: pointer; }
|
|
181
181
|
[contenteditable="true"] { outline: 2px solid #f59e0b !important; background: #fffbe6 !important; color: #111 !important; }
|
|
182
182
|
`;
|
|
183
183
|
d.head.appendChild(style);
|
|
@@ -854,6 +854,10 @@
|
|
|
854
854
|
approve.disabled = true;
|
|
855
855
|
}
|
|
856
856
|
approve.hidden = !info.waitingForApproval;
|
|
857
|
+
// 1.15: one lime button, the next step: send the notes when there are any, else confirm the design.
|
|
858
|
+
const notesFirst = hasAny || !info.waitingForApproval;
|
|
859
|
+
changes.className = notesFirst ? "rk-btn rk-btn--primary" : "rk-btn";
|
|
860
|
+
approve.className = notesFirst ? "rk-btn" : "rk-btn rk-btn--primary";
|
|
857
861
|
}
|
|
858
862
|
|
|
859
863
|
async function submit(action) {
|
|
@@ -906,7 +910,7 @@
|
|
|
906
910
|
const pill = $("status");
|
|
907
911
|
pill.hidden = false;
|
|
908
912
|
pill.textContent = label;
|
|
909
|
-
pill.className = waiting ? "
|
|
913
|
+
pill.className = waiting ? "rk-badge rk-badge--needs" : "rk-badge rk-badge--muted";
|
|
910
914
|
$("diffWrap").hidden = !view.info.versions.previous;
|
|
911
915
|
renderActions();
|
|
912
916
|
}
|
|
@@ -1,57 +1,12 @@
|
|
|
1
|
-
:
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
/* The acceptance checklist page (1.15): only what the design system (rk.css) does not cover. */
|
|
2
|
+
#reviewer { width: 160px; }
|
|
3
|
+
.ck-items { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--rk-space-3); }
|
|
4
|
+
.rk-check { scroll-margin-top: 64px; }
|
|
5
|
+
.rk-check ul.ck-details { margin: 0; padding-left: 18px; font-size: 13px; line-height: 22px; color: var(--rk-text-secondary); }
|
|
6
|
+
.rk-check textarea.rk-input { width: 100%; box-sizing: border-box; }
|
|
7
|
+
.ck-services { margin: 0; padding-left: 18px; }
|
|
8
|
+
.ck-howto { margin: 0; padding: 10px 12px; border-radius: var(--rk-radius-md); background: var(--rk-surface-3); font: 12.5px/20px var(--rk-font-mono); white-space: pre-wrap; overflow-x: auto; }
|
|
9
|
+
#notes ul { margin: 4px 0 0; padding-left: 18px; }
|
|
10
|
+
@media (max-width: 640px) {
|
|
11
|
+
#reviewer { width: 100%; }
|
|
5
12
|
}
|
|
6
|
-
@media (prefers-color-scheme: dark) {
|
|
7
|
-
:root {
|
|
8
|
-
--bg: #12161c; --surface: #1a2029; --surface-2: #222a35; --text: #e6eaf0; --muted: #9aa7b8; --border: #2e3846;
|
|
9
|
-
--accent: #6f9bff; --accent-text: #0d1420; --accent-soft: #1f2c47; --ok: #4ade80; --ok-soft: #173322; --danger: #f87171; --danger-soft: #3a1c1c; --warn: #fbbf24; --warn-soft: #3a2c12;
|
|
10
|
-
color-scheme: dark;
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
* { box-sizing: border-box; }
|
|
14
|
-
[hidden] { display: none !important; }
|
|
15
|
-
body { margin: 0; background: var(--bg); color: var(--text); font: 15px/1.6 system-ui, -apple-system, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif; padding-bottom: 96px; }
|
|
16
|
-
.top { display: flex; justify-content: space-between; align-items: flex-start; gap: 16px; padding: 20px 24px 8px; flex-wrap: wrap; }
|
|
17
|
-
.eyebrow { font-size: 13px; color: var(--muted); }
|
|
18
|
-
h1 { margin: 2px 0 4px; font-size: 22px; }
|
|
19
|
-
.muted { color: var(--muted); }
|
|
20
|
-
main { padding: 0 24px; max-width: 980px; }
|
|
21
|
-
.intro { margin: 8px 0 16px; }
|
|
22
|
-
.card { background: var(--surface); border: 1px solid var(--border); border-radius: 12px; padding: 14px 16px; margin: 12px 0; }
|
|
23
|
-
.notes h2, .card h2 { font-size: 15px; margin: 0 0 6px; }
|
|
24
|
-
.notes ul { margin: 0; padding-left: 20px; }
|
|
25
|
-
.items { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 12px; }
|
|
26
|
-
.item { background: var(--surface); border: 1px solid var(--border); border-left: 4px solid var(--border); border-radius: 12px; padding: 14px 16px; }
|
|
27
|
-
.item.pass { border-left-color: var(--ok); }
|
|
28
|
-
.item.fail { border-left-color: var(--danger); }
|
|
29
|
-
.item.skip { border-left-color: var(--warn); }
|
|
30
|
-
.item-head { display: flex; gap: 10px; align-items: baseline; flex-wrap: wrap; }
|
|
31
|
-
.id { font-weight: 700; font-variant-numeric: tabular-nums; }
|
|
32
|
-
.item-title { font-weight: 600; }
|
|
33
|
-
.badge { font-size: 12px; padding: 1px 8px; border-radius: 999px; background: var(--surface-2); color: var(--muted); white-space: nowrap; }
|
|
34
|
-
.badge.fail { background: var(--danger-soft); color: var(--danger); }
|
|
35
|
-
.badge.unverified { background: var(--warn-soft); color: var(--warn); }
|
|
36
|
-
.badge.pass { background: var(--ok-soft); color: var(--ok); }
|
|
37
|
-
.details { margin: 8px 0 0; padding-left: 18px; }
|
|
38
|
-
.details li { margin: 2px 0; }
|
|
39
|
-
.evidence { font-size: 13px; color: var(--muted); margin-top: 6px; }
|
|
40
|
-
.marks { display: flex; gap: 8px; margin-top: 10px; flex-wrap: wrap; }
|
|
41
|
-
.btn { font: inherit; border: 1px solid var(--border); background: var(--surface); color: var(--text); border-radius: 8px; padding: 6px 14px; cursor: pointer; min-height: 36px; }
|
|
42
|
-
.btn:hover { border-color: var(--accent); }
|
|
43
|
-
.btn:disabled { opacity: 0.5; cursor: default; }
|
|
44
|
-
.btn.primary { background: var(--accent); color: var(--accent-text); border-color: var(--accent); font-weight: 600; }
|
|
45
|
-
.btn.on-pass { background: var(--ok); color: #fff; border-color: var(--ok); }
|
|
46
|
-
.btn.on-fail { background: var(--danger); color: #fff; border-color: var(--danger); }
|
|
47
|
-
.btn.on-skip { background: var(--warn); color: #fff; border-color: var(--warn); }
|
|
48
|
-
textarea { width: 100%; margin-top: 8px; font: inherit; color: var(--text); background: var(--surface-2); border: 1px solid var(--border); border-radius: 8px; padding: 8px; min-height: 64px; }
|
|
49
|
-
.bar { position: fixed; left: 0; right: 0; bottom: 0; display: flex; align-items: center; gap: 16px; padding: 12px 24px; background: var(--surface); border-top: 1px solid var(--border); flex-wrap: wrap; }
|
|
50
|
-
.summary { flex: 1; min-width: 200px; }
|
|
51
|
-
.reviewer input { font: inherit; color: var(--text); background: var(--surface-2); border: 1px solid var(--border); border-radius: 8px; padding: 6px 8px; width: 160px; }
|
|
52
|
-
.toast { position: fixed; right: 24px; bottom: 84px; background: var(--text); color: var(--bg); padding: 10px 14px; border-radius: 10px; max-width: 520px; white-space: pre-line; }
|
|
53
|
-
.services a { color: var(--accent); }
|
|
54
|
-
pre.howto { white-space: pre-wrap; font: inherit; margin: 6px 0 0; }
|
|
55
|
-
.done { background: var(--ok-soft); border-color: var(--ok); }
|
|
56
|
-
|
|
57
|
-
@media (max-width: 640px) { body { padding-bottom: 200px; } }
|
|
@@ -2,34 +2,60 @@
|
|
|
2
2
|
<html lang="zh-CN">
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="utf-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
|
|
6
6
|
<title>验收清单</title>
|
|
7
|
+
<link rel="stylesheet" href="rk-tokens.css">
|
|
8
|
+
<link rel="stylesheet" href="rk.css">
|
|
7
9
|
<link rel="stylesheet" href="check.css">
|
|
10
|
+
<script src="rk-icons.js"></script>
|
|
8
11
|
</head>
|
|
9
12
|
<body>
|
|
10
|
-
<header class="top">
|
|
11
|
-
<
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
<
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
</div>
|
|
13
|
+
<header class="rk-top">
|
|
14
|
+
<span class="rk-brand"><svg data-logo style="--ground:var(--rk-surface-0)"></svg><span>req<i>-</i>kit</span></span>
|
|
15
|
+
<span class="rk-top__sep rk-top__hide-sm"></span>
|
|
16
|
+
<span class="rk-top__title" id="title">验收清单</span>
|
|
17
|
+
<span class="rk-code" id="project" hidden></span>
|
|
18
|
+
<span class="rk-top__spacer"></span>
|
|
19
|
+
<span class="rk-cap rk-top__hide-sm" id="saved"></span>
|
|
20
|
+
<span class="rk-badge rk-badge--outline" id="readonly" hidden><svg class="ic" data-i="lock"></svg>只读</span>
|
|
21
|
+
<button class="rk-btn rk-btn--ghost rk-btn--sm" type="button" data-rk-theme title="切换深浅色" aria-label="切换深浅色"><svg class="ic" data-i="sun"></svg></button>
|
|
20
22
|
</header>
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
<
|
|
24
|
-
<
|
|
25
|
-
|
|
26
|
-
</
|
|
27
|
-
<
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
23
|
+
|
|
24
|
+
<div class="rk-layout">
|
|
25
|
+
<nav class="rk-side" id="nav" aria-label="验收项"></nav>
|
|
26
|
+
<main class="rk-main" id="main">
|
|
27
|
+
<div class="rk-head">
|
|
28
|
+
<span class="rk-eyebrow">Acceptance</span>
|
|
29
|
+
<h1>按验收标准逐条核对,再提交验收</h1>
|
|
30
|
+
<p id="sub"></p>
|
|
31
|
+
<p class="rk-cap">照着"前置条件"准备,按"操作"去做,看到的和"预期结果"一样就点"通过";不一样点"不对",写下看到了什么。流水线没验证或没通过的排在最前面。进度会自动保存。</p>
|
|
32
|
+
</div>
|
|
33
|
+
<section class="rk-card rk-card--sm" id="try-card">
|
|
34
|
+
<div class="rk-row" style="justify-content:space-between">
|
|
35
|
+
<span class="rk-card__label rk-card__label--data"><svg class="ic ic-sm" data-i="play"></svg>试用</span>
|
|
36
|
+
<span id="try-state"></span>
|
|
37
|
+
</div>
|
|
38
|
+
<div id="try-box"><p>在这个需求自己的工作区里把它跑起来,给出访问地址和提测说明里的测试账号、数据。</p></div>
|
|
39
|
+
<div class="rk-row">
|
|
40
|
+
<button class="rk-btn" id="try" type="button"><svg class="ic" data-i="play"></svg><span>把它跑起来试用</span></button>
|
|
41
|
+
<button class="rk-btn rk-btn--sm" id="try-stop" type="button" hidden>停止试用</button>
|
|
42
|
+
</div>
|
|
43
|
+
</section>
|
|
44
|
+
<section class="rk-callout rk-callout--note" id="notes" hidden></section>
|
|
45
|
+
<ol class="ck-items" id="items"></ol>
|
|
46
|
+
</main>
|
|
47
|
+
</div>
|
|
48
|
+
|
|
49
|
+
<footer class="rk-decide">
|
|
50
|
+
<div class="rk-decide__in">
|
|
51
|
+
<div class="rk-decide__sum"><b id="summary"></b><span class="rk-cap" id="summary-sub"></span></div>
|
|
52
|
+
<label class="rk-field">验收人<input class="rk-input" id="reviewer" placeholder="你的名字(可不填)" maxlength="60"></label>
|
|
53
|
+
<div class="rk-decide__acts">
|
|
54
|
+
<button class="rk-btn rk-btn--primary" id="submit" type="button" disabled><svg class="ic" data-i="clipboard-check"></svg><span>提交验收</span></button>
|
|
55
|
+
</div>
|
|
56
|
+
</div>
|
|
31
57
|
</footer>
|
|
32
|
-
<div
|
|
58
|
+
<div class="rk-toast" id="toast" role="status" hidden></div>
|
|
33
59
|
<script src="check.js"></script>
|
|
34
60
|
</body>
|
|
35
61
|
</html>
|