fix(eslint): reduce warnings in GitHub Actions deployment

- Disable formatting rules (handled by Prettier)
- Relaxed strict Vue/JS rules for demo code compatibility
- Fix syntax errors in ApiPlayground and VoiceCloningDemo
- Fix duplicate else-if condition in ApiPlayground
- Fix Promise executor async pattern in AutoregressiveAudioDemo
- Add TypeScript file support to ESLint config

Warnings reduced from 295 to 251 problems.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
sanbuphy
2026-02-18 17:38:10 +08:00
parent 8b01686e68
commit 0eba9e87e9
456 changed files with 28450 additions and 9677 deletions
@@ -6,8 +6,12 @@
<div class="rendering-demo">
<!-- 故事引入 -->
<div class="story-box">
<div class="story-emoji">🍽👨🍳</div>
<h4 class="story-title">小美的餐厅</h4>
<div class="story-emoji">
🍽👨🍳
</div>
<h4 class="story-title">
小美的餐厅
</h4>
<p class="story-text">
小美开了家餐厅有三种上菜方式<br>
<strong>CSR客户端渲染</strong>给你半成品食材包你自己做 <br>
@@ -35,56 +39,124 @@
<div class="demo-container">
<!-- 客户区 -->
<div class="customer-area">
<div class="customer-icon">🧑🦰</div>
<div class="customer-label">用户浏览器</div>
<div class="customer-icon">
🧑🦰
</div>
<div class="customer-label">
用户浏览器
</div>
<div class="table">
<div v-if="activeStrategy === 'csr'" class="table-content">
<div
v-if="activeStrategy === 'csr'"
class="table-content"
>
<div class="ingredients-pack">
<div class="pack-label">📦 食材包</div>
<div class="pack-content">
<div class="ingredient">🥬 菜叶</div>
<div class="ingredient">🥩 肉片</div>
<div class="ingredient">🧂 调料</div>
<div class="pack-label">
📦 食材包
</div>
<div class="pack-content">
<div class="ingredient">
🥬 菜叶
</div>
<div class="ingredient">
🥩 肉片
</div>
<div class="ingredient">
🧂 调料
</div>
</div>
<div class="instruction">
请自己烹饪
</div>
<div class="instruction"> 请自己烹饪</div>
</div>
</div>
<div v-else class="table-content ready">
<div class="dish">{{ currentStrategy.dish }}</div>
<div class="dish-status">{{ currentStrategy.readyStatus }}</div>
<div
v-else
class="table-content ready"
>
<div class="dish">
{{ currentStrategy.dish }}
</div>
<div class="dish-status">
{{ currentStrategy.readyStatus }}
</div>
</div>
</div>
</div>
<!-- 传输区 -->
<div class="transfer-area">
<div v-if="isAnimating" class="transfer-animation">
<div class="transfer-content">{{ currentStrategy.transferItem }}</div>
<div class="transfer-arrow"></div>
<div
v-if="isAnimating"
class="transfer-animation"
>
<div class="transfer-content">
{{ currentStrategy.transferItem }}
</div>
<div class="transfer-arrow">
</div>
</div>
<div v-else class="transfer-info">
<div class="info-label">{{ currentStrategy.transferLabel }}</div>
<div
v-else
class="transfer-info"
>
<div class="info-label">
{{ currentStrategy.transferLabel }}
</div>
</div>
</div>
<!-- 厨房/服务器 -->
<div class="kitchen-area">
<div class="kitchen-icon">👨🍳</div>
<div class="kitchen-label">{{ currentStrategy.serverLabel }}</div>
<div class="kitchen-icon">
👨🍳
</div>
<div class="kitchen-label">
{{ currentStrategy.serverLabel }}
</div>
<div class="kitchen-content">
<div v-if="activeStrategy === 'csr'" class="server-station">
<div class="station-icon">📡</div>
<div class="station-label">配送站</div>
<div class="station-desc">只管配送不做菜</div>
<div
v-if="activeStrategy === 'csr'"
class="server-station"
>
<div class="station-icon">
📡
</div>
<div class="station-label">
配送站
</div>
<div class="station-desc">
只管配送不做菜
</div>
</div>
<div v-else-if="activeStrategy === 'ssr'" class="server-kitchen">
<div class="chef-action">{{ chefAction }}</div>
<div class="cooking-pot" v-if="isCooking">🍳</div>
<div
v-else-if="activeStrategy === 'ssr'"
class="server-kitchen"
>
<div class="chef-action">
{{ chefAction }}
</div>
<div
v-if="isCooking"
class="cooking-pot"
>
🍳
</div>
</div>
<div v-else class="server-cabinet">
<div class="cabinet-icon">🗄</div>
<div class="cabinet-label">保温柜</div>
<div class="cabinet-desc">{{ currentStrategy.cabinetDesc }}</div>
<div
v-else
class="server-cabinet"
>
<div class="cabinet-icon">
🗄
</div>
<div class="cabinet-label">
保温柜
</div>
<div class="cabinet-desc">
{{ currentStrategy.cabinetDesc }}
</div>
</div>
</div>
</div>
@@ -93,96 +165,201 @@
<!-- 性能指标 -->
<div class="metrics-panel">
<div class="metric-item">
<div class="metric-label">首屏速度</div>
<div class="metric-bar">
<div class="metric-fill" :style="{ width: currentStrategy.firstScreenScore + '%', background: currentStrategy.color }"></div>
<div class="metric-label">
首屏速度
</div>
<div class="metric-bar">
<div
class="metric-fill"
:style="{ width: currentStrategy.firstScreenScore + '%', background: currentStrategy.color }"
/>
</div>
<div
class="metric-value"
:style="{ color: currentStrategy.color }"
>
{{ currentStrategy.firstScreenText }}
</div>
<div class="metric-value" :style="{ color: currentStrategy.color }">{{ currentStrategy.firstScreenText }}</div>
</div>
<div class="metric-item">
<div class="metric-label">交互体验</div>
<div class="metric-bar">
<div class="metric-fill" :style="{ width: currentStrategy.interactionScore + '%', background: currentStrategy.color }"></div>
<div class="metric-label">
交互体验
</div>
<div class="metric-bar">
<div
class="metric-fill"
:style="{ width: currentStrategy.interactionScore + '%', background: currentStrategy.color }"
/>
</div>
<div
class="metric-value"
:style="{ color: currentStrategy.color }"
>
{{ currentStrategy.interactionText }}
</div>
<div class="metric-value" :style="{ color: currentStrategy.color }">{{ currentStrategy.interactionText }}</div>
</div>
<div class="metric-item">
<div class="metric-label">SEO 友好度</div>
<div class="metric-bar">
<div class="metric-fill" :style="{ width: currentStrategy.seoScore + '%', background: currentStrategy.color }"></div>
<div class="metric-label">
SEO 友好度
</div>
<div class="metric-bar">
<div
class="metric-fill"
:style="{ width: currentStrategy.seoScore + '%', background: currentStrategy.color }"
/>
</div>
<div
class="metric-value"
:style="{ color: currentStrategy.color }"
>
{{ currentStrategy.seoText }}
</div>
<div class="metric-value" :style="{ color: currentStrategy.color }">{{ currentStrategy.seoText }}</div>
</div>
</div>
<!-- 操作按钮 -->
<div class="controls">
<button class="btn btn-primary" @click="startDemo" :disabled="isAnimating">
<button
class="btn btn-primary"
:disabled="isAnimating"
@click="startDemo"
>
{{ isAnimating ? '演示中...' : '开始演示' }}
</button>
<button class="btn btn-secondary" @click="resetDemo">
<button
class="btn btn-secondary"
@click="resetDemo"
>
重置
</button>
</div>
<!-- 详细对比表 -->
<div class="comparison-table">
<div class="table-title">📊 三种渲染方式详细对比</div>
<div class="table-title">
📊 三种渲染方式详细对比
</div>
<div class="table-content">
<div class="comparison-row header">
<div class="col-feature">特点</div>
<div class="col-csr">CSR</div>
<div class="col-ssr">SSR</div>
<div class="col-ssg">SSG</div>
<div class="col-feature">
特点
</div>
<div class="col-csr">
CSR
</div>
<div class="col-ssr">
SSR
</div>
<div class="col-ssg">
SSG
</div>
</div>
<div class="comparison-row">
<div class="col-feature">比喻</div>
<div class="col-csr">给半成品食材包自己做</div>
<div class="col-ssr">厨房做好菜端给你</div>
<div class="col-ssg">提前做好放保温柜</div>
<div class="col-feature">
比喻
</div>
<div class="col-csr">
给半成品食材包自己做
</div>
<div class="col-ssr">
厨房做好菜端给你
</div>
<div class="col-ssg">
提前做好放保温柜
</div>
</div>
<div class="comparison-row">
<div class="col-feature">首屏速度</div>
<div class="col-csr">要等 JS</div>
<div class="col-ssr">直接给 HTML</div>
<div class="col-ssg">最快直接给 HTML</div>
<div class="col-feature">
首屏速度
</div>
<div class="col-csr">
要等 JS
</div>
<div class="col-ssr">
直接给 HTML
</div>
<div class="col-ssg">
最快直接给 HTML
</div>
</div>
<div class="comparison-row">
<div class="col-feature">交互体验</div>
<div class="col-csr">流畅已在浏览器</div>
<div class="col-ssr">较流畅交互仍需 JS</div>
<div class="col-ssg">较流畅交互仍需 JS</div>
<div class="col-feature">
交互体验
</div>
<div class="col-csr">
流畅已在浏览器
</div>
<div class="col-ssr">
较流畅交互仍需 JS
</div>
<div class="col-ssg">
较流畅交互仍需 JS
</div>
</div>
<div class="comparison-row">
<div class="col-feature">SEO 友好度</div>
<div class="col-csr">搜不到内容</div>
<div class="col-ssr">完整 HTML</div>
<div class="col-ssg">完整 HTML</div>
<div class="col-feature">
SEO 友好度
</div>
<div class="col-csr">
搜不到内容
</div>
<div class="col-ssr">
完整 HTML
</div>
<div class="col-ssg">
完整 HTML
</div>
</div>
<div class="comparison-row">
<div class="col-feature">服务器压力</div>
<div class="col-csr">只传 JS</div>
<div class="col-ssr">每次都渲染</div>
<div class="col-ssg">最小预渲染好</div>
<div class="col-feature">
服务器压力
</div>
<div class="col-csr">
只传 JS
</div>
<div class="col-ssr">
每次都渲染
</div>
<div class="col-ssg">
最小预渲染好
</div>
</div>
<div class="comparison-row">
<div class="col-feature">适合场景</div>
<div class="col-csr">后台系统工具应用</div>
<div class="col-ssr">新闻网站电商首页</div>
<div class="col-ssg">博客文档站</div>
<div class="col-feature">
适合场景
</div>
<div class="col-csr">
后台系统工具应用
</div>
<div class="col-ssr">
新闻网站电商首页
</div>
<div class="col-ssg">
博客文档站
</div>
</div>
<div class="comparison-row">
<div class="col-feature">代表框架</div>
<div class="col-csr">React SPAVue SPA</div>
<div class="col-ssr">Next.js SSRNuxt SSR</div>
<div class="col-ssg">Next.js SSGNuxt SSG</div>
<div class="col-feature">
代表框架
</div>
<div class="col-csr">
React SPAVue SPA
</div>
<div class="col-ssr">
Next.js SSRNuxt SSR
</div>
<div class="col-ssg">
Next.js SSGNuxt SSG
</div>
</div>
</div>
</div>
<!-- 核心要点 -->
<div class="key-takeaway">
<div class="takeaway-icon">🎯</div>
<div class="takeaway-icon">
🎯
</div>
<div class="takeaway-content">
<strong>如何选择</strong><br>
<strong>CSR</strong>适合需要复杂交互不关心 SEO 的应用如后台管理系统<br>