refactor: 重构 api-intro、api-design、transistor-to-cpu 组件为紧凑布局

- 重构 api-intro 7 个 Vue 组件为更紧凑的左右布局
- 重构 api-design 相关组件
- 重构 transistor-to-cpu 相关组件
- 统一使用 demo-root -> demo-header -> demo-layout -> info-box 结构
- 扩写文章内容为 MIT 讲义风格
This commit is contained in:
sanbuphy
2026-02-23 01:50:43 +08:00
parent 2a0fdd3392
commit 1062e2e16f
68 changed files with 4455 additions and 3469 deletions
@@ -22,17 +22,20 @@
<div class="compare-row">
<div class="compare-col">
<div class="compare-title">单对象</div>
<pre class="code-sm">{
<pre class="code-sm">
{
"code": 0,
"data": {
"id": 123,
"name": "张三"
}
}</pre>
}</pre
>
</div>
<div class="compare-col">
<div class="compare-title">列表</div>
<pre class="code-sm">{
<pre class="code-sm">
{
"code": 0,
"data": {
"items": [...],
@@ -41,34 +44,27 @@
"total": 100
}
}
}</pre>
}</pre
>
</div>
</div>
<div class="note">列表数据包裹在 items 数组中分页信息放在 pagination 对象</div>
<div class="note">
列表数据包裹在 items 数组中分页信息放在 pagination 对象
</div>
</div>
<div v-if="active === 'naming'" class="section">
<h4>字段命名规范</h4>
<div class="rule-list">
<div
v-for="rule in namingRules"
:key="rule.name"
class="rule-item"
>
<div v-for="rule in namingRules" :key="rule.name" class="rule-item">
<div class="rule-header">
<span class="rule-icon">{{ rule.icon }}</span>
<span class="rule-name">{{ rule.name }}</span>
</div>
<div class="rule-examples">
<code class="good">{{ rule.good }}</code>
<span
v-if="rule.bad"
class="vs"
>vs</span>
<code
v-if="rule.bad"
class="bad"
>{{ rule.bad }}</code>
<span v-if="rule.bad" class="vs">vs</span>
<code v-if="rule.bad" class="bad">{{ rule.bad }}</code>
</div>
<div class="rule-desc">{{ rule.desc }}</div>
</div>
@@ -78,11 +74,13 @@
<div v-if="active === 'datetime'" class="section">
<h4>时间格式设计</h4>
<div class="time-example">
<pre class="code-block">{
<pre class="code-block">
{
"created_at": "2024-01-15T09:30:00.000Z",
"updated_at": "2024-01-15T10:00:00.000Z",
"expired_at": "2025-01-15T00:00:00.000Z"
}</pre>
}</pre
>
</div>
<div class="time-rules">
<div class="time-rule">
@@ -99,7 +97,9 @@
</div>
<div class="time-rule">
<span class="rule-label">命名</span>
<span class="rule-value">xxx_at 表示时间点xxx_duration 表示时长</span>
<span class="rule-value"
>xxx_at 表示时间点xxx_duration 表示时长</span
>
</div>
</div>
</div>
@@ -109,18 +109,22 @@
<div class="compare-row">
<div class="compare-col good-col">
<div class="compare-title"> 推荐</div>
<pre class="code-sm">{
<pre class="code-sm">
{
"name": "张三",
"nickname": null,
"avatar": null
}</pre>
}</pre
>
<div class="compare-desc">字段存在但无值时返回 null</div>
</div>
<div class="compare-col bad-col">
<div class="compare-title"> 不推荐</div>
<pre class="code-sm">{
<pre class="code-sm">
{
"name": "张三"
}</pre>
}</pre
>
<div class="compare-desc">省略字段前端需判断是否存在</div>
</div>
</div>
@@ -152,7 +156,9 @@
<div class="tips">
<span class="tips-icon">💡</span>
<span class="tips-text">参考 ISO 8601 时间标准字段命名保持 snake_case 风格</span>
<span class="tips-text"
>参考 ISO 8601 时间标准字段命名保持 snake_case 风格</span
>
</div>
</div>
</template>
@@ -172,11 +178,41 @@ const tabs = [
]
const namingRules = [
{ icon: '🔡', name: '使用 snake_case', good: 'created_at', bad: 'createdAt', desc: 'JSON 字段名统一用下划线' },
{ icon: '📖', name: '避免缩写', good: 'user_id', bad: 'uid', desc: '保持可读性' },
{ icon: '✅', name: '布尔值加前缀', good: 'is_active, has_permission', bad: 'active, permission', desc: '一眼识别布尔类型' },
{ icon: '📅', name: '时间带后缀', good: 'created_at, expired_at', bad: 'created, expired', desc: '明确是时间字段' },
{ icon: '🔢', name: '数量带后缀', good: 'total_count, page_size', bad: 'total, size', desc: '明确是数值类型' }
{
icon: '🔡',
name: '使用 snake_case',
good: 'created_at',
bad: 'createdAt',
desc: 'JSON 字段名统一用下划线'
},
{
icon: '📖',
name: '避免缩写',
good: 'user_id',
bad: 'uid',
desc: '保持可读性'
},
{
icon: '✅',
name: '布尔值加前缀',
good: 'is_active, has_permission',
bad: 'active, permission',
desc: '一眼识别布尔类型'
},
{
icon: '📅',
name: '时间带后缀',
good: 'created_at, expired_at',
bad: 'created, expired',
desc: '明确是时间字段'
},
{
icon: '🔢',
name: '数量带后缀',
good: 'total_count, page_size',
bad: 'total, size',
desc: '明确是数值类型'
}
]
const relations = [
@@ -220,7 +256,7 @@ const relations = [
]
const currentRelation = computed(() => {
return relations.find(r => r.id === rId.value) || relations[0]
return relations.find((r) => r.id === rId.value) || relations[0]
})
</script>