需求简介:
午托机构管理端:信息维护方面,需要有员工管理,学生管理,缴费管理,退费管理,餐饮管理,床位管理,接送管理
家长端:手机扫描二维码进入小程序,首次进入需要填写学生信息进行报名,能够缴费和退费,退费的计算方式是按照请假天数进行退费,能够请假,能够查看学生在午托中的生活状况等
管理端需求:
- 员工管理:实现员工信息的添加、修改、删除和查询,根据员工姓名查询,功能,包括员工姓名、性别、年龄、联系方式、电子邮箱,家庭住址,职位,入职日期,离职日期,员工状态信息,同时需要有员工考勤管理,会记录员工的id,考勤日期,上班打卡时间,下班打卡时间,考勤状态,对于员工考勤管理,管理员能够对员工每天的考勤情况进行录入,修改,查询,根据员工姓名进行查询,同时可以根据考勤状态进行筛选,和删除,在考勤管理中,管理员可以查看员工的考勤记录,包括上班打卡时间、下班打卡时间以及考勤状态。系统可以根据考勤记录自动计算员工的出勤情况。相应的有员工工资管理,记录了员工id,工资发放日期,基本工资,扣款,实际发放信息,管理员可以添加,修改,查询,删除,其中添加和修改的时候会根据员工当天的考勤状态自动计算扣款金额,同样基本工资也会有默认值,当修改了基本工资和扣款金额后,会自动计算实际发放的数值,员工在该系统中负责管理和服务一个班级的学生,服务内容包括保证学生安全,开车接送学生,管理端能够对员工进行学生分配,每个班会有10名学生,老师会负责开车送学生回家。
- 学生管理:实现学生信息的添加、修改、删除和查询功能,包括学生姓名、性别、年龄、班级、家长联系方式,家庭住址,学生状态信息,每个学生都会分配到一个具体的班级,进行管理,同时每个班级会配备一名老师进行监督,保证学生的安全,学生的数据除了学生家长主动报名添加后,管理员也能够对学生的数据进行添加,查询也是根据学生的姓名进行查询,支持通过班级进行筛选,同时也可以根据学生的状态来确定学生是否退学,状态应该包含两个值,是否在读,班级创建中,管理员能够对班级的名称,负责老师进行创建,修改,查询和删除,支持名称搜索和老师筛选。
- 缴费管理:实现缴费数据的添加,查询功能,包含了学生id,缴费金额和缴费方式,管理员仅仅只能通过查询和筛选来查看缴费数据,而缴费数据的添加只能通过学生家长进行缴费添加,后续根据情况考虑给管理添加缴费添加权限。
- 退费管理:退费需要管理缴费记录,学生id,退费金额,退费备注,以及退费状态,管理员操作只需要点击通过或者驳回来修改退费状态。
- 请假管理:学生请假管理,由家长申请,填写开始和结束时间,以及请假的原因,添加之后,管理端能够查看并筛选学生,请假的记录用来计算最终的退费。
- 餐饮管理:餐饮管理模块是午托机构管理端的一个重要组成部分,主要负责对学生的餐饮服务进行管理。该模块应包括餐饮计划的制定、餐饮服务的提供、餐饮费用的管理功能,餐饮计划表,需要有名称,计划的开始时间和结束时间,餐饮菜单,需要关联餐饮计划,早餐内容,午餐内容,晚餐内容,餐饮费用,需要关联餐饮计划,需要的费用。功能上,管理员能够添加餐饮计划,然后创建餐饮内容,最终根据餐饮计划和内容来确定餐饮的费用。
- 床位管理:床位管理模块是午托机构管理端的一个重要组成部分,主要负责对学生床位进行分配和管理。该模块应包括床位的添加、修改、删除、查询等功能,以及床位的分配和状态管理。包含床位信息表,有床位编号,房间编号,床位类型,单人床和双人床,床位的状态,是否空闲,同时需要有学生床位分配表,记录了学生id,床位id,以及对应的分配日期,管理员能够对床位信息进行增删改查,之后才能对学生进行床位分配。
- 接送管理:接送管理模块是午托机构管理端的一个重要组成部分,主要负责对学生上下学的接送进行管理。该模块应包括接送信息的添加、修改、删除、查询等功能,以及接送人员的管理和接送任务的分配。这里的接送人基本上是负责每个班级的老师,有学生接送表,记录了学生id,接送人id,接送日期,接送时间,送还时间,接送状态,接送详情,管理员能够添加每个学生的接送信息,默认根据学生的班级自动确定接送人,但是也可以实现自动选择。
- 其他,员工管理模块,可以直接添加,学生管理模块中,不管是家长手动添加还是管理员端添加都需要先添加好班级,否则不能添加成功,在缴费管理模块中,家长添加完学生信息之后,学生的状态还并不能算入学,需要完成缴费才能算添加成功,管理端在操作学生时,会根据学生的状态展示学生数据,只能操作完成缴费的学生,包括下面的退费,请假,餐饮,床位,接送,都是只能操作完成缴费的学生。退费按照请假天数确定,家长端如果想要申请退费,就需要进入申请退费的页面,首先会展示缴费的记录,然后家长才能根据其发起退费,如果计算得到的值为 0 则提示没有可以发生的退费或者其他提示。
- 可能需要加一个通知系统,用来展示在家长端首页。
家长端需求:
- 扫码进入小程序后,授权登录,首先会判断当前用户有没有添加学生,没有添加会提示进入小程序进行添加,添加成功后,提示缴费,缴费成功之后,系统正式录入,不缴费,只有基础信息可以查看,不能进行午托管理,能够继续添加,也能够查看自己的学生信息,删除信息,退费管理在缴费管理上,每个缴费记录都可以点击退费,家长确认信息并提交即可。
- 家长可以选择自己的学生信息,进行查看,在查看中可以选择请假,输入相应的信息就可以提交,同时也可以查看孩子的请假记录,生活状况查看包括,孩子的每天的餐饮,床位信息,接送情况。
功能实现:
管理员端只能登录
员工,学生,缴费,退费,请假,餐饮,床位,推送
底部导航三个,员工管理,学生管理,我的
员工管理
可以筛选,查看员工基础表单信息,能够新增,删除员工,更多需要点击进入新的页面查看,可以给员工分配班级,计算工资,查看考勤
学生管理
可以筛选,查看员工基础表单信息,能够新增,删除学生,学生的缴费,退费,餐饮,床位,都能通过点击学生详情进行设置,是否缴费需要展示再最外面,没有缴费的情况下不能设置学生的其他信息
退费管理,如果有学生申请退费,会展示在这里,管理员点击进去之后可以查看学生上了几天,请假了几天,以及退费的金额,然后能够点击通过或者驳回,退费的状态,根据情况显示,家长如果被驳回,需要再次申请
我的,设置管理员的基础信息
后端搭建:
uniCloud
提供了一个 JSON 格式的文档型数据库。
每行记录,都是一个完整的json文档,获取到记录后可以使用常规json方式操作。但表并非json文档,表是多个json文档的汇总,获取表需要使用专门的API。与关系型数据库的二维表格式不同,json文档数据库支持不同记录拥有不同的字段、支持多层嵌套数据。
uniCloud 默认推荐使用 JQL 语法操作数据库,它是一种更简单易用、对js开发者更友好的、开发效率更高的数据库操作语法。
传统开发中,其实大多数服务器接口开发,就是检验下前端数据和身份的合法性,然后写个SQL操作下数据库,返回JSON给前端。其实很无聊。
clientDB最大的好处就是不用写服务端代码,客户端直接操作数据库。因为uniCloud提供了DB Schema和uni-id,可以直接控制数据库的内容和权限校验。
clientDB同时支持action云函数
作为补充,当发起一个客户端操作云数据库的请求时,可以同时触发一个action云函数
,在云端对数据库操作进行前置或后置处理。
详情参考
https://doc.dcloud.net.cn/uniCloud/hellodb.html#db-init
获取数据库对象
const db = uniCloud.database(); //代码块为cdb
集合/数据表 Collection 的方法
通过 db.collection(name) 可以获取指定数据表的引用,在数据表上可以进行以下操作
使用 JQL 语法来进行更多数据库的操作方法
https://doc.dcloud.net.cn/uniCloud/jql.html
数据表结构
员工信息表(employee_info)
employee_id INT 员工ID(主键,自增) name VARCHAR(50) 员工姓名 gender VARCHAR(10) 员工性别 age INT 员工年龄 phone VARCHAR(20) 联系电话 email VARCHAR(50) 电子邮箱 address VARCHAR(100) 家庭住址 position VARCHAR(50) 职位 hire_date DATE 入职日期 leave_date DATE 离职日期(如有) status VARCHAR(20) 员工状态(在职、离职等)
员工考勤表(employee_attendance)
attendance_id INT 考勤ID(主键,自增) employee_id INT 员工ID(外键) attendance_date DATE 考勤日期 check_in_time TIME 上班打卡时间 check_out_time TIME 下班打卡时间 status VARCHAR(20) 考勤状态(正常、迟到、早退、缺勤等)
员工工资表(employee_salary)
salary_id INT 工资ID(主键,自增) employee_id INT 员工ID(外键) salary_date DATE 工资发放日期 basic_salary DECIMAL(10, 2) 基本工资 deduction DECIMAL(10, 2) 扣款 total_salary DECIMAL(10, 2) 实发工资
学生信息表(student_info)
student_id INT 学生ID(主键,自增) name VARCHAR(50) 学生姓名 gender VARCHAR(10) 学生性别 age INT 学生年龄 class_id INT 所在班级 parent_name VARCHAR(50) 家长姓名 parent_phone VARCHAR(20) 家长联系电话 address VARCHAR(100) 家庭住址 enrollment_date DATE 报名日期 status VARCHAR(20) 学生状态(在读、毕业、退学等)
学生班级表(student_class)
class_id INT 班级ID(主键,自增) class_name VARCHAR(50) 班级名称 employee_id INT 负责老师ID(外键)
学生床位表(student_bed)
bed_id INT 床位ID(主键,自增) student_id INT 学生ID(外键) bed_number VARCHAR(20) 床位编号 status VARCHAR(20) 床位状态(已分配、未分配)
学生请假记录表(student_leave)
leave_id INT 请假ID(主键,自增) student_id INT 学生ID(外键) start_date DATE 请假开始日期 end_date DATE 请假结束日期 reason VARCHAR(255) 请假原因
学生缴费记录表(student_payment)
payment_id INT 缴费ID(主键,自增) student_id INT 学生ID(外键) payment_date DATE 缴费日期 amount DECIMAL(10, 2) 缴费金额 payment_method VARCHAR(50) 缴费方式
退费记录表(refund_records)
refund_id INT 退费ID(主键,自增) student_id INT 学生ID(外键) payment_id INT 缴费记录ID(外键) refund_date DATE 退费日期 amount DECIMAL(10, 2) 退费金额 refund_reason VARCHAR(255) 退费原因 status VARCHAR(50) 退费状态(审批中、已批准、已拒绝等) remark VARCHAR(255) 备注
餐饮计划表(meal_plan)
plan_id INT 餐饮计划ID(主键,自增) plan_name VARCHAR(100) 餐饮计划名称 start_date DATE 计划开始日期 end_date DATE 计划结束日期 description VARCHAR(255) 计划描述
餐饮菜单表(meal_menu)
menu_id INT 菜单ID(主键,自增) plan_id INT 餐饮计划ID(外键) menu_date DATE 菜单日期 breakfast VARCHAR(255) 早餐内容 lunch VARCHAR(255) 午餐内容 dinner VARCHAR(255) 晚餐内容 snack VARCHAR(255) 点心内容
餐饮费用表(meal_cost)
cost_id INT 费用ID(主键,自增) plan_id INT 餐饮计划ID(外键) amount DECIMAL(10, 2) 费用金额 description VARCHAR(255) 费用描述
首先本地需要写数据库,逻辑,之后上传到云端,
DB Schema表结构解释
属性分类 | 属性 | 类型 | 描述 |
---|---|---|---|
基本 | bsonType | any | 字段类型,如json object、字符串、数字、bool值、日期、时间戳,具体见下表bsonType可用类型 |
基本 | arrayType | String | 数组项类型,bsonType=”array” 时有效,HBuilderX 3.1.0+ 支持,具体见下表arrayType可用类型 |
基本 | title | string | 标题,开发者维护时自用。在schema2code生成前端表单代码时,默认用于表单项前面的label |
基本 | description | string | 描述,开发者维护时自用。在生成前端表单代码时,如果字段未设置componentForEdit,且字段被渲染为input,那么input的placehold将默认为本描述 |
基本 | defaultValue | string|Object | 默认值 |
基本 | forceDefaultValue | string|Object | 强制默认值,不可通过clientDB的代码修改,常用于存放用户id、时间、客户端ip等固定值。具体参考下表的defaultValue |
值域校验 | required | array | 是否必填。支持填写必填的下级字段名称。required可以在表级的描述出现,约定该表有哪些字段必填。也可以在某个字段中出现,如果该字段是一个json对象,可以对这个json中的哪些字段必填进行描述。详见下方示例 |
值域校验 | enum | Array | 字段值枚举范围,数组中至少要有一个元素,且数组内的每一个元素都是唯一的。 |
值域校验 | enumType | String | 字段值枚举类型,可选值tree。设为tree时,代表enum里的数据为树形结构。此时schema2code可生成多级级联选择组件 |
值域校验 | fileMediaType | String | 文件类型,bsonType=”file” 时有效,可选值 all|image|video 默认值为all,表示所有文件,image表示图片类型文件,video表示视频类型文件 HBuilderX 3.1.0+ |
值域校验 | fileExtName | String | 文件扩展名过滤,bsonType=”file” 时有效,多个文件扩展名用 “,” 分割,例如: jpg,png,HBuilderX 3.1.0+ 支持 |
值域校验 | maximum | number | 如果bsonType为数字时,可接受的最大值 |
值域校验 | exclusiveMaximum | boolean | 是否排除 maximum |
值域校验 | minimum | number | 如果bsonType为数字时,可接受的最小值 |
值域校验 | exclusiveMinimum | boolean | 是否排除 minimum |
值域校验 | minLength | number | 限制字符串或数组的最小长度 |
值域校验 | maxLength | number | 限制字符串或数组的最大长度 |
值域校验 | trim | String | 去除空白字符,支持 none|both|start|end,默认none,仅bsonType=”string”时有效 |
值域校验 | format | ‘url’|’email’ | 数据格式,不符合格式的数据无法入库。目前只支持’url’和’email’,未来会扩展其他格式 |
值域校验 | pattern | String | 正则表达式,如设置为手机号的正则表达式后,不符合该正则表达式则校验失败,无法入库 |
值域校验 | validateFunction | string | 扩展校验函数名 |
权限校验 | permission | Object | 数据库权限,控制什么角色可以对什么数据进行读/写,可控制表和字段,可设置where条件。见下文详述 |
错误返回 | errorMessage | string|Object | 当数据写入或更新时,校验数据合法性失败后,返回的错误提示 |
关联关系 | foreignKey | String | 关联字段。表示该字段的原始定义指向另一个表的某个字段,值的格式为表名.字段名 ,比如订单表的下单用户uid字段指向uni-id-users表的_id字段,那么值为uni-id-users._id 。关联字段定义后可用于联表查询,通过关联字段合成虚拟联表,极大的简化了联表查询的复杂度 |
关联关系 | parentKey | String | 同一个数据表内父级的字段。详情参考:树状数据查询 |
schema2code | label | string | 字段标题。schema2code生成前端代码时,渲染表单项前面的label标题。如果不填,会使用title属性。适用于title不便显示在表单项前面的情况 |
schema2code | group | string | 分组id。schema2code生成前端代码时,多个字段对应的表单项可以合并显示在一个uni-group组件中 |
schema2code | order | int | 表单项排序序号。schema2code生成前端代码时,默认是以schema中的字段顺序从上到下排布表单项的,但如果指定了order,则按order规定的顺序进行排序。如果表单项被包含在uni-group中,则同组内按order排序 |
schema2code | component | Object|Array | schema2code生成前端代码时,使用什么组件渲染这个表单项。已废弃。请使用下面的componentForEdit和componentForShow |
schema2code | componentForEdit | Object|Array | HBuilderX 3.1.0+, 生成前端编辑页面文件时(add.vue、edit.vue),使用什么组件渲染这个表单项。比如使用input输入框。 |
schema2code | componentForShow | Object|Array | HBuilderX 3.1.0+, 生成前端展示页面时(list.vue、detail.vue),使用什么组件渲染。比如使用uni-dateformat格式化日期。 |
unicloud介绍
服务空间,云数据库,云函数,云存储可能用到
云函数的创建,直接新建即可