Files
webs/power_leasing/README.md
2025-09-26 16:40:38 +08:00

8.4 KiB
Raw Blame History

Power Leasing - 电商系统

一个基于 Vue 2 + Element UI 的轻量级电商系统,包含商品展示、购物车、结算等完整功能。

🚀 功能特性

核心功能

  • 商品列表页面 - 展示所有商品,支持添加到购物车
  • 商品详情页面 - 商品详细信息展示,数量选择
  • 购物车页面 - 商品管理、数量修改、删除
  • 结算页面 - 订单摘要、收货信息填写、订单提交

技术特点

  • 轻量级架构,不依赖 Vuex 状态管理
  • 使用 localStorage 持久化购物车数据
  • 响应式设计,支持移动端
  • 完整的无障碍访问支持
  • 错误处理和用户反馈

🏗️ 项目结构

src/
├── components/           # 公共组件
│   ├── header.vue       # 顶部导航栏(含面包屑导航)
│   └── content.vue      # 内容容器
├── Layout/              # 布局组件
│   └── idnex.vue        # 主布局
├── views/               # 页面组件
│   ├── productList/     # 商品列表
│   │   └── index.vue
│   ├── productDetail/   # 商品详情
│   │   └── index.vue
│   ├── cart/           # 购物车
│   │   └── index.vue
│   └── checkout/       # 结算页面
│       └── index.vue
├── utils/               # 工具函数
│   ├── productService.js # 商品数据服务
│   ├── cartManager.js   # 购物车管理
│   ├── navigation.js    # 导航配置
│   └── routeTest.js     # 路由测试工具
├── router/              # 路由配置
│   ├── index.js         # 主路由文件
│   └── routes.js        # 路由配置文件
├── store/               # 状态管理(轻量使用)
│   └── index.js
├── App.vue              # 根组件
└── main.js              # 入口文件

🔧 技术栈

  • 前端框架: Vue 2.6.14
  • UI 组件库: Element UI 2.15.14
  • 路由: Vue Router 3.5.1
  • 状态管理: Vuex 3.6.2(轻量使用)
  • 样式: SCSS + CSS Grid/Flexbox
  • 构建工具: Vue CLI 5.0

🧭 路由配置

完整路由列表

路径 名称 描述 权限
/productList 商品列表 浏览所有可用商品 all
/product/:id 商品详情 查看商品详细信息 all
/cart 购物车 管理购物车商品 all
/checkout 订单结算 完成订单结算 all

路由特性

  • 嵌套路由: 所有页面都在 Layout 组件内渲染
  • 动态路由: 商品详情页支持动态 ID 参数
  • 路由守卫: 自动设置页面标题和权限检查
  • 错误处理: 404 页面自动重定向到商品列表
  • 面包屑导航: 自动生成页面导航路径

路由文件结构

src/router/
├── index.js          # 主路由文件,包含路由守卫和错误处理
└── routes.js         # 路由配置文件,按功能模块组织

📱 页面说明

1. 商品列表页面 (/productList)

  • 网格布局展示所有商品
  • 商品卡片包含图片、标题、描述、价格
  • 支持点击查看详情
  • 一键添加到购物车

