Browse Source

提交 neo 项目基于 vue3+TS

Ryuiso 3 weeks ago
parent
commit
447855d02e
100 changed files with 8907 additions and 0 deletions
  1. 24 0
      zyuas-neo/.gitignore
  2. 3 0
      zyuas-neo/.vscode/extensions.json
  3. 670 0
      zyuas-neo/README.md
  4. 15 0
      zyuas-neo/index.html
  5. 2286 0
      zyuas-neo/package-lock.json
  6. 29 0
      zyuas-neo/package.json
  7. 1 0
      zyuas-neo/public/vite.svg
  8. 53 0
      zyuas-neo/src/App.vue
  9. BIN
      zyuas-neo/src/assets/images/about_img.png
  10. BIN
      zyuas-neo/src/assets/images/acci1.png
  11. BIN
      zyuas-neo/src/assets/images/acci2.png
  12. 4 0
      zyuas-neo/src/assets/images/ai-dev.jpg
  13. BIN
      zyuas-neo/src/assets/images/ai-dev1.png
  14. BIN
      zyuas-neo/src/assets/images/api-dev.jpg
  15. BIN
      zyuas-neo/src/assets/images/api.png
  16. BIN
      zyuas-neo/src/assets/images/banner-ai.jpg
  17. BIN
      zyuas-neo/src/assets/images/banner-dock-black.jpg
  18. BIN
      zyuas-neo/src/assets/images/banner-dock-black_2.jpg
  19. BIN
      zyuas-neo/src/assets/images/banner-home.jpg
  20. BIN
      zyuas-neo/src/assets/images/banner-m350rtk.jpg
  21. BIN
      zyuas-neo/src/assets/images/banner-m350rtk_2.jpg
  22. BIN
      zyuas-neo/src/assets/images/banner1.jpg
  23. BIN
      zyuas-neo/src/assets/images/banner1_2.jpg
  24. BIN
      zyuas-neo/src/assets/images/banner_4.jpg
  25. BIN
      zyuas-neo/src/assets/images/banner_5.jpg
  26. BIN
      zyuas-neo/src/assets/images/buil1.png
  27. BIN
      zyuas-neo/src/assets/images/buil2.png
  28. BIN
      zyuas-neo/src/assets/images/buil3.png
  29. BIN
      zyuas-neo/src/assets/images/buil4.png
  30. BIN
      zyuas-neo/src/assets/images/buil5.png
  31. BIN
      zyuas-neo/src/assets/images/buil6.png
  32. BIN
      zyuas-neo/src/assets/images/circle.png
  33. BIN
      zyuas-neo/src/assets/images/computer.png
  34. BIN
      zyuas-neo/src/assets/images/contact_us_bg.jpg
  35. BIN
      zyuas-neo/src/assets/images/dji-card.png
  36. BIN
      zyuas-neo/src/assets/images/dji-dock.jpg
  37. BIN
      zyuas-neo/src/assets/images/dji-dock2.png
  38. BIN
      zyuas-neo/src/assets/images/dji.jpg
  39. 36 0
      zyuas-neo/src/assets/images/logo_black.svg
  40. 36 0
      zyuas-neo/src/assets/images/logo_black_bk.svg
  41. 36 0
      zyuas-neo/src/assets/images/logo_white.svg
  42. 27 0
      zyuas-neo/src/assets/images/partners/README.md
  43. BIN
      zyuas-neo/src/assets/images/payload1_l2.png
  44. BIN
      zyuas-neo/src/assets/images/payload2_p1.png
  45. BIN
      zyuas-neo/src/assets/images/payload3_h20n.png
  46. BIN
      zyuas-neo/src/assets/images/payload4_h20.png
  47. BIN
      zyuas-neo/src/assets/images/products1.png
  48. BIN
      zyuas-neo/src/assets/images/products2.png
  49. BIN
      zyuas-neo/src/assets/images/products3.png
  50. BIN
      zyuas-neo/src/assets/images/products4.png
  51. BIN
      zyuas-neo/src/assets/images/qq.png
  52. BIN
      zyuas-neo/src/assets/images/rag1.png
  53. BIN
      zyuas-neo/src/assets/images/safe1.png
  54. BIN
      zyuas-neo/src/assets/images/safe2.png
  55. BIN
      zyuas-neo/src/assets/images/service1.jpg
  56. BIN
      zyuas-neo/src/assets/images/service2.jpg
  57. BIN
      zyuas-neo/src/assets/images/service3.jpg
  58. BIN
      zyuas-neo/src/assets/images/service4.jpg
  59. BIN
      zyuas-neo/src/assets/images/skill.png
  60. BIN
      zyuas-neo/src/assets/images/software1.png
  61. BIN
      zyuas-neo/src/assets/images/software2.png
  62. BIN
      zyuas-neo/src/assets/images/software3.png
  63. BIN
      zyuas-neo/src/assets/images/software_icon1.png
  64. BIN
      zyuas-neo/src/assets/images/software_icon2.png
  65. BIN
      zyuas-neo/src/assets/images/sur1.png
  66. BIN
      zyuas-neo/src/assets/images/sur2.png
  67. BIN
      zyuas-neo/src/assets/images/sur3.png
  68. BIN
      zyuas-neo/src/assets/images/sur4.png
  69. BIN
      zyuas-neo/src/assets/images/tel.png
  70. BIN
      zyuas-neo/src/assets/images/twitter.png
  71. BIN
      zyuas-neo/src/assets/images/w1.png
  72. BIN
      zyuas-neo/src/assets/images/w2.jpg
  73. BIN
      zyuas-neo/src/assets/images/weibo.png
  74. BIN
      zyuas-neo/src/assets/images/weixin.png
  75. BIN
      zyuas-neo/src/assets/images/yinhao.png
  76. 702 0
      zyuas-neo/src/assets/styles/components.scss
  77. 349 0
      zyuas-neo/src/assets/styles/global.scss
  78. 386 0
      zyuas-neo/src/assets/styles/mixins.scss
  79. 122 0
      zyuas-neo/src/assets/styles/variables.scss
  80. 1 0
      zyuas-neo/src/assets/vue.svg
  81. 77 0
      zyuas-neo/src/components/Footer.vue
  82. 89 0
      zyuas-neo/src/components/GoTop.vue
  83. 532 0
      zyuas-neo/src/components/Header.vue
  84. 43 0
      zyuas-neo/src/components/HelloWorld.vue
  85. 39 0
      zyuas-neo/src/config/nav-config.ts
  86. 33 0
      zyuas-neo/src/main.ts
  87. 134 0
      zyuas-neo/src/router/index.ts
  88. 79 0
      zyuas-neo/src/style.css
  89. 26 0
      zyuas-neo/src/types/home.ts
  90. 18 0
      zyuas-neo/src/types/nav.ts
  91. 63 0
      zyuas-neo/src/types/vite-env.d.ts
  92. 292 0
      zyuas-neo/src/views/AIDevelopment/AIApp.vue
  93. 142 0
      zyuas-neo/src/views/AIDevelopment/Index.vue
  94. 285 0
      zyuas-neo/src/views/AIDevelopment/RAG.vue
  95. 315 0
      zyuas-neo/src/views/ContactUs/Index.vue
  96. 921 0
      zyuas-neo/src/views/HomePage.vue
  97. 340 0
      zyuas-neo/src/views/Info/Index.vue
  98. 217 0
      zyuas-neo/src/views/News/Index.vue
  99. 274 0
      zyuas-neo/src/views/Products/Develop.vue
  100. 208 0
      zyuas-neo/src/views/Products/DjiAircraft.vue

+ 24 - 0
zyuas-neo/.gitignore

@@ -0,0 +1,24 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?

+ 3 - 0
zyuas-neo/.vscode/extensions.json

@@ -0,0 +1,3 @@
+{
+  "recommendations": ["Vue.volar"]
+}

+ 670 - 0
zyuas-neo/README.md

