# 企业基本信息模块开发记录 **日期:** 2026-06-04 ## 模块概述 企业基本信息模块(enterprise)是招聘管理系统中的核心基础模块,负责管理招聘企业的基本信息。该模块采用 JeecgBoot 的前后端分离架构,前端基于 Vue3 + Ant Design Vue,后端基于 Spring Boot + MyBatis-Plus。 ### 业务关系 - **EnterpriseInfo(企业基本信息)**:唯一的主表,记录企业的登记注册信息、经营信息、联系方式、宣传资料等。对外提供企业下拉列表接口供岗位信息等模块关联使用。 --- ## 模块文件结构 ### 前端(jeecgboot-vue3/src/views/recruitment/enterprise/) | 文件 | 用途 | |----------------------------------------------|-----------------------------------| | `EnterpriseInfoList.vue` | 企业信息列表页面,提供查询、新增、编辑、详情、删除、批量删除、导入导出等功能 | | `EnterpriseInfo.api.ts` | 企业信息 API 封装 | | `EnterpriseInfo.data.ts` | 列表页表格列配置(9列)与高级查询字段定义(26个查询字段) | | `components/EnterpriseInfoForm.vue` | 企业信息新增/编辑表单组件,含图片上传与视频上传 | | `components/EnterpriseInfoModal.vue` | 企业信息弹窗组件,包裹 EnterpriseInfoForm,全屏模式 | | `components/EnterpriseInfoDetailModal.vue` | 企业信息详情弹窗组件,使用 a-descriptions 只读展示 | ### 后端(jeecg-boot/jeecg-boot-module/jeecg-module-zjrs/.../org/jeecg/modules/zjrs/enterprise/) | 层次 | 文件 | |--------------|---------------------------------------------------| | DTO | `dto/EnterpriseInfoDTO.java` | | VO | `vo/EnterpriseInfoVO.java` | | Controller | `controller/EnterpriseInfoController.java` | | Entity | `entity/EnterpriseInfo.java` | | Service | `service/IEnterpriseInfoService.java` | | Service Impl | `service/impl/EnterpriseInfoServiceImpl.java` | | Mapper | `mapper/EnterpriseInfoMapper.java` | | Mapper XML | `mapper/xml/EnterpriseInfoMapper.xml` | --- ## 开发记录 ### 功能清单 | 功能 | 说明 | |---------------|----------------------------------------------------------------| | 分页列表查询 | 支持按单位名称、统一社会信用代码、联系人、所属行业等条件查询,9 列展示 | | 新增 | 全屏表单,支持 35 个企业字段录入,含 logo 图片上传、宣传图片上传(最多5张)、宣传视频上传 | | 编辑 | 复用新增表单,预填充已有数据 | | 详情 | 表单禁用模式查看企业全部信息 | | 删除 / 批量删除 | 支持单条删除和批量删除,删除前弹窗确认 | | 导入 / 导出 Excel | 基于 Jeecg 标准 Excel 导入导出功能 | | 高级查询 | 26 个查询字段,支持灵活的筛选条件 | | 企业标签 | 新增/编辑时支持多选企业标签,标签数据来源于企业标签库(EnterpriseTag),自动维护 enterprise_tag_relation 关联表 | | 企业下拉列表 | 单独接口 `/listForSelect`,返回 id 和 companyName,供岗位信息等模块关联选择企业 | | 字段必填校验 | 前端(Ant Design Vue Form 校验)+ 后端(Service 层 `validateRequiredFields`)双重校验 | ### 必填字段(前后端一致) 共 16 个必填字段:单位名称、统一社会信用代码、注册地址行政区划、单位类型、经济类型、所属行业、数据来源、人员规模、联系人、联系方式、接收平台短信推送、面向求职者会员开放、是否允许人社部门代报名、单位简介、办公地址行政区划、办公地址。 --- ### 功能开发 | 日期 | 内容 | 涉及文件 | 说明 | |------------|--------------|---------------|------------------------| | 2026-06-04 | 企业基本信息模块初始构建 | 前端 5 个文件 + 后端 6 个文件 | 完成企业信息管理的基础 CRUD 功能,含 Excel 导入导出与企业下拉列表接口 | ### EnterpriseInfo 实体字段一览 | 分类 | 字段 | 说明 | |--------|----------------------|---------------| | 登记信息 | companyName | 单位名称 | | | unifiedCreditCode | 统一社会信用代码 | | | orgCode | 组织机构代码 | | | establishDate | 成立日期 | | | registeredCapital | 注册资本 | | | regAddrDistrict | 注册地址行政区划 | | 经营信息 | businessStatus | 经营状态 | | | companyType | 单位类型 | | | economyType | 经济类型 | | | industry | 所属行业 | | | isListedCompany | 是否上市公司 | | | industryField | 行业领域 | | | industryAdminDept | 行业主管部门 | | | industryTag | 产业标签 | | | companyPropertyTag | 单位属性标签 | | | provinceOrCity | 省属或所属地市 | | | companyAttribute | 单位属性 | | | isHeadEnterprise | 是否为头部企业 | | | isKeyEnterprise | 是否为重点企业 | | | isKeyInstitution | 是否为重点事业单位 | | | isStrategicIndustry | 是否属于20个战略性产业集群 | | 联系方式 | contactPerson | 联系人 | | | contactPhone | 联系方式 | | | email | 电子邮箱 | | | postalCode | 邮政编码 | | | website | 单位网站 | | | faxNumber | 传真号码 | | | officeAddrDistrict | 办公地址行政区划 | | | officeAddress | 办公地址 | | 配置项 | dataSource | 数据来源 | | | companyTag | 单位标签 | | | staffSize | 人员规模 | | | acceptSmsPush | 接收平台短信推送 | | | openToJobSeeker | 面向求职者会员开放 | | | allowAgentSignup | 是否允许人社部门代报名 | | | companyBenefits | 单位福利 | | | companyIntro | 单位简介 | | 宣传资料 | logoImg | logo图片 | | | promotionalVideo | 宣传视频 | | | promotionalImage | 宣传图片 | | 系统字段 | id / createBy / createTime / updateBy / updateTime / sysOrgCode | 系统内置字段 | --- ### 2026-06-04:企业列表字段调整 & 关联岗位数统计 **需求描述:** 调整企业信息列表页的表格显示字段,并从岗位信息表(post_info)关联统计当前岗位数。 **表格列调整(13列):** | 新列 | 对应字段 | 说明 | |---------------|-------------------|------------------------| | 序号 | index | 自定义列,customRender 显示行索引 | | 统一信用代码 | unifiedCreditCode | — | | 单位名称 | companyName | — | | 单位类型 | companyType | — | | 所属行业 | industry | — | | 注册地址 | regAddrDistrict | 对应注册地址行政区划字段 | | 经营地址 | officeAddress | 对应办公地址字段 | | 企业规模 | staffSize | 原"人员规模"改名为"企业规模" | | 是否重点企业 | isKeyEnterprise | 新增显示字段 | | 单位标签 | companyTag | 新增显示字段 | | 经营状态 | businessStatus | — | | 当前岗位数 | postCount | 自 post_info 表关联统计 | | 数据来源 | dataSource | 新增显示字段 | **删除的列:** 注册资本、联系人、联系方式 **涉及文件:** | 文件 | 操作 | 原因 | |--------------------------------------------------|----|---------------------------------------| | `jeecg-boot/jeecg-boot-module/jeecg-module-zjrs/.../enterprise/entity/EnterpriseInfo.java` | 修改 | 移除 postCount 字段(已移到 VO) | | `jeecg-boot/jeecg-boot-module/jeecg-module-zjrs/.../enterprise/vo/EnterpriseInfoVO.java` | 新增 | 企业信息 VO,继承 EnterpriseInfo,包含 postCount 扩展字段 | | `jeecg-boot/jeecg-boot-module/jeecg-module-zjrs/.../enterprise/mapper/EnterpriseInfoMapper.java` | 修改 | 添加 `queryPageWithPostCount` 和 `queryListWithPostCount` 自定义查询方法,返回 EnterpriseInfoVO | | `jeecg-boot/jeecg-boot-module/jeecg-module-zjrs/.../enterprise/mapper/xml/EnterpriseInfoMapper.xml` | 修改 | 添加 LEFT JOIN 子查询 SQL,通过 `enterprise_id` 关联 `post_info` 表统计岗位数 | | `jeecg-boot/jeecg-boot-module/jeecg-module-zjrs/.../enterprise/service/IEnterpriseInfoService.java` | 修改 | 添加 `queryPageWithPostCount` 和 `queryListWithPostCount` 服务接口方法 | | `jeecg-boot/jeecg-boot-module/jeecg-module-zjrs/.../enterprise/service/impl/EnterpriseInfoServiceImpl.java` | 修改 | 实现自定义查询方法,委托给 Mapper 执行 | | `jeecg-boot/jeecg-boot-module/jeecg-module-zjrs/.../enterprise/controller/EnterpriseInfoController.java` | 修改 | 分页列表接口改用 `queryPageWithPostCount`;导出方法重写以包含岗位数,处理 selections 选中导出和全量导出两种场景 | | `jeecgboot-vue3/src/views/recruitment/enterprise/EnterpriseInfo.data.ts` | 修改 | 更新 columns 定义,调整为 12 列新字段配置 | --- ### 2026-06-04:数据字典字段适配(列表显示 + 表单下拉 + 导出翻译) **需求描述:** 将企业信息模块中匹配数据字典的字段从普通文本输入改为下拉选择,列表页显示中文标签,导出时自动翻译字典值为中文。 **涉及字典及字段映射:** | 字段名 | 字典编码 | 说明 | |------------------|-----------------|--------| | `businessStatus` | BusinessStatus | 经营状态 | | `companyType` | CompanyType | 单位类型 | | `dataSource` | DataSource | 数据来源 | | `staffSize` | CompanySize | 人员规模 | | `industryField` | IndustryField | 行业领域 | **涉及文件:** | 文件 | 操作 | 原因 | |--------------------------------------------------|----|---------------------------------------| | `jeecgboot-vue3/src/views/recruitment/enterprise/EnterpriseInfoList.vue` | 修改 | 搜索字段改为单位名称/统一信用代码/注册地址/经营地址/单位类型/所属行业/数据来源;单位类型、数据来源使用 `` 字典下拉;导入 `useDict` 并添加 `getDictOptions`/`getDictText`;`bodyCell` 插槽添加 4 个字典字段的翻译渲染 | | `jeecgboot-vue3/src/views/recruitment/enterprise/components/EnterpriseInfoForm.vue` | 修改 | 导入 `useDict`,预加载 5 个字典;5 个字典字段从 `` 改为 `` 下拉选择;校验提示从"请输入"改为"请选择" | | `jeecg-boot/.../enterprise/controller/EnterpriseInfoController.java` | 修改 | 添加 `EXPORT_DICT_FIELD_MAP` 静态常量映射 4 个字段到字典编码;导出流程增加 `translateDictFields` 调用 | | `jeecg-boot/.../enterprise/service/IEnterpriseInfoService.java` | 修改 | 添加 `translateDictFields` 方法声明 | | `jeecg-boot/.../enterprise/service/impl/EnterpriseInfoServiceImpl.java` | 修改 | 注入 `IDictionaryItemService`;实现 `translateDictFields` 方法,采用后端内存映射方案批量查询字典并替换字段值 | ### 2026-06-05:详情查看改用独立的 a-descriptions 详情弹窗 **问题描述:** 原详情查看功能复用 `EnterpriseInfoModal` + `EnterpriseInfoForm`,打开的是禁用状态的编辑表单,布局与编辑界面相同但字段不可编辑,体验与人员信息详情查看一致。 **解决方案:** 新建独立的 `EnterpriseInfoDetailModal` 组件,使用 `a-descriptions` 描述列表以只读方式展示数据。 **实现要点:** - **基本信息区** — 使用 `a-descriptions :column="3" bordered` 展示 22 个字段(单位名称、信用代码、经营状态、单位类型、行业领域、数据来源等),字典字段通过 `getDictText` 转换 - **单位详细信息区** — 带 `` 分隔标题,展示 14 个字段(单位标签、人员规模、联系人、办公地址、单位简介全宽等) - **单位形象区** — 使用 `a-descriptions :column="1"` 每行一项单独展示: - logo 图片用 `a-image` 正方形展示(150x150px) - 宣传视频用原生 `