# 标签库模块开发记录 **日期:** 2026-06-04 --- ## 一、个人标签库模块 ### 模块概述 个人标签库模块(personalTag)用于管理个人标签信息,支持省一体化平台回流和本地自定义两种来源的标签,并提供标签的启用/停用状态管理。该模块采用 JeecgBoot 的前后端分离架构,前端基于 Vue3 + Ant Design Vue,后端基于 Spring Boot + MyBatis-Plus。 ### 业务关系 - **PersonalTag(个人标签信息)**:独立主表,存储个人标签的基础信息,通过 PERSONAL_TAG_RELATION 中间表与 PersonalInfo(个人基本信息)表建立多对多关联。 - **PersonalTagRelation(个人标签关联)**:中间表,仅含 `tag_id` + `personal_id` 两个字段,联合主键。 --- ### 模块文件结构 #### 前端(jeecgboot-vue3/src/views/recruitment/personalTag/) | 文件 | 用途 | |-------------------------------------|--------------------------------| | `PersonalTagList.vue` | 个人标签列表页面,提供查询、新增、编辑、详情、删除、批量删除、批量启用/停用、导入导出、高级查询等功能 | | `PersonalTag.api.ts` | 个人标签 API 封装 | | `PersonalTag.data.ts` | 列表页表格列配置(9列)与高级查询字段定义(8个查询字段) | | `components/PersonalTagForm.vue` | 个人标签新增/编辑/详情表单组件 | | `components/PersonalTagModal.vue` | 个人标签弹窗组件,包裹 PersonalTagForm,全屏模式 | | `components/PersonalTagPersonalModal.vue` | 关联人员列表弹窗组件,点击"本地关联人数"时弹出 | #### 后端(jeecg-boot/jeecg-boot-module/jeecg-module-zjrs/.../org/jeecg/modules/zjrs/tag/) | 层次 | 文件 | |--------------|---------------------------------------------| | Controller | `controller/PersonalTagController.java` | | Entity | `entity/PersonalTag.java` | | Service | `service/IPersonalTagService.java` | | Service Impl | `service/impl/PersonalTagServiceImpl.java` | | Mapper | `mapper/PersonalTagMapper.java` | | Mapper XML | `mapper/xml/PersonalTagMapper.xml` | --- ### 开发记录 #### 功能清单 | 功能 | 说明 | |---------------|----------------------------------------------------------------| | 分页列表查询 | 支持按标签名称、所属一级分类、所属二级分类、启用状态、数据来源等条件查询,9 列展示(含本地关联人数) | | 新增 | 全屏表单,支持 8 个标签字段录入 | | 编辑 | 复用新增表单,预填充已有数据 | | 详情 | 表单禁用模式查看标签全部信息 | | 删除 / 批量删除 | 支持单条删除和批量删除,删除前弹窗确认 | | 批量启用/停用 | 支持选中多条标签后批量修改启用状态 | | 导入 / 导出 Excel | 基于 Jeecg 标准 Excel 导出导入功能,导出使用 VO 含本地关联人数 | | 高级查询 | 8 个查询字段,支持灵活的筛选条件 | | 标签名称唯一性校验 | 新增/编辑时后端校验标签名称不可重复 | #### 必填字段 共 3 个必填字段:标签名称、启用状态、数据来源。 --- ### 功能开发 | 日期 | 内容 | 涉及文件 | 说明 | |------------|--------------|---------------|------------------------| | 2026-06-02 | 个人标签模块初始构建 | 前端 5 个文件 + 后端 6 个文件 | 完成个人标签管理的基础 CRUD 功能,含 Excel 导入导出、批量启用/停用、标签名称唯一性校验 | | 2026-06-05 | 本地关联人数可点击查看人员列表 | 后端 1 文件 + 前端 3 文件 | 关联人数列变为可点击链接,弹窗展示标签关联的人员列表,支持搜索和查看详情 | ### PersonalTag 实体字段一览 | 分类 | 字段 | 说明 | |--------|----------------------|---------------| | 基础信息 | provinceStandardCode | 省标编码 | | | tagCode | 标签编码 | | | tagName | 标签名称(必填) | | | firstCategory | 所属一级分类 | | | secondCategory | 所属二级分类 | | | tagDescription | 标签说明 | | 状态 | tagStatus | 启用状态(必填,1启用/0停用) | | | dataSource | 数据来源(必填,1省一体化平台回流/2本地自定义) | | 系统字段 | id / createBy / createTime / updateBy / updateTime / sysOrgCode | 系统内置字段 | ### 表格列(9列) | 列 | 对应字段 | 说明 | |---------------|-------------------|------------------------| | 序号 | index | 自定义列,customRender 显示行索引 | | 省标编码 | provinceStandardCode | 原"省标标码"更名 | | 标签名称 | tagName | — | | 所属一级分类 | firstCategory | — | | 所属二级分类 | secondCategory | — | | 标签说明 | tagDescription | — | | 启用状态 | tagStatus | customRender 翻译为"启用"/"停用" | | 本地关联人数 | relationCount | 关联中间表 COUNT(DISTINCT personal_id) 计算 | | 数据来源 | dataSource | customRender 翻译为"省一体化平台回流"/"本地自定义" | ### 搜索区域(5个查询条件) 标签名称、所属一级分类、所属二级分类、启用状态(下拉选择)、数据来源(下拉选择) --- #### 2026-06-02:个人标签模块初始构建 **需求描述:** 构建个人标签管理模块,实现标签的基础 CRUD、Excel 导入导出功能,支持批量启用/停用状态管理,新增/编辑时后端校验标签名称唯一性。 **涉及文件:** | 文件 | 操作 | 原因 | |--------------------------------------------------|----|---------------------------------------| | `jeecgboot-vue3/src/views/recruitment/personalTag/PersonalTagList.vue` | 新增 | 个人标签列表页,含查询区域(3个条件)、表格(9列)、操作栏、导入导出和批量操作按钮 | | `jeecgboot-vue3/src/views/recruitment/personalTag/PersonalTag.api.ts` | 新增 | 封装个人标签 CRUD、导入导出、批量更新状态 API 接口 | | `jeecgboot-vue3/src/views/recruitment/personalTag/PersonalTag.data.ts` | 新增 | 定义 9 列表格列配置与 8 个高级查询字段 | | `jeecgboot-vue3/src/views/recruitment/personalTag/components/PersonalTagForm.vue` | 新增 | 个人标签表单,含 3 个必填字段校验,8 个字段录入 | | `jeecgboot-vue3/src/views/recruitment/personalTag/components/PersonalTagModal.vue` | 新增 | 全屏弹窗包裹 PersonalTagForm,提供新增/编辑/详情入口 | | `jeecg-boot/.../tag/controller/PersonalTagController.java` | 新增 | 个人标签 REST 控制器,提供 CRUD + 导出导入 + 批量修改状态接口 | | `jeecg-boot/.../tag/entity/PersonalTag.java` | 新增 | 个人标签实体,映射 `personal_tag` 表 | | `jeecg-boot/.../tag/service/IPersonalTagService.java` | 新增 | 服务接口,定义 `batchUpdateStatus` 和 `checkTagNameUnique` 方法 | | `jeecg-boot/.../tag/service/impl/PersonalTagServiceImpl.java` | 新增 | 服务实现,批量修改状态使用 AssertUtils 校验参数合法性;标签名称唯一性校验排除自身ID | | `jeecg-boot/.../tag/mapper/PersonalTagMapper.java` | 新增 | Mapper 接口,继承 BaseMapper | | `jeecg-boot/.../tag/mapper/xml/PersonalTagMapper.xml` | 新增 | MyBatis XML 映射骨架 | --- ## 二、企业标签库模块 ### 模块概述 企业标签库模块(enterpriseTag)用于管理企业标签信息,功能与个人标签库对称,支持省一体化平台回流和本地自定义两种来源的标签,并提供标签的启用/停用状态管理。 ### 业务关系 - **EnterpriseTag(企业标签信息)**:独立主表,存储企业标签的基础信息,通过 ENTERPRISE_TAG_RELATION 中间表与 EnterpriseInfo(企业基本信息)表建立多对多关联。 - **EnterpriseTagRelation(企业标签关联)**:中间表,仅含 `tag_id` + `enterprise_id` 两个字段,联合主键。 --- ### 模块文件结构 #### 前端(jeecgboot-vue3/src/views/recruitment/enterpriseTag/) | 文件 | 用途 | |-------------------------------------|--------------------------------| | `EnterpriseTagList.vue` | 企业标签列表页面,提供查询、新增、编辑、详情、删除、批量删除、批量启用/停用、导入导出等功能 | | `EnterpriseTag.api.ts` | 企业标签 API 封装 | | `EnterpriseTag.data.ts` | 列表页表格列配置(9列)与高级查询字段定义(8个查询字段) | | `components/EnterpriseTagForm.vue` | 企业标签新增/编辑/详情表单组件 | | `components/EnterpriseTagModal.vue` | 企业标签弹窗组件,包裹 EnterpriseTagForm,全屏模式 | #### 后端(jeecg-boot/jeecg-boot-module/jeecg-module-zjrs/.../org/jeecg/modules/zjrs/tag/) | 层次 | 文件 | |--------------|---------------------------------------------| | Controller | `controller/EnterpriseTagController.java` | | Entity | `entity/EnterpriseTag.java` | | Service | `service/IEnterpriseTagService.java` | | Service Impl | `service/impl/EnterpriseTagServiceImpl.java` | | Mapper | `mapper/EnterpriseTagMapper.java` | | Mapper XML | `mapper/xml/EnterpriseTagMapper.xml` | --- ### 开发记录 #### 功能清单 | 功能 | 说明 | |---------------|----------------------------------------------------------------| | 分页列表查询 | 支持按标签名称、所属一级分类、所属二级分类、启用状态、数据来源等条件查询,9 列展示(含本地关联人数) | | 新增 | 全屏表单,支持 8 个标签字段录入 | | 编辑 | 复用新增表单,预填充已有数据 | | 详情 | 表单禁用模式查看标签全部信息 | | 删除 / 批量删除 | 支持单条删除和批量删除,删除前弹窗确认 | | 批量启用/停用 | 支持选中多条标签后批量修改启用状态 | | 导入 / 导出 Excel | 基于 Jeecg 标准 Excel 导出导入功能,导出使用 VO 含本地关联人数 | | 高级查询 | 已定义 superQuerySchema(8个查询字段),前端列表页中高级查询按钮已注释 | | 标签名称唯一性校验 | 新增/编辑时后端校验标签名称不可重复 | #### 必填字段 共 3 个必填字段:标签名称、启用状态、数据来源。 --- ### 功能开发 | 日期 | 内容 | 涉及文件 | 说明 | |------------|--------------|---------------|------------------------| | 2026-06-02 | 企业标签模块初始构建 | 前端 5 个文件 + 后端 6 个文件 | 完成企业标签管理的基础 CRUD 功能,含 Excel 导入导出、批量启用/停用、标签名称唯一性校验 | ### EnterpriseTag 实体字段一览 | 分类 | 字段 | 说明 | |--------|----------------------|---------------| | 基础信息 | provinceStandardCode | 省标编码 | | | tagCode | 标签编码 | | | tagName | 标签名称(必填) | | | firstCategory | 所属一级分类 | | | secondCategory | 所属二级分类 | | | tagDescription | 标签说明 | | 状态 | tagStatus | 启用状态(必填,1启用/0停用) | | | dataSource | 数据来源(必填,1省一体化平台回流/2本地自定义) | | 系统字段 | id / createBy / createTime / updateBy / updateTime / sysOrgCode | 系统内置字段 | ### 表格列(9列) 与个人标签库完全对称: | 列 | 对应字段 | 说明 | |---------------|-------------------|------------------------| | 序号 | index | 自定义列,customRender 显示行索引 | | 省标编码 | provinceStandardCode | 原"省标标码"更名 | | 标签名称 | tagName | — | | 所属一级分类 | firstCategory | — | | 所属二级分类 | secondCategory | — | | 标签说明 | tagDescription | — | | 启用状态 | tagStatus | customRender 翻译为"启用"/"停用" | | 本地关联人数 | relationCount | 关联中间表 COUNT(DISTINCT enterprise_id) 计算 | | 数据来源 | dataSource | customRender 翻译为"省一体化平台回流"/"本地自定义" | ### 搜索区域(5个查询条件) 标签名称、所属一级分类、所属二级分类、启用状态(下拉选择)、数据来源(下拉选择) --- #### 2026-06-02:企业标签模块初始构建 **需求描述:** 构建企业标签管理模块,实现标签的基础 CRUD、Excel 导入导出功能,支持批量启用/停用状态管理,新增/编辑时后端校验标签名称唯一性。功能与个人标签库完全对称。 **涉及文件:** | 文件 | 操作 | 原因 | |--------------------------------------------------|----|---------------------------------------| | `jeecgboot-vue3/src/views/recruitment/enterpriseTag/EnterpriseTagList.vue` | 新增 | 企业标签列表页,含查询区域(3个条件)、表格(9列)、操作栏、导入导出和批量操作按钮(高级查询按钮已注释) | | `jeecgboot-vue3/src/views/recruitment/enterpriseTag/EnterpriseTag.api.ts` | 新增 | 封装企业标签 CRUD、导入导出、批量更新状态 API 接口 | | `jeecgboot-vue3/src/views/recruitment/enterpriseTag/EnterpriseTag.data.ts` | 新增 | 定义 9 列表格列配置与 8 个高级查询字段 | | `jeecgboot-vue3/src/views/recruitment/enterpriseTag/components/EnterpriseTagForm.vue` | 新增 | 企业标签表单,含 3 个必填字段校验,8 个字段录入 | | `jeecgboot-vue3/src/views/recruitment/enterpriseTag/components/EnterpriseTagModal.vue` | 新增 | 全屏弹窗包裹 EnterpriseTagForm,提供新增/编辑/详情入口 | | `jeecg-boot/.../tag/controller/EnterpriseTagController.java` | 新增 | 企业标签 REST 控制器,提供 CRUD + 导出导入 + 批量修改状态接口 | | `jeecg-boot/.../tag/entity/EnterpriseTag.java` | 新增 | 企业标签实体,映射 `enterprise_tag` 表 | | `jeecg-boot/.../tag/service/IEnterpriseTagService.java` | 新增 | 服务接口,定义 `batchUpdateStatus` 和 `checkTagNameUnique` 方法 | | `jeecg-boot/.../tag/service/impl/EnterpriseTagServiceImpl.java` | 新增 | 服务实现,批量修改状态使用 AssertUtils 校验参数合法性;标签名称唯一性校验排除自身ID | | `jeecg-boot/.../tag/mapper/EnterpriseTagMapper.java` | 新增 | Mapper 接口,继承 BaseMapper | | `jeecg-boot/.../tag/mapper/xml/EnterpriseTagMapper.xml` | 新增 | MyBatis XML 映射骨架 | --- ## 三、标签关联中间表 ### 模块概述 为支持标签库与业务信息的多对多关联,建立两个关联中间表。 ### 业务关系 - **PERSONAL_TAG_RELATION**:关联 PERSONAL_TAG(个人标签)与 PERSONAL_INFO(个人基本信息),通过 `tag_id` + `personal_id` 建立多对多关系。 - **ENTERPRISE_TAG_RELATION**:关联 ENTERPRISE_TAG(企业标签)与 ENTERPRISE_INFO(企业基本信息),通过 `tag_id` + `enterprise_id` 建立多对多关系。 两个表均只有两个字段(标签ID + 业务实体ID),并使用联合主键。 --- ### 模块文件结构 #### 后端(jeecg-boot/jeecg-boot-module/jeecg-module-zjrs/.../org/jeecg/modules/zjrs/tag/) | 层次 | 文件 | |--------------|---------------------------------------------| | Entity | `entity/PersonalTagRelation.java` | | Entity | `entity/EnterpriseTagRelation.java` | | Mapper | `mapper/PersonalTagRelationMapper.java` | | Mapper | `mapper/EnterpriseTagRelationMapper.java` | | Mapper XML | `mapper/xml/PersonalTagRelationMapper.xml` | | Mapper XML | `mapper/xml/EnterpriseTagRelationMapper.xml` | #### SQL脚本 | 文件 | 操作 | 说明 | |--------------------------------------------------|----|----| | `.docs/sql/标签库信息.sql` | 新增 | 在个人标签表和企业标签表之后追加 PERSONAL_TAG_RELATION 和 ENTERPRISE_TAG_RELATION 两张关联中间表的建表语句 | --- ### 关联表字段一览 #### PERSONAL_TAG_RELATION | 字段 | 类型 | 说明 | 约束 | |-------------|-------------|------------------|---------------| | tag_id | VARCHAR(36) | 标签ID(关联PERSONAL_TAG.ID) | NOT NULL,联合主键 | | personal_id | VARCHAR(36) | 个人ID(关联PERSONAL_INFO.ID) | NOT NULL,联合主键 | #### ENTERPRISE_TAG_RELATION | 字段 | 类型 | 说明 | 约束 | |---------------|-------------|---------------------|---------------| | tag_id | VARCHAR(36) | 标签ID(关联ENTERPRISE_TAG.ID) | NOT NULL,联合主键 | | enterprise_id | VARCHAR(36) | 企业ID(关联ENTERPRISE_INFO.ID) | NOT NULL,联合主键 | --- ### 2026-06-04:关联中间表构建 **需求描述:** 为标签库与业务信息建立多对多关联关系,创建两张中间表,两个中间表均只包含标签ID + 业务实体ID两个字段,使用联合主键。 **涉及文件:** | 文件 | 操作 | 原因 | |--------------------------------------------------|----|---------------------------------------| | `.docs/sql/标签库信息.sql` | 修改 | 新增 PERSONAL_TAG_RELATION 和 ENTERPRISE_TAG_RELATION 两张关联中间表的建表语句,含表注释和字段注释 | | `jeecg-boot/.../tag/entity/PersonalTagRelation.java` | 新增 | 个人标签关联实体,映射 `personal_tag_relation` 表,仅含 `tagId` + `personalId` 两个字段 | | `jeecg-boot/.../tag/entity/EnterpriseTagRelation.java` | 新增 | 企业标签关联实体,映射 `enterprise_tag_relation` 表,仅含 `tagId` + `enterpriseId` 两个字段 | | `jeecg-boot/.../tag/mapper/PersonalTagRelationMapper.java` | 新增 | 个人标签关联 Mapper 接口,继承 BaseMapper | | `jeecg-boot/.../tag/mapper/EnterpriseTagRelationMapper.java` | 新增 | 企业标签关联 Mapper 接口,继承 BaseMapper | | `jeecg-boot/.../tag/mapper/xml/PersonalTagRelationMapper.xml` | 新增 | MyBatis XML 映射骨架 | | `jeecg-boot/.../tag/mapper/xml/EnterpriseTagRelationMapper.xml` | 新增 | MyBatis XML 映射骨架 | --- ### 2026-06-04:标签库字段调整 + 本地关联人数 + VO 查询 **需求描述:** 调整个人标签库和企业标签库的查询字段与展示字段,增加"本地关联人数"列,通过关联中间表计算每个标签关联的不重复个人/企业数量;创建 VO 类承载分页列表导出数据,后端分页查询和导出接口改为 VO 映射。 **查询字段调整(从3个改为5个):** | 新查询字段 | 对应字段 | 说明 | |-----------|---------|------| | 标签名称 | tagName | 保留 | | 所属一级分类 | firstCategory | 新增查询字段 | | 所属二级分类 | secondCategory | 新增查询字段 | | 启用状态 | tagStatus | 原"标签状态"改名为"启用状态" | | 数据来源 | dataSource | 保留 | **删除的查询字段:** 无(原有标签状态改为启用状态) **表格列调整(9列):** | 新列 | 对应字段 | 说明 | |------|---------|------| | 序号 | index | 保留 | | 省标编码 | provinceStandardCode | 原"省标标码"改名,取消标签编码列 | | 标签名称 | tagName | 保留 | | 所属一级分类 | firstCategory | 保留 | | 所属二级分类 | secondCategory | 保留 | | 标签说明 | tagDescription | 保留 | | 启用状态 | tagStatus | 原"标签启用状态"改名 | | 本地关联人数 | relationCount | 新增,关联中间表 COUNT(DISTINCT) 计算 | | 数据来源 | dataSource | 保留 | **删除的列:** 标签编码 **涉及文件:** | 文件 | 操作 | 原因 | |------|------|------| | `jeecg-boot/.../tag/vo/PersonalTagVo.java` | 新增 | 个人标签 VO,含 entity 所有字段 + relationCount,标注 `@Excel` 用于导出 | | `jeecg-boot/.../tag/vo/EnterpriseTagVo.java` | 新增 | 企业标签 VO,含 entity 所有字段 + relationCount,标注 `@Excel` 用于导出 | | `jeecg-boot/.../tag/mapper/xml/PersonalTagMapper.xml` | 修改 | 新增 `queryPageListWithRelationCount` 和 `queryListWithRelationCount` 两个 SQL 查询,通过子查询 LEFT JOIN PERSONAL_TAG_RELATION 计算 COUNT(DISTINCT PERSONAL_ID) 并应用 `${ew.customSqlSegment}` 条件过滤 | | `jeecg-boot/.../tag/mapper/xml/EnterpriseTagMapper.xml` | 修改 | 同上,LEFT JOIN ENTERPRISE_TAG_RELATION 计算 COUNT(DISTINCT ENTERPRISE_ID) | | `jeecg-boot/.../tag/mapper/PersonalTagMapper.java` | 修改 | 新增两个 VO 查询方法声明 | | `jeecg-boot/.../tag/mapper/EnterpriseTagMapper.java` | 修改 | 新增两个 VO 查询方法声明 | | `jeecg-boot/.../tag/service/IPersonalTagService.java` | 修改 | 新增 `queryPageListWithRelationCount` 和 `queryListWithRelationCount` 方法声明 | | `jeecg-boot/.../tag/service/IEnterpriseTagService.java` | 修改 | 新增 `queryPageListWithRelationCount` 和 `queryListWithRelationCount` 方法声明 | | `jeecg-boot/.../tag/service/impl/PersonalTagServiceImpl.java` | 修改 | 实现两个 VO 查询方法;`queryListWithRelationCount` 中处理导出 selections 选中记录筛选 | | `jeecg-boot/.../tag/service/impl/EnterpriseTagServiceImpl.java` | 修改 | 同上 | | `jeecg-boot/.../tag/controller/PersonalTagController.java` | 修改 | list 接口返回类型改为 `IPage`,委托 Service 的 VO 查询方法;exportXls 改写为使用 `JeecgEntityExcelView` + `PersonalTagVo.class` + `queryListWithRelationCount` 导出 VO 列表 | | `jeecg-boot/.../tag/controller/EnterpriseTagController.java` | 修改 | 同上,使用 `EnterpriseTagVo` | | `jeecgboot-vue3/src/views/recruitment/personalTag/PersonalTagList.vue` | 修改 | 查询表单从 3 个字段改为 5 个(新增所属一级分类、所属二级分类,标签状态改为启用状态),布局调整为 5+1 按钮每行 | | `jeecgboot-vue3/src/views/recruitment/personalTag/PersonalTag.data.ts` | 修改 | 表格列去掉标签编码,省标标码改名为省标编码,标签启用状态改名为启用状态,新增本地关联人数列 | | `jeecgboot-vue3/src/views/recruitment/enterpriseTag/EnterpriseTagList.vue` | 修改 | 同上 | | `jeecgboot-vue3/src/views/recruitment/enterpriseTag/EnterpriseTag.data.ts` | 修改 | 同上 | --- ### 2026-06-04:标签库 dataSource 字段改为数据字典驱动 **需求描述:** 将个人标签库和企业标签库的前端 dataSource 字段从硬编码 `` 改为通过 `useDict` 字典工具从后端批量接口加载字典数据,遵循项目现有字典实现规范。 **涉及文件:** | 文件 | 操作 | 原因 | |------|------|------| | `jeecgboot-vue3/src/views/recruitment/personalTag/PersonalTagList.vue` | 修改 | 查询表单 dataSource 的 `` 从硬编码 `` 改为 `:options="dataSourceOptions"` 绑定字典选项;`bodyCell` 插槽新增 `getDictText('DataSource', text)` 翻译渲染;脚本区导入 `useDict`、`computed`,设置 `getDictOptions` 和 `dataSourceOptions` | | `jeecgboot-vue3/src/views/recruitment/personalTag/PersonalTag.data.ts` | 修改 | 移除 dataSource 列的硬编码 `customRender`(改为由 `bodyCell` 统一翻译) | | `jeecgboot-vue3/src/views/recruitment/personalTag/components/PersonalTagForm.vue` | 修改 | 表单 dataSource 从硬编码 `` 改为 `:options="dataSourceOptions"` 绑定字典选项;脚本区导入 `useDict`,设置 `getDictOptions` 和 `dataSourceOptions` | | `jeecgboot-vue3/src/views/recruitment/enterpriseTag/EnterpriseTagList.vue` | 修改 | 同上 PersonalTagList.vue 改动 | --- ### 2026-06-05:本地关联企业数可点击查看企业列表 **需求描述:** 企业标签列表的"本地关联企业数"列改为可点击链接,点击后弹出弹窗展示该标签关联的企业列表。弹窗内包含企业查询表单和数据表格,支持按单位名称、统一信用代码、单位类型、所属行业、数据来源等条件搜索,并可点击"详情"打开企业信息详情弹窗。 **后端改动:** | 文件 | 操作 | 原因 | |------|------|------| | `jeecg-boot/.../tag/controller/EnterpriseTagController.java` | 修改 | 新增 `EnterpriseInfoService` 和 `EnterpriseTagRelationMapper` 注入;新增 `GET /tag/enterpriseTag/queryEnterpriseList` 端点,根据 `tagId` 从关联表查出企业ID列表,结合前端搜索条件分页查询企业信息(含岗位数) | **前端改动:** | 文件 | 操作 | 原因 | |------|------|------| | `jeecgboot-vue3/src/views/recruitment/enterpriseTag/EnterpriseTag.api.ts` | 修改 | 新增 `queryEnterpriseList` API 枚举和导出函数 | | `jeecgboot-vue3/src/views/recruitment/enterpriseTag/components/EnterpriseTagEnterpriseModal.vue` | 新增 | 企业关联列表弹窗组件,仿照 `EnterprisePostListModal.vue` 模式实现:包含5个查询条件的搜索表单、企业信息数据表格(9列)、操作栏"详情"按钮调用 `EnterpriseInfoDetailModal` | | `jeecgboot-vue3/src/views/recruitment/enterpriseTag/EnterpriseTagList.vue` | 修改 | 在 `bodyCell` 插槽中新增 `relationCount` 列处理,渲染为可点击蓝色下划线数字;新增 `handleViewEnterpriseList` 方法打开企业列表弹窗;新增 `.link-count` 样式;引入并注册 `EnterpriseTagEnterpriseModal` 弹窗组件 | --- ### 2026-06-05:本地关联人数可点击查看人员列表 **需求描述:** 个人标签列表的"本地关联人数"列改为可点击链接,点击后弹出弹窗展示该标签关联的人员列表。弹窗内包含人员查询表单和数据表格,支持按姓名、证件号码、联系电话、求职状态、数据来源等条件搜索,并可点击"详情"打开人员信息详情弹窗。 **后端改动:** | 文件 | 操作 | 原因 | |------|------|------| | `jeecg-boot/.../tag/controller/PersonalTagController.java` | 修改 | 新增 `IPersonalInfoService` 和 `PersonalTagRelationMapper` 注入;新增 `GET /tag/personalTag/queryPersonalList` 端点,根据 `tagId` 从关联表查出个人ID列表,结合前端搜索条件分页查询个人信息 | **前端改动:** | 文件 | 操作 | 原因 | |------|------|------| | `jeecgboot-vue3/src/views/recruitment/personalTag/PersonalTag.api.ts` | 修改 | 新增 `queryPersonalList` API 枚举和导出函数 | | `jeecgboot-vue3/src/views/recruitment/personalTag/components/PersonalTagPersonalModal.vue` | 新增 | 个人关联列表弹窗组件,仿照 `EnterpriseTagEnterpriseModal.vue` 模式实现:包含5个查询条件的搜索表单(姓名、证件号码、联系电话、求职状态、数据来源)、人员信息数据表格(8列:序号/姓名/证件类型/证件号码/性别/联系电话/求职状态/数据来源)、操作栏"详情"按钮调用 `PersonalInfoDetailModal` | | `jeecgboot-vue3/src/views/recruitment/personalTag/PersonalTagList.vue` | 修改 | 在 `bodyCell` 插槽中新增 `relationCount` 列处理,渲染为可点击蓝色下划线数字;新增 `handleViewPersonalList` 方法打开人员列表弹窗;新增 `.link-count` 样式;引入并注册 `PersonalTagPersonalModal` 弹窗组件 | --- ### 2026-06-04:批量操作按钮常显(无选中时禁用) **需求描述:** 批量删除和批量启用/停用按钮始终显示在页面上,不随选中行数变化而显示/隐藏。当未选中任何数据行时按钮处于禁用(disabled)状态,选中数据行后按钮变为可用状态。 **涉及文件:** | 文件 | 操作 | 原因 | |------|------|------| | `jeecgboot-vue3/src/views/recruitment/personalTag/PersonalTagList.vue` | 修改 | 批量操作 `` 的 `v-if="selectedRowKeys.length > 0"` 改为始终渲染,使用 `:disabled="selectedRowKeys.length === 0"` 控制禁用状态 | | `jeecgboot-vue3/src/views/recruitment/enterpriseTag/EnterpriseTagList.vue` | 修改 | 同上 PersonalTagList.vue 改动 | --- ### 2026-06-04:标签表单新增优化(默认启用 + 字段禁用 + 标签编码自动生成) **需求描述:** 优化标签新增表单体验:新增时标签状态默认启用,数据来源默认为市系统并禁止编辑,省标编码禁止编辑,标签编码改为后端自动生成流水号(个人标签格式 `ZJGR`+三位流水,企业标签格式 `ZJQY`+三位流水)。 **后端改动:** | 文件 | 操作 | 原因 | |------|------|------| | `jeecg-boot/.../tag/service/IPersonalTagService.java` | 修改 | 新增 `generateTagCode()` 方法声明 | | `jeecg-boot/.../tag/service/IEnterpriseTagService.java` | 修改 | 新增 `generateTagCode()` 方法声明 | | `jeecg-boot/.../tag/service/impl/PersonalTagServiceImpl.java` | 修改 | 实现 `generateTagCode()`:查询 `tag_code LIKE 'ZJGR%'` 取最大流水号 +1,格式 `ZJGR%03d` | | `jeecg-boot/.../tag/service/impl/EnterpriseTagServiceImpl.java` | 修改 | 同上,前缀 `ZJQY` | | `jeecg-boot/.../tag/controller/PersonalTagController.java` | 修改 | 新增 `GET /generateTagCode` 接口 | | `jeecg-boot/.../tag/controller/EnterpriseTagController.java` | 修改 | 同上 | **前端改动:** | 文件 | 操作 | 原因 | |------|------|------| | `jeecgboot-vue3/src/views/recruitment/personalTag/PersonalTag.api.ts` | 修改 | 新增 `generateTagCode()` API 调用,使用 `isTransformResponse: false` 跳过消息提示 | | `jeecgboot-vue3/src/views/recruitment/enterpriseTag/EnterpriseTag.api.ts` | 修改 | 同上 | | `jeecgboot-vue3/src/views/recruitment/personalTag/components/PersonalTagForm.vue` | 修改 | 省标编码 `disabled` 占位"系统自动生成";标签编码 `disabled` 占位"系统自动生成",新增时调用后端生成流水号填充;数据来源 `disabled` | | `jeecgboot-vue3/src/views/recruitment/personalTag/components/PersonalTagForm.vue`(personaltag 小写目录) | 修改 | 同上 | | `jeecgboot-vue3/src/views/recruitment/enterpriseTag/components/EnterpriseTagForm.vue` | 修改 | 同 PersonalTagForm 改动;另将 `tagStatus` 默认值从 `''` 改为 `'1'`(启用),`dataSource` 默认值从 `''` 改为 `'2'`(市系统) | | `jeecgboot-vue3/src/views/recruitment/enterpriseTag/components/EnterpriseTagForm.vue`(enterprisetag 小写目录) | 修改 | 同上 | --- ### 2026-06-04:省系统标签禁用编辑/删除 **需求描述:** dataSource为'1'(省一体化平台回流)的标签属于省系统数据,不允许编辑和删除,只允许修改启用状态。单条记录的操作栏中编辑和删除按钮保持显示但置灰不可点击;批量删除时自动过滤掉省系统标签。 **涉及文件:** | 文件 | 操作 | 原因 | |------|------|------| | `jeecgboot-vue3/src/views/recruitment/personalTag/PersonalTagList.vue` | 修改 | `getTableAction` 中编辑按钮增加 `disabled: record.dataSource === '1'`;`getDropDownAction` 中删除按钮增加 `disabled: record.dataSource === '1'`;`batchHandleDelete` 增加省系统数据过滤逻辑,选中省系统标签时弹出警告并自动跳过 | | `jeecgboot-vue3/src/views/recruitment/enterpriseTag/EnterpriseTagList.vue` | 修改 | 同上 PersonalTagList.vue 改动 |