第一部分:项目规划与功能设计

在敲下第一行代码之前,清晰的规划至关重要。

校园跑腿网页版网站搭建
(图片来源网络,侵删)

核心目标

为校园师生提供一个便捷、安全、高效的跑腿服务平台,解决“没时间”、“不方便”的日常需求。

用户角色

  • 用户(下单者):发布任务,支付费用,查看进度,评价跑腿员。
  • 跑腿员(接单者):浏览任务列表,接单,执行任务,上传完成凭证,获得报酬。
  • 管理员:管理用户和跑腿员账号,审核任务,处理纠纷,查看数据报表。

核心功能模块

A. 用户端(面向下单者)

  1. 注册/登录:支持手机号/邮箱注册,登录方式(密码、短信验证码)。
  2. 首页/任务大厅
    • 展示所有待接单的任务列表。
    • 支持筛选(如:取快递、买饭、打印文件等)。
    • 支持排序(如:发布时间、赏金高低)。
  3. 发布任务
    • 任务类型选择(取快递、买饭、送文件、代排队等)。
    • 任务详情描述(物品、地址、时间要求等)。
    • 上传图片(如快递单号、商品截图)。
    • 设置任务赏金。
    • 选择接单截止时间。
  4. 我的订单
    • 订单状态:待接单、已接单、进行中、已完成、已取消。
    • 查看订单详情,包括跑腿员信息、联系方式。
    • 在任务进行中,可以与跑腿员在线沟通(集成聊天功能)。
    • 确认完成,进行支付和评价。
  5. 个人中心
    • 编辑个人资料(头像、昵称、学号等)。
    • 查看账户余额、收支明细。
    • 查看我的评价。
    • 设置收货/上课地址。

B. 跑腿员端(面向接单者)

  1. 注册/登录:同上,可能需要额外认证(如学生证照片)。
  2. 任务大厅
    • 浏览可接任务。
    • 筛选和排序功能。
    • 查看任务赏金和距离。
  3. 接单/拒单
    • 点击“立即接单”。
    • 可以选择性地拒接某个任务。
  4. 我的订单
    • 订单状态:待接单(我已发布的)、已接单、进行中、已完成、已完成待收款。
    • 查看订单详情,与下单者沟通。
    • 上传任务完成凭证(如:快递取件码、购物小票照片)。
    • 任务完成后,申请收款。
  5. 个人中心
    • 类似用户端,包含资料、余额、评价等。
    • 可查看接单统计(如:完成单数、总收入)。

C. 管理员端

校园跑腿网页版网站搭建
(图片来源网络,侵删)
  1. 仪表盘:核心数据概览(用户数、跑腿员数、今日订单数、交易总额)。
  2. 用户管理:查看、禁用/启用用户和跑腿员账号。
  3. 订单管理:查看所有订单,可手动处理异常订单(如强制取消、强制完成)。
  4. 内容管理:管理任务类型、公告等。
  5. 财务管理:查看平台整体收支,处理提现申请。
  6. 投诉处理:处理用户和跑腿员之间的纠纷。

第二部分:技术选型

对于一个校园项目,我们应选择快速开发、成本较低、易于维护的技术栈。

类别 推荐技术 说明
前端 Vue 3 + Vite + Element Plus / Ant Design Vue Vue 是目前主流的前端框架,生态完善,Vite 提供极速的开发服务器启动,Element Plus / Ant Design Vue 是成熟的 UI 组件库,能快速搭建出美观的界面。
后端 Node.js + Express / Koa.js 使用 JavaScript 全栈开发,前后端语言统一,降低学习成本,Express/Koa 是轻量级的 Node.js 框架,非常适合 API 服务的开发。
数据库 MySQL 关系型数据库,结构化数据(用户、订单、地址等)存储非常成熟稳定,对于校园项目,性能完全足够。
认证 JWT (JSON Web Token) 无状态认证,非常适合前后端分离的架构,用户登录后,服务器返回一个 Token,后续请求携带此 Token 即可验证身份。
部署 Nginx + PM2 Nginx 作为反向代理和静态资源服务器,PM2 用于管理 Node.js 进程,实现后台运行和自动重启。
服务器 云服务器 如阿里云、腾讯云、华为云等,选择学生优惠套餐,性价比极高。

