Files
test-repo/docs/.vitepress/theme/components/appendix/computer-fundamentals/LanguageScenarioDemo.vue
T
sanbuphy 399913d3ff style: remove icon elements and related styles from demo components
Clean up visual presentation by removing decorative icons from demo headers and info boxes across all components. Also removes now-unused CSS rules for icon styling.
2026-02-20 23:00:28 +08:00

504 lines
12 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<div class="language-scenario-demo">
<div class="demo-header">
<span class="title">为什么需要编程语言</span>
<span class="subtitle">从场景看编程语言的价值</span>
</div>
<div class="scenario-intro">
编程语言是<strong>人类思维</strong><strong>计算机执行</strong>之间的桥梁
</div>
<div class="scenario-cards">
<div
v-for="scenario in scenarios"
:key="scenario.id"
:class="['scenario-card', { active: activeScenario === scenario.id }]"
@click="activeScenario = scenario.id"
>
<div class="card-icon">{{ scenario.icon }}</div>
<div class="card-title">{{ scenario.title }}</div>
<div class="card-desc">{{ scenario.desc }}</div>
</div>
</div>
<!-- 场景详解 -->
<div v-if="activeScenario" class="scenario-detail">
<div class="detail-header">
<span class="detail-icon">{{ currentScenario.icon }}</span>
<span class="detail-title">{{ currentScenario.title }}</span>
</div>
<div class="detail-content">
<div class="detail-section">
<div class="section-title">场景描述</div>
<div class="section-text">{{ currentScenario.fullDesc }}</div>
</div>
<div class="detail-section">
<div class="section-title">为什么需要编程语言</div>
<div class="reason-steps">
<div
v-for="(step, index) in currentScenario.reasons"
:key="index"
class="reason-step"
>
<div class="step-number">{{ index + 1 }}</div>
<div class="step-text">{{ step }}</div>
</div>
</div>
</div>
<div class="detail-section">
<div class="section-title">不用编程语言会怎样</div>
<div class="without-code">
<div class="without-box">
<div class="without-icon">😰</div>
<div class="without-text">{{ currentScenario.withoutLang }}</div>
</div>
</div>
</div>
<div class="detail-section">
<div class="section-title">适合的语言</div>
<div class="lang-tags">
<span
v-for="(lang, index) in currentScenario.languages"
:key="index"
class="lang-tag"
>
{{ lang }}
</span>
</div>
</div>
</div>
</div>
<!-- 编程语言的作用 -->
<div class="language-role">
<div class="role-title">编程语言的三大作用</div>
<div class="role-grid">
<div class="role-card">
<div class="role-icon">💬</div>
<div class="role-title">表达思想</div>
<div class="role-desc">将人类思维转化为计算机可理解的指令</div>
</div>
<div class="role-card">
<div class="role-icon">🔧</div>
<div class="role-title">控制硬件</div>
<div class="role-desc">精确控制计算机执行各种操作</div>
</div>
<div class="role-card">
<div class="role-icon">🤝</div>
<div class="role-title">团队协作</div>
<div class="role-desc">标准化的语法便于多人协作开发</div>
</div>
</div>
</div>
<!-- 演化历程 -->
<div class="evolution">
<div class="evolution-title">从机器码到高级语言</div>
<div class="evolution-steps">
<div class="evo-step">
<div class="evo-level">低级</div>
<div class="evo-name">机器语言</div>
<div class="evo-arrow"></div>
</div>
<div class="evo-step">
<div class="evo-level">低级</div>
<div class="evo-name">汇编语言</div>
<div class="evo-arrow"></div>
</div>
<div class="evo-step">
<div class="evo-level">中级</div>
<div class="evo-name">C 语言</div>
<div class="evo-arrow"></div>
</div>
<div class="evo-step">
<div class="evo-level">高级</div>
<div class="evo-name">现代语言</div>
<div class="evo-arrow"></div>
</div>
<div class="evo-result">
越来越接近<br>人类思维
</div>
</div>
</div>
</div>
</template>
<script setup>
import { ref, computed } from 'vue'
const activeScenario = ref('web')
const scenarios = [
{
id: 'web',
icon: '🌐',
title: '开发网站',
desc: '创建交互式网页',
fullDesc: '你需要创建一个在线购物网站,用户可以浏览商品、加入购物车、下单支付',
reasons: [
'HTML 定义网页结构',
'CSS 实现美观样式',
'JavaScript 实现交互功能',
'Python/Node.js 处理后端逻辑'
],
withoutLang: '只能手工编写网页,无法实现动态内容和用户交互',
languages: ['JavaScript', 'HTML', 'CSS', 'Python', 'TypeScript']
},
{
id: 'mobile',
icon: '📱',
title: '开发 App',
desc: '创建手机应用',
fullDesc: '开发一个功能丰富的手机应用,支持 iOS 和 Android 平台',
reasons: [
'Swift/Kotlin 提供原生体验',
'React Native 实现跨平台',
'编程语言调用设备功能',
'管理应用状态和数据'
],
withoutLang: '无法创建手机应用,只能使用系统自带的功能',
languages: ['Swift', 'Kotlin', 'React Native', 'Flutter']
},
{
id: 'data',
icon: '📊',
title: '数据分析',
desc: '处理和分析大量数据',
fullDesc: '分析百万级用户数据,找出行为模式和趋势',
reasons: [
'Python 提供丰富的数据科学库',
'简洁的语法便于快速迭代',
'强大的数据处理能力',
'可视化工具支持'
],
withoutLang: '手工计算几乎不可能,需要几天才能完成分析',
languages: ['Python', 'R', 'SQL', 'Julia']
},
{
id: 'system',
icon: '⚙️',
title: '系统编程',
desc: '编写操作系统和驱动',
fullDesc: '开发操作系统内核、设备驱动等底层软件',
reasons: [
'C/C++ 提供底层访问能力',
'精确控制内存管理',
'高效的执行性能',
'直接操作硬件'
],
withoutLang: '无法控制系统硬件,只能使用现有的操作系统功能',
languages: ['C', 'C++', 'Rust', 'Assembly']
},
{
id: 'ai',
icon: '🤖',
title: '人工智能',
desc: '训练机器学习模型',
fullDesc: '构建深度学习模型,识别图像、理解自然语言',
reasons: [
'Python 拥有丰富的 AI 框架',
'简洁的数学表达',
'GPU 加速支持',
'庞大的社区支持'
],
withoutLang: '无法实现复杂的 AI 算法,只能使用简单的规则',
languages: ['Python', 'R', 'Julia', 'C++']
}
]
const currentScenario = computed(() => scenarios.find(s => s.id === activeScenario.value))
</script>
<style scoped>
.language-scenario-demo {
border: 1px solid var(--vp-c-divider);
background: var(--vp-c-bg-soft);
border-radius: 12px;
padding: 1.5rem;
margin: 1.5rem 0;
}
.demo-header {
display: flex;
align-items: center;
gap: 0.5rem;
margin-bottom: 1.5rem;
}
.demo-header .title { font-weight: 700; font-size: 1.1rem; }
.demo-header .subtitle { color: var(--vp-c-text-2); font-size: 0.9rem; }
.scenario-intro {
padding: 1rem;
background: var(--vp-c-bg);
border-left: 4px solid var(--vp-c-brand);
border-radius: 6px;
margin-bottom: 2rem;
font-size: 0.95rem;
line-height: 1.6;
}
.scenario-cards {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
gap: 1rem;
margin-bottom: 2rem;
}
.scenario-card {
padding: 1.25rem;
background: var(--vp-c-bg);
border: 2px solid var(--vp-c-divider);
border-radius: 8px;
text-align: center;
cursor: pointer;
transition: all 0.3s;
}
.scenario-card:hover {
border-color: var(--vp-c-brand);
transform: translateY(-3px);
}
.scenario-card.active {
border-color: var(--vp-c-brand);
background: var(--vp-c-brand-soft);
}
.card-icon {
font-size: 2rem;
margin-bottom: 0.75rem;
}
.card-title {
font-weight: 600;
font-size: 0.95rem;
margin-bottom: 0.5rem;
}
.card-desc {
font-size: 0.8rem;
color: var(--vp-c-text-2);
}
.scenario-detail {
background: var(--vp-c-bg);
border: 1px solid var(--vp-c-divider);
border-radius: 8px;
padding: 1.5rem;
margin-bottom: 2rem;
}
.detail-header {
display: flex;
align-items: center;
gap: 0.75rem;
margin-bottom: 1.5rem;
padding-bottom: 1rem;
border-bottom: 1px solid var(--vp-c-divider);
}
.detail-icon {
font-size: 1.5rem;
}
.detail-title {
font-weight: 600;
font-size: 1.1rem;
color: var(--vp-c-brand);
}
.detail-content {
display: flex;
flex-direction: column;
gap: 1.5rem;
}
.detail-section {}
.section-title {
font-weight: 600;
font-size: 0.95rem;
margin-bottom: 0.75rem;
color: var(--vp-c-brand);
}
.section-text {
font-size: 0.9rem;
line-height: 1.6;
}
.reason-steps {
display: flex;
flex-direction: column;
gap: 0.75rem;
}
.reason-step {
display: flex;
gap: 0.75rem;
align-items: start;
}
.step-number {
display: flex;
align-items: center;
justify-content: center;
width: 24px;
height: 24px;
background: var(--vp-c-brand);
color: white;
border-radius: 50%;
font-size: 0.75rem;
font-weight: 600;
flex-shrink: 0;
}
.step-text {
font-size: 0.85rem;
line-height: 1.5;
padding-top: 0.15rem;
}
.without-code {
text-align: center;
}
.without-box {
display: inline-flex;
gap: 0.75rem;
align-items: center;
padding: 0.75rem 1rem;
background: rgba(239, 68, 68, 0.1);
border: 1px solid #ef4444;
border-radius: 6px;
}
.without-icon {
font-size: 1.5rem;
}
.without-text {
font-size: 0.85rem;
color: #ef4444;
}
.lang-tags {
display: flex;
flex-wrap: wrap;
gap: 0.75rem;
}
.lang-tag {
padding: 0.5rem 0.75rem;
background: var(--vp-c-bg-soft);
border: 1px solid var(--vp-c-divider);
border-radius: 6px;
font-size: 0.85rem;
}
.language-role {
margin-bottom: 2rem;
}
.role-title {
font-weight: 600;
font-size: 1rem;
margin-bottom: 1rem;
color: var(--vp-c-brand);
}
.role-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 1rem;
}
.role-card {
padding: 1rem;
background: var(--vp-c-bg);
border: 1px solid var(--vp-c-divider);
border-radius: 6px;
text-align: center;
}
.role-icon {
font-size: 1.8rem;
margin-bottom: 0.5rem;
}
.role-title {
font-weight: 600;
font-size: 0.9rem;
margin-bottom: 0.35rem;
}
.role-desc {
font-size: 0.8rem;
color: var(--vp-c-text-2);
line-height: 1.4;
}
.evolution {
background: var(--vp-c-bg);
border: 1px solid var(--vp-c-divider);
border-radius: 8px;
padding: 1.5rem;
}
.evolution-title {
font-weight: 600;
font-size: 1rem;
margin-bottom: 1rem;
color: var(--vp-c-brand);
}
.evolution-steps {
display: flex;
align-items: center;
justify-content: center;
gap: 1.5rem;
flex-wrap: wrap;
}
.evo-step {
text-align: center;
}
.evo-level {
font-size: 0.75rem;
color: var(--vp-c-text-2);
margin-bottom: 0.35rem;
}
.evo-name {
padding: 0.5rem 1rem;
background: var(--vp-c-brand-soft);
border: 1px solid var(--vp-c-brand);
border-radius: 6px;
font-size: 0.85rem;
font-weight: 600;
margin-bottom: 0.5rem;
}
.evo-arrow {
font-size: 1.2rem;
color: var(--vp-c-brand);
}
.evo-result {
padding: 0.75rem 1rem;
background: #10b981;
color: white;
border-radius: 6px;
font-size: 0.85rem;
font-weight: 600;
text-align: center;
}
</style>