AppReleaseLog-API.html 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>应用发布日志 API 文档</title>
  7. <style>
  8. * { margin: 0; padding: 0; box-sizing: border-box; }
  9. body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; background: #f5f7fa; color: #333; line-height: 1.6; }
  10. .container { max-width: 1100px; margin: 0 auto; padding: 30px 20px; }
  11. h1 { font-size: 28px; margin-bottom: 8px; color: #1a1a2e; }
  12. .subtitle { color: #666; font-size: 14px; margin-bottom: 30px; }
  13. .badge { display: inline-block; padding: 2px 10px; border-radius: 4px; font-size: 12px; font-weight: 600; margin-right: 6px; }
  14. .badge-post { background: #e8f5e9; color: #2e7d32; }
  15. .badge-get { background: #e3f2fd; color: #1565c0; }
  16. .api-card { background: #fff; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.08); margin-bottom: 20px; overflow: hidden; }
  17. .api-header { padding: 16px 20px; border-bottom: 1px solid #eee; cursor: pointer; display: flex; align-items: center; justify-content: space-between; }
  18. .api-header:hover { background: #fafafa; }
  19. .api-title { font-size: 16px; font-weight: 600; }
  20. .api-path { font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; color: #666; }
  21. .api-body { padding: 20px; display: none; }
  22. .api-body.open { display: block; }
  23. .section-title { font-size: 14px; font-weight: 600; color: #555; margin: 16px 0 8px; border-left: 3px solid #4a90d9; padding-left: 8px; }
  24. .section-title:first-child { margin-top: 0; }
  25. table { width: 100%; border-collapse: collapse; margin-bottom: 12px; font-size: 13px; }
  26. th { background: #f0f4f8; text-align: left; padding: 8px 12px; font-weight: 600; border-bottom: 2px solid #d0d7de; }
  27. td { padding: 8px 12px; border-bottom: 1px solid #eee; vertical-align: top; }
  28. tr:hover td { background: #fafbfc; }
  29. .required { color: #e53935; font-weight: 600; }
  30. .optional { color: #999; }
  31. code { background: #f0f4f8; padding: 2px 6px; border-radius: 3px; font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace; font-size: 12px; color: #d63384; }
  32. pre { background: #1e1e2e; color: #cdd6f4; padding: 16px; border-radius: 6px; overflow-x: auto; font-size: 12px; line-height: 1.5; }
  33. pre code { background: none; color: inherit; padding: 0; }
  34. .toggle-icon { font-size: 18px; color: #999; transition: transform 0.2s; }
  35. .toggle-icon.rotated { transform: rotate(180deg); }
  36. .note { background: #fff3e0; border-left: 3px solid #ff9800; padding: 8px 12px; border-radius: 0 4px 4px 0; font-size: 13px; margin-top: 8px; }
  37. .note b { color: #e65100; }
  38. </style>
  39. </head>
  40. <body>
  41. <div class="container">
  42. <h1>应用发布日志 API 文档</h1>
  43. <p class="subtitle">Base URL: <code>/service/manage/appReleaseLog</code> &nbsp;|&nbsp; 数据表: <code>t_app_release_log</code></p>
  44. <!-- ==================== 分页查询 ==================== -->
  45. <div class="api-card">
  46. <div class="api-header" onclick="toggle(this)">
  47. <div>
  48. <span class="api-title">分页查询发布日志列表</span>
  49. </div>
  50. <div style="display:flex;align-items:center;gap:10px;">
  51. <span class="api-path">POST /service/manage/appReleaseLog/pageList</span>
  52. <span class="toggle-icon">▼</span>
  53. </div>
  54. </div>
  55. <div class="api-body">
  56. <div class="section-title">请求体 (JSON)</div>
  57. <table>
  58. <tr><th>字段</th><th>类型</th><th>必填</th><th>说明</th></tr>
  59. <tr><td><code>pageNum</code></td><td>int</td><td><span class="optional">否(默认1)</span></td><td>当前页码</td></tr>
  60. <tr><td><code>pageSize</code></td><td>int</td><td><span class="optional">否(默认10)</span></td><td>每页条数</td></tr>
  61. <tr><td><code>appCode</code></td><td>String</td><td><span class="optional">否</span></td><td>应用标识(精确匹配),如 local_server、client</td></tr>
  62. <tr><td><code>envTag</code></td><td>String</td><td><span class="optional">否</span></td><td>环境标识(精确匹配):cn, eur, jp, ga</td></tr>
  63. <tr><td><code>version</code></td><td>String</td><td><span class="optional">否</span></td><td>版本号(模糊匹配)</td></tr>
  64. <tr><td><code>publicTarget</code></td><td>String</td><td><span class="optional">否</span></td><td>发布目标(模糊匹配)</td></tr>
  65. </table>
  66. <div class="section-title">请求示例</div>
  67. <pre><code>{
  68. "pageNum": 1,
  69. "pageSize": 10,
  70. "appCode": "local_server",
  71. "envTag": "cn",
  72. "version": "1.0"
  73. }</code></pre>
  74. <div class="section-title">响应示例</div>
  75. <pre><code>{
  76. "code": 200,
  77. "message": "成功",
  78. "success": true,
  79. "timestamp": 1724000000000,
  80. "data": {
  81. "pageNum": 1,
  82. "pageSize": 10,
  83. "total": 100,
  84. "list": [
  85. {
  86. "id": 1,
  87. "appCode": "local_server",
  88. "publicTarget": "生产环境",
  89. "version": "1.0.0",
  90. "packageTarget": "/data/build",
  91. "publicAddress": "https://xxx.com/release",
  92. "updateContent": "修复已知问题",
  93. "remark": "备注信息",
  94. "envTag": "cn",
  95. "publishIp": "192.168.1.100",
  96. "publishUser": 10001,
  97. "recStatus": "A",
  98. "createTime": "2026-08-18 10:00:00",
  99. "updateTime": "2026-08-18 10:00:00"
  100. }
  101. ]
  102. }
  103. }</code></pre>
  104. </div>
  105. </div>
  106. <!-- ==================== 新增 ==================== -->
  107. <div class="api-card">
  108. <div class="api-header" onclick="toggle(this)">
  109. <div>
  110. <span class="api-title">新增发布日志</span>
  111. </div>
  112. <div style="display:flex;align-items:center;gap:10px;">
  113. <span class="api-path">POST /service/manage/appReleaseLog/add</span>
  114. <span class="toggle-icon">▼</span>
  115. </div>
  116. </div>
  117. <div class="api-body">
  118. <div class="note"><b>注意:</b>publishUser(发布人)和 publishIp(发布IP)由后端自动填充,无需前端传入。</div>
  119. <div class="section-title">请求体 (JSON)</div>
  120. <table>
  121. <tr><th>字段</th><th>类型</th><th>必填</th><th>说明</th></tr>
  122. <tr><td><code>appCode</code></td><td>String</td><td><span class="required">是</span></td><td>应用标识,如 local_server、client</td></tr>
  123. <tr><td><code>publicTarget</code></td><td>String</td><td><span class="required">是</span></td><td>发布目标</td></tr>
  124. <tr><td><code>version</code></td><td>String</td><td><span class="required">是</span></td><td>版本号</td></tr>
  125. <tr><td><code>packageTarget</code></td><td>String</td><td><span class="optional">否</span></td><td>打包目录</td></tr>
  126. <tr><td><code>publicAddress</code></td><td>String</td><td><span class="optional">否</span></td><td>发布地址</td></tr>
  127. <tr><td><code>updateContent</code></td><td>String</td><td><span class="optional">否</span></td><td>发布内容</td></tr>
  128. <tr><td><code>remark</code></td><td>String</td><td><span class="optional">否</span></td><td>备注</td></tr>
  129. <tr><td><code>envTag</code></td><td>String</td><td><span class="optional">否</span></td><td>环境标识:cn, eur, jp, ga</td></tr>
  130. </table>
  131. <div class="section-title">请求示例</div>
  132. <pre><code>{
  133. "appCode": "local_server",
  134. "publicTarget": "生产环境",
  135. "version": "1.0.0",
  136. "packageTarget": "/data/build/v1",
  137. "publicAddress": "https://xxx.com/release/v1",
  138. "updateContent": "1. 修复登录问题\n2. 优化性能",
  139. "remark": "首次发布",
  140. "envTag": "cn"
  141. }</code></pre>
  142. <div class="section-title">响应示例</div>
  143. <pre><code>{
  144. "code": 200,
  145. "message": "新增成功",
  146. "success": true,
  147. "timestamp": 1724000000000,
  148. "data": {
  149. "id": 1,
  150. "appCode": "local_server",
  151. "publishUser": 10001,
  152. "publishIp": "192.168.1.100",
  153. ...
  154. }
  155. }</code></pre>
  156. </div>
  157. </div>
  158. <!-- ==================== 更新 ==================== -->
  159. <div class="api-card">
  160. <div class="api-header" onclick="toggle(this)">
  161. <div>
  162. <span class="api-title">更新发布日志</span>
  163. </div>
  164. <div style="display:flex;align-items:center;gap:10px;">
  165. <span class="api-path">POST /service/manage/appReleaseLog/update</span>
  166. <span class="toggle-icon">▼</span>
  167. </div>
  168. </div>
  169. <div class="api-body">
  170. <div class="section-title">请求体 (JSON)</div>
  171. <table>
  172. <tr><th>字段</th><th>类型</th><th>必填</th><th>说明</th></tr>
  173. <tr><td><code>id</code></td><td>Integer</td><td><span class="required">是</span></td><td>记录ID</td></tr>
  174. <tr><td colspan="4" style="color:#999;font-style:italic;">其余字段按需传入,仅更新传入的字段</td></tr>
  175. </table>
  176. <div class="section-title">请求示例</div>
  177. <pre><code>{
  178. "id": 1,
  179. "version": "1.0.1",
  180. "updateContent": "1. 修复登录问题\n2. 优化性能\n3. 新增导出功能",
  181. "remark": "更新备注"
  182. }</code></pre>
  183. <div class="section-title">响应示例</div>
  184. <pre><code>{
  185. "code": 200,
  186. "message": "更新成功",
  187. "success": true,
  188. "timestamp": 1724000000000,
  189. "data": { ... }
  190. }</code></pre>
  191. <div class="section-title">错误响应</div>
  192. <pre><code>// ID为空
  193. { "code": 400, "message": "ID不能为空", "success": false, "timestamp": 1724000000000, "data": null }
  194. // 记录不存在
  195. { "code": 404, "message": "记录不存在", "success": false, "timestamp": 1724000000000, "data": null }</code></pre>
  196. </div>
  197. </div>
  198. <!-- ==================== 删除 ==================== -->
  199. <div class="api-card">
  200. <div class="api-header" onclick="toggle(this)">
  201. <div>
  202. <span class="api-title">删除发布日志(逻辑删除)</span>
  203. </div>
  204. <div style="display:flex;align-items:center;gap:10px;">
  205. <span class="api-path">POST /service/manage/appReleaseLog/delete</span>
  206. <span class="toggle-icon">▼</span>
  207. </div>
  208. </div>
  209. <div class="api-body">
  210. <div class="note"><b>注意:</b>使用 MyBatis-Plus 逻辑删除,rec_status 由 <code>A</code> 变为 <code>I</code>,数据不会物理删除。</div>
  211. <div class="section-title">请求体 (JSON)</div>
  212. <table>
  213. <tr><th>字段</th><th>类型</th><th>必填</th><th>说明</th></tr>
  214. <tr><td><code>id</code></td><td>Integer</td><td><span class="required">是</span></td><td>记录ID</td></tr>
  215. </table>
  216. <div class="section-title">请求示例</div>
  217. <pre><code>{
  218. "id": 1
  219. }</code></pre>
  220. <div class="section-title">响应示例</div>
  221. <pre><code>{
  222. "code": 200,
  223. "message": "删除成功",
  224. "success": true,
  225. "timestamp": 1724000000000,
  226. "data": null
  227. }</code></pre>
  228. </div>
  229. </div>
  230. <!-- ==================== 数据字典 ==================== -->
  231. <div class="api-card">
  232. <div class="api-header" onclick="toggle(this)">
  233. <div>
  234. <span class="api-title">数据字典 & 字段说明</span>
  235. </div>
  236. <div style="display:flex;align-items:center;gap:10px;">
  237. <span class="toggle-icon">▼</span>
  238. </div>
  239. </div>
  240. <div class="api-body">
  241. <div class="section-title">表结构: t_app_release_log</div>
  242. <table>
  243. <tr><th>字段</th><th>类型</th><th>说明</th></tr>
  244. <tr><td><code>id</code></td><td>Integer (AUTO_INCREMENT)</td><td>主键ID</td></tr>
  245. <tr><td><code>app_code</code></td><td>VARCHAR</td><td>应用标识(多系统区分,如 local_server、client)</td></tr>
  246. <tr><td><code>public_target</code></td><td>VARCHAR</td><td>发布目标</td></tr>
  247. <tr><td><code>version</code></td><td>VARCHAR</td><td>版本号</td></tr>
  248. <tr><td><code>package_target</code></td><td>VARCHAR</td><td>打包目录</td></tr>
  249. <tr><td><code>public_address</code></td><td>VARCHAR</td><td>发布地址</td></tr>
  250. <tr><td><code>update_content</code></td><td>TEXT</td><td>发布内容</td></tr>
  251. <tr><td><code>remark</code></td><td>VARCHAR</td><td>备注</td></tr>
  252. <tr><td><code>env_tag</code></td><td>VARCHAR</td><td>环境标识:cn, eur, jp, ga</td></tr>
  253. <tr><td><code>publish_ip</code></td><td>VARCHAR</td><td>发布操作IP(后端自动获取)</td></tr>
  254. <tr><td><code>publish_user</code></td><td>BIGINT</td><td>发布操作人(后端自动获取,当前登录用户ID)</td></tr>
  255. <tr><td><code>rec_status</code></td><td>CHAR(1)</td><td>记录状态:A=正常, I=已删除(逻辑删除)</td></tr>
  256. <tr><td><code>create_time</code></td><td>DATETIME</td><td>创建时间(新增时自动填充)</td></tr>
  257. <tr><td><code>update_time</code></td><td>DATETIME</td><td>更新时间(新增/更新时自动填充)</td></tr>
  258. </table>
  259. <div class="section-title">统一响应结构 (ResultData)</div>
  260. <table>
  261. <tr><th>字段</th><th>类型</th><th>说明</th></tr>
  262. <tr><td><code>code</code></td><td>int</td><td>状态码:200=成功, 400=参数错误, 404=记录不存在, 500=系统错误</td></tr>
  263. <tr><td><code>message</code></td><td>String</td><td>响应信息</td></tr>
  264. <tr><td><code>success</code></td><td>Boolean</td><td>是否成功</td></tr>
  265. <tr><td><code>data</code></td><td>Object</td><td>响应数据</td></tr>
  266. <tr><td><code>timestamp</code></td><td>long</td><td>响应时间戳(毫秒)</td></tr>
  267. </table>
  268. </div>
  269. </div>
  270. </div>
  271. <script>
  272. function toggle(header) {
  273. const body = header.nextElementSibling;
  274. const icon = header.querySelector('.toggle-icon');
  275. body.classList.toggle('open');
  276. icon.classList.toggle('rotated');
  277. }
  278. </script>
  279. </body>
  280. </html>