设置中心与 Mock 数据功能
- 顶栏:移除 tauri-native 传输徽章;⋯ 更多菜单重做(设置/Mock/环境/主题/文档/官网/重置) - 设置弹窗重写:左侧导航(外观/网络/Mock 数据/数据管理/关于)+ 分组卡片 + 开关控件 - Mock 引擎(packages/core/src/mock.ts):Mock.js 常用语法子集 + 智能字段匹配 - 61 条默认规则(通配符/精确/正则 × string/number/integer/boolean) - 发送链路接入:Query/JSON Body/urlencoded/form-data/GraphQL Variables - Body 工具栏:智能填充(生成可编辑 @表达式模板)+ Mock 预览 - 设置页规则表 CRUD + 表达式速查表即时预览 - 文档新增「Mock 数据」页(/docs/mock),Manifest 顺序调整 - 新增 16 个 Mock 单测(总 37 前端用例全绿)
This commit is contained in:
1 parent
6307a017a3
commit
9a019408ab
18 files changed
+1684
-104
No files matched your search
@@ -369,6 +369,111 @@
|
||||
.ops-hint svg { color: var(--accent-strong); margin-top: 2px; }
|
||||
.ops-hint b { color: var(--accent-strong); font-family: inherit; }
|
||||
|
||||
/* ---------- 设置弹窗(左侧导航 + 分区) ---------- */
|
||||
.set-dialog { display: grid; grid-template-columns: 188px minmax(0, 1fr); grid-template-rows: minmax(0, 1fr); gap: 0 16px; height: min(66vh, 620px); min-height: 420px; margin: 0 -1.25rem -0.25rem; }
|
||||
.set-side {
|
||||
border-right: 1px solid var(--border);
|
||||
padding-right: 12px;
|
||||
display: flex; flex-direction: column; gap: 2px;
|
||||
}
|
||||
.set-side-head {
|
||||
@apply mb-2 px-2 text-[11px] font-semibold uppercase tracking-[0.08em];
|
||||
color: var(--text-faint);
|
||||
}
|
||||
.set-side-item {
|
||||
@apply flex items-center gap-2.5 rounded-lg px-2 py-2 transition;
|
||||
color: var(--text-dim);
|
||||
}
|
||||
.set-side-item:hover { background: var(--hover); color: var(--text); }
|
||||
.set-side-item.active { background: var(--active); color: var(--accent-strong); }
|
||||
.set-side-icon {
|
||||
@apply grid h-7 w-7 shrink-0 place-items-center rounded-lg;
|
||||
background: var(--panel-2);
|
||||
color: var(--text-dim);
|
||||
}
|
||||
.set-side-icon.active { color: var(--accent-strong); }
|
||||
.set-main { min-width: 0; min-height: 0; display: flex; flex-direction: column; }
|
||||
.set-main-head { padding-bottom: 10px; flex-shrink: 0; }
|
||||
.set-main-body { flex: 1; min-height: 0; padding-top: 14px; overflow-y: auto; display: flex; flex-direction: column; gap: 14px; padding-right: 4px; }
|
||||
.set-main-body > .set-group { flex-shrink: 0; }
|
||||
.set-group {
|
||||
@apply overflow-hidden rounded-xl;
|
||||
border: 1px solid var(--border);
|
||||
background: var(--panel-2);
|
||||
}
|
||||
.set-group-title {
|
||||
@apply px-4 pt-3 pb-1 text-[11px] font-semibold uppercase tracking-[0.08em];
|
||||
color: var(--text-faint);
|
||||
}
|
||||
.set-row {
|
||||
@apply flex items-center gap-4 px-4 py-3;
|
||||
}
|
||||
.set-row + .set-row { border-top: 1px solid color-mix(in srgb, var(--border) 60%, transparent); }
|
||||
.set-row-control { flex-shrink: 0; display: flex; align-items: center; gap: 6px; }
|
||||
|
||||
/* 开关 */
|
||||
.set-toggle {
|
||||
@apply relative h-[22px] w-[38px] rounded-full transition;
|
||||
background: var(--border);
|
||||
}
|
||||
.set-toggle:hover { opacity: 0.85; }
|
||||
.set-toggle.on { background: var(--accent); }
|
||||
.set-toggle-dot {
|
||||
@apply absolute top-[3px] left-[3px] h-4 w-4 rounded-full bg-white transition;
|
||||
}
|
||||
.set-toggle.on .set-toggle-dot { transform: translateX(16px); }
|
||||
|
||||
/* Mock 规则表(随右侧内容区整体滚动,表头吸附) */
|
||||
.set-group .ops-hint { margin: 10px 12px 0; }
|
||||
.mock-rules { @apply mt-2; }
|
||||
.mock-rule-head, .mock-rule-row {
|
||||
display: grid;
|
||||
grid-template-columns: 88px 84px minmax(110px, 1fr) minmax(130px, 1.2fr) minmax(96px, 0.9fr) 44px 30px;
|
||||
gap: 6px;
|
||||
align-items: center;
|
||||
padding: 4px 12px;
|
||||
}
|
||||
.mock-rule-head {
|
||||
@apply sticky top-0 z-[1] text-[11px] font-semibold;
|
||||
color: var(--text-faint);
|
||||
background: var(--panel-2);
|
||||
border-bottom: 1px solid var(--border);
|
||||
padding-top: 8px;
|
||||
padding-bottom: 8px;
|
||||
}
|
||||
.mock-rule-row { padding-top: 5px; padding-bottom: 5px; }
|
||||
.mock-rule-row + .mock-rule-row { border-top: 1px solid color-mix(in srgb, var(--border) 45%, transparent); }
|
||||
.mock-rule-pattern { font-family: ui-monospace, monospace; }
|
||||
.mock-rule-expr { font-family: ui-monospace, monospace; color: var(--accent-strong); }
|
||||
|
||||
/* Mock 速查表 */
|
||||
.mock-cheatsheet { @apply mt-2 grid grid-cols-2 gap-1.5; }
|
||||
.mock-cheat-item {
|
||||
@apply flex items-center gap-2 rounded-lg px-2.5 py-1.5 text-left text-[11px] transition;
|
||||
background: var(--panel);
|
||||
border: 1px solid var(--border);
|
||||
color: var(--text-dim);
|
||||
}
|
||||
.mock-cheat-item:hover { border-color: var(--accent); color: var(--text); }
|
||||
.mock-cheat-item code {
|
||||
font-family: ui-monospace, monospace;
|
||||
color: var(--accent-strong);
|
||||
font-size: 11px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.mock-cheat-item .ops-faint { flex: 1; min-width: 0; @apply truncate; }
|
||||
.mock-cheat-gen {
|
||||
max-width: 46%;
|
||||
@apply truncate font-mono text-[10px];
|
||||
color: var(--text-faint);
|
||||
}
|
||||
.mock-preview-value {
|
||||
@apply rounded-md px-2 py-1 font-mono text-[12px];
|
||||
background: var(--panel-2);
|
||||
border: 1px solid var(--border);
|
||||
color: var(--accent-strong);
|
||||
}
|
||||
|
||||
/* ---------- {{变量}} 补全浮层 ---------- */
|
||||
.var-hint-wrap { position: relative; min-width: 0; flex: 1; display: inline-flex; }
|
||||
.var-hint-panel {
|
||||
|
||||
Reference in new issue
Block a user