- 修改登录路由为 `/pb/api/wechat/login`,新增局部 try/catch 以保留业务状态码并返回统一结构 `{ code, msg, data }`。
- 更新所有相关 API 路由前缀为 `/pb`,包括系统、平台、字典、附件和文档接口。
- 新增文档接口支持多个附件 ID,更新 OpenAPI 文档以反映这些变化。
- 在数据库模式中添加对字典名称的唯一索引,确保全局唯一性。
- 更新文档字段,设置 `document_title` 和 `document_type` 为必填项,并在验证过程中检查字段的必填属性。
1484 lines
48 KiB
YAML
1484 lines
48 KiB
YAML
openapi: 3.1.0
|
||
info:
|
||
title: BAI PocketBase Hooks API
|
||
description: |
|
||
基于 PocketBase `bai_api_pb_hooks` 的对外接口文档,可直接导入 Postman。
|
||
当前 `tbl_auth_users.openid` 已被定义为全平台统一身份锚点:
|
||
- 微信用户:`openid = 微信 openid`
|
||
- 平台用户:`openid = 服务端生成的 GUID`
|
||
请在 Apifox 环境中统一设置全局 Header:`Authorization: Bearer {{token}}`。
|
||
version: 1.0.0
|
||
servers:
|
||
- url: https://bai-api.blv-oa.com
|
||
description: 生产环境
|
||
- url: http://localhost:8090
|
||
description: PocketBase 本地环境
|
||
tags:
|
||
- name: 系统
|
||
description: 基础检查接口
|
||
- name: 微信认证
|
||
description: 面向微信用户的认证接口;认证成功后仍统一使用全平台 `openid` 与 PocketBase 原生 token。
|
||
- name: 平台认证
|
||
description: 面向平台用户的认证接口;平台用户会生成 GUID 并写入统一 `openid` 字段。
|
||
- name: 字典管理
|
||
description: 面向 ManagePlatform 用户的系统字典维护接口。
|
||
- name: 附件管理
|
||
description: 面向 ManagePlatform 用户的附件上传、查询与删除接口。
|
||
- name: 文档管理
|
||
description: 面向 ManagePlatform 用户的文档新增、查询、修改、删除接口;查询时会自动返回关联附件的 PocketBase 文件流链接。
|
||
- name: 文档历史
|
||
description: 面向 ManagePlatform 用户的文档操作历史查询接口。
|
||
components:
|
||
schemas:
|
||
ApiResponse:
|
||
type: object
|
||
required: [code, msg, data]
|
||
properties:
|
||
code:
|
||
type: integer
|
||
example: 200
|
||
msg:
|
||
type: string
|
||
example: 操作成功
|
||
data:
|
||
type: object
|
||
additionalProperties: true
|
||
HealthData:
|
||
type: object
|
||
properties:
|
||
status:
|
||
type: string
|
||
example: healthy
|
||
version:
|
||
type: string
|
||
description: 当前已部署 hooks 版本号,用于确认发布是否生效
|
||
example: 2026.03.26-health-probe.1
|
||
timestamp:
|
||
type: string
|
||
format: date-time
|
||
UsersCountData:
|
||
type: object
|
||
properties:
|
||
total_users:
|
||
type: integer
|
||
description: tbl_auth_users 表中的用户总数
|
||
example: 128
|
||
HelloWorldData:
|
||
type: object
|
||
properties:
|
||
message:
|
||
type: string
|
||
example: Hello, World!
|
||
timestamp:
|
||
type: string
|
||
format: date-time
|
||
status:
|
||
type: string
|
||
example: success
|
||
build_time:
|
||
type: string
|
||
nullable: true
|
||
format: date-time
|
||
CompanyInfo:
|
||
type: object
|
||
nullable: true
|
||
additionalProperties: true
|
||
UserInfo:
|
||
type: object
|
||
description: |
|
||
统一用户视图。
|
||
其中 `openid` 为全平台统一身份标识:微信用户使用微信 openid,平台用户使用服务端生成 GUID。
|
||
properties:
|
||
pb_id:
|
||
type: string
|
||
users_convers_id:
|
||
type: string
|
||
users_id:
|
||
type: string
|
||
users_idtype:
|
||
type: string
|
||
description: 用户身份来源类型
|
||
enum: [WeChat, ManagePlatform]
|
||
users_id_number:
|
||
type: string
|
||
users_status:
|
||
type: string
|
||
users_rank_level:
|
||
type: number
|
||
users_auth_type:
|
||
type: number
|
||
users_type:
|
||
type: string
|
||
enum: [游客, 注册用户]
|
||
users_name:
|
||
type: string
|
||
users_phone:
|
||
type: string
|
||
users_phone_masked:
|
||
type: string
|
||
users_level:
|
||
type: string
|
||
users_picture:
|
||
type: string
|
||
openid:
|
||
type: string
|
||
description: 全平台统一身份标识;微信用户为微信 openid,平台用户为服务端生成的 GUID
|
||
company_id:
|
||
type: string
|
||
users_parent_id:
|
||
type: string
|
||
users_promo_code:
|
||
type: string
|
||
usergroups_id:
|
||
type: string
|
||
company:
|
||
$ref: '#/components/schemas/CompanyInfo'
|
||
created:
|
||
type: string
|
||
updated:
|
||
type: string
|
||
PocketBaseAuthResponse:
|
||
type: object
|
||
description: |
|
||
项目统一认证响应。
|
||
所有对外接口统一返回 `code`、`msg`、`data`,认证成功时额外返回顶层 `token`。
|
||
properties:
|
||
code:
|
||
type: integer
|
||
example: 200
|
||
msg:
|
||
type: string
|
||
example: 登录成功
|
||
data:
|
||
type: object
|
||
properties:
|
||
status:
|
||
type: string
|
||
enum: [register_success, login_success]
|
||
is_info_complete:
|
||
type: boolean
|
||
user:
|
||
$ref: '#/components/schemas/UserInfo'
|
||
token:
|
||
type: string
|
||
description: PocketBase 原生 auth token;仅认证类接口在成功时额外返回
|
||
example:
|
||
code: 200
|
||
msg: 登录成功
|
||
data:
|
||
status: login_success
|
||
is_info_complete: true
|
||
user:
|
||
pb_id: vtukf6agem2xbcv
|
||
users_id: U202603260001
|
||
users_idtype: ManagePlatform
|
||
users_name: momo
|
||
users_phone: '13509214696'
|
||
users_phone_masked: '135****4696'
|
||
users_status: ''
|
||
users_rank_level: 0
|
||
users_auth_type: 0
|
||
users_type: 注册用户
|
||
users_picture: ''
|
||
openid: app_momo
|
||
company_id: ''
|
||
users_parent_id: ''
|
||
users_promo_code: ''
|
||
usergroups_id: ''
|
||
company: null
|
||
created: ''
|
||
updated: ''
|
||
token: eyJhbGciOi...
|
||
WechatLoginRequest:
|
||
type: object
|
||
required: [users_wx_code]
|
||
description: 微信小程序登录/注册请求体。
|
||
properties:
|
||
users_wx_code:
|
||
type: string
|
||
description: 微信小程序登录临时凭证 code
|
||
example: 0a1b2c3d4e5f6g
|
||
WechatProfileRequest:
|
||
type: object
|
||
required: [users_name, users_phone_code, users_picture]
|
||
description: 微信用户资料完善请求体。
|
||
properties:
|
||
users_name:
|
||
type: string
|
||
example: 张三
|
||
users_phone_code:
|
||
type: string
|
||
example: 2b7d9f2e3c4a5b6d7e8f
|
||
users_picture:
|
||
type: string
|
||
example: https://example.com/avatar.png
|
||
WechatProfileResponseData:
|
||
type: object
|
||
properties:
|
||
status:
|
||
type: string
|
||
enum: [update_success]
|
||
user:
|
||
$ref: '#/components/schemas/UserInfo'
|
||
PlatformRegisterRequest:
|
||
type: object
|
||
required: [users_name, users_phone, password, passwordConfirm, users_picture]
|
||
description: 平台用户注册请求体;注册成功后将生成 GUID 并写入统一 `openid` 字段。
|
||
properties:
|
||
users_name:
|
||
type: string
|
||
example: 张三
|
||
users_phone:
|
||
type: string
|
||
example: 13800138000
|
||
password:
|
||
type: string
|
||
example: 12345678
|
||
passwordConfirm:
|
||
type: string
|
||
example: 12345678
|
||
users_picture:
|
||
type: string
|
||
example: https://example.com/avatar.png
|
||
users_id_number:
|
||
type: string
|
||
users_level:
|
||
type: string
|
||
users_type:
|
||
type: string
|
||
company_id:
|
||
type: string
|
||
users_parent_id:
|
||
type: string
|
||
users_promo_code:
|
||
type: string
|
||
usergroups_id:
|
||
type: string
|
||
PlatformLoginRequest:
|
||
type: object
|
||
required: [login_account, password]
|
||
description: 平台用户登录请求体;前端使用邮箱或手机号 + 密码提交,服务端内部转换为 PocketBase 原生 password auth。
|
||
properties:
|
||
login_account:
|
||
type: string
|
||
description: 支持邮箱或手机号
|
||
example: admin@example.com
|
||
password:
|
||
type: string
|
||
example: 12345678
|
||
SystemRefreshTokenRequest:
|
||
type: object
|
||
description: |
|
||
系统刷新 token 请求体。
|
||
`users_wx_code` 允许为空。
|
||
当 `Authorization` 对应 token 有效时,可不传或传空;
|
||
当 token 失效时,需提供 `users_wx_code` 走微信 code 重新签发流程。
|
||
properties:
|
||
users_wx_code:
|
||
type: string
|
||
nullable: true
|
||
description: 微信小程序登录临时凭证 code
|
||
example: 0a1b2c3d4e5f6g
|
||
RefreshTokenData:
|
||
type: object
|
||
properties: {}
|
||
DictionaryItem:
|
||
type: object
|
||
required: [enum, description, sortOrder]
|
||
properties:
|
||
enum:
|
||
type: string
|
||
example: enabled
|
||
description:
|
||
type: string
|
||
example: 启用
|
||
sortOrder:
|
||
type: integer
|
||
example: 1
|
||
DictionaryRecord:
|
||
type: object
|
||
properties:
|
||
pb_id:
|
||
type: string
|
||
system_dict_id:
|
||
type: string
|
||
dict_name:
|
||
type: string
|
||
dict_word_is_enabled:
|
||
type: boolean
|
||
dict_word_parent_id:
|
||
type: string
|
||
dict_word_remark:
|
||
type: string
|
||
items:
|
||
type: array
|
||
items:
|
||
$ref: '#/components/schemas/DictionaryItem'
|
||
created:
|
||
type: string
|
||
updated:
|
||
type: string
|
||
DictionaryListRequest:
|
||
type: object
|
||
properties:
|
||
keyword:
|
||
type: string
|
||
description: 对 `dict_name` 的模糊搜索关键字
|
||
example: 状态
|
||
DictionaryDetailRequest:
|
||
type: object
|
||
required: [dict_name]
|
||
properties:
|
||
dict_name:
|
||
type: string
|
||
example: 用户状态
|
||
DictionaryMutationRequest:
|
||
type: object
|
||
required: [dict_name, items]
|
||
properties:
|
||
original_dict_name:
|
||
type: string
|
||
description: 更新时用于定位原始记录;新增时可不传
|
||
example: 用户状态
|
||
dict_name:
|
||
type: string
|
||
example: 用户状态
|
||
dict_word_is_enabled:
|
||
type: boolean
|
||
example: true
|
||
dict_word_parent_id:
|
||
type: string
|
||
example: ''
|
||
dict_word_remark:
|
||
type: string
|
||
example: 系统状态字典
|
||
items:
|
||
type: array
|
||
minItems: 1
|
||
items:
|
||
$ref: '#/components/schemas/DictionaryItem'
|
||
DictionaryDeleteRequest:
|
||
type: object
|
||
required: [dict_name]
|
||
properties:
|
||
dict_name:
|
||
type: string
|
||
example: 用户状态
|
||
AttachmentRecord:
|
||
type: object
|
||
properties:
|
||
pb_id:
|
||
type: string
|
||
attachments_id:
|
||
type: string
|
||
attachments_link:
|
||
type: string
|
||
description: PocketBase 实际存储的文件名
|
||
attachments_url:
|
||
type: string
|
||
description: 附件文件流访问链接
|
||
attachments_download_url:
|
||
type: string
|
||
description: 附件下载链接
|
||
attachments_filename:
|
||
type: string
|
||
attachments_filetype:
|
||
type: string
|
||
attachments_size:
|
||
type: number
|
||
attachments_owner:
|
||
type: string
|
||
attachments_md5:
|
||
type: string
|
||
attachments_ocr:
|
||
type: string
|
||
attachments_status:
|
||
type: string
|
||
attachments_remark:
|
||
type: string
|
||
created:
|
||
type: string
|
||
updated:
|
||
type: string
|
||
AttachmentListRequest:
|
||
type: object
|
||
properties:
|
||
keyword:
|
||
type: string
|
||
description: 对 `attachments_id`、`attachments_filename` 的模糊搜索关键字
|
||
example: 手册
|
||
status:
|
||
type: string
|
||
description: 按附件状态过滤
|
||
example: active
|
||
AttachmentDetailRequest:
|
||
type: object
|
||
required: [attachments_id]
|
||
properties:
|
||
attachments_id:
|
||
type: string
|
||
example: ATT-1743037200000-abc123
|
||
AttachmentUploadRequest:
|
||
type: object
|
||
required: [attachments_link]
|
||
properties:
|
||
attachments_link:
|
||
type: string
|
||
format: binary
|
||
description: 要上传到 `tbl_attachments` 的单个文件
|
||
attachments_filename:
|
||
type: string
|
||
description: 原始文件名;不传时可由前端直接使用文件名
|
||
attachments_filetype:
|
||
type: string
|
||
description: 文件 MIME 类型
|
||
attachments_size:
|
||
type: number
|
||
description: 文件大小
|
||
attachments_md5:
|
||
type: string
|
||
attachments_ocr:
|
||
type: string
|
||
attachments_status:
|
||
type: string
|
||
example: active
|
||
attachments_remark:
|
||
type: string
|
||
DocumentRecord:
|
||
type: object
|
||
properties:
|
||
pb_id:
|
||
type: string
|
||
document_id:
|
||
type: string
|
||
document_effect_date:
|
||
type: string
|
||
document_expiry_date:
|
||
type: string
|
||
document_type:
|
||
type: string
|
||
document_title:
|
||
type: string
|
||
document_subtitle:
|
||
type: string
|
||
document_summary:
|
||
type: string
|
||
document_content:
|
||
type: string
|
||
document_image:
|
||
type: string
|
||
description: 关联多个 `attachments_id`,底层使用 `|` 分隔保存
|
||
document_image_ids:
|
||
type: array
|
||
description: `document_image` 解析后的附件 id 列表
|
||
items:
|
||
type: string
|
||
document_image_urls:
|
||
type: array
|
||
description: 根据 `document_image -> tbl_attachments` 自动解析出的图片文件流链接列表
|
||
items:
|
||
type: string
|
||
document_image_url:
|
||
type: string
|
||
description: 兼容字段,返回第一张图片的文件流链接
|
||
document_image_attachments:
|
||
type: array
|
||
items:
|
||
$ref: '#/components/schemas/AttachmentRecord'
|
||
document_image_attachment:
|
||
allOf:
|
||
- $ref: '#/components/schemas/AttachmentRecord'
|
||
nullable: true
|
||
document_video:
|
||
type: string
|
||
description: 关联多个 `attachments_id`,底层使用 `|` 分隔保存
|
||
document_video_ids:
|
||
type: array
|
||
description: `document_video` 解析后的附件 id 列表
|
||
items:
|
||
type: string
|
||
document_video_urls:
|
||
type: array
|
||
description: 根据 `document_video -> tbl_attachments` 自动解析出的视频文件流链接列表
|
||
items:
|
||
type: string
|
||
document_video_url:
|
||
type: string
|
||
description: 兼容字段,返回第一个视频的文件流链接
|
||
document_video_attachments:
|
||
type: array
|
||
items:
|
||
$ref: '#/components/schemas/AttachmentRecord'
|
||
document_video_attachment:
|
||
allOf:
|
||
- $ref: '#/components/schemas/AttachmentRecord'
|
||
nullable: true
|
||
document_owner:
|
||
type: string
|
||
description: 上传者 openid
|
||
document_relation_model:
|
||
type: string
|
||
document_keywords:
|
||
type: string
|
||
description: 多值字段,使用 `|` 分隔
|
||
document_share_count:
|
||
type: number
|
||
document_download_count:
|
||
type: number
|
||
document_favorite_count:
|
||
type: number
|
||
document_status:
|
||
type: string
|
||
document_embedding_status:
|
||
type: string
|
||
document_embedding_error:
|
||
type: string
|
||
document_embedding_lasttime:
|
||
type: string
|
||
document_vector_version:
|
||
type: string
|
||
document_product_categories:
|
||
type: string
|
||
description: 多值字段,使用 `|` 分隔
|
||
document_application_scenarios:
|
||
type: string
|
||
description: 多值字段,使用 `|` 分隔
|
||
document_hotel_type:
|
||
type: string
|
||
description: 多值字段,使用 `|` 分隔
|
||
document_remark:
|
||
type: string
|
||
created:
|
||
type: string
|
||
updated:
|
||
type: string
|
||
DocumentListRequest:
|
||
type: object
|
||
properties:
|
||
keyword:
|
||
type: string
|
||
description: 对 `document_id`、`document_title`、`document_subtitle`、`document_summary`、`document_keywords` 的模糊搜索关键字
|
||
example: 安装
|
||
status:
|
||
type: string
|
||
example: active
|
||
document_type:
|
||
type: string
|
||
example: 说明书
|
||
DocumentDetailRequest:
|
||
type: object
|
||
required: [document_id]
|
||
properties:
|
||
document_id:
|
||
type: string
|
||
example: DOC-1743037200000-abc123
|
||
DocumentMutationRequest:
|
||
type: object
|
||
required: [document_title, document_type]
|
||
properties:
|
||
document_id:
|
||
type: string
|
||
description: 创建时可不传,由服务端自动生成;更新时必填
|
||
example: DOC-1743037200000-abc123
|
||
document_effect_date:
|
||
type: string
|
||
description: 支持 `YYYY-MM-DD` 或 PocketBase 可识别日期时间字符串
|
||
example: 2026-03-27
|
||
document_expiry_date:
|
||
type: string
|
||
description: 支持 `YYYY-MM-DD` 或 PocketBase 可识别日期时间字符串
|
||
example: 2027-03-27
|
||
document_type:
|
||
type: string
|
||
document_title:
|
||
type: string
|
||
document_subtitle:
|
||
type: string
|
||
document_summary:
|
||
type: string
|
||
document_content:
|
||
type: string
|
||
document_image:
|
||
oneOf:
|
||
- type: string
|
||
description: 多个图片附件 id 使用 `|` 分隔
|
||
- type: array
|
||
items:
|
||
type: string
|
||
description: 图片附件 id 列表;支持数组或 `|` 分隔字符串
|
||
document_video:
|
||
oneOf:
|
||
- type: string
|
||
description: 多个视频附件 id 使用 `|` 分隔
|
||
- type: array
|
||
items:
|
||
type: string
|
||
description: 视频附件 id 列表;支持数组或 `|` 分隔字符串
|
||
document_relation_model:
|
||
type: string
|
||
document_keywords:
|
||
type: string
|
||
description: 多值字段,使用 `|` 分隔
|
||
document_share_count:
|
||
type: number
|
||
document_download_count:
|
||
type: number
|
||
document_favorite_count:
|
||
type: number
|
||
document_status:
|
||
type: string
|
||
document_embedding_status:
|
||
type: string
|
||
document_embedding_error:
|
||
type: string
|
||
document_embedding_lasttime:
|
||
type: string
|
||
document_vector_version:
|
||
type: string
|
||
document_product_categories:
|
||
type: string
|
||
description: 多值字段,使用 `|` 分隔
|
||
document_application_scenarios:
|
||
type: string
|
||
description: 多值字段,使用 `|` 分隔
|
||
document_hotel_type:
|
||
type: string
|
||
description: 多值字段,使用 `|` 分隔
|
||
document_remark:
|
||
type: string
|
||
DocumentDeleteRequest:
|
||
type: object
|
||
required: [document_id]
|
||
properties:
|
||
document_id:
|
||
type: string
|
||
example: DOC-1743037200000-abc123
|
||
DocumentHistoryRecord:
|
||
type: object
|
||
properties:
|
||
pb_id:
|
||
type: string
|
||
doh_id:
|
||
type: string
|
||
doh_document_id:
|
||
type: string
|
||
doh_operation_type:
|
||
type: string
|
||
doh_user_id:
|
||
type: string
|
||
doh_current_count:
|
||
type: number
|
||
doh_remark:
|
||
type: string
|
||
created:
|
||
type: string
|
||
updated:
|
||
type: string
|
||
DocumentHistoryListRequest:
|
||
type: object
|
||
properties:
|
||
document_id:
|
||
type: string
|
||
description: 可选;传入时仅查询指定文档的操作历史
|
||
example: DOC-1743037200000-abc123
|
||
paths:
|
||
/pb/api/system/test-helloworld:
|
||
post:
|
||
tags: [系统]
|
||
summary: HelloWorld 测试接口
|
||
responses:
|
||
'200':
|
||
description: 成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/components/schemas/ApiResponse'
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: '#/components/schemas/HelloWorldData'
|
||
/pb/api/system/health:
|
||
post:
|
||
tags: [系统]
|
||
summary: 健康检查
|
||
responses:
|
||
'200':
|
||
description: 成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/components/schemas/ApiResponse'
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: '#/components/schemas/HealthData'
|
||
/pb/api/system/users-count:
|
||
post:
|
||
tags: [系统]
|
||
summary: 查询用户总数
|
||
description: 统计 `tbl_auth_users` 集合中的记录总数,并返回一个数值。
|
||
responses:
|
||
'200':
|
||
description: 成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/components/schemas/ApiResponse'
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: '#/components/schemas/UsersCountData'
|
||
/pb/api/system/refresh-token:
|
||
post:
|
||
tags: [系统]
|
||
summary: 刷新系统认证 token
|
||
description: |
|
||
当前实现支持两种刷新路径:
|
||
1) 若 `Authorization` 对应 token 仍有效:直接按当前 auth record 续签(不调用微信接口)。
|
||
2) 若 token 已过期:仅在 body 提供 `users_wx_code` 时才走微信 code 重新签发。
|
||
返回体仅包含新的 `token`,不返回完整登录用户信息。
|
||
requestBody:
|
||
required: false
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/SystemRefreshTokenRequest'
|
||
responses:
|
||
'200':
|
||
description: 刷新成功(返回精简 token)
|
||
content:
|
||
application/json:
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/components/schemas/ApiResponse'
|
||
- type: object
|
||
properties:
|
||
token:
|
||
type: string
|
||
description: 新签发的 PocketBase 原生 auth token
|
||
example:
|
||
code: 200
|
||
msg: 刷新成功
|
||
data: {}
|
||
token: eyJhbGciOi...
|
||
'400':
|
||
description: 参数错误或微信侧身份换取失败
|
||
'401':
|
||
description: token 无效/已过期,且未提供 users_wx_code
|
||
'404':
|
||
description: 用户不存在
|
||
'415':
|
||
description: 请求体必须为 application/json
|
||
'429':
|
||
description: 重复请求过于频繁
|
||
/pb/api/wechat/login:
|
||
post:
|
||
tags: [微信认证]
|
||
summary: 微信登录/注册合一
|
||
description: |
|
||
使用微信 code 换取微信侧 openid,并写入统一身份字段 `tbl_auth_users.openid`。
|
||
若 `tbl_auth_users` 中不存在对应用户则自动创建 auth record,随后返回 PocketBase 原生 auth token。
|
||
首次注册创建时会写入 `users_idtype = WeChat`。
|
||
返回的 `token` 可直接用于 PocketBase SDK 与当前 hooks 接口调用。
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/WechatLoginRequest'
|
||
responses:
|
||
'200':
|
||
description: 登录或注册成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/PocketBaseAuthResponse'
|
||
'400':
|
||
description: 参数错误或微信侧身份换取失败
|
||
'401':
|
||
description: PocketBase 原生认证失败
|
||
'415':
|
||
description: 请求体必须为 application/json
|
||
'429':
|
||
description: 重复请求过于频繁
|
||
'500':
|
||
description: 保存 auth 用户失败或服务端内部错误
|
||
/pb/api/platform/register:
|
||
post:
|
||
tags: [平台认证]
|
||
summary: 平台用户注册
|
||
description: |
|
||
创建平台用户 auth record。
|
||
服务端会自动生成 GUID 并写入统一身份字段 `openid`,同时写入 `users_idtype = ManagePlatform`。
|
||
前端以 `users_phone + password/passwordConfirm` 注册,但服务端仍会创建 PocketBase 原生 auth 用户。
|
||
注册成功后直接返回 PocketBase 原生 auth token。
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/PlatformRegisterRequest'
|
||
responses:
|
||
'200':
|
||
description: 注册成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/PocketBaseAuthResponse'
|
||
'400':
|
||
description: 参数错误或手机号已存在
|
||
'500':
|
||
description: GUID 生成失败、auth identity 缺失或保存用户失败
|
||
'415':
|
||
description: 请求体必须为 application/json
|
||
'429':
|
||
description: 重复请求过于频繁
|
||
/pb/api/platform/login:
|
||
post:
|
||
tags: [平台认证]
|
||
summary: 平台用户登录
|
||
description: |
|
||
前端使用平台注册时保存的 `邮箱或手机号 + password` 登录。
|
||
仅允许 `users_idtype = ManagePlatform` 的用户通过该接口登录。
|
||
服务端会根据 `login_account` 自动判断邮箱或手机号,并定位平台用户,再使用该用户的 PocketBase 原生 identity(当前为 `email`)执行原生 password auth。
|
||
登录成功后直接返回 PocketBase 原生 auth token。
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/PlatformLoginRequest'
|
||
example:
|
||
login_account: 13509214696
|
||
password: Momo123456
|
||
responses:
|
||
'200':
|
||
description: 登录成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/PocketBaseAuthResponse'
|
||
example:
|
||
code: 200
|
||
msg: 登录成功
|
||
data:
|
||
status: login_success
|
||
is_info_complete: false
|
||
user:
|
||
pb_id: vtukf6agem2xbcv
|
||
users_id: ''
|
||
users_idtype: ManagePlatform
|
||
users_name: momo
|
||
users_phone: '13509214696'
|
||
users_phone_masked: '135****4696'
|
||
users_status: ''
|
||
users_rank_level: 0
|
||
users_auth_type: 0
|
||
users_type: ''
|
||
users_picture: ''
|
||
openid: app_momo
|
||
company_id: ''
|
||
users_parent_id: ''
|
||
users_promo_code: ''
|
||
usergroups_id: ''
|
||
company: null
|
||
created: ''
|
||
updated: ''
|
||
token: eyJhbGciOi...
|
||
'400':
|
||
description: 参数错误、密码错误或用户类型不匹配
|
||
'404':
|
||
description: 平台用户不存在
|
||
'500':
|
||
description: 平台用户缺少原生登录 identity 或服务端内部错误
|
||
'415':
|
||
description: 请求体必须为 application/json
|
||
'429':
|
||
description: 重复请求过于频繁
|
||
/pb/api/wechat/profile:
|
||
post:
|
||
tags: [微信认证]
|
||
summary: 更新微信用户资料
|
||
description: |
|
||
基于当前 `Authorization` 对应 auth record 中的统一 `openid` 定位当前微信用户。
|
||
当前接口仍用于微信资料完善场景。
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/WechatProfileRequest'
|
||
responses:
|
||
'200':
|
||
description: 更新成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/components/schemas/ApiResponse'
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: '#/components/schemas/WechatProfileResponseData'
|
||
'401':
|
||
description: token 无效或当前 auth record 缺少统一身份字段 openid
|
||
'400':
|
||
description: 参数错误、手机号已被注册或资料更新失败
|
||
/pb/api/dictionary/list:
|
||
post:
|
||
tags: [字典管理]
|
||
summary: 查询字典列表
|
||
description: |
|
||
仅允许 `ManagePlatform` 用户访问。
|
||
支持按 `dict_name` 模糊搜索,返回字典全量信息,并将三个聚合字段组装为 `items`。
|
||
requestBody:
|
||
required: false
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/DictionaryListRequest'
|
||
responses:
|
||
'200':
|
||
description: 查询成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/components/schemas/ApiResponse'
|
||
- type: object
|
||
properties:
|
||
data:
|
||
type: object
|
||
properties:
|
||
items:
|
||
type: array
|
||
items:
|
||
$ref: '#/components/schemas/DictionaryRecord'
|
||
'401':
|
||
description: token 无效或已过期
|
||
'403':
|
||
description: 非 ManagePlatform 用户无权访问
|
||
'415':
|
||
description: 请求体必须为 application/json
|
||
/pb/api/dictionary/detail:
|
||
post:
|
||
tags: [字典管理]
|
||
summary: 查询指定字典
|
||
description: |
|
||
仅允许 `ManagePlatform` 用户访问。
|
||
按唯一键 `dict_name` 查询单条字典,并返回组装后的 `items`。
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/DictionaryDetailRequest'
|
||
responses:
|
||
'200':
|
||
description: 查询成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/components/schemas/ApiResponse'
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: '#/components/schemas/DictionaryRecord'
|
||
'400':
|
||
description: 参数错误
|
||
'401':
|
||
description: token 无效或已过期
|
||
'403':
|
||
description: 非 ManagePlatform 用户无权访问
|
||
'404':
|
||
description: 未找到对应字典
|
||
'415':
|
||
description: 请求体必须为 application/json
|
||
/pb/api/dictionary/create:
|
||
post:
|
||
tags: [字典管理]
|
||
summary: 新增字典
|
||
description: |
|
||
仅允许 `ManagePlatform` 用户访问。
|
||
`system_dict_id` 由服务端自动生成;`dict_name` 必须唯一;
|
||
`items` 会分别序列化写入 `dict_word_enum`、`dict_word_description`、`dict_word_sort_order` 三个字段。
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/DictionaryMutationRequest'
|
||
responses:
|
||
'200':
|
||
description: 新增成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/components/schemas/ApiResponse'
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: '#/components/schemas/DictionaryRecord'
|
||
'400':
|
||
description: 参数错误或 dict_name 已存在
|
||
'401':
|
||
description: token 无效或已过期
|
||
'403':
|
||
description: 非 ManagePlatform 用户无权访问
|
||
'415':
|
||
description: 请求体必须为 application/json
|
||
'429':
|
||
description: 重复请求过于频繁
|
||
/pb/api/dictionary/update:
|
||
post:
|
||
tags: [字典管理]
|
||
summary: 修改字典
|
||
description: |
|
||
仅允许 `ManagePlatform` 用户访问。
|
||
根据 `original_dict_name`(未传时回退为 `dict_name`)定位原记录并更新。
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/DictionaryMutationRequest'
|
||
responses:
|
||
'200':
|
||
description: 修改成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/components/schemas/ApiResponse'
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: '#/components/schemas/DictionaryRecord'
|
||
'400':
|
||
description: 参数错误或 dict_name 冲突
|
||
'401':
|
||
description: token 无效或已过期
|
||
'403':
|
||
description: 非 ManagePlatform 用户无权访问
|
||
'404':
|
||
description: 未找到待修改字典
|
||
'415':
|
||
description: 请求体必须为 application/json
|
||
'429':
|
||
description: 重复请求过于频繁
|
||
/pb/api/dictionary/delete:
|
||
post:
|
||
tags: [字典管理]
|
||
summary: 删除字典
|
||
description: |
|
||
仅允许 `ManagePlatform` 用户访问。
|
||
按 `dict_name` 真删除对应记录。
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/DictionaryDeleteRequest'
|
||
responses:
|
||
'200':
|
||
description: 删除成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/components/schemas/ApiResponse'
|
||
- type: object
|
||
properties:
|
||
data:
|
||
type: object
|
||
properties:
|
||
dict_name:
|
||
type: string
|
||
'400':
|
||
description: 参数错误或删除失败
|
||
'401':
|
||
description: token 无效或已过期
|
||
'403':
|
||
description: 非 ManagePlatform 用户无权访问
|
||
'404':
|
||
description: 未找到待删除字典
|
||
'415':
|
||
description: 请求体必须为 application/json
|
||
'429':
|
||
description: 重复请求过于频繁
|
||
/pb/api/attachment/list:
|
||
post:
|
||
tags: [附件管理]
|
||
summary: 查询附件列表
|
||
description: |
|
||
仅允许 `ManagePlatform` 用户访问。
|
||
支持按 `attachments_id`、`attachments_filename` 模糊搜索,并可按 `attachments_status` 过滤。
|
||
requestBody:
|
||
required: false
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/AttachmentListRequest'
|
||
responses:
|
||
'200':
|
||
description: 查询成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/components/schemas/ApiResponse'
|
||
- type: object
|
||
properties:
|
||
data:
|
||
type: object
|
||
properties:
|
||
items:
|
||
type: array
|
||
items:
|
||
$ref: '#/components/schemas/AttachmentRecord'
|
||
'401':
|
||
description: token 无效或已过期
|
||
'403':
|
||
description: 非 ManagePlatform 用户无权访问
|
||
'415':
|
||
description: 请求体必须为 application/json
|
||
/pb/api/attachment/detail:
|
||
post:
|
||
tags: [附件管理]
|
||
summary: 查询附件详情
|
||
description: |
|
||
仅允许 `ManagePlatform` 用户访问。
|
||
按 `attachments_id` 查询单条附件,并返回 PocketBase 文件流链接与下载链接。
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/AttachmentDetailRequest'
|
||
responses:
|
||
'200':
|
||
description: 查询成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/components/schemas/ApiResponse'
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: '#/components/schemas/AttachmentRecord'
|
||
'400':
|
||
description: 参数错误
|
||
'401':
|
||
description: token 无效或已过期
|
||
'403':
|
||
description: 非 ManagePlatform 用户无权访问
|
||
'404':
|
||
description: 未找到对应附件
|
||
'415':
|
||
description: 请求体必须为 application/json
|
||
/pb/api/attachment/upload:
|
||
post:
|
||
tags: [附件管理]
|
||
summary: 上传附件
|
||
description: |
|
||
仅允许 `ManagePlatform` 用户访问。
|
||
使用 `multipart/form-data` 上传单个文件到 `tbl_attachments`,服务端会自动生成 `attachments_id`,
|
||
并返回可直接访问的 PocketBase 文件流链接。
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
multipart/form-data:
|
||
schema:
|
||
$ref: '#/components/schemas/AttachmentUploadRequest'
|
||
responses:
|
||
'200':
|
||
description: 上传成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/components/schemas/ApiResponse'
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: '#/components/schemas/AttachmentRecord'
|
||
'400':
|
||
description: 参数错误、缺少文件或附件保存失败
|
||
'401':
|
||
description: token 无效或已过期
|
||
'403':
|
||
description: 非 ManagePlatform 用户无权访问
|
||
/pb/api/attachment/delete:
|
||
post:
|
||
tags: [附件管理]
|
||
summary: 删除附件
|
||
description: |
|
||
仅允许 `ManagePlatform` 用户访问。
|
||
按 `attachments_id` 真删除附件;若附件已被 `tbl_document.document_image` 或 `document_video` 引用,则拒绝删除。
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/AttachmentDetailRequest'
|
||
responses:
|
||
'200':
|
||
description: 删除成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/components/schemas/ApiResponse'
|
||
- type: object
|
||
properties:
|
||
data:
|
||
type: object
|
||
properties:
|
||
attachments_id:
|
||
type: string
|
||
'400':
|
||
description: 参数错误、附件已被文档引用或删除失败
|
||
'401':
|
||
description: token 无效或已过期
|
||
'403':
|
||
description: 非 ManagePlatform 用户无权访问
|
||
'404':
|
||
description: 未找到待删除附件
|
||
'415':
|
||
description: 请求体必须为 application/json
|
||
'429':
|
||
description: 重复请求过于频繁
|
||
/pb/api/document/list:
|
||
post:
|
||
tags: [文档管理]
|
||
summary: 查询文档列表
|
||
description: |
|
||
仅允许 `ManagePlatform` 用户访问。
|
||
支持按标题、摘要、关键词等字段模糊搜索,并可按 `document_status`、`document_type` 过滤。
|
||
返回结果会自动根据 `document_image`、`document_video` 中的多个 `attachments_id` 关联 `tbl_attachments`,
|
||
额外补充 `document_image_urls`、`document_video_urls` 以及对应附件对象数组。
|
||
requestBody:
|
||
required: false
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/DocumentListRequest'
|
||
responses:
|
||
'200':
|
||
description: 查询成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/components/schemas/ApiResponse'
|
||
- type: object
|
||
properties:
|
||
data:
|
||
type: object
|
||
properties:
|
||
items:
|
||
type: array
|
||
items:
|
||
$ref: '#/components/schemas/DocumentRecord'
|
||
'401':
|
||
description: token 无效或已过期
|
||
'403':
|
||
description: 非 ManagePlatform 用户无权访问
|
||
'415':
|
||
description: 请求体必须为 application/json
|
||
/pb/api/document/detail:
|
||
post:
|
||
tags: [文档管理]
|
||
summary: 查询文档详情
|
||
description: |
|
||
仅允许 `ManagePlatform` 用户访问。
|
||
按 `document_id` 查询单条文档,并返回与附件表联动解析后的多文件流链接。
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/DocumentDetailRequest'
|
||
responses:
|
||
'200':
|
||
description: 查询成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/components/schemas/ApiResponse'
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: '#/components/schemas/DocumentRecord'
|
||
'400':
|
||
description: 参数错误
|
||
'401':
|
||
description: token 无效或已过期
|
||
'403':
|
||
description: 非 ManagePlatform 用户无权访问
|
||
'404':
|
||
description: 未找到对应文档
|
||
'415':
|
||
description: 请求体必须为 application/json
|
||
/pb/api/document/create:
|
||
post:
|
||
tags: [文档管理]
|
||
summary: 新增文档
|
||
description: |
|
||
仅允许 `ManagePlatform` 用户访问。
|
||
`document_id` 可选;未传时服务端自动生成。
|
||
`document_title`、`document_type` 为必填;其余字段均允许为空。
|
||
`document_image`、`document_video` 支持传入多个已存在于 `tbl_attachments` 的 `attachments_id`。
|
||
成功后会同步写入一条 `tbl_document_operation_history`,操作类型为 `create`。
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/DocumentMutationRequest'
|
||
responses:
|
||
'200':
|
||
description: 新增成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/components/schemas/ApiResponse'
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: '#/components/schemas/DocumentRecord'
|
||
'400':
|
||
description: 参数错误、附件不存在或文档创建失败
|
||
'401':
|
||
description: token 无效或已过期
|
||
'403':
|
||
description: 非 ManagePlatform 用户无权访问
|
||
'415':
|
||
description: 请求体必须为 application/json
|
||
'429':
|
||
description: 重复请求过于频繁
|
||
/pb/api/document/update:
|
||
post:
|
||
tags: [文档管理]
|
||
summary: 修改文档
|
||
description: |
|
||
仅允许 `ManagePlatform` 用户访问。
|
||
按 `document_id` 定位现有文档并更新。
|
||
`document_title`、`document_type` 为必填;其余字段均允许为空。
|
||
若传入 `document_image`、`document_video`,则支持多个 `attachments_id`,并会逐一校验是否存在。
|
||
成功后会同步写入一条 `tbl_document_operation_history`,操作类型为 `update`。
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/DocumentMutationRequest'
|
||
responses:
|
||
'200':
|
||
description: 修改成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/components/schemas/ApiResponse'
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: '#/components/schemas/DocumentRecord'
|
||
'400':
|
||
description: 参数错误、附件不存在或修改失败
|
||
'401':
|
||
description: token 无效或已过期
|
||
'403':
|
||
description: 非 ManagePlatform 用户无权访问
|
||
'404':
|
||
description: 未找到待修改文档
|
||
'415':
|
||
description: 请求体必须为 application/json
|
||
'429':
|
||
description: 重复请求过于频繁
|
||
/pb/api/document/delete:
|
||
post:
|
||
tags: [文档管理]
|
||
summary: 删除文档
|
||
description: |
|
||
仅允许 `ManagePlatform` 用户访问。
|
||
按 `document_id` 真删除文档,并在删除前同步写入一条 `tbl_document_operation_history`,操作类型为 `delete`。
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/DocumentDeleteRequest'
|
||
responses:
|
||
'200':
|
||
description: 删除成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/components/schemas/ApiResponse'
|
||
- type: object
|
||
properties:
|
||
data:
|
||
type: object
|
||
properties:
|
||
document_id:
|
||
type: string
|
||
'400':
|
||
description: 参数错误或删除失败
|
||
'401':
|
||
description: token 无效或已过期
|
||
'403':
|
||
description: 非 ManagePlatform 用户无权访问
|
||
'404':
|
||
description: 未找到待删除文档
|
||
'415':
|
||
description: 请求体必须为 application/json
|
||
'429':
|
||
description: 重复请求过于频繁
|
||
/pb/api/document-history/list:
|
||
post:
|
||
tags: [文档历史]
|
||
summary: 查询文档操作历史
|
||
description: |
|
||
仅允许 `ManagePlatform` 用户访问。
|
||
若 body 传入 `document_id`,则仅查询该文档的历史;否则返回全部文档操作历史,按创建时间倒序排列。
|
||
requestBody:
|
||
required: false
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/DocumentHistoryListRequest'
|
||
responses:
|
||
'200':
|
||
description: 查询成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/components/schemas/ApiResponse'
|
||
- type: object
|
||
properties:
|
||
data:
|
||
type: object
|
||
properties:
|
||
items:
|
||
type: array
|
||
items:
|
||
$ref: '#/components/schemas/DocumentHistoryRecord'
|
||
'401':
|
||
description: token 无效或已过期
|
||
'403':
|
||
description: 非 ManagePlatform 用户无权访问
|
||
'415':
|
||
description: 请求体必须为 application/json
|