欢迎加入开源鸿蒙跨平台社区:
https://openharmonycrossplatform.csdn.net

一、项目概述

运行效果图

image-20260410231222100

image-20260410231227360

image-20260410231231811

image-20260410231236007

1.1 应用简介

校园兼职信息发布是一款面向高校学生的兼职招聘信息平台。支持兼职信息发布、浏览搜索、在线申请、消息通知等功能,帮助学生便捷找到合适的兼职工作,同时为商家提供高效的招聘渠道。应用以清新的绿色为主色调,象征活力与机遇。涵盖兼职广场、发布兼职、我的兼职、消息中心四大模块。

1.2 核心功能

功能模块功能描述实现方式
兼职分类8种兼职类型分类枚举定义
信息发布发布兼职招聘信息表单提交
浏览搜索搜索筛选兼职信息条件过滤
在线申请一键申请兼职岗位状态管理
消息通知申请状态实时通知消息列表
收藏管理收藏感兴趣的兼职数据存储

1.3 兼职类型定义

序号类型名称Emoji时薪范围描述
1家教辅导📚50-200元学科辅导、语言培训
2餐饮服务🍔15-30元服务员、收银、后厨
3促销导购🛒20-50元商场促销、地推活动
4设计美工🎨50-150元平面设计、UI设计
5程序开发💻80-300元前端、后端、小程序
6文案编辑✍️30-80元公众号、文案撰写
7翻译服务🌐50-200元笔译、口译服务
8其他兼职📋面议其他类型兼职

1.4 兼职状态定义

序号状态名称Emoji描述
1招聘中🟢正在招聘,可申请
2已招满🔴名额已满
3已下架信息已下架
4已暂停🟡暂停招聘

1.5 申请状态定义

序号状态名称Emoji描述
1待处理等待雇主查看
2已通过申请已通过
3已拒绝申请被拒绝
4已取消🚫用户取消申请

1.6 技术栈

技术领域技术选型版本要求
开发框架Flutter>= 3.0.0
编程语言Dart>= 2.17.0
设计规范Material Design 3-
状态管理setState-
目标平台鸿蒙OS / WebAPI 21+

1.7 项目结构

lib/
└── main_campus_part_time_job.dart
    ├── CampusPartTimeJobApp          # 应用入口
    ├── JobType                       # 兼职类型枚举
    ├── JobStatus                     # 兼职状态枚举
    ├── ApplyStatus                   # 申请状态枚举
    ├── PartTimeJob                   # 兼职信息模型
    ├── JobApplication                # 申请记录模型
    ├── Message                       # 消息模型
    ├── CampusPartTimeJobHomePage     # 主页面(底部导航)
    ├── _buildJobSquarePage           # 兼职广场页
    ├── _buildPublishPage             # 发布兼职页
    ├── _buildMyJobsPage              # 我的兼职页
    ├── _buildMessagesPage            # 消息中心页
    └── 各类辅助组件

二、系统架构

2.1 整体架构图

Data Layer

Business Layer

Presentation Layer

主页面
CampusPartTimeJobHomePage

兼职广场

发布兼职

我的兼职

消息中心

分类筛选

搜索功能

兼职详情

信息填写

预览发布

我的发布

我的申请

我的收藏

消息列表

通知详情

兼职管理器
JobManager

申请处理器
ApplicationHandler

消息服务
MessageService

PartTimeJob
兼职信息

JobApplication
申请记录

Message
消息

JobType
兼职类型

2.2 类图设计

has

has

has

CampusPartTimeJobApp

+Widget build()

«enumeration»

JobType

+String label

+String emoji

+int minSalary

+int maxSalary

+tutor()

+catering()

+promotion()

+design()

+programming()

+writing()

+translation()

+other()

«enumeration»

JobStatus

+String label

+String emoji

+recruiting()

+filled()

+offline()

+paused()

«enumeration»

ApplyStatus

+String label

