diff --git a/APP.openapi.json b/APP.openapi.json deleted file mode 100644 index 94a58a6..0000000 --- a/APP.openapi.json +++ /dev/null @@ -1,11160 +0,0 @@ -{ - "openapi": "3.0.1", - "info": { - "title": "APP", - "description": "家谱业务 APP/PC 用户侧接口文档,用于 Apifox 导入。\n\n导入方式:Apifox -> 导入 API 数据 -> OpenAPI/Swagger -> 选择本文件。\n\n约定:\n- APP 路径前缀为 `/genealogy/app`\n- PC/H5 路径前缀为 `/genealogy/pc`\n- 后台管理接口不包含在本文件内\n- 登录后接口需要携带 token,且请求 Header 需携带 `clientid`\n", - "version": "1.0.0" - }, - "tags": [ - { - "name": "验证中心" - }, - { - "name": "认证登录" - }, - { - "name": "文件上传" - }, - { - "name": "行政区划" - }, - { - "name": "家谱" - }, - { - "name": "家谱成员" - }, - { - "name": "字辈谱" - }, - { - "name": "世系人物" - }, - { - "name": "家族圈" - }, - { - "name": "内容文章" - }, - { - "name": "相册" - }, - { - "name": "祭祀" - }, - { - "name": "族务记录" - }, - { - "name": "消息通知" - }, - { - "name": "意见反馈" - }, - { - "name": "VIP" - }, - { - "name": "视频" - } - ], - "paths": { - "/captcha/require": { - "get": { - "summary": "查询当前场景是否需要验证", - "deprecated": false, - "description": "用于登录、注册、换绑手机等场景。按租户、客户端和场景编码匹配后台验证策略。", - "tags": [ - "验证中心" - ], - "parameters": [ - { - "name": "tenantId", - "in": "query", - "description": "租户ID,用于区分不同租户的数据和验证策略", - "required": false, - "example": "000000", - "schema": { - "type": "string" - } - }, - { - "name": "clientId", - "in": "query", - "description": "客户端ID,对应后台客户端管理中的APP/PC/小程序等终端", - "required": false, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - }, - { - "name": "sceneCode", - "in": "query", - "description": "APP 短信场景编码,例如APP_SMS_LOGIN、APP_REGISTER", - "required": true, - "example": "APP_SMS_LOGIN", - "schema": { - "type": "string" - } - }, - { - "name": "subject", - "in": "query", - "description": "验证主体,通常为手机号、用户ID或登录账号", - "required": false, - "example": "13800000000", - "schema": { - "type": "string" - } - }, - { - "name": "clientid", - "in": "header", - "description": "客户端ID", - "example": "ced7e5f0498645c6ec642dcf450b036f", - "schema": { - "type": "string", - "default": "ced7e5f0498645c6ec642dcf450b036f" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/VerificationRequireResult", - "description": "验证需求查询结果" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/captcha/challenge": { - "post": { - "summary": "生成验证挑战", - "deprecated": false, - "description": "统一生成验证码。tenantId、clientId、sceneCode、subject 必须完整提交;挑战仅可由同一租户、客户端、场景、主体和请求 IP 校验。策略为天爱时返回行为验证数据;策略为系统图形时返回 uuid 和 img。", - "tags": [ - "验证中心" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "客户端ID", - "example": "ced7e5f0498645c6ec642dcf450b036f", - "schema": { - "type": "string", - "default": "ced7e5f0498645c6ec642dcf450b036f" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VerificationChallengeBody" - }, - "example": { - "tenantId": "000000", - "clientId": "428a8310cd442757ae699df5d894f051", - "sceneCode": "APP_SMS_LOGIN", - "subject": "13800000000" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/VerificationChallengeResult", - "description": "验证挑战生成结果" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/captcha/verify": { - "post": { - "summary": "校验验证结果并换取 validToken", - "deprecated": false, - "description": "必须提交生成挑战时相同的 tenantId、clientId、sceneCode、subject 和 challengeId。验证通过后返回 validToken;该票据仅随发送短信验证码接口一起提交,由发送入口单次消费。", - "tags": [ - "验证中心" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "客户端ID", - "example": "ced7e5f0498645c6ec642dcf450b036f", - "schema": { - "type": "string", - "default": "ced7e5f0498645c6ec642dcf450b036f" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VerificationCheckBody" - }, - "examples": { - "tianai_behavior": { - "value": { - "tenantId": "000000", - "clientId": "428a8310cd442757ae699df5d894f051", - "sceneCode": "APP_SMS_LOGIN", - "subject": "13800000000", - "challengeId": "CAPTCHA_CHALLENGE_ID", - "providerCode": "tianai", - "captchaType": "SLIDER", - "payload": { - "track": { - "bgImageWidth": 340, - "bgImageHeight": 180, - "templateImageWidth": 50, - "templateImageHeight": 50, - "startTime": 1720000000000, - "stopTime": 1720000001500, - "left": 120, - "top": 0, - "trackList": [ - { - "x": 0, - "y": 0, - "t": 0, - "type": "down" - }, - { - "x": 120, - "y": 0, - "t": 650, - "type": "move" - }, - { - "x": 120, - "y": 0, - "t": 700, - "type": "up" - } - ] - } - } - }, - "summary": "天爱滑块/旋转/滑动还原/文字点选验证" - }, - "system_image": { - "value": { - "tenantId": "000000", - "clientId": "428a8310cd442757ae699df5d894f051", - "sceneCode": "APP_SMS_LOGIN", - "subject": "13800000000", - "challengeId": "CAPTCHA_CHALLENGE_ID", - "providerCode": "ruoyi_image", - "captchaType": "math", - "payload": { - "uuid": "captcha-uuid", - "code": "6" - } - }, - "summary": "系统图形验证码" - } - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/VerificationCheckResult", - "description": "验证校验结果" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/auth/code": { - "get": { - "summary": "兼容旧系统图形验证码", - "deprecated": false, - "description": "老版后台登录图形验证码入口。新的 APP/PC 业务优先使用 /captcha/require + /captcha/challenge + /captcha/verify。", - "tags": [ - "验证中心" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "客户端ID", - "example": "ced7e5f0498645c6ec642dcf450b036f", - "schema": { - "type": "string", - "default": "ced7e5f0498645c6ec642dcf450b036f" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/LegacyCaptchaResult", - "description": "兼容旧图形验证码结果" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/auth/register": { - "post": { - "summary": "APP 用户注册", - "deprecated": false, - "description": "", - "tags": [ - "认证登录" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PasswordRegisterBody" - }, - "example": { - "grantType": "password", - "tenantId": "000000", - "phone": "13800000000", - "password": "e10adc3949ba59abbe56e057f20f883e", - "nickName": "测试用户", - "registerSource": "app", - "smsCode": "1234" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/LoginResult", - "description": "登录结果" - }, - "400": { - "$ref": "#/components/responses/LoginResult", - "description": "短信验证码必须为 4 位数字;验证码错误、过期、重复使用,或租户、客户端、场景不匹配时拒绝;携带 validToken、code、uuid、供应商配置等旧字段返回 HTTP 400。", - "headers": {} - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/auth/login": { - "post": { - "summary": "APP 密码登录", - "deprecated": false, - "description": "", - "tags": [ - "认证登录" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PasswordLoginBody" - }, - "example": { - "grantType": "password", - "tenantId": "000000", - "phone": "13800000000", - "password": "e10adc3949ba59abbe56e057f20f883e" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/LoginResult", - "description": "登录结果" - }, - "400": { - "$ref": "#/components/responses/LoginResult", - "description": "密码登录仅接收租户、客户端、手机号和密码;不需要短信验证码或行为验证票据,携带验证码及其他未知旧字段返回 HTTP 400。", - "headers": {} - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/auth/login/sms": { - "post": { - "summary": "APP 短信登录", - "deprecated": false, - "description": "", - "tags": [ - "认证登录" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SmsLoginBody" - }, - "example": { - "grantType": "sms", - "tenantId": "000000", - "phone": "13800000000", - "smsCode": "1234" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/LoginResult", - "description": "登录结果" - }, - "400": { - "$ref": "#/components/responses/LoginResult", - "description": "短信验证码必须为 4 位数字;验证码错误、过期、重复使用,或租户、客户端、场景不匹配时拒绝;携带 validToken、code、uuid、供应商配置等旧字段返回 HTTP 400。", - "headers": {} - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/auth/sms/code": { - "post": { - "summary": "APP 发送短信验证码", - "deprecated": false, - "description": "先完成验证中心校验,再提交 validToken。sceneCode 仅允许 APP_SMS_LOGIN、APP_REGISTER、APP_FORGOT_PASSWORD、APP_PHONE_CHANGE、APP_ACCOUNT_DEACTIVATE;服务端按租户、APP 客户端、场景和手机号主体校验票据,不接收短信供应商配置 ID。", - "tags": [ - "认证登录" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SmsCodeBody" - }, - "example": { - "tenantId": "000000", - "phone": "13800000000", - "grantType": "sms", - "sceneCode": "APP_SMS_LOGIN", - "validToken": "captcha-ticket" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - }, - "400": { - "$ref": "#/components/responses/VoidResult", - "description": "拒绝原因:票据缺失;票据与租户不匹配(错租户);票据与客户端不匹配(错客户端);票据与场景不匹配(错场景);票据过期;票据已被使用(重复使用);手机号主体不匹配;请求携带供应商配置或历史字段。", - "headers": {} - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/auth/profile": { - "get": { - "summary": "APP 当前用户资料", - "deprecated": false, - "description": "", - "tags": [ - "认证登录" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "put": { - "summary": "APP 修改用户资料", - "deprecated": false, - "description": "", - "tags": [ - "认证登录" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProfileUpdateBody" - }, - "example": { - "nickName": "张三", - "avatarOssId": "2060000000000000000", - "sex": "0", - "birthday": "1990-01-01", - "regionCode": "110101", - "addressDetail": "北京市东城区" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/auth/password": { - "put": { - "summary": "APP 修改密码", - "deprecated": false, - "description": "", - "tags": [ - "认证登录" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PasswordChangeBody" - }, - "example": { - "oldPassword": "e10adc3949ba59abbe56e057f20f883e", - "newPassword": "25d55ad283aa400af464c76d713c07ad" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/auth/password/reset": { - "put": { - "summary": "APP 找回密码", - "deprecated": false, - "description": "", - "tags": [ - "认证登录" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PasswordResetBody" - }, - "example": { - "grantType": "password", - "tenantId": "000000", - "phone": "13800000000", - "smsCode": "1234", - "newPassword": "25d55ad283aa400af464c76d713c07ad" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - }, - "400": { - "$ref": "#/components/responses/VoidResult", - "description": "短信验证码必须为 4 位数字;验证码错误、过期、重复使用,或租户、客户端、场景不匹配时拒绝;携带 validToken、code、uuid、供应商配置等旧字段返回 HTTP 400。", - "headers": {} - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/auth/phone": { - "put": { - "summary": "APP 换绑手机号", - "deprecated": false, - "description": "", - "tags": [ - "认证登录" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PhoneChangeBody" - }, - "example": { - "clientId": "428a8310cd442757ae699df5d894f051", - "phone": "13900000000", - "smsCode": "1234" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - }, - "400": { - "$ref": "#/components/responses/ObjectResult", - "description": "短信验证码必须为 4 位数字;验证码错误、过期、重复使用,或租户、客户端、场景不匹配时拒绝;携带 validToken、code、uuid、供应商配置等旧字段返回 HTTP 400。", - "headers": {} - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/auth/account/deactivate": { - "post": { - "summary": "APP 注销账号", - "deprecated": false, - "description": "", - "tags": [ - "认证登录" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AccountDeactivateBody" - }, - "example": { - "clientId": "428a8310cd442757ae699df5d894f051", - "smsCode": "1234" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - }, - "400": { - "$ref": "#/components/responses/VoidResult", - "description": "短信验证码必须为 4 位数字;验证码错误、过期、重复使用,或租户、客户端、场景不匹配时拒绝;携带 validToken、code、uuid、供应商配置等旧字段返回 HTTP 400。", - "headers": {} - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/auth/logout": { - "delete": { - "summary": "APP 退出登录", - "deprecated": false, - "description": "", - "tags": [ - "认证登录" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/pc/auth/register": { - "post": { - "summary": "PC 用户注册", - "deprecated": false, - "description": "", - "tags": [ - "认证登录" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PasswordRegisterBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/LoginResult", - "description": "登录结果" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/pc/auth/login": { - "post": { - "summary": "PC 密码登录", - "deprecated": false, - "description": "", - "tags": [ - "认证登录" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PasswordLoginBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/LoginResult", - "description": "登录结果" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/pc/auth/login/sms": { - "post": { - "summary": "PC 短信登录", - "deprecated": false, - "description": "", - "tags": [ - "认证登录" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SmsLoginBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/LoginResult", - "description": "登录结果" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/pc/auth/sms/code": { - "post": { - "summary": "PC 发送短信验证码", - "deprecated": false, - "description": "", - "tags": [ - "认证登录" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SmsCodeBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/pc/auth/profile": { - "get": { - "summary": "PC 当前用户资料", - "deprecated": false, - "description": "", - "tags": [ - "认证登录" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "put": { - "summary": "PC 修改用户资料", - "deprecated": false, - "description": "", - "tags": [ - "认证登录" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProfileUpdateBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/pc/auth/password": { - "put": { - "summary": "PC 修改密码", - "deprecated": false, - "description": "", - "tags": [ - "认证登录" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PasswordChangeBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/pc/auth/password/reset": { - "put": { - "summary": "PC 找回密码", - "deprecated": false, - "description": "", - "tags": [ - "认证登录" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PasswordResetBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/pc/auth/phone": { - "put": { - "summary": "PC 换绑手机号", - "deprecated": false, - "description": "", - "tags": [ - "认证登录" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PhoneChangeBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/pc/auth/account/deactivate": { - "post": { - "summary": "PC 注销账号", - "deprecated": false, - "description": "", - "tags": [ - "认证登录" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AccountDeactivateBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/pc/auth/logout": { - "delete": { - "summary": "PC 退出登录", - "deprecated": false, - "description": "", - "tags": [ - "认证登录" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/files/upload": { - "post": { - "summary": "APP 单文件上传", - "deprecated": false, - "description": "", - "tags": [ - "文件上传" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "type": "object", - "properties": { - "file": { - "type": "string", - "format": "binary", - "example": "" - } - }, - "required": [ - "file" - ] - }, - "example": { - "file": "" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/FileUploadResult", - "description": "文件上传结果" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/files/resumable/init": { - "post": { - "summary": "APP 分片上传初始化", - "deprecated": false, - "description": "所有文件统一使用分片上传;普通小文件可设置为一个分片。返回 instant=true 时直接使用返回的 OSS 信息,跳过分片上传和合并。", - "tags": [ - "文件上传" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ResumableInitBody" - }, - "example": { - "fileName": "cover.jpg", - "fileSize": 9532, - "fileMd5": "d41d8cd98f00b204e9800998ecf8427e", - "contentType": "image/jpeg", - "chunkSize": 4194304, - "totalChunks": 1, - "bizType": "genealogy", - "usageScene": "cover" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/files/resumable/chunk": { - "post": { - "summary": "APP 上传分片", - "deprecated": false, - "description": "", - "tags": [ - "文件上传" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "type": "object", - "properties": { - "uploadId": { - "type": "string", - "example": "" - }, - "chunkIndex": { - "type": "integer", - "example": 0 - }, - "chunkMd5": { - "type": "string", - "example": "d41d8cd98f00b204e9800998ecf8427e" - }, - "file": { - "type": "string", - "format": "binary", - "example": "" - } - }, - "required": [ - "uploadId", - "chunkIndex", - "chunkMd5", - "file" - ] - }, - "example": { - "uploadId": "", - "chunkIndex": 0, - "chunkMd5": "d41d8cd98f00b204e9800998ecf8427e", - "file": "" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/files/resumable/complete": { - "post": { - "summary": "APP 完成分片上传", - "deprecated": false, - "description": "", - "tags": [ - "文件上传" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ResumableCompleteBody" - }, - "example": { - "uploadId": "UPLOAD202607090001", - "fileMd5": "d41d8cd98f00b204e9800998ecf8427e", - "fileSize": 9532 - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/FileUploadResult", - "description": "文件上传结果" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/files/reference": { - "post": { - "summary": "APP 绑定文件业务引用", - "deprecated": false, - "description": "", - "tags": [ - "文件上传" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "客户端ID,请求Header携带,用于区分APP/PC/小程序等终端", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileReferenceBody" - }, - "example": { - "bizType": "family_feed", - "bizName": "family feed image", - "bizTable": "gen_family_feed", - "bizId": 900013001, - "bizField": "media_oss_ids", - "ossId": "2060000000000000000", - "usageScene": "feed_image" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "delete": { - "summary": "APP 释放文件业务引用", - "deprecated": false, - "description": "", - "tags": [ - "文件上传" - ], - "parameters": [ - { - "name": "bizTable", - "in": "query", - "description": "业务表名,用于文件引用绑定", - "required": true, - "example": "gen_family_feed", - "schema": { - "type": "string" - } - }, - { - "name": "bizId", - "in": "query", - "description": "业务数据ID,用于文件引用绑定", - "required": true, - "example": 900013001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "bizField", - "in": "query", - "description": "业务字段名,例如avatar_oss_id、cover_oss_id", - "required": true, - "example": "media_ids", - "schema": { - "type": "string" - } - }, - { - "name": "clientid", - "in": "header", - "description": "客户端ID,请求Header携带,用于区分APP/PC/小程序等终端", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/pc/files/upload": { - "post": { - "summary": "PC 单文件上传", - "deprecated": false, - "description": "", - "tags": [ - "文件上传" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "type": "object", - "properties": { - "file": { - "type": "string", - "format": "binary", - "example": "" - } - }, - "required": [ - "file" - ] - }, - "example": { - "file": "" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/FileUploadResult", - "description": "文件上传结果" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/pc/files/resumable/init": { - "post": { - "summary": "PC 分片上传初始化", - "deprecated": false, - "description": "", - "tags": [ - "文件上传" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ResumableInitBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/pc/files/resumable/chunk": { - "post": { - "summary": "PC 上传分片", - "deprecated": false, - "description": "", - "tags": [ - "文件上传" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "type": "object", - "properties": { - "uploadId": { - "type": "string", - "example": "" - }, - "chunkIndex": { - "type": "integer", - "example": 0 - }, - "chunkMd5": { - "type": "string", - "example": "d41d8cd98f00b204e9800998ecf8427e" - }, - "file": { - "type": "string", - "format": "binary", - "example": "" - } - }, - "required": [ - "uploadId", - "chunkIndex", - "chunkMd5", - "file" - ] - }, - "example": { - "uploadId": "", - "chunkIndex": 0, - "chunkMd5": "d41d8cd98f00b204e9800998ecf8427e", - "file": "" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/pc/files/resumable/complete": { - "post": { - "summary": "PC 完成分片上传", - "deprecated": false, - "description": "", - "tags": [ - "文件上传" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ResumableCompleteBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/FileUploadResult", - "description": "文件上传结果" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/region/children": { - "get": { - "summary": "查询下级行政区划", - "deprecated": false, - "description": "", - "tags": [ - "行政区划" - ], - "parameters": [ - { - "name": "parentCode", - "in": "query", - "description": "父级行政区划编码,不传或传0查省级", - "required": false, - "example": "51", - "schema": { - "type": "string" - } - }, - { - "name": "clientid", - "in": "header", - "description": "客户端ID", - "example": "ced7e5f0498645c6ec642dcf450b036f", - "schema": { - "type": "string", - "default": "ced7e5f0498645c6ec642dcf450b036f" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ListResult", - "description": "通用列表响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/region/path/{regionCode}": { - "get": { - "summary": "查询行政区划路径", - "deprecated": false, - "description": "", - "tags": [ - "行政区划" - ], - "parameters": [ - { - "name": "regionCode", - "in": "path", - "description": "行政区划编码", - "required": true, - "example": "510000", - "schema": { - "type": "string" - } - }, - { - "name": "clientid", - "in": "header", - "description": "客户端ID", - "example": "ced7e5f0498645c6ec642dcf450b036f", - "schema": { - "type": "string", - "default": "ced7e5f0498645c6ec642dcf450b036f" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ListResult", - "description": "通用列表响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/region/search": { - "get": { - "summary": "搜索行政区划", - "deprecated": false, - "description": "", - "tags": [ - "行政区划" - ], - "parameters": [ - { - "name": "keyword", - "in": "query", - "description": "搜索关键词,支持地区名称或编码模糊查询", - "required": true, - "example": "北京", - "schema": { - "type": "string" - } - }, - { - "name": "level", - "in": "query", - "description": "行政区划级别,1省、2市、3区县、4乡镇街道、5村社区", - "required": false, - "example": 3, - "schema": { - "type": "integer" - } - }, - { - "name": "limit", - "in": "query", - "description": "返回数量上限", - "required": false, - "example": 20, - "schema": { - "type": "integer" - } - }, - { - "name": "clientid", - "in": "header", - "description": "客户端ID", - "example": "ced7e5f0498645c6ec642dcf450b036f", - "schema": { - "type": "string", - "default": "ced7e5f0498645c6ec642dcf450b036f" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ListResult", - "description": "通用列表响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/region/{regionCode}": { - "get": { - "summary": "查询行政区划详情", - "deprecated": false, - "description": "", - "tags": [ - "行政区划" - ], - "parameters": [ - { - "name": "regionCode", - "in": "path", - "description": "行政区划编码", - "required": true, - "example": "510000", - "schema": { - "type": "string" - } - }, - { - "name": "clientid", - "in": "header", - "description": "客户端ID", - "example": "ced7e5f0498645c6ec642dcf450b036f", - "schema": { - "type": "string", - "default": "ced7e5f0498645c6ec642dcf450b036f" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies": { - "post": { - "summary": "APP 创建家谱", - "deprecated": false, - "description": "", - "tags": [ - "家谱" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GenealogyCreateBody" - }, - "example": { - "genealogyName": "彭氏家谱", - "surname": "彭", - "ancestralHall": "陇西堂", - "originPlace": "江西吉安", - "regionCode": "360800", - "addressDetail": "江西省吉安市", - "coverOssId": "2060000000000000000", - "intro": "彭氏家谱简介", - "visibility": "1", - "joinMode": "1" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/mine": { - "get": { - "summary": "APP 我的家谱", - "deprecated": false, - "description": "", - "tags": [ - "家谱" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ListResult", - "description": "通用列表响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/public": { - "get": { - "summary": "APP 公开家谱", - "deprecated": false, - "description": "", - "tags": [ - "家谱" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ListResult", - "description": "通用列表响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/options": { - "get": { - "summary": "APP 家谱下拉选项", - "deprecated": false, - "description": "", - "tags": [ - "家谱" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ListResult", - "description": "通用列表响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}": { - "get": { - "summary": "APP 家谱详情", - "deprecated": false, - "description": "", - "tags": [ - "家谱" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "put": { - "summary": "APP 修改家谱", - "deprecated": false, - "description": "", - "tags": [ - "家谱" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GenealogyUpdateBody" - }, - "example": { - "genealogyName": "彭氏家谱", - "surname": "彭", - "ancestralHall": "陇西堂", - "originPlace": "江西吉安", - "regionCode": "360800", - "addressDetail": "江西省吉安市", - "coverOssId": "2060000000000000000", - "intro": "更新后的家谱简介", - "visibility": "1", - "joinMode": "1" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/overview": { - "get": { - "summary": "APP 家谱概览", - "deprecated": false, - "description": "", - "tags": [ - "家谱" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/join-applies": { - "post": { - "summary": "APP 申请加入家谱", - "deprecated": false, - "description": "", - "tags": [ - "家谱" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GenealogyJoinApplyBody" - }, - "example": { - "applicantName": "彭小明", - "phone": "13800000000", - "relationDesc": "本族成员", - "applyReason": "申请加入家谱维护", - "inviterUserId": 900000001 - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/join-applies/mine": { - "get": { - "summary": "APP 我的加入申请", - "deprecated": false, - "description": "", - "tags": [ - "家谱" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ListResult", - "description": "通用列表响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/join-applies/pending": { - "get": { - "summary": "APP 待审核加入申请", - "deprecated": false, - "description": "", - "tags": [ - "家谱" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ListResult", - "description": "通用列表响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/join-applies/{applyId}/audit": { - "put": { - "summary": "APP 审核加入申请", - "deprecated": false, - "description": "", - "tags": [ - "家谱" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "applyId", - "in": "path", - "description": "加入家谱申请ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GenealogyJoinAuditBody" - }, - "example": { - "status": "1", - "auditRemark": "信息核验通过" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/join-applies/{applyId}": { - "delete": { - "summary": "APP 撤销加入申请", - "deprecated": false, - "description": "", - "tags": [ - "家谱" - ], - "parameters": [ - { - "name": "applyId", - "in": "path", - "description": "加入家谱申请ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/members": { - "get": { - "summary": "APP 家谱成员列表", - "deprecated": false, - "description": "", - "tags": [ - "家谱成员" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ListResult", - "description": "通用列表响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/members/options": { - "get": { - "summary": "APP 家谱成员选项", - "deprecated": false, - "description": "", - "tags": [ - "家谱成员" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ListResult", - "description": "通用列表响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/members/{memberId}": { - "put": { - "summary": "APP 修改成员", - "deprecated": false, - "description": "", - "tags": [ - "家谱成员" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "memberId", - "in": "path", - "description": "家谱成员ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GenealogyMemberUpdateBody" - }, - "example": { - "memberName": "彭小明", - "relationName": "族亲", - "roleType": "member", - "lineagePersonId": 900020001 - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "delete": { - "summary": "APP 移除成员", - "deprecated": false, - "description": "", - "tags": [ - "家谱成员" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "memberId", - "in": "path", - "description": "家谱成员ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/members/me": { - "delete": { - "summary": "APP 退出家谱", - "deprecated": false, - "description": "", - "tags": [ - "家谱成员" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/members/owner-transfer": { - "put": { - "summary": "APP 转让家谱所有者", - "deprecated": false, - "description": "", - "tags": [ - "家谱成员" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GenealogyOwnerTransferBody" - }, - "example": { - "targetMemberId": 900010002 - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/generation-poems": { - "get": { - "summary": "APP 查询正常字辈谱", - "deprecated": false, - "description": "对可查看家谱的业务用户开放;仅返回正常状态字辈,供世系人物录入和展示使用。", - "tags": [ - "字辈谱" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/GenerationPoemListResult", - "description": "字辈列表响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "post": { - "summary": "APP 新增字辈", - "deprecated": false, - "description": "", - "tags": [ - "字辈谱" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GenerationPoemBody" - }, - "example": { - "generationNo": 5, - "generationText": "忠", - "description": "fifth generation poem", - "sortOrder": 5, - "status": "0" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/GenerationPoemResult", - "description": "字辈详情响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/generation-poems/batch/preview": { - "post": { - "summary": "APP 批量字辈预览", - "deprecated": false, - "description": "", - "tags": [ - "字辈谱" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GenerationPoemBatchBody" - }, - "example": { - "poemText": "德承家亦\n忠厚传芳", - "disableMissing": false - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/GenerationPoemBatchPreviewResult", - "description": "字辈批量预览响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/generation-poems/batch/save": { - "post": { - "summary": "APP 批量保存字辈", - "deprecated": false, - "description": "保存时会重新按当前数据生成差异;停用不删除历史字辈记录。", - "tags": [ - "字辈谱" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GenerationPoemBatchBody" - }, - "example": { - "poemText": "德承家亦\n忠厚传芳", - "disableMissing": false - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/generation-poems/management": { - "get": { - "summary": "APP 查询字辈维护列表", - "deprecated": false, - "description": "仅家谱内容编辑者可访问,返回正常和停用字辈,用于恢复、纠错和排序调整。", - "tags": [ - "字辈谱" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/GenerationPoemListResult", - "description": "字辈列表响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/generation-poems/{poemId}": { - "put": { - "summary": "APP 修改、停用或恢复字辈", - "deprecated": false, - "description": "", - "tags": [ - "字辈谱" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "poemId", - "in": "path", - "description": "字辈记录ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GenerationPoemBody" - }, - "example": { - "generationNo": 5, - "generationText": "忠", - "description": "fifth generation poem", - "sortOrder": 5, - "status": "0" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/GenerationPoemResult", - "description": "字辈详情响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/lineage/persons": { - "get": { - "summary": "APP 世系人物列表", - "deprecated": false, - "description": "", - "tags": [ - "世系人物" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/LineagePersonListResult", - "description": "世系人物列表或选项响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "post": { - "summary": "APP 新增世系人物", - "deprecated": false, - "description": "", - "tags": [ - "世系人物" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LineagePersonBody" - }, - "example": { - "appUserId": 900000001, - "personNo": "P202607090001", - "name": "彭德明", - "aliasName": "德明", - "sex": "0", - "generation": 1, - "generationName": "德", - "avatarOssId": "2060000000000000000", - "birthDate": "1950-01-01", - "birthLunar": "0", - "birthPlace": "江西吉安", - "personStatus": "0", - "biography": "第一世人物简介", - "sortOrder": 1 - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/LineagePersonResult", - "description": "世系人物详情响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/lineage/persons/page": { - "get": { - "summary": "APP 世系人物分页", - "deprecated": false, - "description": "", - "tags": [ - "世系人物" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "pageNum", - "in": "query", - "description": "页码,从1开始", - "required": false, - "schema": { - "type": "integer", - "default": 1 - } - }, - { - "name": "pageSize", - "in": "query", - "description": "每页条数", - "required": false, - "schema": { - "type": "integer", - "default": 10 - } - }, - { - "name": "keyword", - "in": "query", - "description": "姓名、别名或人物编号关键词", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "generation", - "in": "query", - "description": "世代序号", - "required": false, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "personStatus", - "in": "query", - "description": "人物状态字典值", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/LineagePersonPageResult", - "description": "世系人物分页响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/lineage/persons/options": { - "get": { - "summary": "APP 世系人物选项", - "deprecated": false, - "description": "", - "tags": [ - "世系人物" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "keyword", - "in": "query", - "description": "姓名、别名或人物编号关键词", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/LineagePersonListResult", - "description": "世系人物列表或选项响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/lineage/tree": { - "get": { - "summary": "APP 世系树", - "deprecated": false, - "description": "", - "tags": [ - "世系人物" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/LineagePersonTreeResult", - "description": "世系树响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/lineage/persons/{personId}": { - "get": { - "summary": "APP 世系人物详情", - "deprecated": false, - "description": "", - "tags": [ - "世系人物" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "personId", - "in": "path", - "description": "世系人物ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/LineagePersonResult", - "description": "世系人物详情响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "put": { - "summary": "APP 修改世系人物", - "deprecated": false, - "description": "", - "tags": [ - "世系人物" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "personId", - "in": "path", - "description": "世系人物ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LineagePersonBody" - }, - "example": { - "appUserId": 900000001, - "personNo": "P202607090001", - "name": "彭德明", - "aliasName": "德明", - "sex": "0", - "generation": 1, - "generationName": "德", - "avatarOssId": "2060000000000000000", - "birthDate": "1950-01-01", - "birthLunar": "0", - "birthPlace": "江西吉安", - "personStatus": "0", - "biography": "第一世人物简介", - "sortOrder": 1 - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/LineagePersonResult", - "description": "世系人物详情响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "delete": { - "summary": "APP 停用世系人物", - "deprecated": false, - "description": "逻辑停用人物,不执行物理删除;存在正常子女时拒绝停用。", - "tags": [ - "世系人物" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "personId", - "in": "path", - "description": "世系人物ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/lineage/persons/{personId}/children": { - "post": { - "summary": "APP 给人物添加子女", - "deprecated": false, - "description": "", - "tags": [ - "世系人物" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "personId", - "in": "path", - "description": "世系人物ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LineagePersonBody" - }, - "example": { - "appUserId": 900000001, - "personNo": "P202607090001", - "name": "彭德明", - "aliasName": "德明", - "sex": "0", - "generation": 1, - "generationName": "德", - "avatarOssId": "2060000000000000000", - "birthDate": "1950-01-01", - "birthLunar": "0", - "birthPlace": "江西吉安", - "personStatus": "0", - "biography": "第一世人物简介", - "sortOrder": 1 - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/LineagePersonResult", - "description": "世系人物详情响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/lineage/persons/{personId}/parents": { - "post": { - "summary": "APP 给人物添加父母", - "deprecated": false, - "description": "", - "tags": [ - "世系人物" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "personId", - "in": "path", - "description": "世系人物ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LineagePersonBody" - }, - "example": { - "appUserId": 900000001, - "personNo": "P202607090001", - "name": "彭德明", - "aliasName": "德明", - "sex": "0", - "generation": 1, - "generationName": "德", - "avatarOssId": "2060000000000000000", - "birthDate": "1950-01-01", - "birthLunar": "0", - "birthPlace": "江西吉安", - "personStatus": "0", - "biography": "第一世人物简介", - "sortOrder": 1 - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/LineagePersonResult", - "description": "世系人物详情响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/lineage/persons/{personId}/siblings": { - "post": { - "summary": "APP 给人物添加兄弟姐妹", - "deprecated": false, - "description": "", - "tags": [ - "世系人物" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "personId", - "in": "path", - "description": "世系人物ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LineagePersonBody" - }, - "example": { - "appUserId": 900000001, - "personNo": "P202607090001", - "name": "彭德明", - "aliasName": "德明", - "sex": "0", - "generation": 1, - "generationName": "德", - "avatarOssId": "2060000000000000000", - "birthDate": "1950-01-01", - "birthLunar": "0", - "birthPlace": "江西吉安", - "personStatus": "0", - "biography": "第一世人物简介", - "sortOrder": 1 - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/LineagePersonResult", - "description": "世系人物详情响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/lineage/persons/{personId}/spouses": { - "post": { - "summary": "APP 给人物添加配偶", - "deprecated": false, - "description": "", - "tags": [ - "世系人物" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "personId", - "in": "path", - "description": "世系人物ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LineagePersonBody" - }, - "example": { - "appUserId": 900000001, - "personNo": "P202607090001", - "name": "彭德明", - "aliasName": "德明", - "sex": "0", - "generation": 1, - "generationName": "德", - "avatarOssId": "2060000000000000000", - "birthDate": "1950-01-01", - "birthLunar": "0", - "birthPlace": "江西吉安", - "personStatus": "0", - "biography": "第一世人物简介", - "sortOrder": 1 - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/LineagePersonResult", - "description": "世系人物详情响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/feeds": { - "get": { - "summary": "APP 家族圈动态列表", - "deprecated": false, - "description": "", - "tags": [ - "家族圈" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ListResult", - "description": "通用列表响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "post": { - "summary": "APP 发布家族圈动态", - "deprecated": false, - "description": "", - "tags": [ - "家族圈" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FamilyFeedBody" - }, - "example": { - "feedType": "text", - "feedContent": "今天上传一张老照片。", - "mediaOssIds": "2060000000000000001,2060000000000000002", - "sortOrder": 0, - "status": "0" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/feeds/page": { - "get": { - "summary": "APP 家族圈动态分页", - "deprecated": false, - "description": "", - "tags": [ - "家族圈" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "pageNum", - "in": "query", - "description": "页码,从1开始", - "required": false, - "schema": { - "type": "integer", - "default": 1 - } - }, - { - "name": "pageSize", - "in": "query", - "description": "每页条数", - "required": false, - "schema": { - "type": "integer", - "default": 10 - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/PageResult", - "description": "通用分页响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/feeds/{feedId}": { - "get": { - "summary": "APP 家族圈动态详情", - "deprecated": false, - "description": "", - "tags": [ - "家族圈" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "feedId", - "in": "path", - "description": "家族动态ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "put": { - "summary": "APP 修改家族圈动态", - "deprecated": false, - "description": "", - "tags": [ - "家族圈" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "feedId", - "in": "path", - "description": "家族动态ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FamilyFeedBody" - }, - "example": { - "feedType": "text", - "feedContent": "今天上传一张老照片。", - "mediaOssIds": "2060000000000000001,2060000000000000002", - "sortOrder": 0, - "status": "0" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "delete": { - "summary": "APP 删除家族圈动态", - "deprecated": false, - "description": "", - "tags": [ - "家族圈" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "feedId", - "in": "path", - "description": "家族动态ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/feeds/{feedId}/likes": { - "post": { - "summary": "APP 点赞动态", - "deprecated": false, - "description": "", - "tags": [ - "家族圈" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "feedId", - "in": "path", - "description": "家族动态ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "delete": { - "summary": "APP 取消点赞动态", - "deprecated": false, - "description": "", - "tags": [ - "家族圈" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "feedId", - "in": "path", - "description": "家族动态ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/feeds/{feedId}/comments": { - "get": { - "summary": "APP 动态一级评论列表", - "deprecated": false, - "description": "仅返回正常展示的一级评论;每条评论的 replyCount 为正常展示的直接回复数量。", - "tags": [ - "家族圈" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "feedId", - "in": "path", - "description": "家族动态ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/FamilyFeedCommentListResult", - "description": "家族圈评论列表响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "post": { - "summary": "APP 评论动态", - "deprecated": false, - "description": "", - "tags": [ - "家族圈" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "feedId", - "in": "path", - "description": "家族动态ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FamilyFeedCommentBody" - }, - "example": { - "parentCommentId": null, - "commentContent": "这张照片很有年代感。" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/FamilyFeedCommentResult", - "description": "家族圈评论对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/feeds/{feedId}/comments/page": { - "get": { - "summary": "APP 动态一级评论分页", - "deprecated": false, - "description": "仅返回正常展示的一级评论;展开回复时请调用 replies 接口。", - "tags": [ - "家族圈" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "feedId", - "in": "path", - "description": "家族动态ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "pageNum", - "in": "query", - "description": "页码,从1开始", - "required": false, - "schema": { - "type": "integer", - "default": 1 - } - }, - { - "name": "pageSize", - "in": "query", - "description": "每页条数", - "required": false, - "schema": { - "type": "integer", - "default": 10 - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/FamilyFeedCommentPageResult", - "description": "家族圈评论分页响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/pc/genealogies/{genealogyId}/feeds": { - "get": { - "summary": "PC 家族圈动态列表", - "deprecated": false, - "description": "", - "tags": [ - "家族圈" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ListResult", - "description": "通用列表响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "post": { - "summary": "PC 发布家族圈动态", - "deprecated": false, - "description": "", - "tags": [ - "家族圈" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FamilyFeedBody" - }, - "example": { - "feedType": "text", - "feedContent": "今天上传一张老照片。", - "mediaOssIds": "2060000000000000001,2060000000000000002", - "sortOrder": 0, - "status": "0" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/pc/genealogies/{genealogyId}/feeds/page": { - "get": { - "summary": "PC 家族圈动态分页", - "deprecated": false, - "description": "", - "tags": [ - "家族圈" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "pageNum", - "in": "query", - "description": "", - "required": false, - "schema": { - "type": "integer", - "default": 1 - } - }, - { - "name": "pageSize", - "in": "query", - "description": "", - "required": false, - "schema": { - "type": "integer", - "default": 10 - } - }, - { - "name": "clientid", - "in": "header", - "description": "", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/PageResult", - "description": "通用分页响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/feeds/{feedId}/comments/{commentId}": { - "delete": { - "summary": "APP 删除本人动态评论;有回复时保留删除占位", - "deprecated": false, - "description": "", - "tags": [ - "家族圈" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "feedId", - "in": "path", - "description": "家族动态ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "commentId", - "in": "path", - "description": "评论ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/pc/genealogies/{genealogyId}/feeds/{feedId}": { - "get": { - "summary": "PC 家族圈动态详情", - "deprecated": false, - "description": "", - "tags": [ - "家族圈" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "feedId", - "in": "path", - "description": "", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "put": { - "summary": "PC 修改家族圈动态", - "deprecated": false, - "description": "", - "tags": [ - "家族圈" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "feedId", - "in": "path", - "description": "", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FamilyFeedBody" - }, - "example": { - "feedType": "text", - "feedContent": "今天上传一张老照片。", - "mediaOssIds": "2060000000000000001,2060000000000000002", - "sortOrder": 0, - "status": "0" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "delete": { - "summary": "PC 删除家族圈动态", - "deprecated": false, - "description": "", - "tags": [ - "家族圈" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "feedId", - "in": "path", - "description": "", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/pc/genealogies/{genealogyId}/feeds/{feedId}/likes": { - "post": { - "summary": "PC 点赞动态", - "deprecated": false, - "description": "", - "tags": [ - "家族圈" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "feedId", - "in": "path", - "description": "", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "delete": { - "summary": "PC 取消点赞动态", - "deprecated": false, - "description": "", - "tags": [ - "家族圈" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "feedId", - "in": "path", - "description": "", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/pc/genealogies/{genealogyId}/feeds/{feedId}/comments": { - "get": { - "summary": "PC 动态评论列表", - "deprecated": false, - "description": "", - "tags": [ - "家族圈" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "feedId", - "in": "path", - "description": "", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ListResult", - "description": "通用列表响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "post": { - "summary": "PC 评论动态", - "deprecated": false, - "description": "", - "tags": [ - "家族圈" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "feedId", - "in": "path", - "description": "", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FamilyFeedCommentBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/pc/genealogies/{genealogyId}/feeds/{feedId}/comments/page": { - "get": { - "summary": "PC 动态评论分页", - "deprecated": false, - "description": "", - "tags": [ - "家族圈" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "feedId", - "in": "path", - "description": "", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "pageNum", - "in": "query", - "description": "", - "required": false, - "schema": { - "type": "integer", - "default": 1 - } - }, - { - "name": "pageSize", - "in": "query", - "description": "", - "required": false, - "schema": { - "type": "integer", - "default": 10 - } - }, - { - "name": "clientid", - "in": "header", - "description": "", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/PageResult", - "description": "通用分页响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/pc/genealogies/{genealogyId}/feeds/{feedId}/comments/{commentId}": { - "delete": { - "summary": "PC 删除动态评论", - "deprecated": false, - "description": "", - "tags": [ - "家族圈" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "feedId", - "in": "path", - "description": "", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "commentId", - "in": "path", - "description": "评论ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/feeds/{feedId}/comments/{commentId}/replies": { - "get": { - "summary": "APP 获取评论的直接回复列表", - "deprecated": false, - "description": "仅返回指定正常评论的正常展示直接回复;回复的 replyCount 可用于继续按需展开下一层。", - "tags": [ - "家族圈" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "feedId", - "in": "path", - "description": "家族动态ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "commentId", - "in": "path", - "description": "父评论 ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/FamilyFeedCommentListResult", - "description": "家族圈评论列表响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/feeds/{feedId}/comments/{commentId}/replies/page": { - "get": { - "summary": "APP 分页获取评论的直接回复", - "deprecated": false, - "description": "", - "tags": [ - "家族圈" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "feedId", - "in": "path", - "description": "家族动态ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "commentId", - "in": "path", - "description": "父评论 ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "pageNum", - "in": "query", - "description": "页码,从1开始", - "required": false, - "schema": { - "type": "integer", - "default": 1 - } - }, - { - "name": "pageSize", - "in": "query", - "description": "每页条数", - "required": false, - "schema": { - "type": "integer", - "default": 10 - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/FamilyFeedCommentPageResult", - "description": "家族圈评论分页响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/article-categories": { - "get": { - "summary": "APP 谱文分类", - "deprecated": false, - "description": "", - "tags": [ - "内容文章" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ListResult", - "description": "通用列表响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/articles": { - "get": { - "summary": "APP 谱文列表", - "deprecated": false, - "description": "", - "tags": [ - "内容文章" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ListResult", - "description": "通用列表响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "post": { - "summary": "APP 新增谱文", - "deprecated": false, - "description": "", - "tags": [ - "内容文章" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArticleBody" - }, - "example": { - "categoryId": 900040001, - "articleTitle": "族谱源流", - "articleSummary": "介绍本支源流", - "coverOssId": "2060000000000000000", - "articleContent": "
article content
", - "authorName": "族谱管理员", - "sortOrder": 1, - "status": "0" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/articles/{articleId}": { - "get": { - "summary": "APP 谱文详情", - "deprecated": false, - "description": "", - "tags": [ - "内容文章" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "articleId", - "in": "path", - "description": "谱文/官网文章ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "put": { - "summary": "APP 修改谱文", - "deprecated": false, - "description": "", - "tags": [ - "内容文章" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "articleId", - "in": "path", - "description": "谱文/官网文章ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArticleBody" - }, - "example": { - "categoryId": 900040001, - "articleTitle": "族谱源流", - "articleSummary": "介绍本支源流", - "coverOssId": "2060000000000000000", - "articleContent": "article content
", - "authorName": "族谱管理员", - "sortOrder": 1, - "status": "0" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "delete": { - "summary": "APP 删除谱文", - "deprecated": false, - "description": "", - "tags": [ - "内容文章" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "articleId", - "in": "path", - "description": "要删除的谱文ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/help-articles": { - "get": { - "summary": "APP 帮助文章列表", - "deprecated": false, - "description": "", - "tags": [ - "内容文章" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "客户端ID", - "example": "ced7e5f0498645c6ec642dcf450b036f", - "schema": { - "type": "string", - "default": "ced7e5f0498645c6ec642dcf450b036f" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ListResult", - "description": "通用列表响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/help-articles/{helpId}": { - "get": { - "summary": "APP 帮助文章详情", - "deprecated": false, - "description": "", - "tags": [ - "内容文章" - ], - "parameters": [ - { - "name": "helpId", - "in": "path", - "description": "帮助文章ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "客户端ID", - "example": "ced7e5f0498645c6ec642dcf450b036f", - "schema": { - "type": "string", - "default": "ced7e5f0498645c6ec642dcf450b036f" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/promotions": { - "get": { - "summary": "APP 应用推广列表", - "deprecated": false, - "description": "", - "tags": [ - "内容文章" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "客户端ID", - "example": "ced7e5f0498645c6ec642dcf450b036f", - "schema": { - "type": "string", - "default": "ced7e5f0498645c6ec642dcf450b036f" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ListResult", - "description": "通用列表响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/albums": { - "get": { - "summary": "APP 相册列表", - "deprecated": false, - "description": "", - "tags": [ - "相册" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ListResult", - "description": "通用列表响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "post": { - "summary": "APP 创建相册", - "deprecated": false, - "description": "", - "tags": [ - "相册" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AlbumBody" - }, - "example": { - "albumName": "老照片", - "albumDesc": "family old photos", - "coverOssId": "2060000000000000000", - "sortOrder": 1, - "status": "0" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/albums/{albumId}": { - "put": { - "summary": "APP 修改相册", - "deprecated": false, - "description": "", - "tags": [ - "相册" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "albumId", - "in": "path", - "description": "相册ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AlbumBody" - }, - "example": { - "albumName": "老照片", - "albumDesc": "family old photos", - "coverOssId": "2060000000000000000", - "sortOrder": 1, - "status": "0" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "delete": { - "summary": "APP 删除相册", - "deprecated": false, - "description": "逻辑删除相册及其照片,并释放封面和照片文件引用。", - "tags": [ - "相册" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "albumId", - "in": "path", - "description": "要删除的相册ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/albums/{albumId}/photos": { - "get": { - "summary": "APP 相册图片列表", - "deprecated": false, - "description": "", - "tags": [ - "相册" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "albumId", - "in": "path", - "description": "相册ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ListResult", - "description": "通用列表响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "post": { - "summary": "APP 上传相册图片记录", - "deprecated": false, - "description": "", - "tags": [ - "相册" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "albumId", - "in": "path", - "description": "相册ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AlbumPhotoBody" - }, - "example": { - "ossId": "2060000000000000000", - "photoTitle": "老宅合影", - "photoDesc": "old house photo", - "photographer": "彭小明", - "shootTime": "2026-07-09 10:00:00", - "sortOrder": 1, - "status": "0" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/albums/{albumId}/photos/{photoId}": { - "delete": { - "summary": "APP 删除单张相册图片", - "deprecated": false, - "description": "", - "tags": [ - "相册" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "albumId", - "in": "path", - "description": "相册ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "photoId", - "in": "path", - "description": "要删除的相册图片ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/ceremonies": { - "get": { - "summary": "APP 祭祀列表", - "deprecated": false, - "description": "", - "tags": [ - "祭祀" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ListResult", - "description": "通用列表响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "post": { - "summary": "APP 创建祭祀", - "deprecated": false, - "description": "", - "tags": [ - "祭祀" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CeremonyBody" - }, - "example": { - "ceremonyType": "ancestor", - "ceremonyTitle": "清明祭祖", - "ceremonyDesc": "online ancestor ceremony", - "ceremonyTime": "2026-04-04 09:00:00", - "location": "祠堂", - "coverOssId": "2060000000000000000", - "sortOrder": 1, - "status": "0" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/ceremonies/{ceremonyId}": { - "get": { - "summary": "APP 祭祀详情", - "deprecated": false, - "description": "", - "tags": [ - "祭祀" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "ceremonyId", - "in": "path", - "description": "祭祀/活动ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "put": { - "summary": "APP 修改祭祀", - "deprecated": false, - "description": "", - "tags": [ - "祭祀" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "ceremonyId", - "in": "path", - "description": "祭祀/活动ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CeremonyBody" - }, - "example": { - "ceremonyType": "ancestor", - "ceremonyTitle": "清明祭祖", - "ceremonyDesc": "online ancestor ceremony", - "ceremonyTime": "2026-04-04 09:00:00", - "location": "祠堂", - "coverOssId": "2060000000000000000", - "sortOrder": 1, - "status": "0" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "delete": { - "summary": "APP 删除祭祀活动", - "deprecated": false, - "description": "逻辑删除祭祀活动及其祭品,并释放活动封面文件引用。", - "tags": [ - "祭祀" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "ceremonyId", - "in": "path", - "description": "要删除的祭祀活动ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/ceremonies/{ceremonyId}/gifts": { - "get": { - "summary": "APP 祭祀献礼列表", - "deprecated": false, - "description": "", - "tags": [ - "祭祀" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "ceremonyId", - "in": "path", - "description": "祭祀/活动ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ListResult", - "description": "通用列表响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "post": { - "summary": "APP 新增祭祀献礼", - "deprecated": false, - "description": "", - "tags": [ - "祭祀" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "ceremonyId", - "in": "path", - "description": "祭祀/活动ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CeremonyGiftBody" - }, - "example": { - "giverName": "彭小明", - "giftAmount": 66.66, - "giftMessage": "缅怀先祖" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/ceremonies/{ceremonyId}/gifts/{giftId}": { - "delete": { - "summary": "APP 删除单条祭品", - "deprecated": false, - "description": "", - "tags": [ - "祭祀" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "ceremonyId", - "in": "path", - "description": "祭祀活动ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "giftId", - "in": "path", - "description": "要删除的祭品ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/growth-records": { - "get": { - "summary": "APP 成长记录列表", - "deprecated": false, - "description": "", - "tags": [ - "族务记录" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ListResult", - "description": "通用列表响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "post": { - "summary": "APP 新增成长记录", - "deprecated": false, - "description": "", - "tags": [ - "族务记录" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GrowthRecordBody" - }, - "example": { - "lineagePersonId": 900020001, - "recordType": "birth", - "recordTitle": "出生记录", - "recordContent": "birth record", - "recordDate": "2026-07-09 10:00:00", - "remindTime": "2027-07-09 10:00:00", - "mediaOssIds": "2060000000000000001", - "sortOrder": 1, - "status": "0" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/growth-records/{recordId}": { - "get": { - "summary": "APP 成长记录详情", - "deprecated": false, - "description": "", - "tags": [ - "族务记录" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "recordId", - "in": "path", - "description": "记录ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "put": { - "summary": "APP 修改成长记录", - "deprecated": false, - "description": "", - "tags": [ - "族务记录" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "recordId", - "in": "path", - "description": "记录ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GrowthRecordBody" - }, - "example": { - "lineagePersonId": 900020001, - "recordType": "birth", - "recordTitle": "出生记录", - "recordContent": "birth record", - "recordDate": "2026-07-09 10:00:00", - "remindTime": "2027-07-09 10:00:00", - "mediaOssIds": "2060000000000000001", - "sortOrder": 1, - "status": "0" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "delete": { - "summary": "APP 删除成长记录", - "deprecated": false, - "description": "", - "tags": [ - "族务记录" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "recordId", - "in": "path", - "description": "要删除的成长记录ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/memos": { - "get": { - "summary": "APP 备忘录列表", - "deprecated": false, - "description": "", - "tags": [ - "族务记录" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ListResult", - "description": "通用列表响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "post": { - "summary": "APP 新增备忘录", - "deprecated": false, - "description": "", - "tags": [ - "族务记录" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MemoBody" - }, - "example": { - "memoTitle": "修谱事项", - "memoContent": "contact family members", - "remindTime": "2026-08-01 09:00:00", - "completed": "0", - "mediaOssIds": "2060000000000000001", - "sortOrder": 1, - "status": "0" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/memos/{memoId}": { - "get": { - "summary": "APP 备忘录详情", - "deprecated": false, - "description": "", - "tags": [ - "族务记录" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "memoId", - "in": "path", - "description": "", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "put": { - "summary": "APP 修改备忘录", - "deprecated": false, - "description": "", - "tags": [ - "族务记录" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "memoId", - "in": "path", - "description": "", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MemoBody" - }, - "example": { - "memoTitle": "修谱事项", - "memoContent": "contact family members", - "remindTime": "2026-08-01 09:00:00", - "completed": "0", - "mediaOssIds": "2060000000000000001", - "sortOrder": 1, - "status": "0" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "delete": { - "summary": "APP 删除备忘录", - "deprecated": false, - "description": "", - "tags": [ - "族务记录" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "memoId", - "in": "path", - "description": "要删除的备忘录ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/relative-records": { - "get": { - "summary": "APP 亲友记录列表", - "deprecated": false, - "description": "", - "tags": [ - "族务记录" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ListResult", - "description": "通用列表响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "post": { - "summary": "APP 新增亲友记录", - "deprecated": false, - "description": "", - "tags": [ - "族务记录" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RelativeRecordBody" - }, - "example": { - "relativeName": "张三", - "relationName": "亲友", - "eventName": "礼尚往来", - "eventTime": "2026-07-16 10:00:00", - "giftAmount": 100, - "recordContent": "往来记录", - "mediaOssIds": "2060000000000000001", - "sortOrder": 1, - "status": "0" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/relative-records/{relativeId}": { - "get": { - "summary": "APP 亲友记录详情", - "deprecated": false, - "description": "", - "tags": [ - "族务记录" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "relativeId", - "in": "path", - "description": "亲友记录ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "put": { - "summary": "APP 修改亲友记录", - "deprecated": false, - "description": "", - "tags": [ - "族务记录" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "relativeId", - "in": "path", - "description": "亲友记录ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RelativeRecordBody" - }, - "example": { - "relativeName": "张三", - "relationName": "亲友", - "eventName": "礼尚往来", - "eventTime": "2026-07-16 10:00:00", - "giftAmount": 100, - "recordContent": "往来记录", - "mediaOssIds": "2060000000000000001", - "sortOrder": 1, - "status": "0" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "delete": { - "summary": "APP 删除亲友记录", - "deprecated": false, - "description": "", - "tags": [ - "族务记录" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "relativeId", - "in": "path", - "description": "要删除的亲友记录ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/merit-records": { - "get": { - "summary": "APP 功德记录列表", - "deprecated": false, - "description": "", - "tags": [ - "族务记录" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ListResult", - "description": "通用列表响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "post": { - "summary": "APP 新增功德记录", - "deprecated": false, - "description": "", - "tags": [ - "族务记录" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MeritRecordBody" - }, - "example": { - "donorName": "彭小明", - "meritType": "donation", - "meritTitle": "修谱捐款", - "meritContent": "support genealogy work", - "amount": 100, - "meritTime": "2026-07-09 10:00:00", - "sortOrder": 1, - "status": "0" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/merit-records/{meritId}": { - "delete": { - "summary": "APP 删除功德记录", - "deprecated": false, - "description": "", - "tags": [ - "族务记录" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "meritId", - "in": "path", - "description": "要删除的功德记录ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/notifications": { - "get": { - "summary": "APP 消息通知列表", - "deprecated": false, - "description": "", - "tags": [ - "消息通知" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ListResult", - "description": "通用列表响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/notifications/{notificationId}/read": { - "post": { - "summary": "APP 标记通知已读", - "deprecated": false, - "description": "", - "tags": [ - "消息通知" - ], - "parameters": [ - { - "name": "notificationId", - "in": "path", - "description": "通知ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/notifications/read-all": { - "post": { - "summary": "APP 全部标记已读", - "deprecated": false, - "description": "", - "tags": [ - "消息通知" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/feedback": { - "get": { - "summary": "APP 我的反馈列表", - "deprecated": false, - "description": "", - "tags": [ - "意见反馈" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ListResult", - "description": "通用列表响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "post": { - "summary": "APP 提交反馈", - "deprecated": false, - "description": "", - "tags": [ - "意见反馈" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FeedbackBody" - }, - "example": { - "feedbackType": "bug", - "feedbackContent": "upload image failed", - "contactInfo": "13800000000" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/vip/packages": { - "get": { - "summary": "APP VIP 套餐列表", - "deprecated": false, - "description": "", - "tags": [ - "VIP" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ListResult", - "description": "通用列表响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/vip/orders": { - "get": { - "summary": "APP VIP 订单列表", - "deprecated": false, - "description": "", - "tags": [ - "VIP" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ListResult", - "description": "通用列表响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - }, - "post": { - "summary": "APP 创建 VIP 订单", - "deprecated": false, - "description": "", - "tags": [ - "VIP" - ], - "parameters": [ - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VipOrderBody" - }, - "example": { - "packageId": 900060001, - "genealogyId": 900001001, - "payType": "wechat" - } - } - }, - "required": true - }, - "responses": { - "200": { - "$ref": "#/components/responses/ObjectResult", - "description": "通用对象响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - }, - "/genealogy/app/genealogies/{genealogyId}/videos/{videoId}": { - "delete": { - "summary": "APP 删除视频", - "deprecated": false, - "description": "逻辑删除视频,并释放视频文件和封面文件引用。", - "tags": [ - "视频" - ], - "parameters": [ - { - "name": "genealogyId", - "in": "path", - "description": "家谱ID", - "required": true, - "example": 900001001, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "videoId", - "in": "path", - "description": "要删除的视频ID", - "required": true, - "example": "", - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "clientid", - "in": "header", - "description": "APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "required": true, - "example": "428a8310cd442757ae699df5d894f051", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/VoidResult", - "description": "通用成功响应" - } - }, - "security": [ - { - "SaToken": [] - } - ] - } - } - }, - "components": { - "schemas": { - "RVoid": { - "type": "object", - "properties": { - "code": { - "description": "系统图形验证码或响应状态码", - "type": "integer", - "example": 200 - }, - "msg": { - "description": "响应消息", - "type": "string", - "example": "操作成功" - }, - "data": { - "description": "响应数据主体", - "type": "null" - } - } - }, - "PasswordRegisterBody": { - "type": "object", - "additionalProperties": false, - "required": [ - "clientId", - "grantType", - "tenantId", - "phone", - "password", - "smsCode" - ], - "properties": { - "clientId": { - "description": "必填;必须与 clientid Header 一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "type": "string" - }, - "grantType": { - "description": "授权类型,例如password、sms、wechat、apple", - "type": "string", - "example": "password" - }, - "tenantId": { - "description": "租户ID,用于区分不同租户的数据和验证策略", - "type": "string", - "example": "000000" - }, - "phone": { - "description": "手机号", - "type": "string", - "example": "13800000000" - }, - "password": { - "type": "string", - "description": "32 位 MD5", - "example": "e10adc3949ba59abbe56e057f20f883e" - }, - "nickName": { - "description": "用户昵称", - "type": "string" - }, - "registerSource": { - "description": "注册来源,例如APP、PC、H5、MINI_PROGRAM", - "type": "string" - }, - "smsCode": { - "description": "4 位短信验证码", - "type": "string", - "pattern": "^\\d{4}$", - "example": "1234" - } - } - }, - "PasswordLoginBody": { - "type": "object", - "additionalProperties": false, - "required": [ - "clientId", - "grantType", - "tenantId", - "phone", - "password" - ], - "properties": { - "clientId": { - "description": "必填;必须与 clientid Header 一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "type": "string" - }, - "grantType": { - "description": "授权类型,例如password、sms、wechat、apple", - "type": "string", - "example": "password" - }, - "tenantId": { - "description": "租户ID,用于区分不同租户的数据和验证策略", - "type": "string", - "example": "000000" - }, - "phone": { - "description": "手机号", - "type": "string", - "example": "13800000000" - }, - "password": { - "type": "string", - "description": "32 位 MD5", - "example": "e10adc3949ba59abbe56e057f20f883e" - } - } - }, - "SmsLoginBody": { - "type": "object", - "additionalProperties": false, - "required": [ - "clientId", - "grantType", - "tenantId", - "phone", - "smsCode" - ], - "properties": { - "clientId": { - "description": "必填;必须与 clientid Header 一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "type": "string" - }, - "grantType": { - "description": "授权类型,例如password、sms、wechat、apple", - "type": "string", - "example": "sms" - }, - "tenantId": { - "description": "租户ID,用于区分不同租户的数据和验证策略", - "type": "string", - "example": "000000" - }, - "phone": { - "description": "手机号", - "type": "string", - "example": "13800000000" - }, - "smsCode": { - "description": "4 位短信验证码", - "type": "string", - "pattern": "^\\d{4}$", - "example": "1234" - } - } - }, - "SmsCodeBody": { - "type": "object", - "additionalProperties": false, - "required": [ - "clientId", - "grantType", - "tenantId", - "sceneCode", - "phone", - "validToken" - ], - "properties": { - "clientId": { - "description": "必填;必须与 clientid Header 一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "type": "string" - }, - "grantType": { - "description": "授权类型,例如password、sms、wechat、apple", - "type": "string", - "example": "sms" - }, - "tenantId": { - "description": "租户ID,用于区分不同租户的数据和验证策略", - "type": "string", - "example": "000000" - }, - "sceneCode": { - "description": "APP 短信场景编码", - "type": "string", - "enum": [ - "APP_SMS_LOGIN", - "APP_REGISTER", - "APP_FORGOT_PASSWORD", - "APP_PHONE_CHANGE", - "APP_ACCOUNT_DEACTIVATE" - ], - "example": "APP_SMS_LOGIN" - }, - "phone": { - "description": "手机号", - "type": "string", - "example": "13800000000" - }, - "validToken": { - "description": "验证中心通过后返回的票据,仅用于发送短信验证码", - "type": "string" - } - } - }, - "ProfileUpdateBody": { - "type": "object", - "properties": { - "nickName": { - "description": "用户昵称", - "type": "string" - }, - "avatarOssId": { - "description": "头像文件OSS ID", - "type": "integer", - "format": "int64" - }, - "sex": { - "description": "性别,建议使用系统字典值", - "type": "string" - }, - "birthday": { - "description": "生日,格式 yyyy-MM-dd", - "type": "string", - "format": "date" - }, - "provinceCode": { - "type": "string" - }, - "cityCode": { - "type": "string" - }, - "districtCode": { - "type": "string" - } - } - }, - "PasswordChangeBody": { - "type": "object", - "required": [ - "oldPassword", - "newPassword" - ], - "properties": { - "oldPassword": { - "type": "string", - "description": "32 位 MD5" - }, - "newPassword": { - "type": "string", - "description": "32 位 MD5" - } - } - }, - "PasswordResetBody": { - "type": "object", - "additionalProperties": false, - "required": [ - "clientId", - "grantType", - "tenantId", - "phone", - "smsCode", - "newPassword" - ], - "properties": { - "clientId": { - "description": "必填;必须与 clientid Header 一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "type": "string" - }, - "grantType": { - "description": "授权类型", - "type": "string", - "example": "password" - }, - "tenantId": { - "description": "租户ID,用于区分不同租户的数据和验证策略", - "type": "string", - "example": "000000" - }, - "phone": { - "description": "手机号", - "type": "string" - }, - "smsCode": { - "description": "4 位短信验证码", - "type": "string", - "pattern": "^\\d{4}$", - "example": "1234" - }, - "newPassword": { - "type": "string", - "description": "32 位 MD5" - } - } - }, - "PhoneChangeBody": { - "type": "object", - "additionalProperties": false, - "required": [ - "clientId", - "phone", - "smsCode" - ], - "properties": { - "clientId": { - "description": "必填;必须与 clientid Header 一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "type": "string" - }, - "phone": { - "description": "新手机号", - "type": "string" - }, - "smsCode": { - "description": "4 位短信验证码", - "type": "string", - "pattern": "^\\d{4}$", - "example": "1234" - } - } - }, - "AccountDeactivateBody": { - "type": "object", - "additionalProperties": false, - "required": [ - "clientId", - "smsCode" - ], - "properties": { - "clientId": { - "description": "必填;必须与 clientid Header 一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。", - "type": "string" - }, - "smsCode": { - "description": "4 位短信验证码", - "type": "string", - "pattern": "^\\d{4}$", - "example": "1234" - } - } - }, - "ResumableInitBody": { - "type": "object", - "required": [ - "fileName", - "fileSize", - "fileMd5", - "chunkSize", - "totalChunks" - ], - "properties": { - "fileName": { - "description": "原始文件名", - "type": "string" - }, - "fileSize": { - "description": "文件大小,单位字节", - "type": "integer", - "format": "int64" - }, - "fileMd5": { - "description": "完整文件MD5,用于秒传和完整性校验", - "type": "string" - }, - "contentType": { - "description": "文件MIME类型,例如 image/jpeg、video/mp4", - "type": "string" - }, - "chunkSize": { - "description": "单个分片大小,单位字节", - "type": "integer", - "example": 4194304 - }, - "totalChunks": { - "description": "总分片数", - "type": "integer" - }, - "bizType": { - "description": "业务类型,例如avatar、cover、feed_image", - "type": "string" - }, - "usageScene": { - "description": "文件使用场景,便于后续引用统计和清理", - "type": "string" - } - } - }, - "ResumableCompleteBody": { - "type": "object", - "required": [ - "uploadId", - "fileMd5", - "fileSize" - ], - "properties": { - "uploadId": { - "description": "分片上传任务ID", - "type": "string" - }, - "fileMd5": { - "description": "完整文件MD5,用于秒传和完整性校验", - "type": "string" - }, - "fileSize": { - "description": "文件大小,单位字节", - "type": "integer", - "format": "int64" - } - } - }, - "FileReferenceBody": { - "type": "object", - "required": [ - "bizType", - "bizTable", - "bizId", - "bizField" - ], - "properties": { - "bizType": { - "description": "业务类型,例如avatar、cover、feed_image", - "type": "string", - "example": "family_feed" - }, - "bizName": { - "description": "业务名称,用于后台展示文件引用来源", - "type": "string", - "example": "家族圈动态" - }, - "bizTable": { - "description": "业务表名,用于文件引用绑定", - "type": "string", - "example": "gen_family_feed" - }, - "bizId": { - "description": "业务数据ID,用于文件引用绑定", - "type": "integer", - "format": "int64" - }, - "bizField": { - "description": "业务字段名,例如avatar_oss_id、cover_oss_id", - "type": "string", - "example": "media_ids" - }, - "ossId": { - "description": "OSS文件ID,表单内部使用,用户侧应通过上传组件获取", - "type": "integer", - "format": "int64" - }, - "ossIds": { - "type": "string", - "example": "2060001,2060002" - }, - "usageScene": { - "description": "文件使用场景,便于后续引用统计和清理", - "type": "string" - }, - "usageName": { - "type": "string" - } - } - }, - "GenerationPoemBatchBody": { - "type": "object", - "required": [ - "poemText" - ], - "properties": { - "poemText": { - "description": "字辈文本。无分隔符时按单个字拆分;可用空格、逗号、分号、顿号、斜杠或竖线分隔多个字辈。单个字辈最多50个字符,一次最多500个世代。", - "type": "string", - "maxLength": 26000, - "example": "德承家亦\n忠厚传芳" - }, - "disableMissing": { - "description": "保存时是否停用未出现在新文本中的后续世代;不会删除历史记录。", - "type": "boolean", - "example": false - } - } - }, - "LineagePersonBody": { - "type": "object", - "additionalProperties": false, - "required": [ - "name" - ], - "properties": { - "appUserId": { - "description": "绑定的业务用户ID;仅家谱管理员可绑定,且用户必须属于当前租户并处于正常状态", - "type": "integer", - "format": "int64" - }, - "personNo": { - "description": "人物编号;不传时由服务端生成", - "type": "string" - }, - "name": { - "description": "姓名", - "type": "string" - }, - "aliasName": { - "description": "别名或曾用名", - "type": "string" - }, - "sex": { - "description": "性别,建议使用系统字典值", - "type": "string", - "example": "0" - }, - "generation": { - "description": "世代序号", - "type": "integer", - "format": "int64" - }, - "generationName": { - "description": "字辈或辈分", - "type": "string" - }, - "fatherId": { - "description": "父亲人物ID,必须属于当前家谱", - "type": "integer", - "format": "int64" - }, - "motherId": { - "description": "母亲人物ID,必须属于当前家谱", - "type": "integer", - "format": "int64" - }, - "avatarOssId": { - "description": "头像文件OSS ID;用户界面应通过统一上传组件获得,不允许手工录入", - "type": "integer", - "format": "int64", - "nullable": true - }, - "birthDate": { - "type": "string", - "format": "date-time", - "nullable": true - }, - "birthLunar": { - "description": "生日是否农历,使用项目字典值", - "type": "string" - }, - "birthPlace": { - "description": "出生地", - "type": "string" - }, - "deathDate": { - "type": "string", - "format": "date-time", - "nullable": true - }, - "deathLunar": { - "description": "逝世日期是否农历,使用项目字典值", - "type": "string" - }, - "deathPlace": { - "description": "逝世地", - "type": "string" - }, - "burialPlace": { - "description": "安葬地", - "type": "string" - }, - "personStatus": { - "description": "人物状态字典值", - "type": "string" - }, - "biography": { - "description": "人物简介", - "type": "string" - }, - "sortOrder": { - "description": "排序值,数值越小越靠前", - "type": "integer", - "format": "int64" - }, - "remark": { - "description": "备注", - "type": "string" - }, - "relationName": { - "description": "通过添加配偶快捷接口提交时使用的关系显示名称", - "type": "string" - } - } - }, - "FamilyFeedBody": { - "type": "object", - "required": [ - "feedContent" - ], - "properties": { - "feedType": { - "description": "动态类型,未传时默认为 text", - "type": "string", - "example": "text" - }, - "feedContent": { - "description": "动态内容,不能为空", - "type": "string", - "example": "今天上传一张老照片。" - }, - "mediaOssIds": { - "description": "媒体文件 OSS ID 列表,多个 ID 使用英文逗号分隔", - "type": "string", - "example": "2060000000000000001,2060000000000000002" - }, - "sortOrder": { - "description": "排序值,未传时默认为 0", - "type": "integer", - "format": "int64", - "example": 0 - }, - "status": { - "description": "动态状态,未传时默认为正常状态", - "type": "string", - "example": "0" - } - } - }, - "FamilyFeedCommentBody": { - "type": "object", - "required": [ - "commentContent" - ], - "properties": { - "parentCommentId": { - "description": "父评论 ID;不传或传 null 表示发布一级评论", - "type": "integer", - "format": "int64", - "nullable": true - }, - "commentContent": { - "description": "评论内容,最多 1000 个字符", - "type": "string" - } - } - }, - "GenealogyCreateBody": { - "type": "object", - "required": [ - "genealogyName", - "surname", - "regionCode" - ], - "properties": { - "genealogyName": { - "description": "家谱名称", - "type": "string" - }, - "surname": { - "description": "姓氏", - "type": "string" - }, - "ancestralHall": { - "description": "堂号/祠堂名称", - "type": "string" - }, - "originPlace": { - "description": "籍贯/起源地", - "type": "string" - }, - "regionCode": { - "description": "行政区划编码", - "type": "string" - }, - "addressDetail": { - "description": "详细地址", - "type": "string" - }, - "coverOssId": { - "description": "封面图片OSS ID", - "type": "integer", - "format": "int64" - }, - "intro": { - "description": "简介", - "type": "string" - }, - "visibility": { - "description": "可见范围,例如0私密、1公开、2成员可见", - "type": "string" - }, - "joinMode": { - "description": "加入方式,例如0关闭、1审核、2邀请码", - "type": "string" - } - }, - "example": { - "genealogyName": "彭氏家谱", - "surname": "彭", - "ancestralHall": "陇西堂", - "originPlace": "江西吉安", - "regionCode": "360800", - "addressDetail": "江西省吉安市", - "coverOssId": 2060000000000000000, - "intro": "彭氏家谱简介", - "visibility": "1", - "joinMode": "1" - } - }, - "GenealogyUpdateBody": { - "type": "object", - "properties": { - "genealogyName": { - "description": "家谱名称", - "type": "string" - }, - "surname": { - "description": "姓氏", - "type": "string" - }, - "ancestralHall": { - "description": "堂号/祠堂名称", - "type": "string" - }, - "originPlace": { - "description": "籍贯/起源地", - "type": "string" - }, - "regionCode": { - "description": "行政区划编码", - "type": "string" - }, - "addressDetail": { - "description": "详细地址", - "type": "string" - }, - "coverOssId": { - "description": "封面图片OSS ID", - "type": "integer", - "format": "int64" - }, - "intro": { - "description": "简介", - "type": "string" - }, - "visibility": { - "description": "可见范围,例如0私密、1公开、2成员可见", - "type": "string" - }, - "joinMode": { - "description": "加入方式,例如0关闭、1审核、2邀请码", - "type": "string" - } - }, - "example": { - "genealogyName": "彭氏家谱", - "surname": "彭", - "ancestralHall": "陇西堂", - "originPlace": "江西吉安", - "regionCode": "360800", - "addressDetail": "江西省吉安市", - "coverOssId": 2060000000000000000, - "intro": "更新后的家谱简介", - "visibility": "1", - "joinMode": "1" - } - }, - "GenealogyJoinApplyBody": { - "type": "object", - "properties": { - "applicantName": { - "description": "申请人姓名", - "type": "string" - }, - "phone": { - "description": "手机号", - "type": "string" - }, - "relationDesc": { - "description": "与家谱/人物的关系说明", - "type": "string" - }, - "applyReason": { - "description": "申请理由", - "type": "string" - }, - "inviterUserId": { - "description": "邀请人业务用户ID", - "type": "integer", - "format": "int64" - } - }, - "example": { - "applicantName": "彭小明", - "phone": "13800000000", - "relationDesc": "本族成员", - "applyReason": "申请加入家谱维护", - "inviterUserId": 900000001 - } - }, - "GenealogyJoinAuditBody": { - "type": "object", - "required": [ - "status" - ], - "properties": { - "status": { - "description": "状态,建议使用对应字典值", - "type": "string" - }, - "auditRemark": { - "description": "审核备注", - "type": "string" - } - }, - "example": { - "status": "1", - "auditRemark": "信息核验通过" - } - }, - "GenealogyMemberUpdateBody": { - "type": "object", - "properties": { - "memberName": { - "description": "成员姓名", - "type": "string" - }, - "relationName": { - "description": "成员关系名称", - "type": "string" - }, - "roleType": { - "description": "成员角色类型,例如创建者、管理员、普通成员", - "type": "string" - }, - "lineagePersonId": { - "description": "绑定的世系人物ID", - "type": "integer", - "format": "int64" - } - }, - "example": { - "memberName": "彭小明", - "relationName": "族亲", - "roleType": "member", - "lineagePersonId": 900020001 - } - }, - "GenealogyOwnerTransferBody": { - "type": "object", - "required": [ - "targetMemberId" - ], - "properties": { - "targetMemberId": { - "description": "目标成员ID", - "type": "integer", - "format": "int64" - } - }, - "example": { - "targetMemberId": 900010002 - } - }, - "GenerationPoemBody": { - "type": "object", - "required": [ - "generationNo", - "generationText" - ], - "properties": { - "generationNo": { - "description": "世代序号", - "type": "integer", - "format": "int64", - "minimum": 1, - "maximum": 2147483647 - }, - "generationText": { - "description": "当前世代的字辈文字,最长50个字符", - "type": "string", - "maxLength": 50 - }, - "description": { - "description": "字辈说明,最长500个字符", - "type": "string", - "maxLength": 500 - }, - "sortOrder": { - "description": "排序值,数值越小越靠前", - "type": "integer", - "format": "int64", - "minimum": -2147483648, - "maximum": 2147483647 - }, - "status": { - "description": "状态,0正常,1停用", - "type": "string" - } - }, - "example": { - "generationNo": 5, - "generationText": "忠", - "description": "fifth generation poem", - "sortOrder": 5, - "status": "0" - } - }, - "ArticleBody": { - "type": "object", - "required": [ - "articleTitle", - "articleContent" - ], - "properties": { - "categoryId": { - "description": "分类ID", - "type": "integer", - "format": "int64" - }, - "articleTitle": { - "description": "文章标题", - "type": "string" - }, - "articleSummary": { - "description": "文章摘要", - "type": "string" - }, - "coverOssId": { - "description": "封面图片OSS ID", - "type": "integer", - "format": "int64" - }, - "articleContent": { - "description": "文章内容", - "type": "string" - }, - "authorName": { - "description": "作者名称", - "type": "string" - }, - "sortOrder": { - "description": "排序值,数值越小越靠前", - "type": "integer", - "format": "int64" - }, - "status": { - "description": "状态,建议使用对应字典值", - "type": "string" - } - }, - "example": { - "categoryId": 900040001, - "articleTitle": "族谱源流", - "articleSummary": "介绍本支源流", - "coverOssId": 2060000000000000000, - "articleContent": "article content
", - "authorName": "族谱管理员", - "sortOrder": 1, - "status": "0" - } - }, - "AlbumBody": { - "type": "object", - "required": [ - "albumName" - ], - "properties": { - "albumName": { - "description": "相册名称", - "type": "string" - }, - "albumDesc": { - "description": "相册说明", - "type": "string" - }, - "coverOssId": { - "description": "封面图片OSS ID", - "type": "integer", - "format": "int64" - }, - "sortOrder": { - "description": "排序值,数值越小越靠前", - "type": "integer", - "format": "int64" - }, - "status": { - "description": "状态,建议使用对应字典值", - "type": "string" - } - }, - "example": { - "albumName": "老照片", - "albumDesc": "family old photos", - "coverOssId": 2060000000000000000, - "sortOrder": 1, - "status": "0" - } - }, - "AlbumPhotoBody": { - "type": "object", - "required": [ - "ossId" - ], - "properties": { - "ossId": { - "description": "OSS文件ID,表单内部使用,用户侧应通过上传组件获取", - "type": "integer", - "format": "int64" - }, - "photoTitle": { - "description": "图片标题", - "type": "string" - }, - "photoDesc": { - "description": "图片说明", - "type": "string" - }, - "photographer": { - "description": "拍摄人", - "type": "string" - }, - "shootTime": { - "description": "拍摄时间", - "type": "string" - }, - "sortOrder": { - "description": "排序值,数值越小越靠前", - "type": "integer", - "format": "int64" - }, - "status": { - "description": "状态,建议使用对应字典值", - "type": "string" - } - }, - "example": { - "ossId": 2060000000000000000, - "photoTitle": "老宅合影", - "photoDesc": "old house photo", - "photographer": "彭小明", - "shootTime": "2026-07-09 10:00:00", - "sortOrder": 1, - "status": "0" - } - }, - "CeremonyBody": { - "type": "object", - "required": [ - "ceremonyType", - "ceremonyTitle" - ], - "properties": { - "ceremonyType": { - "description": "祭祀/活动类型", - "type": "string" - }, - "ceremonyTitle": { - "description": "祭祀/活动标题", - "type": "string" - }, - "ceremonyDesc": { - "description": "祭祀/活动说明", - "type": "string" - }, - "ceremonyTime": { - "description": "祭祀/活动时间", - "type": "string" - }, - "location": { - "description": "地点", - "type": "string" - }, - "coverOssId": { - "description": "封面图片OSS ID", - "type": "integer", - "format": "int64" - }, - "sortOrder": { - "description": "排序值,数值越小越靠前", - "type": "integer", - "format": "int64" - }, - "status": { - "description": "状态,建议使用对应字典值", - "type": "string" - } - }, - "example": { - "ceremonyType": "ancestor", - "ceremonyTitle": "清明祭祖", - "ceremonyDesc": "online ancestor ceremony", - "ceremonyTime": "2026-04-04 09:00:00", - "location": "祠堂", - "coverOssId": 2060000000000000000, - "sortOrder": 1, - "status": "0" - } - }, - "CeremonyGiftBody": { - "type": "object", - "required": [ - "giftAmount" - ], - "properties": { - "giverName": { - "description": "赠送人/献礼人姓名", - "type": "string" - }, - "giftAmount": { - "description": "礼物金额", - "type": "number", - "format": "double" - }, - "giftMessage": { - "description": "礼物留言", - "type": "string" - } - }, - "example": { - "giverName": "彭小明", - "giftAmount": 66.66, - "giftMessage": "缅怀先祖" - } - }, - "GrowthRecordBody": { - "type": "object", - "required": [ - "recordTitle" - ], - "properties": { - "lineagePersonId": { - "description": "绑定的世系人物ID", - "type": "integer", - "format": "int64" - }, - "recordType": { - "description": "记录类型", - "type": "string" - }, - "recordTitle": { - "description": "记录标题", - "type": "string" - }, - "recordContent": { - "description": "记录内容", - "type": "string" - }, - "recordDate": { - "description": "记录日期", - "type": "string" - }, - "remindTime": { - "description": "提醒时间", - "type": "string" - }, - "mediaOssIds": { - "description": "媒体文件 OSS ID 列表;多个正整数 ID 使用英文逗号分隔,禁止空项和其他字符", - "type": "string", - "pattern": "^$|^[1-9][0-9]*(,[1-9][0-9]*)*$" - }, - "sortOrder": { - "description": "排序值,数值越小越靠前", - "type": "integer", - "format": "int64" - }, - "status": { - "description": "状态,建议使用对应字典值", - "type": "string" - } - }, - "example": { - "lineagePersonId": 900020001, - "recordType": "birth", - "recordTitle": "出生记录", - "recordContent": "birth record", - "recordDate": "2026-07-09 10:00:00", - "remindTime": "2027-07-09 10:00:00", - "mediaOssIds": "2060000000000000001", - "sortOrder": 1, - "status": "0" - } - }, - "MemoBody": { - "type": "object", - "required": [ - "memoTitle" - ], - "properties": { - "memoTitle": { - "description": "备忘标题", - "type": "string" - }, - "memoContent": { - "description": "备忘内容", - "type": "string" - }, - "remindTime": { - "description": "提醒时间", - "type": "string" - }, - "completed": { - "description": "是否已完成", - "type": "string" - }, - "mediaOssIds": { - "description": "媒体文件 OSS ID 列表;多个正整数 ID 使用英文逗号分隔,禁止空项和其他字符", - "type": "string", - "pattern": "^$|^[1-9][0-9]*(,[1-9][0-9]*)*$" - }, - "sortOrder": { - "description": "排序值,数值越小越靠前", - "type": "integer", - "format": "int64" - }, - "status": { - "description": "状态,建议使用对应字典值", - "type": "string" - } - }, - "example": { - "memoTitle": "修谱事项", - "memoContent": "contact family members", - "remindTime": "2026-08-01 09:00:00", - "completed": "0", - "mediaOssIds": "2060000000000000001", - "sortOrder": 1, - "status": "0" - } - }, - "RelativeRecordBody": { - "type": "object", - "required": [ - "relativeName" - ], - "properties": { - "relativeName": { - "description": "亲友姓名", - "type": "string" - }, - "relationName": { - "description": "关系名称", - "type": "string" - }, - "eventName": { - "description": "事件名称", - "type": "string" - }, - "eventTime": { - "description": "事件时间", - "type": "string" - }, - "giftAmount": { - "description": "礼金金额", - "type": "number" - }, - "recordContent": { - "description": "记录内容", - "type": "string" - }, - "mediaOssIds": { - "description": "媒体文件 OSS ID 列表;多个正整数 ID 使用英文逗号分隔,禁止空项和其他字符", - "type": "string", - "pattern": "^$|^[1-9][0-9]*(,[1-9][0-9]*)*$" - }, - "sortOrder": { - "description": "排序值,数值越小越靠前", - "type": "integer", - "format": "int64" - }, - "status": { - "description": "状态,建议使用对应字典值", - "type": "string" - } - } - }, - "MeritRecordBody": { - "type": "object", - "required": [ - "donorName", - "meritTitle" - ], - "properties": { - "donorName": { - "description": "功德人/捐赠人姓名", - "type": "string" - }, - "meritType": { - "description": "功德类型", - "type": "string" - }, - "meritTitle": { - "description": "功德标题", - "type": "string" - }, - "meritContent": { - "description": "功德内容", - "type": "string" - }, - "amount": { - "description": "金额", - "type": "number", - "format": "double" - }, - "meritTime": { - "description": "功德时间", - "type": "string" - }, - "sortOrder": { - "description": "排序值,数值越小越靠前", - "type": "integer", - "format": "int64" - }, - "status": { - "description": "状态,建议使用对应字典值", - "type": "string" - } - }, - "example": { - "donorName": "彭小明", - "meritType": "donation", - "meritTitle": "修谱捐款", - "meritContent": "support genealogy work", - "amount": 100, - "meritTime": "2026-07-09 10:00:00", - "sortOrder": 1, - "status": "0" - } - }, - "FeedbackBody": { - "type": "object", - "required": [ - "feedbackContent" - ], - "properties": { - "feedbackType": { - "description": "反馈类型", - "type": "string" - }, - "feedbackContent": { - "description": "反馈内容", - "type": "string" - }, - "contactInfo": { - "description": "联系方式", - "type": "string" - } - }, - "example": { - "feedbackType": "bug", - "feedbackContent": "upload image failed", - "contactInfo": "13800000000" - } - }, - "VipOrderBody": { - "type": "object", - "required": [ - "packageId" - ], - "properties": { - "packageId": { - "description": "VIP套餐ID", - "type": "integer", - "format": "int64" - }, - "genealogyId": { - "description": "家谱ID", - "type": "integer", - "format": "int64" - }, - "payType": { - "description": "支付方式", - "type": "string" - } - }, - "example": { - "packageId": 900060001, - "genealogyId": 900001001, - "payType": "wechat" - } - }, - "VerificationChallengeBody": { - "type": "object", - "required": [ - "tenantId", - "clientId", - "sceneCode", - "subject" - ], - "properties": { - "tenantId": { - "type": "string", - "description": "租户 ID" - }, - "clientId": { - "type": "string", - "description": "客户端 ID" - }, - "sceneCode": { - "type": "string", - "description": "APP 短信场景编码", - "enum": [ - "APP_SMS_LOGIN", - "APP_REGISTER", - "APP_FORGOT_PASSWORD", - "APP_PHONE_CHANGE", - "APP_ACCOUNT_DEACTIVATE" - ] - }, - "subject": { - "type": "string", - "description": "验证主体,如手机号/用户名/IP" - } - }, - "example": { - "tenantId": "000000", - "clientId": "428a8310cd442757ae699df5d894f051", - "sceneCode": "APP_SMS_LOGIN", - "subject": "13800000000" - } - }, - "VerificationCheckBody": { - "type": "object", - "required": [ - "tenantId", - "clientId", - "sceneCode", - "subject", - "challengeId" - ], - "properties": { - "tenantId": { - "description": "租户ID,用于区分不同租户的数据和验证策略", - "type": "string" - }, - "clientId": { - "description": "客户端ID,对应后台客户端管理中的APP/PC/小程序等终端", - "type": "string" - }, - "sceneCode": { - "description": "APP 短信场景编码", - "type": "string", - "enum": [ - "APP_SMS_LOGIN", - "APP_REGISTER", - "APP_FORGOT_PASSWORD", - "APP_PHONE_CHANGE", - "APP_ACCOUNT_DEACTIVATE" - ] - }, - "subject": { - "description": "验证主体,通常为手机号、用户ID或登录账号", - "type": "string" - }, - "challengeId": { - "description": "验证挑战ID,由验证挑战接口返回", - "type": "string" - }, - "providerCode": { - "type": "string", - "description": "验证服务,tianai 或 ruoyi_image" - }, - "captchaType": { - "type": "string", - "description": "SLIDER/ROTATE/CONCAT/WORD_IMAGE_CLICK/math/char" - }, - "payload": { - "description": "验证结果载荷。天爱行为验证码提交 payload.track;系统图形验证码提交 payload.uuid 和 payload.code", - "oneOf": [ - { - "$ref": "#/components/schemas/TianaiVerificationPayload" - }, - { - "$ref": "#/components/schemas/SystemImageVerificationPayload" - } - ] - } - } - }, - "TianaiVerificationPayload": { - "type": "object", - "description": "将天爱 1.5.5 前端验证回调中的 data 原样放入 track;回调 id 不放入 payload,挑战标识统一提交顶层 challengeId", - "required": [ - "track" - ], - "properties": { - "track": { - "$ref": "#/components/schemas/TianaiCaptchaTrack" - } - } - }, - "TianaiCaptchaTrack": { - "type": "object", - "required": [ - "bgImageWidth", - "bgImageHeight", - "startTime", - "stopTime", - "trackList" - ], - "properties": { - "bgImageWidth": { - "type": "integer", - "description": "验证码背景图片在前端实际显示的宽度,单位像素" - }, - "bgImageHeight": { - "type": "integer", - "description": "验证码背景图片在前端实际显示的高度,单位像素" - }, - "templateImageWidth": { - "type": "integer", - "description": "滑块或旋转模板图片在前端实际显示的宽度,单位像素" - }, - "templateImageHeight": { - "type": "integer", - "description": "滑块或旋转模板图片在前端实际显示的高度,单位像素" - }, - "startTime": { - "type": "integer", - "format": "int64", - "description": "用户开始操作的时间戳,单位毫秒" - }, - "stopTime": { - "type": "integer", - "format": "int64", - "description": "用户结束操作的时间戳,单位毫秒" - }, - "left": { - "type": "integer", - "description": "滑块最终水平偏移量,单位像素;由天爱前端控件生成" - }, - "top": { - "type": "integer", - "description": "点选或模板最终垂直偏移量,单位像素;由天爱前端控件生成" - }, - "trackList": { - "type": "array", - "minItems": 1, - "description": "用户操作轨迹,不能为空,必须直接使用天爱前端控件产生的数据", - "items": { - "$ref": "#/components/schemas/TianaiCaptchaTrackPoint" - } - }, - "data": { - "type": "object", - "additionalProperties": true, - "description": "不同验证码类型附带的扩展数据,由天爱前端控件原样提交", - "properties": {}, - "nullable": true - } - } - }, - "TianaiCaptchaTrackPoint": { - "type": "object", - "required": [ - "x", - "y", - "t", - "type" - ], - "properties": { - "x": { - "type": "number", - "format": "float", - "description": "当前轨迹点的水平坐标" - }, - "y": { - "type": "number", - "format": "float", - "description": "当前轨迹点的垂直坐标" - }, - "t": { - "type": "number", - "format": "float", - "description": "当前轨迹点相对操作开始时的时间,单位毫秒" - }, - "type": { - "type": "string", - "description": "轨迹事件类型,例如 down、move、up" - } - } - }, - "SystemImageVerificationPayload": { - "type": "object", - "required": [ - "uuid", - "code" - ], - "properties": { - "uuid": { - "type": "string", - "description": "系统图形验证码接口返回的唯一标识" - }, - "code": { - "type": "string", - "description": "用户填写的图形验证码答案" - } - } - }, - "RObject": { - "type": "object", - "properties": { - "code": { - "description": "系统图形验证码或响应状态码", - "type": "integer", - "example": 200 - }, - "msg": { - "description": "响应消息", - "type": "string", - "example": "操作成功" - }, - "data": { - "description": "响应数据主体", - "type": "object", - "additionalProperties": true, - "properties": {} - } - } - }, - "RList": { - "type": "object", - "properties": { - "code": { - "description": "系统图形验证码或响应状态码", - "type": "integer", - "example": 200 - }, - "msg": { - "description": "响应消息", - "type": "string", - "example": "操作成功" - }, - "data": { - "description": "响应数据主体", - "type": "array", - "items": { - "type": "object", - "additionalProperties": true, - "properties": {} - } - } - } - }, - "PageResult": { - "type": "object", - "properties": { - "code": { - "description": "系统图形验证码或响应状态码", - "type": "integer", - "example": 200 - }, - "msg": { - "description": "响应消息", - "type": "string", - "example": "操作成功" - }, - "rows": { - "description": "分页数据列表", - "type": "array", - "items": { - "type": "object", - "additionalProperties": true, - "properties": {} - } - }, - "total": { - "type": "integer", - "example": 0 - } - } - }, - "RLogin": { - "type": "object", - "properties": { - "code": { - "description": "系统图形验证码或响应状态码", - "type": "integer", - "example": 200 - }, - "msg": { - "description": "响应消息", - "type": "string", - "example": "操作成功" - }, - "data": { - "description": "响应数据主体", - "$ref": "#/components/schemas/LoginVo" - } - } - }, - "LoginVo": { - "type": "object", - "properties": { - "token": { - "type": "string" - }, - "accessToken": { - "type": "string" - }, - "tokenValue": { - "type": "string" - }, - "userId": { - "type": "integer", - "format": "int64" - }, - "tenantId": { - "description": "租户ID,用于区分不同租户的数据和验证策略", - "type": "string" - }, - "clientId": { - "description": "客户端ID,对应后台客户端管理中的APP/PC/小程序等终端", - "type": "string" - }, - "clientKey": { - "type": "string" - } - } - }, - "RFileUpload": { - "type": "object", - "properties": { - "code": { - "description": "系统图形验证码或响应状态码", - "type": "integer", - "example": 200 - }, - "msg": { - "description": "响应消息", - "type": "string", - "example": "操作成功" - }, - "data": { - "description": "响应数据主体", - "$ref": "#/components/schemas/FileUploadVo" - } - } - }, - "FileUploadVo": { - "type": "object", - "properties": { - "ossId": { - "description": "OSS文件ID,表单内部使用,用户侧应通过上传组件获取", - "type": "integer", - "format": "int64" - }, - "url": { - "type": "string" - }, - "thumbnailUrl": { - "type": "string", - "nullable": true - }, - "fileName": { - "description": "原始文件名", - "type": "string" - }, - "originalName": { - "type": "string" - } - } - }, - "RVerificationRequire": { - "type": "object", - "properties": { - "code": { - "description": "系统图形验证码或响应状态码", - "type": "integer", - "example": 200 - }, - "msg": { - "description": "响应消息", - "type": "string", - "example": "操作成功" - }, - "data": { - "description": "响应数据主体", - "$ref": "#/components/schemas/VerificationRequireVo" - } - } - }, - "VerificationRequireVo": { - "type": "object", - "properties": { - "required": { - "description": "当前场景是否需要验证", - "type": "boolean" - }, - "providerCode": { - "description": "第三方服务商编码", - "type": "string" - }, - "captchaType": { - "description": "验证码类型,例如SLIDER、ROTATE、CONCAT、WORD_IMAGE_CLICK", - "type": "string" - }, - "sceneCode": { - "description": "APP 短信场景编码", - "type": "string", - "enum": [ - "APP_SMS_LOGIN", - "APP_REGISTER", - "APP_FORGOT_PASSWORD", - "APP_PHONE_CHANGE", - "APP_ACCOUNT_DEACTIVATE" - ] - }, - "ttlSeconds": { - "description": "验证或票据有效秒数", - "type": "integer" - } - }, - "example": { - "required": true, - "providerCode": "tianai", - "captchaType": "SLIDER", - "sceneCode": "APP_SMS_LOGIN", - "ttlSeconds": 300 - } - }, - "RVerificationChallenge": { - "type": "object", - "properties": { - "code": { - "description": "系统图形验证码或响应状态码", - "type": "integer", - "example": 200 - }, - "msg": { - "description": "响应消息", - "type": "string", - "example": "操作成功" - }, - "data": { - "description": "响应数据主体", - "$ref": "#/components/schemas/VerificationChallengeVo" - } - } - }, - "VerificationChallengeVo": { - "type": "object", - "properties": { - "required": { - "description": "当前场景是否需要验证", - "type": "boolean" - }, - "providerCode": { - "description": "第三方服务商编码", - "type": "string" - }, - "captchaType": { - "description": "验证码类型,例如SLIDER、ROTATE、CONCAT、WORD_IMAGE_CLICK", - "type": "string" - }, - "challengeId": { - "description": "验证挑战ID,由验证挑战接口返回", - "type": "string" - }, - "uuid": { - "type": "string", - "description": "系统图形验证码 uuid" - }, - "img": { - "type": "string", - "description": "系统图形验证码 base64 图片" - }, - "payload": { - "type": "object", - "additionalProperties": true, - "description": "天爱验证码数据,包括背景图、模板图、尺寸等", - "properties": {} - }, - "expireSeconds": { - "description": "验证挑战过期秒数", - "type": "integer" - } - }, - "example": { - "required": true, - "providerCode": "tianai", - "captchaType": "SLIDER", - "challengeId": "CAPTCHA_CHALLENGE_ID", - "payload": { - "backgroundImage": "data:image/png;base64,...", - "templateImage": "data:image/png;base64,...", - "backgroundImageWidth": 340, - "backgroundImageHeight": 180 - }, - "expireSeconds": 300 - } - }, - "RVerificationCheck": { - "type": "object", - "properties": { - "code": { - "description": "系统图形验证码或响应状态码", - "type": "integer", - "example": 200 - }, - "msg": { - "description": "响应消息", - "type": "string", - "example": "操作成功" - }, - "data": { - "description": "响应数据主体", - "$ref": "#/components/schemas/VerificationCheckVo" - } - } - }, - "VerificationCheckVo": { - "type": "object", - "properties": { - "passed": { - "description": "验证是否通过", - "type": "boolean" - }, - "validToken": { - "type": "string", - "description": "验证通过后交给发送短信验证码接口的票据" - }, - "expireSeconds": { - "description": "验证挑战过期秒数", - "type": "integer" - }, - "message": { - "description": "返回消息", - "type": "string" - } - }, - "example": { - "passed": true, - "validToken": "captcha-ticket", - "expireSeconds": 300, - "message": "验证通过" - } - }, - "RLegacyCaptcha": { - "type": "object", - "properties": { - "code": { - "description": "系统图形验证码或响应状态码", - "type": "integer", - "example": 200 - }, - "msg": { - "description": "响应消息", - "type": "string", - "example": "操作成功" - }, - "data": { - "description": "响应数据主体", - "$ref": "#/components/schemas/LegacyCaptchaVo" - } - } - }, - "LegacyCaptchaVo": { - "type": "object", - "properties": { - "captchaEnabled": { - "type": "boolean" - }, - "uuid": { - "description": "系统图形验证码UUID", - "type": "string" - }, - "img": { - "type": "string", - "description": "base64 图形验证码" - } - }, - "example": { - "captchaEnabled": true, - "uuid": "captcha-uuid", - "img": "data:image/png;base64,..." - } - }, - "RGenerationPoem": { - "type": "object", - "properties": { - "code": { - "description": "响应状态码", - "type": "integer", - "example": 200 - }, - "msg": { - "description": "响应消息", - "type": "string" - }, - "data": { - "$ref": "#/components/schemas/GenerationPoemView" - } - } - }, - "GenerationPoemView": { - "type": "object", - "properties": { - "poemId": { - "description": "字辈记录ID", - "type": "integer", - "format": "int64" - }, - "genealogyId": { - "description": "所属家谱ID", - "type": "integer", - "format": "int64" - }, - "genealogyNo": { - "description": "家谱编号", - "type": "string" - }, - "genealogyName": { - "description": "家谱名称", - "type": "string" - }, - "generationNo": { - "description": "世代序号", - "type": "integer", - "format": "int64" - }, - "generationText": { - "description": "字辈文字", - "type": "string" - }, - "description": { - "description": "字辈说明", - "type": "string" - }, - "sortOrder": { - "description": "排序值,数值越小越靠前", - "type": "integer", - "format": "int64" - }, - "status": { - "description": "状态,0正常,1停用", - "type": "string" - } - } - }, - "RGenerationPoemList": { - "type": "object", - "properties": { - "code": { - "description": "响应状态码", - "type": "integer", - "example": 200 - }, - "msg": { - "description": "响应消息", - "type": "string" - }, - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/GenerationPoemView" - } - } - } - }, - "RGenerationPoemBatchPreview": { - "type": "object", - "properties": { - "code": { - "description": "响应状态码", - "type": "integer", - "example": 200 - }, - "msg": { - "description": "响应消息", - "type": "string" - }, - "data": { - "$ref": "#/components/schemas/GenerationPoemBatchPreviewView" - } - } - }, - "GenerationPoemBatchPreviewView": { - "type": "object", - "properties": { - "genealogyId": { - "description": "所属家谱ID", - "type": "integer", - "format": "int64" - }, - "genealogyNo": { - "description": "家谱编号", - "type": "string" - }, - "genealogyName": { - "description": "家谱名称", - "type": "string" - }, - "createCount": { - "description": "将新增的字辈数量", - "type": "integer" - }, - "updateCount": { - "description": "将修改或恢复的字辈数量", - "type": "integer" - }, - "keepCount": { - "description": "保持不变的字辈数量", - "type": "integer" - }, - "disableCount": { - "description": "将停用的字辈数量", - "type": "integer" - }, - "items": { - "description": "按世代排序的逐项变更预览", - "type": "array", - "items": { - "$ref": "#/components/schemas/GenerationPoemBatchItemView" - } - } - } - }, - "GenerationPoemBatchItemView": { - "type": "object", - "properties": { - "poemId": { - "description": "现有字辈记录ID;新增时为空", - "type": "integer", - "format": "int64" - }, - "generationNo": { - "description": "世代序号", - "type": "integer", - "format": "int64" - }, - "oldGenerationText": { - "description": "保存前字辈文字", - "type": "string" - }, - "newGenerationText": { - "description": "保存后字辈文字", - "type": "string" - }, - "oldStatus": { - "description": "保存前状态", - "type": "string" - }, - "newStatus": { - "description": "保存后状态", - "type": "string" - }, - "action": { - "description": "预览动作,create、update、keep 或 disable", - "type": "string" - }, - "warning": { - "description": "需要用户确认的变更提示", - "type": "string" - } - } - }, - "RLineagePerson": { - "type": "object", - "properties": { - "code": { - "description": "响应状态码", - "type": "integer", - "example": 200 - }, - "msg": { - "description": "响应消息", - "type": "string", - "example": "操作成功" - }, - "data": { - "$ref": "#/components/schemas/LineagePersonView" - } - } - }, - "LineagePersonView": { - "type": "object", - "properties": { - "personId": { - "description": "人物ID", - "type": "integer", - "format": "int64" - }, - "genealogyId": { - "description": "家谱ID", - "type": "integer", - "format": "int64" - }, - "genealogyName": { - "description": "家谱名称", - "type": "string" - }, - "genealogyNo": { - "description": "家谱编号", - "type": "string" - }, - "appUserId": { - "description": "绑定业务用户ID", - "type": "integer", - "format": "int64", - "nullable": true - }, - "appUserNickName": { - "description": "绑定业务用户昵称", - "type": "string" - }, - "personNo": { - "description": "人物编号", - "type": "string" - }, - "name": { - "description": "姓名", - "type": "string" - }, - "aliasName": { - "description": "别名或曾用名", - "type": "string" - }, - "sex": { - "description": "性别字典值", - "type": "string" - }, - "generation": { - "description": "世代序号", - "type": "integer", - "format": "int64" - }, - "generationName": { - "description": "字辈或辈分", - "type": "string" - }, - "fatherId": { - "description": "父亲人物ID", - "type": "integer", - "format": "int64", - "nullable": true - }, - "fatherName": { - "description": "父亲姓名", - "type": "string" - }, - "motherId": { - "description": "母亲人物ID", - "type": "integer", - "format": "int64", - "nullable": true - }, - "motherName": { - "description": "母亲姓名", - "type": "string" - }, - "spouseNames": { - "description": "配偶姓名,多个使用顿号分隔", - "type": "string" - }, - "avatarOssId": { - "description": "头像文件OSS ID", - "type": "integer", - "format": "int64", - "nullable": true - }, - "birthDate": { - "description": "出生日期", - "type": "string", - "format": "date-time", - "nullable": true - }, - "birthLunar": { - "description": "生日是否农历字典值", - "type": "string" - }, - "birthPlace": { - "description": "出生地", - "type": "string" - }, - "deathDate": { - "description": "逝世日期", - "type": "string", - "format": "date-time", - "nullable": true - }, - "deathLunar": { - "description": "逝世日期是否农历字典值", - "type": "string" - }, - "deathPlace": { - "description": "逝世地", - "type": "string" - }, - "burialPlace": { - "description": "安葬地", - "type": "string" - }, - "personStatus": { - "description": "人物状态字典值", - "type": "string" - }, - "biography": { - "description": "人物简介", - "type": "string" - }, - "sortOrder": { - "description": "排序值", - "type": "integer", - "format": "int64" - }, - "status": { - "description": "数据状态,0正常、1停用", - "type": "string" - }, - "remark": { - "description": "备注", - "type": "string" - } - } - }, - "RLineagePersonList": { - "type": "object", - "properties": { - "code": { - "description": "响应状态码", - "type": "integer", - "example": 200 - }, - "msg": { - "description": "响应消息", - "type": "string", - "example": "操作成功" - }, - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/LineagePersonView" - } - } - } - }, - "RLineagePersonTreeList": { - "type": "object", - "properties": { - "code": { - "description": "响应状态码", - "type": "integer", - "example": 200 - }, - "msg": { - "description": "响应消息", - "type": "string", - "example": "操作成功" - }, - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/LineagePersonTreeView" - } - } - } - }, - "LineagePersonTreeView": { - "allOf": [ - { - "$ref": "#/components/schemas/LineagePersonView" - }, - { - "type": "object", - "properties": { - "relationType": { - "description": "与当前树节点的关系类型", - "type": "string" - }, - "relationName": { - "description": "关系显示名称", - "type": "string" - }, - "spouses": { - "description": "配偶节点", - "type": "array", - "items": { - "$ref": "#/components/schemas/LineagePersonTreeView" - } - }, - "children": { - "description": "子女节点", - "type": "array", - "items": { - "$ref": "#/components/schemas/LineagePersonTreeView" - } - } - } - } - ] - }, - "LineagePersonPageResult": { - "type": "object", - "properties": { - "code": { - "description": "响应状态码", - "type": "integer", - "example": 200 - }, - "msg": { - "description": "响应消息", - "type": "string", - "example": "操作成功" - }, - "rows": { - "description": "当前页世系人物", - "type": "array", - "items": { - "$ref": "#/components/schemas/LineagePersonView" - } - }, - "total": { - "description": "总记录数", - "type": "integer", - "format": "int64", - "example": 0 - } - } - }, - "RFamilyFeedComment": { - "type": "object", - "properties": { - "code": { - "description": "响应状态码", - "type": "integer", - "example": 200 - }, - "msg": { - "description": "响应消息", - "type": "string" - }, - "data": { - "$ref": "#/components/schemas/FamilyFeedCommentView" - } - } - }, - "FamilyFeedCommentView": { - "type": "object", - "properties": { - "commentId": { - "description": "评论 ID", - "type": "integer", - "format": "int64" - }, - "genealogyId": { - "description": "所属家谱 ID", - "type": "integer", - "format": "int64" - }, - "feedId": { - "description": "所属动态 ID", - "type": "integer", - "format": "int64" - }, - "parentCommentId": { - "description": "父评论 ID;null 或 0 表示一级评论", - "type": "integer", - "format": "int64", - "nullable": true - }, - "appUserId": { - "description": "评论业务用户 ID", - "type": "integer", - "format": "int64" - }, - "appUserNickName": { - "description": "评论人昵称", - "type": "string" - }, - "appUserAvatar": { - "description": "评论人头像文件 ID", - "type": "integer", - "format": "int64", - "nullable": true - }, - "parentAppUserId": { - "description": "被直接回复的业务用户 ID", - "type": "integer", - "format": "int64", - "nullable": true - }, - "parentAppUserNickName": { - "description": "被直接回复的用户昵称", - "type": "string", - "nullable": true - }, - "commentContent": { - "description": "评论内容;作者删除后为 null", - "type": "string", - "nullable": true - }, - "userDeleted": { - "description": "作者删除状态,0 未删除,1 已删除并保留占位", - "type": "string", - "enum": [ - "0", - "1" - ], - "example": "0" - }, - "replyCount": { - "description": "正常展示的直接回复数量", - "type": "integer", - "format": "int64" - }, - "commentLevel": { - "description": "评论层级,root 为一级评论,reply 为回复", - "type": "string", - "enum": [ - "root", - "reply" - ] - }, - "status": { - "description": "可见状态;会员接口仅返回 0(正常展示)", - "type": "string", - "example": "0" - }, - "createTime": { - "description": "评论发布时间", - "type": "string", - "format": "date-time" - } - } - }, - "RFamilyFeedCommentList": { - "type": "object", - "properties": { - "code": { - "description": "响应状态码", - "type": "integer", - "example": 200 - }, - "msg": { - "description": "响应消息", - "type": "string" - }, - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FamilyFeedCommentView" - } - } - } - }, - "FamilyFeedCommentPageResult": { - "type": "object", - "properties": { - "code": { - "description": "响应状态码", - "type": "integer", - "example": 200 - }, - "msg": { - "description": "响应消息", - "type": "string" - }, - "rows": { - "description": "评论分页数据", - "type": "array", - "items": { - "$ref": "#/components/schemas/FamilyFeedCommentView" - } - }, - "total": { - "description": "评论总数", - "type": "integer", - "format": "int64" - } - } - } - }, - "responses": { - "VoidResult": { - "description": "通用成功响应", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RVoid" - } - } - } - }, - "ObjectResult": { - "description": "通用对象响应", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RObject" - } - } - } - }, - "ListResult": { - "description": "通用列表响应", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RList" - } - } - } - }, - "PageResult": { - "description": "通用分页响应", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PageResult" - } - } - } - }, - "LoginResult": { - "description": "登录结果", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RLogin" - } - } - } - }, - "FileUploadResult": { - "description": "文件上传结果", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RFileUpload" - } - } - } - }, - "VerificationRequireResult": { - "description": "验证需求查询结果", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RVerificationRequire" - } - } - } - }, - "VerificationChallengeResult": { - "description": "验证挑战生成结果", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RVerificationChallenge" - } - } - } - }, - "VerificationCheckResult": { - "description": "验证校验结果", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RVerificationCheck" - } - } - } - }, - "LegacyCaptchaResult": { - "description": "兼容旧图形验证码结果", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RLegacyCaptcha" - } - } - } - }, - "GenerationPoemResult": { - "description": "字辈详情响应", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RGenerationPoem" - } - } - } - }, - "GenerationPoemListResult": { - "description": "字辈列表响应", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RGenerationPoemList" - } - } - } - }, - "GenerationPoemBatchPreviewResult": { - "description": "字辈批量预览响应", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RGenerationPoemBatchPreview" - } - } - } - }, - "LineagePersonResult": { - "description": "世系人物详情响应", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RLineagePerson" - } - } - } - }, - "LineagePersonListResult": { - "description": "世系人物列表或选项响应", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RLineagePersonList" - } - } - } - }, - "LineagePersonTreeResult": { - "description": "世系树响应", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RLineagePersonTreeList" - } - } - } - }, - "LineagePersonPageResult": { - "description": "世系人物分页响应", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LineagePersonPageResult" - } - } - } - }, - "FamilyFeedCommentResult": { - "description": "家族圈评论对象响应", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RFamilyFeedComment" - } - } - } - }, - "FamilyFeedCommentListResult": { - "description": "家族圈评论列表响应", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RFamilyFeedCommentList" - } - } - } - }, - "FamilyFeedCommentPageResult": { - "description": "家族圈评论分页响应", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FamilyFeedCommentPageResult" - } - } - } - } - }, - "securitySchemes": { - "SaToken": { - "type": "apiKey", - "in": "header", - "name": "Authorization", - "description": "登录后返回的 token。若本地配置使用 sa-token 名称,请按项目实际 token-name 调整。" - } - } - }, - "servers": [], - "security": [ - { - "SaToken": [] - } - ] -} \ No newline at end of file diff --git a/APP.openapi.yaml b/APP.openapi.yaml deleted file mode 100644 index b666a5a..0000000 --- a/APP.openapi.yaml +++ /dev/null @@ -1,7932 +0,0 @@ -openapi: 3.0.1 -info: - title: APP - description: | - 家谱业务 APP/PC 用户侧接口文档,用于 Apifox 导入。 - - 导入方式:Apifox -> 导入 API 数据 -> OpenAPI/Swagger -> 选择本文件。 - - 约定: - - APP 路径前缀为 `/genealogy/app` - - PC/H5 路径前缀为 `/genealogy/pc` - - 后台管理接口不包含在本文件内 - - 登录后接口需要携带 token,且请求 Header 需携带 `clientid` - version: 1.0.0 -tags: - - name: 验证中心 - - name: 认证登录 - - name: 文件上传 - - name: 行政区划 - - name: 家谱 - - name: 家谱成员 - - name: 字辈谱 - - name: 世系人物 - - name: 家族圈 - - name: 内容文章 - - name: 相册 - - name: 祭祀 - - name: 族务记录 - - name: 消息通知 - - name: 意见反馈 - - name: VIP - - name: 视频 -paths: - /captcha/require: - get: - summary: 查询当前场景是否需要验证 - deprecated: false - description: 用于登录、注册、换绑手机等场景。按租户、客户端和场景编码匹配后台验证策略。 - tags: - - 验证中心 - parameters: - - name: tenantId - in: query - description: 租户ID,用于区分不同租户的数据和验证策略 - required: false - example: '000000' - schema: - type: string - - name: clientId - in: query - description: 客户端ID,对应后台客户端管理中的APP/PC/小程序等终端 - required: false - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - - name: sceneCode - in: query - description: APP 短信场景编码,例如APP_SMS_LOGIN、APP_REGISTER - required: true - example: APP_SMS_LOGIN - schema: - type: string - - name: subject - in: query - description: 验证主体,通常为手机号、用户ID或登录账号 - required: false - example: '13800000000' - schema: - type: string - - name: clientid - in: header - description: 客户端ID - example: ced7e5f0498645c6ec642dcf450b036f - schema: - type: string - default: ced7e5f0498645c6ec642dcf450b036f - responses: - '200': - $ref: '#/components/responses/VerificationRequireResult' - description: 验证需求查询结果 - security: - - SaToken: [] - /captcha/challenge: - post: - summary: 生成验证挑战 - deprecated: false - description: >- - 统一生成验证码。tenantId、clientId、sceneCode、subject - 必须完整提交;挑战仅可由同一租户、客户端、场景、主体和请求 IP 校验。策略为天爱时返回行为验证数据;策略为系统图形时返回 uuid 和 - img。 - tags: - - 验证中心 - parameters: - - name: clientid - in: header - description: 客户端ID - example: ced7e5f0498645c6ec642dcf450b036f - schema: - type: string - default: ced7e5f0498645c6ec642dcf450b036f - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/VerificationChallengeBody' - example: - tenantId: '000000' - clientId: 428a8310cd442757ae699df5d894f051 - sceneCode: APP_SMS_LOGIN - subject: '13800000000' - required: true - responses: - '200': - $ref: '#/components/responses/VerificationChallengeResult' - description: 验证挑战生成结果 - security: - - SaToken: [] - /captcha/verify: - post: - summary: 校验验证结果并换取 validToken - deprecated: false - description: >- - 必须提交生成挑战时相同的 tenantId、clientId、sceneCode、subject 和 challengeId。验证通过后返回 - validToken;该票据仅随发送短信验证码接口一起提交,由发送入口单次消费。 - tags: - - 验证中心 - parameters: - - name: clientid - in: header - description: 客户端ID - example: ced7e5f0498645c6ec642dcf450b036f - schema: - type: string - default: ced7e5f0498645c6ec642dcf450b036f - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/VerificationCheckBody' - examples: - tianai_behavior: - value: - tenantId: '000000' - clientId: 428a8310cd442757ae699df5d894f051 - sceneCode: APP_SMS_LOGIN - subject: '13800000000' - challengeId: CAPTCHA_CHALLENGE_ID - providerCode: tianai - captchaType: SLIDER - payload: - track: - bgImageWidth: 340 - bgImageHeight: 180 - templateImageWidth: 50 - templateImageHeight: 50 - startTime: 1720000000000 - stopTime: 1720000001500 - left: 120 - top: 0 - trackList: - - x: 0 - 'y': 0 - t: 0 - type: down - - x: 120 - 'y': 0 - t: 650 - type: move - - x: 120 - 'y': 0 - t: 700 - type: up - summary: 天爱滑块/旋转/滑动还原/文字点选验证 - system_image: - value: - tenantId: '000000' - clientId: 428a8310cd442757ae699df5d894f051 - sceneCode: APP_SMS_LOGIN - subject: '13800000000' - challengeId: CAPTCHA_CHALLENGE_ID - providerCode: ruoyi_image - captchaType: math - payload: - uuid: captcha-uuid - code: '6' - summary: 系统图形验证码 - required: true - responses: - '200': - $ref: '#/components/responses/VerificationCheckResult' - description: 验证校验结果 - security: - - SaToken: [] - /auth/code: - get: - summary: 兼容旧系统图形验证码 - deprecated: false - description: >- - 老版后台登录图形验证码入口。新的 APP/PC 业务优先使用 /captcha/require + /captcha/challenge + - /captcha/verify。 - tags: - - 验证中心 - parameters: - - name: clientid - in: header - description: 客户端ID - example: ced7e5f0498645c6ec642dcf450b036f - schema: - type: string - default: ced7e5f0498645c6ec642dcf450b036f - responses: - '200': - $ref: '#/components/responses/LegacyCaptchaResult' - description: 兼容旧图形验证码结果 - security: - - SaToken: [] - /genealogy/app/auth/register: - post: - summary: APP 用户注册 - deprecated: false - description: '' - tags: - - 认证登录 - parameters: - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/PasswordRegisterBody' - example: - grantType: password - tenantId: '000000' - phone: '13800000000' - password: e10adc3949ba59abbe56e057f20f883e - nickName: 测试用户 - registerSource: app - smsCode: '1234' - required: true - responses: - '200': - $ref: '#/components/responses/LoginResult' - description: 登录结果 - '400': - $ref: '#/components/responses/LoginResult' - description: >- - 短信验证码必须为 4 位数字;验证码错误、过期、重复使用,或租户、客户端、场景不匹配时拒绝;携带 - validToken、code、uuid、供应商配置等旧字段返回 HTTP 400。 - headers: {} - security: - - SaToken: [] - /genealogy/app/auth/login: - post: - summary: APP 密码登录 - deprecated: false - description: '' - tags: - - 认证登录 - parameters: - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/PasswordLoginBody' - example: - grantType: password - tenantId: '000000' - phone: '13800000000' - password: e10adc3949ba59abbe56e057f20f883e - required: true - responses: - '200': - $ref: '#/components/responses/LoginResult' - description: 登录结果 - '400': - $ref: '#/components/responses/LoginResult' - description: 密码登录仅接收租户、客户端、手机号和密码;不需要短信验证码或行为验证票据,携带验证码及其他未知旧字段返回 HTTP 400。 - headers: {} - security: - - SaToken: [] - /genealogy/app/auth/login/sms: - post: - summary: APP 短信登录 - deprecated: false - description: '' - tags: - - 认证登录 - parameters: - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/SmsLoginBody' - example: - grantType: sms - tenantId: '000000' - phone: '13800000000' - smsCode: '1234' - required: true - responses: - '200': - $ref: '#/components/responses/LoginResult' - description: 登录结果 - '400': - $ref: '#/components/responses/LoginResult' - description: >- - 短信验证码必须为 4 位数字;验证码错误、过期、重复使用,或租户、客户端、场景不匹配时拒绝;携带 - validToken、code、uuid、供应商配置等旧字段返回 HTTP 400。 - headers: {} - security: - - SaToken: [] - /genealogy/app/auth/sms/code: - post: - summary: APP 发送短信验证码 - deprecated: false - description: >- - 先完成验证中心校验,再提交 validToken。sceneCode 仅允许 - APP_SMS_LOGIN、APP_REGISTER、APP_FORGOT_PASSWORD、APP_PHONE_CHANGE、APP_ACCOUNT_DEACTIVATE;服务端按租户、APP - 客户端、场景和手机号主体校验票据,不接收短信供应商配置 ID。 - tags: - - 认证登录 - parameters: - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/SmsCodeBody' - example: - tenantId: '000000' - phone: '13800000000' - grantType: sms - sceneCode: APP_SMS_LOGIN - validToken: captcha-ticket - required: true - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - '400': - $ref: '#/components/responses/VoidResult' - description: >- - 拒绝原因:票据缺失;票据与租户不匹配(错租户);票据与客户端不匹配(错客户端);票据与场景不匹配(错场景);票据过期;票据已被使用(重复使用);手机号主体不匹配;请求携带供应商配置或历史字段。 - headers: {} - security: - - SaToken: [] - /genealogy/app/auth/profile: - get: - summary: APP 当前用户资料 - deprecated: false - description: '' - tags: - - 认证登录 - parameters: - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - put: - summary: APP 修改用户资料 - deprecated: false - description: '' - tags: - - 认证登录 - parameters: - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/ProfileUpdateBody' - example: - nickName: 张三 - avatarOssId: '2060000000000000000' - sex: '0' - birthday: '1990-01-01' - regionCode: '110101' - addressDetail: 北京市东城区 - required: true - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - /genealogy/app/auth/password: - put: - summary: APP 修改密码 - deprecated: false - description: '' - tags: - - 认证登录 - parameters: - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/PasswordChangeBody' - example: - oldPassword: e10adc3949ba59abbe56e057f20f883e - newPassword: 25d55ad283aa400af464c76d713c07ad - required: true - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - security: - - SaToken: [] - /genealogy/app/auth/password/reset: - put: - summary: APP 找回密码 - deprecated: false - description: '' - tags: - - 认证登录 - parameters: - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/PasswordResetBody' - example: - grantType: password - tenantId: '000000' - phone: '13800000000' - smsCode: '1234' - newPassword: 25d55ad283aa400af464c76d713c07ad - required: true - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - '400': - $ref: '#/components/responses/VoidResult' - description: >- - 短信验证码必须为 4 位数字;验证码错误、过期、重复使用,或租户、客户端、场景不匹配时拒绝;携带 - validToken、code、uuid、供应商配置等旧字段返回 HTTP 400。 - headers: {} - security: - - SaToken: [] - /genealogy/app/auth/phone: - put: - summary: APP 换绑手机号 - deprecated: false - description: '' - tags: - - 认证登录 - parameters: - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/PhoneChangeBody' - example: - clientId: 428a8310cd442757ae699df5d894f051 - phone: '13900000000' - smsCode: '1234' - required: true - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - '400': - $ref: '#/components/responses/ObjectResult' - description: >- - 短信验证码必须为 4 位数字;验证码错误、过期、重复使用,或租户、客户端、场景不匹配时拒绝;携带 - validToken、code、uuid、供应商配置等旧字段返回 HTTP 400。 - headers: {} - security: - - SaToken: [] - /genealogy/app/auth/account/deactivate: - post: - summary: APP 注销账号 - deprecated: false - description: '' - tags: - - 认证登录 - parameters: - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AccountDeactivateBody' - example: - clientId: 428a8310cd442757ae699df5d894f051 - smsCode: '1234' - required: true - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - '400': - $ref: '#/components/responses/VoidResult' - description: >- - 短信验证码必须为 4 位数字;验证码错误、过期、重复使用,或租户、客户端、场景不匹配时拒绝;携带 - validToken、code、uuid、供应商配置等旧字段返回 HTTP 400。 - headers: {} - security: - - SaToken: [] - /genealogy/app/auth/logout: - delete: - summary: APP 退出登录 - deprecated: false - description: '' - tags: - - 认证登录 - parameters: - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - security: - - SaToken: [] - /genealogy/pc/auth/register: - post: - summary: PC 用户注册 - deprecated: false - description: '' - tags: - - 认证登录 - parameters: - - name: clientid - in: header - description: '' - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/PasswordRegisterBody' - required: true - responses: - '200': - $ref: '#/components/responses/LoginResult' - description: 登录结果 - security: - - SaToken: [] - /genealogy/pc/auth/login: - post: - summary: PC 密码登录 - deprecated: false - description: '' - tags: - - 认证登录 - parameters: - - name: clientid - in: header - description: '' - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/PasswordLoginBody' - required: true - responses: - '200': - $ref: '#/components/responses/LoginResult' - description: 登录结果 - security: - - SaToken: [] - /genealogy/pc/auth/login/sms: - post: - summary: PC 短信登录 - deprecated: false - description: '' - tags: - - 认证登录 - parameters: - - name: clientid - in: header - description: '' - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/SmsLoginBody' - required: true - responses: - '200': - $ref: '#/components/responses/LoginResult' - description: 登录结果 - security: - - SaToken: [] - /genealogy/pc/auth/sms/code: - post: - summary: PC 发送短信验证码 - deprecated: false - description: '' - tags: - - 认证登录 - parameters: - - name: clientid - in: header - description: '' - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/SmsCodeBody' - required: true - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - security: - - SaToken: [] - /genealogy/pc/auth/profile: - get: - summary: PC 当前用户资料 - deprecated: false - description: '' - tags: - - 认证登录 - parameters: - - name: clientid - in: header - description: '' - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - put: - summary: PC 修改用户资料 - deprecated: false - description: '' - tags: - - 认证登录 - parameters: - - name: clientid - in: header - description: '' - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/ProfileUpdateBody' - required: true - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - /genealogy/pc/auth/password: - put: - summary: PC 修改密码 - deprecated: false - description: '' - tags: - - 认证登录 - parameters: - - name: clientid - in: header - description: '' - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/PasswordChangeBody' - required: true - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - security: - - SaToken: [] - /genealogy/pc/auth/password/reset: - put: - summary: PC 找回密码 - deprecated: false - description: '' - tags: - - 认证登录 - parameters: - - name: clientid - in: header - description: '' - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/PasswordResetBody' - required: true - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - security: - - SaToken: [] - /genealogy/pc/auth/phone: - put: - summary: PC 换绑手机号 - deprecated: false - description: '' - tags: - - 认证登录 - parameters: - - name: clientid - in: header - description: '' - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/PhoneChangeBody' - required: true - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - /genealogy/pc/auth/account/deactivate: - post: - summary: PC 注销账号 - deprecated: false - description: '' - tags: - - 认证登录 - parameters: - - name: clientid - in: header - description: '' - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AccountDeactivateBody' - required: true - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - security: - - SaToken: [] - /genealogy/pc/auth/logout: - delete: - summary: PC 退出登录 - deprecated: false - description: '' - tags: - - 认证登录 - parameters: - - name: clientid - in: header - description: '' - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - security: - - SaToken: [] - /genealogy/app/files/upload: - post: - summary: APP 单文件上传 - deprecated: false - description: '' - tags: - - 文件上传 - parameters: - - name: clientid - in: header - description: '' - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - multipart/form-data: - schema: - type: object - properties: - file: - type: string - format: binary - example: '' - required: - - file - example: - file: '' - required: true - responses: - '200': - $ref: '#/components/responses/FileUploadResult' - description: 文件上传结果 - security: - - SaToken: [] - /genealogy/app/files/resumable/init: - post: - summary: APP 分片上传初始化 - deprecated: false - description: 所有文件统一使用分片上传;普通小文件可设置为一个分片。返回 instant=true 时直接使用返回的 OSS 信息,跳过分片上传和合并。 - tags: - - 文件上传 - parameters: - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/ResumableInitBody' - example: - fileName: cover.jpg - fileSize: 9532 - fileMd5: d41d8cd98f00b204e9800998ecf8427e - contentType: image/jpeg - chunkSize: 4194304 - totalChunks: 1 - bizType: genealogy - usageScene: cover - required: true - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - /genealogy/app/files/resumable/chunk: - post: - summary: APP 上传分片 - deprecated: false - description: '' - tags: - - 文件上传 - parameters: - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - multipart/form-data: - schema: - type: object - properties: - uploadId: - type: string - example: '' - chunkIndex: - type: integer - example: 0 - chunkMd5: - type: string - example: d41d8cd98f00b204e9800998ecf8427e - file: - type: string - format: binary - example: '' - required: - - uploadId - - chunkIndex - - chunkMd5 - - file - example: - uploadId: '' - chunkIndex: 0 - chunkMd5: d41d8cd98f00b204e9800998ecf8427e - file: '' - required: true - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - security: - - SaToken: [] - /genealogy/app/files/resumable/complete: - post: - summary: APP 完成分片上传 - deprecated: false - description: '' - tags: - - 文件上传 - parameters: - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/ResumableCompleteBody' - example: - uploadId: UPLOAD202607090001 - fileMd5: d41d8cd98f00b204e9800998ecf8427e - fileSize: 9532 - required: true - responses: - '200': - $ref: '#/components/responses/FileUploadResult' - description: 文件上传结果 - security: - - SaToken: [] - /genealogy/app/files/reference: - post: - summary: APP 绑定文件业务引用 - deprecated: false - description: '' - tags: - - 文件上传 - parameters: - - name: clientid - in: header - description: 客户端ID,请求Header携带,用于区分APP/PC/小程序等终端 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/FileReferenceBody' - example: - bizType: family_feed - bizName: family feed image - bizTable: gen_family_feed - bizId: 900013001 - bizField: media_oss_ids - ossId: '2060000000000000000' - usageScene: feed_image - required: true - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - security: - - SaToken: [] - delete: - summary: APP 释放文件业务引用 - deprecated: false - description: '' - tags: - - 文件上传 - parameters: - - name: bizTable - in: query - description: 业务表名,用于文件引用绑定 - required: true - example: gen_family_feed - schema: - type: string - - name: bizId - in: query - description: 业务数据ID,用于文件引用绑定 - required: true - example: 900013001 - schema: - type: integer - format: int64 - - name: bizField - in: query - description: 业务字段名,例如avatar_oss_id、cover_oss_id - required: true - example: media_ids - schema: - type: string - - name: clientid - in: header - description: 客户端ID,请求Header携带,用于区分APP/PC/小程序等终端 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - security: - - SaToken: [] - /genealogy/pc/files/upload: - post: - summary: PC 单文件上传 - deprecated: false - description: '' - tags: - - 文件上传 - parameters: - - name: clientid - in: header - description: '' - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - multipart/form-data: - schema: - type: object - properties: - file: - type: string - format: binary - example: '' - required: - - file - example: - file: '' - required: true - responses: - '200': - $ref: '#/components/responses/FileUploadResult' - description: 文件上传结果 - security: - - SaToken: [] - /genealogy/pc/files/resumable/init: - post: - summary: PC 分片上传初始化 - deprecated: false - description: '' - tags: - - 文件上传 - parameters: - - name: clientid - in: header - description: '' - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/ResumableInitBody' - required: true - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - /genealogy/pc/files/resumable/chunk: - post: - summary: PC 上传分片 - deprecated: false - description: '' - tags: - - 文件上传 - parameters: - - name: clientid - in: header - description: '' - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - multipart/form-data: - schema: - type: object - properties: - uploadId: - type: string - example: '' - chunkIndex: - type: integer - example: 0 - chunkMd5: - type: string - example: d41d8cd98f00b204e9800998ecf8427e - file: - type: string - format: binary - example: '' - required: - - uploadId - - chunkIndex - - chunkMd5 - - file - example: - uploadId: '' - chunkIndex: 0 - chunkMd5: d41d8cd98f00b204e9800998ecf8427e - file: '' - required: true - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - security: - - SaToken: [] - /genealogy/pc/files/resumable/complete: - post: - summary: PC 完成分片上传 - deprecated: false - description: '' - tags: - - 文件上传 - parameters: - - name: clientid - in: header - description: '' - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/ResumableCompleteBody' - required: true - responses: - '200': - $ref: '#/components/responses/FileUploadResult' - description: 文件上传结果 - security: - - SaToken: [] - /genealogy/region/children: - get: - summary: 查询下级行政区划 - deprecated: false - description: '' - tags: - - 行政区划 - parameters: - - name: parentCode - in: query - description: 父级行政区划编码,不传或传0查省级 - required: false - example: '51' - schema: - type: string - - name: clientid - in: header - description: 客户端ID - example: ced7e5f0498645c6ec642dcf450b036f - schema: - type: string - default: ced7e5f0498645c6ec642dcf450b036f - responses: - '200': - $ref: '#/components/responses/ListResult' - description: 通用列表响应 - security: - - SaToken: [] - /genealogy/region/path/{regionCode}: - get: - summary: 查询行政区划路径 - deprecated: false - description: '' - tags: - - 行政区划 - parameters: - - name: regionCode - in: path - description: 行政区划编码 - required: true - example: '510000' - schema: - type: string - - name: clientid - in: header - description: 客户端ID - example: ced7e5f0498645c6ec642dcf450b036f - schema: - type: string - default: ced7e5f0498645c6ec642dcf450b036f - responses: - '200': - $ref: '#/components/responses/ListResult' - description: 通用列表响应 - security: - - SaToken: [] - /genealogy/region/search: - get: - summary: 搜索行政区划 - deprecated: false - description: '' - tags: - - 行政区划 - parameters: - - name: keyword - in: query - description: 搜索关键词,支持地区名称或编码模糊查询 - required: true - example: 北京 - schema: - type: string - - name: level - in: query - description: 行政区划级别,1省、2市、3区县、4乡镇街道、5村社区 - required: false - example: 3 - schema: - type: integer - - name: limit - in: query - description: 返回数量上限 - required: false - example: 20 - schema: - type: integer - - name: clientid - in: header - description: 客户端ID - example: ced7e5f0498645c6ec642dcf450b036f - schema: - type: string - default: ced7e5f0498645c6ec642dcf450b036f - responses: - '200': - $ref: '#/components/responses/ListResult' - description: 通用列表响应 - security: - - SaToken: [] - /genealogy/region/{regionCode}: - get: - summary: 查询行政区划详情 - deprecated: false - description: '' - tags: - - 行政区划 - parameters: - - name: regionCode - in: path - description: 行政区划编码 - required: true - example: '510000' - schema: - type: string - - name: clientid - in: header - description: 客户端ID - example: ced7e5f0498645c6ec642dcf450b036f - schema: - type: string - default: ced7e5f0498645c6ec642dcf450b036f - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - /genealogy/app/genealogies: - post: - summary: APP 创建家谱 - deprecated: false - description: '' - tags: - - 家谱 - parameters: - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/GenealogyCreateBody' - example: - genealogyName: 彭氏家谱 - surname: 彭 - ancestralHall: 陇西堂 - originPlace: 江西吉安 - regionCode: '360800' - addressDetail: 江西省吉安市 - coverOssId: '2060000000000000000' - intro: 彭氏家谱简介 - visibility: '1' - joinMode: '1' - required: true - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - /genealogy/app/genealogies/mine: - get: - summary: APP 我的家谱 - deprecated: false - description: '' - tags: - - 家谱 - parameters: - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/ListResult' - description: 通用列表响应 - security: - - SaToken: [] - /genealogy/app/genealogies/public: - get: - summary: APP 公开家谱 - deprecated: false - description: '' - tags: - - 家谱 - parameters: - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/ListResult' - description: 通用列表响应 - security: - - SaToken: [] - /genealogy/app/genealogies/options: - get: - summary: APP 家谱下拉选项 - deprecated: false - description: '' - tags: - - 家谱 - parameters: - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/ListResult' - description: 通用列表响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}: - get: - summary: APP 家谱详情 - deprecated: false - description: '' - tags: - - 家谱 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - put: - summary: APP 修改家谱 - deprecated: false - description: '' - tags: - - 家谱 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/GenealogyUpdateBody' - example: - genealogyName: 彭氏家谱 - surname: 彭 - ancestralHall: 陇西堂 - originPlace: 江西吉安 - regionCode: '360800' - addressDetail: 江西省吉安市 - coverOssId: '2060000000000000000' - intro: 更新后的家谱简介 - visibility: '1' - joinMode: '1' - required: true - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/overview: - get: - summary: APP 家谱概览 - deprecated: false - description: '' - tags: - - 家谱 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/join-applies: - post: - summary: APP 申请加入家谱 - deprecated: false - description: '' - tags: - - 家谱 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/GenealogyJoinApplyBody' - example: - applicantName: 彭小明 - phone: '13800000000' - relationDesc: 本族成员 - applyReason: 申请加入家谱维护 - inviterUserId: 900000001 - required: true - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - /genealogy/app/genealogies/join-applies/mine: - get: - summary: APP 我的加入申请 - deprecated: false - description: '' - tags: - - 家谱 - parameters: - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/ListResult' - description: 通用列表响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/join-applies/pending: - get: - summary: APP 待审核加入申请 - deprecated: false - description: '' - tags: - - 家谱 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/ListResult' - description: 通用列表响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/join-applies/{applyId}/audit: - put: - summary: APP 审核加入申请 - deprecated: false - description: '' - tags: - - 家谱 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: applyId - in: path - description: 加入家谱申请ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/GenealogyJoinAuditBody' - example: - status: '1' - auditRemark: 信息核验通过 - required: true - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - security: - - SaToken: [] - /genealogy/app/genealogies/join-applies/{applyId}: - delete: - summary: APP 撤销加入申请 - deprecated: false - description: '' - tags: - - 家谱 - parameters: - - name: applyId - in: path - description: 加入家谱申请ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/members: - get: - summary: APP 家谱成员列表 - deprecated: false - description: '' - tags: - - 家谱成员 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/ListResult' - description: 通用列表响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/members/options: - get: - summary: APP 家谱成员选项 - deprecated: false - description: '' - tags: - - 家谱成员 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/ListResult' - description: 通用列表响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/members/{memberId}: - put: - summary: APP 修改成员 - deprecated: false - description: '' - tags: - - 家谱成员 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: memberId - in: path - description: 家谱成员ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/GenealogyMemberUpdateBody' - example: - memberName: 彭小明 - relationName: 族亲 - roleType: member - lineagePersonId: 900020001 - required: true - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - delete: - summary: APP 移除成员 - deprecated: false - description: '' - tags: - - 家谱成员 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: memberId - in: path - description: 家谱成员ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/members/me: - delete: - summary: APP 退出家谱 - deprecated: false - description: '' - tags: - - 家谱成员 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/members/owner-transfer: - put: - summary: APP 转让家谱所有者 - deprecated: false - description: '' - tags: - - 家谱成员 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/GenealogyOwnerTransferBody' - example: - targetMemberId: 900010002 - required: true - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/generation-poems: - get: - summary: APP 查询正常字辈谱 - deprecated: false - description: 对可查看家谱的业务用户开放;仅返回正常状态字辈,供世系人物录入和展示使用。 - tags: - - 字辈谱 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/GenerationPoemListResult' - description: 字辈列表响应 - security: - - SaToken: [] - post: - summary: APP 新增字辈 - deprecated: false - description: '' - tags: - - 字辈谱 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/GenerationPoemBody' - example: - generationNo: 5 - generationText: 忠 - description: fifth generation poem - sortOrder: 5 - status: '0' - required: true - responses: - '200': - $ref: '#/components/responses/GenerationPoemResult' - description: 字辈详情响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/generation-poems/batch/preview: - post: - summary: APP 批量字辈预览 - deprecated: false - description: '' - tags: - - 字辈谱 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/GenerationPoemBatchBody' - example: - poemText: |- - 德承家亦 - 忠厚传芳 - disableMissing: false - required: true - responses: - '200': - $ref: '#/components/responses/GenerationPoemBatchPreviewResult' - description: 字辈批量预览响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/generation-poems/batch/save: - post: - summary: APP 批量保存字辈 - deprecated: false - description: 保存时会重新按当前数据生成差异;停用不删除历史字辈记录。 - tags: - - 字辈谱 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/GenerationPoemBatchBody' - example: - poemText: |- - 德承家亦 - 忠厚传芳 - disableMissing: false - required: true - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/generation-poems/management: - get: - summary: APP 查询字辈维护列表 - deprecated: false - description: 仅家谱内容编辑者可访问,返回正常和停用字辈,用于恢复、纠错和排序调整。 - tags: - - 字辈谱 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/GenerationPoemListResult' - description: 字辈列表响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/generation-poems/{poemId}: - put: - summary: APP 修改、停用或恢复字辈 - deprecated: false - description: '' - tags: - - 字辈谱 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: poemId - in: path - description: 字辈记录ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/GenerationPoemBody' - example: - generationNo: 5 - generationText: 忠 - description: fifth generation poem - sortOrder: 5 - status: '0' - required: true - responses: - '200': - $ref: '#/components/responses/GenerationPoemResult' - description: 字辈详情响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/lineage/persons: - get: - summary: APP 世系人物列表 - deprecated: false - description: '' - tags: - - 世系人物 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/LineagePersonListResult' - description: 世系人物列表或选项响应 - security: - - SaToken: [] - post: - summary: APP 新增世系人物 - deprecated: false - description: '' - tags: - - 世系人物 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/LineagePersonBody' - example: - appUserId: 900000001 - personNo: P202607090001 - name: 彭德明 - aliasName: 德明 - sex: '0' - generation: 1 - generationName: 德 - avatarOssId: '2060000000000000000' - birthDate: '1950-01-01' - birthLunar: '0' - birthPlace: 江西吉安 - personStatus: '0' - biography: 第一世人物简介 - sortOrder: 1 - required: true - responses: - '200': - $ref: '#/components/responses/LineagePersonResult' - description: 世系人物详情响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/lineage/persons/page: - get: - summary: APP 世系人物分页 - deprecated: false - description: '' - tags: - - 世系人物 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: pageNum - in: query - description: 页码,从1开始 - required: false - schema: - type: integer - default: 1 - - name: pageSize - in: query - description: 每页条数 - required: false - schema: - type: integer - default: 10 - - name: keyword - in: query - description: 姓名、别名或人物编号关键词 - required: false - schema: - type: string - - name: generation - in: query - description: 世代序号 - required: false - schema: - type: integer - format: int64 - - name: personStatus - in: query - description: 人物状态字典值 - required: false - schema: - type: string - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/LineagePersonPageResult' - description: 世系人物分页响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/lineage/persons/options: - get: - summary: APP 世系人物选项 - deprecated: false - description: '' - tags: - - 世系人物 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: keyword - in: query - description: 姓名、别名或人物编号关键词 - required: false - schema: - type: string - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/LineagePersonListResult' - description: 世系人物列表或选项响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/lineage/tree: - get: - summary: APP 世系树 - deprecated: false - description: '' - tags: - - 世系人物 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/LineagePersonTreeResult' - description: 世系树响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/lineage/persons/{personId}: - get: - summary: APP 世系人物详情 - deprecated: false - description: '' - tags: - - 世系人物 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: personId - in: path - description: 世系人物ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/LineagePersonResult' - description: 世系人物详情响应 - security: - - SaToken: [] - put: - summary: APP 修改世系人物 - deprecated: false - description: '' - tags: - - 世系人物 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: personId - in: path - description: 世系人物ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/LineagePersonBody' - example: - appUserId: 900000001 - personNo: P202607090001 - name: 彭德明 - aliasName: 德明 - sex: '0' - generation: 1 - generationName: 德 - avatarOssId: '2060000000000000000' - birthDate: '1950-01-01' - birthLunar: '0' - birthPlace: 江西吉安 - personStatus: '0' - biography: 第一世人物简介 - sortOrder: 1 - required: true - responses: - '200': - $ref: '#/components/responses/LineagePersonResult' - description: 世系人物详情响应 - security: - - SaToken: [] - delete: - summary: APP 停用世系人物 - deprecated: false - description: 逻辑停用人物,不执行物理删除;存在正常子女时拒绝停用。 - tags: - - 世系人物 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: personId - in: path - description: 世系人物ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/lineage/persons/{personId}/children: - post: - summary: APP 给人物添加子女 - deprecated: false - description: '' - tags: - - 世系人物 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: personId - in: path - description: 世系人物ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/LineagePersonBody' - example: - appUserId: 900000001 - personNo: P202607090001 - name: 彭德明 - aliasName: 德明 - sex: '0' - generation: 1 - generationName: 德 - avatarOssId: '2060000000000000000' - birthDate: '1950-01-01' - birthLunar: '0' - birthPlace: 江西吉安 - personStatus: '0' - biography: 第一世人物简介 - sortOrder: 1 - required: true - responses: - '200': - $ref: '#/components/responses/LineagePersonResult' - description: 世系人物详情响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/lineage/persons/{personId}/parents: - post: - summary: APP 给人物添加父母 - deprecated: false - description: '' - tags: - - 世系人物 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: personId - in: path - description: 世系人物ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/LineagePersonBody' - example: - appUserId: 900000001 - personNo: P202607090001 - name: 彭德明 - aliasName: 德明 - sex: '0' - generation: 1 - generationName: 德 - avatarOssId: '2060000000000000000' - birthDate: '1950-01-01' - birthLunar: '0' - birthPlace: 江西吉安 - personStatus: '0' - biography: 第一世人物简介 - sortOrder: 1 - required: true - responses: - '200': - $ref: '#/components/responses/LineagePersonResult' - description: 世系人物详情响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/lineage/persons/{personId}/siblings: - post: - summary: APP 给人物添加兄弟姐妹 - deprecated: false - description: '' - tags: - - 世系人物 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: personId - in: path - description: 世系人物ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/LineagePersonBody' - example: - appUserId: 900000001 - personNo: P202607090001 - name: 彭德明 - aliasName: 德明 - sex: '0' - generation: 1 - generationName: 德 - avatarOssId: '2060000000000000000' - birthDate: '1950-01-01' - birthLunar: '0' - birthPlace: 江西吉安 - personStatus: '0' - biography: 第一世人物简介 - sortOrder: 1 - required: true - responses: - '200': - $ref: '#/components/responses/LineagePersonResult' - description: 世系人物详情响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/lineage/persons/{personId}/spouses: - post: - summary: APP 给人物添加配偶 - deprecated: false - description: '' - tags: - - 世系人物 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: personId - in: path - description: 世系人物ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/LineagePersonBody' - example: - appUserId: 900000001 - personNo: P202607090001 - name: 彭德明 - aliasName: 德明 - sex: '0' - generation: 1 - generationName: 德 - avatarOssId: '2060000000000000000' - birthDate: '1950-01-01' - birthLunar: '0' - birthPlace: 江西吉安 - personStatus: '0' - biography: 第一世人物简介 - sortOrder: 1 - required: true - responses: - '200': - $ref: '#/components/responses/LineagePersonResult' - description: 世系人物详情响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/feeds: - get: - summary: APP 家族圈动态列表 - deprecated: false - description: '' - tags: - - 家族圈 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/ListResult' - description: 通用列表响应 - security: - - SaToken: [] - post: - summary: APP 发布家族圈动态 - deprecated: false - description: '' - tags: - - 家族圈 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/FamilyFeedBody' - example: - feedType: text - feedContent: 今天上传一张老照片。 - mediaOssIds: 2060000000000000001,2060000000000000002 - sortOrder: 0 - status: '0' - required: true - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/feeds/page: - get: - summary: APP 家族圈动态分页 - deprecated: false - description: '' - tags: - - 家族圈 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: pageNum - in: query - description: 页码,从1开始 - required: false - schema: - type: integer - default: 1 - - name: pageSize - in: query - description: 每页条数 - required: false - schema: - type: integer - default: 10 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/PageResult' - description: 通用分页响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/feeds/{feedId}: - get: - summary: APP 家族圈动态详情 - deprecated: false - description: '' - tags: - - 家族圈 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: feedId - in: path - description: 家族动态ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - put: - summary: APP 修改家族圈动态 - deprecated: false - description: '' - tags: - - 家族圈 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: feedId - in: path - description: 家族动态ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/FamilyFeedBody' - example: - feedType: text - feedContent: 今天上传一张老照片。 - mediaOssIds: 2060000000000000001,2060000000000000002 - sortOrder: 0 - status: '0' - required: true - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - delete: - summary: APP 删除家族圈动态 - deprecated: false - description: '' - tags: - - 家族圈 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: feedId - in: path - description: 家族动态ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/feeds/{feedId}/likes: - post: - summary: APP 点赞动态 - deprecated: false - description: '' - tags: - - 家族圈 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: feedId - in: path - description: 家族动态ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - security: - - SaToken: [] - delete: - summary: APP 取消点赞动态 - deprecated: false - description: '' - tags: - - 家族圈 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: feedId - in: path - description: 家族动态ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/feeds/{feedId}/comments: - get: - summary: APP 动态一级评论列表 - deprecated: false - description: 仅返回正常展示的一级评论;每条评论的 replyCount 为正常展示的直接回复数量。 - tags: - - 家族圈 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: feedId - in: path - description: 家族动态ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/FamilyFeedCommentListResult' - description: 家族圈评论列表响应 - security: - - SaToken: [] - post: - summary: APP 评论动态 - deprecated: false - description: '' - tags: - - 家族圈 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: feedId - in: path - description: 家族动态ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/FamilyFeedCommentBody' - example: - parentCommentId: null - commentContent: 这张照片很有年代感。 - required: true - responses: - '200': - $ref: '#/components/responses/FamilyFeedCommentResult' - description: 家族圈评论对象响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/feeds/{feedId}/comments/page: - get: - summary: APP 动态一级评论分页 - deprecated: false - description: 仅返回正常展示的一级评论;展开回复时请调用 replies 接口。 - tags: - - 家族圈 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: feedId - in: path - description: 家族动态ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: pageNum - in: query - description: 页码,从1开始 - required: false - schema: - type: integer - default: 1 - - name: pageSize - in: query - description: 每页条数 - required: false - schema: - type: integer - default: 10 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/FamilyFeedCommentPageResult' - description: 家族圈评论分页响应 - security: - - SaToken: [] - /genealogy/pc/genealogies/{genealogyId}/feeds: - get: - summary: PC 家族圈动态列表 - deprecated: false - description: '' - tags: - - 家族圈 - parameters: - - name: genealogyId - in: path - description: '' - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: clientid - in: header - description: '' - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/ListResult' - description: 通用列表响应 - security: - - SaToken: [] - post: - summary: PC 发布家族圈动态 - deprecated: false - description: '' - tags: - - 家族圈 - parameters: - - name: genealogyId - in: path - description: '' - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: clientid - in: header - description: '' - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/FamilyFeedBody' - example: - feedType: text - feedContent: 今天上传一张老照片。 - mediaOssIds: 2060000000000000001,2060000000000000002 - sortOrder: 0 - status: '0' - required: true - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - /genealogy/pc/genealogies/{genealogyId}/feeds/page: - get: - summary: PC 家族圈动态分页 - deprecated: false - description: '' - tags: - - 家族圈 - parameters: - - name: genealogyId - in: path - description: '' - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: pageNum - in: query - description: '' - required: false - schema: - type: integer - default: 1 - - name: pageSize - in: query - description: '' - required: false - schema: - type: integer - default: 10 - - name: clientid - in: header - description: '' - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/PageResult' - description: 通用分页响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/feeds/{feedId}/comments/{commentId}: - delete: - summary: APP 删除本人动态评论;有回复时保留删除占位 - deprecated: false - description: '' - tags: - - 家族圈 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: feedId - in: path - description: 家族动态ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: commentId - in: path - description: 评论ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - security: - - SaToken: [] - /genealogy/pc/genealogies/{genealogyId}/feeds/{feedId}: - get: - summary: PC 家族圈动态详情 - deprecated: false - description: '' - tags: - - 家族圈 - parameters: - - name: genealogyId - in: path - description: '' - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: feedId - in: path - description: '' - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: '' - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - put: - summary: PC 修改家族圈动态 - deprecated: false - description: '' - tags: - - 家族圈 - parameters: - - name: genealogyId - in: path - description: '' - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: feedId - in: path - description: '' - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: '' - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/FamilyFeedBody' - example: - feedType: text - feedContent: 今天上传一张老照片。 - mediaOssIds: 2060000000000000001,2060000000000000002 - sortOrder: 0 - status: '0' - required: true - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - delete: - summary: PC 删除家族圈动态 - deprecated: false - description: '' - tags: - - 家族圈 - parameters: - - name: genealogyId - in: path - description: '' - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: feedId - in: path - description: '' - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: '' - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - security: - - SaToken: [] - /genealogy/pc/genealogies/{genealogyId}/feeds/{feedId}/likes: - post: - summary: PC 点赞动态 - deprecated: false - description: '' - tags: - - 家族圈 - parameters: - - name: genealogyId - in: path - description: '' - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: feedId - in: path - description: '' - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: '' - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - security: - - SaToken: [] - delete: - summary: PC 取消点赞动态 - deprecated: false - description: '' - tags: - - 家族圈 - parameters: - - name: genealogyId - in: path - description: '' - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: feedId - in: path - description: '' - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: '' - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - security: - - SaToken: [] - /genealogy/pc/genealogies/{genealogyId}/feeds/{feedId}/comments: - get: - summary: PC 动态评论列表 - deprecated: false - description: '' - tags: - - 家族圈 - parameters: - - name: genealogyId - in: path - description: '' - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: feedId - in: path - description: '' - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: '' - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/ListResult' - description: 通用列表响应 - security: - - SaToken: [] - post: - summary: PC 评论动态 - deprecated: false - description: '' - tags: - - 家族圈 - parameters: - - name: genealogyId - in: path - description: '' - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: feedId - in: path - description: '' - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: '' - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/FamilyFeedCommentBody' - required: true - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - /genealogy/pc/genealogies/{genealogyId}/feeds/{feedId}/comments/page: - get: - summary: PC 动态评论分页 - deprecated: false - description: '' - tags: - - 家族圈 - parameters: - - name: genealogyId - in: path - description: '' - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: feedId - in: path - description: '' - required: true - example: '' - schema: - type: integer - format: int64 - - name: pageNum - in: query - description: '' - required: false - schema: - type: integer - default: 1 - - name: pageSize - in: query - description: '' - required: false - schema: - type: integer - default: 10 - - name: clientid - in: header - description: '' - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/PageResult' - description: 通用分页响应 - security: - - SaToken: [] - /genealogy/pc/genealogies/{genealogyId}/feeds/{feedId}/comments/{commentId}: - delete: - summary: PC 删除动态评论 - deprecated: false - description: '' - tags: - - 家族圈 - parameters: - - name: genealogyId - in: path - description: '' - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: feedId - in: path - description: '' - required: true - example: '' - schema: - type: integer - format: int64 - - name: commentId - in: path - description: 评论ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: '' - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/feeds/{feedId}/comments/{commentId}/replies: - get: - summary: APP 获取评论的直接回复列表 - deprecated: false - description: 仅返回指定正常评论的正常展示直接回复;回复的 replyCount 可用于继续按需展开下一层。 - tags: - - 家族圈 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: feedId - in: path - description: 家族动态ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: commentId - in: path - description: 父评论 ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/FamilyFeedCommentListResult' - description: 家族圈评论列表响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/feeds/{feedId}/comments/{commentId}/replies/page: - get: - summary: APP 分页获取评论的直接回复 - deprecated: false - description: '' - tags: - - 家族圈 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: feedId - in: path - description: 家族动态ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: commentId - in: path - description: 父评论 ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: pageNum - in: query - description: 页码,从1开始 - required: false - schema: - type: integer - default: 1 - - name: pageSize - in: query - description: 每页条数 - required: false - schema: - type: integer - default: 10 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/FamilyFeedCommentPageResult' - description: 家族圈评论分页响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/article-categories: - get: - summary: APP 谱文分类 - deprecated: false - description: '' - tags: - - 内容文章 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/ListResult' - description: 通用列表响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/articles: - get: - summary: APP 谱文列表 - deprecated: false - description: '' - tags: - - 内容文章 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/ListResult' - description: 通用列表响应 - security: - - SaToken: [] - post: - summary: APP 新增谱文 - deprecated: false - description: '' - tags: - - 内容文章 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/ArticleBody' - example: - categoryId: 900040001 - articleTitle: 族谱源流 - articleSummary: 介绍本支源流 - coverOssId: '2060000000000000000' - articleContent:article content
- authorName: 族谱管理员 - sortOrder: 1 - status: '0' - required: true - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/articles/{articleId}: - get: - summary: APP 谱文详情 - deprecated: false - description: '' - tags: - - 内容文章 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: articleId - in: path - description: 谱文/官网文章ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - put: - summary: APP 修改谱文 - deprecated: false - description: '' - tags: - - 内容文章 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: articleId - in: path - description: 谱文/官网文章ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/ArticleBody' - example: - categoryId: 900040001 - articleTitle: 族谱源流 - articleSummary: 介绍本支源流 - coverOssId: '2060000000000000000' - articleContent:article content
- authorName: 族谱管理员 - sortOrder: 1 - status: '0' - required: true - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - delete: - summary: APP 删除谱文 - deprecated: false - description: '' - tags: - - 内容文章 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: articleId - in: path - description: 要删除的谱文ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - security: - - SaToken: [] - /genealogy/app/help-articles: - get: - summary: APP 帮助文章列表 - deprecated: false - description: '' - tags: - - 内容文章 - parameters: - - name: clientid - in: header - description: 客户端ID - example: ced7e5f0498645c6ec642dcf450b036f - schema: - type: string - default: ced7e5f0498645c6ec642dcf450b036f - responses: - '200': - $ref: '#/components/responses/ListResult' - description: 通用列表响应 - security: - - SaToken: [] - /genealogy/app/help-articles/{helpId}: - get: - summary: APP 帮助文章详情 - deprecated: false - description: '' - tags: - - 内容文章 - parameters: - - name: helpId - in: path - description: 帮助文章ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: 客户端ID - example: ced7e5f0498645c6ec642dcf450b036f - schema: - type: string - default: ced7e5f0498645c6ec642dcf450b036f - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - /genealogy/app/promotions: - get: - summary: APP 应用推广列表 - deprecated: false - description: '' - tags: - - 内容文章 - parameters: - - name: clientid - in: header - description: 客户端ID - example: ced7e5f0498645c6ec642dcf450b036f - schema: - type: string - default: ced7e5f0498645c6ec642dcf450b036f - responses: - '200': - $ref: '#/components/responses/ListResult' - description: 通用列表响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/albums: - get: - summary: APP 相册列表 - deprecated: false - description: '' - tags: - - 相册 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/ListResult' - description: 通用列表响应 - security: - - SaToken: [] - post: - summary: APP 创建相册 - deprecated: false - description: '' - tags: - - 相册 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AlbumBody' - example: - albumName: 老照片 - albumDesc: family old photos - coverOssId: '2060000000000000000' - sortOrder: 1 - status: '0' - required: true - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/albums/{albumId}: - put: - summary: APP 修改相册 - deprecated: false - description: '' - tags: - - 相册 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: albumId - in: path - description: 相册ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AlbumBody' - example: - albumName: 老照片 - albumDesc: family old photos - coverOssId: '2060000000000000000' - sortOrder: 1 - status: '0' - required: true - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - delete: - summary: APP 删除相册 - deprecated: false - description: 逻辑删除相册及其照片,并释放封面和照片文件引用。 - tags: - - 相册 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: albumId - in: path - description: 要删除的相册ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/albums/{albumId}/photos: - get: - summary: APP 相册图片列表 - deprecated: false - description: '' - tags: - - 相册 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: albumId - in: path - description: 相册ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/ListResult' - description: 通用列表响应 - security: - - SaToken: [] - post: - summary: APP 上传相册图片记录 - deprecated: false - description: '' - tags: - - 相册 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: albumId - in: path - description: 相册ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AlbumPhotoBody' - example: - ossId: '2060000000000000000' - photoTitle: 老宅合影 - photoDesc: old house photo - photographer: 彭小明 - shootTime: '2026-07-09 10:00:00' - sortOrder: 1 - status: '0' - required: true - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/albums/{albumId}/photos/{photoId}: - delete: - summary: APP 删除单张相册图片 - deprecated: false - description: '' - tags: - - 相册 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: albumId - in: path - description: 相册ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: photoId - in: path - description: 要删除的相册图片ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/ceremonies: - get: - summary: APP 祭祀列表 - deprecated: false - description: '' - tags: - - 祭祀 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/ListResult' - description: 通用列表响应 - security: - - SaToken: [] - post: - summary: APP 创建祭祀 - deprecated: false - description: '' - tags: - - 祭祀 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/CeremonyBody' - example: - ceremonyType: ancestor - ceremonyTitle: 清明祭祖 - ceremonyDesc: online ancestor ceremony - ceremonyTime: '2026-04-04 09:00:00' - location: 祠堂 - coverOssId: '2060000000000000000' - sortOrder: 1 - status: '0' - required: true - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/ceremonies/{ceremonyId}: - get: - summary: APP 祭祀详情 - deprecated: false - description: '' - tags: - - 祭祀 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: ceremonyId - in: path - description: 祭祀/活动ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - put: - summary: APP 修改祭祀 - deprecated: false - description: '' - tags: - - 祭祀 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: ceremonyId - in: path - description: 祭祀/活动ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/CeremonyBody' - example: - ceremonyType: ancestor - ceremonyTitle: 清明祭祖 - ceremonyDesc: online ancestor ceremony - ceremonyTime: '2026-04-04 09:00:00' - location: 祠堂 - coverOssId: '2060000000000000000' - sortOrder: 1 - status: '0' - required: true - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - delete: - summary: APP 删除祭祀活动 - deprecated: false - description: 逻辑删除祭祀活动及其祭品,并释放活动封面文件引用。 - tags: - - 祭祀 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: ceremonyId - in: path - description: 要删除的祭祀活动ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/ceremonies/{ceremonyId}/gifts: - get: - summary: APP 祭祀献礼列表 - deprecated: false - description: '' - tags: - - 祭祀 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: ceremonyId - in: path - description: 祭祀/活动ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/ListResult' - description: 通用列表响应 - security: - - SaToken: [] - post: - summary: APP 新增祭祀献礼 - deprecated: false - description: '' - tags: - - 祭祀 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: ceremonyId - in: path - description: 祭祀/活动ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/CeremonyGiftBody' - example: - giverName: 彭小明 - giftAmount: 66.66 - giftMessage: 缅怀先祖 - required: true - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/ceremonies/{ceremonyId}/gifts/{giftId}: - delete: - summary: APP 删除单条祭品 - deprecated: false - description: '' - tags: - - 祭祀 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: ceremonyId - in: path - description: 祭祀活动ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: giftId - in: path - description: 要删除的祭品ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/growth-records: - get: - summary: APP 成长记录列表 - deprecated: false - description: '' - tags: - - 族务记录 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/ListResult' - description: 通用列表响应 - security: - - SaToken: [] - post: - summary: APP 新增成长记录 - deprecated: false - description: '' - tags: - - 族务记录 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/GrowthRecordBody' - example: - lineagePersonId: 900020001 - recordType: birth - recordTitle: 出生记录 - recordContent: birth record - recordDate: '2026-07-09 10:00:00' - remindTime: '2027-07-09 10:00:00' - mediaOssIds: '2060000000000000001' - sortOrder: 1 - status: '0' - required: true - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/growth-records/{recordId}: - get: - summary: APP 成长记录详情 - deprecated: false - description: '' - tags: - - 族务记录 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: recordId - in: path - description: 记录ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - put: - summary: APP 修改成长记录 - deprecated: false - description: '' - tags: - - 族务记录 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: recordId - in: path - description: 记录ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/GrowthRecordBody' - example: - lineagePersonId: 900020001 - recordType: birth - recordTitle: 出生记录 - recordContent: birth record - recordDate: '2026-07-09 10:00:00' - remindTime: '2027-07-09 10:00:00' - mediaOssIds: '2060000000000000001' - sortOrder: 1 - status: '0' - required: true - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - delete: - summary: APP 删除成长记录 - deprecated: false - description: '' - tags: - - 族务记录 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: recordId - in: path - description: 要删除的成长记录ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/memos: - get: - summary: APP 备忘录列表 - deprecated: false - description: '' - tags: - - 族务记录 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/ListResult' - description: 通用列表响应 - security: - - SaToken: [] - post: - summary: APP 新增备忘录 - deprecated: false - description: '' - tags: - - 族务记录 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/MemoBody' - example: - memoTitle: 修谱事项 - memoContent: contact family members - remindTime: '2026-08-01 09:00:00' - completed: '0' - mediaOssIds: '2060000000000000001' - sortOrder: 1 - status: '0' - required: true - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/memos/{memoId}: - get: - summary: APP 备忘录详情 - deprecated: false - description: '' - tags: - - 族务记录 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: memoId - in: path - description: '' - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - put: - summary: APP 修改备忘录 - deprecated: false - description: '' - tags: - - 族务记录 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: memoId - in: path - description: '' - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/MemoBody' - example: - memoTitle: 修谱事项 - memoContent: contact family members - remindTime: '2026-08-01 09:00:00' - completed: '0' - mediaOssIds: '2060000000000000001' - sortOrder: 1 - status: '0' - required: true - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - delete: - summary: APP 删除备忘录 - deprecated: false - description: '' - tags: - - 族务记录 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: memoId - in: path - description: 要删除的备忘录ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/relative-records: - get: - summary: APP 亲友记录列表 - deprecated: false - description: '' - tags: - - 族务记录 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/ListResult' - description: 通用列表响应 - security: - - SaToken: [] - post: - summary: APP 新增亲友记录 - deprecated: false - description: '' - tags: - - 族务记录 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/RelativeRecordBody' - example: - relativeName: 张三 - relationName: 亲友 - eventName: 礼尚往来 - eventTime: '2026-07-16 10:00:00' - giftAmount: 100 - recordContent: 往来记录 - mediaOssIds: '2060000000000000001' - sortOrder: 1 - status: '0' - required: true - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/relative-records/{relativeId}: - get: - summary: APP 亲友记录详情 - deprecated: false - description: '' - tags: - - 族务记录 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: relativeId - in: path - description: 亲友记录ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - put: - summary: APP 修改亲友记录 - deprecated: false - description: '' - tags: - - 族务记录 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: relativeId - in: path - description: 亲友记录ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/RelativeRecordBody' - example: - relativeName: 张三 - relationName: 亲友 - eventName: 礼尚往来 - eventTime: '2026-07-16 10:00:00' - giftAmount: 100 - recordContent: 往来记录 - mediaOssIds: '2060000000000000001' - sortOrder: 1 - status: '0' - required: true - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - delete: - summary: APP 删除亲友记录 - deprecated: false - description: '' - tags: - - 族务记录 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: relativeId - in: path - description: 要删除的亲友记录ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/merit-records: - get: - summary: APP 功德记录列表 - deprecated: false - description: '' - tags: - - 族务记录 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/ListResult' - description: 通用列表响应 - security: - - SaToken: [] - post: - summary: APP 新增功德记录 - deprecated: false - description: '' - tags: - - 族务记录 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/MeritRecordBody' - example: - donorName: 彭小明 - meritType: donation - meritTitle: 修谱捐款 - meritContent: support genealogy work - amount: 100 - meritTime: '2026-07-09 10:00:00' - sortOrder: 1 - status: '0' - required: true - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/merit-records/{meritId}: - delete: - summary: APP 删除功德记录 - deprecated: false - description: '' - tags: - - 族务记录 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: meritId - in: path - description: 要删除的功德记录ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - security: - - SaToken: [] - /genealogy/app/notifications: - get: - summary: APP 消息通知列表 - deprecated: false - description: '' - tags: - - 消息通知 - parameters: - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/ListResult' - description: 通用列表响应 - security: - - SaToken: [] - /genealogy/app/notifications/{notificationId}/read: - post: - summary: APP 标记通知已读 - deprecated: false - description: '' - tags: - - 消息通知 - parameters: - - name: notificationId - in: path - description: 通知ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - security: - - SaToken: [] - /genealogy/app/notifications/read-all: - post: - summary: APP 全部标记已读 - deprecated: false - description: '' - tags: - - 消息通知 - parameters: - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - security: - - SaToken: [] - /genealogy/app/feedback: - get: - summary: APP 我的反馈列表 - deprecated: false - description: '' - tags: - - 意见反馈 - parameters: - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/ListResult' - description: 通用列表响应 - security: - - SaToken: [] - post: - summary: APP 提交反馈 - deprecated: false - description: '' - tags: - - 意见反馈 - parameters: - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/FeedbackBody' - example: - feedbackType: bug - feedbackContent: upload image failed - contactInfo: '13800000000' - required: true - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - /genealogy/app/vip/packages: - get: - summary: APP VIP 套餐列表 - deprecated: false - description: '' - tags: - - VIP - parameters: - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/ListResult' - description: 通用列表响应 - security: - - SaToken: [] - /genealogy/app/vip/orders: - get: - summary: APP VIP 订单列表 - deprecated: false - description: '' - tags: - - VIP - parameters: - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/ListResult' - description: 通用列表响应 - security: - - SaToken: [] - post: - summary: APP 创建 VIP 订单 - deprecated: false - description: '' - tags: - - VIP - parameters: - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/VipOrderBody' - example: - packageId: 900060001 - genealogyId: 900001001 - payType: wechat - required: true - responses: - '200': - $ref: '#/components/responses/ObjectResult' - description: 通用对象响应 - security: - - SaToken: [] - /genealogy/app/genealogies/{genealogyId}/videos/{videoId}: - delete: - summary: APP 删除视频 - deprecated: false - description: 逻辑删除视频,并释放视频文件和封面文件引用。 - tags: - - 视频 - parameters: - - name: genealogyId - in: path - description: 家谱ID - required: true - example: 900001001 - schema: - type: integer - format: int64 - - name: videoId - in: path - description: 要删除的视频ID - required: true - example: '' - schema: - type: integer - format: int64 - - name: clientid - in: header - description: >- - APP 认证业务请求的 clientid Header 必填;必须与请求体 clientId(如提交)一致,且客户端 clientKey - 必须为 app 并与 APP 路由一致。 - required: true - example: 428a8310cd442757ae699df5d894f051 - schema: - type: string - responses: - '200': - $ref: '#/components/responses/VoidResult' - description: 通用成功响应 - security: - - SaToken: [] -components: - schemas: - RVoid: - type: object - properties: - code: - description: 系统图形验证码或响应状态码 - type: integer - example: 200 - msg: - description: 响应消息 - type: string - example: 操作成功 - data: - description: 响应数据主体 - type: 'null' - PasswordRegisterBody: - type: object - additionalProperties: false - required: - - clientId - - grantType - - tenantId - - phone - - password - - smsCode - properties: - clientId: - description: 必填;必须与 clientid Header 一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。 - type: string - grantType: - description: 授权类型,例如password、sms、wechat、apple - type: string - example: password - tenantId: - description: 租户ID,用于区分不同租户的数据和验证策略 - type: string - example: '000000' - phone: - description: 手机号 - type: string - example: '13800000000' - password: - type: string - description: 32 位 MD5 - example: e10adc3949ba59abbe56e057f20f883e - nickName: - description: 用户昵称 - type: string - registerSource: - description: 注册来源,例如APP、PC、H5、MINI_PROGRAM - type: string - smsCode: - description: 4 位短信验证码 - type: string - pattern: ^\d{4}$ - example: '1234' - PasswordLoginBody: - type: object - additionalProperties: false - required: - - clientId - - grantType - - tenantId - - phone - - password - properties: - clientId: - description: 必填;必须与 clientid Header 一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。 - type: string - grantType: - description: 授权类型,例如password、sms、wechat、apple - type: string - example: password - tenantId: - description: 租户ID,用于区分不同租户的数据和验证策略 - type: string - example: '000000' - phone: - description: 手机号 - type: string - example: '13800000000' - password: - type: string - description: 32 位 MD5 - example: e10adc3949ba59abbe56e057f20f883e - SmsLoginBody: - type: object - additionalProperties: false - required: - - clientId - - grantType - - tenantId - - phone - - smsCode - properties: - clientId: - description: 必填;必须与 clientid Header 一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。 - type: string - grantType: - description: 授权类型,例如password、sms、wechat、apple - type: string - example: sms - tenantId: - description: 租户ID,用于区分不同租户的数据和验证策略 - type: string - example: '000000' - phone: - description: 手机号 - type: string - example: '13800000000' - smsCode: - description: 4 位短信验证码 - type: string - pattern: ^\d{4}$ - example: '1234' - SmsCodeBody: - type: object - additionalProperties: false - required: - - clientId - - grantType - - tenantId - - sceneCode - - phone - - validToken - properties: - clientId: - description: 必填;必须与 clientid Header 一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。 - type: string - grantType: - description: 授权类型,例如password、sms、wechat、apple - type: string - example: sms - tenantId: - description: 租户ID,用于区分不同租户的数据和验证策略 - type: string - example: '000000' - sceneCode: - description: APP 短信场景编码 - type: string - enum: - - APP_SMS_LOGIN - - APP_REGISTER - - APP_FORGOT_PASSWORD - - APP_PHONE_CHANGE - - APP_ACCOUNT_DEACTIVATE - example: APP_SMS_LOGIN - phone: - description: 手机号 - type: string - example: '13800000000' - validToken: - description: 验证中心通过后返回的票据,仅用于发送短信验证码 - type: string - ProfileUpdateBody: - type: object - properties: - nickName: - description: 用户昵称 - type: string - avatarOssId: - description: 头像文件OSS ID - type: integer - format: int64 - sex: - description: 性别,建议使用系统字典值 - type: string - birthday: - description: 生日,格式 yyyy-MM-dd - type: string - format: date - provinceCode: - type: string - cityCode: - type: string - districtCode: - type: string - PasswordChangeBody: - type: object - required: - - oldPassword - - newPassword - properties: - oldPassword: - type: string - description: 32 位 MD5 - newPassword: - type: string - description: 32 位 MD5 - PasswordResetBody: - type: object - additionalProperties: false - required: - - clientId - - grantType - - tenantId - - phone - - smsCode - - newPassword - properties: - clientId: - description: 必填;必须与 clientid Header 一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。 - type: string - grantType: - description: 授权类型 - type: string - example: password - tenantId: - description: 租户ID,用于区分不同租户的数据和验证策略 - type: string - example: '000000' - phone: - description: 手机号 - type: string - smsCode: - description: 4 位短信验证码 - type: string - pattern: ^\d{4}$ - example: '1234' - newPassword: - type: string - description: 32 位 MD5 - PhoneChangeBody: - type: object - additionalProperties: false - required: - - clientId - - phone - - smsCode - properties: - clientId: - description: 必填;必须与 clientid Header 一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。 - type: string - phone: - description: 新手机号 - type: string - smsCode: - description: 4 位短信验证码 - type: string - pattern: ^\d{4}$ - example: '1234' - AccountDeactivateBody: - type: object - additionalProperties: false - required: - - clientId - - smsCode - properties: - clientId: - description: 必填;必须与 clientid Header 一致,且客户端 clientKey 必须为 app 并与 APP 路由一致。 - type: string - smsCode: - description: 4 位短信验证码 - type: string - pattern: ^\d{4}$ - example: '1234' - ResumableInitBody: - type: object - required: - - fileName - - fileSize - - fileMd5 - - chunkSize - - totalChunks - properties: - fileName: - description: 原始文件名 - type: string - fileSize: - description: 文件大小,单位字节 - type: integer - format: int64 - fileMd5: - description: 完整文件MD5,用于秒传和完整性校验 - type: string - contentType: - description: 文件MIME类型,例如 image/jpeg、video/mp4 - type: string - chunkSize: - description: 单个分片大小,单位字节 - type: integer - example: 4194304 - totalChunks: - description: 总分片数 - type: integer - bizType: - description: 业务类型,例如avatar、cover、feed_image - type: string - usageScene: - description: 文件使用场景,便于后续引用统计和清理 - type: string - ResumableCompleteBody: - type: object - required: - - uploadId - - fileMd5 - - fileSize - properties: - uploadId: - description: 分片上传任务ID - type: string - fileMd5: - description: 完整文件MD5,用于秒传和完整性校验 - type: string - fileSize: - description: 文件大小,单位字节 - type: integer - format: int64 - FileReferenceBody: - type: object - required: - - bizType - - bizTable - - bizId - - bizField - properties: - bizType: - description: 业务类型,例如avatar、cover、feed_image - type: string - example: family_feed - bizName: - description: 业务名称,用于后台展示文件引用来源 - type: string - example: 家族圈动态 - bizTable: - description: 业务表名,用于文件引用绑定 - type: string - example: gen_family_feed - bizId: - description: 业务数据ID,用于文件引用绑定 - type: integer - format: int64 - bizField: - description: 业务字段名,例如avatar_oss_id、cover_oss_id - type: string - example: media_ids - ossId: - description: OSS文件ID,表单内部使用,用户侧应通过上传组件获取 - type: integer - format: int64 - ossIds: - type: string - example: 2060001,2060002 - usageScene: - description: 文件使用场景,便于后续引用统计和清理 - type: string - usageName: - type: string - GenerationPoemBatchBody: - type: object - required: - - poemText - properties: - poemText: - description: 字辈文本。无分隔符时按单个字拆分;可用空格、逗号、分号、顿号、斜杠或竖线分隔多个字辈。单个字辈最多50个字符,一次最多500个世代。 - type: string - maxLength: 26000 - example: |- - 德承家亦 - 忠厚传芳 - disableMissing: - description: 保存时是否停用未出现在新文本中的后续世代;不会删除历史记录。 - type: boolean - example: false - LineagePersonBody: - type: object - additionalProperties: false - required: - - name - properties: - appUserId: - description: 绑定的业务用户ID;仅家谱管理员可绑定,且用户必须属于当前租户并处于正常状态 - type: integer - format: int64 - personNo: - description: 人物编号;不传时由服务端生成 - type: string - name: - description: 姓名 - type: string - aliasName: - description: 别名或曾用名 - type: string - sex: - description: 性别,建议使用系统字典值 - type: string - example: '0' - generation: - description: 世代序号 - type: integer - format: int64 - generationName: - description: 字辈或辈分 - type: string - fatherId: - description: 父亲人物ID,必须属于当前家谱 - type: integer - format: int64 - motherId: - description: 母亲人物ID,必须属于当前家谱 - type: integer - format: int64 - avatarOssId: - description: 头像文件OSS ID;用户界面应通过统一上传组件获得,不允许手工录入 - type: integer - format: int64 - nullable: true - birthDate: - type: string - format: date-time - nullable: true - birthLunar: - description: 生日是否农历,使用项目字典值 - type: string - birthPlace: - description: 出生地 - type: string - deathDate: - type: string - format: date-time - nullable: true - deathLunar: - description: 逝世日期是否农历,使用项目字典值 - type: string - deathPlace: - description: 逝世地 - type: string - burialPlace: - description: 安葬地 - type: string - personStatus: - description: 人物状态字典值 - type: string - biography: - description: 人物简介 - type: string - sortOrder: - description: 排序值,数值越小越靠前 - type: integer - format: int64 - remark: - description: 备注 - type: string - relationName: - description: 通过添加配偶快捷接口提交时使用的关系显示名称 - type: string - FamilyFeedBody: - type: object - required: - - feedContent - properties: - feedType: - description: 动态类型,未传时默认为 text - type: string - example: text - feedContent: - description: 动态内容,不能为空 - type: string - example: 今天上传一张老照片。 - mediaOssIds: - description: 媒体文件 OSS ID 列表,多个 ID 使用英文逗号分隔 - type: string - example: 2060000000000000001,2060000000000000002 - sortOrder: - description: 排序值,未传时默认为 0 - type: integer - format: int64 - example: 0 - status: - description: 动态状态,未传时默认为正常状态 - type: string - example: '0' - FamilyFeedCommentBody: - type: object - required: - - commentContent - properties: - parentCommentId: - description: 父评论 ID;不传或传 null 表示发布一级评论 - type: integer - format: int64 - nullable: true - commentContent: - description: 评论内容,最多 1000 个字符 - type: string - GenealogyCreateBody: - type: object - required: - - genealogyName - - surname - - regionCode - properties: - genealogyName: - description: 家谱名称 - type: string - surname: - description: 姓氏 - type: string - ancestralHall: - description: 堂号/祠堂名称 - type: string - originPlace: - description: 籍贯/起源地 - type: string - regionCode: - description: 行政区划编码 - type: string - addressDetail: - description: 详细地址 - type: string - coverOssId: - description: 封面图片OSS ID - type: integer - format: int64 - intro: - description: 简介 - type: string - visibility: - description: 可见范围,例如0私密、1公开、2成员可见 - type: string - joinMode: - description: 加入方式,例如0关闭、1审核、2邀请码 - type: string - example: - genealogyName: 彭氏家谱 - surname: 彭 - ancestralHall: 陇西堂 - originPlace: 江西吉安 - regionCode: '360800' - addressDetail: 江西省吉安市 - coverOssId: 2060000000000000000 - intro: 彭氏家谱简介 - visibility: '1' - joinMode: '1' - GenealogyUpdateBody: - type: object - properties: - genealogyName: - description: 家谱名称 - type: string - surname: - description: 姓氏 - type: string - ancestralHall: - description: 堂号/祠堂名称 - type: string - originPlace: - description: 籍贯/起源地 - type: string - regionCode: - description: 行政区划编码 - type: string - addressDetail: - description: 详细地址 - type: string - coverOssId: - description: 封面图片OSS ID - type: integer - format: int64 - intro: - description: 简介 - type: string - visibility: - description: 可见范围,例如0私密、1公开、2成员可见 - type: string - joinMode: - description: 加入方式,例如0关闭、1审核、2邀请码 - type: string - example: - genealogyName: 彭氏家谱 - surname: 彭 - ancestralHall: 陇西堂 - originPlace: 江西吉安 - regionCode: '360800' - addressDetail: 江西省吉安市 - coverOssId: 2060000000000000000 - intro: 更新后的家谱简介 - visibility: '1' - joinMode: '1' - GenealogyJoinApplyBody: - type: object - properties: - applicantName: - description: 申请人姓名 - type: string - phone: - description: 手机号 - type: string - relationDesc: - description: 与家谱/人物的关系说明 - type: string - applyReason: - description: 申请理由 - type: string - inviterUserId: - description: 邀请人业务用户ID - type: integer - format: int64 - example: - applicantName: 彭小明 - phone: '13800000000' - relationDesc: 本族成员 - applyReason: 申请加入家谱维护 - inviterUserId: 900000001 - GenealogyJoinAuditBody: - type: object - required: - - status - properties: - status: - description: 状态,建议使用对应字典值 - type: string - auditRemark: - description: 审核备注 - type: string - example: - status: '1' - auditRemark: 信息核验通过 - GenealogyMemberUpdateBody: - type: object - properties: - memberName: - description: 成员姓名 - type: string - relationName: - description: 成员关系名称 - type: string - roleType: - description: 成员角色类型,例如创建者、管理员、普通成员 - type: string - lineagePersonId: - description: 绑定的世系人物ID - type: integer - format: int64 - example: - memberName: 彭小明 - relationName: 族亲 - roleType: member - lineagePersonId: 900020001 - GenealogyOwnerTransferBody: - type: object - required: - - targetMemberId - properties: - targetMemberId: - description: 目标成员ID - type: integer - format: int64 - example: - targetMemberId: 900010002 - GenerationPoemBody: - type: object - required: - - generationNo - - generationText - properties: - generationNo: - description: 世代序号 - type: integer - format: int64 - minimum: 1 - maximum: 2147483647 - generationText: - description: 当前世代的字辈文字,最长50个字符 - type: string - maxLength: 50 - description: - description: 字辈说明,最长500个字符 - type: string - maxLength: 500 - sortOrder: - description: 排序值,数值越小越靠前 - type: integer - format: int64 - minimum: -2147483648 - maximum: 2147483647 - status: - description: 状态,0正常,1停用 - type: string - example: - generationNo: 5 - generationText: 忠 - description: fifth generation poem - sortOrder: 5 - status: '0' - ArticleBody: - type: object - required: - - articleTitle - - articleContent - properties: - categoryId: - description: 分类ID - type: integer - format: int64 - articleTitle: - description: 文章标题 - type: string - articleSummary: - description: 文章摘要 - type: string - coverOssId: - description: 封面图片OSS ID - type: integer - format: int64 - articleContent: - description: 文章内容 - type: string - authorName: - description: 作者名称 - type: string - sortOrder: - description: 排序值,数值越小越靠前 - type: integer - format: int64 - status: - description: 状态,建议使用对应字典值 - type: string - example: - categoryId: 900040001 - articleTitle: 族谱源流 - articleSummary: 介绍本支源流 - coverOssId: 2060000000000000000 - articleContent:article content
- authorName: 族谱管理员 - sortOrder: 1 - status: '0' - AlbumBody: - type: object - required: - - albumName - properties: - albumName: - description: 相册名称 - type: string - albumDesc: - description: 相册说明 - type: string - coverOssId: - description: 封面图片OSS ID - type: integer - format: int64 - sortOrder: - description: 排序值,数值越小越靠前 - type: integer - format: int64 - status: - description: 状态,建议使用对应字典值 - type: string - example: - albumName: 老照片 - albumDesc: family old photos - coverOssId: 2060000000000000000 - sortOrder: 1 - status: '0' - AlbumPhotoBody: - type: object - required: - - ossId - properties: - ossId: - description: OSS文件ID,表单内部使用,用户侧应通过上传组件获取 - type: integer - format: int64 - photoTitle: - description: 图片标题 - type: string - photoDesc: - description: 图片说明 - type: string - photographer: - description: 拍摄人 - type: string - shootTime: - description: 拍摄时间 - type: string - sortOrder: - description: 排序值,数值越小越靠前 - type: integer - format: int64 - status: - description: 状态,建议使用对应字典值 - type: string - example: - ossId: 2060000000000000000 - photoTitle: 老宅合影 - photoDesc: old house photo - photographer: 彭小明 - shootTime: '2026-07-09 10:00:00' - sortOrder: 1 - status: '0' - CeremonyBody: - type: object - required: - - ceremonyType - - ceremonyTitle - properties: - ceremonyType: - description: 祭祀/活动类型 - type: string - ceremonyTitle: - description: 祭祀/活动标题 - type: string - ceremonyDesc: - description: 祭祀/活动说明 - type: string - ceremonyTime: - description: 祭祀/活动时间 - type: string - location: - description: 地点 - type: string - coverOssId: - description: 封面图片OSS ID - type: integer - format: int64 - sortOrder: - description: 排序值,数值越小越靠前 - type: integer - format: int64 - status: - description: 状态,建议使用对应字典值 - type: string - example: - ceremonyType: ancestor - ceremonyTitle: 清明祭祖 - ceremonyDesc: online ancestor ceremony - ceremonyTime: '2026-04-04 09:00:00' - location: 祠堂 - coverOssId: 2060000000000000000 - sortOrder: 1 - status: '0' - CeremonyGiftBody: - type: object - required: - - giftAmount - properties: - giverName: - description: 赠送人/献礼人姓名 - type: string - giftAmount: - description: 礼物金额 - type: number - format: double - giftMessage: - description: 礼物留言 - type: string - example: - giverName: 彭小明 - giftAmount: 66.66 - giftMessage: 缅怀先祖 - GrowthRecordBody: - type: object - required: - - recordTitle - properties: - lineagePersonId: - description: 绑定的世系人物ID - type: integer - format: int64 - recordType: - description: 记录类型 - type: string - recordTitle: - description: 记录标题 - type: string - recordContent: - description: 记录内容 - type: string - recordDate: - description: 记录日期 - type: string - remindTime: - description: 提醒时间 - type: string - mediaOssIds: - description: 媒体文件 OSS ID 列表;多个正整数 ID 使用英文逗号分隔,禁止空项和其他字符 - type: string - pattern: ^$|^[1-9][0-9]*(,[1-9][0-9]*)*$ - sortOrder: - description: 排序值,数值越小越靠前 - type: integer - format: int64 - status: - description: 状态,建议使用对应字典值 - type: string - example: - lineagePersonId: 900020001 - recordType: birth - recordTitle: 出生记录 - recordContent: birth record - recordDate: '2026-07-09 10:00:00' - remindTime: '2027-07-09 10:00:00' - mediaOssIds: '2060000000000000001' - sortOrder: 1 - status: '0' - MemoBody: - type: object - required: - - memoTitle - properties: - memoTitle: - description: 备忘标题 - type: string - memoContent: - description: 备忘内容 - type: string - remindTime: - description: 提醒时间 - type: string - completed: - description: 是否已完成 - type: string - mediaOssIds: - description: 媒体文件 OSS ID 列表;多个正整数 ID 使用英文逗号分隔,禁止空项和其他字符 - type: string - pattern: ^$|^[1-9][0-9]*(,[1-9][0-9]*)*$ - sortOrder: - description: 排序值,数值越小越靠前 - type: integer - format: int64 - status: - description: 状态,建议使用对应字典值 - type: string - example: - memoTitle: 修谱事项 - memoContent: contact family members - remindTime: '2026-08-01 09:00:00' - completed: '0' - mediaOssIds: '2060000000000000001' - sortOrder: 1 - status: '0' - RelativeRecordBody: - type: object - required: - - relativeName - properties: - relativeName: - description: 亲友姓名 - type: string - relationName: - description: 关系名称 - type: string - eventName: - description: 事件名称 - type: string - eventTime: - description: 事件时间 - type: string - giftAmount: - description: 礼金金额 - type: number - recordContent: - description: 记录内容 - type: string - mediaOssIds: - description: 媒体文件 OSS ID 列表;多个正整数 ID 使用英文逗号分隔,禁止空项和其他字符 - type: string - pattern: ^$|^[1-9][0-9]*(,[1-9][0-9]*)*$ - sortOrder: - description: 排序值,数值越小越靠前 - type: integer - format: int64 - status: - description: 状态,建议使用对应字典值 - type: string - MeritRecordBody: - type: object - required: - - donorName - - meritTitle - properties: - donorName: - description: 功德人/捐赠人姓名 - type: string - meritType: - description: 功德类型 - type: string - meritTitle: - description: 功德标题 - type: string - meritContent: - description: 功德内容 - type: string - amount: - description: 金额 - type: number - format: double - meritTime: - description: 功德时间 - type: string - sortOrder: - description: 排序值,数值越小越靠前 - type: integer - format: int64 - status: - description: 状态,建议使用对应字典值 - type: string - example: - donorName: 彭小明 - meritType: donation - meritTitle: 修谱捐款 - meritContent: support genealogy work - amount: 100 - meritTime: '2026-07-09 10:00:00' - sortOrder: 1 - status: '0' - FeedbackBody: - type: object - required: - - feedbackContent - properties: - feedbackType: - description: 反馈类型 - type: string - feedbackContent: - description: 反馈内容 - type: string - contactInfo: - description: 联系方式 - type: string - example: - feedbackType: bug - feedbackContent: upload image failed - contactInfo: '13800000000' - VipOrderBody: - type: object - required: - - packageId - properties: - packageId: - description: VIP套餐ID - type: integer - format: int64 - genealogyId: - description: 家谱ID - type: integer - format: int64 - payType: - description: 支付方式 - type: string - example: - packageId: 900060001 - genealogyId: 900001001 - payType: wechat - VerificationChallengeBody: - type: object - required: - - tenantId - - clientId - - sceneCode - - subject - properties: - tenantId: - type: string - description: 租户 ID - clientId: - type: string - description: 客户端 ID - sceneCode: - type: string - description: APP 短信场景编码 - enum: - - APP_SMS_LOGIN - - APP_REGISTER - - APP_FORGOT_PASSWORD - - APP_PHONE_CHANGE - - APP_ACCOUNT_DEACTIVATE - subject: - type: string - description: 验证主体,如手机号/用户名/IP - example: - tenantId: '000000' - clientId: 428a8310cd442757ae699df5d894f051 - sceneCode: APP_SMS_LOGIN - subject: '13800000000' - VerificationCheckBody: - type: object - required: - - tenantId - - clientId - - sceneCode - - subject - - challengeId - properties: - tenantId: - description: 租户ID,用于区分不同租户的数据和验证策略 - type: string - clientId: - description: 客户端ID,对应后台客户端管理中的APP/PC/小程序等终端 - type: string - sceneCode: - description: APP 短信场景编码 - type: string - enum: - - APP_SMS_LOGIN - - APP_REGISTER - - APP_FORGOT_PASSWORD - - APP_PHONE_CHANGE - - APP_ACCOUNT_DEACTIVATE - subject: - description: 验证主体,通常为手机号、用户ID或登录账号 - type: string - challengeId: - description: 验证挑战ID,由验证挑战接口返回 - type: string - providerCode: - type: string - description: 验证服务,tianai 或 ruoyi_image - captchaType: - type: string - description: SLIDER/ROTATE/CONCAT/WORD_IMAGE_CLICK/math/char - payload: - description: 验证结果载荷。天爱行为验证码提交 payload.track;系统图形验证码提交 payload.uuid 和 payload.code - oneOf: - - $ref: '#/components/schemas/TianaiVerificationPayload' - - $ref: '#/components/schemas/SystemImageVerificationPayload' - TianaiVerificationPayload: - type: object - description: >- - 将天爱 1.5.5 前端验证回调中的 data 原样放入 track;回调 id 不放入 payload,挑战标识统一提交顶层 - challengeId - required: - - track - properties: - track: - $ref: '#/components/schemas/TianaiCaptchaTrack' - TianaiCaptchaTrack: - type: object - required: - - bgImageWidth - - bgImageHeight - - startTime - - stopTime - - trackList - properties: - bgImageWidth: - type: integer - description: 验证码背景图片在前端实际显示的宽度,单位像素 - bgImageHeight: - type: integer - description: 验证码背景图片在前端实际显示的高度,单位像素 - templateImageWidth: - type: integer - description: 滑块或旋转模板图片在前端实际显示的宽度,单位像素 - templateImageHeight: - type: integer - description: 滑块或旋转模板图片在前端实际显示的高度,单位像素 - startTime: - type: integer - format: int64 - description: 用户开始操作的时间戳,单位毫秒 - stopTime: - type: integer - format: int64 - description: 用户结束操作的时间戳,单位毫秒 - left: - type: integer - description: 滑块最终水平偏移量,单位像素;由天爱前端控件生成 - top: - type: integer - description: 点选或模板最终垂直偏移量,单位像素;由天爱前端控件生成 - trackList: - type: array - minItems: 1 - description: 用户操作轨迹,不能为空,必须直接使用天爱前端控件产生的数据 - items: - $ref: '#/components/schemas/TianaiCaptchaTrackPoint' - data: - type: object - additionalProperties: true - description: 不同验证码类型附带的扩展数据,由天爱前端控件原样提交 - properties: {} - nullable: true - TianaiCaptchaTrackPoint: - type: object - required: - - x - - 'y' - - t - - type - properties: - x: - type: number - format: float - description: 当前轨迹点的水平坐标 - 'y': - type: number - format: float - description: 当前轨迹点的垂直坐标 - t: - type: number - format: float - description: 当前轨迹点相对操作开始时的时间,单位毫秒 - type: - type: string - description: 轨迹事件类型,例如 down、move、up - SystemImageVerificationPayload: - type: object - required: - - uuid - - code - properties: - uuid: - type: string - description: 系统图形验证码接口返回的唯一标识 - code: - type: string - description: 用户填写的图形验证码答案 - RObject: - type: object - properties: - code: - description: 系统图形验证码或响应状态码 - type: integer - example: 200 - msg: - description: 响应消息 - type: string - example: 操作成功 - data: - description: 响应数据主体 - type: object - additionalProperties: true - properties: {} - RList: - type: object - properties: - code: - description: 系统图形验证码或响应状态码 - type: integer - example: 200 - msg: - description: 响应消息 - type: string - example: 操作成功 - data: - description: 响应数据主体 - type: array - items: - type: object - additionalProperties: true - properties: {} - PageResult: - type: object - properties: - code: - description: 系统图形验证码或响应状态码 - type: integer - example: 200 - msg: - description: 响应消息 - type: string - example: 操作成功 - rows: - description: 分页数据列表 - type: array - items: - type: object - additionalProperties: true - properties: {} - total: - type: integer - example: 0 - RLogin: - type: object - properties: - code: - description: 系统图形验证码或响应状态码 - type: integer - example: 200 - msg: - description: 响应消息 - type: string - example: 操作成功 - data: - description: 响应数据主体 - $ref: '#/components/schemas/LoginVo' - LoginVo: - type: object - properties: - token: - type: string - accessToken: - type: string - tokenValue: - type: string - userId: - type: integer - format: int64 - tenantId: - description: 租户ID,用于区分不同租户的数据和验证策略 - type: string - clientId: - description: 客户端ID,对应后台客户端管理中的APP/PC/小程序等终端 - type: string - clientKey: - type: string - RFileUpload: - type: object - properties: - code: - description: 系统图形验证码或响应状态码 - type: integer - example: 200 - msg: - description: 响应消息 - type: string - example: 操作成功 - data: - description: 响应数据主体 - $ref: '#/components/schemas/FileUploadVo' - FileUploadVo: - type: object - properties: - ossId: - description: OSS文件ID,表单内部使用,用户侧应通过上传组件获取 - type: integer - format: int64 - url: - type: string - thumbnailUrl: - type: string - nullable: true - fileName: - description: 原始文件名 - type: string - originalName: - type: string - RVerificationRequire: - type: object - properties: - code: - description: 系统图形验证码或响应状态码 - type: integer - example: 200 - msg: - description: 响应消息 - type: string - example: 操作成功 - data: - description: 响应数据主体 - $ref: '#/components/schemas/VerificationRequireVo' - VerificationRequireVo: - type: object - properties: - required: - description: 当前场景是否需要验证 - type: boolean - providerCode: - description: 第三方服务商编码 - type: string - captchaType: - description: 验证码类型,例如SLIDER、ROTATE、CONCAT、WORD_IMAGE_CLICK - type: string - sceneCode: - description: APP 短信场景编码 - type: string - enum: - - APP_SMS_LOGIN - - APP_REGISTER - - APP_FORGOT_PASSWORD - - APP_PHONE_CHANGE - - APP_ACCOUNT_DEACTIVATE - ttlSeconds: - description: 验证或票据有效秒数 - type: integer - example: - required: true - providerCode: tianai - captchaType: SLIDER - sceneCode: APP_SMS_LOGIN - ttlSeconds: 300 - RVerificationChallenge: - type: object - properties: - code: - description: 系统图形验证码或响应状态码 - type: integer - example: 200 - msg: - description: 响应消息 - type: string - example: 操作成功 - data: - description: 响应数据主体 - $ref: '#/components/schemas/VerificationChallengeVo' - VerificationChallengeVo: - type: object - properties: - required: - description: 当前场景是否需要验证 - type: boolean - providerCode: - description: 第三方服务商编码 - type: string - captchaType: - description: 验证码类型,例如SLIDER、ROTATE、CONCAT、WORD_IMAGE_CLICK - type: string - challengeId: - description: 验证挑战ID,由验证挑战接口返回 - type: string - uuid: - type: string - description: 系统图形验证码 uuid - img: - type: string - description: 系统图形验证码 base64 图片 - payload: - type: object - additionalProperties: true - description: 天爱验证码数据,包括背景图、模板图、尺寸等 - properties: {} - expireSeconds: - description: 验证挑战过期秒数 - type: integer - example: - required: true - providerCode: tianai - captchaType: SLIDER - challengeId: CAPTCHA_CHALLENGE_ID - payload: - backgroundImage: data:image/png;base64,... - templateImage: data:image/png;base64,... - backgroundImageWidth: 340 - backgroundImageHeight: 180 - expireSeconds: 300 - RVerificationCheck: - type: object - properties: - code: - description: 系统图形验证码或响应状态码 - type: integer - example: 200 - msg: - description: 响应消息 - type: string - example: 操作成功 - data: - description: 响应数据主体 - $ref: '#/components/schemas/VerificationCheckVo' - VerificationCheckVo: - type: object - properties: - passed: - description: 验证是否通过 - type: boolean - validToken: - type: string - description: 验证通过后交给发送短信验证码接口的票据 - expireSeconds: - description: 验证挑战过期秒数 - type: integer - message: - description: 返回消息 - type: string - example: - passed: true - validToken: captcha-ticket - expireSeconds: 300 - message: 验证通过 - RLegacyCaptcha: - type: object - properties: - code: - description: 系统图形验证码或响应状态码 - type: integer - example: 200 - msg: - description: 响应消息 - type: string - example: 操作成功 - data: - description: 响应数据主体 - $ref: '#/components/schemas/LegacyCaptchaVo' - LegacyCaptchaVo: - type: object - properties: - captchaEnabled: - type: boolean - uuid: - description: 系统图形验证码UUID - type: string - img: - type: string - description: base64 图形验证码 - example: - captchaEnabled: true - uuid: captcha-uuid - img: data:image/png;base64,... - RGenerationPoem: - type: object - properties: - code: - description: 响应状态码 - type: integer - example: 200 - msg: - description: 响应消息 - type: string - data: - $ref: '#/components/schemas/GenerationPoemView' - GenerationPoemView: - type: object - properties: - poemId: - description: 字辈记录ID - type: integer - format: int64 - genealogyId: - description: 所属家谱ID - type: integer - format: int64 - genealogyNo: - description: 家谱编号 - type: string - genealogyName: - description: 家谱名称 - type: string - generationNo: - description: 世代序号 - type: integer - format: int64 - generationText: - description: 字辈文字 - type: string - description: - description: 字辈说明 - type: string - sortOrder: - description: 排序值,数值越小越靠前 - type: integer - format: int64 - status: - description: 状态,0正常,1停用 - type: string - RGenerationPoemList: - type: object - properties: - code: - description: 响应状态码 - type: integer - example: 200 - msg: - description: 响应消息 - type: string - data: - type: array - items: - $ref: '#/components/schemas/GenerationPoemView' - RGenerationPoemBatchPreview: - type: object - properties: - code: - description: 响应状态码 - type: integer - example: 200 - msg: - description: 响应消息 - type: string - data: - $ref: '#/components/schemas/GenerationPoemBatchPreviewView' - GenerationPoemBatchPreviewView: - type: object - properties: - genealogyId: - description: 所属家谱ID - type: integer - format: int64 - genealogyNo: - description: 家谱编号 - type: string - genealogyName: - description: 家谱名称 - type: string - createCount: - description: 将新增的字辈数量 - type: integer - updateCount: - description: 将修改或恢复的字辈数量 - type: integer - keepCount: - description: 保持不变的字辈数量 - type: integer - disableCount: - description: 将停用的字辈数量 - type: integer - items: - description: 按世代排序的逐项变更预览 - type: array - items: - $ref: '#/components/schemas/GenerationPoemBatchItemView' - GenerationPoemBatchItemView: - type: object - properties: - poemId: - description: 现有字辈记录ID;新增时为空 - type: integer - format: int64 - generationNo: - description: 世代序号 - type: integer - format: int64 - oldGenerationText: - description: 保存前字辈文字 - type: string - newGenerationText: - description: 保存后字辈文字 - type: string - oldStatus: - description: 保存前状态 - type: string - newStatus: - description: 保存后状态 - type: string - action: - description: 预览动作,create、update、keep 或 disable - type: string - warning: - description: 需要用户确认的变更提示 - type: string - RLineagePerson: - type: object - properties: - code: - description: 响应状态码 - type: integer - example: 200 - msg: - description: 响应消息 - type: string - example: 操作成功 - data: - $ref: '#/components/schemas/LineagePersonView' - LineagePersonView: - type: object - properties: - personId: - description: 人物ID - type: integer - format: int64 - genealogyId: - description: 家谱ID - type: integer - format: int64 - genealogyName: - description: 家谱名称 - type: string - genealogyNo: - description: 家谱编号 - type: string - appUserId: - description: 绑定业务用户ID - type: integer - format: int64 - nullable: true - appUserNickName: - description: 绑定业务用户昵称 - type: string - personNo: - description: 人物编号 - type: string - name: - description: 姓名 - type: string - aliasName: - description: 别名或曾用名 - type: string - sex: - description: 性别字典值 - type: string - generation: - description: 世代序号 - type: integer - format: int64 - generationName: - description: 字辈或辈分 - type: string - fatherId: - description: 父亲人物ID - type: integer - format: int64 - nullable: true - fatherName: - description: 父亲姓名 - type: string - motherId: - description: 母亲人物ID - type: integer - format: int64 - nullable: true - motherName: - description: 母亲姓名 - type: string - spouseNames: - description: 配偶姓名,多个使用顿号分隔 - type: string - avatarOssId: - description: 头像文件OSS ID - type: integer - format: int64 - nullable: true - birthDate: - description: 出生日期 - type: string - format: date-time - nullable: true - birthLunar: - description: 生日是否农历字典值 - type: string - birthPlace: - description: 出生地 - type: string - deathDate: - description: 逝世日期 - type: string - format: date-time - nullable: true - deathLunar: - description: 逝世日期是否农历字典值 - type: string - deathPlace: - description: 逝世地 - type: string - burialPlace: - description: 安葬地 - type: string - personStatus: - description: 人物状态字典值 - type: string - biography: - description: 人物简介 - type: string - sortOrder: - description: 排序值 - type: integer - format: int64 - status: - description: 数据状态,0正常、1停用 - type: string - remark: - description: 备注 - type: string - RLineagePersonList: - type: object - properties: - code: - description: 响应状态码 - type: integer - example: 200 - msg: - description: 响应消息 - type: string - example: 操作成功 - data: - type: array - items: - $ref: '#/components/schemas/LineagePersonView' - RLineagePersonTreeList: - type: object - properties: - code: - description: 响应状态码 - type: integer - example: 200 - msg: - description: 响应消息 - type: string - example: 操作成功 - data: - type: array - items: - $ref: '#/components/schemas/LineagePersonTreeView' - LineagePersonTreeView: - allOf: - - $ref: '#/components/schemas/LineagePersonView' - - type: object - properties: - relationType: - description: 与当前树节点的关系类型 - type: string - relationName: - description: 关系显示名称 - type: string - spouses: - description: 配偶节点 - type: array - items: - $ref: '#/components/schemas/LineagePersonTreeView' - children: - description: 子女节点 - type: array - items: - $ref: '#/components/schemas/LineagePersonTreeView' - LineagePersonPageResult: - type: object - properties: - code: - description: 响应状态码 - type: integer - example: 200 - msg: - description: 响应消息 - type: string - example: 操作成功 - rows: - description: 当前页世系人物 - type: array - items: - $ref: '#/components/schemas/LineagePersonView' - total: - description: 总记录数 - type: integer - format: int64 - example: 0 - RFamilyFeedComment: - type: object - properties: - code: - description: 响应状态码 - type: integer - example: 200 - msg: - description: 响应消息 - type: string - data: - $ref: '#/components/schemas/FamilyFeedCommentView' - FamilyFeedCommentView: - type: object - properties: - commentId: - description: 评论 ID - type: integer - format: int64 - genealogyId: - description: 所属家谱 ID - type: integer - format: int64 - feedId: - description: 所属动态 ID - type: integer - format: int64 - parentCommentId: - description: 父评论 ID;null 或 0 表示一级评论 - type: integer - format: int64 - nullable: true - appUserId: - description: 评论业务用户 ID - type: integer - format: int64 - appUserNickName: - description: 评论人昵称 - type: string - appUserAvatar: - description: 评论人头像文件 ID - type: integer - format: int64 - nullable: true - parentAppUserId: - description: 被直接回复的业务用户 ID - type: integer - format: int64 - nullable: true - parentAppUserNickName: - description: 被直接回复的用户昵称 - type: string - nullable: true - commentContent: - description: 评论内容;作者删除后为 null - type: string - nullable: true - userDeleted: - description: 作者删除状态,0 未删除,1 已删除并保留占位 - type: string - enum: - - '0' - - '1' - example: '0' - replyCount: - description: 正常展示的直接回复数量 - type: integer - format: int64 - commentLevel: - description: 评论层级,root 为一级评论,reply 为回复 - type: string - enum: - - root - - reply - status: - description: 可见状态;会员接口仅返回 0(正常展示) - type: string - example: '0' - createTime: - description: 评论发布时间 - type: string - format: date-time - RFamilyFeedCommentList: - type: object - properties: - code: - description: 响应状态码 - type: integer - example: 200 - msg: - description: 响应消息 - type: string - data: - type: array - items: - $ref: '#/components/schemas/FamilyFeedCommentView' - FamilyFeedCommentPageResult: - type: object - properties: - code: - description: 响应状态码 - type: integer - example: 200 - msg: - description: 响应消息 - type: string - rows: - description: 评论分页数据 - type: array - items: - $ref: '#/components/schemas/FamilyFeedCommentView' - total: - description: 评论总数 - type: integer - format: int64 - responses: - VoidResult: - description: 通用成功响应 - content: - application/json: - schema: - $ref: '#/components/schemas/RVoid' - ObjectResult: - description: 通用对象响应 - content: - application/json: - schema: - $ref: '#/components/schemas/RObject' - ListResult: - description: 通用列表响应 - content: - application/json: - schema: - $ref: '#/components/schemas/RList' - PageResult: - description: 通用分页响应 - content: - application/json: - schema: - $ref: '#/components/schemas/PageResult' - LoginResult: - description: 登录结果 - content: - application/json: - schema: - $ref: '#/components/schemas/RLogin' - FileUploadResult: - description: 文件上传结果 - content: - application/json: - schema: - $ref: '#/components/schemas/RFileUpload' - VerificationRequireResult: - description: 验证需求查询结果 - content: - application/json: - schema: - $ref: '#/components/schemas/RVerificationRequire' - VerificationChallengeResult: - description: 验证挑战生成结果 - content: - application/json: - schema: - $ref: '#/components/schemas/RVerificationChallenge' - VerificationCheckResult: - description: 验证校验结果 - content: - application/json: - schema: - $ref: '#/components/schemas/RVerificationCheck' - LegacyCaptchaResult: - description: 兼容旧图形验证码结果 - content: - application/json: - schema: - $ref: '#/components/schemas/RLegacyCaptcha' - GenerationPoemResult: - description: 字辈详情响应 - content: - application/json: - schema: - $ref: '#/components/schemas/RGenerationPoem' - GenerationPoemListResult: - description: 字辈列表响应 - content: - application/json: - schema: - $ref: '#/components/schemas/RGenerationPoemList' - GenerationPoemBatchPreviewResult: - description: 字辈批量预览响应 - content: - application/json: - schema: - $ref: '#/components/schemas/RGenerationPoemBatchPreview' - LineagePersonResult: - description: 世系人物详情响应 - content: - application/json: - schema: - $ref: '#/components/schemas/RLineagePerson' - LineagePersonListResult: - description: 世系人物列表或选项响应 - content: - application/json: - schema: - $ref: '#/components/schemas/RLineagePersonList' - LineagePersonTreeResult: - description: 世系树响应 - content: - application/json: - schema: - $ref: '#/components/schemas/RLineagePersonTreeList' - LineagePersonPageResult: - description: 世系人物分页响应 - content: - application/json: - schema: - $ref: '#/components/schemas/LineagePersonPageResult' - FamilyFeedCommentResult: - description: 家族圈评论对象响应 - content: - application/json: - schema: - $ref: '#/components/schemas/RFamilyFeedComment' - FamilyFeedCommentListResult: - description: 家族圈评论列表响应 - content: - application/json: - schema: - $ref: '#/components/schemas/RFamilyFeedCommentList' - FamilyFeedCommentPageResult: - description: 家族圈评论分页响应 - content: - application/json: - schema: - $ref: '#/components/schemas/FamilyFeedCommentPageResult' - securitySchemes: - SaToken: - type: apiKey - in: header - name: Authorization - description: 登录后返回的 token。若本地配置使用 sa-token 名称,请按项目实际 token-name 调整。 -servers: [] -security: - - SaToken: [] diff --git a/data/mock.js b/data/mock.js index 0ad428b..d424b46 100644 --- a/data/mock.js +++ b/data/mock.js @@ -401,18 +401,14 @@ export const findTreeMemberPresentationFixture = (genealogyId, personId) => { // mock API 只能通过下方 list/find 查询取得深拷贝,不能把页面草稿写回正式列表。 const familyFeeds = [ { - id: '1', genealogyId: '1001', tag: '团圆记忆', time: '今天 10:24', - title: '端午家宴', content: '今年端午全家相聚,长辈讲起祖居旧事,孩子们也为大家拍下了新的全家福。饭后我们把照片和口述片段整理进家族档案,让这份热闹成为往后仍能翻看的共同记忆。', - author: '汤正国', - comments: [ - { id: '1', author: '汤淑华', time: '今天 10:42', content: '一家人能常常相聚,就是最珍贵的福气。' }, - { id: '2', author: '汤文清', time: '今天 11:08', content: '照片已经整理好了,晚些时候放进春节团圆相册。' } - ] + feedId: '1', genealogyId: '1001', feedType: '团圆记忆', createTime: '今天 10:24', + feedContent: '今年端午全家相聚,长辈讲起祖居旧事,孩子们也为大家拍下了新的全家福。饭后我们把照片和口述片段整理进家族档案,让这份热闹成为往后仍能翻看的共同记忆。', + publisherNickName: '汤正国', mediaOssIds: '', likedByMe: false, likeCount: 0, commentCount: 2, pinned: '0' }, { - id: '2', genealogyId: '1001', tag: '家族通知', time: '昨天 18:02', - title: '修谱资料征集', content: '请家人补充老照片中的人物姓名、拍摄时间和地点。无法确认的信息也可以先写下线索,由熟悉往事的长辈共同核对。', - author: '谱主', comments: [] + feedId: '2', genealogyId: '1001', feedType: '家族通知', createTime: '昨天 18:02', + feedContent: '请家人补充老照片中的人物姓名、拍摄时间和地点。无法确认的信息也可以先写下线索,由熟悉往事的长辈共同核对。', + publisherNickName: '谱主', mediaOssIds: '', likedByMe: false, likeCount: 0, commentCount: 0, pinned: '0' } ] @@ -476,10 +472,7 @@ const familyAlbums = [ } ] -const cloneFamilyFeedFixture = (feed) => ({ - ...feed, - comments: feed.comments.map((comment) => ({ ...comment })) -}) +const cloneFamilyFeedFixture = (feed) => ({ ...feed }) const cloneFamilyArticleFixture = (article) => ({ ...article, paragraphs: [...article.paragraphs] @@ -510,8 +503,15 @@ const findScopedFamilyFixture = (items, clone, genealogyId, entityId) => { export const listFamilyFeedFixtures = (genealogyId) => listScopedFamilyFixtures(familyFeeds, cloneFamilyFeedFixture, genealogyId) -export const findFamilyFeedFixture = (genealogyId, feedId) => - findScopedFamilyFixture(familyFeeds, cloneFamilyFeedFixture, genealogyId, feedId) +export const findFamilyFeedFixture = (genealogyId, feedId) => { + const normalizedGenealogyId = String(genealogyId || '') + const normalizedFeedId = String(feedId || '') + if (!normalizedGenealogyId || !normalizedFeedId) return null + const feed = familyFeeds.find( + (candidate) => candidate.genealogyId === normalizedGenealogyId && candidate.feedId === normalizedFeedId + ) + return feed ? cloneFamilyFeedFixture(feed) : null +} export const listFamilyArticleFixtures = (genealogyId) => listScopedFamilyFixtures(familyArticles, cloneFamilyArticleFixture, genealogyId) export const findFamilyArticleFixture = (genealogyId, articleId) => diff --git a/docs/APP-136请求参数字段核对表-2026-07-26.md b/docs/APP-136请求参数字段核对表-2026-07-26.md index 6f59fc8..6eb0a36 100644 --- a/docs/APP-136请求参数字段核对表-2026-07-26.md +++ b/docs/APP-136请求参数字段核对表-2026-07-26.md @@ -49,7 +49,7 @@ | `GenealogyOwnerTransferBody` | 无 | `targetMemberId` | — | 缺成员候选与产品入口,不能手填 ID | | `GenerationPoemBody` | G12 | `generationNo`、`generationText` | `description`、`sortOrder`、`status` | 已真实维护/回读 | | `GenerationPoemBatchBody` | G12 | `poemText` | `disableMissing` | 已真实预览/保存回读 | -| `LineagePersonBody` | T04/T05/T06、R02 | `name` | `appUserId`、`personNo`、`aliasName`、`sex`、`generation`、`generationName`、`fatherId`、`motherId`、`avatarOssId`、`birthDate`、`birthLunar`、`birthPlace`、`deathDate`、`deathLunar`、`deathPlace`、`burialPlace`、`personStatus`、`biography`、`sortOrder`、`remark`、`relationName` | 首位成员最小合法请求仍 `code:500`;业务用户/父母候选、性别/状态字典、头像 `ossId` 均无安全闭环 | +| `LineagePersonBody` | T04/T05/T06、R02 | `name`、`bindingMode` | `appUserId`、`personNo`、`aliasName`、`sex`、`generation`、`generationName`、`fatherId`、`motherId`、`avatarOssId`、`birthDate`、`birthLunar`、`birthPlace`、`deathDate`、`deathLunar`、`deathPlace`、`burialPlace`、`personStatus`、`biography`、`sortOrder`、`remark`、`relationName` | `bindingMode` 固定为 `NONE` / `SELF` / `SPECIFIED`:前两者禁止提交 `appUserId`,后者必须提交;`SELF` 后端从 Token 获取当前用户。页面默认 `NONE`;`SPECIFIED` 仍缺可信候选接口。实测 `NONE` 无 `appUserId` 的新增子女仍返回业务 `code:500`,等待后端排查新版写接口 | | `FamilyFeedBody` | F02/F03 编辑入口缺失 | `feedContent` | `feedType`、`mediaOssIds`、`sortOrder`、`status` | 文本动态已真实创建/回读;媒体受 `ossId` 阻塞;编辑无产品入口 | | `FamilyFeedCommentBody` | F03 | `commentContent` | `parentCommentId` | 一级评论已真实创建/回读;回复 UI 未设计 | | `ArticleBody` | F06 | `articleTitle`、`articleContent` | `categoryId`、`articleSummary`、`coverOssId`、`authorName`、`sortOrder`、`status` | 已真实创建/回读;分类条目 DTO、封面 `ossId` 阻塞 | diff --git a/docs/Apifox写接口字段—表单控件映射-2026-07-27.md b/docs/Apifox写接口字段—表单控件映射-2026-07-27.md new file mode 100644 index 0000000..f007c8f --- /dev/null +++ b/docs/Apifox写接口字段—表单控件映射-2026-07-27.md @@ -0,0 +1,195 @@ +# Apifox 写接口字段—表单控件映射 + +## 口径与来源 + +- 核对时间:2026-07-27。 +- 主源:桌面 Apifox 当前 `APP` 项目中的接口详情;根目录 `家谱.openapi.json` 只用于补全接口路径和没有展示在当前屏幕中的普通字段。 +- `必填` 以 Apifox `必需` 标记为准;没有 `必需` 的字段均应允许不填,提交时传空值或省略由当前 API 适配器统一处理。 +- `枚举选择` 只能提交下表列出的 value,不能把中文标签提交给后端。 +- `候选选择` 只能从对应选项接口选取,页面不得暴露裸露的内部 ID 输入框。 +- `上传` 必须先走统一上传,提交上传回执中的 `ossId`;不能让用户手输 OSS ID。 +- 所有 `sortOrder` 是整数数字框;所有 `amount/giftAmount` 是金额数字框;示例为 `yyyy-MM-dd HH:mm:ss` 的时间字段用“日期 + 时间”控件拼接后提交。 + +## 已在 Apifox 字段详情中确认的字典 + +| 字段/字典 | value → 中文 | 页面控件 | +| --- | --- | --- | +| `sys_user_sex` | `0` 男;`1` 女;`2` 未知 | 单选/下拉选择 | +| `gen_number_yes_no` | `0` 否;`1` 是 | 单选/下拉选择 | +| `gen_lineage_person_status` | `0` 健在;`1` 已故;`2` 未知 | 单选/下拉选择 | +| `sys_normal_disable` | `0` 正常;`1` 停用 | 单选/开关;默认 `0` | +| `gen_genealogy_visibility` | `0` 私密;`1` 公开;`2` 成员可见 | 单选/下拉选择 | +| `gen_genealogy_join_mode` | `0` 关闭加入;`1` 申请审核;`2` 邀请加入 | 单选/下拉选择 | +| `gen_merit_type` | `donation` 捐赠;`repair` 修祠;`public` 公益;`other` 其他 | 单选/下拉选择 | +| 活动邀请响应 | `ACCEPTED` 接受;`DECLINED` 拒绝 | 二选一 | + +`completed` 在 Apifox 当前详情中是 `string`,只给出示例 `0`,没有挂字典/允许值;因此不能伪造“完成/未完成”的值表。当前页面应默认省略,待后端给出该字段的字典定义后再开启开关。 + +## 已有页面:字段到控件映射 + +### M02 修改用户资料 — `PUT /genealogy/app/auth/profile` + +| 字段 | 必填 | Apifox 详情 | 正确控件与提交 | +| --- | --- | --- | --- | +| `nickName` | 否 | string,用户昵称,最多 30 字 | 文本框,最多 30 字 | +| `realName` | 否 | string,真实姓名,最多 30 字 | 文本框,最多 30 字 | +| `avatar` | 否 | int64,头像文件 OSS ID | 图片上传;仅提交可安全表示的数值 OSS ID | +| `sex` | 否 | `sys_user_sex` | 枚举选择 `0/1/2` | +| `birthday` | 否 | date,生日,格式 `yyyy-MM-dd` | 日期选择器 | +| `email` | 否 | email,最多 100 字 | email 文本框 | + +### G03/G11 创建、修改家谱 — `GenealogyCreateBody` / `GenealogyUpdateBody` + +| 字段 | 创建必填 | 正确控件与提交 | +| --- | --- | --- | +| `genealogyName` | 是 | 文本框 | +| `surname` | 是 | 文本框 | +| `ancestralHall` | 否 | 文本框 | +| `originPlace` | 否 | 文本框 | +| `regionCode` | 是 | 省市区级联候选选择,提交行政区划 code | +| `addressDetail` | 否 | 文本框 | +| `coverOssId` | 否 | 图片上传,提交字符串 OSS ID | +| `intro` | 否 | 多行文本 | +| `visibility` | 否 | 枚举选择:私密 `0` / 公开 `1` / 成员可见 `2` | +| `joinMode` | 否 | 枚举选择:关闭加入 `0` / 申请审核 `1` / 邀请加入 `2` | + +### T04/T05 录入、修改世系人物 — `LineagePersonBody` + +同一 body 还用于“添加子女、父母、兄弟姐妹、配偶”。`name` 是唯一 body 必填字段;关系路径由 URL 决定,不能把中文关系标签当成接口字段替代。 + +| 字段 | 必填 | Apifox 详情/限制 | 正确控件与提交 | +| --- | --- | --- | --- | +| `bindingMode` | 是 | 身份认领方式:`NONE` / `SELF` / `SPECIFIED` | 固定英文枚举选择:不绑定账号 / 绑定当前账号 / 绑定指定用户;不发送中文值 | +| `appUserId` | 视 `bindingMode` 而定 | `NONE` 不绑定账号且不传;`SELF` 绑定当前登录账号且不传,后端从 Token 获取;`SPECIFIED` 绑定指定业务用户且必须传 | 仅 `SPECIFIED` 由管理员选择可信业务用户候选后提交;当前没有候选接口时禁止该选项保存,绝不手输 ID | +| `personNo` | 否 | 人物编号;不传由服务端生成 | 可选文本框;留空时省略 | +| `name` | 是 | 姓名 | 文本框 + 必填校验 | +| `aliasName` | 否 | 别名或曾用名 | 文本框 | +| `sex` | 否 | `sys_user_sex` | 枚举选择:男 `0` / 女 `1` / 未知 `2` | +| `generation` | 否 | int64,世代序号 | 正整数数字框;首位成员固定为 `1` | +| `generationName` | 否 | 字辈或辈分 | 文本框 | +| `fatherId` | 否 | 父亲人物 ID,必须属于当前家谱 | 从 `/lineage/persons/options` 选择父亲,提交人物 ID | +| `motherId` | 否 | 母亲人物 ID,必须属于当前家谱 | 从 `/lineage/persons/options` 选择母亲,提交人物 ID | +| `avatarOssId` | 否 | string/null,头像文件 OSS ID;说明明确要求统一上传组件取得,不允许手工录入 | 图片上传,提交字符串 OSS ID | +| `birthDate` | 否 | date-time/null(写接口示例为 `yyyy-MM-dd`) | 日期选择;未录入不传 | +| `birthLunar` | 否 | `gen_number_yes_no` | 枚举选择:否 `0` / 是 `1` | +| `birthPlace` | 否 | 出生地 | 文本框 | +| `deathDate` | 否 | date-time/null(写接口示例为 `yyyy-MM-dd`) | 日期选择;未录入不传 | +| `deathLunar` | 否 | `gen_number_yes_no` | 枚举选择:否 `0` / 是 `1` | +| `deathPlace` | 否 | 逝世地 | 文本框 | +| `burialPlace` | 否 | 安葬地 | 文本框 | +| `personStatus` | 否 | `gen_lineage_person_status` | 枚举选择:健在 `0` / 已故 `1` / 未知 `2` | +| `biography` | 否 | 人物简介 | 多行文本 | +| `sortOrder` | 否 | int64,排序值 | 整数数字框 | +| `remark` | 否 | 备注 | 多行文本 | +| `relationName` | 否 | 关系名称 | 新增亲属时由关系选择派生;编辑时可作为文本修订 | + +#### 页面实测(2026-07-27) + +- 此接口字段标为 `date-time`,但四个写接口示例使用 `yyyy-MM-dd`。页面此前把日期追加为 `yyyy-MM-dd HH:mm:ss`,会在客户端 `normalizeLineagePersonDate` 校验阶段被拒绝,尚未发起请求;现已改为只传日期。 +- 后端于 2026-07-27 明确补齐身份认领合同:`NONE`、`SELF` 禁止提交 `appUserId`;`SELF` 由后端从 Token 取当前 APP 用户;仅 `SPECIFIED` 必须提交 `appUserId`。页面默认 `NONE`,不再自动读取或提交 `profile.userId`。 +- 同日页面实测 `POST .../children`:请求体为 `bindingMode: "NONE"` 且不存在 `appUserId`,后端仍返回 HTTP 200 / envelope `code:500`、`发生未知异常,请联系管理员`;三世数据未落库,需后端确认新版写接口是否已部署并排查该业务异常。 + +### F02 家族圈动态 — `FamilyFeedBody` + +| 字段 | 必填 | Apifox 详情 | 正确控件与提交 | +| --- | --- | --- | --- | +| `feedType` | 否 | 动态类型;未传默认 `text` | 当前页面固定传 `text`,不让用户输入代码 | +| `feedContent` | 是 | 动态内容,不允许为空 | 多行文本 + 必填校验 | +| `mediaOssIds` | 否 | 多个文件 OSS ID 用英文逗号分隔 | 多图上传;回执 ID 以 `,` 拼接 | +| `sortOrder` | 否 | int64;未传默认 `0` | 整数数字框 | +| `status` | 否 | `sys_normal_disable` | 正常 `0` / 停用 `1`;创建页默认 `0`,非管理页不暴露停用操作 | + +### F06 谱文、F07 相册、F09 相册照片 + +| body.字段 | 必填 | 正确控件与提交 | +| --- | --- | --- | +| `ArticleBody.categoryId` | 否 | 从“谱文分类”接口候选选择;不手填分类 ID | +| `articleTitle` / `articleSummary` / `authorName` | 标题是 | 分别为文本、多行摘要、文本 | +| `articleContent` | 是 | 富文本/多行内容编辑 | +| `coverOssId` | 否 | 图片上传,字符串 OSS ID | +| `ArticleBody.sortOrder` | 否 | 整数数字框 | +| `ArticleBody.status` | 否 | `sys_normal_disable` 选择,默认 `0` | +| `AlbumBody.albumName` | 是 | 文本框 | +| `albumDesc` | 否 | 多行文本 | +| `coverOssId` | 否 | 图片上传,字符串 OSS ID | +| `AlbumBody.sortOrder` | 否 | 整数数字框 | +| `AlbumBody.status` | 否 | `sys_normal_disable` 选择,默认 `0` | +| `AlbumPhotoBody.ossId` | 是 | 图片上传;提交字符串 OSS ID | +| `photoTitle` / `photoDesc` / `photographer` | 否 | 文本、多行文本、文本 | +| `shootTime` | 否 | 拍摄时间;示例按标准时间字符串 | 日期 + 时间选择 | +| `AlbumPhotoBody.sortOrder` | 否 | 整数数字框 | +| `AlbumPhotoBody.status` | 否 | `sys_normal_disable` 选择,默认 `0` | + +### R07 祭祀活动、R04 献礼 + +| body.字段 | 必填 | 正确控件与提交 | +| --- | --- | --- | +| `CeremonyBody.ceremonyType` | 是 | Apifox 当前为普通 string;文本框,不能自行伪造枚举 | +| `ceremonyTitle` | 是 | 文本框 | +| `ceremonyDesc` | 否 | 多行文本 | +| `ceremonyTime` | 否 | 示例为 `yyyy-MM-dd HH:mm:ss`;日期 + 时间选择 | +| `location` / `locationAddress` | 否 | 地点名称、详细地址文本框;两项都应保留 | +| `longitude` / `latitude` | 否 | decimal 数字框;应由地图选点回填,不能把经纬度当文本 | +| `coverOssId` | 否 | 图片上传,字符串 OSS ID | +| `sortOrder` | 否 | 整数数字框 | +| `status` | 否 | `sys_normal_disable` 选择,默认 `0` | +| `CeremonyGiftBody.giverName` | 否 | 文本框 | +| `giftAmount` | 是 | 金额数字框 | +| `giftMessage` | 否 | 多行文本 | + +### R08 成长记录、R09 亲友记录、R10 备忘、R11 功德 + +| body.字段 | 必填 | Apifox 详情/正确控件 | +| --- | --- | --- | +| `GrowthRecordBody.lineagePersonId` | 否 | 世系人物候选选择,提交人物 ID | +| `recordType` | 否 | 当前详情为普通 string,文本框 | +| `recordTitle` | 是 | 文本框 | +| `recordContent` | 否 | 多行文本 | +| `recordDate` / `remindTime` | 否 | 示例均为 `yyyy-MM-dd HH:mm:ss`;日期 + 时间选择 | +| `mediaOssIds` | 否 | 多图上传,逗号分隔 OSS ID | +| `GrowthRecordBody.sortOrder` / `status` | 否 | 整数数字框;`sys_normal_disable` 选择 | +| `MemoBody.memoTitle` | 是 | 文本框 | +| `memoContent` | 否 | 多行文本 | +| `remindTime` | 否 | 示例为 `yyyy-MM-dd HH:mm:ss`;日期 + 时间选择 | +| `completed` | 否 | 当前仅 string 示例 `0`,无字典;默认省略,不能私设枚举 | +| `MemoBody.mediaOssIds` / `sortOrder` / `status` | 否 | 多图上传;整数数字框;`sys_normal_disable` 选择 | +| `RelativeRecordBody.relativeName` | 是 | 文本框 | +| `relationName` / `eventName` | 否 | 文本框 | +| `eventTime` | 否 | 示例为 `yyyy-MM-dd HH:mm:ss`;日期 + 时间选择 | +| `giftAmount` | 否 | 金额数字框 | +| `recordContent` | 否 | 多行文本 | +| `RelativeRecordBody.mediaOssIds` / `sortOrder` / `status` | 否 | 多图上传;整数数字框;`sys_normal_disable` 选择 | +| `MeritRecordBody.donorName` / `meritTitle` | 是 | 文本框 | +| `meritType` | 否 | 枚举选择:捐赠 `donation` / 修祠 `repair` / 公益 `public` / 其他 `other` | +| `meritContent` | 否 | 多行文本 | +| `amount` | 否 | 金额数字框 | +| `meritTime` | 否 | 示例为 `yyyy-MM-dd HH:mm:ss`;日期 + 时间选择 | +| `MeritRecordBody.sortOrder` / `status` | 否 | 整数数字框;`sys_normal_disable` 选择 | + +## 其余写接口:同样必须按字段类型建控件 + +| 接口 body | 字段映射 | +| --- | --- | +| `GenealogyJoinApplyBody` | `applicantName`、`phone`、`relationDesc`、`applyReason` 为文本/多行文本;`inviterUserId` 必须是业务用户候选选择,当前缺候选接口时不暴露裸 ID 输入。 | +| `GenealogyJoinAuditBody` | `status` 是审核结果,必须由 Apifox 的审核状态字典提供选项后才做选择器;`auditRemark` 多行文本。 | +| `GenealogyMemberUpdateBody` | `memberName`、`relationName`、`roleType` 文本;`lineagePersonId` 为世系人物候选选择。 | +| `GenealogyOwnerTransferBody` | `targetMemberId` 必填,家谱成员候选选择。 | +| `GenerationPoemBody` | `generationNo` 必填正整数;`generationText` 必填文本;`description` 多行文本;`sortOrder` 数字;`status` 用 `sys_normal_disable`。 | +| `GenerationPoemBatchBody` | `poemText` 必填多行文本;`disableMissing` 布尔开关。 | +| `FamilyFeedCommentBody` | `parentCommentId` 为评论候选/回复上下文,不能输入 ID;`commentContent` 必填多行文本。 | +| `FeedbackBody` | `feedbackType` 当前详情为 string,待字典明确前为文本;`feedbackContent` 必填多行文本;`contactInfo` 文本。 | +| `VipOrderBody` | `packageId` 必填,VIP 套餐候选选择;`genealogyId` 为当前家谱上下文选择;`payType` 只能使用支付方式字典,不能手填代码。 | +| `VideoBody` | `videoTitle` 必填文本,`videoDesc` 多行文本,`coverOssId`/`videoOssId` 为上传,`durationSeconds`/`sortOrder` 为数字,`status` 为 `sys_normal_disable`。 | +| `CeremonyInviteesBody` | `inviteeUserIds` 必填多选业务用户候选;无候选接口不能用逗号文本代替数组。 | +| `CeremonyInvitationResponseBody` | `inviteStatus` 必填二选一:接受 `ACCEPTED`、拒绝 `DECLINED`。 | + +## 非页面直接填写的底层接口 + +认证挑战、验证码、分片上传初始化/完成、文件引用等 body 由登录/上传流程生成,不应渲染为业务表单。`grantType`、`tenantId`、`challengeId`、`validToken`、文件 hash/分片大小等由对应流程拥有,不能让用户在页面中编辑。 + +## 当前改造判定 + +1. 已经可以立即改为选择控件的字段:`sex`、出生/逝世农历、`personStatus`、`visibility`、`joinMode`、所有 `status`、`meritType`、邀请响应。 +2. 必须改为候选选择的字段:所有家谱/成员/世系人物/分类/套餐/受邀用户的 ID 字段。 +3. 必须改为上传的字段:所有 `*OssId`、`mediaOssIds`、头像、封面、照片、视频文件。 +4. `completed`、`feedbackType`、`payType`、审核 `status` 等尚未在当前 Apifox 字段详情给出允许值;在后端未提供字典或候选接口前,不增加猜测性选择项。 diff --git a/docs/后端接口缺口与首位成员阻塞清单-2026-07-24.md b/docs/后端接口缺口与首位成员阻塞清单-2026-07-24.md index c51a1d3..a051082 100644 --- a/docs/后端接口缺口与首位成员阻塞清单-2026-07-24.md +++ b/docs/后端接口缺口与首位成员阻塞清单-2026-07-24.md @@ -514,6 +514,16 @@ HTTP 200 / code:200 / data: [] | B11 | 谱文分类仍返回 `HTTP 200 / code:200 / data:[]` | 测试谱没有分类;仍需分类 DTO 与可用测试候选才能验证选择/写入 | | B12 | `GET /genealogy/region/path/110101`、`GET /genealogy/region/110101`、`GET /genealogy/region/search?keyword=北京&limit=10` 均返回包含 `value`、`label`、`regionCode`、层级等字段的真实数据 | 后端已补齐可消费条目;待产品确认搜索/回填交互后接入页面 | +### 2.2 世系人物身份认领合同增补(2026-07-27) + +后端新增 `bindingMode`,所有 T04/T05 人物新增、修改及父母/子女/兄弟姐妹/配偶关系写入统一使用: + +- `NONE`:不绑定账号,禁止提交 `appUserId`。 +- `SELF`:绑定当前登录账号,禁止提交 `appUserId`,后端从 Token 获取。 +- `SPECIFIED`:绑定指定业务用户,必须提交 `appUserId`。 + +页面已默认 `NONE` 并移除“自动读取 profile.userId 后提交”的旧路径。真实 `POST .../children` 已按 `bindingMode:"NONE"`、无 `appUserId` 发出,但仍收到 HTTP `200` / envelope `code:500` / `发生未知异常,请联系管理员`,人物未落库。B06 在新版合同下仍未闭环;需后端确认新包部署状态并给出该异常的业务原因。 + ### 3. 未发起写入请求的原因(不是漏测) | 编号 | 接口/功能 | 未发起的原因 | 后端需要提供 | diff --git a/pages/family/f06-article-editor.vue b/pages/family/f06-article-editor.vue index c98d0b5..008ea15 100644 --- a/pages/family/f06-article-editor.vue +++ b/pages/family/f06-article-editor.vue @@ -79,7 +79,7 @@ import ModulePageBackground from "@/components/ModulePageBackground.vue"; import PageHeader from "@/components/PageHeader.vue"; import { appApi, createRequestController, isRequestCancelled } from "@/utils/api.js"; import { createDiscardConfirmation } from "@/utils/discard-confirmation.js"; -import { isImagePickCancelled, pickAndUploadImage, toConsumerOssId } from "@/utils/resumable-image-upload.js"; +import { isImagePickCancelled, pickAndUploadImage } from "@/utils/resumable-image-upload.js"; import { goBack, handleBackPress, returnTo, runBackGuard } from "@/utils/navigation.js"; const editorState = ref("form"); @@ -135,7 +135,7 @@ const uploadCover = async () => { uploadError.value = ""; try { const receipt = await pickAndUploadImage({ requestController }); - coverOssId.value = toConsumerOssId(receipt.ossId); + coverOssId.value = receipt.ossId; coverFileName.value = receipt.fileName || "封面图片"; } catch (error) { if (!isImagePickCancelled(error) && !isRequestCancelled(error)) { diff --git a/pages/family/f07-album-list.vue b/pages/family/f07-album-list.vue index b0b4e54..bf87b10 100644 --- a/pages/family/f07-album-list.vue +++ b/pages/family/f07-album-list.vue @@ -31,7 +31,7 @@ import AppLoading from "@/components/AppLoading.vue"; import ModulePageBackground from "@/components/ModulePageBackground.vue"; import PageHeader from "@/components/PageHeader.vue"; import { appApi, createRequestController, isRequestCancelled } from "@/utils/api.js"; -import { isImagePickCancelled, pickAndUploadImage, toConsumerOssId } from "@/utils/resumable-image-upload.js"; +import { isImagePickCancelled, pickAndUploadImage } from "@/utils/resumable-image-upload.js"; import { goBack, handleBackPress, openPage, runBackGuard } from "@/utils/navigation.js"; const genealogyId = ref(""); @@ -78,7 +78,7 @@ const uploadCover = async () => { if (uploading.value || isSubmitting.value) return; uploading.value = true; uploadError.value = ""; - try { const receipt = await pickAndUploadImage({ requestController: controller }); coverOssId.value = toConsumerOssId(receipt.ossId); coverFileName.value = receipt.fileName || "封面图片"; } + try { const receipt = await pickAndUploadImage({ requestController: controller }); coverOssId.value = receipt.ossId; coverFileName.value = receipt.fileName || "封面图片"; } catch (error) { if (!isImagePickCancelled(error) && !isRequestCancelled(error)) uploadError.value = error?.message || "封面图片上传失败,请稍后重试。"; } finally { uploading.value = false; } }; diff --git a/pages/family/f09-media-upload.vue b/pages/family/f09-media-upload.vue index 744a43f..0907a33 100644 --- a/pages/family/f09-media-upload.vue +++ b/pages/family/f09-media-upload.vue @@ -75,7 +75,7 @@ import AppDialog from "@/components/AppDialog.vue"; import ModulePageBackground from "@/components/ModulePageBackground.vue"; import PageHeader from "@/components/PageHeader.vue"; import { appApi, createRequestController, isRequestCancelled } from "@/utils/api.js"; -import { isImagePickCancelled, pickAndUploadImage, toConsumerOssId } from "@/utils/resumable-image-upload.js"; +import { isImagePickCancelled, pickAndUploadImage } from "@/utils/resumable-image-upload.js"; import { createDiscardConfirmation } from "@/utils/discard-confirmation.js"; import { goBack, handleBackPress, returnTo, runBackGuard } from "@/utils/navigation.js"; @@ -135,7 +135,7 @@ const submitPhoto = async () => { await appApi.createAlbumPhoto(genealogyId.value, albumId.value, { ...photoForm, shootTime: shootTime.value, - ossId: toConsumerOssId(receipt.value.ossId), + ossId: receipt.value.ossId, }, { requestController: controller }); pageState.value = "success"; } catch (error) { diff --git a/pages/genealogy/g03-create-genealogy.vue b/pages/genealogy/g03-create-genealogy.vue index 2029563..9120683 100644 --- a/pages/genealogy/g03-create-genealogy.vue +++ b/pages/genealogy/g03-create-genealogy.vue @@ -137,7 +137,7 @@ import PageHeader from "@/components/PageHeader.vue"; import { appApi, createRequestController, isRequestCancelled } from "@/utils/api.js"; import { createDiscardConfirmation } from "@/utils/discard-confirmation.js"; import { GENEALOGY_ACCESS_PRESET, GENEALOGY_ACCESS_PRESET_OPTIONS, toApiGenealogyAccess } from "@/utils/genealogy-contracts.js"; -import { isImagePickCancelled, pickAndUploadImage, toConsumerOssId } from "@/utils/resumable-image-upload.js"; +import { isImagePickCancelled, pickAndUploadImage } from "@/utils/resumable-image-upload.js"; import { finishPage, handleBackPress, runBackGuard } from "@/utils/navigation.js"; const form = reactive({ @@ -307,7 +307,7 @@ const uploadCover = async () => { try { const receipt = await pickAndUploadImage({ requestController: createController }); if (!pageActive) return; - coverOssId.value = toConsumerOssId(receipt.ossId); + coverOssId.value = receipt.ossId; coverFileName.value = receipt.fileName || "封面图片"; } catch (error) { if (pageActive && !isImagePickCancelled(error) && !isRequestCancelled(error)) { diff --git a/pages/genealogy/g11-genealogy-settings.vue b/pages/genealogy/g11-genealogy-settings.vue index e807eac..00a065c 100644 --- a/pages/genealogy/g11-genealogy-settings.vue +++ b/pages/genealogy/g11-genealogy-settings.vue @@ -113,7 +113,7 @@ import GenealogyPageBackground from "@/components/GenealogyPageBackground.vue"; import PageHeader from "@/components/PageHeader.vue"; import { appApi, createRequestController, isRequestCancelled } from "@/utils/api.js"; import { GENEALOGY_ACCESS_PRESET, GENEALOGY_ACCESS_PRESET_OPTIONS, toApiGenealogyAccess } from "@/utils/genealogy-contracts.js"; -import { isImagePickCancelled, pickAndUploadImage, toConsumerOssId } from "@/utils/resumable-image-upload.js"; +import { isImagePickCancelled, pickAndUploadImage } from "@/utils/resumable-image-upload.js"; import { goBack, returnTo } from "@/utils/navigation.js"; const genealogyId = ref(""); @@ -284,7 +284,7 @@ const uploadCover = async () => { try { const receipt = await pickAndUploadImage({ requestController: controller }); if (!pageActive) return; - coverOssId.value = toConsumerOssId(receipt.ossId); + coverOssId.value = receipt.ossId; coverFileName.value = receipt.fileName || "封面图片"; } catch (error) { if (pageActive && !isImagePickCancelled(error) && !isRequestCancelled(error)) { diff --git a/pages/notification/n02-message-detail.vue b/pages/notification/n02-message-detail.vue index 7140c17..19c65b9 100644 --- a/pages/notification/n02-message-detail.vue +++ b/pages/notification/n02-message-detail.vue @@ -1,11 +1,76 @@ - + - + + + diff --git a/pages/profile/m02-edit-profile.vue b/pages/profile/m02-edit-profile.vue index 6ae4c39..9195e14 100644 --- a/pages/profile/m02-edit-profile.vue +++ b/pages/profile/m02-edit-profile.vue @@ -131,7 +131,7 @@ const buildUpdatePayload = () => { for (const field of ["nickName", "realName", "sex", "email"]) { if (form[field] && form[field] !== original[field]) data[field] = form[field]; } - if (form.birthday && form.birthday !== original.birthday) data.birthday = `${form.birthday}T00:00:00`; + if (form.birthday && form.birthday !== original.birthday) data.birthday = form.birthday; if (avatarId.value && avatarId.value !== original.avatar) data.avatar = avatarId.value; return data; }; diff --git a/pages/records/r07-ritual-editor.vue b/pages/records/r07-ritual-editor.vue index fb60376..fe9070f 100644 --- a/pages/records/r07-ritual-editor.vue +++ b/pages/records/r07-ritual-editor.vue @@ -32,6 +32,18 @@