第三部分:开发流程

环境准备

  1. 安装 Node.js: 访问 Node.js 官网 下载并安装 LTS 版本。
  2. 安装数据库: 下载并安装 MySQL。
  3. 安装代码编辑器: 推荐 VS Code,并安装 Volar、ESLint、Prettier 等插件。

项目初始化

  1. 创建后端项目:
    mkdir campus-runner-server
    cd campus-runner-server
    npm init -y
    npm install express mysql2 cors jsonwebtoken bcryptjs dotenv
    # express: 框架
    # mysql2: MySQL 驱动
    # cors: 处理跨域
    # jsonwebtoken: JWT 认证
    # bcryptjs: 密码加密
    # dotenv: 管理环境变量
  2. 创建前端项目:
    # 全局安装 Vite 和 Vue 脚手架
    npm install -g create-vite
    # 创建 Vue 项目
    create-vite campus-runner-client --template vue
    cd campus-runner-client
    npm install
    npm install element-plus axios
    # element-plus: UI 组件库
    # axios: HTTP 客户端,用于与后端 API 通信

数据库设计

使用 MySQL Workbench 或 Navicat 等工具创建数据库,并设计核心表结构。

-- 用户表 (通用)
CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL COMMENT '用户名/手机号',
  `password` varchar(255) NOT NULL COMMENT '加密后的密码',
  `role` enum('user', 'runner', 'admin') NOT NULL DEFAULT 'user' COMMENT '角色',
  `nickname` varchar(50) DEFAULT NULL,
  `avatar` varchar(255) DEFAULT NULL,
  `balance` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '账户余额',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 任务表