+String emoji

+pending()

+accepted()

+rejected()

+cancelled()

PartTimeJob

+String id

+String title

+String description

+JobType type

+JobStatus status

+int salary

+String salaryUnit

+String location

+String contactName

+String contactPhone

+DateTime publishTime

+DateTime startTime

+DateTime endTime

+int applicantCount

+int maxApplicants

+String publisherId

+List requirements

JobApplication

+String id

+String jobId

+String applicantId

+String applicantName

+ApplyStatus status

+DateTime applyTime

+String message

Message

+String id

+String title

+String content

+String type

+DateTime time

+bool isRead

+String relatedJobId

2.3 页面导航流程

广场

发布

我的

消息

应用启动

兼职广场

底部导航

浏览兼职

发布兼职

个人中心

消息列表

筛选分类

搜索关键词

查看详情

申请兼职

收藏兼职

填写信息

预览确认

发布成功

我的发布

我的申请

我的收藏

系统通知

申请通知

2.4 兼职申请流程

消息中心 雇主 申请处理 兼职详情 兼职广场 学生 消息中心 雇主 申请处理 兼职详情 兼职广场 学生 浏览兼职列表 显示兼职信息 点击查看详情 展示完整信息 点击申请 验证条件 发送申请通知 查看申请 审核通过/拒绝 更新状态 推送结果通知

三、核心模块设计

3.1 兼职广场模块

兼职广场是用户浏览和搜索兼职信息的主要入口,提供分类筛选、关键词搜索、排序等功能。

核心功能:

  1. 分类筛选 - 按兼职类型筛选
  2. 关键词搜索 - 标题、描述关键词搜索
  3. 薪资筛选 - 按薪资范围筛选
  4. 排序方式 - 按发布时间、薪资排序
  5. 兼职卡片 - 展示关键信息预览

3.2 发布兼职模块

发布兼职模块允许用户发布招聘信息,填写职位详情、薪资待遇、联系方式等。

核心功能:

  1. 基本信息 - 标题、类型、描述
  2. 薪资待遇 - 薪资金额、结算方式
  3. 时间地点 - 工作时间、工作地点
  4. 联系方式 - 联系人、联系电话
  5. 任职要求 - 技能要求、经验要求
  6. 预览发布 - 信息预览确认

3.3 我的兼职模块

我的兼职模块管理用户发布的兼职和申请的兼职,提供状态追踪和管理功能。

核心功能:

  1. 我的发布 - 查看发布的兼职信息
  2. 我的申请 - 查看申请记录和状态
  3. 我的收藏 - 查看收藏的兼职
  4. 状态管理 - 上架/下架/编辑兼职

3.4 消息中心模块

消息中心接收和展示系统通知、申请通知等消息。

核心功能:

  1. 系统通知 - 平台公告、活动通知
  2. 申请通知 - 申请状态变更通知
  3. 消息列表 - 按时间排序展示
  4. 已读标记 - 标记消息已读

四、数据模型设计

4.1 兼职信息模型

class PartTimeJob {
  final String id;              // 兼职ID
  final String title;           // 兼职标题
  final String description;     // 职位描述
  final JobType type;           // 兼职类型
  JobStatus status;             // 兼职状态
  final int salary;             // 薪资金额
  final String salaryUnit;      // 薪资单位
  final String location;        // 工作地点
  final String contactName;     // 联系人
  final String contactPhone;    // 联系电话
  final DateTime publishTime;   // 发布时间
  final DateTime startTime;     // 开始时间
  final DateTime endTime;       // 结束时间
  final int applicantCount;     // 申请人数
  final int maxApplicants;      // 最大人数
  final String publisherId;     // 发布者ID
  final List<String> requirements; // 任职要求
}

4.2 申请记录模型

class JobApplication {
  final String id;              // 申请ID
  final String jobId;           // 兼职ID
  final String applicantId;     // 申请人ID
  final String applicantName;   // 申请人姓名
  ApplyStatus status;           // 申请状态
  final DateTime applyTime;     // 申请时间
  final String message;         // 申请留言
}

