注意: 微信小程序端需要配置一个正确的appid才能使用。此外由于实际需求变更,部分模块如: 留言、私聊等模块并未体现在此版本的代码中
小程序设计原稿发布在Figma上,需要可自取
字段名 字段类型 可否为空 说明 sid int(6),无符号,零填充,自动递增 否 主键,学校的唯一标识 name char(32) 否 学校名称 address varchar(255) 否 学校地址 phone char(32) 否 学校联系方式 createdAt datetime 否 学校注册时间,由Sequelize自动管理 updatedAt datetime 否 学校信息更新时间,由Sequelize自动管理
字段名 字段类型 可否为空 说明 cid int(10),无符号,零填充,自动递增 否 主键,校区的唯一标识 name char(32) 否 校区名称 location json 否 学校地址的经纬度,用于确定用户选择拾取地点时的初始位置,格式:{"latitude": "30", "longitude": "121"} tip json 否 该校区指定的用户可选择发布的物品条目,格式:["手机", "电脑"] notice varchar(255) 是 该校区发布的公告 createdAt datetime 否 校区注册时间,由Sequelize自动管理 updatedAt datetime 否 校区信息更新时间,由Sequelize自动管理 schoolSid int(6) 否 校区所属学校id
字段名 字段类型 可否为空 说明 uid char(64) 否 主键,由微信小程序中该用户的openid与其所属学校的sid共同组成(一个openid可与不同的学校sid组合,即一个用户可注册多个学校),唯一标识 name char(16) 否 用户微信名 image varchar(255) 否 用户微信头像 coin int(10) 否 用户发布的物品被管理员确认认领后给予的积分奖励 createdAt datetime 否 用户注册时间,由Sequelize自动管理 updatedAt datetime 否 用户信息更新时间,由Sequelize自动管理 campusCid int(10) 否 用户所属校区id
字段名 字段类型 可否为空 说明 pid int(10),无符号,零填充,自动递增 否 主键,可放置地点id,唯一标识 name char(16) 否 地点名称 location json 否 可放置地点的经纬度,用于为寻物者导航,格式:{"latitude": "30", "longitude": "121"} createdAt datetime 否 地点注册时间,由Sequelize自动管理 updatedAt datetime 否 地点信息更新时间,由Sequelize自动管理 campusCid int(10) 否 地点所属校区id
字段名 字段类型 可否为空 说明 oid bigint(20),无符号,零填充,自动递增 否 主键,物品id,唯一标识 name char(32) 否 物品名称 address json 否 拾取物品的地点的经纬度,由小程序接口自动获取,格式:{"name": "海大图书馆", "address": "海大校内", "latitude": 30, "longitude": 121} time date 否 用户拾取物品的日期 describe json 是 物品相关描述,选填项目 image json 是 物品相关图片,选填,最多三张,由程序自动管理,空值会被设为"[]",格式:["/image/日期/图片名称"] createdAt datetime 否 物品信息上传时间,由Sequelize自动管理 updatedAt datetime 否 物品信息更新时间,由Sequelize自动管理 userUid char(64) 否 发布该条目的用户id placePid int(10) 否 该物品放置的放置地点id claim char(64) 是 认领物品的用户id,字段为空则无人认领,按需求应由管理员填写确认
字段名 字段类型 可否为空 说明 hash char(128) 否 主键,图片hash,唯一标识 src varchar(255) 否 图片相对地址 type char(64) 否 图像MIME类型 createdAt datetime 否 图片上传时间,由Sequelize自动管理 updatedAt datetime 否 图片信息更新时间,由Sequelize自动管理
字段名 字段类型 可否为空 说明 userUid char(64) 否 主键,用户id,与objectOid共同确认一条记录 objectOid bigint(20) 否 主键,物品id,与userUid共同确认一条记录 createdAt datetime 否 用户浏览物品的时间,由Sequelize自动管理 updatedAt datetime 否 相关信息更改时间,由Sequelize自动管理
字段名 字段类型 可否为空 说明 tid int(10),无符号,零填充,自动递增 否 主键,关键词id name char(32) 否 关键词名称 count bigint(20) 否 关键词搜索次数 createdAt datetime 否 关键词第一次被搜索的时间,由Sequelize自动管理 updatedAt datetime 否 关键词信息更新的时间,由Sequelize自动管理 sid int(6) 否 标签所属学校id
id 请求地址 请求方法 头部是否携带JWT 携带数据描述 返回值描述 请求页面 1 /api/user/session/login POST 否 临时code,学校sid,校区cid(仅注册时存在),用户头像昵称(仅注册时存在) JWT,用户信息 login.submit 2 /api/user/info/school POST 否 微信小程序临时code 学校,校区,该校下是否存在该用户 login.onload 3 /api/user/info/index/tip POST 是 无 各个校区名称,公告,标签,及对应的10条物品数据(数据要经过handleList函数处理) index.onload / list.searchKeyWord 4 /api/user/info/index/list POST 是 校区cid,当前页最小的物品oid 物品相关信息,如oid,图片,描述等 index.goBtm / list.goBtm 5 /api/user/info/user-count GET 是 无 相关物品数量 user.onload 6 /api/user/info/user-object POST 是 点击图标的索引 返回对应物品的详情信息 user.goList 7 /api/user/info/search-tip GET 是 无 返回搜索数较高的几条热搜 search.onload 8 /api/user/info/details-info POST 是 物品oid,是否获取物品详情信息的flag(页面可能直接接受参数进行渲染不需要请求物品信息) 返回发布者信息,当请求的flag为true时获取物品详情信息 details.onload 9 /api/user/info/submit-list GET 是 无 用户可选发布物品列表 submit.onload 10 /api/serve/img/upload POST 是 图片 图片相对地址 submit.submitInfo 11 /api/user/operate/submit-object-info POST 是 拾取物品的地点,图片,描述,时间等 ok submit.submitInfo
路由id key data 2 jwt string 2 info user:{ coin,id,iamge,name }
页面 说明 about 关于页面 agreement 用户协议页面 details 物品详情页 developer 开发者页面 index 首页 list 搜索页和用户页跳转到的物品列表页 login 登录注册页 message 信息列表页,原与私聊相关,应最新需求去除私聊后,本页面暂时保留 search 搜索页 session 私聊对话页,原与私聊相关,应新需求去除,暂时保留 setting 设置页,需求不明确,故仅实现退出登录 space 底部栏中间按钮占位页面,无用,但需保留 submit 信息提交页 user 用户个人中心 custom-tab-bar 非页面,底部Bar组件,用于主页和用户个人中心页面
微信小程序会获取用户的一个临时code(5分钟有效),并将code发送到后端,后端根据配置文件里的信息请求
https://api.weixin.qq.com/sns/jscode2session
换取用户的openid,将该openid视为可信数据,以此为依据发放JWT
- 微信小程序
- 在
app.js
中globalData
下配置服务器域名和图片上传接口- 按照一般微信小程序部署步骤部署
- 后端
- 数据库相关配置在
config
目录下,手动创建数据库- 将
/utils/mountModel.js
下同步模型
部分解除注释,直接运行程序建立数据库相关表(也可执行sql文件创建)- 手动填入学校,校区,放置地点等信息
- 在微信公众平台注册用户,并在
config
目录的文件中配置相关的appid
和secret
- 运行程序,可使用NGINX进行反代