CREATE TABLE `tasks` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL COMMENT '发布者ID', varchar(100) NOT NULL COMMENT '任务标题',
  `description` text COMMENT '任务描述',
  `type` varchar(50) NOT NULL COMMENT '任务类型',
  `price` decimal(10,2) NOT NULL COMMENT '赏金',
  `pickup_location` varchar(255) NOT NULL COMMENT '取货地址',
  `delivery_location` varchar(255) NOT NULL COMMENT '送达地址',
  `status` enum('pending', 'assigned', 'in_progress', 'completed', 'cancelled') NOT NULL DEFAULT 'pending',
  `runner_id` int(11) DEFAULT NULL COMMENT '接单者ID',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `user_id` (`user_id`),
  KEY `runner_id` (`runner_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 订单表 (可选,也可以和任务表合并)
CREATE TABLE `orders` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `task_id` int(11) NOT NULL,
  `user_id` int(11) NOT NULL,
  `runner_id` int(11) NOT NULL,
  `amount` decimal(10,2) NOT NULL,
  `status` enum('unpaid', 'paid', 'refunded') NOT NULL DEFAULT 'unpaid',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

后端开发 (Node.js + Express)

  1. 搭建基本服务 (server.js):

    const express = require('express');
    const cors = require('cors');
    const app = express();
    app.use(cors());
    app.use(express.json());
    // 简单的路由示例
    app.get('/api/health', (req, res) => {
      res.send({ message: 'Server is running!' });
    });
    const PORT = 3000;
    app.listen(PORT, () => {
      console.log(`Server is listening on port ${PORT}`);
    });
  2. 编写 API 接口:

    校园跑腿网页版网站搭建
    (图片来源网络,侵删)
    • 用户认证: /api/auth/register, /api/auth/login
    • 任务管理: /api/tasks (GET, POST), /api/tasks/:id (GET, PUT, DELETE)
    • 订单管理: /api/orders (GET, POST)
    • 用户信息: /api/user/profile (GET, PUT)
    • 每个接口都需要根据用户角色(通过 JWT 解析)来判断权限。

前端开发 (Vue 3)

  1. 搭建页面结构:

    • src 目录下创建 views 文件夹,用于存放各个页面组件(如 Home.vue, Login.vue, PostTask.vue)。
    • 创建 router/index.js 配置路由。
    • 创建 store/index.js (使用 Pinia) 进行全局状态管理(如存储用户信息、Token)。
  2. 封装 API 请求 (src/api/index.js):

    import axios from 'axios';
    import { useUserStore } from '@/stores/user';
    const api = axios.create({
      baseURL: 'http://localhost:3000/api', // 后端服务地址
    });
    // 请求拦截器,自动添加 Token
    api.interceptors.request.use(config => {
      const userStore = useUserStore();
      if (userStore.token) {
        config.headers.Authorization = `Bearer ${userStore.token}`;
      }
      return config;
    });
    export default api;
  3. 实现页面功能:

    • 使用 Element Plus 的组件快速构建表单、表格、弹窗等。
    • 在组件中调用封装好的 API 函数,获取数据并渲染到页面上。
    • 使用 Vue 的组合式 API (setup 函数) 来组织逻辑。

第四部分:部署上线

  1. 代码准备:

    • 将前端和后端代码分别上传到 GitHub/Gitee 仓库。
    • 在云服务器上克隆代码。
  2. 配置服务器环境:

    • 安装 Node.js、Nginx、PM2、MySQL。
    • 在云服务器的安全组中开放端口(如 80, 443, 3001)。
  3. 部署后端:

    cd campus-runner-server
    npm install --production # 只安装生产依赖
    pm2 start server.js --name "runner-server" # 使用 PM2 启动服务
    pm2 save # 保存 PM2 进程列表
    pm2 startup # 设置开机自启
  4. 构建并部署前端:

    cd campus-runner-client
    npm run build # 构建生产版本,会生成 dist 文件夹
  5. 配置 Nginx: 编辑 Nginx 配置文件 (/etc/nginx/nginx.conf/etc/nginx/sites-available/default),配置反向代理和静态文件服务。

    server {
        listen 80;
        server_name your-domain.com; # 你的域名或公网IP
        # 前端静态文件
        location / {
            root /path/to/campus-runner-client/dist; # 前端 dist 目录
            try_files $uri $uri/ /index.html;
        }
        # 后端 API 代理
        location /api {
            proxy_pass http://localhost:3000; # 后端服务地址
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }

    保存后,重启 Nginx: sudo systemctl restart nginx

  6. 域名解析:

    在你的域名提供商后台,将域名解析到你的云服务器公网 IP。

访问你的域名,网站就可以在线使用了!


第五部分:安全与未来优化

  • 安全:
    • HTTPS: 配置 SSL 证书,启用 HTTPS,保障数据传输安全。
    • 输入验证: 后端对所有用户输入进行严格验证和过滤,防止 SQL 注入、XSS 攻击。
    • 敏感信息: 密码必须加盐哈希存储,不要在前端代码中硬编码任何密钥。
  • 未来优化:
    • 实时通信: 集成 WebSocket (如 Socket.io) 实现用户和跑腿员之间的即时聊天。
    • 地图集成: 集成高德地图或百度地图 API,实现地址选择和路径规划。
    • 移动端适配: 优化前端样式,使其在手机浏览器上有良好体验,或开发微信小程序/APP。
    • 支付集成: 对接微信支付、支付宝,实现真正的在线支付闭环。
    • 信用体系: 引入信用分、评价星级等机制,提升服务质量。

这个指南为你提供了一个完整的框架和清晰的步骤,从零开始搭建一个项目会很有挑战性,但也是一个绝佳的学习机会,祝你项目顺利!