81 lines
20 KiB
JavaScript
81 lines
20 KiB
JavaScript
import{_ as i,o as a,c as t,a2 as n}from"./chunks/framework.B-QBKwc1.js";const c=JSON.parse('{"title":"贡献指南","description":"感谢你对本项目的关注!","frontmatter":{},"headers":[],"relativePath":"zh/other/contributing.md","filePath":"zh/other/contributing.md"}'),e={name:"zh/other/contributing.md"};function l(h,s,p,k,d,r){return a(),t("div",null,[...s[0]||(s[0]=[n(`<h1 id="K-贡献指南" tabindex="-1">K. 贡献指南 <a class="header-anchor" href="#K-贡献指南" aria-label="Permalink to "K. 贡献指南""></a></h1><div class="tip custom-block"><p class="custom-block-title">说明</p><p>感谢你对本项目的关注!本文档介绍如何参与项目贡献,包括代码提交、Issue 反馈、PR 流程等。</p></div><h2 id="开发环境搭建" tabindex="-1">开发环境搭建 <a class="header-anchor" href="#开发环境搭建" aria-label="Permalink to "开发环境搭建""></a></h2><ol><li>Fork 项目到自己的 Gitee/GitHub 账号</li><li>从<a href="https://www.rxthink.cn" target="_blank" rel="noreferrer">官方网站</a>下载授权源码包</li><li>参考 <a href="/zh/quickstart/environment.html">开发环境准备</a> 安装依赖</li><li>创建开发分支:<code>git checkout -b feature/your-feature</code></li></ol><h2 id="分支策略" tabindex="-1">分支策略 <a class="header-anchor" href="#分支策略" aria-label="Permalink to "分支策略""></a></h2><table tabindex="0"><thead><tr><th>分支</th><th>用途</th><th>说明</th></tr></thead><tbody><tr><td><code>master</code></td><td>主分支</td><td>稳定版本,只接受 PR 合并</td></tr><tr><td><code>feature/*</code></td><td>功能分支</td><td>新功能开发,完成后合并到 master</td></tr><tr><td><code>hotfix/*</code></td><td>修复分支</td><td>紧急修复,从 master 拉取,修复后合并回 master</td></tr></tbody></table><div class="language-text vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span>master ────●───────●───────●───── (发布)</span></span>
|
||
<span class="line"><span> ↑ ↑</span></span>
|
||
<span class="line"><span>feature/a ──●──● feature/b ──●──●</span></span></code></pre></div><h2 id="Commit-规范" tabindex="-1">Commit 规范 <a class="header-anchor" href="#Commit-规范" aria-label="Permalink to "Commit 规范""></a></h2><p>提交信息遵循 <a href="https://www.conventionalcommits.org/" target="_blank" rel="noreferrer">Conventional Commits</a> 格式:</p><div class="language-html vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">html</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"><</span><span style="--shiki-dark:#EE6666;--shiki-dark-font-style:italic;--shiki-dark-text-decoration:underline;--shiki-light:#B31D28;--shiki-light-font-style:inherit;--shiki-light-text-decoration:inherit;">type</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">></span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">(</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"><</span><span style="--shiki-dark:#EE6666;--shiki-dark-font-style:italic;--shiki-dark-text-decoration:underline;--shiki-light:#B31D28;--shiki-light-font-style:inherit;--shiki-light-text-decoration:inherit;">scope</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">></span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">): </span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"><</span><span style="--shiki-dark:#EE6666;--shiki-dark-font-style:italic;--shiki-dark-text-decoration:underline;--shiki-light:#B31D28;--shiki-light-font-style:inherit;--shiki-light-text-decoration:inherit;">subject</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">></span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"><</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">body</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">></span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"><</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">footer</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">></span></span></code></pre></div><h3 id="Type-类型" tabindex="-1">Type 类型 <a class="header-anchor" href="#Type-类型" aria-label="Permalink to "Type 类型""></a></h3><table tabindex="0"><thead><tr><th>类型</th><th>说明</th><th>示例</th></tr></thead><tbody><tr><td><code>feat</code></td><td>新功能</td><td><code>feat(user): 添加用户导入功能</code></td></tr><tr><td><code>fix</code></td><td>修复 bug</td><td><code>fix(auth): 修复 Token 过期未返回 401</code></td></tr><tr><td><code>docs</code></td><td>文档更新</td><td><code>docs: 更新部署文档</code></td></tr><tr><td><code>style</code></td><td>代码格式(不影响功能)</td><td><code>style: 格式化代码</code></td></tr><tr><td><code>refactor</code></td><td>重构(非新功能非修复)</td><td><code>refactor(service): 重构分页查询逻辑</code></td></tr><tr><td><code>perf</code></td><td>性能优化</td><td><code>perf(query): 优化 N+1 查询</code></td></tr><tr><td><code>test</code></td><td>测试相关</td><td><code>test: 添加用户模块单元测试</code></td></tr><tr><td><code>chore</code></td><td>构建/工具相关</td><td><code>chore: 更新依赖版本</code></td></tr></tbody></table><h3 id="示例" tabindex="-1">示例 <a class="header-anchor" href="#示例" aria-label="Permalink to "示例""></a></h3><div class="language-text vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span>feat(generator): 支持树形表格模板生成</span></span>
|
||
<span class="line"><span></span></span>
|
||
<span class="line"><span>- 新增 ui2/ 树形模板目录</span></span>
|
||
<span class="line"><span>- 自动识别 parent_id/pid 字段</span></span>
|
||
<span class="line"><span>- 支持 el-tree-select 组件</span></span>
|
||
<span class="line"><span></span></span>
|
||
<span class="line"><span>Closes #123</span></span></code></pre></div><h2 id="PR-流程" tabindex="-1">PR 流程 <a class="header-anchor" href="#PR-流程" aria-label="Permalink to "PR 流程""></a></h2><h3 id="_1-准备工作" tabindex="-1">1. 准备工作 <a class="header-anchor" href="#_1-准备工作" aria-label="Permalink to "1. 准备工作""></a></h3><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 1. 同步上游代码</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">git</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> fetch</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> upstream</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">git</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> rebase</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> upstream/master</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 2. 创建功能分支</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">git</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> checkout</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -b</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> feature/your-feature</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 3. 开发并提交</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">git</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> add</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> .</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">git</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> commit</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -m</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> "</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">feat(xxx): 添加xxx功能</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">"</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 4. 推送到自己的仓库</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">git</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> push</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> origin</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> feature/your-feature</span></span></code></pre></div><h3 id="_2-创建-PR" tabindex="-1">2. 创建 PR <a class="header-anchor" href="#_2-创建-PR" aria-label="Permalink to "2. 创建 PR""></a></h3><ul><li>标题简洁明了,遵循 Commit 规范</li><li>描述清楚做了什么、为什么做、怎么测试的</li><li>关联相关的 Issue(如 <code>Closes #123</code>)</li><li>附上截图或 GIF(如有 UI 变更)</li></ul><h3 id="_3-PR-模板" tabindex="-1">3. PR 模板 <a class="header-anchor" href="#_3-PR-模板" aria-label="Permalink to "3. PR 模板""></a></h3><div class="language-markdown vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">markdown</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#BF9EEE;--shiki-dark-font-weight:bold;--shiki-light:#999999;--shiki-light-font-weight:bold;">##</span><span style="--shiki-dark:#BF9EEE;--shiki-dark-font-weight:bold;--shiki-light:#1C6B48;--shiki-light-font-weight:bold;"> 变更说明</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">简要描述本次变更的内容。</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#BF9EEE;--shiki-dark-font-weight:bold;--shiki-light:#999999;--shiki-light-font-weight:bold;">##</span><span style="--shiki-dark:#BF9EEE;--shiki-dark-font-weight:bold;--shiki-light:#1C6B48;--shiki-light-font-weight:bold;"> 变更类型</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#A65E2B;">-</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> [ ] 新功能 (feat)</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#A65E2B;">-</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> [ ] Bug 修复 (fix)</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#A65E2B;">-</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> [ ] 文档更新 (docs)</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#A65E2B;">-</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> [ ] 代码重构 (refactor)</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#A65E2B;">-</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> [ ] 性能优化 (perf)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#BF9EEE;--shiki-dark-font-weight:bold;--shiki-light:#999999;--shiki-light-font-weight:bold;">##</span><span style="--shiki-dark:#BF9EEE;--shiki-dark-font-weight:bold;--shiki-light:#1C6B48;--shiki-light-font-weight:bold;"> 测试情况</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#A65E2B;">-</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> [ ] 本地测试通过</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#A65E2B;">-</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> [ ] 添加了单元测试</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#A65E2B;">-</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> [ ] 手动验证了功能</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#BF9EEE;--shiki-dark-font-weight:bold;--shiki-light:#999999;--shiki-light-font-weight:bold;">##</span><span style="--shiki-dark:#BF9EEE;--shiki-dark-font-weight:bold;--shiki-light:#1C6B48;--shiki-light-font-weight:bold;"> 关联 Issue</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">Closes #xxx</span></span></code></pre></div><h3 id="_4-代码审查" tabindex="-1">4. 代码审查 <a class="header-anchor" href="#_4-代码审查" aria-label="Permalink to "4. 代码审查""></a></h3><ul><li>至少一人审查通过后方可合并</li><li>审查关注:正确性 > 安全性 > 可维护性 > 性能</li><li>参考 <a href="/zh/standards/code-review.html">代码审查清单</a></li></ul><h2 id="Issue-规范" tabindex="-1">Issue 规范 <a class="header-anchor" href="#Issue-规范" aria-label="Permalink to "Issue 规范""></a></h2><h3 id="Bug-Report" tabindex="-1">Bug Report <a class="header-anchor" href="#Bug-Report" aria-label="Permalink to "Bug Report""></a></h3><div class="language-markdown vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">markdown</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#BF9EEE;--shiki-dark-font-weight:bold;--shiki-light:#999999;--shiki-light-font-weight:bold;">##</span><span style="--shiki-dark:#BF9EEE;--shiki-dark-font-weight:bold;--shiki-light:#1C6B48;--shiki-light-font-weight:bold;"> Bug 描述</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">简要描述遇到的问题。</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#BF9EEE;--shiki-dark-font-weight:bold;--shiki-light:#999999;--shiki-light-font-weight:bold;">##</span><span style="--shiki-dark:#BF9EEE;--shiki-dark-font-weight:bold;--shiki-light:#1C6B48;--shiki-light-font-weight:bold;"> 复现步骤</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#A65E2B;">1.</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> 打开 xxx 页面</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#A65E2B;">2.</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> 点击 xxx 按钮</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#A65E2B;">3.</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> 输入 xxx 数据</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#A65E2B;">4.</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> 看到错误</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#BF9EEE;--shiki-dark-font-weight:bold;--shiki-light:#999999;--shiki-light-font-weight:bold;">##</span><span style="--shiki-dark:#BF9EEE;--shiki-dark-font-weight:bold;--shiki-light:#1C6B48;--shiki-light-font-weight:bold;"> 期望行为</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">描述你期望的正确行为。</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#BF9EEE;--shiki-dark-font-weight:bold;--shiki-light:#999999;--shiki-light-font-weight:bold;">##</span><span style="--shiki-dark:#BF9EEE;--shiki-dark-font-weight:bold;--shiki-light:#1C6B48;--shiki-light-font-weight:bold;"> 实际行为</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">描述实际发生的行为。</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#BF9EEE;--shiki-dark-font-weight:bold;--shiki-light:#999999;--shiki-light-font-weight:bold;">##</span><span style="--shiki-dark:#BF9EEE;--shiki-dark-font-weight:bold;--shiki-light:#1C6B48;--shiki-light-font-weight:bold;"> 环境信息</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#A65E2B;">-</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> OS: Windows 11</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#A65E2B;">-</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> PHP: 8.2</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#A65E2B;">-</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> ThinkPHP: 6.1.x</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#A65E2B;">-</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> Node.js: 22.x</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#A65E2B;">-</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> Browser: Chrome 120</span></span></code></pre></div><h3 id="Feature-Request" tabindex="-1">Feature Request <a class="header-anchor" href="#Feature-Request" aria-label="Permalink to "Feature Request""></a></h3><div class="language-markdown vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">markdown</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#BF9EEE;--shiki-dark-font-weight:bold;--shiki-light:#999999;--shiki-light-font-weight:bold;">##</span><span style="--shiki-dark:#BF9EEE;--shiki-dark-font-weight:bold;--shiki-light:#1C6B48;--shiki-light-font-weight:bold;"> 功能描述</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">简要描述你希望添加的功能。</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#BF9EEE;--shiki-dark-font-weight:bold;--shiki-light:#999999;--shiki-light-font-weight:bold;">##</span><span style="--shiki-dark:#BF9EEE;--shiki-dark-font-weight:bold;--shiki-light:#1C6B48;--shiki-light-font-weight:bold;"> 使用场景</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">描述这个功能的使用场景和价值。</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#BF9EEE;--shiki-dark-font-weight:bold;--shiki-light:#999999;--shiki-light-font-weight:bold;">##</span><span style="--shiki-dark:#BF9EEE;--shiki-dark-font-weight:bold;--shiki-light:#1C6B48;--shiki-light-font-weight:bold;"> 方案建议</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">如果有实现思路,请描述。</span></span></code></pre></div><h2 id="代码风格" tabindex="-1">代码风格 <a class="header-anchor" href="#代码风格" aria-label="Permalink to "代码风格""></a></h2><ul><li>PHP:遵循 PSR-12 规范</li><li>TypeScript/Vue:遵循 ESLint + Prettier 配置</li><li>详见 <a href="/zh/standards/frontend-code.html">前端编码规范</a> 和 <a href="/zh/standards/backend-code.html">后端编码规范</a></li></ul><h2 id="行为准则" tabindex="-1">行为准则 <a class="header-anchor" href="#行为准则" aria-label="Permalink to "行为准则""></a></h2><ul><li>尊重每一位贡献者</li><li>建设性地提出意见和建议</li><li>专注于对社区有益的事情</li><li>不接受任何形式的骚扰</li></ul><h2 id="总结" tabindex="-1">总结 <a class="header-anchor" href="#总结" aria-label="Permalink to "总结""></a></h2><p>贡献指南涵盖开发环境搭建、分支策略、Commit 规范、PR 流程、Issue 模板、代码风格等内容。核心原则:遵循规范、充分测试、清晰描述、尊重他人。</p>`,34)])])}const g=i(e,[["render",l]]);export{c as __pageData,g as default};
|