bbs1 客户端

编译源码地址:
https://github.com/bbs1git/bbs1org_app-client

一套 Vue 3 + uni-app 代码,编译出网页H5 / 微信小程序 / 安卓 / iOS 四个端。
后端是站点的 app_api 插件。

后端插件地址:
https://bbs1.org/topic/2017


客户端生成流程:
第一步:在自己的bbs1论坛上,安装插件 https://bbs1.org/topic/2017
第二步:告诉ai以下提示语:

我的bbs1站点根地址是:https://xxx  客户端源码是:https://github.com/bbs1git/bbs1org_app-client
请给我编译生成 网页H5 / 微信小程序 / 安卓 / iOS 四个客户端

编译生成得到产物:
app-client/dist/build/h5
H5版本,直接浏览器访问,或者部署到线上访问
app-client/dist/build/mp-weixin
微信小程序,请用微信开发者工具导入
app-client/dist/build/app
安卓 + iOS,请用 HBuilderX 导入后云打包


技术架构:
Vue 3 + uni-app + 纯 JSON 接口 + Bearer 令牌,
和网页端共用同一个数据库、同一套权限判定。
四个客户端,修改一套源码,即可升级功能,无需各自维护。

npm install
npm run dev:h5           # 浏览器里调试,改完即时刷新
npm run dev:mp-weixin    # 产物在 dist/dev/mp-weixin,用微信开发者工具导入
npm run build:h5         # 产物在 dist/build/h5
npm run build:mp-weixin
npm run build:app        # 产物用 HBuilderX 导入后云打包
npm run type-check       # vue-tsc --noEmit

装依赖时注意:@dcloudio/* 全部锁在 3.0.0-5020420260813003。
npm 上的 latest 标签指向的是 Vue 2 那条线,混进来会和 vue@3 打架。

跑起来之前,服务端要先满足几件事

事项在哪
启用 app_api 插件后台插件管理。改过插件代码或表结构要「停用再启用」,光保存不会重跑安装
关掉 CORS 限制或加白名单插件配置 cors_origins。H5 端跨域时必填;App 和小程序不受同源策略约束
打开上传插件配置 upload_enabled,并启用 attachment_upload 插件
微信登录(可选)插件配置里填 wechat_appid / wechat_secret;小程序还要在公众平台把接口域名配成 request 合法域名

客户端默认连 https://bbs1.org。改地址有两个入口:

  • 运行时:我的 → 设置 → 站点地址(自建站、内网调试用这个,改完会清缓存并重启到首页)
  • 编译期:src/core/config.ts 里的 DEFAULT_BASE_URL

目录

src/
  core/           纯逻辑,不碰界面
    config.ts       站点地址、接口前缀、客户端版本号
    http.ts         请求层:信封归一、401 续期重试、会话失效广播
    tokens.ts       令牌与会话(单飞续期在这里)
    errors.ts       错误码与 ApiError
    storage.ts      本地存储的薄封装
    types.ts        与服务端序列化结果一一对应的类型
    icon.ts         图标:把描边 SVG 拼成 data URI
    theme.ts        主题:跟随系统 / 浅色 / 深色
    palette.ts      调色板的 JS 副本(图标颜色要由 JS 给,CSS 变量进不去 SVG)
    rich.ts         正文 HTML 的客户端加工(补绝对地址、小程序内联样式)
    color.ts        高亮色解析与对比度判断、字母头像底色
    highlight.ts    搜索关键词命中切分(不用正则,用户输入当字面量)
    format.ts       时间与数字的展示
    navigate.ts     路由表与跳转
    platform.ts     平台差异收口
    ui.ts           轻提示、确认框、加载态
    device.ts       上报给服务端的设备信息
  api/            接口函数,一文件一组
  stores/         Pinia:会话、站点、主题流、消息、界面外壳
  components/     NavBar / BottomBar / TopicCard / ForumPicker / Composer / AppIcon …
  composables/    usePageChrome:头部高度、呼吸间距、滚动状态
  pages/          9 个页面
  styles/         global.scss(全局 CSS 输出)
  uni.scss        变量与 mixin,会被注入到每个 <style lang="scss">

最后由 bbs1 编辑于 2026-10-14 22:24
淘帖专辑必装插件
主楼