Files
my-page/src/pages/corp/TechChipPage.vue
2026-08-12 19:18:35 +08:00

684 lines
18 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.
<script setup>
import { corpProfiles } from '../../data/corpProfiles'
const c = corpProfiles.tech
const process1 = [
{ node: '28nm', year: '2018', use: '车规 MCU' },
{ node: '14nm', year: '2020', use: '边缘 NPU' },
{ node: '7nm', year: '2023', use: '旗舰 X1' },
{ node: '5nm', year: '2026', use: '下一代 · 流片中' },
]
</script>
<template>
<div class="tc">
<nav class="tc-nav">
<b class="tc-logo"> QLEAP FAB</b>
<div class="tc-menu">
<a href="#process">制程演进</a>
<a href="#wafer">晶圆良率</a>
</div>
<router-link to="/corp" class="tc-back">返回合集</router-link>
</nav>
<header class="tc-hero">
<h1>纳米之间<br /><span>皆是山海</span></h1>
<p class="tc-sub">{{ c.name }}半导体事业部 · 从架构设计到流片量产的全链路能力</p>
<svg class="tc-die" viewBox="0 0 440 300" aria-hidden="true">
<!-- 图签 -->
<g font-family="Consolas, monospace" font-size="8.5" fill="#3f6d8a" letter-spacing="1.5">
<text x="20" y="16">DWG NO. QL-X1-DS-2026 · REV C</text>
<text x="20" y="294">SCALE 400:1 · UNIT mm</text>
<text x="370" y="278" text-anchor="middle" letter-spacing="1">5 mm</text>
</g>
<g stroke="#3f6d8a" stroke-width="1">
<path d="M330 288 H 410 M330 283 V 293 M370 285 V 291 M410 283 V 293" />
</g>
<!-- 走线 -->
<g stroke="rgba(80, 220, 255, 0.4)" stroke-width="1.6" fill="none">
<path id="tc-t1" d="M145 118 H 80 V 48 H 20" />
<path id="tc-t2" d="M145 150 H 60 V 236 H 14" />
<path id="tc-t3" d="M295 118 H 356 V 40 H 424" />
<path id="tc-t4" d="M295 182 H 372 V 250 H 430" />
<path d="M145 182 H 96 V 268 H 30" />
<path d="M295 150 H 388 V 140" />
<path d="M178 98 V 54 H 120 M 220 98 V 30 M 262 98 V 54 H 330" />
<path d="M178 202 V 252 H 110 M 220 202 V 272 M 262 202 V 252 H 344" />
</g>
<!-- 过孔 -->
<g fill="#0a2438" stroke="rgba(80, 220, 255, 0.6)" stroke-width="1.4">
<circle cx="20" cy="48" r="4" /><circle cx="14" cy="236" r="4" /><circle cx="424" cy="40" r="4" />
<circle cx="430" cy="250" r="4" /><circle cx="30" cy="268" r="4" /><circle cx="388" cy="140" r="4" />
<circle cx="120" cy="54" r="4" /><circle cx="220" cy="30" r="4" /><circle cx="330" cy="54" r="4" />
<circle cx="110" cy="252" r="4" /><circle cx="220" cy="272" r="4" /><circle cx="344" cy="252" r="4" />
</g>
<!-- 封装 -->
<g>
<rect x="145" y="98" width="150" height="104" rx="6" fill="#0a2438" stroke="#50dcff" stroke-width="2" />
<g fill="#50dcff" opacity="0.55">
<rect x="152" y="92" width="8" height="6" /><rect x="176" y="92" width="8" height="6" /><rect x="200" y="92" width="8" height="6" /><rect x="224" y="92" width="8" height="6" /><rect x="248" y="92" width="8" height="6" /><rect x="272" y="92" width="8" height="6" />
<rect x="152" y="202" width="8" height="6" /><rect x="176" y="202" width="8" height="6" /><rect x="200" y="202" width="8" height="6" /><rect x="224" y="202" width="8" height="6" /><rect x="248" y="202" width="8" height="6" /><rect x="272" y="202" width="8" height="6" />
</g>
<rect x="172" y="120" width="96" height="60" fill="#062030" stroke="rgba(80,220,255,0.7)" stroke-width="1.4" />
<g stroke="rgba(80, 220, 255, 0.28)" stroke-width="1">
<path d="M184 120 V 180 M 196 120 V 180 M 208 120 V 180 M 232 120 V 180 M 244 120 V 180 M 256 120 V 180" />
<path d="M172 132 H 268 M172 144 H 268 M172 168 H 268" />
</g>
<rect x="216" y="146" width="14" height="10" fill="#50dcff" opacity="0.85">
<animate attributeName="opacity" values="0.85;0.3;0.85" dur="2.2s" repeatCount="indefinite" />
</rect>
<circle cx="156" cy="110" r="3" fill="#50dcff" />
<text x="220" y="228" text-anchor="middle" font-family="Consolas, monospace" font-size="11" letter-spacing="2" fill="#8fb8cc">QLEAP X1 · 7nm</text>
</g>
<!-- 信号脉冲 -->
<g fill="#7ff0ff">
<circle r="3"><animateMotion dur="3.2s" repeatCount="indefinite"><mpath href="#tc-t1" /></animateMotion></circle>
<circle r="3"><animateMotion dur="4s" begin="-1.2s" repeatCount="indefinite"><mpath href="#tc-t2" /></animateMotion></circle>
<circle r="3"><animateMotion dur="3.6s" begin="-0.6s" repeatCount="indefinite"><mpath href="#tc-t3" /></animateMotion></circle>
<circle r="3"><animateMotion dur="4.4s" begin="-2s" repeatCount="indefinite"><mpath href="#tc-t4" /></animateMotion></circle>
</g>
</svg>
</header>
<!-- 制程演进 -->
<section id="process" class="tc-sec">
<div class="tc-sechead"><span>SHEET 01 / PROCESS ROADMAP</span></div>
<h2 class="tc-h2">制程演进</h2>
<div class="tc-process">
<div v-for="(p, i) in process1" :key="p.node" class="tc-node" :class="{ now: i === process1.length - 1 }" :style="{ '--i': i }">
<i class="tc-node-via" aria-hidden="true"></i>
<span class="tc-node-year">{{ p.year }}</span>
<b>{{ p.node }}</b>
<p>{{ p.use }}</p>
</div>
</div>
</section>
<!-- 晶圆 -->
<section id="wafer" class="tc-sec tc-wafer-sec">
<div class="tc-wafer-wrap">
<div class="tc-wafer" aria-hidden="true">
<i v-for="n in 52" :key="n" :class="{ bad: [7, 19, 33, 46].includes(n) }"></i>
<em class="tc-wafer-scan" aria-hidden="true"></em>
</div>
<div class="tc-wafer-legend" aria-hidden="true">
<span><i class="ok"></i>良品 ×48</span>
<span><i class="ng"></i>瑕疵 ×4</span>
<span class="tc-wafer-id">300MM · LOT#A7</span>
</div>
</div>
<div class="tc-wafer-txt">
<div class="tc-sechead"><span>SHEET 02 / YIELD REPORT</span></div>
<h2 class="tc-h2">晶圆良率 92.3%</h2>
<p>每一片 12 英寸晶圆上有 52 颗跃迁 X1 die图中亮块为良品暗块为瑕疵四颗不合格我们全部激光打标销毁绝不流入市场</p>
<div class="tc-services">
<div v-for="(s, i) in c.services" :key="s.name" class="tc-service" :style="{ '--i': i }">
<b><i class="tc-svc-code">MOD-0{{ i + 1 }}</i>{{ s.name }}</b>
<p>{{ s.desc }}</p>
</div>
</div>
</div>
</section>
<!-- 产品 -->
<section class="tc-sec">
<div class="tc-sechead"><span>SHEET 03 / PRODUCT MATRIX</span></div>
<h2 class="tc-h2">产品矩阵</h2>
<div class="tc-products">
<article v-for="(p, i) in c.cases" :key="p.name" class="tc-product" :style="{ '--i': i }">
<img :src="p.image" :alt="p.name" loading="lazy" />
<div>
<div class="tc-prod-head">
<span>{{ p.tag }}</span>
<i>P/N QL-10{{ i + 1 }}</i>
</div>
<h3>{{ p.name }}</h3>
<p>{{ p.desc }}</p>
</div>
</article>
</div>
</section>
<div class="tc-stats">
<div v-for="s in c.stats" :key="s.label"><b>{{ s.value }}</b><span>{{ s.label }}</span></div>
</div>
<footer class="tc-footer">
<b>{{ c.name }} · 半导体事业部</b>
<p>{{ c.contacts.phone }} · {{ c.contacts.email }} · {{ c.contacts.addr }}</p>
<p class="tc-links">
<router-link to="/corp">返回企业官网合集</router-link> ·
<router-link to="/">个人页面合集</router-link>
</p>
<p class="tc-copy">© {{ c.founded }}2026 · 风格演示页制程与良率均为虚构</p>
</footer>
</div>
</template>
<style scoped>
.tc {
min-height: 100vh;
background:
repeating-linear-gradient(0deg, transparent 0 34px, rgba(80, 220, 255, 0.05) 34px 35px),
repeating-linear-gradient(90deg, transparent 0 34px, rgba(80, 220, 255, 0.05) 34px 35px),
#041220;
color: #d8f2ff;
font-family: 'PingFang SC', 'Microsoft YaHei', sans-serif;
overflow-x: clip;
}
@keyframes tc-rise {
from {
opacity: 0;
transform: translateY(14px);
}
to {
opacity: 1;
transform: none;
}
}
@keyframes tc-fade {
from { opacity: 0; }
to { opacity: 1; }
}
@keyframes tc-blink {
50% { opacity: 0; }
}
.tc-nav {
position: sticky;
top: 0;
z-index: 40;
display: flex;
align-items: center;
gap: 22px;
padding: 13px clamp(16px, 5vw, 48px);
background: rgba(4, 18, 32, 0.92);
backdrop-filter: blur(8px);
border-bottom: 1px solid rgba(80, 220, 255, 0.3);
}
.tc-logo {
font-family: Consolas, monospace;
font-size: 15px;
color: #50dcff;
letter-spacing: 0.1em;
}
.tc-menu {
display: flex;
gap: 20px;
}
.tc-menu a {
color: #8fb8cc;
text-decoration: none;
font-size: 13px;
}
.tc-menu a:hover {
color: #50dcff;
}
@media (max-width: 600px) {
.tc-menu {
display: none;
}
}
.tc-back {
margin-left: auto;
color: #041220;
background: #50dcff;
text-decoration: none;
font-size: 12.5px;
font-weight: 700;
padding: 6px 16px;
border-radius: 4px;
}
.tc-back:hover {
background: #a8ecff;
}
.tc-hero {
position: relative;
max-width: 1060px;
margin: 0 auto;
padding: clamp(60px, 10vw, 110px) clamp(16px, 4vw, 26px) 70px;
}
.tc-hero h1 {
margin: 0 0 16px;
font-size: clamp(36px, 7vw, 72px);
font-weight: 900;
line-height: 1.15;
animation: tc-rise 0.7s 0.05s both;
}
.tc-hero h1 span {
color: #50dcff;
}
@media (min-width: 761px) {
.tc-hero h1,
.tc-sub {
max-width: 52%;
}
}
.tc-sub {
margin: 0;
max-width: 480px;
font-size: 14px;
line-height: 2;
color: #8fb8cc;
animation: tc-rise 0.7s 0.18s both;
}
.tc-die {
position: absolute;
right: clamp(-20px, 3vw, 60px);
top: 50%;
transform: translateY(-50%);
width: clamp(300px, 36vw, 460px);
height: auto;
pointer-events: none;
animation: tc-fade 1.2s 0.3s both;
}
.tc-sec {
max-width: 1060px;
margin: 0 auto 56px;
padding: 0 clamp(16px, 4vw, 26px);
}
.tc-sechead {
display: flex;
align-items: center;
gap: 12px;
margin-bottom: 8px;
}
.tc-sechead span {
font-family: Consolas, monospace;
font-size: 10.5px;
letter-spacing: 0.22em;
color: #3f6d8a;
}
.tc-sechead::after {
content: '';
flex: 1;
height: 1px;
background: rgba(80, 220, 255, 0.2);
}
.tc-h2 {
font-size: 22px;
font-weight: 800;
margin: 0 0 20px;
}
/* 制程演进:路线轨道 */
.tc-process {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(170px, 1fr));
}
.tc-node {
position: relative;
border-top: 2px solid rgba(80, 220, 255, 0.28);
padding: 20px 22px 6px 0;
animation: tc-rise 0.6s calc(var(--i) * 0.09s) both;
}
.tc-node-via {
position: absolute;
left: 0;
top: -5px;
width: 8px;
height: 8px;
background: #041220;
border: 2px solid rgba(80, 220, 255, 0.7);
}
.tc-node-year {
display: block;
font-family: Consolas, monospace;
font-size: 11.5px;
color: #5d87a0;
margin-bottom: 2px;
}
.tc-node b {
display: block;
font-family: Consolas, monospace;
font-variant-numeric: tabular-nums;
font-size: 30px;
color: #50dcff;
}
.tc-node p {
margin: 8px 0 0;
font-size: 13px;
color: #b3d9e8;
}
.tc-node.now {
border-top-color: #50dcff;
}
.tc-node.now .tc-node-via {
background: #50dcff;
border-color: #50dcff;
}
.tc-node.now .tc-node-via::after {
content: '';
position: absolute;
inset: -7px;
border: 1px solid rgba(80, 220, 255, 0.7);
animation: tc-halo 2s ease-out infinite;
}
@keyframes tc-halo {
from {
transform: scale(0.5);
opacity: 1;
}
to {
transform: scale(1.6);
opacity: 0;
}
}
.tc-node.now b {
text-shadow: 0 0 18px rgba(80, 220, 255, 0.55);
}
.tc-node.now p::after {
content: '_';
color: #50dcff;
animation: tc-blink 1.1s steps(1) infinite;
}
/* 晶圆图 */
.tc-wafer-sec {
display: grid;
grid-template-columns: minmax(220px, 300px) 1fr;
gap: 34px;
align-items: start;
}
.tc-wafer {
position: relative;
aspect-ratio: 1;
border-radius: 50%;
background: radial-gradient(circle, #0a2438 30%, #06182a 70%);
border: 2px solid rgba(80, 220, 255, 0.5);
display: grid;
grid-template-columns: repeat(8, 1fr);
gap: 4px;
padding: 24px;
overflow: hidden;
box-shadow: 0 0 40px rgba(80, 220, 255, 0.2);
}
/* 光刻对位十字线 */
.tc-wafer::before {
content: '';
position: absolute;
inset: 0;
background:
linear-gradient(to bottom, transparent calc(50% - 0.5px), rgba(80, 220, 255, 0.2) calc(50% - 0.5px) calc(50% + 0.5px), transparent calc(50% + 0.5px)),
linear-gradient(to right, transparent calc(50% - 0.5px), rgba(80, 220, 255, 0.2) calc(50% - 0.5px) calc(50% + 0.5px), transparent calc(50% + 0.5px));
pointer-events: none;
}
/* 定位缺口 notch */
.tc-wafer::after {
content: '';
position: absolute;
bottom: -3px;
left: 50%;
transform: translateX(-50%);
width: 20px;
height: 10px;
background: #041220;
border-top: 2px solid rgba(80, 220, 255, 0.5);
border-radius: 6px 6px 0 0;
}
.tc-wafer i {
background: rgba(80, 220, 255, 0.5);
border-radius: 2px;
animation: tc-die-blink 2.6s ease-in-out infinite;
}
.tc-wafer i:nth-child(3n) {
animation-delay: 0.6s;
}
.tc-wafer i:nth-child(5n) {
animation-delay: 1.2s;
}
.tc-wafer i.bad {
background: rgba(255, 90, 90, 0.35);
animation: none;
}
@keyframes tc-die-blink {
50% { background: rgba(80, 220, 255, 0.85); }
}
.tc-wafer-scan {
position: absolute;
left: 0;
right: 0;
top: -24%;
height: 22%;
background: linear-gradient(180deg, transparent, rgba(80, 220, 255, 0.16), transparent);
animation: tc-scan 4.5s linear infinite;
pointer-events: none;
}
@keyframes tc-scan {
to { transform: translateY(560%); }
}
.tc-wafer-legend {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 8px 14px;
margin-top: 14px;
font-family: Consolas, monospace;
font-size: 11.5px;
color: #5d87a0;
}
.tc-wafer-legend span {
display: inline-flex;
align-items: center;
gap: 6px;
}
.tc-wafer-legend i {
width: 10px;
height: 10px;
border-radius: 2px;
}
.tc-wafer-legend i.ok {
background: rgba(80, 220, 255, 0.7);
}
.tc-wafer-legend i.ng {
background: rgba(255, 90, 90, 0.5);
}
.tc-wafer-id {
margin-left: auto;
letter-spacing: 0.08em;
}
.tc-wafer-txt p {
margin: 0 0 20px;
font-size: 13px;
line-height: 2;
color: #8fb8cc;
}
.tc-services {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 12px;
}
.tc-service {
background: rgba(80, 220, 255, 0.04);
border: 1px solid rgba(80, 220, 255, 0.22);
border-left: 2px solid #50dcff;
border-radius: 2px;
padding: 14px 16px;
transition: background 0.2s ease, border-color 0.2s ease;
animation: tc-rise 0.55s calc(var(--i) * 0.07s) both;
}
.tc-service:hover {
background: rgba(80, 220, 255, 0.09);
border-color: rgba(80, 220, 255, 0.5);
border-left-color: #50dcff;
}
.tc-svc-code {
font-style: normal;
font-family: Consolas, monospace;
font-size: 10px;
letter-spacing: 0.08em;
color: #50dcff;
border: 1px solid rgba(80, 220, 255, 0.35);
border-radius: 2px;
padding: 1.5px 6px;
margin-right: 8px;
vertical-align: 1px;
}
.tc-service b {
display: block;
font-size: 13.5px;
margin-bottom: 7px;
}
.tc-service p {
margin: 0;
font-size: 12px;
line-height: 1.7;
color: #8fb8cc;
}
/* 产品:工程图纸框 */
.tc-products {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
gap: 16px;
}
.tc-product {
position: relative;
background: rgba(255, 255, 255, 0.03);
border: 1px solid rgba(80, 220, 255, 0.25);
border-radius: 2px;
overflow: hidden;
transition: transform 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease;
animation: tc-rise 0.6s calc(var(--i) * 0.08s) both;
}
.tc-product::before,
.tc-product::after {
content: '';
position: absolute;
width: 11px;
height: 11px;
opacity: 0.6;
transition: opacity 0.2s ease;
pointer-events: none;
z-index: 1;
}
.tc-product::before {
left: -1px;
top: -1px;
border-top: 2px solid #50dcff;
border-left: 2px solid #50dcff;
}
.tc-product::after {
right: -1px;
bottom: -1px;
border-bottom: 2px solid #50dcff;
border-right: 2px solid #50dcff;
}
.tc-product:hover {
transform: translateY(-4px);
border-color: #50dcff;
box-shadow: 0 0 26px rgba(80, 220, 255, 0.14);
}
.tc-product:hover::before,
.tc-product:hover::after {
opacity: 1;
}
.tc-product img {
width: 100%;
aspect-ratio: 16 / 9;
object-fit: cover;
display: block;
filter: hue-rotate(160deg) saturate(0.7);
opacity: 0.88;
transition: filter 0.3s ease, opacity 0.3s ease;
}
.tc-product:hover img {
filter: none;
opacity: 1;
}
.tc-product > div {
padding: 12px 16px 16px;
}
.tc-prod-head {
display: flex;
justify-content: space-between;
align-items: center;
gap: 8px;
font-family: Consolas, monospace;
}
.tc-prod-head span {
font-size: 11px;
color: #50dcff;
}
.tc-prod-head i {
font-style: normal;
font-size: 10px;
letter-spacing: 0.06em;
color: #3f6d8a;
}
.tc-product h3 {
margin: 8px 0 6px;
font-size: 15.5px;
}
.tc-product p {
margin: 0;
font-size: 12.5px;
line-height: 1.8;
color: #8fb8cc;
}
.tc-stats {
max-width: 1060px;
margin: 0 auto 56px;
padding: 22px clamp(16px, 4vw, 26px);
border: 1px solid rgba(80, 220, 255, 0.3);
border-left: none;
border-right: none;
display: grid;
grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
gap: 14px;
text-align: center;
}
.tc-stats b {
display: block;
font-family: Consolas, monospace;
font-variant-numeric: tabular-nums;
font-size: clamp(24px, 4vw, 32px);
color: #50dcff;
}
.tc-stats span {
font-size: 12px;
color: #5d87a0;
}
.tc-footer {
text-align: center;
padding: 8px 20px 44px;
}
.tc-footer b {
font-size: 14.5px;
}
.tc-footer p {
margin: 8px 0 0;
font-size: 12.5px;
color: #8fb8cc;
}
.tc-links a {
color: #50dcff;
text-decoration: none;
}
.tc-links a:hover {
text-decoration: underline;
}
.tc-copy {
font-size: 11px !important;
color: #5d87a0 !important;
}
@media (max-width: 760px) {
.tc-die {
display: none;
}
.tc-wafer-sec {
grid-template-columns: 1fr;
}
.tc-wafer-wrap {
max-width: 280px;
margin: 0 auto;
}
}
</style>