# UniPal **Repository Path**: Kuaima-tech/uni-pal ## Basic Information - **Project Name**: UniPal - **Description**: UniPal 陪玩系统:「服务提供者 — 平台 — 消费者」双边撮合系统。覆盖游戏陪玩、健身陪练、才艺陪练、医疗陪诊、家教陪学、宠物陪玩六大场景,为供需双方提供发布—匹配—交易—履约—评价的一站式陪伴服务平台。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-09-04 - **Last Updated**: 2026-10-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # peiw 基于 **HonoX + SQLite** 的角色权限(RBAC)管理后台 + **陪玩(陪伴服务撮合)交易闭环**。在用户、角色、权限、部门、菜单、会话、通知、审计等底座之上,已实现 P0 业务域:类目/资质等级配置、服务发布、下单支付(模拟)、订单状态机、双币钱包/流水、平台分账、提现审核、实名与资质认证、评价。 行业差异沉淀在「类目 + 资质等级 + 计费方式 + 标签」配置中,游戏陪玩 / 健身陪练 / 陪诊等行业可纯配置接入,方案见 [陪玩系统快速落地方案(多行业通用版)](./docs/陪玩系统快速落地方案_多行业通用版.md)。 界面文案为中文,视觉采用青绿品牌色板(WorkBuddy 风格),支持明暗多主题与侧栏折叠。 规划文档见 [`docs/`](./docs/)(含 [全面升级方案](./docs/Plan/upgrade-plan.md))。 ## 功能概览 ### 身份与访问 | 能力 | 说明 | | --- | --- | | 登录 / 登出 | 邮箱 + 密码;HttpOnly Cookie 会话,有效期 7 天 | | 自助注册 | `/register` 开放注册;新用户为消费者分型、无角色(仅公开菜单) | | 登录防爆破 | 同一邮箱连续失败 5 次锁定 5 分钟(进程内计数) | | 账号状态 | `active` / `disabled`;停用账号立即拒绝会话 | | 修改密码 | 校验当前密码;改密后注销其它设备会话 | | 会话管理 | 查看本账号全部设备会话,可注销其它设备 | ### RBAC | 能力 | 说明 | | --- | --- | | 用户管理 | 创建 / 编辑 / 删除;分配角色与部门;启用停用;批量操作(含撤销停用) | | 角色管理 | 创建 / 编辑 / 删除;勾选权限;角色继承(多层闭包 + 环检测) | | 权限点 | `resource:action` 命名(支持多级,如 `org:department:manage`);树形分组目录 | | 防锁死 | 不能停用 / 删除自己;不能剥离最后一个管理员;内置 `admin` 角色不可改名或删除 | | 权限守卫 | 未登录重定向登录页(API/JSON 请求返回 401);缺权限返回统一 403 页面 | | 审计日志 | 管理端写操作(用户/角色/权限/菜单/部门)落 `audit_logs`,操作人删除后记录保留 | ### 组织与导航 | 能力 | 说明 | | --- | --- | | 部门管理 | 树形部门(总公司 → 大区 → 团队);防环;有子部门或成员时禁止删除 | | 菜单管理 | DB 驱动侧栏:分组 + 菜单项;按权限过滤;排序 / 显隐 / 级联删除 | | 工作台 | 登录后首页,按权限展示快捷入口与当前权限列表 | | 仪表盘 | 用户 / 角色 / 权限数量统计与模块入口 | ### 陪玩业务(P0 交易闭环) | 能力 | 说明 | | --- | --- | | 类目管理 | 树形服务类目(游戏陪玩 / 健身陪练 / 陪诊…),行业配置核心,纯配置接入新行业 | | 资质等级 | 类目下挂等级:认证方式(上传 / 考核)+ 价格区间权益 | | 服务管理 | 发布 / 上下架 / 推荐 / 删除;计费方式(按单 / 按小时 / 按次)+ 标签 + 评分聚合;服务方可自助发布(准入:实名通过 + 已通过资质组合),推荐位仅后台可设 | | 订单管理 | 状态机:待支付 → 待接单 → 进行中 → 已完成 → 已评价;取消 / 退款原路退回;后台可强制退款;超时 30 分钟未接单自动退款(惰性清扫) | | 钱包 + 支付 | 双币账户:站内币(消费)+ 可提现余额;模拟充值;所有资金变动只走 `pay_flows` 一张流水表(前后余额快照) | | 分账结算 | 订单完成自动分账:平台抽成比例走 `PLATFORM_FEE_RATE`(默认 0.2),结算时快照进 `settlements` | | 提现审核 | 固定档位(¥10 / ¥50 / ¥100 / ¥200 / ¥500 / ¥1000)+ 每日限 3 次;申请冻结 → 人工审核 → 线下打款标记 / 驳回解冻 | | 认证管理 | 实名认证(通过自动升级服务方)+ 资质认证(按类目等级),审核结果站内通知 | | 评价 | 订单完成后消费者评分,自动聚合到服务评分 | | C 端页面 | 服务大厅、服务详情下单、我的订单(消费者 / 服务方双视角)、我的钱包、认证中心、我的服务(服务方自助发布) | ### 交互与体验 - **命令面板**(`⌘K`):按权限可见的导航项 + 新建用户 / 切换主题 / 登出 - **通知中心**:当前用户最近 20 条站内通知,支持全部已读 - **主题**:light / dark / corporate / cupcake / nord / synthwave,本地持久化,避免闪屏 - **侧栏**:可折叠为图标模式;分组可收起;移动端抽屉 - **Toast**:URL `?flash=success:消息` 反馈(统一由 `flashRedirect` 生成,全量 URL 编码);批量停用支持一键撤销 - **搜索 / 分页 / 排序**:用户、角色、权限列表(统一的筛选栏 `FilterBar` 与排序表头 `SortHeader`) - **行编辑弹窗单例**:列表页共用 1 个弹窗 DOM,打开时由 `row-modal` island 按行数据填充,不随行数膨胀 - **空状态 / 面包屑 / 确认对话框 / 表单内联错误** ## 技术栈 | 层 | 选型 | | --- | --- | | 运行时 | Node.js,ESM | | Web 框架 | [Hono](https://hono.dev) 4 + [HonoX](https://github.com/honojs/honox) 0.1(文件系统路由、SSR、Islands) | | UI | Hono JSX(`hono/jsx`),无 React 运行时 | | 样式 | Tailwind CSS 4 + daisyUI 5;Geist / Noto Sans SC 可变字体 | | 数据库 | SQLite([better-sqlite3](https://github.com/WiseLibs/better-sqlite3))+ [Drizzle ORM](https://orm.drizzle.team) | | 构建 | Vite 8(client + SSR 两步构建,`@hono/vite-build/node`) | | 测试 | Vitest 4,内存 SQLite | 交互热点(命令面板、通知中心、权限选择器、批量操作、确认按钮、行编辑弹窗、Toast)以 HonoX **Islands** 形式在客户端水合;页面主体走服务端渲染 + 原生 `