4.3 消息模型

class Message {
  final String id;              // 消息ID
  final String title;           // 消息标题
  final String content;         // 消息内容
  final String type;            // 消息类型
  final DateTime time;          // 消息时间
  bool isRead;                  // 是否已读
  final String? relatedJobId;   // 关联兼职ID
}

五、界面设计

5.1 配色方案

颜色类型色值用途
主色#4CAF50品牌色、按钮
次色#81C784辅助色、背景
强调色#FF9800重要信息
背景色#F5F5F5页面背景
卡片色#FFFFFF卡片背景
文字色#212121主要文字
次文字#757575次要文字

5.2 字体规范

字体类型字号字重用途
大标题24spBold页面标题
标题18spMedium卡片标题
正文14spRegular正文内容
辅助文字12spRegular辅助信息
小字10spRegular标签、时间

5.3 间距规范

间距类型数值用途
页面边距16dp页面左右边距
卡片间距12dp卡片之间间距
内容间距8dp内容元素间距
紧凑间距4dp紧凑元素间距

六、关键代码实现

6.1 主入口

void main() {
  runApp(const CampusPartTimeJobApp());
}

class CampusPartTimeJobApp extends StatelessWidget {
  const CampusPartTimeJobApp({super.key});

  
  Widget build(BuildContext context) {
    return MaterialApp(
      title: '校园兼职信息发布',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(
          seedColor: const Color(0xFF4CAF50),
          brightness: Brightness.light,
        ),
        useMaterial3: true,
      ),
      home: const CampusPartTimeJobHomePage(),
    );
  }
}

6.2 兼职类型枚举

enum JobType {
  tutor(label: '家教辅导', emoji: '📚', minSalary: 50, maxSalary: 200),
  catering(label: '餐饮服务', emoji: '🍔', minSalary: 15, maxSalary: 30),
  promotion(label: '促销导购', emoji: '🛒', minSalary: 20, maxSalary: 50),
  design(label: '设计美工', emoji: '🎨', minSalary: 50, maxSalary: 150),
  programming(label: '程序开发', emoji: '💻', minSalary: 80, maxSalary: 300),
  writing(label: '文案编辑', emoji: '✍️', minSalary: 30, maxSalary: 80),
  translation(label: '翻译服务', emoji: '🌐', minSalary: 50, maxSalary: 200),
  other(label: '其他兼职', emoji: '📋', minSalary: 0, maxSalary: 0);

  final String label;
  final String emoji;
  final int minSalary;
  final int maxSalary;

  const JobType({
    required this.label,
    required this.emoji,
    required this.minSalary,
    required this.maxSalary,
  });
}

七、测试用例

7.1 功能测试

测试项测试步骤预期结果
浏览兼职进入兼职广场显示兼职列表
筛选分类点击分类标签显示对应类型兼职
搜索兼职输入关键词搜索显示匹配结果
发布兼职填写信息并提交发布成功
申请兼职点击申请按钮申请成功
查看消息进入消息中心显示消息列表

7.2 边界测试

测试项测试条件预期结果
空列表无兼职数据显示空状态提示
超长文本标题超长自动截断显示
无搜索结果搜索无匹配显示无结果提示

八、部署说明

8.1 环境要求

  • Flutter SDK >= 3.0.0
  • Dart SDK >= 2.17.0
  • Android SDK >= 21 (鸿蒙OS兼容)

8.2 运行命令

flutter run -d web-server --web-port 8150 --web-hostname 0.0.0.0

九、版本记录

版本日期更新内容
v1.0.02024-01-XX初始版本发布

十、联系方式

项目地址: [GitHub仓库地址]

问题反馈: [Issues地址]

作者博客: [博客地址]

开源社区: https://openharmonycrossplatform.csdn.net

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