找 得 到 · 约 得 上 · 坐 得 下 · 学 得 好
先对齐需求原文,再说明为什么要优化
| # | 问题 | 影响 |
|---|---|---|
| 1 | 只有"看",没有"用"——缺预约、选座、签到闭环 | 共享自习室的落脚点是"有位子坐",纯地图+列表只是导览工具,群众用完即走 |
| 2 | 地图与列表未定义联动规则——四区边界、标点聚合、定位授权、筛选排序均未规定 | 开发阶段理解不一致,验收时"以谁为准"扯皮;标点密集区体验极差 |
| 3 | 缺"党建"内核——名为党建联盟,却无党组织、联盟成员单位、党员身份维度 | 易被评审为"只是个地图工具",与党建联盟的立项初衷不符 |
| 4 | 详情页未定义——字段全部堆在列表卡片里,信息层级混乱 | 联系方式等敏感信息裸露在列表,图片展示与长文推荐理由无处安放 |
| 5 | 缺数据来源与运维机制——谁录入、谁审核、过期信息谁维护未定义 | 上线即变"僵尸小程序",三个月后地址电话全过期 |
| 6 | "党建红色系"无法直接验收——无具体色值与使用规范 | 乙方做出十种红,评审无法判定合格 |
底部 4 个 Tab,功能不重叠、入口不超过两层
| 页面 | 路径 | 核心职责 | 对应需求 |
|---|---|---|---|
| 首页 · 找自习室 | pages/home/home | 地图标点 + 列表展示 + 筛选搜索 | REQ-01 / 02 |
| 自习室详情 | pages/room/detail | 图片轮播、信息全字段、导航/拨号/预约入口 | REQ-02 |
| 选座预约 | pages/booking/booking | 日期时段、座位选择、实名提交 | 新增 |
| 预约成功 / 签到码 | pages/booking/result | 预约码、订阅提醒、取消入口 | 新增 |
| 我的预约 | pages/mine/bookings | 进行中 / 已完成 / 已取消,签到签退 | 新增 |
| 党建联盟 | pages/alliance/list | 联盟成员、共建党组织、先锋岗 | REQ-03 党建 |
| 阵地活动详情 | pages/alliance/activity | 主题党日、"三会一课"、报名签到 | 新增 |
| 我的 | pages/mine/index | 个人信息、积分、收藏、设置 | 新增 |
| 实名认证 | pages/mine/verify | 身份认证,党员亮身份 | 新增 |
| 导航页 | 唤起微信内置地图 | wx.openLocation,不单独开发 | REQ-02 |
上地图、下列表,双向联动;所有字段一次性给足
polygon 描边着色并标注区名;湟中区、大通回族土族自治县、湟源县作为二期扩展(数据结构预留,不做硬编码)。卡片字段与需求逐条对应,一个不漏、一个不堆:
| 需求字段 | 展示形式 | 交互 |
|---|---|---|
| 自习室名称 | 卡片主标题(16px 加粗)+ 状态徽章(开放中 / 已满 / 暂停开放) | 点击整卡 → 详情页 |
| 所在县区 | 红色标签,如 城中区城西区;附社区名(如"礼让街社区") | 点击标签 → 按区筛选 |
| 位置信息 | 详细地址(1 行省略)+ 距我 1.2km;行尾带导航箭头图标 | 点击位置 → 唤起微信地图导航 |
| 推荐理由 | 金色高亮底纹的一句话推荐,最多 2 行,超出省略 | 点击 → 详情页查看完整理由 |
| 配套措施 | 标签化罗列,最多显示 4 个 +"等 6 项 | 点击"更多" → 详情页设施栅格 |
| 联系人 | 姓名 + 职务(如"管理员 · 社区网格员") | — |
| 联系方式 | 脱敏显示 138****8888,右侧电话图标 | 点击 → 确认后拨号 |
| 自习室图片 | 左侧 96×96 主图 + 右上角"N 张"角标 | 点击 → 详情图册 |
列表负责"快速比较",详情负责"看明白、马上约"
只表达信息层级与按钮位置,不是最终视觉稿
这是共享自习室"能用"的关键,也是原需求最大的缺口
| 环节 | 方式 | 说明 |
|---|---|---|
| 签到 | 扫码签到(主)+ 定位签到(辅) | 扫自习室门口二维码;辅助方式为进入 100 米范围内点击签到,二者取先达成者 |
| 签退 | 自动 / 手动 | 离开时扫码签退;忘记签退的,按系统检测的最后活跃时间兜底 |
| 时长统计 | 自动计算 | 累计"自习时长"进入个人档案,可在"我的"查看周/月曲线 |
这是本小程序区别于商业自习室 App 的根本
轻量聚合页,不做重内容
三张主表,字段类型、必填、来源一次说清
rooms(来源:社区填报 → 区委组织部审核)| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| room_id | string | 是 | 主键 |
| name | string | 是 | 自习室名称,列表主标题 |
| district | enum | 是 | 城中区 / 城西区 / 城北区 / 城东区(二期扩展湟中、大通、湟源) |
| community | string | 是 | 所属社区(街道) |
| address | string | 是 | 详细地址,用于地图导航 |
| lng / lat | number | 是 | 经纬度,标点精度误差 < 50m |
| reason | text | 是 | 推荐理由,列表截断 2 行,详情页全文 |
| facilities | array | 是 | 配套措施,枚举:无线网/空调/饮水/插座/台灯/书架/储物柜/母婴室/无障碍/夜间开放 |
| contact_name | string | 是 | 联系人姓名 |
| contact_title | string | 否 | 职务,如"社区网格员" |
| contact_phone | string | 是 | 联系方式,列表脱敏展示 |
| images | array | 是 | 自习室图片,3–6 张,首图为列表缩略图 |
| open_time | string | 是 | 开放时间,如 08:30–21:00 |
| seat_total / seat_used | int | 是 | 座位总数 / 当前占用,用于状态与余座 |
| status | enum | 是 | 开放中 / 已满 / 暂停开放(暂停需填原因) |
| alliance_flag | bool | 是 | 是否党建联盟示范点(地图金星标) |
| org_id | string | 是 | 所属党组织 / 联盟成员单位 |
| updated_at | datetime | 是 | 最近更新时间,超过 90 天未更新自动标灰并提醒运维 |
bookings| 字段 | 类型 | 说明 |
|---|---|---|
| booking_id | string | 主键 |
| room_id / seat_no | string | 自习室与座位号 |
| user_id | string | 用户 ID(实名认证后绑定) |
| date / slot_start / slot_end | date / time | 预约日期与 30 分钟粒度时段 |
| status | enum | 待签到 / 使用中 / 已完成 / 已取消 / 失信 |
| checkin_time / checkout_time | datetime | 签到、签退时间(含签到方式:扫码/定位) |
| duration | int | 自习时长(分钟),签退时计算 |
activities| 字段 | 类型 | 说明 |
|---|---|---|
| act_id / title / type | string / enum | 主键、活动名称、类型(主题党日 / "三会一课" / 青年夜校 / 公益托管 …) |
| org_id / room_id | string | 主办党组织、举办自习室 |
| start_time / end_time | datetime | 活动起止时间 |
| quota / signed | int | 名额 / 已报名人数 |
| cover / detail | string / text | 封面图、活动详情 |
评审时按这条线走一遍,功能是否完整一目了然
把"红色系"变成可量化的验收条款,避免十种红
| 项目 | 规范 |
|---|---|
| 字体 | 标题用宋体(Songti SC / 思源宋体)体现庄重感;正文用系统黑体;数字统一等宽,避免跳动 |
| 字号层级 | 页面主标题 20px / 卡片标题 16px / 正文 14px / 辅助 12px,只此四级 |
| 圆角 | 卡片 16px、按钮 12px、标签 6px |
| 阴影 | 只两级:卡片 `0 1px 3px`、浮层 `0 8px 24px -14px`;不用重投影 |
| 图标 | 一律线性矢量 SVG(24×24,fill=currentColor),严禁 emoji(跨设备渲染不一致) |
| 底纹 | 可叠加党徽放射纹 / 回纹 / 高原山脊纹,透明度 3%–6%,不喧宾夺主 |
| 间距 | 8px 基准栅格,卡片内 16px,卡片间距 12px |
交付给开发团队的关键接口与坑位
| 能力 | 实现方式 | 要点 |
|---|---|---|
| 地图展示 | 微信小程序 map 组件 | 四区边界用 polygon;标点用 markers + cluster 聚合;include-points 自适应视野 |
| 点标交互 | bindmarkertap | 回传 markerId → 查本地缓存渲染气泡卡,不再发请求 |
| 唤起导航 | wx.openLocation({latitude,longitude,name,address,scale}) | 无需地图权限,调起微信内置地图并支持"去这里",比自绘导航页体验好得多 |
| 拨号 | wx.makePhoneCall | 前置确认弹窗,号码列表脱敏、详情页二次确认后展示 |
| 数据存储 | 微信云开发(云数据库 + 云函数)或自有后端 API | 自习室台账由社区填报、区委组织部审核,审核流不可省 |
| 图片 | 云存储 + CDN | 列表用 webp 缩略图(≤60KB),详情原图懒加载 |
| 授权 | scope.userLocation、订阅消息、手机号 | 逐项按需申请,拒绝后必须有降级路径,不可强拦 |
| 性能 | 首屏地图与列表并行加载,列表分页 10 条 | 进入详情返回时保留列表滚动位置与筛选状态 |
| 合规 | 隐私政策、位置信息使用说明、用户协议 | 党建数据不出域,后台操作留痕可审计 |
先让群众能用,再让运营省力,最后让数据说话
逐条打勾,双方无争议