候选人历史工作经历
- 支持在编辑页手动补录候选人的历史工作经历,保存后会覆盖当前记录下已有的工作经历。
+ 支持手动维护候选人的历史工作经历,保存后随招聘记录一起提交。
新增经历
item.recruitId);
+ this.ids = selection.map(item => item.id);
+ this.recruitIds = selection.map(item => item.recruitId);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
@@ -958,7 +965,8 @@ export default {
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
- const recruitId = row.recruitId || this.ids[0];
+ const id = row.id || this.ids[0];
+ const recruitId = row.recruitId || this.recruitIds[0];
if (this.isPreviewMode()) {
const target = this.findPreviewRecruitment(recruitId);
if (target) {
@@ -973,7 +981,7 @@ export default {
this.isAdd = false;
return;
}
- getStaffRecruitment(recruitId).then(response => {
+ getStaffRecruitment(id).then(response => {
this.form = {
...this.form,
...response.data,
@@ -986,6 +994,7 @@ export default {
},
/** 详情按钮操作 */
handleDetail(row) {
+ const id = row.id;
const recruitId = row.recruitId;
if (this.isPreviewMode()) {
const target = this.findPreviewRecruitment(recruitId);
@@ -998,7 +1007,7 @@ export default {
}
return;
}
- getStaffRecruitment(recruitId).then(response => {
+ getStaffRecruitment(id).then(response => {
this.recruitmentDetail = {
...response.data,
workExperienceList: this.normalizeWorkExperienceList(response.data && response.data.workExperienceList)
@@ -1102,7 +1111,7 @@ export default {
},
/** 校验工作经历 */
validateWorkExperienceList() {
- if (this.isAdd || !this.isSocialRecruitment(this.form)) {
+ if (!this.isSocialRecruitment(this.form)) {
return true;
}
const workExperienceList = this.normalizeWorkExperienceList(this.form.workExperienceList);
@@ -1183,9 +1192,7 @@ export default {
return;
}
if (this.isAdd) {
- const addData = { ...formData };
- delete addData.workExperienceList;
- addStaffRecruitment(addData).then(response => {
+ addStaffRecruitment(formData).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
@@ -1202,13 +1209,14 @@ export default {
},
/** 删除按钮操作 */
handleDelete(row) {
- const recruitIds = row.recruitId || this.ids;
+ const ids = row.id || this.ids;
+ const recruitIds = row.recruitId || this.recruitIds;
if (this.isPreviewMode()) {
this.$modal.msgSuccess(`预览模式:已模拟删除 ${recruitIds}`);
return;
}
this.$modal.confirm('是否确认删除招聘信息编号为"' + recruitIds + '"的数据项?').then(function() {
- return delStaffRecruitment(recruitIds);
+ return delStaffRecruitment(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
diff --git a/sql/ccdi_prod_init_20260428.sql b/sql/ccdi_prod_init_20260428.sql
index 5443bd47..50edae6f 100644
--- a/sql/ccdi_prod_init_20260428.sql
+++ b/sql/ccdi_prod_init_20260428.sql
@@ -1046,6 +1046,7 @@ DROP TABLE IF EXISTS `ccdi_staff_recruitment`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `ccdi_staff_recruitment` (
+ `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`recruit_id` varchar(32) COLLATE utf8mb4_general_ci NOT NULL COMMENT '招聘项目编号',
`recruit_name` varchar(100) COLLATE utf8mb4_general_ci NOT NULL COMMENT '招聘项目名称',
`pos_name` varchar(100) COLLATE utf8mb4_general_ci NOT NULL COMMENT '职位名称',
@@ -1067,7 +1068,8 @@ CREATE TABLE `ccdi_staff_recruitment` (
`updated_by` varchar(20) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '记录更新人',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
- PRIMARY KEY (`recruit_id`),
+ PRIMARY KEY (`id`),
+ KEY `idx_staff_recruitment_recruit_id` (`recruit_id`),
KEY `idx_cand_id` (`cand_id`),
KEY `idx_admit_status` (`admit_status`),
KEY `idx_interviewer_id1` (`interviewer_id1`)
@@ -1083,6 +1085,7 @@ DROP TABLE IF EXISTS `ccdi_staff_recruitment_work`;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `ccdi_staff_recruitment_work` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `recruitment_id` bigint(20) NOT NULL COMMENT '关联招聘信息主键ID',
`recruit_id` varchar(32) NOT NULL COMMENT '关联招聘记录编号',
`sort_order` int(11) NOT NULL DEFAULT '1' COMMENT '排序号,1 表示最近一段经历',
`company_name` varchar(200) NOT NULL COMMENT '工作单位',
@@ -1098,6 +1101,8 @@ CREATE TABLE `ccdi_staff_recruitment_work` (
`updated_by` varchar(20) DEFAULT NULL COMMENT '更新人',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
+ KEY `idx_recruitment_id` (`recruitment_id`),
+ KEY `idx_recruitment_id_sort_order` (`recruitment_id`,`sort_order`),
KEY `idx_recruit_id` (`recruit_id`),
KEY `idx_recruit_id_sort_order` (`recruit_id`,`sort_order`)
) ENGINE=InnoDB AUTO_INCREMENT=36 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='招聘信息历史工作经历表';
diff --git a/sql/migration/2026-05-07-add-staff-recruitment-auto-id.sql b/sql/migration/2026-05-07-add-staff-recruitment-auto-id.sql
new file mode 100644
index 00000000..71f5e0d3
--- /dev/null
+++ b/sql/migration/2026-05-07-add-staff-recruitment-auto-id.sql
@@ -0,0 +1,12 @@
+-- 招聘信息主表增加自增主键ID
+-- 1. recruit_id 从物理主键调整为普通业务编号,允许重复。
+-- 2. 新增 id 作为 ccdi_staff_recruitment 的自增主键。
+
+ALTER TABLE `ccdi_staff_recruitment`
+ CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
+
+ALTER TABLE `ccdi_staff_recruitment`
+ DROP PRIMARY KEY,
+ ADD COLUMN `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID' FIRST,
+ ADD PRIMARY KEY (`id`),
+ ADD KEY `idx_staff_recruitment_recruit_id` (`recruit_id`);
diff --git a/sql/migration/2026-05-07-allow-duplicate-staff-recruitment-id.sql b/sql/migration/2026-05-07-allow-duplicate-staff-recruitment-id.sql
new file mode 100644
index 00000000..f8d7c50d
--- /dev/null
+++ b/sql/migration/2026-05-07-allow-duplicate-staff-recruitment-id.sql
@@ -0,0 +1,89 @@
+-- 招聘信息允许招聘项目编号重复
+-- 1. 移除 ccdi_staff_recruitment.recruit_id 唯一索引,保留普通查询索引。
+-- 2. ccdi_staff_recruitment_work 增加 recruitment_id,改为关联招聘信息自增主键。
+
+SET @schema_name = DATABASE();
+
+SET @drop_unique_sql = (
+ SELECT IF(
+ COUNT(1) > 0,
+ 'ALTER TABLE `ccdi_staff_recruitment` DROP INDEX `uk_staff_recruitment_recruit_id`',
+ 'SELECT 1'
+ )
+ FROM information_schema.statistics
+ WHERE table_schema = @schema_name
+ AND table_name = 'ccdi_staff_recruitment'
+ AND index_name = 'uk_staff_recruitment_recruit_id'
+);
+PREPARE stmt FROM @drop_unique_sql;
+EXECUTE stmt;
+DEALLOCATE PREPARE stmt;
+
+SET @add_recruit_id_index_sql = (
+ SELECT IF(
+ COUNT(1) = 0,
+ 'ALTER TABLE `ccdi_staff_recruitment` ADD KEY `idx_staff_recruitment_recruit_id` (`recruit_id`)',
+ 'SELECT 1'
+ )
+ FROM information_schema.statistics
+ WHERE table_schema = @schema_name
+ AND table_name = 'ccdi_staff_recruitment'
+ AND index_name = 'idx_staff_recruitment_recruit_id'
+);
+PREPARE stmt FROM @add_recruit_id_index_sql;
+EXECUTE stmt;
+DEALLOCATE PREPARE stmt;
+
+SET @add_work_recruitment_id_sql = (
+ SELECT IF(
+ COUNT(1) = 0,
+ 'ALTER TABLE `ccdi_staff_recruitment_work` ADD COLUMN `recruitment_id` BIGINT NULL COMMENT ''关联招聘信息主键ID'' AFTER `id`',
+ 'SELECT 1'
+ )
+ FROM information_schema.columns
+ WHERE table_schema = @schema_name
+ AND table_name = 'ccdi_staff_recruitment_work'
+ AND column_name = 'recruitment_id'
+);
+PREPARE stmt FROM @add_work_recruitment_id_sql;
+EXECUTE stmt;
+DEALLOCATE PREPARE stmt;
+
+UPDATE `ccdi_staff_recruitment_work` w
+JOIN `ccdi_staff_recruitment` r
+ ON w.`recruit_id` COLLATE utf8mb4_general_ci = r.`recruit_id` COLLATE utf8mb4_general_ci
+SET w.`recruitment_id` = r.`id`
+WHERE w.`recruitment_id` IS NULL;
+
+ALTER TABLE `ccdi_staff_recruitment_work`
+ MODIFY COLUMN `recruitment_id` BIGINT NOT NULL COMMENT '关联招聘信息主键ID';
+
+SET @add_work_recruitment_id_index_sql = (
+ SELECT IF(
+ COUNT(1) = 0,
+ 'ALTER TABLE `ccdi_staff_recruitment_work` ADD KEY `idx_recruitment_id` (`recruitment_id`)',
+ 'SELECT 1'
+ )
+ FROM information_schema.statistics
+ WHERE table_schema = @schema_name
+ AND table_name = 'ccdi_staff_recruitment_work'
+ AND index_name = 'idx_recruitment_id'
+);
+PREPARE stmt FROM @add_work_recruitment_id_index_sql;
+EXECUTE stmt;
+DEALLOCATE PREPARE stmt;
+
+SET @add_work_recruitment_sort_index_sql = (
+ SELECT IF(
+ COUNT(1) = 0,
+ 'ALTER TABLE `ccdi_staff_recruitment_work` ADD KEY `idx_recruitment_id_sort_order` (`recruitment_id`, `sort_order`)',
+ 'SELECT 1'
+ )
+ FROM information_schema.statistics
+ WHERE table_schema = @schema_name
+ AND table_name = 'ccdi_staff_recruitment_work'
+ AND index_name = 'idx_recruitment_id_sort_order'
+);
+PREPARE stmt FROM @add_work_recruitment_sort_index_sql;
+EXECUTE stmt;
+DEALLOCATE PREPARE stmt;