2. 商品详情页面 (/product/:id)

  • 商品图片和详细信息展示
  • 自定义数量选择器美观的加减按钮设计支持1-99数量范围
  • 数量选择器特性:
    • 减号按钮(-减少数量最小值为1时自动禁用
    • 数量输入框:支持直接输入,实时验证范围
    • 加号按钮(+增加数量最大值为99时自动禁用
    • 悬停效果和焦点状态
    • 响应式设计,移动端适配
  • 添加到购物车功能
  • 返回商品列表

3. 购物车页面 (/cart)

  • 购物车商品列表
  • 数量修改和删除功能
  • 实时计算总价和商品数量
  • 清空购物车功能
  • 跳转到结算页面

4. 结算页面 (/checkout)

  • 订单摘要展示
  • 收货信息表单(姓名、电话、地址、备注)
  • 表单验证
  • 订单提交功能

🛠️ 安装和运行

# 安装依赖
npm install

# 开发环境运行
npm run serve

# 生产环境构建
npm run build

# 代码检查
npm run lint

🧪 路由测试

项目包含完整的路由测试工具,可以在浏览器控制台中运行:

// 导入测试工具
import { runFullTest } from './src/utils/routeTest'

// 运行完整测试
runFullTest()

// 或者单独测试
import { testRoutes, testNavigation } from './src/utils/routeTest'
testRoutes()
testNavigation()

🔍 问题修复记录

页面重复渲染问题

问题描述: 页面出现重复渲染,显示两次相同内容

根本原因:

  1. 路由配置存在冲突 - 两个相同路径的路由
  2. Layout 组件嵌套问题 - 多层 router-view 嵌套
  3. Vue 版本不匹配 - header.vue 使用了 Vue 3 语法

解决方案:

  1. 修复路由配置,移除重复路由
  2. 简化 Layout 组件结构,避免多层嵌套
  3. 将 header.vue 改为 Vue 2 语法
  4. 优化组件渲染逻辑

路由配置完善

新增功能:

  1. 完整的路由配置文件 (routes.js)
  2. 导航配置工具 (navigation.js)
  3. 路由测试工具 (routeTest.js)
  4. 面包屑导航支持
  5. 路由守卫和错误处理

具体修复内容

  • src/router/index.js: 清理重复路由,添加电商页面路由
  • src/router/routes.js: 新增路由配置文件
  • src/utils/navigation.js: 新增导航配置工具
  • src/utils/routeTest.js: 新增路由测试工具
  • src/components/header.vue: Vue 3 → Vue 2 语法转换,添加面包屑导航
  • src/components/content.vue: 简化组件,移除不必要的 router-view
  • 新增完整的电商页面组件

🎨 设计原则

  • DRY 原则: 避免代码重复,提取公共组件和工具函数
  • KISS 原则: 保持代码简单易懂
  • SOLID 原则: 单一职责,开闭原则
  • YAGNI 原则: 只实现当前需要的功能
  • 无障碍访问: 支持键盘导航和屏幕阅读器

🔢 数量选择器组件

组件特性

  • 现代化设计:圆角边框、阴影效果、悬停状态
  • 交互反馈:按钮点击动画、焦点状态高亮
  • 数量验证自动限制范围1-99输入验证
  • 无障碍支持包含aria-label属性支持键盘操作
  • 响应式布局:移动端和桌面端自适应

使用方法

<template>
  <div class="quantity-selector">
    <button 
      class="quantity-btn minus-btn"
      @click="handleDecreaseQuantity"
      :disabled="quantity <= 1"
      aria-label="减少数量"
    >
      <span class="btn-icon"></span>
    </button>
    
    <input 
      type="number"
      class="quantity-input"
      v-model.number="quantity"
      :min="1"
      :max="99"
      aria-label="数量输入"
    />
    
    <button 
      class="quantity-btn plus-btn"
      @click="handleIncreaseQuantity"
      :disabled="quantity >= 99"
      aria-label="增加数量"
    >
      <span class="btn-icon">+</span>
    </button>
  </div>
</template>

样式定制

支持以下CSS类名和状态

  • .quantity-selector:主容器样式
  • .quantity-btn:按钮基础样式
  • .minus-btn / .plus-btn:减号/加号按钮
  • .quantity-input:数量输入框
  • .btn-icon:按钮图标样式
  • 悬停状态、焦点状态、禁用状态

📱 响应式设计

  • 使用 CSS Grid 和 Flexbox 布局
  • 移动端优先的响应式设计
  • 支持触摸操作和手势
  • 适配不同屏幕尺寸

🔒 数据安全

  • 购物车数据本地存储
  • 表单验证和错误处理
  • 用户输入过滤和清理
  • 安全的订单提交流程

🚀 未来优化

  • 用户登录注册系统
  • 订单历史记录
  • 商品搜索和筛选
  • 支付集成
  • 商品评价系统
  • 库存管理
  • 后台管理系统

📝 更新日志

v1.2.0 - 数量选择器组件优化 (2024)

  • 新增自定义数量选择器组件替换Element UI数字输入框
  • 🎨 现代化UI设计圆角边框、阴影效果、悬停状态
  • 🔧 功能增强支持1-99数量范围实时验证
  • 无障碍优化添加aria-label属性支持键盘操作
  • 📱 响应式设计:移动端和桌面端自适应
  • 🐛 修复:移除重复代码,优化组件结构
  • 📚 文档更新:添加组件使用说明和样式定制指南

📄 许可证

MIT License

🤝 贡献

欢迎提交 Issue 和 Pull Request


注意: 这是一个演示项目,商品数据为静态数据,实际使用时需要连接后端 API。