天星远 發表於 2026-1-16 14:23:00

JeecgBoot Vue3 :构建高效的企业级前端业务模块

<h1 id="jeecgboot-vue3-实战构建高效的企业级前端业务模块">JeecgBoot Vue3 实战:构建高效的企业级前端业务模块</h1>
<p>JeecgBoot-Vue3 是一个基于 Vue3.0 + TypeScript + Vite6 + Ant-Design-Vue 的现代化前端解决方案。它集成了二次封装组件、Utils、Hooks、动态菜单、权限校验及按钮级权限控制等核心功能,旨在为企业级应用提供高效、稳健的开发体验。</p>
<blockquote>
<p><strong>核心价值</strong>:强大的代码生成器让前后端代码一键生成!JeecgBoot 引领低代码开发模式(OnlineCoding -&gt; 代码生成 -&gt; 手工 MERGE),帮助解决 Java 项目 70% 的重复工作,让开发者更专注于业务逻辑。既能快速提高效率、节省成本,又不失灵活性。</p>
</blockquote>
<hr>
<h2 id="️-技术栈与环境">🛠️ 技术栈与环境</h2>
<h3 id="前端技术栈">前端技术栈</h3>
<ul>
<li><strong>开发工具</strong>:WebStorm / VSCode</li>
<li><strong>核心框架</strong>:Vue3.0 + TypeScript + Vite6 + Ant-Design-Vue4</li>
<li><strong>生态库</strong>:Pinia + ECharts + UnoCSS + Vxe-Table + Qiankun + ES6</li>
<li><strong>包管理</strong>:Node / Npm / Pnpm</li>
</ul>
<h3 id="环境要求">环境要求</h3>
<ul>
<li><strong>本地环境</strong>:安装 Node.js、Npm、Pnpm</li>
<li><strong>Pnpm 版本</strong>:要求 9+ 版本以上</li>
<li><strong>Node.js 版本</strong>:
<ul>
<li>建议 v20.15.0+(要求 Node 20+)</li>
<li><em>注意:Vite 不再支持已结束生命周期(EOL)的 Node.js 18。现在需要使用 Node.js 20.19+ 或 22.12+</em></li>
</ul>
</li>
</ul>
<p>📚 <strong>官方文档</strong>:</p>
<hr>
<h2 id="-使用体验与亮点">✨ 使用体验与亮点</h2>
<p>基础用法在官方文档中已有详尽介绍,这里重点分享一下在实际项目中的使用感受。</p>
<h3 id="1-高效的组件封装">1. 高效的组件封装</h3>
<p>框架封装了大量贴合企业业务的高频组件,极大减少了重复代码,开发者只需关注业务配置。</p>
<p><img src="https://img2024.cnblogs.com/blog/2819675/202601/2819675-20260115152531817-64363234.png"></p>
<h3 id="2-丰富的示例库">2. 丰富的示例库</h3>
<p>系统提供了非常丰富的组件示例,在生成代码时可以直接选择所需组件,系统会自动生成对应代码,真正实现了“配置即开发”。</p>
<p><img src="https://img2024.cnblogs.com/blog/2819675/202601/2819675-20260115153507571-406890165.png"></p>
<blockquote>
<p>强烈建议大家亲自体验一下,会有更直观的感受。</p>
</blockquote>
<hr>
<h2 id="-踩坑与解决方案">🐛 踩坑与解决方案</h2>
<p>在使用过程中,我也遇到了一些细节问题,以下是我的解决方案分享。</p>
<h3 id="问题一时间范围查询的参数处理">问题一:时间范围查询的参数处理</h3>
<p><strong>现象描述</strong>:<br>
在表格页面中,框架对时间范围查询(RangePicker)有默认的处理逻辑,会自动将时间参数拆分为 <code>xxx_begin</code> 和 <code>xxx_end</code>(例如 <code>warningTime_begin</code> 和 <code>warningTime_end</code>)。</p>
<p>但这种处理方式目前仅在<strong>列表查询接口</strong>中生效,且是一次性的。在其他场景(如<strong>导出接口</strong>)中,如果不做处理,直接将时间数组拼接到 URL 后,会导致报错。</p>
<p><img src="https://img2024.cnblogs.com/blog/2819675/202601/2819675-20260116095223440-445944169.png"><br>
<em>默认的日期处理逻辑</em></p>
<p><img src="https://img2024.cnblogs.com/blog/2819675/202601/2819675-20260116132241546-149662246.png"><br>
<em>导出时的报错:数组无法直接拼接在 URL 中</em></p>
<p><strong>解决方案</strong>:<br>
在封装的导出逻辑中,增加对时间范围参数的统一处理,使其与查询接口保持一致。</p>
<ol>
<li>
<p><strong>编写参数处理函数</strong><br>
在 <code>/src/hooks/system/useListPage.ts</code> 中,新增 <code>setRangeQuery</code> 方法:</p>
<pre><code class="language-typescript">import { cloneDeep } from 'lodash-es';