@@ -0,0 +1,670 @@
+# ZYUAS Neo - 企业官网重构项目
+
+> 使用 Vue 3 + TypeScript + Element Plus + Vite + SCSS 构建的企业官方网站
+
+**版本:** v1.1.0  
+**构建状态:** ✅ 成功  
+**类型检查:** ✅ 通过  
+**最后更新:** 2026-02-26
+
+---
+
+## 📋 目录
+
+1. [项目简介](#-项目简介)
+2. [技术栈](#-技术栈)
+3. [快速开始](#-快速开始)
+4. [项目结构](#-项目结构)
+5. [已完成功能](#-已完成功能)
+6. [TypeScript 类型系统](#-typescript-类型系统)
+7. [设计系统](#-设计系统)
+8. [SCSS 样式系统](#-scss-样式系统)
+9. [响应式布局](#-响应式布局)
+10. [图标使用指南](#-图标使用指南)
+11. [开发规范](#-开发规范)
+12. [构建与部署](#-构建与部署)
+13. [常见问题](#-常见问题)
+
+---
+
+## 📦 项目简介
+
+使用 **Vue 3 + TypeScript + Element Plus + Vite + SCSS** 构建的企业官方网站,替代原有的 Vue 2 + Bootstrap 版本。
+
+### 技术升级对比
+
+| 组件 | 原版本 | 新版本 | 改进 |
+|------|--------|--------|------|
+| 框架 | Vue 2.7.16 | Vue 3.5.25 | Composition API + TypeScript |
+| 构建工具 | Webpack 4 | Vite 7 | 10x 更快构建 |
+| UI 框架 | Bootstrap 3 | Element Plus 2.13 | 现代化组件库 |
+| 路由 | Vue Router 3 | Vue Router 4 | 完整 TS 支持 |
+| 状态管理 | Vuex 3 | Pinia 3 | 更简洁的 API |
+| 轮播 | Swiper 4 | Swiper 12 | 最新特性 |
+| 样式 | CSS | SCSS | 变量 + 混入系统 |
+| 类型系统 | - | TypeScript 5.9 | 编译时类型检查 |
+
+---
+
+## 🛠️ 技术栈
+
+| 技术 | 版本 | 说明 |
+|------|------|------|
+| Vue | 3.5.25 | Composition API + `<script setup lang="ts">` |
+| TypeScript | 5.9.3 | 完整类型系统支持 |
+| Element Plus | 2.13.2 | UI 组件库 |
+| Vite | 7.3.1 | 下一代构建工具 |
+| Vue Router | 4.6.4 | 路由管理 |
+| Pinia | 3.0.4 | 状态管理 |
+| Swiper | 12.1.2 | 轮播组件 |
+| SCSS | latest | CSS 预处理器 |
+| Animate.css | latest | 动画库 |
+
+---
+
+## 🚀 快速开始
+
+```bash
+# 进入项目目录
+cd zyuas-neo
+
+# 安装依赖
+npm install
+
+# 开发模式
+npm run dev
+# 访问 http://localhost:5173
+
+# 类型检查
+npm run type-check
+
+# 生产构建(含类型检查)
+npm run build
+
+# 跳过类型检查构建
+npm run build:skip-typecheck
+
+# 预览构建结果
+npm run preview
+```
+
+### 构建状态
+
+✅ **构建成功** - 生产构建已通过 (`npm run build`)  
+✅ **类型检查通过** - TypeScript 编译无错误 (`npm run type-check`)
+
+```bash
+✓ 1563 modules transformed.
+✓ built in 4.12s
+
+dist/
+├── index.html
+└── static/
+    ├── *.css
+    ├── *.js
+    └── assets/
+```
+
+---
+
+## 📁 项目结构
+
+```
+zyuas-neo/
+├── src/
+│   ├── assets/
+│   │   ├── styles/
+│   │   │   ├── variables.scss    # SCSS 变量
+│   │   │   ├── mixins.scss       # SCSS 混入
+│   │   │   ├── components.scss   # 可复用组件
+│   │   │   └── global.scss       # 全局样式
+│   │   └── images/               # 图片资源 (65+ 文件)
+│   ├── types/
+│   │   ├── vite-env.d.ts         # Vite 环境类型
+│   │   ├── nav.ts                # 导航类型定义
+│   │   └── home.ts               # 首页类型定义
+│   ├── components/
+│   │   ├── Header.vue.ts         # 头部导航 (TypeScript)
+│   │   ├── Footer.vue.ts         # 页脚 (TypeScript)
+│   │   └── GoTop.vue.ts          # 回到顶部 (TypeScript)
+│   ├── config/
+│   │   └── nav-config.ts         # 导航配置 (TypeScript)
+│   ├── router/
+│   │   └── index.ts              # 路由配置 (TypeScript)
+│   ├── views/
+│   │   ├── HomePage.vue.ts       # 首页 (TypeScript)
+│   │   ├── Products/             # 产品页面 (5 个,TypeScript)
+│   │   ├── Solutions/            # 解决方案页面 (5 个,TypeScript)
+│   │   ├── AIDevelopment/        # AI 开发页面 (3 个,TypeScript)
+│   │   ├── News/                 # 新闻页面 (TypeScript)
+│   │   ├── Info/                 # 公司信息 (TypeScript)
+│   │   └── ContactUs/            # 联系我们 (TypeScript)
+│   ├── App.vue.ts                # 根组件 (TypeScript)
+│   └── main.ts                   # 入口文件 (TypeScript)
+├── index.html
+├── package.json
+├── tsconfig.json                 # TypeScript 配置
+├── tsconfig.node.json            # Node 环境配置
+├── vite.config.ts                # Vite 配置
+└── README.md
+```
+
+---
+
+## ✅ 已完成功能
+
+### 核心页面 (22 个)
+
+| 类别 | 页面 | 文件数 | 状态 |
+|------|------|--------|------|
+| 首页 | HomePage | 1 | ✅ |
+| 产品与服务 | Products | 5 | ✅ |
+| 解决方案 | Solutions | 5 | ✅ |
+| AI 开发 | AIDevelopment | 3 | ✅ |
+| 其他 | News/Info/ContactUs | 3 | ✅ |
+| 公共组件 | Header/Footer/GoTop | 3 | ✅ |
+
+### 技术特性
+
+- [x] TypeScript 完整类型支持
+- [x] SCSS 样式系统(变量 + 混入 + 可复用组件)
+- [x] 响应式布局(移动端/平板/桌面)
+- [x] Element Plus 组件集成
+- [x] Swiper 12 轮播
+- [x] 路由懒加载
+- [x] 页面过渡动画
+- [x] 全局图标注册
+- [x] 编译时类型检查
+
+---
+
+## 🔷 TypeScript 类型系统
+
+### 类型配置文件
+
+```json
+// tsconfig.json
+{
+  "compilerOptions": {
+    "target": "ES2020",
+    "module": "ESNext",
+    "strict": true,
+    "jsx": "preserve",
+    "moduleResolution": "bundler",
+    "paths": {
+      "@/*": ["src/*"]
+    }
+  }
+}
+```
+
+### 类型定义文件
+
+#### `src/types/nav.ts` - 导航类型
+
+```typescript
+export interface NavItem {
+  name: string
+  path: string
+  children: NavChildItem[]
+}
+
+export interface NavChildItem {
+  name: string
+  path: string
+}
+
+export interface NavAction {
+  name: string
+  path: string
+  type: 'primary' | 'secondary'
+}
+```
+
+#### `src/types/home.ts` - 首页类型
+
+```typescript
+export interface SwiperSlide {
+  img: string
+  title: string
+  content: string
+}
+
+export interface SolutionItem {
+  path: string
+  title: string
+  description: string
+  image: string
+}
+```
+
+### 在组件中使用类型
+
+```vue
+<script setup lang="ts">
+import { ref } from 'vue'
+import type { SolutionItem } from '@/types/home'
+
+const solutionsList = ref<SolutionItem[]>([
+  {
+    path: '/solutions/surveying',
+    title: '基础测绘',
+    description: '快速进行大范围二维、三维建模',
+    image: '...'
+  }
+])
+</script>
+```
+
+### 可用命令
+
+| 命令 | 说明 |
+|------|------|
+| `npm run type-check` | 仅类型检查 |
+| `npm run build` | 生产构建(含类型检查) |
+| `npm run build:skip-typecheck` | 跳过类型检查构建 |
+
+---
+
+## 🎨 设计系统
+
+### 主题色
+
+```scss
+$primary-color: #1e73be;      // 主色(蓝色)
+$primary-light: #3b82f6;      // 亮蓝
+$primary-dark: #185a9d;       // 深蓝
+$primary-gradient: linear-gradient(135deg, #1e73be, #3b82f6);
+```
+
+### 中性色
+
+```scss
+$text-primary: #1a1a1a;       // 主文本
+$text-regular: #555555;       // 常规文本
+$text-tertiary: #666666;      // 次要文本
+$text-muted: #999999;         // 弱化文本
+```
+
+### 间距系统
+
+```scss
+$spacer-1: 10px;
+$spacer-2: 20px;
+$spacer-3: 30px;
+$spacer-4: 40px;
+$spacer-5: 50px;
+$spacer-6: 60px;
+```
+
+### 圆角与阴影
+
+```scss
+// 圆角
+$radius-sm: 8px;
+$radius-md: 12px;
+$radius-lg: 16px;
+$radius-xl: 20px;
+
+// 阴影
+$shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.08);
+$shadow-md: 0 8px 32px rgba(0, 0, 0, 0.12);
+$shadow-lg: 0 20px 60px rgba(0, 0, 0, 0.15);
+```
+
+---
+
+## 📐 SCSS 样式系统
+
+### 变量文件 (`variables.scss`)
+
+```scss
+// 主题色
+$primary-color: #1e73be;
+$primary-light: #3b82f6;
+
+// 中性色
+$text-primary: #1a1a1a;
+$text-regular: #555555;
+
+// 间距
+$spacer-1: 10px;
+$spacer-2: 20px;
+
+// 断点
+$breakpoint-sm: 576px;
+$breakpoint-md: 768px;
+$breakpoint-lg: 992px;
+$breakpoint-xl: 1200px;
+```
+
+### 混入文件 (`mixins.scss`)
+
+```scss
+// 响应式
+@mixin mobile { @media (max-width: 767px) { @content; } }
+@mixin tablet { @media (min-width: 768px) and (max-width: 991px) { @content; } }
+@mixin desktop { @media (min-width: 992px) { @content; } }
+
+// Flexbox
+@mixin flex-center { display: flex; align-items: center; justify-content: center; }
+@mixin flex-between { display: flex; align-items: center; justify-content: space-between; }
+
+// 玻璃拟态
+@mixin glass-morphism {
+  background: rgba(255, 255, 255, 0.8);
+  border: 1px solid rgba(255, 255, 255, 0.5);
+  backdrop-filter: blur(10px);
+}
+```
+
+### 在 Vue 文件中使用
+
+```vue
+<template>
+  <div class="page">
+    <div class="page-banner">
+      <h1>标题</h1>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+// TypeScript 代码
+</script>
+
+<style lang="scss">
+@import '@/assets/styles/variables';
+@import '@/assets/styles/mixins';
+
+.page {
+  padding: $spacer-3;
+
+  @include mobile {
+    padding: $spacer-2;
+  }
+}
+</style>
+```
+
+---
+
+## 📱 响应式布局
+
+### 容器边距系统
+
+| 断点 | 屏幕宽度 | 容器边距 | 说明 |
+|------|----------|----------|------|
+| 桌面端 | > 1200px | 20px | 标准边距 |
+| 平板端 | 768px - 1200px | 30px | 增加边距 |
+| 移动端 | < 768px | 20px | 标准边距 |
+
+### 响应式字体
+
+| 元素 | 桌面端 | 平板端 | 移动端 |
+|------|--------|--------|--------|
+| 根字体 | 16px | 16px | 14px |
+| 章节标题 | 36px | 28px | 24px |
+| 大标题 | 42px | 32px | 28px |
+
+### 断点混入
+
+```scss
+// 移动端 (< 768px)
+@include mobile {
+  .element {
+    // 移动端样式
+  }
+}
+
+// 平板端 (768px - 991px)
+@include tablet {
+  .element {
+    // 平板端样式
+  }
+}
+
+// 桌面端 (>= 992px)
+@include desktop {
+  .element {
+    // 桌面端样式
+  }
+}
+```
+
+---
+
+## 🔣 图标使用指南
+
+### 已用图标清单
+
+#### 导航组件
+| 图标 | 用途 |
+|------|------|
+| `ArrowDown`, `ArrowRight` | 下拉菜单、按钮 |
+| `Menu`, `Close` | 移动端导航 |
+| `ArrowUp` | 回到顶部 |
+
+#### 首页
+| 图标 | 用途 |
+|------|------|
+| `ArrowLeft`, `ArrowRight` | 轮播图导航 |
+| `Connection` | 解决方案链接 |
+| `Star`, `Monitor`, `Picture`, `DataAnalysis` | 技术优势 |
+| `Service`, `Timer`, `Medal` | 服务优势 |
+
+### 图标使用方式
+
+```vue
+<script setup lang="ts">
+import { ArrowRight, Star } from '@element-plus/icons-vue'
+</script>
+
+<template>
+  <el-icon><ArrowRight /></el-icon>
+</template>
+```
+
+### 类型声明
+
+所有 Element Plus 图标已在 `src/types/vite-env.d.ts` 中声明:
+
+```typescript
+declare module '@element-plus/icons-vue' {
+  export const ArrowDown: any
+  export const ArrowRight: any
+  export const CircleCheckFilled: any
+  // ... 更多图标
+}
+```
+
+---
+
+## 📝 开发规范
+
+### 组件命名
+
+- 使用 PascalCase(大驼峰)
+- 页面组件首字母大写
+- 公共组件首字母大写
+
+### TypeScript 代码风格
+
+- 使用 `<script setup lang="ts">` 语法
+- 为所有 `ref`/`reactive` 添加类型注解
+- 为函数参数和返回值添加类型注解
+- 使用 `interface` 定义对象类型
+
+```typescript
+// ✅ 推荐
+interface User {
+  name: string
+  age: number
+}
+
+const user = ref<User>({
+  name: 'John',
+  age: 30
+})
+
+const greet = (name: string): string => {
+  return `Hello, ${name}`
+}
+```
+
+### 样式规范
+
+```vue
+<style lang="scss">
+// 1. 先导入变量和混入
+@import '@/assets/styles/variables';
+@import '@/assets/styles/mixins';
+
+// 2. 使用 SCSS 变量
+.my-component {
+  color: $text-primary;
+  padding: $spacer-3;
+
+  // 3. 使用混入
+  @include mobile {
+    padding: $spacer-2;
+  }
+}
+</style>
+```
+
+### 文件组织
+
+```
+src/
+├── types/              # TypeScript 类型定义
+├── assets/
+│   ├── styles/         # 全局样式
+│   └── images/         # 图片资源
+├── components/         # 公共组件
+├── views/             # 页面组件
+├── router/            # 路由配置
+└── config/            # 配置文件
+```
+
+---
+
+## 🏗️ 构建与部署
+
+### 开发环境
+
+```bash
+npm run dev
+# 访问 http://localhost:5173
+```
+
+### 生产构建
+
+```bash
+# 含类型检查(推荐)
+npm run build
+
+# 跳过类型检查
+npm run build:skip-typecheck
+```
+
+### 构建输出
+
+```bash
+✓ 1563 modules transformed.
+✓ built in 4.12s
+
+dist/
+├── index.html              0.96 kB
+└── static/
+    ├── element-plus-*.js   # Element Plus (1MB+)
+    ├── vue-vendor-*.js     # Vue 相关 (100KB+)
+    ├── swiper-*.js         # Swiper (69KB)
+    └── *.css, *.js         # 其他资源
+```
+
+### 推荐部署平台
+
+- Vercel
+- Netlify
+- GitHub Pages
+- 阿里云 OSS
+- 腾讯云 COS
+- Nginx 服务器
+
+---
+
+## ❓ 常见问题
+
+### TypeScript 类型错误
+
+**问题:** 编译时报 `Property 'xxx' does not exist on type` 错误
+
+**解决:** 为对象添加正确的类型注解或使用 `interface` 定义
+
+```typescript
+// ❌ 错误
+const data = ref({})
+data.value.name = 'test'
+
+// ✅ 正确
+interface Data {
+  name: string
+}
+const data = ref<Data>({ name: '' })
+```
+
+### 图标类型未找到
+
+**问题:** `Module has no exported member 'Xxx'`
+
+**解决:** 在 `src/types/vite-env.d.ts` 中添加图标声明
+
+```typescript
+declare module '@element-plus/icons-vue' {
+  export const Xxx: any
+}
+```
+
+### 构建产物过大
+
+**问题:** 构建后文件过大
+
+**解决:**
+1. 使用路由懒加载(已实现)
+2. 压缩图片资源
+3. 使用 CDN 加载 Element Plus
+
+---
+
+## 📊 项目统计
+
+| 类型 | 数量 |
+|------|------|
+| Vue 组件 (TypeScript) | 22 |
+| TypeScript 配置文件 | 3 |
+| 类型定义文件 | 4 |
+| SCSS 文件 | 4 |
+| 图片资源 | 65+ |
+| 路由 | 17 |
+| 总代码行数 | ~5500+ |
+| 构建时间 | ~4.1s |
+
+---
+
+## 🌐 浏览器支持
+
+- Chrome >= 90
+- Firefox >= 88
+- Safari >= 14
+- Edge >= 90
+
+---
+
+## 📄 许可证
+
+MIT
+
+---
+
+**上海展域航空技术有限公司** © 2025

+ 15 - 0
zyuas-neo/index.html

@@ -0,0 +1,15 @@
+<!doctype html>
+<html lang="zh-CN">
+  <head>
+    <meta charset="UTF-8" />
+    <link rel="icon" type="image/svg+xml" href="/vite.svg" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>上海展域航空技术有限公司 - 无人机与 AI 解决方案专家</title>
+    <meta name="description" content="上海展域航空技术有限公司,专业提供大疆行业应用无人机、无人机解决方案、AI 定制开发服务" />
+    <meta name="keywords" content="无人机,大疆,DJI,AI,解决方案,测绘,应急救援" />
+  </head>
+  <body>
+    <div id="app"></div>
+    <script type="module" src="/src/main.ts"></script>
+  </body>
+</html>

+ 2286 - 0
zyuas-neo/package-lock.json

@@ -0,0 +1,2286 @@
+{
+  "name": "zyuas-neo",
+  "version": "1.0.0",
+  "lockfileVersion": 3,
+  "requires": true,
+  "packages": {
+    "": {
+      "name": "zyuas-neo",
+      "version": "1.0.0",
+      "dependencies": {
+        "@element-plus/icons-vue": "^2.3.2",
+        "element-plus": "^2.13.2",
+        "pinia": "^3.0.4",
+        "swiper": "^12.1.2",
+        "vue": "^3.5.25",
+        "vue-router": "^4.6.4"
+      },
+      "devDependencies": {
+        "@types/node": "^25.3.1",
+        "@vitejs/plugin-vue": "^6.0.2",
+        "sass": "^1.97.3",
+        "typescript": "^5.9.3",
+        "vite": "^7.3.1",
+        "vue-tsc": "^3.2.5"
+      }
+    },
+    "node_modules/@babel/helper-string-parser": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
+      "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-validator-identifier": {
+      "version": "7.28.5",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
+      "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/parser": {
+      "version": "7.29.0",
+      "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.29.0.tgz",
+      "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.29.0"
+      },
+      "bin": {
+        "parser": "bin/babel-parser.js"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@babel/types": {
+      "version": "7.29.0",
+      "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.29.0.tgz",
+      "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-string-parser": "^7.27.1",
+        "@babel/helper-validator-identifier": "^7.28.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@ctrl/tinycolor": {
+      "version": "3.6.1",
+      "resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz",
+      "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@element-plus/icons-vue": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.2.tgz",
+      "integrity": "sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A==",
+      "license": "MIT",
+      "peerDependencies": {
+        "vue": "^3.2.0"
+      }
+    },
+    "node_modules/@esbuild/aix-ppc64": {
+      "version": "0.27.3",
+      "resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz",
+      "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==",
+      "cpu": [
+        "ppc64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "aix"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/android-arm": {
+      "version": "0.27.3",
+      "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.27.3.tgz",
+      "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/android-arm64": {
+      "version": "0.27.3",
+      "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz",
+      "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/android-x64": {
+      "version": "0.27.3",
+      "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.27.3.tgz",
+      "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/darwin-arm64": {
+      "version": "0.27.3",
+      "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz",
+      "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/darwin-x64": {
+      "version": "0.27.3",
+      "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz",
+      "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/freebsd-arm64": {
+      "version": "0.27.3",
+      "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz",
+      "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/freebsd-x64": {
+      "version": "0.27.3",
+      "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz",
+      "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-arm": {
+      "version": "0.27.3",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz",
+      "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-arm64": {
+      "version": "0.27.3",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz",
+      "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-ia32": {
+      "version": "0.27.3",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz",
+      "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==",
+      "cpu": [
+        "ia32"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-loong64": {
+      "version": "0.27.3",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz",
+      "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==",
+      "cpu": [
+        "loong64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-mips64el": {
+      "version": "0.27.3",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz",
+      "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==",
+      "cpu": [
+        "mips64el"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-ppc64": {
+      "version": "0.27.3",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz",
+      "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==",
+      "cpu": [
+        "ppc64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-riscv64": {
+      "version": "0.27.3",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz",
+      "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==",
+      "cpu": [
+        "riscv64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-s390x": {
+      "version": "0.27.3",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz",
+      "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==",
+      "cpu": [
+        "s390x"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-x64": {
+      "version": "0.27.3",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz",
+      "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/netbsd-arm64": {
+      "version": "0.27.3",
+      "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz",
+      "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "netbsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/netbsd-x64": {
+      "version": "0.27.3",
+      "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz",
+      "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "netbsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/openbsd-arm64": {
+      "version": "0.27.3",
+      "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz",
+      "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "openbsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/openbsd-x64": {
+      "version": "0.27.3",
+      "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz",
+      "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "openbsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/openharmony-arm64": {
+      "version": "0.27.3",
+      "resolved": "https://registry.npmmirror.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz",
+      "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "openharmony"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/sunos-x64": {
+      "version": "0.27.3",
+      "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz",
+      "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "sunos"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/win32-arm64": {
+      "version": "0.27.3",
+      "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz",
+      "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/win32-ia32": {
+      "version": "0.27.3",
+      "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz",
+      "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==",
+      "cpu": [
+        "ia32"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/win32-x64": {
+      "version": "0.27.3",
+      "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz",
+      "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@floating-ui/core": {
+      "version": "1.7.4",
+      "resolved": "https://registry.npmmirror.com/@floating-ui/core/-/core-1.7.4.tgz",
+      "integrity": "sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg==",
+      "license": "MIT",
+      "dependencies": {
+        "@floating-ui/utils": "^0.2.10"
+      }
+    },
+    "node_modules/@floating-ui/dom": {
+      "version": "1.7.5",
+      "resolved": "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.7.5.tgz",
+      "integrity": "sha512-N0bD2kIPInNHUHehXhMke1rBGs1dwqvC9O9KYMyyjK7iXt7GAhnro7UlcuYcGdS/yYOlq0MAVgrow8IbWJwyqg==",
+      "license": "MIT",
+      "dependencies": {
+        "@floating-ui/core": "^1.7.4",
+        "@floating-ui/utils": "^0.2.10"
+      }
+    },
+    "node_modules/@floating-ui/utils": {
+      "version": "0.2.10",
+      "resolved": "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.10.tgz",
+      "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==",
+      "license": "MIT"
+    },
+    "node_modules/@jridgewell/sourcemap-codec": {
+      "version": "1.5.5",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+      "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
+      "license": "MIT"
+    },
+    "node_modules/@parcel/watcher": {
+      "version": "2.5.6",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher/-/watcher-2.5.6.tgz",
+      "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==",
+      "dev": true,
+      "hasInstallScript": true,
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "detect-libc": "^2.0.3",
+        "is-glob": "^4.0.3",
+        "node-addon-api": "^7.0.0",
+        "picomatch": "^4.0.3"
+      },
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      },
+      "optionalDependencies": {
+        "@parcel/watcher-android-arm64": "2.5.6",
+        "@parcel/watcher-darwin-arm64": "2.5.6",
+        "@parcel/watcher-darwin-x64": "2.5.6",
+        "@parcel/watcher-freebsd-x64": "2.5.6",
+        "@parcel/watcher-linux-arm-glibc": "2.5.6",
+        "@parcel/watcher-linux-arm-musl": "2.5.6",
+        "@parcel/watcher-linux-arm64-glibc": "2.5.6",
+        "@parcel/watcher-linux-arm64-musl": "2.5.6",
+        "@parcel/watcher-linux-x64-glibc": "2.5.6",
+        "@parcel/watcher-linux-x64-musl": "2.5.6",
+        "@parcel/watcher-win32-arm64": "2.5.6",
+        "@parcel/watcher-win32-ia32": "2.5.6",
+        "@parcel/watcher-win32-x64": "2.5.6"
+      }
+    },
+    "node_modules/@parcel/watcher-android-arm64": {
+      "version": "2.5.6",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz",
+      "integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-darwin-arm64": {
+      "version": "2.5.6",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz",
+      "integrity": "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-darwin-x64": {
+      "version": "2.5.6",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz",
+      "integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-freebsd-x64": {
+      "version": "2.5.6",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz",
+      "integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-linux-arm-glibc": {
+      "version": "2.5.6",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz",
+      "integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-linux-arm-musl": {
+      "version": "2.5.6",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz",
+      "integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-linux-arm64-glibc": {
+      "version": "2.5.6",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz",
+      "integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-linux-arm64-musl": {
+      "version": "2.5.6",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz",
+      "integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-linux-x64-glibc": {
+      "version": "2.5.6",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz",
+      "integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-linux-x64-musl": {
+      "version": "2.5.6",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz",
+      "integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-win32-arm64": {
+      "version": "2.5.6",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz",
+      "integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-win32-ia32": {
+      "version": "2.5.6",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz",
+      "integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==",
+      "cpu": [
+        "ia32"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-win32-x64": {
+      "version": "2.5.6",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz",
+      "integrity": "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@popperjs/core": {
+      "name": "@sxzz/popperjs-es",
+      "version": "2.11.8",
+      "resolved": "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.8.tgz",
+      "integrity": "sha512-wOwESXvvED3S8xBmcPWHs2dUuzrE4XiZeFu7e1hROIJkm02a49N120pmOXxY33sBb6hArItm5W5tcg1cBtV+HQ==",
+      "license": "MIT",
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/popperjs"
+      }
+    },
+    "node_modules/@rolldown/pluginutils": {
+      "version": "1.0.0-rc.2",
+      "resolved": "https://registry.npmmirror.com/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.2.tgz",
+      "integrity": "sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@rollup/rollup-android-arm-eabi": {
+      "version": "4.59.0",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz",
+      "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ]
+    },
+    "node_modules/@rollup/rollup-android-arm64": {
+      "version": "4.59.0",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz",
+      "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ]
+    },
+    "node_modules/@rollup/rollup-darwin-arm64": {
+      "version": "4.59.0",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz",
+      "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ]
+    },
+    "node_modules/@rollup/rollup-darwin-x64": {
+      "version": "4.59.0",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz",
+      "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ]
+    },
+    "node_modules/@rollup/rollup-freebsd-arm64": {
+      "version": "4.59.0",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz",
+      "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ]
+    },
+    "node_modules/@rollup/rollup-freebsd-x64": {
+      "version": "4.59.0",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz",
+      "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+      "version": "4.59.0",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz",
+      "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+      "version": "4.59.0",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz",
+      "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-arm64-gnu": {
+      "version": "4.59.0",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz",
+      "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-arm64-musl": {
+      "version": "4.59.0",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz",
+      "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-loong64-gnu": {
+      "version": "4.59.0",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz",
+      "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==",
+      "cpu": [
+        "loong64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-loong64-musl": {
+      "version": "4.59.0",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz",
+      "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==",
+      "cpu": [
+        "loong64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-ppc64-gnu": {
+      "version": "4.59.0",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz",
+      "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==",
+      "cpu": [
+        "ppc64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-ppc64-musl": {
+      "version": "4.59.0",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz",
+      "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==",
+      "cpu": [
+        "ppc64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+      "version": "4.59.0",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz",
+      "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==",
+      "cpu": [
+        "riscv64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-riscv64-musl": {
+      "version": "4.59.0",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz",
+      "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==",
+      "cpu": [
+        "riscv64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-s390x-gnu": {
+      "version": "4.59.0",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz",
+      "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==",
+      "cpu": [
+        "s390x"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-x64-gnu": {
+      "version": "4.59.0",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz",
+      "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-x64-musl": {
+      "version": "4.59.0",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz",
+      "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-openbsd-x64": {
+      "version": "4.59.0",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz",
+      "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "openbsd"
+      ]
+    },
+    "node_modules/@rollup/rollup-openharmony-arm64": {
+      "version": "4.59.0",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz",
+      "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "openharmony"
+      ]
+    },
+    "node_modules/@rollup/rollup-win32-arm64-msvc": {
+      "version": "4.59.0",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz",
+      "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ]
+    },
+    "node_modules/@rollup/rollup-win32-ia32-msvc": {
+      "version": "4.59.0",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz",
+      "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==",
+      "cpu": [
+        "ia32"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ]
+    },
+    "node_modules/@rollup/rollup-win32-x64-gnu": {
+      "version": "4.59.0",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz",
+      "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ]
+    },
+    "node_modules/@rollup/rollup-win32-x64-msvc": {
+      "version": "4.59.0",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz",
+      "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ]
+    },
+    "node_modules/@types/estree": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.8.tgz",
+      "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@types/lodash": {
+      "version": "4.17.24",
+      "resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.24.tgz",
+      "integrity": "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==",
+      "license": "MIT"
+    },
+    "node_modules/@types/lodash-es": {
+      "version": "4.17.12",
+      "resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz",
+      "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/lodash": "*"
+      }
+    },
+    "node_modules/@types/node": {
+      "version": "25.3.1",
+      "resolved": "https://registry.npmmirror.com/@types/node/-/node-25.3.1.tgz",
+      "integrity": "sha512-hj9YIJimBCipHVfHKRMnvmHg+wfhKc0o4mTtXh9pKBjC8TLJzz0nzGmLi5UJsYAUgSvXFHgb0V2oY10DUFtImw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "undici-types": "~7.18.0"
+      }
+    },
+    "node_modules/@types/web-bluetooth": {
+      "version": "0.0.20",
+      "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz",
+      "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==",
+      "license": "MIT"
+    },
+    "node_modules/@vitejs/plugin-vue": {
+      "version": "6.0.4",
+      "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-6.0.4.tgz",
+      "integrity": "sha512-uM5iXipgYIn13UUQCZNdWkYk+sysBeA97d5mHsAoAt1u/wpN3+zxOmsVJWosuzX+IMGRzeYUNytztrYznboIkQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@rolldown/pluginutils": "1.0.0-rc.2"
+      },
+      "engines": {
+        "node": "^20.19.0 || >=22.12.0"
+      },
+      "peerDependencies": {
+        "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0",
+        "vue": "^3.2.25"
+      }
+    },
+    "node_modules/@volar/language-core": {
+      "version": "2.4.28",
+      "resolved": "https://registry.npmmirror.com/@volar/language-core/-/language-core-2.4.28.tgz",
+      "integrity": "sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@volar/source-map": "2.4.28"
+      }
+    },
+    "node_modules/@volar/source-map": {
+      "version": "2.4.28",
+      "resolved": "https://registry.npmmirror.com/@volar/source-map/-/source-map-2.4.28.tgz",
+      "integrity": "sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@volar/typescript": {
+      "version": "2.4.28",
+      "resolved": "https://registry.npmmirror.com/@volar/typescript/-/typescript-2.4.28.tgz",
+      "integrity": "sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@volar/language-core": "2.4.28",
+        "path-browserify": "^1.0.1",
+        "vscode-uri": "^3.0.8"
+      }
+    },
+    "node_modules/@vue/compiler-core": {
+      "version": "3.5.29",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.29.tgz",
+      "integrity": "sha512-cuzPhD8fwRHk8IGfmYaR4eEe4cAyJEL66Ove/WZL7yWNL134nqLddSLwNRIsFlnnW1kK+p8Ck3viFnC0chXCXw==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/parser": "^7.29.0",
+        "@vue/shared": "3.5.29",
+        "entities": "^7.0.1",
+        "estree-walker": "^2.0.2",
+        "source-map-js": "^1.2.1"
+      }
+    },
+    "node_modules/@vue/compiler-dom": {
+      "version": "3.5.29",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.29.tgz",
+      "integrity": "sha512-n0G5o7R3uBVmVxjTIYcz7ovr8sy7QObFG8OQJ3xGCDNhbG60biP/P5KnyY8NLd81OuT1WJflG7N4KWYHaeeaIg==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/compiler-core": "3.5.29",
+        "@vue/shared": "3.5.29"
+      }
+    },
+    "node_modules/@vue/compiler-sfc": {
+      "version": "3.5.29",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.29.tgz",
+      "integrity": "sha512-oJZhN5XJs35Gzr50E82jg2cYdZQ78wEwvRO6Y63TvLVTc+6xICzJHP1UIecdSPPYIbkautNBanDiWYa64QSFIA==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/parser": "^7.29.0",
+        "@vue/compiler-core": "3.5.29",
+        "@vue/compiler-dom": "3.5.29",
+        "@vue/compiler-ssr": "3.5.29",
+        "@vue/shared": "3.5.29",
+        "estree-walker": "^2.0.2",
+        "magic-string": "^0.30.21",
+        "postcss": "^8.5.6",
+        "source-map-js": "^1.2.1"
+      }
+    },
+    "node_modules/@vue/compiler-ssr": {
+      "version": "3.5.29",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.29.tgz",
+      "integrity": "sha512-Y/ARJZE6fpjzL5GH/phJmsFwx3g6t2KmHKHx5q+MLl2kencADKIrhH5MLF6HHpRMmlRAYBRSvv347Mepf1zVNw==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/compiler-dom": "3.5.29",
+        "@vue/shared": "3.5.29"
+      }
+    },
+    "node_modules/@vue/devtools-api": {
+      "version": "7.7.9",
+      "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-7.7.9.tgz",
+      "integrity": "sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/devtools-kit": "^7.7.9"
+      }
+    },
+    "node_modules/@vue/devtools-kit": {
+      "version": "7.7.9",
+      "resolved": "https://registry.npmmirror.com/@vue/devtools-kit/-/devtools-kit-7.7.9.tgz",
+      "integrity": "sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/devtools-shared": "^7.7.9",
+        "birpc": "^2.3.0",
+        "hookable": "^5.5.3",
+        "mitt": "^3.0.1",
+        "perfect-debounce": "^1.0.0",
+        "speakingurl": "^14.0.1",
+        "superjson": "^2.2.2"
+      }
+    },
+    "node_modules/@vue/devtools-shared": {
+      "version": "7.7.9",
+      "resolved": "https://registry.npmmirror.com/@vue/devtools-shared/-/devtools-shared-7.7.9.tgz",
+      "integrity": "sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==",
+      "license": "MIT",
+      "dependencies": {
+        "rfdc": "^1.4.1"
+      }
+    },
+    "node_modules/@vue/language-core": {
+      "version": "3.2.5",
+      "resolved": "https://registry.npmmirror.com/@vue/language-core/-/language-core-3.2.5.tgz",
+      "integrity": "sha512-d3OIxN/+KRedeM5wQ6H6NIpwS3P5gC9nmyaHgBk+rO6dIsjY+tOh4UlPpiZbAh3YtLdCGEX4M16RmsBqPmJV+g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@volar/language-core": "2.4.28",
+        "@vue/compiler-dom": "^3.5.0",
+        "@vue/shared": "^3.5.0",
+        "alien-signals": "^3.0.0",
+        "muggle-string": "^0.4.1",
+        "path-browserify": "^1.0.1",
+        "picomatch": "^4.0.2"
+      }
+    },
+    "node_modules/@vue/reactivity": {
+      "version": "3.5.29",
+      "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.29.tgz",
+      "integrity": "sha512-zcrANcrRdcLtmGZETBxWqIkoQei8HaFpZWx/GHKxx79JZsiZ8j1du0VUJtu4eJjgFvU/iKL5lRXFXksVmI+5DA==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/shared": "3.5.29"
+      }
+    },
+    "node_modules/@vue/runtime-core": {
+      "version": "3.5.29",
+      "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.29.tgz",
+      "integrity": "sha512-8DpW2QfdwIWOLqtsNcds4s+QgwSaHSJY/SUe04LptianUQ/0xi6KVsu/pYVh+HO3NTVvVJjIPL2t6GdeKbS4Lg==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/reactivity": "3.5.29",
+        "@vue/shared": "3.5.29"
+      }
+    },
+    "node_modules/@vue/runtime-dom": {
+      "version": "3.5.29",
+      "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.29.tgz",
+      "integrity": "sha512-AHvvJEtcY9tw/uk+s/YRLSlxxQnqnAkjqvK25ZiM4CllCZWzElRAoQnCM42m9AHRLNJ6oe2kC5DCgD4AUdlvXg==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/reactivity": "3.5.29",
+        "@vue/runtime-core": "3.5.29",
+        "@vue/shared": "3.5.29",
+        "csstype": "^3.2.3"
+      }
+    },
+    "node_modules/@vue/server-renderer": {
+      "version": "3.5.29",
+      "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.29.tgz",
+      "integrity": "sha512-G/1k6WK5MusLlbxSE2YTcqAAezS+VuwHhOvLx2KnQU7G2zCH6KIb+5Wyt6UjMq7a3qPzNEjJXs1hvAxDclQH+g==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/compiler-ssr": "3.5.29",
+        "@vue/shared": "3.5.29"
+      },
+      "peerDependencies": {
+        "vue": "3.5.29"
+      }
+    },
+    "node_modules/@vue/shared": {
+      "version": "3.5.29",
+      "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.29.tgz",
+      "integrity": "sha512-w7SR0A5zyRByL9XUkCfdLs7t9XOHUyJ67qPGQjOou3p6GvBeBW+AVjUUmlxtZ4PIYaRvE+1LmK44O4uajlZwcg==",
+      "license": "MIT"
+    },
+    "node_modules/@vueuse/core": {
+      "version": "10.11.1",
+      "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-10.11.1.tgz",
+      "integrity": "sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/web-bluetooth": "^0.0.20",
+        "@vueuse/metadata": "10.11.1",
+        "@vueuse/shared": "10.11.1",
+        "vue-demi": ">=0.14.8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      }
+    },
+    "node_modules/@vueuse/core/node_modules/vue-demi": {
+      "version": "0.14.10",
+      "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz",
+      "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
+      "hasInstallScript": true,
+      "license": "MIT",
+      "bin": {
+        "vue-demi-fix": "bin/vue-demi-fix.js",
+        "vue-demi-switch": "bin/vue-demi-switch.js"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      },
+      "peerDependencies": {
+        "@vue/composition-api": "^1.0.0-rc.1",
+        "vue": "^3.0.0-0 || ^2.6.0"
+      },
+      "peerDependenciesMeta": {
+        "@vue/composition-api": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@vueuse/metadata": {
+      "version": "10.11.1",
+      "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-10.11.1.tgz",
+      "integrity": "sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==",
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      }
+    },
+    "node_modules/@vueuse/shared": {
+      "version": "10.11.1",
+      "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-10.11.1.tgz",
+      "integrity": "sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==",
+      "license": "MIT",
+      "dependencies": {
+        "vue-demi": ">=0.14.8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      }
+    },
+    "node_modules/@vueuse/shared/node_modules/vue-demi": {
+      "version": "0.14.10",
+      "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz",
+      "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
+      "hasInstallScript": true,
+      "license": "MIT",
+      "bin": {
+        "vue-demi-fix": "bin/vue-demi-fix.js",
+        "vue-demi-switch": "bin/vue-demi-switch.js"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      },
+      "peerDependencies": {
+        "@vue/composition-api": "^1.0.0-rc.1",
+        "vue": "^3.0.0-0 || ^2.6.0"
+      },
+      "peerDependenciesMeta": {
+        "@vue/composition-api": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/alien-signals": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmmirror.com/alien-signals/-/alien-signals-3.1.2.tgz",
+      "integrity": "sha512-d9dYqZTS90WLiU0I5c6DHj/HcKkF8ZyGN3G5x8wSbslulz70KOxaqCT0hQCo9KOyhVqzqGojvNdJXoTumZOtcw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/async-validator": {
+      "version": "4.2.5",
+      "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz",
+      "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==",
+      "license": "MIT"
+    },
+    "node_modules/birpc": {
+      "version": "2.9.0",
+      "resolved": "https://registry.npmmirror.com/birpc/-/birpc-2.9.0.tgz",
+      "integrity": "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==",
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      }
+    },
+    "node_modules/chokidar": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-4.0.3.tgz",
+      "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "readdirp": "^4.0.1"
+      },
+      "engines": {
+        "node": ">= 14.16.0"
+      },
+      "funding": {
+        "url": "https://paulmillr.com/funding/"
+      }
+    },
+    "node_modules/copy-anything": {
+      "version": "4.0.5",
+      "resolved": "https://registry.npmmirror.com/copy-anything/-/copy-anything-4.0.5.tgz",
+      "integrity": "sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==",
+      "license": "MIT",
+      "dependencies": {
+        "is-what": "^5.2.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/mesqueeb"
+      }
+    },
+    "node_modules/csstype": {
+      "version": "3.2.3",
+      "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.2.3.tgz",
+      "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
+      "license": "MIT"
+    },
+    "node_modules/dayjs": {
+      "version": "1.11.19",
+      "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.19.tgz",
+      "integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==",
+      "license": "MIT"
+    },
+    "node_modules/detect-libc": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmmirror.com/detect-libc/-/detect-libc-2.1.2.tgz",
+      "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "optional": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/element-plus": {
+      "version": "2.13.2",
+      "resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.13.2.tgz",
+      "integrity": "sha512-Zjzm1NnFXGhV4LYZ6Ze9skPlYi2B4KAmN18FL63A3PZcjhDfroHwhtM6RE8BonlOPHXUnPQynH0BgaoEfvhrGw==",
+      "license": "MIT",
+      "dependencies": {
+        "@ctrl/tinycolor": "^3.4.1",
+        "@element-plus/icons-vue": "^2.3.2",
+        "@floating-ui/dom": "^1.0.1",
+        "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7",
+        "@types/lodash": "^4.17.20",
+        "@types/lodash-es": "^4.17.12",
+        "@vueuse/core": "^10.11.0",
+        "async-validator": "^4.2.5",
+        "dayjs": "^1.11.19",
+        "lodash": "^4.17.23",
+        "lodash-es": "^4.17.23",
+        "lodash-unified": "^1.0.3",
+        "memoize-one": "^6.0.0",
+        "normalize-wheel-es": "^1.2.0"
+      },
+      "peerDependencies": {
+        "vue": "^3.3.0"
+      }
+    },
+    "node_modules/entities": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmmirror.com/entities/-/entities-7.0.1.tgz",
+      "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==",
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=0.12"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/entities?sponsor=1"
+      }
+    },
+    "node_modules/esbuild": {
+      "version": "0.27.3",
+      "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.27.3.tgz",
+      "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==",
+      "dev": true,
+      "hasInstallScript": true,
+      "license": "MIT",
+      "bin": {
+        "esbuild": "bin/esbuild"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "optionalDependencies": {
+        "@esbuild/aix-ppc64": "0.27.3",
+        "@esbuild/android-arm": "0.27.3",
+        "@esbuild/android-arm64": "0.27.3",
+        "@esbuild/android-x64": "0.27.3",
+        "@esbuild/darwin-arm64": "0.27.3",
+        "@esbuild/darwin-x64": "0.27.3",
+        "@esbuild/freebsd-arm64": "0.27.3",
+        "@esbuild/freebsd-x64": "0.27.3",
+        "@esbuild/linux-arm": "0.27.3",
+        "@esbuild/linux-arm64": "0.27.3",
+        "@esbuild/linux-ia32": "0.27.3",
+        "@esbuild/linux-loong64": "0.27.3",
+        "@esbuild/linux-mips64el": "0.27.3",
+        "@esbuild/linux-ppc64": "0.27.3",
+        "@esbuild/linux-riscv64": "0.27.3",
+        "@esbuild/linux-s390x": "0.27.3",
+        "@esbuild/linux-x64": "0.27.3",
+        "@esbuild/netbsd-arm64": "0.27.3",
+        "@esbuild/netbsd-x64": "0.27.3",
+        "@esbuild/openbsd-arm64": "0.27.3",
+        "@esbuild/openbsd-x64": "0.27.3",
+        "@esbuild/openharmony-arm64": "0.27.3",
+        "@esbuild/sunos-x64": "0.27.3",
+        "@esbuild/win32-arm64": "0.27.3",
+        "@esbuild/win32-ia32": "0.27.3",
+        "@esbuild/win32-x64": "0.27.3"
+      }
+    },
+    "node_modules/estree-walker": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz",
+      "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+      "license": "MIT"
+    },
+    "node_modules/fdir": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/fdir/-/fdir-6.5.0.tgz",
+      "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12.0.0"
+      },
+      "peerDependencies": {
+        "picomatch": "^3 || ^4"
+      },
+      "peerDependenciesMeta": {
+        "picomatch": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/fsevents": {
+      "version": "2.3.3",
+      "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz",
+      "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+      "dev": true,
+      "hasInstallScript": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+      }
+    },
+    "node_modules/hookable": {
+      "version": "5.5.3",
+      "resolved": "https://registry.npmmirror.com/hookable/-/hookable-5.5.3.tgz",
+      "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==",
+      "license": "MIT"
+    },
+    "node_modules/immutable": {
+      "version": "5.1.4",
+      "resolved": "https://registry.npmmirror.com/immutable/-/immutable-5.1.4.tgz",
+      "integrity": "sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/is-extglob": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz",
+      "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-glob": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz",
+      "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "is-extglob": "^2.1.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-what": {
+      "version": "5.5.0",
+      "resolved": "https://registry.npmmirror.com/is-what/-/is-what-5.5.0.tgz",
+      "integrity": "sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/mesqueeb"
+      }
+    },
+    "node_modules/lodash": {
+      "version": "4.17.23",
+      "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.23.tgz",
+      "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==",
+      "license": "MIT"
+    },
+    "node_modules/lodash-es": {
+      "version": "4.17.23",
+      "resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.23.tgz",
+      "integrity": "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==",
+      "license": "MIT"
+    },
+    "node_modules/lodash-unified": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.3.tgz",
+      "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==",
+      "license": "MIT",
+      "peerDependencies": {
+        "@types/lodash-es": "*",
+        "lodash": "*",
+        "lodash-es": "*"
+      }
+    },
+    "node_modules/magic-string": {
+      "version": "0.30.21",
+      "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.21.tgz",
+      "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/sourcemap-codec": "^1.5.5"
+      }
+    },
+    "node_modules/memoize-one": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz",
+      "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==",
+      "license": "MIT"
+    },
+    "node_modules/mitt": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmmirror.com/mitt/-/mitt-3.0.1.tgz",
+      "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==",
+      "license": "MIT"
+    },
+    "node_modules/muggle-string": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmmirror.com/muggle-string/-/muggle-string-0.4.1.tgz",
+      "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/nanoid": {
+      "version": "3.3.11",
+      "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz",
+      "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "bin": {
+        "nanoid": "bin/nanoid.cjs"
+      },
+      "engines": {
+        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+      }
+    },
+    "node_modules/node-addon-api": {
+      "version": "7.1.1",
+      "resolved": "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-7.1.1.tgz",
+      "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
+      "dev": true,
+      "license": "MIT",
+      "optional": true
+    },
+    "node_modules/normalize-wheel-es": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz",
+      "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==",
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/path-browserify": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/path-browserify/-/path-browserify-1.0.1.tgz",
+      "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/perfect-debounce": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/perfect-debounce/-/perfect-debounce-1.0.0.tgz",
+      "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==",
+      "license": "MIT"
+    },
+    "node_modules/picocolors": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz",
+      "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+      "license": "ISC"
+    },
+    "node_modules/picomatch": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.3.tgz",
+      "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/jonschlinkert"
+      }
+    },
+    "node_modules/pinia": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmmirror.com/pinia/-/pinia-3.0.4.tgz",
+      "integrity": "sha512-l7pqLUFTI/+ESXn6k3nu30ZIzW5E2WZF/LaHJEpoq6ElcLD+wduZoB2kBN19du6K/4FDpPMazY2wJr+IndBtQw==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/devtools-api": "^7.7.7"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/posva"
+      },
+      "peerDependencies": {
+        "typescript": ">=4.5.0",
+        "vue": "^3.5.11"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/postcss": {
+      "version": "8.5.6",
+      "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.6.tgz",
+      "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/postcss/"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/postcss"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "nanoid": "^3.3.11",
+        "picocolors": "^1.1.1",
+        "source-map-js": "^1.2.1"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >=14"
+      }
+    },
+    "node_modules/readdirp": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-4.1.2.tgz",
+      "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 14.18.0"
+      },
+      "funding": {
+        "type": "individual",
+        "url": "https://paulmillr.com/funding/"
+      }
+    },
+    "node_modules/rfdc": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmmirror.com/rfdc/-/rfdc-1.4.1.tgz",
+      "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==",
+      "license": "MIT"
+    },
+    "node_modules/rollup": {
+      "version": "4.59.0",
+      "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.59.0.tgz",
+      "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/estree": "1.0.8"
+      },
+      "bin": {
+        "rollup": "dist/bin/rollup"
+      },
+      "engines": {
+        "node": ">=18.0.0",
+        "npm": ">=8.0.0"
+      },
+      "optionalDependencies": {
+        "@rollup/rollup-android-arm-eabi": "4.59.0",
+        "@rollup/rollup-android-arm64": "4.59.0",
+        "@rollup/rollup-darwin-arm64": "4.59.0",
+        "@rollup/rollup-darwin-x64": "4.59.0",
+        "@rollup/rollup-freebsd-arm64": "4.59.0",
+        "@rollup/rollup-freebsd-x64": "4.59.0",
+        "@rollup/rollup-linux-arm-gnueabihf": "4.59.0",
+        "@rollup/rollup-linux-arm-musleabihf": "4.59.0",
+        "@rollup/rollup-linux-arm64-gnu": "4.59.0",
+        "@rollup/rollup-linux-arm64-musl": "4.59.0",
+        "@rollup/rollup-linux-loong64-gnu": "4.59.0",
+        "@rollup/rollup-linux-loong64-musl": "4.59.0",
+        "@rollup/rollup-linux-ppc64-gnu": "4.59.0",
+        "@rollup/rollup-linux-ppc64-musl": "4.59.0",
+        "@rollup/rollup-linux-riscv64-gnu": "4.59.0",
+        "@rollup/rollup-linux-riscv64-musl": "4.59.0",
+        "@rollup/rollup-linux-s390x-gnu": "4.59.0",
+        "@rollup/rollup-linux-x64-gnu": "4.59.0",
+        "@rollup/rollup-linux-x64-musl": "4.59.0",
+        "@rollup/rollup-openbsd-x64": "4.59.0",
+        "@rollup/rollup-openharmony-arm64": "4.59.0",
+        "@rollup/rollup-win32-arm64-msvc": "4.59.0",
+        "@rollup/rollup-win32-ia32-msvc": "4.59.0",
+        "@rollup/rollup-win32-x64-gnu": "4.59.0",
+        "@rollup/rollup-win32-x64-msvc": "4.59.0",
+        "fsevents": "~2.3.2"
+      }
+    },
+    "node_modules/sass": {
+      "version": "1.97.3",
+      "resolved": "https://registry.npmmirror.com/sass/-/sass-1.97.3.tgz",
+      "integrity": "sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "chokidar": "^4.0.0",
+        "immutable": "^5.0.2",
+        "source-map-js": ">=0.6.2 <2.0.0"
+      },
+      "bin": {
+        "sass": "sass.js"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      },
+      "optionalDependencies": {
+        "@parcel/watcher": "^2.4.1"
+      }
+    },
+    "node_modules/source-map-js": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz",
+      "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/speakingurl": {
+      "version": "14.0.1",
+      "resolved": "https://registry.npmmirror.com/speakingurl/-/speakingurl-14.0.1.tgz",
+      "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==",
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/superjson": {
+      "version": "2.2.6",
+      "resolved": "https://registry.npmmirror.com/superjson/-/superjson-2.2.6.tgz",
+      "integrity": "sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==",
+      "license": "MIT",
+      "dependencies": {
+        "copy-anything": "^4"
+      },
+      "engines": {
+        "node": ">=16"
+      }
+    },
+    "node_modules/swiper": {
+      "version": "12.1.2",
+      "resolved": "https://registry.npmmirror.com/swiper/-/swiper-12.1.2.tgz",
+      "integrity": "sha512-4gILrI3vXZqoZh71I1PALqukCFgk+gpOwe1tOvz5uE9kHtl2gTDzmYflYCwWvR4LOvCrJi6UEEU+gnuW5BtkgQ==",
+      "funding": [
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/swiperjs"
+        },
+        {
+          "type": "open_collective",
+          "url": "http://opencollective.com/swiper"
+        }
+      ],
+      "license": "MIT",
+      "engines": {
+        "node": ">= 4.7.0"
+      }
+    },
+    "node_modules/tinyglobby": {
+      "version": "0.2.15",
+      "resolved": "https://registry.npmmirror.com/tinyglobby/-/tinyglobby-0.2.15.tgz",
+      "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "fdir": "^6.5.0",
+        "picomatch": "^4.0.3"
+      },
+      "engines": {
+        "node": ">=12.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/SuperchupuDev"
+      }
+    },
+    "node_modules/typescript": {
+      "version": "5.9.3",
+      "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.9.3.tgz",
+      "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
+      "devOptional": true,
+      "license": "Apache-2.0",
+      "bin": {
+        "tsc": "bin/tsc",
+        "tsserver": "bin/tsserver"
+      },
+      "engines": {
+        "node": ">=14.17"
+      }
+    },
+    "node_modules/undici-types": {
+      "version": "7.18.2",
+      "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-7.18.2.tgz",
+      "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/vite": {
+      "version": "7.3.1",
+      "resolved": "https://registry.npmmirror.com/vite/-/vite-7.3.1.tgz",
+      "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "esbuild": "^0.27.0",
+        "fdir": "^6.5.0",
+        "picomatch": "^4.0.3",
+        "postcss": "^8.5.6",
+        "rollup": "^4.43.0",
+        "tinyglobby": "^0.2.15"
+      },
+      "bin": {
+        "vite": "bin/vite.js"
+      },
+      "engines": {
+        "node": "^20.19.0 || >=22.12.0"
+      },
+      "funding": {
+        "url": "https://github.com/vitejs/vite?sponsor=1"
+      },
+      "optionalDependencies": {
+        "fsevents": "~2.3.3"
+      },
+      "peerDependencies": {
+        "@types/node": "^20.19.0 || >=22.12.0",
+        "jiti": ">=1.21.0",
+        "less": "^4.0.0",
+        "lightningcss": "^1.21.0",
+        "sass": "^1.70.0",
+        "sass-embedded": "^1.70.0",
+        "stylus": ">=0.54.8",
+        "sugarss": "^5.0.0",
+        "terser": "^5.16.0",
+        "tsx": "^4.8.1",
+        "yaml": "^2.4.2"
+      },
+      "peerDependenciesMeta": {
+        "@types/node": {
+          "optional": true
+        },
+        "jiti": {
+          "optional": true
+        },
+        "less": {
+          "optional": true
+        },
+        "lightningcss": {
+          "optional": true
+        },
+        "sass": {
+          "optional": true
+        },
+        "sass-embedded": {
+          "optional": true
+        },
+        "stylus": {
+          "optional": true
+        },
+        "sugarss": {
+          "optional": true
+        },
+        "terser": {
+          "optional": true
+        },
+        "tsx": {
+          "optional": true
+        },
+        "yaml": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/vscode-uri": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/vscode-uri/-/vscode-uri-3.1.0.tgz",
+      "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/vue": {
+      "version": "3.5.29",
+      "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.29.tgz",
+      "integrity": "sha512-BZqN4Ze6mDQVNAni0IHeMJ5mwr8VAJ3MQC9FmprRhcBYENw+wOAAjRj8jfmN6FLl0j96OXbR+CjWhmAmM+QGnA==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/compiler-dom": "3.5.29",
+        "@vue/compiler-sfc": "3.5.29",
+        "@vue/runtime-dom": "3.5.29",
+        "@vue/server-renderer": "3.5.29",
+        "@vue/shared": "3.5.29"
+      },
+      "peerDependencies": {
+        "typescript": "*"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/vue-router": {
+      "version": "4.6.4",
+      "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.6.4.tgz",
+      "integrity": "sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/devtools-api": "^6.6.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/posva"
+      },
+      "peerDependencies": {
+        "vue": "^3.5.0"
+      }
+    },
+    "node_modules/vue-router/node_modules/@vue/devtools-api": {
+      "version": "6.6.4",
+      "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz",
+      "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==",
+      "license": "MIT"
+    },
+    "node_modules/vue-tsc": {
+      "version": "3.2.5",
+      "resolved": "https://registry.npmmirror.com/vue-tsc/-/vue-tsc-3.2.5.tgz",
+      "integrity": "sha512-/htfTCMluQ+P2FISGAooul8kO4JMheOTCbCy4M6dYnYYjqLe3BExZudAua6MSIKSFYQtFOYAll7XobYwcpokGA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@volar/typescript": "2.4.28",
+        "@vue/language-core": "3.2.5"
+      },
+      "bin": {
+        "vue-tsc": "bin/vue-tsc.js"
+      },
+      "peerDependencies": {
+        "typescript": ">=5.0.0"
+      }
+    }
+  }
+}

+ 29 - 0
zyuas-neo/package.json

@@ -0,0 +1,29 @@
+{
+  "name": "zyuas-neo",
+  "private": true,
+  "version": "1.0.0",
+  "type": "module",
+  "scripts": {
+    "dev": "vite",
+    "build": "vue-tsc && vite build",
+    "build:skip-typecheck": "vite build",
+    "preview": "vite preview",
+    "type-check": "vue-tsc --noEmit"
+  },
+  "dependencies": {
+    "@element-plus/icons-vue": "^2.3.2",
+    "element-plus": "^2.13.2",
+    "pinia": "^3.0.4",
+    "swiper": "^12.1.2",
+    "vue": "^3.5.25",
+    "vue-router": "^4.6.4"
+  },
+  "devDependencies": {
+    "@types/node": "^25.3.1",
+    "@vitejs/plugin-vue": "^6.0.2",
+    "sass": "^1.97.3",
+    "typescript": "^5.9.3",
+    "vite": "^7.3.1",
+    "vue-tsc": "^3.2.5"
+  }
+}

+ 1 - 0
zyuas-neo/public/vite.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>

+ 53 - 0
zyuas-neo/src/App.vue

@@ -0,0 +1,53 @@
+<template>
+  <div id="app">
+    <Header />
+    <div class="header-placeholder"></div>
+    <main class="main-content">
+      <router-view v-slot="{ Component }">
+        <transition name="fade" mode="out-in">
+          <component :is="Component" />
+        </transition>
+      </router-view>
+    </main>
+    <Footer />
+    <GoTop />
+  </div>
+</template>
+
+<script setup lang="ts">
+import Header from './components/Header.vue'
+import Footer from './components/Footer.vue'
+import GoTop from './components/GoTop.vue'
+</script>
+
+<style>
+.header-placeholder {
+  height: 80px;
+}
+
+.main-content {
+  flex: 1;
+  min-height: calc(100vh - 80px);
+}
+
+@media screen and (max-width: 997px) {
+  .header-placeholder {
+    height: 70px;
+  }
+
+  .main-content {
+    min-height: calc(100vh - 70px);
+  }
+}
+
+/* 页面过渡动画 */
+.fade-enter-active,
+.fade-leave-active {
+  transition: opacity 0.3s ease;
+}
+
+.fade-enter-from,
+.fade-leave-to {
+  opacity: 0;
+}
+</style>

BIN
zyuas-neo/src/assets/images/about_img.png


BIN
zyuas-neo/src/assets/images/acci1.png


BIN
zyuas-neo/src/assets/images/acci2.png


+ 4 - 0
zyuas-neo/src/assets/images/ai-dev.jpg

@@ -0,0 +1,4 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 600">
+  <rect fill="#f0f2f5" width="800" height="600"/>
+  <text fill="#999" x="50%" y="50%" dominant-baseline="middle" text-anchor="middle" font-size="24">AI Development</text>
+</svg>

BIN
zyuas-neo/src/assets/images/ai-dev1.png


BIN
zyuas-neo/src/assets/images/api-dev.jpg


BIN
zyuas-neo/src/assets/images/api.png


BIN
zyuas-neo/src/assets/images/banner-ai.jpg


BIN
zyuas-neo/src/assets/images/banner-dock-black.jpg


BIN
zyuas-neo/src/assets/images/banner-dock-black_2.jpg


BIN
zyuas-neo/src/assets/images/banner-home.jpg


BIN
zyuas-neo/src/assets/images/banner-m350rtk.jpg


BIN
zyuas-neo/src/assets/images/banner-m350rtk_2.jpg


BIN
zyuas-neo/src/assets/images/banner1.jpg


BIN
zyuas-neo/src/assets/images/banner1_2.jpg


BIN
zyuas-neo/src/assets/images/banner_4.jpg


BIN
zyuas-neo/src/assets/images/banner_5.jpg


BIN
zyuas-neo/src/assets/images/buil1.png


BIN
zyuas-neo/src/assets/images/buil2.png


BIN
zyuas-neo/src/assets/images/buil3.png


BIN
zyuas-neo/src/assets/images/buil4.png


BIN
zyuas-neo/src/assets/images/buil5.png


BIN
zyuas-neo/src/assets/images/buil6.png


BIN
zyuas-neo/src/assets/images/circle.png


BIN
zyuas-neo/src/assets/images/computer.png


BIN
zyuas-neo/src/assets/images/contact_us_bg.jpg


BIN
zyuas-neo/src/assets/images/dji-card.png


BIN
zyuas-neo/src/assets/images/dji-dock.jpg


BIN
zyuas-neo/src/assets/images/dji-dock2.png


BIN
zyuas-neo/src/assets/images/dji.jpg


File diff suppressed because it is too large
+ 36 - 0
zyuas-neo/src/assets/images/logo_black.svg


File diff suppressed because it is too large
+ 36 - 0
zyuas-neo/src/assets/images/logo_black_bk.svg


File diff suppressed because it is too large
+ 36 - 0
zyuas-neo/src/assets/images/logo_white.svg


+ 27 - 0
zyuas-neo/src/assets/images/partners/README.md

@@ -0,0 +1,27 @@
+# 合作伙伴 Logo 资源
+
+## 需要下载的 Logo 文件
+
+请将以下合作伙伴的 Logo 图片下载后保存到此目录:
+
+| 文件名 | 合作伙伴 | 建议尺寸 | 来源 |
+|--------|---------|---------|------|
+| `avic.png` | 中航工业 | 200x200px | https://www.avic.com.cn/ |
+| `comac.png` | 中国商飞 | 200x200px | https://www.comac.cc/ |
+| `dji.png` | 大疆创新 | 200x200px | https://www.dji.com/cn |
+| `jianke.png` | 上海建科咨询集团 | 200x200px | https://www.shjianke.com/ |
+| `buaa.png` | 北京航空航天大学 | 200x200px | https://www.buaa.edu.cn/ |
+| `sjtu.png` | 上海交通大学 | 200x200px | https://www.sjtu.edu.cn/ |
+| `fudan.png` | 复旦大学 | 200x200px | https://www.fudan.edu.cn/ |
+
+## Logo 获取建议
+
+1. **官方网站** - 访问各机构官网,通常在"关于我们"或"媒体资源"页面
+2. **维基百科** - 部分知名机构在维基百科有 SVG 格式 Logo
+3. **品牌指南** - 部分企业有公开的品牌资产下载
+
+## 格式要求
+
+- 格式:PNG(支持透明背景)或 SVG
+- 尺寸:建议 200x200px 或更高
+- 背景:透明背景优先

BIN
zyuas-neo/src/assets/images/payload1_l2.png


BIN
zyuas-neo/src/assets/images/payload2_p1.png


BIN
zyuas-neo/src/assets/images/payload3_h20n.png


BIN
zyuas-neo/src/assets/images/payload4_h20.png


BIN
zyuas-neo/src/assets/images/products1.png


BIN
zyuas-neo/src/assets/images/products2.png


BIN
zyuas-neo/src/assets/images/products3.png


BIN
zyuas-neo/src/assets/images/products4.png


BIN
zyuas-neo/src/assets/images/qq.png


BIN
zyuas-neo/src/assets/images/rag1.png


BIN
zyuas-neo/src/assets/images/safe1.png


BIN
zyuas-neo/src/assets/images/safe2.png


BIN
zyuas-neo/src/assets/images/service1.jpg


BIN
zyuas-neo/src/assets/images/service2.jpg


BIN
zyuas-neo/src/assets/images/service3.jpg


BIN
zyuas-neo/src/assets/images/service4.jpg


BIN
zyuas-neo/src/assets/images/skill.png


BIN
zyuas-neo/src/assets/images/software1.png


BIN
zyuas-neo/src/assets/images/software2.png


BIN
zyuas-neo/src/assets/images/software3.png


BIN
zyuas-neo/src/assets/images/software_icon1.png


BIN
zyuas-neo/src/assets/images/software_icon2.png


BIN
zyuas-neo/src/assets/images/sur1.png


BIN
zyuas-neo/src/assets/images/sur2.png


BIN
zyuas-neo/src/assets/images/sur3.png


BIN
zyuas-neo/src/assets/images/sur4.png


BIN
zyuas-neo/src/assets/images/tel.png


BIN
zyuas-neo/src/assets/images/twitter.png


BIN
zyuas-neo/src/assets/images/w1.png


BIN
zyuas-neo/src/assets/images/w2.jpg


BIN
zyuas-neo/src/assets/images/weibo.png


BIN
zyuas-neo/src/assets/images/weixin.png


BIN
zyuas-neo/src/assets/images/yinhao.png


+ 702 - 0
zyuas-neo/src/assets/styles/components.scss

@@ -0,0 +1,702 @@
+// ==========================================
+// Reusable Component Styles - 可复用组件样式
+// ==========================================
+
+@import './variables';
+@import './mixins';
+
+/* ===== 页面 Banner ===== */
+.page-banner {
+  padding: $spacer-8 0;
+  color: #fff;
+  background-image: linear-gradient(135deg, $primary-color 0%, $primary-light 100%);
+  background-size: cover;
+  background-position: center;
+  
+  @include mobile {
+    padding: $spacer-4 0;
+  }
+  
+  h1 {
+    font-size: $font-size-4xl;
+    font-weight: $font-weight-bold;
+    margin: 0;
+    letter-spacing: 2px;
+    
+    @include mobile {
+      font-size: $font-size-2xl;
+    }
+  }
+  
+  p {
+    font-size: $font-size-lg;
+    opacity: 0.8;
+    letter-spacing: 1px;
+    
+    @include mobile {
+      font-size: $font-size-sm;
+    }
+  }
+}
+
+/* AI 主题 Banner(紫色渐变) */
+.page-banner-ai {
+  @extend .page-banner;
+  background-image: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+}
+
+/* ===== 内容容器 ===== */
+.content-container {
+  padding: $spacer-6 0;
+  
+  @include mobile {
+    padding: $spacer-4 0;
+  }
+}
+
+/* ===== 侧边导航 ===== */
+.side-nav {
+  position: sticky;
+  top: calc($header-height + 20px);
+  background: #fff;
+  border-radius: $radius-md;
+  box-shadow: $shadow-md;
+  overflow: hidden;
+  
+  @include mobile {
+    position: static;
+    margin-bottom: $spacer-3;
+  }
+}
+
+.nav-item {
+  padding: 14px 16px;
+  font-size: $font-size-sm;
+  color: $text-regular;
+  text-align: center;
+  cursor: pointer;
+  transition: $transition-base;
+  border-bottom: 1px solid $border-color;
+  
+  &:last-child {
+    border-bottom: none;
+  }
+  
+  &:hover {
+    background: $bg-lighter;
+    color: $primary-color;
+  }
+  
+  &.active {
+    background: rgba($primary-color, 0.1);
+    color: $primary-color;
+    font-weight: $font-weight-semibold;
+  }
+  
+  @include mobile {
+    padding: 10px 12px;
+    font-size: $font-size-xs;
+  }
+}
+
+/* ===== 特性列表 ===== */
+.feature-list {
+  list-style: none;
+  padding: 0;
+  margin: $spacer-2 0;
+  
+  li {
+    display: flex;
+    align-items: flex-start;
+    gap: 10px;
+    font-size: $font-size-sm;
+    line-height: 2.2;
+    color: $text-tertiary;
+    margin-bottom: 10px;
+    
+    .check-icon {
+      color: $primary-color;
+      font-size: $font-size-base;
+      flex-shrink: 0;
+      margin-top: 2px;
+    }
+    
+    strong {
+      color: $text-primary;
+    }
+  }
+}
+
+/* ===== 信息框 ===== */
+.info-box {
+  background: #f8f9fa;
+  border-left: 4px solid $primary-color;
+  padding: $spacer-2;
+  margin: $spacer-2 0;
+  
+  h4 {
+    display: flex;
+    align-items: center;
+    gap: 8px;
+    color: $primary-color;
+    margin-bottom: $spacer-1;
+    font-size: $font-size-base;
+    font-weight: $font-weight-semibold;
+    
+    .el-icon {
+      font-size: $font-size-base;
+    }
+  }
+  
+  p {
+    margin: 0;
+    font-size: $font-size-sm;
+    line-height: 1.6;
+    color: $text-tertiary;
+  }
+}
+
+/* ===== 应用卡片 ===== */
+.application-card {
+  background: #fff;
+  border: 1px solid $border-color;
+  border-radius: $radius-md;
+  padding: $spacer-3 $spacer-2;
+  text-align: center;
+  transition: $transition-bounce;
+  margin-bottom: $spacer-3;
+  
+  &:hover {
+    box-shadow: $shadow-md;
+    transform: translateY(-3px);
+  }
+  
+  .application-icon,
+  .application-image {
+    width: 50px;
+    height: 50px;
+    margin: 0 auto $spacer-2;
+    background: rgba($primary-color, 0.1);
+    border-radius: 50%;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    
+    .el-icon {
+      font-size: 20px;
+      color: $primary-color;
+    }
+    
+    img {
+      width: 100%;
+      height: 100%;
+      object-fit: cover;
+      border-radius: 50%;
+    }
+  }
+  
+  .application-image {
+    width: 100%;
+    height: 150px;
+    margin-bottom: 0;
+    border-radius: $radius-md;
+    overflow: hidden;
+    background: $bg-lighter;
+    
+    img {
+      width: 100%;
+      height: 100%;
+      object-fit: cover;
+      transition: transform 0.5s ease;
+    }
+  }
+  
+  &:hover .application-image img {
+    transform: scale(1.1);
+  }
+  
+  h5 {
+    font-size: $font-size-sm;
+    font-weight: $font-weight-semibold;
+    color: $text-primary;
+    margin: 0;
+    
+    &.with-padding {
+      padding: 15px;
+      text-align: center;
+    }
+  }
+}
+
+/* ===== 特性卡片 ===== */
+.feature-card {
+  background: #fff;
+  border: 1px solid $border-color;
+  border-radius: $radius-md;
+  padding: $spacer-3 $spacer-2;
+  text-align: center;
+  transition: $transition-bounce;
+  margin-bottom: $spacer-3;
+  
+  &:hover {
+    box-shadow: $shadow-md;
+    transform: translateY(-5px);
+  }
+  
+  .feature-icon {
+    width: 60px;
+    height: 60px;
+    margin: 0 auto $spacer-2;
+    background: rgba($primary-color, 0.1);
+    border-radius: 50%;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    
+    .el-icon {
+      font-size: 24px;
+      color: $primary-color;
+    }
+  }
+  
+  h4 {
+    font-size: $font-size-base;
+    font-weight: $font-weight-semibold;
+    color: $text-primary;
+    margin-bottom: 10px;
+  }
+  
+  p {
+    font-size: $font-size-sm;
+    line-height: 1.6;
+    color: $text-tertiary;
+    margin: 0;
+  }
+}
+
+/* ===== 可交付成果卡片 ===== */
+.deliverable-card {
+  background: #fff;
+  border: 1px solid $border-color;
+  border-radius: $radius-md;
+  padding: $spacer-3 $spacer-2;
+  text-align: center;
+  transition: $transition-bounce;
+  margin-bottom: $spacer-3;
+  
+  &:hover {
+    box-shadow: $shadow-md;
+    transform: translateY(-5px);
+  }
+  
+  .deliverable-icon {
+    width: 50px;
+    height: 50px;
+    margin: 0 auto $spacer-2;
+    background: rgba($primary-color, 0.1);
+    border-radius: 50%;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    
+    .el-icon {
+      font-size: 20px;
+      color: $primary-color;
+    }
+  }
+  
+  h5 {
+    font-size: $font-size-base;
+    font-weight: $font-weight-semibold;
+    color: $text-primary;
+    margin-bottom: 5px;
+  }
+  
+  p {
+    font-size: $font-size-xs;
+    color: $text-muted;
+    margin: 0;
+  }
+}
+
+/* ===== 服务卡片 ===== */
+.service-card {
+  background: #fff;
+  border: 1px solid $border-color;
+  border-radius: $radius-md;
+  padding: $spacer-3 $spacer-2;
+  text-align: center;
+  transition: $transition-bounce;
+  margin-bottom: $spacer-3;
+  
+  &:hover {
+    box-shadow: $shadow-md;
+    transform: translateY(-5px);
+  }
+  
+  .service-icon {
+    width: 60px;
+    height: 60px;
+    margin: 0 auto $spacer-2;
+    background: rgba($primary-color, 0.1);
+    border-radius: 50%;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    
+    .el-icon {
+      font-size: 28px;
+      color: $primary-color;
+    }
+  }
+  
+  h4 {
+    font-size: $font-size-base;
+    font-weight: $font-weight-semibold;
+    color: $text-primary;
+    margin-bottom: 10px;
+  }
+  
+  p {
+    font-size: $font-size-sm;
+    line-height: 1.6;
+    color: $text-tertiary;
+    margin: 0;
+  }
+}
+
+/* ===== 案例卡片 ===== */
+.case-card {
+  background: #fff;
+  border: 1px solid $border-color;
+  border-radius: $radius-md;
+  padding: $spacer-3 $spacer-2;
+  text-align: center;
+  transition: $transition-bounce;
+  margin-bottom: $spacer-3;
+  
+  &:hover {
+    box-shadow: $shadow-md;
+    transform: translateY(-5px);
+  }
+  
+  .case-icon {
+    width: 50px;
+    height: 50px;
+    margin: 0 auto $spacer-2;
+    background: rgba(#667eea, 0.1);
+    border-radius: 50%;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    
+    .el-icon {
+      font-size: 24px;
+      color: #667eea;
+    }
+  }
+  
+  h5 {
+    font-size: $font-size-base;
+    font-weight: $font-weight-semibold;
+    color: $text-primary;
+    margin-bottom: 8px;
+  }
+  
+  p {
+    font-size: $font-size-xs;
+    color: $text-muted;
+    margin: 0;
+  }
+}
+
+/* ===== 新闻卡片 ===== */
+.news-card {
+  display: flex;
+  background: #fff;
+  border-radius: $radius-lg;
+  overflow: hidden;
+  box-shadow: $shadow-md;
+  transition: $transition-bounce;
+  margin-bottom: $spacer-4;
+  
+  &:hover {
+    box-shadow: $shadow-lg;
+    transform: translateY(-3px);
+  }
+  
+  @include mobile {
+    flex-direction: column;
+  }
+}
+
+.news-image {
+  position: relative;
+  width: 300px;
+  flex-shrink: 0;
+  overflow: hidden;
+  
+  @include mobile {
+    width: 100%;
+    height: 200px;
+  }
+  
+  img {
+    width: 100%;
+    height: 100%;
+    object-fit: cover;
+    transition: transform 0.5s ease;
+  }
+  
+  &:hover img {
+    transform: scale(1.1);
+  }
+  
+  .news-date {
+    position: absolute;
+    top: 15px;
+    left: 15px;
+    padding: 6px 12px;
+    background: rgba($primary-color, 0.9);
+    color: #fff;
+    font-size: $font-size-xs;
+    border-radius: $radius-sm;
+  }
+}
+
+.news-content {
+  padding: $spacer-3;
+  flex: 1;
+  
+  h3 {
+    font-size: $font-size-lg;
+    font-weight: $font-weight-semibold;
+    color: $text-primary;
+    margin-bottom: 12px;
+    line-height: 1.4;
+    
+    @include mobile {
+      font-size: $font-size-base;
+    }
+  }
+  
+  p {
+    font-size: $font-size-sm;
+    line-height: 1.8;
+    color: $text-regular;
+    margin-bottom: $spacer-2;
+  }
+}
+
+.btn-read-more {
+  display: inline-flex;
+  align-items: center;
+  gap: 6px;
+  color: $primary-color;
+  font-size: $font-size-sm;
+  font-weight: $font-weight-semibold;
+  text-decoration: none;
+  transition: $transition-base;
+  
+  &:hover {
+    gap: 10px;
+    color: $primary-dark;
+  }
+}
+
+/* ===== 联系列表 ===== */
+.contact-list {
+  margin-bottom: $spacer-4;
+}
+
+.contact-item {
+  display: flex;
+  align-items: flex-start;
+  gap: 15px;
+  margin-bottom: $spacer-3;
+  
+  .contact-icon {
+    width: 50px;
+    height: 50px;
+    background: rgba($primary-color, 0.1);
+    border-radius: 50%;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    flex-shrink: 0;
+    
+    .el-icon {
+      font-size: 24px;
+      color: $primary-color;
+    }
+  }
+  
+  .contact-detail {
+    flex: 1;
+    
+    strong {
+      display: block;
+      font-size: $font-size-sm;
+      font-weight: $font-weight-semibold;
+      color: $text-primary;
+      margin-bottom: 4px;
+    }
+    
+    p {
+      font-size: $font-size-sm;
+      color: $text-regular;
+      margin: 0;
+    }
+  }
+}
+
+/* ===== 社交链接 ===== */
+.social-links {
+  padding-top: $spacer-3;
+  border-top: 1px solid $border-color;
+  
+  h3 {
+    font-size: $font-size-lg;
+    font-weight: $font-weight-semibold;
+    color: $text-primary;
+    margin-bottom: $spacer-2;
+  }
+  
+  .social-icons {
+    display: flex;
+    gap: $spacer-2;
+  }
+  
+  .social-item {
+    text-align: center;
+    
+    img {
+      width: 60px;
+      height: 60px;
+      margin-bottom: 8px;
+    }
+    
+    span {
+      display: block;
+      font-size: $font-size-xs;
+      color: $text-muted;
+    }
+  }
+}
+
+/* ===== 联系表单 ===== */
+.contact-form-wrapper {
+  background: #fff;
+  padding: $spacer-4;
+  border-radius: $radius-lg;
+  box-shadow: $shadow-md;
+  
+  @include mobile {
+    padding: $spacer-3;
+  }
+  
+  h2 {
+    font-size: $font-size-2xl;
+    font-weight: $font-weight-bold;
+    color: $text-primary;
+    margin-bottom: $spacer-3;
+  }
+}
+
+.submit-btn {
+  width: 100%;
+  padding: 14px 32px;
+  font-size: $font-size-base;
+  font-weight: $font-weight-semibold;
+}
+
+/* ===== 地图容器 ===== */
+.map-container {
+  width: 100%;
+  height: 400px;
+  
+  @include mobile {
+    height: 300px;
+  }
+  
+  iframe {
+    width: 100%;
+    height: 100%;
+  }
+}
+
+/* ===== 分页 ===== */
+.pagination-wrapper {
+  margin-top: $spacer-4;
+  display: flex;
+  justify-content: center;
+}
+
+/* ===== AI 卡片 ===== */
+.ai-card {
+  margin-bottom: $spacer-3;
+  border-radius: $radius-lg;
+  overflow: hidden;
+  height: 300px;
+  
+  :deep(.el-card__body) {
+    padding: 0;
+    height: 100%;
+  }
+}
+
+.ai-link {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  height: 100%;
+  padding: $spacer-4;
+  text-decoration: none;
+  color: inherit;
+  background: linear-gradient(135deg, #f5f7fa 0%, #e4e9f2 100%);
+  transition: $transition-bounce;
+  
+  &:hover {
+    background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+    color: #fff;
+  }
+}
+
+.ai-icon {
+  width: 80px;
+  height: 80px;
+  background: $primary-gradient;
+  border-radius: 50%;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  margin-bottom: $spacer-3;
+  transition: $transition-bounce;
+  
+  .el-icon {
+    font-size: 40px;
+    color: #fff;
+  }
+  
+  &:hover {
+    background: #fff;
+    transform: scale(1.1);
+    
+    .el-icon {
+      color: $primary-color;
+    }
+  }
+}
+
+.ai-link h2 {
+  font-size: $font-size-xl;
+  font-weight: 700;
+  margin-bottom: 12px;
+}
+
+.ai-link p {
+  font-size: $font-size-sm;
+  opacity: 0.8;
+  text-align: center;
+}

+ 349 - 0
zyuas-neo/src/assets/styles/global.scss

@@ -0,0 +1,349 @@
+// ==========================================
+// Global Styles - 全局样式
+// ==========================================
+
+@import './variables';
+@import './mixins';
+@import './components';
+
+// 引入动画关键帧
+@include keyframes-blink;
+@include keyframes-float;
+@include keyframes-rotate-glow;
+@include keyframes-shimmer;
+
+/* ===== 基础重置 ===== */
+* {
+  margin: 0;
+  padding: 0;
+  box-sizing: border-box;
+}
+
+html {
+  font-size: 16px;
+  scroll-behavior: smooth;
+}
+
+body {
+  font-family: $font-family-base;
+  font-weight: $font-weight-regular;
+  line-height: 1.6;
+  color: $text-primary;
+  background-color: $bg-light;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+#app {
+  min-height: 100vh;
+  display: flex;
+  flex-direction: column;
+}
+
+/* ===== 链接样式 ===== */
+a {
+  color: inherit;
+  text-decoration: none;
+  transition: $transition-base;
+  
+  &:hover {
+    color: $primary-color;
+  }
+}
+
+/* ===== 图片样式 ===== */
+img {
+  max-width: 100%;
+  height: auto;
+  display: block;
+}
+
+/* ===== 容器 ===== */
+.container {
+  width: 100%;
+  max-width: $container-max-width;
+  margin: 0 auto;
+  padding: 0 $container-padding;
+  
+  // 平板端 (768px - 1200px)
+  @include tablet {
+    padding: 0 $spacer-3;  // 30px
+  }
+  
+  // 移动端 (< 768px)
+  @include mobile {
+    padding: 0 $spacer-2;  // 20px
+  }
+}
+
+.container-fluid {
+  width: 100%;
+  padding: 0;
+}
+
+/* ===== 工具类 - 文本 ===== */
+.text-center { text-align: center; }
+.text-left { text-align: left; }
+.text-right { text-align: right; }
+
+.text-primary { color: $text-primary; }
+.text-secondary { color: $text-secondary; }
+.text-muted { color: $text-muted; }
+.text-tertiary { color: $text-tertiary; }
+
+.text-gradient { @include text-gradient; }
+
+/* ===== 工具类 - 背景 ===== */
+.bg-light { background: $bg-light; }
+.bg-lighter { background: $bg-lighter; }
+.bg-gradient-primary { @include gradient-primary; }
+.bg-gradient-tech { @include gradient-tech; }
+
+/* ===== 工具类 - 阴影 ===== */
+.shadow-sm { @include shadow-sm; }
+.shadow-md { @include shadow-md; }
+.shadow-lg { @include shadow-lg; }
+.shadow-glow { @include glow-blue; }
+
+/* ===== 工具类 - 圆角 ===== */
+.radius-sm { @include radius-sm; }
+.radius-md { @include radius-md; }
+.radius-lg { @include radius-lg; }
+.radius-xl { @include radius-xl; }
+
+/* ===== 工具类 - 间距 ===== */
+.mt-1 { margin-top: $spacer-1; }
+.mt-2 { margin-top: $spacer-2; }
+.mt-3 { margin-top: $spacer-3; }
+.mt-4 { margin-top: $spacer-4; }
+
+.mb-1 { margin-bottom: $spacer-1; }
+.mb-2 { margin-bottom: $spacer-2; }
+.mb-3 { margin-bottom: $spacer-3; }
+.mb-4 { margin-bottom: $spacer-4; }
+
+.p-1 { padding: $spacer-1; }
+.p-2 { padding: $spacer-2; }
+.p-3 { padding: $spacer-3; }
+.p-4 { padding: $spacer-4; }
+
+/* ===== 工具类 - 布局 ===== */
+.d-flex { display: flex; }
+.flex-center { @include flex-center; }
+.flex-between { @include flex-between; }
+.flex-column { @include flex-column; }
+.flex-wrap { flex-wrap: wrap; }
+
+.gap-1 { gap: $spacer-1; }
+.gap-2 { gap: $spacer-2; }
+.gap-3 { gap: $spacer-3; }
+
+/* ===== 工具类 - 文本截断 ===== */
+.ellipsis { @include text-truncate; }
+.ellipsis-2 { @include text-truncate-lines(2); }
+.ellipsis-3 { @include text-truncate-lines(3); }
+
+/* ===== 工具类 - 显示控制 ===== */
+.hidden-xs { display: block; }
+.visible-xs { display: none; }
+
+@include mobile {
+  .hidden-xs { display: none !important; }
+  .visible-xs { display: block !important; }
+  .hidden-mobile { display: none !important; }
+}
+
+@include tablet {
+  .hidden-tablet { display: none !important; }
+}
+
+/* ===== 通用组件 - 玻璃卡片 ===== */
+.glass-card {
+  @include glass-morphism;
+  
+  &:hover {
+    transform: translateY(-5px);
+    box-shadow: $shadow-lg, $glow-blue;
+    border-color: rgba($primary-color, 0.3);
+  }
+}
+
+/* ===== 通用组件 - 章节标题 ===== */
+.section-header {
+  @include section-header;
+}
+
+.section-tag {
+  @include section-tag;
+  
+  .tag-dot {
+    width: 8px;
+    height: 8px;
+    background: $primary-color;
+    border-radius: 50%;
+    @include animation-blink;
+  }
+  
+  span {
+    font-size: $font-size-xs;
+    font-weight: $font-weight-semibold;
+    color: $primary-color;
+    letter-spacing: 1px;
+  }
+}
+
+.section-title {
+  @include section-title;
+}
+
+.section-subtitle {
+  @include section-subtitle;
+}
+
+/* ===== 通用组件 - 按钮 ===== */
+.btn-primary {
+  @include btn-primary;
+}
+
+.btn-secondary {
+  @include btn-secondary;
+}
+
+.btn-view-all {
+  display: inline-flex;
+  align-items: center;
+  gap: 8px;
+  padding: 14px 32px;
+  background: $primary-gradient;
+  color: #fff;
+  border: none;
+  border-radius: $radius-md;
+  font-size: $font-size-sm;
+  font-weight: $font-weight-semibold;
+  cursor: pointer;
+  transition: $transition-base;
+  box-shadow: $shadow-sm;
+  text-decoration: none;
+  
+  &:hover {
+    transform: translateY(-3px);
+    box-shadow: $shadow-md;
+    color: #fff;
+  }
+}
+
+/* ===== 通用组件 - 卡片 ===== */
+.card {
+  background: #fff;
+  border-radius: $radius-lg;
+  overflow: hidden;
+  box-shadow: $shadow-md;
+  transition: $transition-bounce;
+  
+  &:hover {
+    transform: translateY(-10px);
+    box-shadow: $shadow-lg, $glow-blue;
+  }
+}
+
+/* ===== 通用组件 - 信息框 ===== */
+.info-box {
+  background: #f8f9fa;
+  border-left: 4px solid $primary-color;
+  padding: $spacer-2;
+  margin: $spacer-2 0;
+  
+  h4 {
+    color: $primary-color;
+    margin-bottom: $spacer-1;
+    font-size: $font-size-base;
+    font-weight: $font-weight-semibold;
+  }
+  
+  p {
+    margin: 0;
+    font-size: $font-size-sm;
+    line-height: 1.6;
+    color: $text-tertiary;
+  }
+  
+  strong {
+    color: $primary-color;
+    font-weight: $font-weight-semibold;
+  }
+}
+
+/* ===== 通用组件 - 特性列表 ===== */
+.feature-list {
+  list-style: none;
+  padding: 0;
+  margin: $spacer-2 0;
+  
+  li {
+    display: flex;
+    align-items: flex-start;
+    gap: 10px;
+    font-size: $font-size-sm;
+    line-height: 2.2;
+    color: $text-tertiary;
+    
+    i {
+      color: $primary-color;
+      font-size: $font-size-base;
+      flex-shrink: 0;
+      margin-top: 2px;
+    }
+  }
+}
+
+/* ===== 动画效果 ===== */
+.animate-float { @include animation-float; }
+.animate-blink { @include animation-blink; }
+.animate-rotate { @include animation-rotate; }
+.animate-shimmer { @include animation-shimmer; }
+
+/* ===== 页面过渡动画 ===== */
+.fade-enter-active,
+.fade-leave-active {
+  transition: opacity 0.3s ease;
+}
+
+.fade-enter-from,
+.fade-leave-to {
+  opacity: 0;
+}
+
+.slide-down-enter-active,
+.slide-down-leave-active {
+  transition: all 0.3s ease;
+}
+
+.slide-down-enter-from,
+.slide-down-leave-to {
+  transform: translateY(-10px);
+  opacity: 0;
+}
+
+/* ===== 响应式调整 ===== */
+@include tablet {
+  .section-title {
+    font-size: $font-size-3xl;
+  }
+}
+
+@include mobile {
+  html {
+    font-size: 14px;
+  }
+  
+  .section-title {
+    font-size: $font-size-2xl;
+  }
+}
+
+/* ===== 打印样式 ===== */
+@media print {
+  .no-print {
+    display: none !important;
+  }
+}

+ 386 - 0
zyuas-neo/src/assets/styles/mixins.scss

@@ -0,0 +1,386 @@
+// ==========================================
+// SCSS Mixins - 混入系统
+// ==========================================
+
+// Note: Variables are loaded via vite.config.js additionalData
+
+/* ===== 响应式断点混入 ===== */
+@mixin respond-to($breakpoint) {
+  @if map-has-key($breakpoints, $breakpoint) {
+    @media (min-width: map-get($breakpoints, $breakpoint)) {
+      @content;
+    }
+  } @else {
+    @warn "Unknown breakpoint: #{$breakpoint}. Available: #{map-keys($breakpoints)}";
+  }
+}
+
+@mixin respond-to-down($breakpoint) {
+  @if map-has-key($breakpoints, $breakpoint) {
+    $value: map-get($breakpoints, $breakpoint) - 1;
+    @media (max-width: $value) {
+      @content;
+    }
+  } @else {
+    @warn "Unknown breakpoint: #{$breakpoint}. Available: #{map-keys($breakpoints)}";
+  }
+}
+
+@mixin respond-to-between($lower, $upper) {
+  @if map-has-key($breakpoints, $lower) and map-has-key($breakpoints, $upper) {
+    $lower-value: map-get($breakpoints, $lower);
+    $upper-value: map-get($breakpoints, $upper) - 1;
+    @media (min-width: $lower-value) and (max-width: $upper-value) {
+      @content;
+    }
+  } @else {
+    @warn "Unknown breakpoint. Available: #{map-keys($breakpoints)}";
+  }
+}
+
+/* ===== 响应式快捷混入 ===== */
+@mixin mobile {
+  @media (max-width: 767px) {
+    @content;
+  }
+}
+
+@mixin tablet {
+  @media (min-width: 768px) and (max-width: 991px) {
+    @content;
+  }
+}
+
+@mixin desktop {
+  @media (min-width: 992px) {
+    @content;
+  }
+}
+
+@mixin large-desktop {
+  @media (min-width: 1200px) {
+    @content;
+  }
+}
+
+/* ===== Flexbox 混入 ===== */
+@mixin flex-center {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+
+@mixin flex-between {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+}
+
+@mixin flex-around {
+  display: flex;
+  align-items: center;
+  justify-content: space-around;
+}
+
+@mixin flex-column {
+  display: flex;
+  flex-direction: column;
+}
+
+@mixin flex-column-center {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+}
+
+/* ===== 文本截断混入 ===== */
+@mixin text-truncate {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
+@mixin text-truncate-lines($lines: 2) {
+  display: -webkit-box;
+  -webkit-line-clamp: $lines;
+  -webkit-box-orient: vertical;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+/* ===== 玻璃拟态效果 ===== */
+@mixin glass-morphism($background: rgba(255, 255, 255, 0.8), $border: rgba(255, 255, 255, 0.5), $blur: 10px) {
+  background: $background;
+  border: 1px solid $border;
+  border-radius: $radius-lg;
+  backdrop-filter: blur($blur);
+  box-shadow: $shadow-md;
+  transition: $transition-bounce;
+}
+
+@mixin glass-morphism-dark($background: rgba(15, 23, 42, 0.8), $border: rgba(255, 255, 255, 0.1)) {
+  background: $background;
+  border: 1px solid $border;
+  border-radius: $radius-lg;
+  backdrop-filter: blur(10px);
+  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
+  transition: $transition-bounce;
+}
+
+/* ===== 渐变背景混入 ===== */
+@mixin gradient-primary {
+  background: $primary-gradient;
+}
+
+@mixin gradient-tech {
+  background: $tech-gradient;
+}
+
+@mixin gradient-header {
+  background: $header-gradient;
+}
+
+@mixin gradient-footer {
+  background: $footer-gradient;
+}
+
+/* ===== 阴影混入 ===== */
+@mixin shadow-sm {
+  box-shadow: $shadow-sm;
+}
+
+@mixin shadow-md {
+  box-shadow: $shadow-md;
+}
+
+@mixin shadow-lg {
+  box-shadow: $shadow-lg;
+}
+
+@mixin glow-blue {
+  box-shadow: $glow-blue;
+}
+
+@mixin glow-blue-lg {
+  box-shadow: $glow-blue-lg;
+}
+
+/* ===== 卡片悬停效果 ===== */
+@mixin card-hover-effect($offset: -10px) {
+  transition: $transition-bounce;
+  
+  &:hover {
+    transform: translateY($offset);
+    box-shadow: $shadow-lg, $glow-blue;
+  }
+}
+
+/* ===== 圆角混入 ===== */
+@mixin radius-sm {
+  border-radius: $radius-sm;
+}
+
+@mixin radius-md {
+  border-radius: $radius-md;
+}
+
+@mixin radius-lg {
+  border-radius: $radius-lg;
+}
+
+@mixin radius-xl {
+  border-radius: $radius-xl;
+}
+
+/* ===== 按钮样式混入 ===== */
+@mixin btn-primary {
+  display: inline-flex;
+  align-items: center;
+  gap: 8px;
+  padding: 14px 32px;
+  background: #fff;
+  color: $primary-color;
+  border: none;
+  border-radius: $radius-md;
+  font-size: $font-size-sm;
+  font-weight: $font-weight-semibold;
+  cursor: pointer;
+  transition: $transition-base;
+  box-shadow: $shadow-sm;
+  
+  &:hover {
+    transform: translateY(-3px);
+    box-shadow: $shadow-md;
+  }
+}
+
+@mixin btn-secondary {
+  display: inline-flex;
+  align-items: center;
+  gap: 8px;
+  padding: 14px 32px;
+  background: transparent;
+  color: #fff;
+  border: 2px solid rgba(255, 255, 255, 0.5);
+  border-radius: $radius-md;
+  font-size: $font-size-sm;
+  font-weight: $font-weight-semibold;
+  cursor: pointer;
+  transition: $transition-base;
+  
+  &:hover {
+    background: rgba(255, 255, 255, 0.1);
+    border-color: #fff;
+    transform: translateY(-3px);
+  }
+}
+
+/* ===== 章节标题混入 ===== */
+@mixin section-header {
+  text-align: center;
+  margin-bottom: $spacer-6;
+}
+
+@mixin section-tag {
+  display: inline-flex;
+  align-items: center;
+  gap: 8px;
+  padding: 8px 16px;
+  background: rgba($primary-color, 0.1);
+  border-radius: $radius-full;
+  margin-bottom: $spacer-2;
+}
+
+@mixin section-title {
+  font-size: $font-size-5xl;
+  font-weight: $font-weight-bold;
+  color: $text-primary;
+  margin: 16px 0 8px;
+}
+
+@mixin section-subtitle {
+  font-size: $font-size-base;
+  color: $text-muted;
+  font-weight: $font-weight-regular;
+  letter-spacing: 1px;
+}
+
+/* ===== 动画混入 ===== */
+@mixin animation-blink {
+  animation: blink 2s ease-in-out infinite;
+}
+
+@mixin animation-float {
+  animation: float 6s ease-in-out infinite;
+}
+
+@mixin animation-rotate {
+  animation: rotate-glow 3s linear infinite;
+}
+
+@mixin animation-shimmer {
+  position: relative;
+  overflow: hidden;
+  
+  &::before {
+    content: '';
+    position: absolute;
+    top: 0;
+    left: -100%;
+    width: 100%;
+    height: 100%;
+    background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.1), transparent);
+    animation: shimmer 3s infinite;
+  }
+}
+
+/* ===== 关键帧动画 ===== */
+@mixin keyframes-blink {
+  @keyframes blink {
+    0%, 100% { opacity: 1; }
+    50% { opacity: 0.4; }
+  }
+}
+
+@mixin keyframes-float {
+  @keyframes float {
+    0%, 100% { transform: translate(0, 0); }
+    50% { transform: translate(30px, 40px); }
+  }
+}
+
+@mixin keyframes-rotate-glow {
+  @keyframes rotate-glow {
+    0% { transform: translate(-50%, -50%) scale(0.6) rotate(0deg); }
+    100% { transform: translate(-50%, -50%) scale(0.6) rotate(360deg); }
+  }
+}
+
+@mixin keyframes-shimmer {
+  @keyframes shimmer {
+    0% { left: -100%; }
+    100% { left: 100%; }
+  }
+}
+
+/* ===== 网格布局混入 ===== */
+@mixin grid-layout($columns: 3, $gap: 30px) {
+  display: grid;
+  grid-template-columns: repeat($columns, 1fr);
+  gap: $gap;
+  
+  @include tablet {
+    grid-template-columns: repeat(2, 1fr);
+  }
+  
+  @include mobile {
+    grid-template-columns: 1fr;
+  }
+}
+
+/* ===== 容器混入 ===== */
+@mixin container {
+  width: 100%;
+  max-width: $container-max-width;
+  margin: 0 auto;
+  padding: 0 $container-padding;
+}
+
+@mixin container-fluid {
+  width: 100%;
+  padding: 0;
+}
+
+/* ===== 工具类混入 ===== */
+@mixin text-gradient {
+  background: $primary-gradient;
+  -webkit-background-clip: text;
+  -webkit-text-fill-color: transparent;
+  background-clip: text;
+}
+
+@mixin hide-scrollbar {
+  -ms-overflow-style: none;
+  scrollbar-width: none;
+  
+  &::-webkit-scrollbar {
+    display: none;
+  }
+}
+
+/* ===== 图片覆盖 ===== */
+@mixin object-fit-cover {
+  width: 100%;
+  height: 100%;
+  object-fit: cover;
+}
+
+/* ===== 清除浮动 ===== */
+@mixin clearfix {
+  &::after {
+    content: '';
+    display: table;
+    clear: both;
+  }
+}

+ 122 - 0
zyuas-neo/src/assets/styles/variables.scss

@@ -0,0 +1,122 @@
+// ==========================================
+// SCSS Variables - 变量系统
+// ==========================================
+
+/* ===== 主题色 ===== */
+$primary-color: #1e73be !default;
+$primary-dark: #155a8a !default;
+$primary-light: #3b82f6 !default;
+$primary-lighter: #60a5fa !default;
+
+/* ===== 渐变色 ===== */
+$primary-gradient: linear-gradient(135deg, #1e73be 0%, #3b82f6 100%) !default;
+$tech-gradient: linear-gradient(135deg, #667eea 0%, #764ba2 100%) !default;
+$orange-gradient: linear-gradient(135deg, rgba(255, 140, 50, 0.08), rgba(255, 160, 80, 0.12), rgba(255, 140, 50, 0.08)) !default;
+$header-gradient: linear-gradient(135deg, #1e3c72 0%, #2a5298 100%) !default;
+$footer-gradient: linear-gradient(135deg, #0f172a 0%, #1e3c72 50%, #2a5298 100%) !default;
+
+/* ===== 中性色 ===== */
+$text-primary: #1a1a1a !default;
+$text-regular: #555555 !default;
+$text-secondary: #4a4a4a !default;
+$text-tertiary: #666666 !default;
+$text-muted: #999999 !default;
+$text-light: #f5f5f5 !default;
+$border-color: #e0e0e0 !default;
+$bg-light: #fafbfc !default;
+$bg-lighter: #f0f2f5 !default;
+$bg-dark: #0f172a !default;
+
+/* ===== 功能色 ===== */
+$success-color: #67c23a !default;
+$warning-color: #e6a23c !default;
+$danger-color: #f56c6c !default;
+$info-color: #909399 !default;
+
+/* ===== 阴影 ===== */
+$shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.08) !default;
+$shadow-md: 0 8px 32px rgba(0, 0, 0, 0.12) !default;
+$shadow-lg: 0 20px 60px rgba(0, 0, 0, 0.15) !default;
+$glow-blue: 0 0 20px rgba(30, 115, 190, 0.3) !default;
+$glow-blue-lg: 0 0 40px rgba(30, 115, 190, 0.4) !default;
+$glow-orange: 0 0 20px rgba(255, 140, 50, 0.3) !default;
+
+/* ===== 圆角 ===== */
+$radius-sm: 8px !default;
+$radius-md: 12px !default;
+$radius-lg: 16px !default;
+$radius-xl: 20px !default;
+$radius-2xl: 24px !default;
+$radius-full: 9999px !default;
+
+/* ===== 过渡动画 ===== */
+$transition-fast: all 0.2s ease !default;
+$transition-base: all 0.3s ease !default;
+$transition-slow: all 0.4s ease !default;
+$transition-bounce: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275) !default;
+
+/* ===== 字体 ===== */
+$font-family-base: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", Arial, sans-serif !default;
+$font-weight-light: 300 !default;
+$font-weight-regular: 400 !default;
+$font-weight-medium: 500 !default;
+$font-weight-semibold: 600 !default;
+$font-weight-bold: 700 !default;
+
+$font-size-xs: 12px !default;
+$font-size-sm: 14px !default;
+$font-size-base: 16px !default;
+$font-size-lg: 18px !default;
+$font-size-xl: 20px !default;
+$font-size-2xl: 24px !default;
+$font-size-3xl: 28px !default;
+$font-size-4xl: 32px !default;
+$font-size-5xl: 36px !default;
+$font-size-6xl: 42px !default;
+
+/* ===== 间距 ===== */
+$spacer-1: 10px !default;
+$spacer-2: 20px !default;
+$spacer-3: 30px !default;
+$spacer-4: 40px !default;
+$spacer-5: 50px !default;
+$spacer-6: 60px !default;
+$spacer-7: 70px !default;
+$spacer-8: 80px !default;
+$spacer-9: 90px !default;
+$spacer-10: 100px !default;
+
+/* ===== 布局 ===== */
+$header-height: 80px !default;
+$header-height-mobile: 70px !default;
+$container-max-width: 1200px !default;
+$container-padding: 20px !default;
+
+/* ===== 断点 ===== */
+$breakpoint-xs: 0 !default;
+$breakpoint-sm: 576px !default;
+$breakpoint-md: 768px !default;
+$breakpoint-lg: 992px !default;
+$breakpoint-xl: 1200px !default;
+$breakpoint-2xl: 1400px !default;
+
+/* ===== 断点映射 ===== */
+$breakpoints: (
+  'xs': $breakpoint-xs,
+  'sm': $breakpoint-sm,
+  'md': $breakpoint-md,
+  'lg': $breakpoint-lg,
+  'xl': $breakpoint-xl,
+  '2xl': $breakpoint-2xl
+) !default;
+
+/* ===== Z-index 层级 ===== */
+$z-index-base: 1 !default;
+$z-index-dropdown: 100 !default;
+$z-index-sticky: 1000 !default;
+$z-index-fixed: 1010 !default;
+$z-index-modal-backdrop: 1040 !default;
+$z-index-modal: 1050 !default;
+$z-index-popover: 1060 !default;
+$z-index-tooltip: 1070 !default;
+$z-index-toast: 3000 !default;

+ 1 - 0
zyuas-neo/src/assets/vue.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="37.07" height="36" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 198"><path fill="#41B883" d="M204.8 0H256L128 220.8L0 0h97.92L128 51.2L157.44 0h47.36Z"></path><path fill="#41B883" d="m0 0l128 220.8L256 0h-51.2L128 132.48L50.56 0H0Z"></path><path fill="#35495E" d="M50.56 0L128 133.12L204.8 0h-47.36L128 51.2L97.92 0H50.56Z"></path></svg>

+ 77 - 0
zyuas-neo/src/components/Footer.vue

@@ -0,0 +1,77 @@
+<template>
+  <footer class="footer">
+    <div class="container">
+      <div class="footer-content">
+        <div class="footer-section">
+          <h4>联系我们</h4>
+          <p>电话:400-xxx-xxxx</p>
+          <p>邮箱:info@zyuas.com</p>
+          <p>地址:上海市 xxx 区 xxx 路 xxx 号</p>
+        </div>
+        <div class="footer-section">
+          <h4>产品服务</h4>
+          <router-link to="/products/djiAircraft">大疆行业无人机</router-link>
+          <router-link to="/products/payloads">无人机负载</router-link>
+          <router-link to="/products/software">软件与服务</router-link>
+          <router-link to="/solutions">解决方案</router-link>
+        </div>
+        <div class="footer-section">
+          <h4>关于我们</h4>
+          <router-link to="/info">公司介绍</router-link>
+          <router-link to="/news">公司动态</router-link>
+          <router-link to="/contactus">联系我们</router-link>
+        </div>
+      </div>
+      <div class="footer-bottom">
+        <p>&copy; {{ currentYear }} 上海展域航空技术有限公司 版权所有</p>
+      </div>
+    </div>
+  </footer>
+</template>
+
+<script setup lang="ts">
+const currentYear: number = new Date().getFullYear()
+</script>
+
+<style scoped lang="css">
+.footer {
+  background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%);
+  color: rgba(255, 255, 255, 0.8);
+  padding: 60px 0 20px;
+  margin-top: auto;
+}
+
+.footer-content {
+  display: grid;
+  grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
+  gap: 40px;
+  margin-bottom: 40px;
+}
+
+.footer-section h4 {
+  font-size: 18px;
+  font-weight: 600;
+  color: #fff;
+  margin-bottom: 20px;
+}
+
+.footer-section p,
+.footer-section a {
+  font-size: 14px;
+  line-height: 2;
+  color: rgba(255, 255, 255, 0.7);
+  transition: var(--transition-base);
+}
+
+.footer-section a:hover {
+  color: var(--primary-light);
+}
+
+.footer-bottom {
+  border-top: 1px solid rgba(255, 255, 255, 0.1);
+  padding-top: 20px;
+  text-align: center;
+  font-size: 14px;
+  color: rgba(255, 255, 255, 0.5);
+}
+</style>

+ 89 - 0
zyuas-neo/src/components/GoTop.vue

@@ -0,0 +1,89 @@
+<template>
+  <transition name="fade">
+    <div v-show="visible" class="gotop" @click="scrollToTop">
+      <el-icon><ArrowUp /></el-icon>
+    </div>
+  </transition>
+</template>
+
+<script setup lang="ts">
+import { ref, onMounted, onUnmounted } from 'vue'
+import { ArrowUp } from '@element-plus/icons-vue'
+
+const visible = ref<boolean>(false)
+const threshold: number = 300
+
+const handleScroll = () => {
+  visible.value = window.scrollY > threshold
+}
+
+const scrollToTop = () => {
+  window.scrollTo({
+    top: 0,
+    behavior: 'smooth'
+  })
+}
+
+onMounted(() => {
+  window.addEventListener('scroll', handleScroll)
+})
+
+onUnmounted(() => {
+  window.removeEventListener('scroll', handleScroll)
+})
+</script>
+
+<style scoped lang="css">
+.gotop {
+  position: fixed;
+  right: 40px;
+  bottom: 60px;
+  width: 50px;
+  height: 50px;
+  background: var(--primary-gradient);
+  border-radius: 50%;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  cursor: pointer;
+  box-shadow: var(--shadow-md), var(--glow-blue);
+  transition: var(--transition-bounce);
+  z-index: 999;
+}
+
+.gotop:hover {
+  transform: translateY(-5px);
+  box-shadow: var(--shadow-lg), var(--glow-blue);
+}
+
+.gotop .el-icon {
+  font-size: 24px;
+  color: #fff;
+}
+
+/* 移动端适配 */
+@media screen and (max-width: 768px) {
+  .gotop {
+    right: 20px;
+    bottom: 40px;
+    width: 44px;
+    height: 44px;
+  }
+  
+  .gotop .el-icon {
+    font-size: 20px;
+  }
+}
+
+/* 过渡动画 */
+.fade-enter-active,
+.fade-leave-active {
+  transition: opacity 0.3s ease, transform 0.3s ease;
+}
+
+.fade-enter-from,
+.fade-leave-to {
+  opacity: 0;
+  transform: translateY(20px);
+}
+</style>

+ 532 - 0
zyuas-neo/src/components/Header.vue

@@ -0,0 +1,532 @@
+<template>
+  <header class="header">
+    <!-- 桌面端导航 -->
+    <nav class="header-nav">
+      <div class="nav-left">
+        <router-link to="/" class="header-logo">
+          <div class="logo-wrapper">
+            <div class="logo-glow"></div>
+            <img src="@/assets/images/logo_black.svg" alt="Logo" @error="handleLogoError">
+          </div>
+        </router-link>
+        <div class="header-company-name">
+          <div class="name-wrapper">
+            <span>上海展域航空技术有限公司</span>
+          </div>
+        </div>
+      </div>
+
+      <div class="nav-right">
+        <el-menu
+          :default-active="activeIndex"
+          mode="horizontal"
+          :ellipsis="false"
+          class="nav-menu"
+        >
+          <el-menu-item
+            v-for="(item, index) in navList"
+            :key="index"
+            :index="item.path"
+            @click="handleNavClick(index, item.path)"
+          >
+            <router-link :to="item.path" class="nav-link">
+              {{ item.name }}
+              <el-icon v-if="item.children.length > 0" class="nav-arrow">
+                <ArrowDown />
+              </el-icon>
+            </router-link>
+          </el-menu-item>
+        </el-menu>
+
+        <div class="nav-actions">
+          <router-link
+            v-for="(action, index) in actionList"
+            :key="index"
+            :to="action.path"
+            :class="['action-btn', action.type]"
+          >
+            {{ action.name }}
+          </router-link>
+        </div>
+      </div>
+    </nav>
+
+    <!-- 移动端导航 -->
+    <div class="header-mobile">
+      <router-link to="/" class="mobile-logo">
+        <img src="@/assets/images/logo_black.svg" alt="logo" @error="handleLogoError">
+      </router-link>
+      <div class="mobile-menu-trigger" @click="mobileMenuVisible = !mobileMenuVisible">
+        <span>{{ mobileMenuVisible ? '关闭' : '菜单' }}</span>
+        <el-icon><component :is="mobileMenuVisible ? 'Close' : 'Menu'" /></el-icon>
+      </div>
+
+      <transition name="slide-down">
+        <div v-show="mobileMenuVisible" class="mobile-menu">
+          <el-menu
+            :default-active="activeIndex"
+            class="mobile-menu-list"
+          >
+            <el-menu-item
+              v-for="(item, index) in navList"
+              :key="index"
+              :index="item.path"
+              :class="{ active: index === navIndex }"
+              @click="handleNavClick(index, item.path)"
+            >
+              <router-link :to="item.path" class="mobile-nav-link">
+                {{ item.name }}
+                <el-icon v-if="item.children.length > 0"><ArrowRight /></el-icon>
+              </router-link>
+            </el-menu-item>
+          </el-menu>
+        </div>
+      </transition>
+    </div>
+  </header>
+</template>
+
+<script setup lang="ts">
+import { ref, computed, onMounted } from 'vue'
+import type { RouteLocationNormalized } from 'vue-router'
+import { useRoute, useRouter } from 'vue-router'
+import { ArrowDown, ArrowRight, Menu, Close } from '@element-plus/icons-vue'
+import { navConfig, navActions } from '@/config/nav-config'
+import type { NavItem, NavAction } from '@/types/nav'
+
+const route = useRoute()
+const router = useRouter()
+
+const navList: NavItem[] = navConfig
+const actionList: NavAction[] = navActions
+const navIndex = ref<number>(parseInt(sessionStorage.getItem('navIndex') || '0'))
+const mobileMenuVisible = ref<boolean>(false)
+
+const activeIndex = computed(() => {
+  return route.path
+})
+
+const handleNavClick = (index: number, path: string) => {
+  navIndex.value = index
+  sessionStorage.setItem('navIndex', index.toString())
+  mobileMenuVisible.value = false
+}
+
+const handleLogoError = (e: Event) => {
+  const target = e.target as HTMLImageElement
+  target.src = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 50"><rect fill="%231e73be" width="200" height="50"/><text fill="white" x="50%" y="50%" dominant-baseline="middle" text-anchor="middle" font-size="14">ZYUAS</text></svg>'
+}
+
+onMounted(() => {
+  const currentIndex = sessionStorage.getItem('navIndex')
+  if (currentIndex) {
+    navIndex.value = parseInt(currentIndex)
+  }
+})
+</script>
+
+<style scoped lang="scss">
+@import '@/assets/styles/variables.scss';
+@import '@/assets/styles/mixins.scss';
+
+.header {
+  background: rgba(255, 255, 255, 0.95);
+  backdrop-filter: blur(10px);
+  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
+  position: fixed;
+  top: 0;
+  left: 0;
+  right: 0;
+  z-index: 1000;
+  border-bottom: 1px solid rgba(30, 115, 190, 0.1);
+}
+
+/* ===== 桌面端导航 ===== */
+.header-nav {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  height: 80px;
+  padding: 0;
+  max-width: 1200px;
+  margin: 0 auto;
+}
+
+.nav-left {
+  display: flex;
+  align-items: center;
+  gap: 16px;
+  flex-shrink: 0;
+}
+
+.nav-right {
+  display: flex;
+  align-items: center;
+  gap: 20px;
+  height: 80px;
+}
+
+/* Logo */
+.header-logo {
+  display: flex;
+  align-items: center;
+  text-decoration: none;
+  flex-shrink: 0;
+
+  .logo-wrapper {
+    position: relative;
+    display: inline-block;
+    padding: 8px 0 8px 8px;
+    border-radius: 12px;
+    transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+    overflow: visible;
+
+    .logo-glow {
+      position: absolute;
+      top: 50%;
+      left: 50%;
+      transform: translate(-50%, -50%) scale(0.6);
+      width: 70%;
+      height: 70%;
+      background: conic-gradient(
+        from 0deg,
+        rgba(255, 140, 50, 0),
+        rgba(255, 140, 50, 0.4),
+        rgba(255, 160, 80, 0.5),
+        rgba(255, 120, 40, 0.4),
+        rgba(255, 140, 50, 0)
+      );
+      border-radius: 12px;
+      filter: blur(12px);
+      opacity: 0;
+      transition: opacity 0.4s ease;
+      z-index: 0;
+      animation: rotate-glow 3s linear infinite;
+    }
+
+    &::before {
+      content: '';
+      position: absolute;
+      top: 0;
+      left: 0;
+      right: 0;
+      bottom: 0;
+      border-radius: 12px;
+      background: linear-gradient(
+        135deg,
+        rgba(255, 140, 50, 0.08),
+        rgba(255, 160, 80, 0.12),
+        rgba(255, 140, 50, 0.08)
+      );
+      opacity: 0;
+      transition: opacity 0.4s ease;
+      z-index: 1;
+    }
+
+    img {
+      position: relative;
+      z-index: 2;
+      height: 50px;
+      width: auto;
+      object-fit: contain;
+      filter: drop-shadow(0 2px 6px rgba(255, 140, 50, 0.2));
+      transition: transform 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+    }
+  }
+
+  &:hover .logo-wrapper {
+    transform: scale(1.08);
+  }
+
+  &:hover .logo-wrapper::before {
+    opacity: 1;
+  }
+
+  &:hover .logo-wrapper .logo-glow {
+    opacity: 1;
+  }
+
+  &:hover .logo-wrapper img {
+    transform: scale(1.05);
+    filter: drop-shadow(0 4px 12px rgba(255, 140, 50, 0.4));
+  }
+}
+
+@keyframes rotate-glow {
+  0% { transform: translate(-50%, -50%) scale(0.8) rotate(0deg); }
+  100% { transform: translate(-50%, -50%) scale(0.8) rotate(360deg); }
+}
+
+/* 公司名称 */
+.header-company-name {
+  display: flex;
+  align-items: center;
+  padding-left: 20px;
+  margin-left: 20px;
+  border-left: 1px solid rgba(30, 115, 190, 0.2);
+
+  .name-wrapper {
+    position: relative;
+    display: inline-block;
+    padding: 8px 16px;
+    border-radius: 12px;
+    transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+    overflow: hidden;
+
+    &::before {
+      content: '';
+      position: absolute;
+      top: 0;
+      left: 0;
+      right: 0;
+      bottom: 0;
+      border-radius: 12px;
+      background: linear-gradient(
+        135deg,
+        rgba(255, 140, 50, 0.08),
+        rgba(255, 160, 80, 0.12),
+        rgba(255, 140, 50, 0.08)
+      );
+      opacity: 0;
+      transition: opacity 0.4s ease;
+    }
+
+    span {
+      position: relative;
+      z-index: 2;
+      font-size: 20px;
+      font-weight: 600;
+      color: #806D61;
+      letter-spacing: 1px;
+      line-height: 1.4;
+      white-space: nowrap;
+      transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+    }
+  }
+
+  &:hover .name-wrapper {
+    transform: scale(1.03);
+  }
+
+  &:hover .name-wrapper::before {
+    opacity: 1;
+  }
+
+  &:hover .name-wrapper span {
+    color: #2c2c2c;
+  }
+}
+
+/* 导航菜单 */
+.nav-menu {
+  display: flex;
+  align-items: center;
+  height: 80px;
+  border-bottom: none !important;
+  background: transparent !important;
+
+  :deep(.el-menu) {
+    display: flex !important;
+    align-items: center !important;
+    height: 80px !important;
+    border-bottom: none !important;
+    border-right: none !important;
+    background: transparent !important;
+    line-height: normal !important;
+  }
+
+  :deep(.el-menu-item) {
+    display: flex !important;
+    align-items: center !important;
+    justify-content: center !important;
+    height: 80px !important;
+    min-width: auto !important;
+    padding: 0 18px !important;
+    border: none !important;
+    background: transparent !important;
+    white-space: nowrap;
+    line-height: normal !important;
+    float: none !important;
+
+    &.is-active {
+      background-color: rgba($primary-color, 0.05) !important;
+      color: $primary-color !important;
+    }
+  }
+}
+
+.nav-link {
+  display: inline-flex;
+  align-items: center;
+  gap: 6px;
+  color: $text-primary;
+  font-size: 15px;
+  font-weight: 500;
+  text-decoration: none;
+  transition: color 0.3s ease;
+
+  &:hover {
+    color: $primary-color;
+  }
+}
+
+.nav-arrow {
+  font-size: 12px;
+  transition: transform 0.3s ease;
+}
+
+.nav-menu :deep(.el-menu-item):hover .nav-arrow {
+  transform: rotate(180deg);
+}
+
+/* 导航操作按钮 */
+.nav-actions {
+  display: flex;
+  align-items: center;
+  gap: 12px;
+}
+
+.action-btn {
+  display: inline-flex;
+  align-items: center;
+  justify-content: center;
+  padding: 10px 24px;
+  font-size: 14px;
+  font-weight: 500;
+  border-radius: $radius-md;
+  text-decoration: none;
+  transition: all 0.3s ease;
+  white-space: nowrap;
+
+  &.primary {
+    background: $primary-gradient;
+    color: #fff;
+    box-shadow: $shadow-sm;
+
+    &:hover {
+      transform: translateY(-2px);
+      box-shadow: $shadow-md;
+      color: #fff;
+    }
+  }
+
+  &.secondary {
+    background: transparent;
+    color: $primary-color;
+    border: 1px solid $primary-color;
+
+    &:hover {
+      background: rgba($primary-color, 0.05);
+      color: $primary-dark;
+      border-color: $primary-dark;
+    }
+  }
+}
+
+/* ===== 移动端导航 ===== */
+.header-mobile {
+  display: none;
+}
+
+@media screen and (max-width: 997px) {
+  .header-nav {
+    display: none;
+  }
+
+  .header-company-name {
+    display: none;
+  }
+
+  .header-mobile {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    height: 70px;
+    padding: 0 16px;
+    background: rgba(255, 255, 255, 0.98);
+    backdrop-filter: blur(10px);
+    border-bottom: 1px solid rgba(30, 115, 190, 0.08);
+  }
+
+  .mobile-logo {
+    display: flex;
+    align-items: center;
+
+    img {
+      height: 45px;
+      width: auto;
+    }
+  }
+
+  .mobile-menu-trigger {
+    display: flex;
+    align-items: center;
+    gap: 8px;
+    padding: 8px 16px;
+    background: rgba(30, 115, 190, 0.95);
+    backdrop-filter: blur(10px);
+    border-radius: 8px;
+    color: #fff;
+    font-size: 14px;
+    font-weight: 500;
+    cursor: pointer;
+    transition: all 0.3s ease;
+
+    &:hover {
+      background: rgba(30, 115, 190, 1);
+    }
+  }
+
+  .mobile-menu {
+    position: absolute;
+    top: 70px;
+    left: 0;
+    right: 0;
+    background: rgba(255, 255, 255, 0.98);
+    backdrop-filter: blur(10px);
+    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
+    z-index: 999;
+  }
+
+  .mobile-menu-list {
+    border-bottom: none !important;
+
+    :deep(.el-menu-item) {
+      margin: 4px 12px;
+      border-radius: 10px;
+
+      &.is-active {
+        background-color: rgba(30, 115, 190, 0.1) !important;
+
+        .mobile-nav-link {
+          color: $primary-color !important;
+          font-weight: 600;
+        }
+      }
+    }
+
+    .mobile-nav-link {
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      width: 100%;
+      color: $text-primary;
+      font-size: 15px;
+      font-weight: 500;
+      text-decoration: none;
+    }
+  }
+}
+
+/* 过渡动画 */
+.slide-down-enter-active,
+.slide-down-leave-active {
+  transition: all 0.3s ease;
+}
+
+.slide-down-enter-from,
+.slide-down-leave-to {
+  transform: translateY(-10px);
+  opacity: 0;
+}
+</style>

+ 43 - 0
zyuas-neo/src/components/HelloWorld.vue

@@ -0,0 +1,43 @@
+<script setup>
+import { ref } from 'vue'
+
+defineProps({
+  msg: String,
+})
+
+const count = ref(0)
+</script>
+
+<template>
+  <h1>{{ msg }}</h1>
+
+  <div class="card">
+    <button type="button" @click="count++">count is {{ count }}</button>
+    <p>
+      Edit
+      <code>components/HelloWorld.vue</code> to test HMR
+    </p>
+  </div>
+
+  <p>
+    Check out
+    <a href="https://vuejs.org/guide/quick-start.html#local" target="_blank"
+      >create-vue</a
+    >, the official Vue + Vite starter
+  </p>
+  <p>
+    Learn more about IDE Support for Vue in the
+    <a
+      href="https://vuejs.org/guide/scaling-up/tooling.html#ide-support"
+      target="_blank"
+      >Vue Docs Scaling up Guide</a
+    >.
+  </p>
+  <p class="read-the-docs">Click on the Vite and Vue logos to learn more</p>
+</template>
+
+<style scoped>
+.read-the-docs {
+  color: #888;
+}
+</style>

+ 39 - 0
zyuas-neo/src/config/nav-config.ts

@@ -0,0 +1,39 @@
+/**
+ * 导航配置
+ * Navigation Configuration
+ *
+ * 统一的路由和导航配置,确保 Router 和 Header 保持一致
+ */
+
+import type { NavItem, NavAction } from '@/types/nav'
+
+export const navConfig: NavItem[] = [
+  {
+    name: "行业无人机",
+    path: "/products",
+    children: [
+      { name: "无人机解决方案", path: "/solutions" },
+      { name: "无人机", path: "/products/djiAircraft" },
+      { name: "无人机负载", path: "/products/payloads" },
+      { name: "软件与服务", path: "/products/software" },
+      { name: "软件定制开发", path: "/products/develop" }
+    ]
+  },
+  {
+    name: "AI 定制开发",
+    path: "/ai-development",
+    children: [
+      { name: "RAG", path: "/ai-development/rag" },
+      { name: "AI 应用开发", path: "/ai-development/app" }
+    ]
+  },
+  { name: "公司动态", path: "/news", children: [] },
+  { name: "公司介绍", path: "/info", children: [] },
+  // { name: "加入我们", path: "/joinus", children: [] },
+]
+
+// 导航右侧按钮配置
+export const navActions: NavAction[] = [
+  { name: "联系我们", path: "/contactus", type: "primary" },
+  // { name: "商城", path: "/store", type: "secondary" }
+]

+ 33 - 0
zyuas-neo/src/main.ts

@@ -0,0 +1,33 @@
+import { createApp } from 'vue'
+import { createPinia } from 'pinia'
+import ElementPlus from 'element-plus'
+import 'element-plus/dist/index.css'
+import 'element-plus/theme-chalk/dark/css-vars.css'
+import * as ElementPlusIconsVue from '@element-plus/icons-vue'
+import 'swiper/css'
+import 'swiper/css/pagination'
+import 'swiper/css/navigation'
+import 'animate.css'
+
+// SCSS 全局样式
+import './assets/styles/global.scss'
+
+import App from './App.vue'
+import router from './router'
+
+const app = createApp(App)
+const pinia = createPinia()
+
+// 注册 Element Plus 图标
+for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
+  app.component(key, component)
+}
+
+app.use(pinia)
+app.use(router)
+app.use(ElementPlus, {
+  size: 'default',
+  zIndex: 3000
+})
+
+app.mount('#app')

+ 134 - 0
zyuas-neo/src/router/index.ts

@@ -0,0 +1,134 @@
+import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'
+
+const routes: RouteRecordRaw[] = [
+  {
+    path: '/',
+    redirect: '/home'
+  },
+  {
+    path: '/home',
+    name: 'Home',
+    component: () => import('@/views/HomePage.vue'),
+    meta: { title: '首页' }
+  },
+  {
+    path: '/products',
+    component: () => import('@/views/Products/Index.vue'),
+    meta: { title: '产品与服务' },
+    redirect: '/products/djiAircraft',
+    children: [
+      {
+        path: 'djiAircraft',
+        name: 'DjiAircraft',
+        component: () => import('@/views/Products/DjiAircraft.vue'),
+        meta: { title: '大疆行业应用无人机' }
+      },
+      {
+        path: 'payloads',
+        name: 'Payloads',
+        component: () => import('@/views/Products/Payloads.vue'),
+        meta: { title: '无人机负载' }
+      },
+      {
+        path: 'software',
+        name: 'Software',
+        component: () => import('@/views/Products/Software.vue'),
+        meta: { title: '软件与服务' }
+      },
+      {
+        path: 'develop',
+        name: 'Develop',
+        component: () => import('@/views/Products/Develop.vue'),
+        meta: { title: '软件定制开发' }
+      }
+    ]
+  },
+  {
+    path: '/solutions',
+    name: 'Solutions',
+    component: () => import('@/views/Solutions/Index.vue'),
+    meta: { title: '解决方案' }
+  },
+  {
+    path: '/solutions/surveying',
+    name: 'SolutionsSurveying',
+    component: () => import('@/views/Solutions/Surveying.vue'),
+    meta: { title: '基础测绘解决方案' }
+  },
+  {
+    path: '/solutions/building',
+    name: 'SolutionsBuilding',
+    component: () => import('@/views/Solutions/Building.vue'),
+    meta: { title: '建筑工程解决方案' }
+  },
+  {
+    path: '/solutions/safety',
+    name: 'SolutionsSafety',
+    component: () => import('@/views/Solutions/Safety.vue'),
+    meta: { title: '安全生产解决方案' }
+  },
+  {
+    path: '/solutions/emergency-rescue',
+    name: 'SolutionsEmergencyRescue',
+    component: () => import('@/views/Solutions/EmergencyRescue.vue'),
+    meta: { title: '应急救援解决方案' }
+  },
+  {
+    path: '/ai-development',
+    name: 'AIDevelopment',
+    component: () => import('@/views/AIDevelopment/Index.vue'),
+    meta: { title: 'AI 定制开发' }
+  },
+  {
+    path: '/ai-development/rag',
+    name: 'AIDevelopmentRAG',
+    component: () => import('@/views/AIDevelopment/RAG.vue'),
+    meta: { title: 'RAG 检索增强生成' }
+  },
+  {
+    path: '/ai-development/app',
+    name: 'AIDevelopmentApp',
+    component: () => import('@/views/AIDevelopment/AIApp.vue'),
+    meta: { title: 'AI 应用开发' }
+  },
+  {
+    path: '/news',
+    name: 'News',
+    component: () => import('@/views/News/Index.vue'),
+    meta: { title: '公司动态' }
+  },
+  {
+    path: '/info',
+    name: 'Info',
+    component: () => import('@/views/Info/Index.vue'),
+    meta: { title: '公司介绍' }
+  },
+  {
+    path: '/contactus',
+    name: 'ContactUs',
+    component: () => import('@/views/ContactUs/Index.vue'),
+    meta: { title: '联系我们' }
+  }
+]
+
+const router = createRouter({
+  history: createWebHistory(),
+  routes,
+  scrollBehavior(to, from, savedPosition) {
+    if (savedPosition) {
+      return savedPosition
+    } else {
+      return { top: 0 }
+    }
+  }
+})
+
+// 路由守卫 - 设置页面标题
+router.beforeEach((to, from, next) => {
+  if (to.meta.title) {
+    document.title = `${to.meta.title} - 上海展域航空技术有限公司`
+  }
+  next()
+})
+
+export default router

+ 79 - 0
zyuas-neo/src/style.css

@@ -0,0 +1,79 @@
+:root {
+  font-family: system-ui, Avenir, Helvetica, Arial, sans-serif;
+  line-height: 1.5;
+  font-weight: 400;
+
+  color-scheme: light dark;
+  color: rgba(255, 255, 255, 0.87);
+  background-color: #242424;
+
+  font-synthesis: none;
+  text-rendering: optimizeLegibility;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+a {
+  font-weight: 500;
+  color: #646cff;
+  text-decoration: inherit;
+}
+a:hover {
+  color: #535bf2;
+}
+
+body {
+  margin: 0;
+  display: flex;
+  place-items: center;
+  min-width: 320px;
+  min-height: 100vh;
+}
+
+h1 {
+  font-size: 3.2em;
+  line-height: 1.1;
+}
+
+button {
+  border-radius: 8px;
+  border: 1px solid transparent;
+  padding: 0.6em 1.2em;
+  font-size: 1em;
+  font-weight: 500;
+  font-family: inherit;
+  background-color: #1a1a1a;
+  cursor: pointer;
+  transition: border-color 0.25s;
+}
+button:hover {
+  border-color: #646cff;
+}
+button:focus,
+button:focus-visible {
+  outline: 4px auto -webkit-focus-ring-color;
+}
+
+.card {
+  padding: 2em;
+}
+
+#app {
+  max-width: 1280px;
+  margin: 0 auto;
+  padding: 2rem;
+  text-align: center;
+}
+
+@media (prefers-color-scheme: light) {
+  :root {
+    color: #213547;
+    background-color: #ffffff;
+  }
+  a:hover {
+    color: #747bff;
+  }
+  button {
+    background-color: #f9f9f9;
+  }
+}

+ 26 - 0
zyuas-neo/src/types/home.ts

@@ -0,0 +1,26 @@
+// 首页类型定义
+
+export interface SwiperSlide {
+  img: string
+  title: string
+  content: string
+}
+
+export interface SolutionItem {
+  path: string
+  title: string
+  description: string
+  image: string
+}
+
+export interface ServerItem {
+  icon: any
+  title: string
+  content: string
+}
+
+export interface TechItem {
+  icon: any
+  title: string
+  description: string
+}

+ 18 - 0
zyuas-neo/src/types/nav.ts

@@ -0,0 +1,18 @@
+// 导航配置类型定义
+
+export interface NavItem {
+  name: string
+  path: string
+  children: NavChildItem[]
+}
+
+export interface NavChildItem {
+  name: string
+  path: string
+}
+
+export interface NavAction {
+  name: string
+  path: string
+  type: 'primary' | 'secondary'
+}

+ 63 - 0
zyuas-neo/src/types/vite-env.d.ts

@@ -0,0 +1,63 @@
+/// <reference types="vite/client" />
+
+// Vue 3 全局类型扩展
+declare module '*.vue' {
+  import type { DefineComponent } from 'vue'
+  const component: DefineComponent<{}, {}, any>
+  export default component
+}
+
+// Element Plus 图标类型
+declare module '@element-plus/icons-vue' {
+  export const ArrowDown: any
+  export const ArrowRight: any
+  export const ArrowLeft: any
+  export const ArrowUp: any
+  export const Menu: any
+  export const Close: any
+  export const Connection: any
+  export const Star: any
+  export const Monitor: any
+  export const Picture: any
+  export const DataAnalysis: any
+  export const Service: any
+  export const Timer: any
+  export const Medal: any
+  export const UserFilled: any
+  export const Document: any
+  export const VideoPlay: any
+  export const Location: any
+  export const Grid: any
+  export const MapLocation: any
+  export const ChatDotRound: any
+  export const Lock: any
+  export const Cpu: any
+  export const Platform: any
+  export const Search: any
+  export const CircleCheckFilled: any
+  export const Setting: any
+  export const OfficeBuilding: any
+  export const Notebook: any
+  export const Reading: any
+  export const ChatLineRound: any
+  export const Phone: any
+  export const Message: any
+  export const Clock: any
+  export const Check: any
+  export const Finished: any
+  export const VideoCamera: any
+  export const FirstAidKit: any
+  export const Warning: any
+  export const DataLine: any
+  export const TrendCharts: any
+}
+
+// 环境变量
+interface ImportMetaEnv {
+  readonly VITE_APP_TITLE: string
+  readonly VITE_API_BASE_URL: string
+}
+
+interface ImportMeta {
+  readonly env: ImportMetaEnv
+}

+ 292 - 0
zyuas-neo/src/views/AIDevelopment/AIApp.vue

@@ -0,0 +1,292 @@
+<template>
+  <div class="ai-app-page">
+    <div class="page-banner">
+      <div class="container text-center">
+        <h1>AI 应用开发</h1>
+        <p>定制化 AI 智能体与应用开发服务</p>
+      </div>
+    </div>
+
+    <div class="container">
+      <section class="content-section">
+        <h2>服务概述</h2>
+        <p class="lead">基于大语言模型和 AI 技术,为企业提供定制化的 AI 应用开发服务,助力企业智能化转型。</p>
+        
+        <el-row :gutter="30">
+          <el-col :xs="24" :md="12">
+            <div class="image-wrapper">
+              <img src="@/assets/images/ai-dev.jpg" alt="AI 应用开发">
+            </div>
+          </el-col>
+          <el-col :xs="24" :md="12">
+            <h3>服务内容</h3>
+            <ul class="feature-list">
+              <li><el-icon class="check-icon"><CircleCheckFilled /></el-icon> <strong>AI 智能体开发</strong> - 定制化企业智能助手</li>
+              <li><el-icon class="check-icon"><CircleCheckFilled /></el-icon> <strong>工作流自动化</strong> - AI 驱动的业务流程优化</li>
+              <li><el-icon class="check-icon"><CircleCheckFilled /></el-icon> <strong>系统集成</strong> - 与现有系统无缝对接</li>
+              <li><el-icon class="check-icon"><CircleCheckFilled /></el-icon> <strong>持续优化</strong> - 模型迭代与性能优化</li>
+            </ul>
+          </el-col>
+        </el-row>
+      </section>
+
+      <section class="content-section">
+        <h2>技术优势</h2>
+        <el-row :gutter="30">
+          <el-col :xs="24" :sm="12" :md="6" v-for="(item, index) in features" :key="index">
+            <div class="feature-card">
+              <div class="feature-icon">
+                <el-icon><component :is="item.icon" /></el-icon>
+              </div>
+              <h4>{{ item.title }}</h4>
+              <p>{{ item.description }}</p>
+            </div>
+          </el-col>
+        </el-row>
+      </section>
+
+      <section class="content-section">
+        <h2>成功案例</h2>
+        <el-row :gutter="20">
+          <el-col :xs="12" :sm="6" v-for="(item, index) in cases" :key="index">
+            <div class="case-card">
+              <div class="case-icon">
+                <el-icon><component :is="item.icon" /></el-icon>
+              </div>
+              <h5>{{ item.title }}</h5>
+              <p>{{ item.description }}</p>
+            </div>
+          </el-col>
+        </el-row>
+      </section>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { ref, type Component } from 'vue'
+import { CircleCheckFilled, Cpu, Platform, DataAnalysis, Setting, OfficeBuilding, Monitor, Notebook } from '@element-plus/icons-vue'
+
+interface FeatureItem {
+  icon: Component
+  title: string
+  description: string
+}
+
+interface CaseItem {
+  icon: Component
+  title: string
+  description: string
+}
+
+const features: FeatureItem[] = [
+  { icon: Cpu, title: '大模型集成', description: '集成主流大语言模型能力' },
+  { icon: Platform, title: '多平台支持', description: 'Web/移动端/桌面端全覆盖' },
+  { icon: DataAnalysis, title: '数据分析', description: '深度数据分析与洞察' },
+  { icon: Setting, title: '灵活定制', description: '根据需求灵活定制功能' }
+]
+
+const cases: CaseItem[] = [
+  { icon: OfficeBuilding, title: '监理行业', description: '工程监理智能助手' },
+  { icon: Monitor, title: '测绘行业', description: '测绘数据智能分析' },
+  { icon: Notebook, title: '知识管理', description: '企业知识库管理' }
+]
+</script>
+
+<style lang="scss">
+.ai-app-page {
+  width: 100%;
+}
+
+.banner {
+  padding: 80px 0;
+  color: #fff;
+  background-image: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+  background-size: cover;
+  background-position: center;
+  
+  @include mobile {
+    padding: $spacer-4 0;
+  }
+  
+  h1 {
+    font-size: $font-size-4xl;
+    font-weight: $font-weight-bold;
+    margin-bottom: 10px;
+    letter-spacing: 2px;
+    
+    @include mobile {
+      font-size: $font-size-2xl;
+    }
+  }
+  
+  p {
+    font-size: $font-size-lg;
+    opacity: 0.9;
+    letter-spacing: 1px;
+    
+    @include mobile {
+      font-size: $font-size-sm;
+    }
+  }
+}
+
+.content-container {
+  padding: $spacer-6 0;
+}
+
+.content-section {
+  padding: $spacer-4 0;
+  border-bottom: 1px solid $border-color;
+  
+  &:last-child {
+    border-bottom: none;
+  }
+  
+  h2 {
+    font-size: $font-size-2xl;
+    font-weight: $font-weight-bold;
+    color: $text-primary;
+    margin-bottom: $spacer-2;
+  }
+  
+  .lead {
+    font-size: $font-size-base;
+    color: $text-regular;
+    margin-bottom: $spacer-3;
+  }
+  
+  h3 {
+    font-size: $font-size-xl;
+    font-weight: $font-weight-semibold;
+    color: $text-primary;
+    margin: $spacer-3 0;
+  }
+}
+
+.image-wrapper {
+  padding: $spacer-2;
+  
+  img {
+    width: 100%;
+    border-radius: $radius-lg;
+    box-shadow: $shadow-md;
+  }
+}
+
+.feature-list {
+  list-style: none;
+  padding: 0;
+  margin: $spacer-2 0;
+  
+  li {
+    display: flex;
+    align-items: flex-start;
+    gap: 10px;
+    font-size: $font-size-sm;
+    line-height: 2.2;
+    color: $text-tertiary;
+    margin-bottom: 10px;
+    
+    .check-icon {
+      color: #667eea;
+      font-size: $font-size-base;
+      flex-shrink: 0;
+      margin-top: 2px;
+    }
+    
+    strong {
+      color: $text-primary;
+    }
+  }
+}
+
+.feature-card {
+  background: #fff;
+  border: 1px solid $border-color;
+  border-radius: $radius-md;
+  padding: $spacer-3 $spacer-2;
+  text-align: center;
+  transition: $transition-bounce;
+  margin-bottom: $spacer-3;
+  
+  &:hover {
+    box-shadow: $shadow-md;
+    transform: translateY(-5px);
+  }
+  
+  .feature-icon {
+    width: 60px;
+    height: 60px;
+    margin: 0 auto $spacer-2;
+    background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+    border-radius: 50%;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    
+    .el-icon {
+      font-size: 24px;
+      color: #fff;
+    }
+  }
+  
+  h4 {
+    font-size: $font-size-base;
+    font-weight: $font-weight-semibold;
+    color: $text-primary;
+    margin-bottom: 10px;
+  }
+  
+  p {
+    font-size: $font-size-sm;
+    line-height: 1.6;
+    color: $text-tertiary;
+    margin: 0;
+  }
+}
+
+.case-card {
+  background: #fff;
+  border: 1px solid $border-color;
+  border-radius: $radius-md;
+  padding: $spacer-3 $spacer-2;
+  text-align: center;
+  transition: $transition-bounce;
+  margin-bottom: $spacer-3;
+  
+  &:hover {
+    box-shadow: $shadow-md;
+    transform: translateY(-3px);
+  }
+  
+  .case-icon {
+    width: 50px;
+    height: 50px;
+    margin: 0 auto $spacer-2;
+    background: rgba(#667eea, 0.1);
+    border-radius: 50%;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    
+    .el-icon {
+      font-size: 24px;
+      color: #667eea;
+    }
+  }
+  
+  h5 {
+    font-size: $font-size-base;
+    font-weight: $font-weight-semibold;
+    color: $text-primary;
+    margin-bottom: 8px;
+  }
+  
+  p {
+    font-size: $font-size-xs;
+    color: $text-muted;
+    margin: 0;
+  }
+}
+</style>

+ 142 - 0
zyuas-neo/src/views/AIDevelopment/Index.vue

@@ -0,0 +1,142 @@
+<template>
+  <div class="ai-development-page">
+    <div class="banner container-fluid text-center">
+      <h1>AI 定制开发</h1>
+      <p>AI Custom Development</p>
+    </div>
+
+    <div class="container section">
+      <el-row :gutter="30">
+        <el-col :xs="24" :md="12">
+          <el-card class="ai-card" shadow="hover">
+            <router-link to="/ai-development/rag" class="ai-link">
+              <div class="ai-icon">
+                <el-icon><DataAnalysis /></el-icon>
+              </div>
+              <h2>RAG 检索增强生成</h2>
+              <p>基于企业私有知识库的智能问答系统</p>
+            </router-link>
+          </el-card>
+        </el-col>
+        <el-col :xs="24" :md="12">
+          <el-card class="ai-card" shadow="hover">
+            <router-link to="/ai-development/app" class="ai-link">
+              <div class="ai-icon">
+                <el-icon><Platform /></el-icon>
+              </div>
+              <h2>AI 应用开发</h2>
+              <p>定制化 AI 智能体与应用开发服务</p>
+            </router-link>
+          </el-card>
+        </el-col>
+      </el-row>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { DataAnalysis, Platform } from '@element-plus/icons-vue'
+</script>
+
+<style lang="scss">
+.ai-development-page {
+  width: 100%;
+}
+
+.banner {
+  padding: 80px 0;
+  color: #fff;
+  background-image: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+  background-size: cover;
+  background-position: center;
+  
+  @include mobile {
+    padding: $spacer-4 0;
+  }
+  
+  h1 {
+    font-size: $font-size-3xl;
+    font-weight: $font-weight-bold;
+    margin-bottom: 10px;
+    letter-spacing: 2px;
+  }
+  
+  p {
+    font-size: $font-size-base;
+    opacity: 0.8;
+    letter-spacing: 1px;
+  }
+}
+
+.section {
+  padding: $spacer-6 0;
+}
+
+.ai-card {
+  margin-bottom: $spacer-3;
+  border-radius: $radius-lg;
+  overflow: hidden;
+  height: 300px;
+  
+  :deep(.el-card__body) {
+    padding: 0;
+    height: 100%;
+  }
+}
+
+.ai-link {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  height: 100%;
+  padding: $spacer-4;
+  text-decoration: none;
+  color: inherit;
+  background: linear-gradient(135deg, #f5f7fa 0%, #e4e9f2 100%);
+  transition: $transition-bounce;
+  
+  &:hover {
+    background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+    color: #fff;
+  }
+}
+
+.ai-icon {
+  width: 80px;
+  height: 80px;
+  background: $primary-gradient;
+  border-radius: 50%;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  margin-bottom: $spacer-3;
+  transition: $transition-bounce;
+  
+  .el-icon {
+    font-size: 40px;
+    color: #fff;
+  }
+  
+  &:hover {
+    background: #fff;
+    transform: scale(1.1);
+    
+    .el-icon {
+      color: $primary-color;
+    }
+  }
+}
+
+.ai-link h2 {
+  font-size: $font-size-xl;
+  font-weight: 700;
+  margin-bottom: 12px;
+}
+
+.ai-link p {
+  font-size: $font-size-sm;
+  opacity: 0.8;
+  text-align: center;
+}
+</style>

+ 285 - 0
zyuas-neo/src/views/AIDevelopment/RAG.vue

@@ -0,0 +1,285 @@
+<template>
+  <div class="rag-page">
+    <div class="page-banner">
+      <div class="container text-center">
+        <h1>RAG 检索增强生成</h1>
+        <p>基于企业私有知识库的智能问答系统</p>
+      </div>
+    </div>
+
+    <div class="container">
+      <section class="content-section">
+        <h2>技术概述</h2>
+        <p class="lead">RAG(Retrieval-Augmented Generation)检索增强生成技术,结合企业私有知识库与大语言模型,为企业提供安全、可定制的 AI 问答服务。</p>
+        
+        <el-row :gutter="30">
+          <el-col :xs="24" :md="12">
+            <div class="image-wrapper">
+              <img src="@/assets/images/rag1.png" alt="RAG 技术">
+            </div>
+          </el-col>
+          <el-col :xs="24" :md="12">
+            <h3>核心价值</h3>
+            <ul class="feature-list">
+              <li><el-icon class="check-icon"><CircleCheckFilled /></el-icon> <strong>私有化部署</strong> - 数据完全本地化,保障信息安全</li>
+              <li><el-icon class="check-icon"><CircleCheckFilled /></el-icon> <strong>精准回答</strong> - 基于企业知识库,回答更专业</li>
+              <li><el-icon class="check-icon"><CircleCheckFilled /></el-icon> <strong>可追溯</strong> - 每个回答都可追溯到源文档</li>
+              <li><el-icon class="check-icon"><CircleCheckFilled /></el-icon> <strong>持续更新</strong> - 知识库可随时更新维护</li>
+            </ul>
+          </el-col>
+        </el-row>
+      </section>
+
+      <section class="content-section">
+        <h2>技术架构</h2>
+        <el-row :gutter="30">
+          <el-col :xs="24" :sm="12" :md="6" v-for="(item, index) in features" :key="index">
+            <div class="feature-card">
+              <div class="feature-icon">
+                <el-icon><component :is="item.icon" /></el-icon>
+              </div>
+              <h4>{{ item.title }}</h4>
+              <p>{{ item.description }}</p>
+            </div>
+          </el-col>
+        </el-row>
+      </section>
+
+      <section class="content-section">
+        <h2>应用场景</h2>
+        <el-row :gutter="20">
+          <el-col :xs="12" :sm="6" v-for="(item, index) in applications" :key="index">
+            <div class="application-card">
+              <div class="application-icon">
+                <el-icon><component :is="item.icon" /></el-icon>
+              </div>
+              <h5>{{ item.title }}</h5>
+            </div>
+          </el-col>
+        </el-row>
+      </section>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { ref, type Component } from 'vue'
+import { CircleCheckFilled, Document, Search, ChatDotRound, Lock, Reading, OfficeBuilding, ChatLineRound } from '@element-plus/icons-vue'
+
+interface FeatureItem {
+  icon: Component
+  title: string
+  description: string
+}
+
+interface ApplicationItem {
+  icon: Component
+  title: string
+}
+
+const features: FeatureItem[] = [
+  { icon: Document, title: '文档处理', description: '支持多种格式文档解析与向量化' },
+  { icon: Search, title: '智能检索', description: '语义检索,快速定位相关知识' },
+  { icon: ChatDotRound, title: '对话生成', description: '基于检索结果生成精准回答' },
+  { icon: Lock, title: '安全可控', description: '私有化部署,数据不出域' }
+]
+
+const applications: ApplicationItem[] = [
+  { icon: OfficeBuilding, title: '企业知识库' },
+  { icon: ChatLineRound, title: '智能客服' },
+  { icon: Reading, title: '培训教育' },
+  { icon: Document, title: '文档问答' }
+]
+</script>
+
+<style lang="scss">
+.rag-page {
+  width: 100%;
+}
+
+.banner {
+  padding: 80px 0;
+  color: #fff;
+  background-image: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+  background-size: cover;
+  background-position: center;
+  
+  @include mobile {
+    padding: $spacer-4 0;
+  }
+  
+  h1 {
+    font-size: $font-size-4xl;
+    font-weight: $font-weight-bold;
+    margin-bottom: 10px;
+    letter-spacing: 2px;
+    
+    @include mobile {
+      font-size: $font-size-2xl;
+    }
+  }
+  
+  p {
+    font-size: $font-size-lg;
+    opacity: 0.9;
+    letter-spacing: 1px;
+    
+    @include mobile {
+      font-size: $font-size-sm;
+    }
+  }
+}
+
+.content-container {
+  padding: $spacer-6 0;
+}
+
+.content-section {
+  padding: $spacer-4 0;
+  border-bottom: 1px solid $border-color;
+  
+  &:last-child {
+    border-bottom: none;
+  }
+  
+  h2 {
+    font-size: $font-size-2xl;
+    font-weight: $font-weight-bold;
+    color: $text-primary;
+    margin-bottom: $spacer-2;
+  }
+  
+  .lead {
+    font-size: $font-size-base;
+    color: $text-regular;
+    margin-bottom: $spacer-3;
+  }
+  
+  h3 {
+    font-size: $font-size-xl;
+    font-weight: $font-weight-semibold;
+    color: $text-primary;
+    margin: $spacer-3 0;
+  }
+}
+
+.image-wrapper {
+  padding: $spacer-2;
+  
+  img {
+    width: 100%;
+    border-radius: $radius-lg;
+    box-shadow: $shadow-md;
+  }
+}
+
+.feature-list {
+  list-style: none;
+  padding: 0;
+  margin: $spacer-2 0;
+  
+  li {
+    display: flex;
+    align-items: flex-start;
+    gap: 10px;
+    font-size: $font-size-sm;
+    line-height: 2.2;
+    color: $text-tertiary;
+    margin-bottom: 10px;
+    
+    .check-icon {
+      color: #667eea;
+      font-size: $font-size-base;
+      flex-shrink: 0;
+      margin-top: 2px;
+    }
+    
+    strong {
+      color: $text-primary;
+    }
+  }
+}
+
+.feature-card {
+  background: #fff;
+  border: 1px solid $border-color;
+  border-radius: $radius-md;
+  padding: $spacer-3 $spacer-2;
+  text-align: center;
+  transition: $transition-bounce;
+  margin-bottom: $spacer-3;
+  
+  &:hover {
+    box-shadow: $shadow-md;
+    transform: translateY(-5px);
+  }
+  
+  .feature-icon {
+    width: 60px;
+    height: 60px;
+    margin: 0 auto $spacer-2;
+    background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+    border-radius: 50%;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    
+    .el-icon {
+      font-size: 24px;
+      color: #fff;
+    }
+  }
+  
+  h4 {
+    font-size: $font-size-base;
+    font-weight: $font-weight-semibold;
+    color: $text-primary;
+    margin-bottom: 10px;
+  }
+  
+  p {
+    font-size: $font-size-sm;
+    line-height: 1.6;
+    color: $text-tertiary;
+    margin: 0;
+  }
+}
+
+.application-card {
+  background: #fff;
+  border: 1px solid $border-color;
+  border-radius: $radius-md;
+  padding: $spacer-3 $spacer-2;
+  text-align: center;
+  transition: $transition-bounce;
+  margin-bottom: $spacer-3;
+  
+  &:hover {
+    box-shadow: $shadow-md;
+    transform: translateY(-3px);
+  }
+  
+  .application-icon {
+    width: 50px;
+    height: 50px;
+    margin: 0 auto $spacer-2;
+    background: rgba(#667eea, 0.1);
+    border-radius: 50%;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    
+    .el-icon {
+      font-size: 24px;
+      color: #667eea;
+    }
+  }
+  
+  h5 {
+    font-size: $font-size-sm;
+    font-weight: $font-weight-semibold;
+    color: $text-primary;
+    margin: 0;
+  }
+}
+</style>

+ 315 - 0
zyuas-neo/src/views/ContactUs/Index.vue

@@ -0,0 +1,315 @@
+<template>
+  <div class="contact-page">
+    <div class="page-banner">
+      <div class="container text-center">
+        <h1>联系我们</h1>
+        <p>Contact Us</p>
+      </div>
+    </div>
+
+    <div class="container content-container">
+      <el-row :gutter="40">
+        <el-col :xs="24" :md="12">
+          <div class="contact-info">
+            <h2>联系方式</h2>
+            <p class="lead">如果您有任何问题或需求,欢迎随时联系我们。</p>
+
+            <div class="contact-list">
+              <div class="contact-item">
+                <div class="contact-icon">
+                  <el-icon><Phone /></el-icon>
+                </div>
+                <div class="contact-detail">
+                  <strong>电话</strong>
+                  <p>400-xxx-xxxx</p>
+                </div>
+              </div>
+
+              <div class="contact-item">
+                <div class="contact-icon">
+                  <el-icon><Message /></el-icon>
+                </div>
+                <div class="contact-detail">
+                  <strong>邮箱</strong>
+                  <p>info@zyuas.com</p>
+                </div>
+              </div>
+
+              <div class="contact-item">
+                <div class="contact-icon">
+                  <el-icon><Location /></el-icon>
+                </div>
+                <div class="contact-detail">
+                  <strong>地址</strong>
+                  <p>上海市 xxx 区 xxx 路 xxx 号</p>
+                </div>
+              </div>
+
+              <div class="contact-item">
+                <div class="contact-icon">
+                  <el-icon><Clock /></el-icon>
+                </div>
+                <div class="contact-detail">
+                  <strong>工作时间</strong>
+                  <p>周一至周五 9:00-18:00</p>
+                </div>
+              </div>
+            </div>
+
+            <div class="social-links">
+              <h3>关注我们</h3>
+              <div class="social-icons">
+                <div class="social-item">
+                  <img src="@/assets/images/weixin.png" alt="微信">
+                  <span>微信</span>
+                </div>
+                <div class="social-item">
+                  <img src="@/assets/images/weibo.png" alt="微博">
+                  <span>微博</span>
+                </div>
+              </div>
+            </div>
+          </div>
+        </el-col>
+
+        <el-col :xs="24" :md="12">
+          <div class="contact-form-wrapper">
+            <h2>在线留言</h2>
+            <el-form :model="form" :rules="rules" ref="formRef" label-position="top">
+              <el-form-item label="姓名" prop="name">
+                <el-input v-model="form.name" placeholder="请输入您的姓名" />
+              </el-form-item>
+
+              <el-form-item label="联系电话" prop="phone">
+                <el-input v-model="form.phone" placeholder="请输入您的联系电话" />
+              </el-form-item>
+
+              <el-form-item label="邮箱" prop="email">
+                <el-input v-model="form.email" placeholder="请输入您的邮箱" />
+              </el-form-item>
+
+              <el-form-item label="公司名称" prop="company">
+                <el-input v-model="form.company" placeholder="请输入您的公司名称" />
+              </el-form-item>
+
+              <el-form-item label="留言内容" prop="message">
+                <el-input v-model="form.message" type="textarea" :rows="5" placeholder="请输入您的留言内容" />
+              </el-form-item>
+
+              <el-form-item>
+                <el-button type="primary" @click="submitForm" :loading="loading" class="submit-btn">
+                  提交留言
+                </el-button>
+              </el-form-item>
+            </el-form>
+          </div>
+        </el-col>
+      </el-row>
+    </div>
+
+    <!-- 地图 -->
+    <div class="map-container">
+      <iframe src="https://map.baidu.com" frameborder="0" scrolling="no"></iframe>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { ref, reactive } from 'vue'
+import type { FormInstance, FormRules } from 'element-plus'
+import { Phone, Message, Location, Clock } from '@element-plus/icons-vue'
+import { ElMessage } from 'element-plus'
+
+const formRef = ref<FormInstance>()
+const loading = ref<boolean>(false)
+
+interface ContactForm {
+  name: string
+  phone: string
+  email: string
+  company: string
+  message: string
+}
+
+const form = reactive<ContactForm>({
+  name: '',
+  phone: '',
+  email: '',
+  company: '',
+  message: ''
+})
+
+const rules: FormRules = {
+  name: [{ required: true, message: '请输入您的姓名', trigger: 'blur' }],
+  phone: [{ required: true, message: '请输入您的联系电话', trigger: 'blur' }],
+  email: [
+    { required: true, message: '请输入您的邮箱', trigger: 'blur' },
+    { type: 'email', message: '请输入正确的邮箱格式', trigger: 'blur' }
+  ],
+  message: [{ required: true, message: '请输入留言内容', trigger: 'blur' }]
+}
+
+const submitForm = async () => {
+  if (!formRef.value) return
+
+  await formRef.value.validate((valid) => {
+    if (valid) {
+      loading.value = true
+      setTimeout(() => {
+        loading.value = false
+        ElMessage.success('留言提交成功,我们会尽快与您联系!')
+        form.name = ''
+        form.phone = ''
+        form.email = ''
+        form.company = ''
+        form.message = ''
+      }, 1000)
+    }
+  })
+}
+</script>
+
+<style lang="scss">
+@import '@/assets/styles/variables';
+@import '@/assets/styles/mixins';
+
+.contact-page {
+  width: 100%;
+}
+
+.contact-info {
+  padding: $spacer-3;
+
+  h2 {
+    font-size: $font-size-2xl;
+    font-weight: $font-weight-bold;
+    color: $text-primary;
+    margin-bottom: $spacer-2;
+  }
+
+  .lead {
+    font-size: $font-size-base;
+    color: $text-regular;
+    margin-bottom: $spacer-4;
+  }
+}
+
+.contact-list {
+  margin-bottom: $spacer-4;
+}
+
+.contact-item {
+  display: flex;
+  align-items: flex-start;
+  gap: 15px;
+  margin-bottom: $spacer-3;
+
+  .contact-icon {
+    width: 50px;
+    height: 50px;
+    background: rgba($primary-color, 0.1);
+    border-radius: 50%;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    flex-shrink: 0;
+
+    .el-icon {
+      font-size: 24px;
+      color: $primary-color;
+    }
+  }
+
+  .contact-detail {
+    flex: 1;
+
+    strong {
+      display: block;
+      font-size: $font-size-sm;
+      font-weight: $font-weight-semibold;
+      color: $text-primary;
+      margin-bottom: 4px;
+    }
+
+    p {
+      font-size: $font-size-sm;
+      color: $text-regular;
+      margin: 0;
+    }
+  }
+}
+
+.social-links {
+  padding-top: $spacer-3;
+  border-top: 1px solid $border-color;
+
+  h3 {
+    font-size: $font-size-lg;
+    font-weight: $font-weight-semibold;
+    color: $text-primary;
+    margin-bottom: $spacer-2;
+  }
+
+  .social-icons {
+    display: flex;
+    gap: $spacer-2;
+  }
+
+  .social-item {
+    text-align: center;
+
+    img {
+      width: 60px;
+      height: 60px;
+      margin-bottom: 8px;
+    }
+
+    span {
+      display: block;
+      font-size: $font-size-xs;
+      color: $text-muted;
+    }
+  }
+}
+
+.contact-form-wrapper {
+  background: #fff;
+  padding: $spacer-4;
+  border-radius: $radius-lg;
+  box-shadow: $shadow-md;
+
+  h2 {
+    font-size: $font-size-2xl;
+    font-weight: $font-weight-bold;
+    color: $text-primary;
+    margin-bottom: $spacer-3;
+  }
+}
+
+.submit-btn {
+  width: 100%;
+  padding: 14px 32px;
+  font-size: $font-size-base;
+  font-weight: $font-weight-semibold;
+}
+
+.map-container {
+  width: 100%;
+  height: 400px;
+
+  iframe {
+    width: 100%;
+    height: 100%;
+  }
+}
+
+@include mobile {
+  .contact-form-wrapper {
+    padding: $spacer-3;
+  }
+
+  .map-container {
+    height: 300px;
+  }
+}
+</style>

+ 921 - 0
zyuas-neo/src/views/HomePage.vue

@@ -0,0 +1,921 @@
+<template>
+  <div class="home-page">
+    <!-- 轮播图 -->
+    <section class="hero-section">
+      <div class="swiper hero-swiper">
+        <div class="swiper-wrapper">
+          <div class="swiper-slide" v-for="(item, index) in swiperList" :key="index">
+            <div class="slide-bg" :style="{ backgroundImage: `url(${item.img})` }"></div>
+            <div class="slide-overlay"></div>
+            <div class="slide-content container">
+              <h1 class="slide-title animate__animated animate__fadeInUp">{{ item.title }}</h1>
+              <p class="slide-subtitle animate__animated animate__fadeInUp animate__delay-1s">{{ item.content }}</p>
+            </div>
+          </div>
+        </div>
+        <div class="swiper-pagination"></div>
+        <div class="swiper-button-prev">
+          <el-icon><ArrowLeft /></el-icon>
+        </div>
+        <div class="swiper-button-next">
+          <el-icon><ArrowRight /></el-icon>
+        </div>
+      </div>
+    </section>
+
+    <!-- 解决方案 -->
+    <section class="solutions-section section">
+      <div class="container">
+        <div class="section-header">
+          <div class="section-tag">
+            <span class="tag-dot"></span>
+            <span>SOLUTIONS</span>
+          </div>
+          <h2 class="section-title">无人机行业解决方案</h2>
+          <p class="section-subtitle">Professional Solutions</p>
+        </div>
+
+        <el-row :gutter="30">
+          <el-col :xs="24" :sm="12" :md="6" v-for="(item, index) in solutionsList" :key="index">
+            <router-link :to="item.path" class="solution-card">
+              <div class="solution-image">
+                <img :src="item.image" :alt="item.title">
+                <div class="solution-overlay">
+                  <el-icon class="solution-icon"><Connection /></el-icon>
+                </div>
+              </div>
+              <div class="solution-content">
+                <h3>{{ item.title }}</h3>
+                <p class="ellipsis-2">{{ item.description }}</p>
+              </div>
+            </router-link>
+          </el-col>
+        </el-row>
+
+        <div class="text-center">
+          <router-link to="/solutions" class="btn-view-all">
+            查看更多解决方案
+            <el-icon><ArrowRight /></el-icon>
+          </router-link>
+        </div>
+      </div>
+    </section>
+
+    <!-- 关于我们 -->
+    <section class="about-section section">
+      <div class="container">
+        <el-row :gutter="60" align="middle">
+          <el-col :xs="24" :md="12">
+            <div class="about-image">
+              <div class="image-glow"></div>
+              <img src="@/assets/images/dji-dock2.png" alt="大疆行业应用无人机">
+            </div>
+          </el-col>
+          <el-col :xs="24" :md="12">
+            <div class="about-content">
+              <div class="section-tag">
+                <span class="tag-dot"></span>
+                <span>ABOUT US</span>
+              </div>
+              <h2 class="about-title">
+                关于我们
+                <small>大疆行业应用经销商</small>
+              </h2>
+              <div class="about-desc">
+                <p>依托深圳市大疆创新科技有限公司一流的研发团队和齐配的供应链生产系统支持。上海展域航空技术有限公司已经在上海地区开拓了专业级大疆无人机行业应用服务市场。</p>
+                <p>自 2025 年以来,随着人工智能和大语言模型的蓬勃兴起,展域航空为用户开发创造了一系列基于大模型的企业级智能体,专注于为企业提供私有化、安全、可定制的 AI 产品服务。并在监理行业、测绘行业取得多项成功案例和行业荣誉。</p>
+              </div>
+              <div class="about-stats">
+                <div class="stat-item">
+                  <div class="stat-number">10+</div>
+                  <div class="stat-label">行业经验</div>
+                </div>
+                <el-divider direction="vertical" class="stat-divider" />
+                <div class="stat-item">
+                  <div class="stat-number">50+</div>
+                  <div class="stat-label">成功案例</div>
+                </div>
+                <el-divider direction="vertical" class="stat-divider" />
+                <div class="stat-item">
+                  <div class="stat-number">24/7</div>
+                  <div class="stat-label">技术支持</div>
+                </div>
+              </div>
+            </div>
+          </el-col>
+        </el-row>
+      </div>
+    </section>
+
+    <!-- 联系我们 CTA -->
+    <section class="cta-section">
+      <div class="gradient-orb orb-1"></div>
+      <div class="gradient-orb orb-2"></div>
+      <div class="container">
+        <div class="glass-card">
+          <h1 class="cta-title">上海展域航空技术有限公司</h1>
+          <p class="cta-subtitle">您身边的无人机与 AI 解决方案专家</p>
+          <div class="cta-actions">
+            <router-link to="/contactus" class="btn-primary-glass">
+              <span>联系我们</span>
+              <el-icon><ArrowRight /></el-icon>
+            </router-link>
+            <router-link to="/solutions" class="btn-secondary-glass">
+              <span>了解更多</span>
+            </router-link>
+          </div>
+        </div>
+      </div>
+    </section>
+
+    <!-- 服务优势 -->
+    <section class="services-section section">
+      <div class="container">
+        <div class="section-header">
+          <div class="section-tag">
+            <span class="tag-dot"></span>
+            <span>SERVICES</span>
+          </div>
+          <h2 class="section-title">为什么选择我们的服务</h2>
+          <p class="section-subtitle">Professional Service Advantages</p>
+        </div>
+
+        <el-row :gutter="30">
+          <el-col :xs="24" :sm="12" :md="8" v-for="(item, index) in serverList" :key="index">
+            <div class="service-card">
+              <div class="card-glow"></div>
+              <div class="card-icon">
+                <el-icon><component :is="item.icon" /></el-icon>
+              </div>
+              <h3 class="card-title">{{ item.title }}</h3>
+              <div class="card-desc" v-html="item.content"></div>
+            </div>
+          </el-col>
+        </el-row>
+      </div>
+    </section>
+
+    <!-- 技术优势 -->
+    <section class="tech-advantages-section section">
+      <div class="gradient-bg"></div>
+      <div class="container">
+        <div class="section-header">
+          <div class="section-tag">
+            <span class="tag-dot"></span>
+            <span>ADVANTAGES</span>
+          </div>
+          <h2 class="section-title text-white">技术优势</h2>
+          <p class="section-subtitle text-white-50">Technical Advantages</p>
+        </div>
+        <el-row :gutter="30">
+          <el-col :xs="24" :sm="12" :md="6" v-for="(item, index) in techList" :key="index">
+            <div class="tech-card">
+              <div class="tech-icon">
+                <el-icon><component :is="item.icon" /></el-icon>
+              </div>
+              <h4 class="text-white">{{ item.title }}</h4>
+              <p class="text-white-70">{{ item.description }}</p>
+            </div>
+          </el-col>
+        </el-row>
+      </div>
+    </section>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { ref, onMounted, markRaw } from 'vue'
+import type { Component } from 'vue'
+import { ArrowLeft, ArrowRight, Connection, Star, Monitor, Picture, DataAnalysis, Service, Medal, Timer, UserFilled } from '@element-plus/icons-vue'
+import type { SwiperOptions } from 'swiper/types'
+import { Swiper } from 'swiper'
+import { Pagination, Navigation, Autoplay, EffectFade } from 'swiper/modules'
+import type { SwiperSlide, SolutionItem, ServerItem, TechItem } from '@/types/home'
+
+const swiperList = ref<SwiperSlide[]>([
+  {
+    img: new URL('@/assets/images/banner-home.jpg', import.meta.url).href,
+    title: '上海展域航空技术有限公司',
+    content: '您身边的无人机与 AI 解决方案专家'
+  },
+  {
+    img: new URL('@/assets/images/banner-dock-black.jpg', import.meta.url).href,
+    title: '大疆机场 2',
+    content: '轻担重任'
+  },
+  {
+    img: new URL('@/assets/images/banner-m350rtk.jpg', import.meta.url).href,
+    title: '大疆经纬 M350 RTK',
+    content: '满载实力,一往无前'
+  }
+])
+
+const solutionsList = ref<SolutionItem[]>([
+  {
+    path: '/solutions/surveying',
+    title: '基础测绘',
+    description: '快速进行大范围二维、三维建模,生成地形数据,降低外业成本',
+    image: new URL('@/assets/images/service1.jpg', import.meta.url).href
+  },
+  {
+    path: '/solutions/building',
+    title: '建筑工程',
+    description: '房屋建筑业(房建)和土木工程建筑业(基建)领域应用',
+    image: new URL('@/assets/images/service2.jpg', import.meta.url).href
+  },
+  {
+    path: '/solutions/safety',
+    title: '安全生产',
+    description: '提供可见光或红外热成像数据,全天候自动化安全巡检',
+    image: new URL('@/assets/images/service3.jpg', import.meta.url).href
+  },
+  {
+    path: '/solutions/emergency-rescue',
+    title: '应急救援',
+    description: '救援队伍使用无人机通过空中视角对灾情进行评估、研判',
+    image: new URL('@/assets/images/service4.jpg', import.meta.url).href
+  }
+])
+
+const serverList = ref<ServerItem[]>([
+  {
+    icon: markRaw(Service),
+    title: '售前服务',
+    content: '<p>由专业客服提供工作日全天人工服务负责疑难问题和故障受理</p>'
+  },
+  {
+    icon: markRaw(Timer),
+    title: '售后响应',
+    content: '<p>利用远程工具,故障产生后 2 小时内线上响应协助客户进行调试、解决故障</p>'
+  },
+  {
+    icon: markRaw(Medal),
+    title: '研发优势',
+    content: '<p>专业的技术工程师,负责提供解决方案和受理及定制化开发服务</p>'
+  }
+])
+
+const techList = ref<TechItem[]>([
+  {
+    icon: markRaw(Star),
+    title: '绿色环保',
+    description: '无人机作业零排放,符合可持续发展理念'
+  },
+  {
+    icon: markRaw(Monitor),
+    title: '高效作业',
+    description: '效率是传统人工方式的 5 至 10 倍'
+  },
+  {
+    icon: markRaw(Picture),
+    title: '精准测绘',
+    description: '实现 1:500 免像控高精度测绘'
+  },
+  {
+    icon: markRaw(DataAnalysis),
+    title: '智能处理',
+    description: 'AI 驱动的数据处理与分析'
+  }
+])
+
+onMounted(() => {
+  new Swiper('.hero-swiper', {
+    modules: [Pagination, Navigation, Autoplay, EffectFade],
+    loop: true,
+    effect: 'fade',
+    autoplay: {
+      delay: 4000,
+      disableOnInteraction: false
+    },
+    pagination: {
+      el: '.swiper-pagination',
+      clickable: true
+    },
+    navigation: {
+      nextEl: '.swiper-button-next',
+      prevEl: '.swiper-button-prev'
+    },
+    observer: true,
+    observeParents: true
+  } as SwiperOptions)
+})
+</script>
+
+<style lang="scss">
+.home-page {
+  width: 100%;
+}
+
+.section {
+  padding: $spacer-8 0;
+  
+  @include mobile {
+    padding: $spacer-6 0;
+  }
+}
+
+/* 轮播图 */
+.hero-section {
+  position: relative;
+  height: 600px;
+  
+  @include mobile {
+    height: 400px;
+  }
+}
+
+.hero-swiper {
+  width: 100%;
+  height: 100%;
+}
+
+.swiper-slide {
+  position: relative;
+  overflow: hidden;
+}
+
+.slide-bg {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  background-size: cover;
+  background-position: center;
+  transition: transform 0.5s ease;
+}
+
+.swiper-slide-active .slide-bg {
+  transform: scale(1.1);
+}
+
+.slide-overlay {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  background: linear-gradient(135deg, rgba(15, 23, 42, 0.7) 0%, rgba(15, 23, 42, 0.4) 100%);
+}
+
+.slide-content {
+  position: relative;
+  z-index: 10;
+  height: 100%;
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  align-items: center;
+  text-align: center;
+  color: #fff;
+}
+
+.slide-title {
+  font-size: $font-size-6xl;
+  font-weight: $font-weight-bold;
+  margin-bottom: 20px;
+  text-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
+  
+  @include mobile {
+    font-size: $font-size-2xl;
+  }
+}
+
+.slide-subtitle {
+  font-size: $font-size-lg;
+  letter-spacing: 3px;
+  opacity: 0.9;
+  
+  @include mobile {
+    font-size: $font-size-sm;
+  }
+}
+
+.swiper-button-prev,
+.swiper-button-next {
+  width: 50px;
+  height: 50px;
+  background: rgba(255, 255, 255, 0.1);
+  border-radius: 50%;
+  backdrop-filter: blur(10px);
+  border: 1px solid rgba(255, 255, 255, 0.2);
+  transition: $transition-base;
+  color: #fff;
+  
+  &:hover {
+    background: rgba(255, 255, 255, 0.25);
+    transform: scale(1.1);
+  }
+  
+  &::after {
+    content: '';
+    display: none;
+  }
+  
+  .el-icon {
+    font-size: 24px;
+  }
+}
+
+.swiper-pagination-bullet {
+  background: rgba(255, 255, 255, 0.5);
+  opacity: 1;
+  width: 10px;
+  height: 10px;
+  transition: $transition-base;
+  
+  &-active {
+    background: #fff;
+    width: 28px;
+    border-radius: $radius-sm;
+  }
+}
+
+/* 解决方案 */
+.solution-card {
+  display: block;
+  margin-bottom: $spacer-3;
+  background: #fff;
+  border-radius: $radius-lg;
+  overflow: hidden;
+  box-shadow: $shadow-md;
+  transition: $transition-bounce;
+  text-decoration: none;
+  color: inherit;
+  
+  &:hover {
+    transform: translateY(-10px);
+    box-shadow: $shadow-lg, $glow-blue-lg;
+  }
+}
+
+.solution-image {
+  position: relative;
+  height: 200px;
+  overflow: hidden;
+  
+  img {
+    width: 100%;
+    height: 100%;
+    object-fit: cover;
+    transition: transform 0.5s ease;
+  }
+  
+  &:hover img {
+    transform: scale(1.1);
+  }
+}
+
+.solution-overlay {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  background: rgba($primary-color, 0.8);
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  opacity: 0;
+  transition: $transition-base;
+  
+  &:hover {
+    opacity: 1;
+  }
+  
+  .solution-icon {
+    color: #fff;
+    font-size: 32px;
+  }
+}
+
+.solution-content {
+  padding: 25px;
+  
+  h3 {
+    font-size: $font-size-xl;
+    font-weight: $font-weight-semibold;
+    color: $text-primary;
+    margin-bottom: 12px;
+  }
+  
+  p {
+    font-size: $font-size-sm;
+    line-height: 1.6;
+    color: $text-tertiary;
+    margin: 0;
+  }
+}
+
+/* 关于我们 */
+.about-section {
+  background: $bg-lighter;
+}
+
+.about-image {
+  position: relative;
+  padding: $spacer-4;
+  text-align: center;
+  
+  .image-glow {
+    position: absolute;
+    top: 50%;
+    left: 50%;
+    transform: translate(-50%, -50%);
+    width: 80%;
+    height: 80%;
+    background: radial-gradient(circle, rgba($primary-color, 0.3) 0%, transparent 70%);
+    filter: blur(40px);
+    z-index: 0;
+    animation: pulse 3s ease-in-out infinite;
+  }
+  
+  img {
+    position: relative;
+    z-index: 1;
+    max-width: 100%;
+    filter: drop-shadow(0 20px 40px rgba(0, 0, 0, 0.15));
+    transition: transform 0.5s ease;
+    
+    &:hover {
+      transform: translateY(-10px);
+    }
+  }
+}
+
+@keyframes pulse {
+  0%, 100% { 
+    opacity: 0.5; 
+    transform: translate(-50%, -50%) scale(1); 
+  }
+  50% { 
+    opacity: 0.8; 
+    transform: translate(-50%, -50%) scale(1.1); 
+  }
+}
+
+.about-content {
+  padding: $spacer-4 $spacer-2;
+}
+
+.about-title {
+  font-size: $font-size-5xl;
+  font-weight: $font-weight-bold;
+  color: $text-primary;
+  margin-bottom: 24px;
+  line-height: 1.3;
+  
+  small {
+    display: block;
+    font-size: $font-size-base;
+    color: $text-muted;
+    margin-top: 12px;
+    font-weight: $font-weight-regular;
+  }
+  
+  @include mobile {
+    font-size: $font-size-3xl;
+  }
+}
+
+.about-desc {
+  p {
+    font-size: $font-size-base;
+    line-height: 2;
+    color: $text-regular;
+    margin-bottom: 20px;
+    
+    @include mobile {
+      font-size: $font-size-sm;
+    }
+  }
+}
+
+.about-stats {
+  display: flex;
+  align-items: center;
+  gap: $spacer-3;
+  margin-top: $spacer-4;
+  padding-top: $spacer-4;
+  border-top: 1px solid $border-color;
+  
+  @include mobile {
+    flex-wrap: wrap;
+    gap: $spacer-2;
+  }
+}
+
+.stat-item {
+  text-align: center;
+}
+
+.stat-number {
+  font-size: $font-size-2xl;
+  font-weight: $font-weight-bold;
+  @include text-gradient;
+}
+
+.stat-label {
+  font-size: $font-size-sm;
+  color: $text-muted;
+  margin-top: 8px;
+}
+
+.stat-divider {
+  height: 40px;
+  
+  @include mobile {
+    display: none;
+  }
+}
+
+/* CTA 区域 */
+.cta-section {
+  position: relative;
+  overflow: hidden;
+  padding: 120px 0;
+  background: linear-gradient(135deg, #1e3c72 0%, #2a5298 50%, #764ba2 100%);
+  
+  @include mobile {
+    padding: $spacer-8 $spacer-2;
+  }
+}
+
+.gradient-orb {
+  position: absolute;
+  border-radius: 50%;
+  filter: blur(80px);
+  opacity: 0.5;
+  animation: float 6s ease-in-out infinite;
+  
+  &.orb-1 {
+    width: 400px;
+    height: 400px;
+    background: radial-gradient(circle, rgba(99, 102, 241, 0.6) 0%, transparent 70%);
+    top: -100px;
+    left: -100px;
+  }
+  
+  &.orb-2 {
+    width: 300px;
+    height: 300px;
+    background: radial-gradient(circle, rgba(168, 85, 247, 0.5) 0%, transparent 70%);
+    bottom: -50px;
+    right: -50px;
+    animation-delay: 2s;
+  }
+}
+
+@keyframes float {
+  0%, 100% { transform: translate(0, 0); }
+  50% { transform: translate(30px, 40px); }
+}
+
+.glass-card {
+  position: relative;
+  z-index: 10;
+  display: inline-block;
+  padding: 60px 80px;
+  background: rgba(255, 255, 255, 0.1);
+  border: 1px solid rgba(255, 255, 255, 0.2);
+  border-radius: $radius-2xl;
+  backdrop-filter: blur(20px);
+  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.2);
+  
+  @include mobile {
+    padding: $spacer-4 $spacer-2;
+    width: 100%;
+  }
+}
+
+.cta-title {
+  font-size: $font-size-5xl;
+  font-weight: $font-weight-bold;
+  color: #fff;
+  margin-bottom: 16px;
+  letter-spacing: 2px;
+  
+  @include mobile {
+    font-size: $font-size-2xl;
+  }
+}
+
+.cta-subtitle {
+  font-size: $font-size-lg;
+  color: rgba(255, 255, 255, 0.8);
+  margin-bottom: $spacer-4;
+  letter-spacing: 3px;
+  
+  @include mobile {
+    font-size: $font-size-sm;
+  }
+}
+
+.cta-actions {
+  display: flex;
+  gap: $spacer-2;
+  justify-content: center;
+  
+  @include mobile {
+    flex-direction: column;
+  }
+}
+
+.btn-primary-glass {
+  display: inline-flex;
+  align-items: center;
+  gap: 8px;
+  padding: 16px 40px;
+  background: #fff;
+  color: #1e3c72;
+  border: none;
+  border-radius: $radius-md;
+  font-size: $font-size-base;
+  font-weight: $font-weight-semibold;
+  cursor: pointer;
+  transition: $transition-base;
+  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.2);
+  text-decoration: none;
+  
+  &:hover {
+    transform: translateY(-3px);
+    box-shadow: 0 8px 30px rgba(0, 0, 0, 0.3);
+    color: #1e3c72;
+  }
+}
+
+.btn-secondary-glass {
+  display: inline-flex;
+  align-items: center;
+  gap: 8px;
+  padding: 16px 40px;
+  background: transparent;
+  color: #fff;
+  border: 2px solid rgba(255, 255, 255, 0.5);
+  border-radius: $radius-md;
+  font-size: $font-size-base;
+  font-weight: $font-weight-semibold;
+  cursor: pointer;
+  transition: $transition-base;
+  text-decoration: none;
+  
+  &:hover {
+    background: rgba(255, 255, 255, 0.1);
+    border-color: #fff;
+    transform: translateY(-3px);
+    color: #fff;
+  }
+}
+
+/* 服务卡片 */
+.service-card {
+  position: relative;
+  padding: $spacer-4 $spacer-3;
+  margin-bottom: $spacer-3;
+  background: rgba(255, 255, 255, 0.8);
+  border: 1px solid rgba(255, 255, 255, 0.5);
+  border-radius: $radius-xl;
+  backdrop-filter: blur(10px);
+  box-shadow: $shadow-md;
+  transition: $transition-bounce;
+  overflow: hidden;
+  
+  &:hover {
+    transform: translateY(-10px);
+    box-shadow: $shadow-lg, $glow-blue-lg;
+  }
+  
+  .card-glow {
+    position: absolute;
+    top: 0;
+    left: -100%;
+    width: 100%;
+    height: 100%;
+    background: linear-gradient(90deg, transparent, rgba($primary-color, 0.1), transparent);
+    transition: left 0.6s ease;
+    
+    &:hover {
+      left: 100%;
+    }
+  }
+}
+
+.card-icon {
+  width: 80px;
+  height: 80px;
+  margin: 0 auto 24px;
+  background: linear-gradient(135deg, rgba($primary-color, 0.1) 0%, rgba($primary-light, 0.1) 100%);
+  border-radius: $radius-lg;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  transition: $transition-base;
+  
+  &:hover {
+    background: $primary-gradient;
+    transform: scale(1.1);
+    
+    .el-icon {
+      color: #fff;
+    }
+  }
+  
+  .el-icon {
+    font-size: 36px;
+    color: $primary-color;
+    transition: $transition-base;
+  }
+}
+
+.card-title {
+  font-size: $font-size-xl;
+  font-weight: $font-weight-semibold;
+  color: $text-primary;
+  text-align: center;
+  margin-bottom: 16px;
+}
+
+.card-desc {
+  font-size: $font-size-sm;
+  line-height: 1.8;
+  color: $text-regular;
+  text-align: center;
+  
+  p {
+    margin: 0;
+  }
+}
+
+/* 技术优势 */
+.tech-advantages-section {
+  position: relative;
+  overflow: hidden;
+  background: $bg-dark;
+  
+  .gradient-bg {
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    background: 
+      radial-gradient(circle at 20% 50%, rgba(99, 102, 241, 0.15) 0%, transparent 50%),
+      radial-gradient(circle at 80% 80%, rgba(168, 85, 247, 0.15) 0%, transparent 50%);
+  }
+  
+  .section-header {
+    position: relative;
+    z-index: 10;
+  }
+}
+
+.tech-card {
+  padding: $spacer-4 $spacer-3;
+  margin-bottom: $spacer-3;
+  background: rgba(255, 255, 255, 0.05);
+  border: 1px solid rgba(255, 255, 255, 0.1);
+  border-radius: $radius-xl;
+  backdrop-filter: blur(10px);
+  text-align: center;
+  transition: $transition-slow;
+  
+  &:hover {
+    background: rgba(255, 255, 255, 0.1);
+    transform: translateY(-8px);
+    border-color: rgba($primary-color, 0.5);
+    box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);
+  }
+}
+
+.tech-icon {
+  width: 70px;
+  height: 70px;
+  margin: 0 auto 24px;
+  background: $primary-gradient;
+  border-radius: $radius-lg;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  box-shadow: 0 8px 20px rgba($primary-color, 0.4);
+  
+  .el-icon {
+    color: #fff;
+    font-size: 28px;
+  }
+}
+
+.tech-card h4 {
+  font-size: $font-size-lg;
+  font-weight: $font-weight-semibold;
+  margin-bottom: 12px;
+}
+
+.tech-card p {
+  font-size: $font-size-sm;
+  line-height: 1.6;
+}
+
+.text-white { color: #fff !important; }
+.text-white-50 { color: rgba(255, 255, 255, 0.5) !important; }
+.text-white-70 { color: rgba(255, 255, 255, 0.7) !important; }
+</style>

+ 340 - 0
zyuas-neo/src/views/Info/Index.vue

@@ -0,0 +1,340 @@
+<template>
+  <div class="info-page">
+    <div class="page-banner">
+      <div class="container text-center">
+        <h1>公司介绍</h1>
+        <p>About Us</p>
+      </div>
+    </div>
+
+    <div class="container">
+      <section class="about-section">
+        <h2>上海展域航空技术有限公司</h2>
+        <p class="lead">您身边的无人机与 AI 解决方案专家</p>
+        
+        <el-row :gutter="40">
+          <el-col :xs="24" :md="12">
+            <div class="about-text">
+              <p>上海展域航空技术有限公司是一家专注于无人机行业应用和 AI 技术开发的高新技术企业。作为大疆行业应用授权经销商,我们为客户提供专业的无人机产品、解决方案和技术服务。</p>
+              <p>公司依托深圳市大疆创新科技有限公司一流的研发团队和齐配的供应链生产系统支持,已经在上海地区开拓了专业级大疆无人机行业应用服务市场。</p>
+              <p>自 2025 年以来,随着人工智能和大语言模型的蓬勃兴起,展域航空为用户开发创造了一系列基于大模型的企业级智能体,专注于为企业提供私有化、安全、可定制的 AI 产品服务。并在监理行业、测绘行业取得多项成功案例和行业荣誉。</p>
+            </div>
+          </el-col>
+          <el-col :xs="24" :md="12">
+            <div class="about-image">
+              <img src="@/assets/images/about_img.png" alt="公司介绍">
+            </div>
+          </el-col>
+        </el-row>
+      </section>
+
+      <section class="stats-section">
+        <el-row :gutter="30">
+          <el-col :xs="12" :sm="6">
+            <div class="stat-card">
+              <div class="stat-number">10+</div>
+              <div class="stat-label">行业经验</div>
+            </div>
+          </el-col>
+          <el-col :xs="12" :sm="6">
+            <div class="stat-card">
+              <div class="stat-number">50+</div>
+              <div class="stat-label">成功案例</div>
+            </div>
+          </el-col>
+          <el-col :xs="12" :sm="6">
+            <div class="stat-card">
+              <div class="stat-number">100+</div>
+              <div class="stat-label">合作客户</div>
+            </div>
+          </el-col>
+          <el-col :xs="12" :sm="6">
+            <div class="stat-card">
+              <div class="stat-number">24/7</div>
+              <div class="stat-label">技术支持</div>
+            </div>
+          </el-col>
+        </el-row>
+      </section>
+
+      <section class="services-section">
+        <h2>我们的服务</h2>
+        <el-row :gutter="30">
+          <el-col :xs="24" :sm="12" :md="6" v-for="(item, index) in services" :key="index">
+            <div class="service-card">
+              <div class="service-icon">
+                <el-icon><component :is="item.icon" /></el-icon>
+              </div>
+              <h4>{{ item.title }}</h4>
+              <p>{{ item.description }}</p>
+            </div>
+          </el-col>
+        </el-row>
+      </section>
+
+      <section class="contact-section">
+        <h2>联系我们</h2>
+        <div class="contact-info">
+          <div class="contact-item">
+            <el-icon><Phone /></el-icon>
+            <div>
+              <strong>电话</strong>
+              <p>400-xxx-xxxx</p>
+            </div>
+          </div>
+          <div class="contact-item">
+            <el-icon><Message /></el-icon>
+            <div>
+              <strong>邮箱</strong>
+              <p>info@zyuas.com</p>
+            </div>
+          </div>
+          <div class="contact-item">
+            <el-icon><Location /></el-icon>
+            <div>
+              <strong>地址</strong>
+              <p>上海市 xxx 区 xxx 路 xxx 号</p>
+            </div>
+          </div>
+        </div>
+      </section>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { ref } from 'vue'
+import type { Component } from 'vue'
+import { Location, UserFilled, VideoPlay, DataAnalysis, Phone, Message } from '@element-plus/icons-vue'
+
+interface ServiceItem {
+  icon: Component
+  title: string
+  description: string
+}
+
+const services: ServiceItem[] = [
+  { icon: Location, title: '无人机销售', description: '大疆行业应用无人机及负载设备' },
+  { icon: UserFilled, title: '技术服务', description: '专业培训、技术支持、维修保养' },
+  { icon: VideoPlay, title: '解决方案', description: '行业应用解决方案定制' },
+  { icon: DataAnalysis, title: 'AI 开发', description: '基于大模型的 AI 应用开发' }
+]
+</script>
+
+<style lang="scss">
+.info-page {
+  width: 100%;
+}
+
+.banner {
+  padding: 80px 0;
+  color: #fff;
+  background-image: linear-gradient(135deg, $primary-color 0%, $primary-light 100%);
+  background-size: cover;
+  background-position: center;
+  
+  @include mobile {
+    padding: $spacer-4 0;
+  }
+  
+  h1 {
+    font-size: $font-size-4xl;
+    font-weight: $font-weight-bold;
+    margin-bottom: 10px;
+    letter-spacing: 2px;
+    
+    @include mobile {
+      font-size: $font-size-2xl;
+    }
+  }
+  
+  p {
+    font-size: $font-size-lg;
+    opacity: 0.8;
+    letter-spacing: 1px;
+  }
+}
+
+.content-container {
+  padding: $spacer-6 0;
+}
+
+.about-section {
+  padding: $spacer-4 0;
+  border-bottom: 1px solid $border-color;
+  
+  h2 {
+    font-size: $font-size-2xl;
+    font-weight: $font-weight-bold;
+    color: $text-primary;
+    margin-bottom: $spacer-2;
+  }
+  
+  .lead {
+    font-size: $font-size-lg;
+    color: $text-muted;
+    margin-bottom: $spacer-3;
+  }
+  
+  .about-text p {
+    font-size: $font-size-sm;
+    line-height: 2;
+    color: $text-regular;
+    margin-bottom: $spacer-2;
+    text-indent: 2em;
+  }
+  
+  .about-image {
+    img {
+      width: 100%;
+      border-radius: $radius-lg;
+      box-shadow: $shadow-md;
+    }
+  }
+}
+
+.stats-section {
+  padding: $spacer-5 0;
+  background: $bg-lighter;
+  margin: $spacer-4 0;
+}
+
+.stat-card {
+  text-align: center;
+  padding: $spacer-3 0;
+  
+  .stat-number {
+    font-size: $font-size-4xl;
+    font-weight: $font-weight-bold;
+    @include text-gradient;
+    margin-bottom: 8px;
+  }
+  
+  .stat-label {
+    font-size: $font-size-sm;
+    color: $text-muted;
+  }
+}
+
+.services-section {
+  padding: $spacer-5 0;
+  border-bottom: 1px solid $border-color;
+  
+  h2 {
+    font-size: $font-size-2xl;
+    font-weight: $font-weight-bold;
+    color: $text-primary;
+    margin-bottom: $spacer-4;
+    text-align: center;
+  }
+}
+
+.service-card {
+  background: #fff;
+  border: 1px solid $border-color;
+  border-radius: $radius-md;
+  padding: $spacer-3 $spacer-2;
+  text-align: center;
+  transition: $transition-bounce;
+  margin-bottom: $spacer-3;
+  
+  &:hover {
+    box-shadow: $shadow-md;
+    transform: translateY(-5px);
+  }
+  
+  .service-icon {
+    width: 60px;
+    height: 60px;
+    margin: 0 auto $spacer-2;
+    background: rgba($primary-color, 0.1);
+    border-radius: 50%;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    
+    .el-icon {
+      font-size: 28px;
+      color: $primary-color;
+    }
+  }
+  
+  h4 {
+    font-size: $font-size-base;
+    font-weight: $font-weight-semibold;
+    color: $text-primary;
+    margin-bottom: 10px;
+  }
+  
+  p {
+    font-size: $font-size-sm;
+    line-height: 1.6;
+    color: $text-tertiary;
+    margin: 0;
+  }
+}
+
+.contact-section {
+  padding: $spacer-5 0;
+  
+  h2 {
+    font-size: $font-size-2xl;
+    font-weight: $font-weight-bold;
+    color: $text-primary;
+    margin-bottom: $spacer-3;
+    text-align: center;
+  }
+}
+
+.contact-info {
+  display: flex;
+  justify-content: center;
+  gap: $spacer-4;
+  flex-wrap: wrap;
+}
+
+.contact-item {
+  display: flex;
+  align-items: center;
+  gap: 15px;
+  padding: $spacer-2 $spacer-3;
+  background: #fff;
+  border-radius: $radius-md;
+  box-shadow: $shadow-sm;
+  
+  .el-icon {
+    font-size: 32px;
+    color: $primary-color;
+  }
+  
+  strong {
+    display: block;
+    font-size: $font-size-sm;
+    font-weight: $font-weight-semibold;
+    color: $text-primary;
+    margin-bottom: 4px;
+  }
+  
+  p {
+    font-size: $font-size-sm;
+    color: $text-regular;
+    margin: 0;
+  }
+}
+
+@include mobile {
+  .content-container {
+    padding: $spacer-4 0;
+  }
+  
+  .contact-info {
+    flex-direction: column;
+    align-items: stretch;
+  }
+  
+  .contact-item {
+    justify-content: center;
+    text-align: center;
+  }
+}
+</style>

+ 217 - 0
zyuas-neo/src/views/News/Index.vue

@@ -0,0 +1,217 @@
+<template>
+  <div class="news-page">
+    <div class="page-banner">
+      <div class="container text-center">
+        <h1>公司动态</h1>
+        <p>News & Updates</p>
+      </div>
+    </div>
+
+    <div class="container">
+      <div class="news-list">
+        <div v-for="(item, index) in newsList" :key="index" class="news-card">
+          <div class="news-image">
+            <img :src="item.image" :alt="item.title">
+            <div class="news-date">{{ item.date }}</div>
+          </div>
+          <div class="news-content">
+            <h3>{{ item.title }}</h3>
+            <p class="ellipsis-3">{{ item.description }}</p>
+            <router-link :to="`/news/${item.id}`" class="btn-read-more">
+              阅读更多 <el-icon><ArrowRight /></el-icon>
+            </router-link>
+          </div>
+        </div>
+      </div>
+
+      <div class="pagination-wrapper">
+        <el-pagination layout="prev, pager, next" :total="100" />
+      </div>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { ref } from 'vue'
+import { ArrowRight } from '@element-plus/icons-vue'
+
+interface NewsItem {
+  id: number
+  title: string
+  description: string
+  date: string
+  image: string
+}
+
+const newsList = ref<NewsItem[]>([
+  {
+    id: 1,
+    title: '上海展域航空技术有限公司荣获大疆行业应用优秀经销商奖',
+    description: '在 2025 年度大疆行业应用合作伙伴大会上,上海展域航空技术有限公司凭借在测绘、监理等行业的出色表现,荣获优秀经销商奖项。',
+    date: '2025-02-20',
+    image: new URL('@/assets/images/banner-home.jpg', import.meta.url).href
+  },
+  {
+    id: 2,
+    title: '展域航空推出基于大模型的工程监理智能体',
+    description: '公司最新研发的工程监理智能体,基于大语言模型技术,可实现监理文档智能问答、施工问题自动识别等功能。',
+    date: '2025-02-15',
+    image: new URL('@/assets/images/banner-m350rtk.jpg', import.meta.url).href
+  },
+  {
+    id: 3,
+    title: '大疆机场 2 正式交付使用',
+    description: '随着大疆机场 2 的交付,我们的无人机自动化作业能力得到进一步提升,可为客户提供 7x24 小时不间断巡检服务。',
+    date: '2025-02-10',
+    image: new URL('@/assets/images/banner-dock-black.jpg', import.meta.url).href
+  }
+])
+</script>
+
+<style lang="scss">
+.news-page {
+  width: 100%;
+}
+
+.banner {
+  padding: 80px 0;
+  color: #fff;
+  background-image: linear-gradient(135deg, $primary-color 0%, $primary-light 100%);
+  background-size: cover;
+  background-position: center;
+  
+  @include mobile {
+    padding: $spacer-4 0;
+  }
+  
+  h1 {
+    font-size: $font-size-4xl;
+    font-weight: $font-weight-bold;
+    margin-bottom: 10px;
+    letter-spacing: 2px;
+    
+    @include mobile {
+      font-size: $font-size-2xl;
+    }
+  }
+  
+  p {
+    font-size: $font-size-lg;
+    opacity: 0.8;
+    letter-spacing: 1px;
+  }
+}
+
+.content-container {
+  padding: $spacer-6 0;
+}
+
+.news-list {
+  display: grid;
+  gap: $spacer-4;
+}
+
+.news-card {
+  display: flex;
+  background: #fff;
+  border-radius: $radius-lg;
+  overflow: hidden;
+  box-shadow: $shadow-md;
+  transition: $transition-bounce;
+  
+  &:hover {
+    box-shadow: $shadow-lg;
+    transform: translateY(-3px);
+  }
+  
+  @include mobile {
+    flex-direction: column;
+  }
+}
+
+.news-image {
+  position: relative;
+  width: 300px;
+  flex-shrink: 0;
+  overflow: hidden;
+  
+  @include mobile {
+    width: 100%;
+    height: 200px;
+  }
+  
+  img {
+    width: 100%;
+    height: 100%;
+    object-fit: cover;
+    transition: transform 0.5s ease;
+  }
+  
+  &:hover img {
+    transform: scale(1.1);
+  }
+  
+  .news-date {
+    position: absolute;
+    top: 15px;
+    left: 15px;
+    padding: 6px 12px;
+    background: rgba($primary-color, 0.9);
+    color: #fff;
+    font-size: $font-size-xs;
+    border-radius: $radius-sm;
+  }
+}
+
+.news-content {
+  padding: $spacer-3;
+  flex: 1;
+  
+  h3 {
+    font-size: $font-size-lg;
+    font-weight: $font-weight-semibold;
+    color: $text-primary;
+    margin-bottom: 12px;
+    line-height: 1.4;
+    
+    @include mobile {
+      font-size: $font-size-base;
+    }
+  }
+  
+  p {
+    font-size: $font-size-sm;
+    line-height: 1.8;
+    color: $text-regular;
+    margin-bottom: $spacer-2;
+  }
+}
+
+.btn-read-more {
+  display: inline-flex;
+  align-items: center;
+  gap: 6px;
+  color: $primary-color;
+  font-size: $font-size-sm;
+  font-weight: $font-weight-semibold;
+  text-decoration: none;
+  transition: $transition-base;
+  
+  &:hover {
+    gap: 10px;
+    color: $primary-dark;
+  }
+}
+
+.pagination-wrapper {
+  margin-top: $spacer-4;
+  display: flex;
+  justify-content: center;
+}
+
+@include mobile {
+  .content-container {
+    padding: $spacer-4 0;
+  }
+}
+</style>

+ 274 - 0
zyuas-neo/src/views/Products/Develop.vue

@@ -0,0 +1,274 @@
+<template>
+  <div class="develop-page">
+    <div class="page-header">
+      <div class="container text-center">
+        <h2>软件定制开发</h2>
+        <p>Custom Software Development</p>
+      </div>
+    </div>
+
+    <div class="container">
+      <div class="intro-section">
+        <h2>行业应用定制开发</h2>
+        <p class="lead">基于大疆 SDK 和行业需求,提供专业的软件定制开发服务。</p>
+        
+        <el-row :gutter="40">
+          <el-col :xs="24" :md="12">
+            <div class="intro-text">
+              <p>我们拥有专业的软件开发团队,熟悉大疆全套 SDK,可为客户提供基于无人机应用的软件定制开发服务。</p>
+              <p>从需求分析到产品交付,我们提供全流程的开发服务,确保软件产品完美契合您的业务需求。</p>
+            </div>
+          </el-col>
+          <el-col :xs="24" :md="12">
+            <div class="intro-image">
+              <img src="@/assets/images/api.png" alt="软件开发">
+            </div>
+          </el-col>
+        </el-row>
+      </div>
+
+      <section class="services-section">
+        <h2>开发服务内容</h2>
+        <el-row :gutter="30">
+          <el-col :xs="24" :sm="12" :md="6" v-for="(item, index) in services" :key="index">
+            <div class="service-card">
+              <div class="service-icon">
+                <el-icon><component :is="item.icon" /></el-icon>
+              </div>
+              <h4>{{ item.title }}</h4>
+              <p>{{ item.description }}</p>
+            </div>
+          </el-col>
+        </el-row>
+      </section>
+
+      <section class="process-section">
+        <h2>开发流程</h2>
+        <el-row :gutter="30">
+          <el-col :xs="24" :sm="12" :md="6" v-for="(item, index) in process" :key="index">
+            <div class="process-card">
+              <div class="process-number">{{ index + 1 }}</div>
+              <h4>{{ item.title }}</h4>
+              <p>{{ item.description }}</p>
+            </div>
+          </el-col>
+        </el-row>
+      </section>
+
+      <div class="contact-cta">
+        <h3>有定制开发需求?</h3>
+        <p>请联系我们的技术团队,获取详细的开发方案和报价。</p>
+        <router-link to="/contactus" class="btn-contact">
+          联系我们 <el-icon><ArrowRight /></el-icon>
+        </router-link>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { ref, type Component } from 'vue'
+import { ArrowRight, Monitor, Connection, DataAnalysis, Setting, Document, Timer, Check, Finished } from '@element-plus/icons-vue'
+
+interface ServiceItem {
+  icon: Component
+  title: string
+  description: string
+}
+
+interface ProcessItem {
+  icon: Component
+  title: string
+  description: string
+}
+
+const services: ServiceItem[] = [
+  { icon: Monitor, title: '地面站开发', description: '基于 Pilot 2 的定制化地面站' },
+  { icon: Connection, title: '云平台开发', description: 'FlightHub 2 定制化部署' },
+  { icon: DataAnalysis, title: '数据处理', description: 'Terra 二次开发' },
+  { icon: Setting, title: 'SDK 集成', description: 'MSDK/PSDK/OSDK 集成' }
+]
+
+const process: ProcessItem[] = [
+  { icon: Document, title: '需求分析', description: '深入了解业务需求' },
+  { icon: Timer, title: '方案设计', description: '制定技术方案' },
+  { icon: Check, title: '开发实施', description: '敏捷开发迭代' },
+  { icon: Finished, title: '交付运维', description: '持续技术支持' }
+]
+</script>
+
+<style lang="scss">
+.develop-page {
+  width: 100%;
+}
+
+.page-header {
+  padding: $spacer-6 0;
+  background: $bg-light;
+  margin-bottom: $spacer-4;
+  
+  h2 {
+    font-size: $font-size-3xl;
+    font-weight: $font-weight-bold;
+    color: $text-primary;
+    margin-bottom: 10px;
+  }
+  
+  p {
+    font-size: $font-size-base;
+    color: $text-muted;
+  }
+}
+
+.content-container {
+  padding: $spacer-6 0;
+}
+
+.intro-section {
+  padding: $spacer-4 0;
+  border-bottom: 1px solid $border-color;
+  
+  h2 {
+    font-size: $font-size-2xl;
+    font-weight: $font-weight-bold;
+    color: $text-primary;
+    margin-bottom: $spacer-2;
+  }
+  
+  .lead {
+    font-size: $font-size-lg;
+    color: $text-regular;
+    margin-bottom: $spacer-3;
+  }
+  
+  .intro-text p {
+    font-size: $font-size-sm;
+    line-height: 2;
+    color: $text-regular;
+    margin-bottom: $spacer-2;
+  }
+  
+  .intro-image {
+    img {
+      width: 100%;
+      border-radius: $radius-lg;
+      box-shadow: $shadow-md;
+    }
+  }
+}
+
+.services-section,
+.process-section {
+  padding: $spacer-5 0;
+  border-bottom: 1px solid $border-color;
+  
+  h2 {
+    font-size: $font-size-2xl;
+    font-weight: $font-weight-bold;
+    color: $text-primary;
+    margin-bottom: $spacer-4;
+    text-align: center;
+  }
+}
+
+.service-card,
+.process-card {
+  background: #fff;
+  border: 1px solid $border-color;
+  border-radius: $radius-md;
+  padding: $spacer-3 $spacer-2;
+  text-align: center;
+  transition: $transition-bounce;
+  margin-bottom: $spacer-3;
+  
+  &:hover {
+    box-shadow: $shadow-md;
+    transform: translateY(-5px);
+  }
+  
+  .service-icon,
+  .process-number {
+    width: 60px;
+    height: 60px;
+    margin: 0 auto $spacer-2;
+    background: rgba($primary-color, 0.1);
+    border-radius: 50%;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+  }
+  
+  .process-number {
+    font-size: $font-size-2xl;
+    font-weight: $font-weight-bold;
+    color: $primary-color;
+    background: rgba($primary-color, 0.15);
+  }
+  
+  .service-icon .el-icon {
+    font-size: 28px;
+    color: $primary-color;
+  }
+  
+  h4 {
+    font-size: $font-size-base;
+    font-weight: $font-weight-semibold;
+    color: $text-primary;
+    margin-bottom: 10px;
+  }
+  
+  p {
+    font-size: $font-size-sm;
+    line-height: 1.6;
+    color: $text-tertiary;
+    margin: 0;
+  }
+}
+
+.contact-cta {
+  padding: $spacer-5 $spacer-3;
+  text-align: center;
+  background: linear-gradient(135deg, rgba($primary-color, 0.05) 0%, rgba($primary-light, 0.05) 100%);
+  border-radius: $radius-lg;
+  margin-top: $spacer-4;
+  
+  h3 {
+    font-size: $font-size-xl;
+    font-weight: $font-weight-bold;
+    color: $text-primary;
+    margin-bottom: 10px;
+  }
+  
+  p {
+    font-size: $font-size-sm;
+    color: $text-regular;
+    margin-bottom: $spacer-2;
+  }
+  
+  .btn-contact {
+    display: inline-flex;
+    align-items: center;
+    gap: 8px;
+    padding: 14px 32px;
+    background: $primary-gradient;
+    color: #fff;
+    border: none;
+    border-radius: $radius-md;
+    font-size: $font-size-sm;
+    font-weight: $font-weight-semibold;
+    cursor: pointer;
+    transition: $transition-base;
+    text-decoration: none;
+    
+    &:hover {
+      transform: translateY(-3px);
+      box-shadow: $shadow-md;
+      color: #fff;
+      
+      .el-icon {
+        transform: translateX(4px);
+      }
+    }
+  }
+}
+</style>

+ 208 - 0
zyuas-neo/src/views/Products/DjiAircraft.vue

@@ -0,0 +1,208 @@
+<template>
+  <div class="dji-aircraft-page">
+    <div class="page-header">
+      <div class="container text-center">
+        <h2>大疆行业应用无人机</h2>
+        <p>灵活机动的视野实现更多可能的无人机飞行平台</p>
+      </div>
+    </div>
+
+    <div class="container">
+      <!-- 桌面端手风琴 -->
+      <div class="accordion-container hidden-xs">
+        <div 
+          v-for="(item, index) in aircraftList" 
+          :key="index"
+          class="accordion-item"
+          :class="{ active: activeIndex === index }"
+          :style="{ backgroundImage: `url(${item.backgroundImage})` }"
+          @mouseenter="activeIndex = index"
+        >
+          <p class="accordion-title">{{ item.title }}</p>
+        </div>
+      </div>
+
+      <!-- 移动端列表 -->
+      <div class="mobile-list visible-xs">
+        <div 
+          v-for="(item, index) in aircraftList" 
+          :key="index"
+          class="mobile-item"
+          @click="activeIndex = index"
+        >
+          <div class="mobile-item-image" :style="{ backgroundImage: `url(${item.backgroundImage})` }"></div>
+          <div class="mobile-item-content">
+            <h3>{{ item.title }}</h3>
+            <p>{{ item.subtitle }}</p>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { ref } from 'vue'
+
+interface Aircraft {
+  id: string
+  title: string
+  subtitle: string
+  backgroundImage: string
+}
+
+const activeIndex = ref<number>(0)
+
+const aircraftList = ref<Aircraft[]>([
+  {
+    id: 'section-1',
+    title: '大疆机场 2',
+    subtitle: '无人值守作业平台,坚守无人之境',
+    backgroundImage: new URL('@/assets/images/products1.png', import.meta.url).href
+  },
+  {
+    id: 'section-2',
+    title: 'Matrice 350 RTK',
+    subtitle: '满载实力,一往无前',
+    backgroundImage: new URL('@/assets/images/products2.png', import.meta.url).href
+  },
+  {
+    id: 'section-3',
+    title: 'Mavic 3 行业系列',
+    subtitle: '便携新秀 效率随行',
+    backgroundImage: new URL('@/assets/images/products3.png', import.meta.url).href
+  },
+  {
+    id: 'section-4',
+    title: '经纬 M30 系列',
+    subtitle: '背包里的旗舰机',
+    backgroundImage: new URL('@/assets/images/products4.png', import.meta.url).href
+  }
+])
+</script>
+
+<style lang="scss">
+.dji-aircraft-page {
+  width: 100%;
+}
+
+.page-header {
+  padding: $spacer-6 0;
+  background: $bg-light;
+  margin-bottom: $spacer-4;
+  
+  h2 {
+    font-size: $font-size-3xl;
+    font-weight: $font-weight-bold;
+    color: $text-primary;
+    margin-bottom: 10px;
+  }
+  
+  p {
+    font-size: $font-size-base;
+    color: $text-muted;
+  }
+}
+
+/* 桌面端手风琴 */
+.accordion-container {
+  display: flex;
+  justify-content: flex-start;
+  align-items: flex-start;
+  background: #000;
+  border-radius: $radius-lg;
+  overflow: hidden;
+}
+
+.accordion-item {
+  flex: 0 0 25%;
+  height: 500px;
+  transition: flex 0.5s ease;
+  background-repeat: no-repeat;
+  background-size: cover;
+  background-position: center center;
+  position: relative;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  cursor: pointer;
+  
+  &.active {
+    flex: 0 0 80%;
+    
+    &::after {
+      opacity: 1;
+    }
+  }
+  
+  &::after {
+    content: '';
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    background-color: rgba(0, 0, 0, 0.1);
+    z-index: 1;
+    opacity: 0;
+    transition: opacity 0.5s ease;
+  }
+  
+  .accordion-title {
+    font-family: $font-family-base;
+    font-weight: $font-weight-light;
+    color: #fff;
+    font-size: $font-size-xl;
+    z-index: 2;
+    position: relative;
+    text-align: center;
+  }
+  
+  @include tablet {
+    height: 400px;
+  }
+}
+
+/* 移动端列表 */
+.mobile-list {
+  display: none;
+}
+
+@include mobile {
+  .mobile-list {
+    display: block;
+  }
+  
+  .mobile-item {
+    margin-bottom: $spacer-3;
+    background: #fff;
+    border-radius: $radius-lg;
+    overflow: hidden;
+    box-shadow: $shadow-md;
+    cursor: pointer;
+  }
+  
+  .mobile-item-image {
+    height: 200px;
+    background-size: cover;
+    background-position: center;
+  }
+  
+  .mobile-item-content {
+    padding: $spacer-2;
+    
+    h3 {
+      font-size: $font-size-lg;
+      font-weight: $font-weight-semibold;
+      color: $text-primary;
+      margin-bottom: 8px;
+    }
+    
+    p {
+      font-size: $font-size-sm;
+      color: $text-muted;
+      margin: 0;
+    }
+  }
+}
+</style>

Some files were not shown because too many files changed in this diff