App.vue 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. <script setup>
  2. const featureCards = [
  3. {
  4. title: 'Interactive Circuit\nDesign Experience',
  5. body:
  6. 'Drag and drop components to build complex circuits with an intuitive, user-friendly canvas.',
  7. reverse: false,
  8. tone: 'mint',
  9. type: 'workspace',
  10. },
  11. {
  12. title: 'Real-Time\nSimulation',
  13. body:
  14. 'Launch accurate circuit simulations in an instant, inspect signal flow, and debug safely.',
  15. reverse: true,
  16. tone: 'warm',
  17. type: 'signal',
  18. },
  19. ]
  20. const componentCards = [
  21. { name: '连接线', kind: 'cable' },
  22. { name: '控制模块', kind: 'plc' },
  23. { name: '传感器', kind: 'sensor' },
  24. { name: '继电器', kind: 'relay' },
  25. { name: '控制面板', kind: 'panel' },
  26. { name: '驱动器', kind: 'drive' },
  27. ]
  28. const advantages = [
  29. {
  30. title: '安全可靠',
  31. body: '在虚拟环境中完成实验与调试,避免真实接线的风险和损耗。',
  32. icon: 'lock',
  33. },
  34. {
  35. title: '高度还原',
  36. body: '还原典型工业电气元件与布线流程,贴近教学和实训场景。',
  37. icon: 'shield',
  38. },
  39. {
  40. title: '降本增效',
  41. body: '减少硬件采购和重复搭建时间,让课程与演示更高效。',
  42. icon: 'cash',
  43. },
  44. {
  45. title: '教学友好',
  46. body: '适合课堂展示、学生练习和培训考核,易于上手与管理。',
  47. icon: 'cloud',
  48. },
  49. ]
  50. const footerColumns = [
  51. {
  52. title: 'Company',
  53. links: ['About Us', 'Product Story', 'Careers'],
  54. },
  55. {
  56. title: 'Resources',
  57. links: ['Simulator Guide', 'Teaching Kits', 'Release Notes'],
  58. },
  59. {
  60. title: 'Contact',
  61. links: ['support@simubus.com', 'www.simubus.com', '+86 400-800-1234'],
  62. },
  63. ]
  64. </script>
  65. <template>
  66. <div class="page-shell">
  67. <section class="hero-section">
  68. <header class="topbar">
  69. <a class="brand" href="/">
  70. <span class="brand-mark">S</span>
  71. <span class="brand-name">Simubus</span>
  72. </a>
  73. <nav class="nav-pills" aria-label="Primary navigation">
  74. <a href="#features">Features</a>
  75. <a href="#components">Components</a>
  76. <a href="#benefits">Benefits</a>
  77. <a class="nav-cta" href="#footer">Get Started</a>
  78. </nav>
  79. </header>
  80. <div class="hero-copy">
  81. <p class="eyebrow">Virtual Electrical Lab</p>
  82. <h1>Simubus - Electrical Wiring Simulator</h1>
  83. <p class="subcopy">Your Virtual Electric Lab.</p>
  84. <div class="hero-actions">
  85. <a class="button primary" href="#features">iOS Download</a>
  86. <a class="button secondary" href="#features">Android Download</a>
  87. </div>
  88. </div>
  89. <div class="hero-stage" aria-hidden="true">
  90. <div class="qr-panel">
  91. <div class="qr-grid">
  92. <span v-for="n in 25" :key="n" :class="`cell c-${n}`"></span>
  93. </div>
  94. </div>
  95. <div class="device device-main">
  96. <span class="device-screen"></span>
  97. </div>
  98. <div class="device device-right-top">
  99. <span class="device-screen"></span>
  100. </div>
  101. <div class="device device-right-bottom">
  102. <span class="device-screen"></span>
  103. </div>
  104. <div class="device device-bottom-left">
  105. <span class="device-screen"></span>
  106. </div>
  107. <div class="device device-bottom-center">
  108. <span class="device-screen"></span>
  109. </div>
  110. <div class="wire wire-a"></div>
  111. <div class="wire wire-b"></div>
  112. <div class="wire wire-c"></div>
  113. <div class="wire wire-d"></div>
  114. <div class="wire wire-e"></div>
  115. </div>
  116. </section>
  117. <main>
  118. <section id="features" class="feature-stack">
  119. <article
  120. v-for="card in featureCards"
  121. :key="card.title"
  122. class="feature-row"
  123. :class="{ reverse: card.reverse }"
  124. >
  125. <div class="feature-copy">
  126. <h2>{{ card.title }}</h2>
  127. <p>{{ card.body }}</p>
  128. </div>
  129. <div class="feature-visual" :class="[card.tone, card.type]">
  130. <div class="visual-frame">
  131. <template v-if="card.type === 'workspace'">
  132. <span class="grid-line horizontal top"></span>
  133. <span class="grid-line horizontal bottom"></span>
  134. <span class="grid-line vertical left"></span>
  135. <span class="grid-line vertical right"></span>
  136. <span class="module module-a"></span>
  137. <span class="module module-b"></span>
  138. <span class="module module-c"></span>
  139. <span class="module module-d"></span>
  140. </template>
  141. <template v-else>
  142. <span class="pulse pulse-a"></span>
  143. <span class="pulse pulse-b"></span>
  144. <span class="pulse pulse-c"></span>
  145. <span class="spark spark-a"></span>
  146. <span class="spark spark-b"></span>
  147. <span class="spark spark-c"></span>
  148. </template>
  149. </div>
  150. </div>
  151. </article>
  152. </section>
  153. <section id="components" class="components-section">
  154. <div class="section-heading">
  155. <p class="section-tag">元器件</p>
  156. <h2>上百个元器件 随心体验</h2>
  157. </div>
  158. <div class="component-grid">
  159. <article
  160. v-for="component in componentCards"
  161. :key="component.name"
  162. class="component-card"
  163. >
  164. <div class="component-visual" :class="component.kind">
  165. <span class="comp-body"></span>
  166. <span class="comp-accent"></span>
  167. <span class="comp-wire left"></span>
  168. <span class="comp-wire right"></span>
  169. </div>
  170. <p>{{ component.name }}</p>
  171. </article>
  172. </div>
  173. </section>
  174. <section id="benefits" class="advantages-section">
  175. <div class="ink-blot ink-left"></div>
  176. <div class="ink-blot ink-right"></div>
  177. <div class="section-heading">
  178. <h2>为什么选择Simubus</h2>
  179. </div>
  180. <div class="advantage-grid">
  181. <article
  182. v-for="item in advantages"
  183. :key="item.title"
  184. class="advantage-card"
  185. >
  186. <div class="adv-icon" :class="item.icon">
  187. <span></span>
  188. </div>
  189. <h3>{{ item.title }}</h3>
  190. <p>{{ item.body }}</p>
  191. </article>
  192. </div>
  193. </section>
  194. </main>
  195. <footer id="footer" class="site-footer">
  196. <div class="footer-brand">
  197. <a class="brand inverse" href="/">
  198. <span class="brand-mark">S</span>
  199. <span class="brand-name">Simubus</span>
  200. </a>
  201. <p>Electrical simulation software for hands-on teaching and rapid prototyping.</p>
  202. </div>
  203. <div class="footer-links">
  204. <section v-for="column in footerColumns" :key="column.title">
  205. <h4>{{ column.title }}</h4>
  206. <a v-for="link in column.links" :key="link" href="/">{{ link }}</a>
  207. </section>
  208. </div>
  209. </footer>
  210. </div>
  211. </template>