async function setRangeQuery(queryParam) {
let queryParamClone = cloneDeep(queryParam);
if (queryParam.rangeField) {
    let fieldsValue = queryParam.rangeField.split(',');
    fieldsValue.forEach((item) =&gt; {
      if (queryParamClone) {
      let range = queryParamClone;
      queryParamClone = range;
      queryParamClone = range;
      delete queryParamClone;
      } else {
      queryParamClone = '';
      queryParamClone = '';
      }
    });
}
return queryParamClone;
}
</code></pre>
</li>
<li>
<p><strong>在导出方法中调用</strong><br>
找到 <code>onExportXls</code> 方法,在请求发出前调用 <code>setRangeQuery</code> 对参数进行格式化。</p>
<p><img src="https://img2024.cnblogs.com/blog/2819675/202601/2819675-20260116132735980-796413222.png"></p>
</li>
<li>
<p><strong>页面配置</strong><br>
在页面的查询参数变量中添加 <code>rangeField</code> 属性,值为时间范围参数的字段名(多个字段用逗号隔开)。</p>
<p><img src="https://img2024.cnblogs.com/blog/2819675/202601/2819675-20260116133133760-293647780.png"></p>
<p>这样配置后,导出功能即可正常工作。</p>
<p><img src="https://img2024.cnblogs.com/blog/2819675/202601/2819675-20260116133224522-418197316.png"></p>
</li>
</ol>
<hr>
<h3 id="问题二表格工具栏按钮对齐问题">问题二:表格工具栏按钮对齐问题</h3>
<p><strong>现象描述</strong>:<br>
在某些分辨率或布局下,表格上方的标题与右侧工具栏按钮可能会出现无法水平对齐的情况,影响美观。</p>
<p><img src="https://img2024.cnblogs.com/blog/2819675/202601/2819675-20260116135043840-365337799.png"></p>
<p><strong>解决方案</strong>:<br>
修改 <code>/src/components/Table/src/components/TableHeader.vue</code> 文件的样式。</p>
<p>给表格标题区域和工具栏容器添加 Flex 布局样式,强制垂直居中对齐:</p>
<pre><code class="language-css">/* 示例代码,具体请参考实际文件修改 */
.table-header {
display: flex;
justify-content: space-between;
align-items: center; /* 关键属性 */
}
</code></pre>
<p><img src="https://img2024.cnblogs.com/blog/2819675/202601/2819675-20260116140203091-1879240281.png"><br>
<em>修复后的对齐效果</em></p>
<hr>
<h2 id="-总结">📝 总结</h2>
<p>虽然在使用过程中遇到了一点小瑕疵,但通过简单的调整都能顺利解决。总体而言,JeecgBoot Vue3 依然是一款瑕不掩瑜的优秀框架,其高效的开发模式和完善的生态系统,极大地提升了企业级应用的开发效率。</p><br><br>
来源:https://www.cnblogs.com/lijinhuaboke/p/19487229
頁: [1]
查看完整版本: JeecgBoot Vue3 :构建高效的企业级前端业务模块