|
@@ -2,7 +2,7 @@
|
|
|
|
|
|
## API概述
|
|
|
|
|
|
-`/add-webpage-talent` 接口用于批量添加网页提取的人才信息到系统中。该接口能够将网页内容保存到MinIO存储,并为每个人才创建对应的业务卡片记录。
|
|
|
+`/add-webpage-talent` 接口用于批量添加网页提取的人才信息到系统中。该接口能够将网页内容保存到MinIO存储,并为每个人才创建对应的业务卡片记录。系统会自动设置数据来源信息(`origin_source`)和人才档案信息(`talent_profile`)。
|
|
|
|
|
|
---
|
|
|
|
|
@@ -46,7 +46,9 @@
|
|
|
"birthday": "1980-01-01",
|
|
|
"age": 44,
|
|
|
"native_place": "北京市",
|
|
|
- "residence": "北京市朝阳区"
|
|
|
+ "residence": "北京市朝阳区",
|
|
|
+ "pic_url": "https://example.com/photo.jpg",
|
|
|
+ "talent_profile": "资深酒店管理专家,拥有20年行业经验..."
|
|
|
}
|
|
|
],
|
|
|
"web_md": "# 酒店任命公告\n\n## 人事变动\n\n1. **张三** 被任命为北京万豪酒店总经理...\n\n更多内容..."
|
|
@@ -130,6 +132,17 @@
|
|
|
- **描述**: 年龄
|
|
|
- **示例**: `44`
|
|
|
|
|
|
+#### `talent_list[].pic_url` (可选)
|
|
|
+- **类型**: `String`
|
|
|
+- **描述**: 人才照片URL地址,系统会自动下载并保存到MinIO
|
|
|
+- **示例**: `"https://example.com/photo.jpg"`
|
|
|
+- **注意**: 如果提供了有效的图片URL,系统会自动下载图片并保存到MinIO存储中
|
|
|
+
|
|
|
+#### `talent_list[].talent_profile` (可选)
|
|
|
+- **类型**: `String`
|
|
|
+- **描述**: 人才档案信息,包含个人简介、工作经历、专业技能等详细信息
|
|
|
+- **示例**: `"资深酒店管理专家,拥有20年行业经验,曾在多家国际知名酒店担任高级管理职位..."`
|
|
|
+
|
|
|
#### `web_md` (必填)
|
|
|
- **类型**: `String`
|
|
|
- **描述**: 网页的markdown格式文本内容,将被保存到MinIO存储
|
|
@@ -147,41 +160,89 @@
|
|
|
"code": 200,
|
|
|
"success": true,
|
|
|
"message": "所有3条人才记录处理成功",
|
|
|
- "data": {
|
|
|
- "total_count": 3,
|
|
|
- "success_count": 3,
|
|
|
- "failed_count": 0,
|
|
|
- "success_records": [
|
|
|
- {
|
|
|
- "index": 1,
|
|
|
- "data": {
|
|
|
- "id": 123,
|
|
|
- "name_zh": "张三",
|
|
|
- "name_en": "Zhang San",
|
|
|
- "title_zh": "总经理",
|
|
|
- "title_en": "General Manager",
|
|
|
+ "data": [
|
|
|
+ {
|
|
|
+ "id": 123,
|
|
|
+ "name_zh": "张三",
|
|
|
+ "name_en": "Zhang San",
|
|
|
+ "title_zh": "总经理",
|
|
|
+ "title_en": "General Manager",
|
|
|
+ "hotel_zh": "北京万豪酒店",
|
|
|
+ "hotel_en": "Beijing Marriott Hotel",
|
|
|
+ "mobile": "13800138000",
|
|
|
+ "email": "zhangsan@example.com",
|
|
|
+ "phone": "010-12345678",
|
|
|
+ "address_zh": "北京市朝阳区XXX路123号",
|
|
|
+ "address_en": "123 XXX Road, Chaoyang District, Beijing",
|
|
|
+ "postal_code_zh": "100000",
|
|
|
+ "postal_code_en": "100000",
|
|
|
+ "brand_zh": "万豪",
|
|
|
+ "brand_en": "Marriott",
|
|
|
+ "affiliation_zh": "万豪国际集团",
|
|
|
+ "affiliation_en": "Marriott International",
|
|
|
+ "birthday": "1980-01-01",
|
|
|
+ "age": 44,
|
|
|
+ "native_place": "北京市",
|
|
|
+ "residence": "北京市朝阳区",
|
|
|
+ "brand_group": "万豪",
|
|
|
+ "image_path": "talent_photos/talent_photo_张三_20240101_12345678.jpg",
|
|
|
+ "career_path": [
|
|
|
+ {
|
|
|
+ "date": "2024-01-01",
|
|
|
"hotel_zh": "北京万豪酒店",
|
|
|
"hotel_en": "Beijing Marriott Hotel",
|
|
|
- "mobile": "13800138000",
|
|
|
- "email": "zhangsan@example.com",
|
|
|
- "brand_group": "万豪",
|
|
|
- "origin_source": {
|
|
|
- "type": "webpage_talent",
|
|
|
- "minio_path": "webpage_talent/webpage_talent_20240101_12345678.md",
|
|
|
- "source_date": "2024-01-01 12:00:00",
|
|
|
- "talent_data": {...},
|
|
|
- "web_md_content": "# 酒店任命公告..."
|
|
|
- },
|
|
|
- "created_at": "2024-01-01 12:00:00",
|
|
|
- "updated_at": "2024-01-01 12:00:00",
|
|
|
- "status": "active"
|
|
|
- },
|
|
|
- "message": "名片信息保存成功。未发现重复记录"
|
|
|
- }
|
|
|
- ],
|
|
|
- "failed_records": [],
|
|
|
- "minio_md_path": "webpage_talent/webpage_talent_20240101_12345678.md"
|
|
|
- }
|
|
|
+ "title_zh": "总经理",
|
|
|
+ "title_en": "General Manager",
|
|
|
+ "image_path": "talent_photos/talent_photo_张三_20240101_12345678.jpg",
|
|
|
+ "source": "webpage_extraction"
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ "talent_profile": "资深酒店管理专家,拥有20年行业经验...",
|
|
|
+ "origin_source": {
|
|
|
+ "type": "webpage_talent",
|
|
|
+ "minio_path": "webpage_talent/webpage_talent_20240101_12345678.md",
|
|
|
+ "source_date": "2024-01-01 12:00:00"
|
|
|
+ },
|
|
|
+ "created_at": "2024-01-01 12:00:00",
|
|
|
+ "updated_at": "2024-01-01 12:00:00",
|
|
|
+ "updated_by": "webpage_talent_system",
|
|
|
+ "status": "active"
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "id": 124,
|
|
|
+ "name_zh": "李四",
|
|
|
+ "name_en": "Li Si",
|
|
|
+ "title_zh": "副总经理",
|
|
|
+ "title_en": "Deputy General Manager",
|
|
|
+ "hotel_zh": "上海希尔顿酒店",
|
|
|
+ "hotel_en": "Shanghai Hilton Hotel",
|
|
|
+ "mobile": "13900139000",
|
|
|
+ "email": "lisi@example.com",
|
|
|
+ "brand_group": "希尔顿",
|
|
|
+ "image_path": "talent_photos/talent_photo_李四_20240101_12345679.jpg",
|
|
|
+ "career_path": [
|
|
|
+ {
|
|
|
+ "date": "2024-01-01",
|
|
|
+ "hotel_zh": "上海希尔顿酒店",
|
|
|
+ "hotel_en": "Shanghai Hilton Hotel",
|
|
|
+ "title_zh": "副总经理",
|
|
|
+ "title_en": "Deputy General Manager",
|
|
|
+ "image_path": "talent_photos/talent_photo_李四_20240101_12345679.jpg",
|
|
|
+ "source": "webpage_extraction"
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ "talent_profile": "酒店业资深管理者,专注于市场营销和品牌推广...",
|
|
|
+ "origin_source": {
|
|
|
+ "type": "webpage_talent",
|
|
|
+ "minio_path": "webpage_talent/webpage_talent_20240101_12345678.md",
|
|
|
+ "source_date": "2024-01-01 12:00:00"
|
|
|
+ },
|
|
|
+ "created_at": "2024-01-01 12:00:00",
|
|
|
+ "updated_at": "2024-01-01 12:00:00",
|
|
|
+ "updated_by": "webpage_talent_system",
|
|
|
+ "status": "active"
|
|
|
+ }
|
|
|
+ ]
|
|
|
}
|
|
|
```
|
|
|
|
|
@@ -195,15 +256,53 @@
|
|
|
"total_count": 3,
|
|
|
"success_count": 2,
|
|
|
"failed_count": 1,
|
|
|
- "success_records": [...],
|
|
|
+ "success_records": [
|
|
|
+ {
|
|
|
+ "id": 123,
|
|
|
+ "name_zh": "张三",
|
|
|
+ "name_en": "Zhang San",
|
|
|
+ "title_zh": "总经理",
|
|
|
+ "title_en": "General Manager",
|
|
|
+ "hotel_zh": "北京万豪酒店",
|
|
|
+ "hotel_en": "Beijing Marriott Hotel",
|
|
|
+ "mobile": "13800138000",
|
|
|
+ "email": "zhangsan@example.com",
|
|
|
+ "brand_group": "万豪",
|
|
|
+ "image_path": "talent_photos/talent_photo_张三_20240101_12345678.jpg",
|
|
|
+ "talent_profile": "资深酒店管理专家,拥有20年行业经验...",
|
|
|
+ "origin_source": {
|
|
|
+ "type": "webpage_talent",
|
|
|
+ "minio_path": "webpage_talent/webpage_talent_20240101_12345678.md",
|
|
|
+ "source_date": "2024-01-01 12:00:00"
|
|
|
+ },
|
|
|
+ "created_at": "2024-01-01 12:00:00",
|
|
|
+ "updated_at": "2024-01-01 12:00:00",
|
|
|
+ "status": "active"
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "id": 124,
|
|
|
+ "name_zh": "李四",
|
|
|
+ "title_zh": "副总经理",
|
|
|
+ "hotel_zh": "上海希尔顿酒店",
|
|
|
+ "brand_group": "希尔顿",
|
|
|
+ "image_path": "talent_photos/talent_photo_李四_20240101_12345679.jpg",
|
|
|
+ "talent_profile": "酒店业资深管理者...",
|
|
|
+ "origin_source": {
|
|
|
+ "type": "webpage_talent",
|
|
|
+ "minio_path": "webpage_talent/webpage_talent_20240101_12345678.md",
|
|
|
+ "source_date": "2024-01-01 12:00:00"
|
|
|
+ },
|
|
|
+ "created_at": "2024-01-01 12:00:00",
|
|
|
+ "status": "active"
|
|
|
+ }
|
|
|
+ ],
|
|
|
"failed_records": [
|
|
|
{
|
|
|
- "index": 3,
|
|
|
- "data": {
|
|
|
+ "error": "第3个记录缺少name_zh字段",
|
|
|
+ "input_data": {
|
|
|
"name_zh": "",
|
|
|
"title_zh": "经理"
|
|
|
- },
|
|
|
- "error": "第3个记录缺少name_zh字段"
|
|
|
+ }
|
|
|
}
|
|
|
],
|
|
|
"minio_md_path": "webpage_talent/webpage_talent_20240101_12345678.md"
|
|
@@ -224,19 +323,60 @@
|
|
|
### 响应字段说明
|
|
|
|
|
|
#### 通用字段
|
|
|
-- **`code`**: HTTP状态码
|
|
|
-- **`success`**: 操作是否成功
|
|
|
-- **`message`**: 响应消息
|
|
|
-- **`data`**: 响应数据
|
|
|
+- **`code`**: HTTP状态码 (200=全部成功, 206=部分成功, 400=参数错误, 500=服务器错误)
|
|
|
+- **`success`**: 操作是否成功 (true/false)
|
|
|
+- **`message`**: 响应消息,描述操作结果
|
|
|
+- **`data`**: 响应数据内容
|
|
|
+
|
|
|
+#### 全部成功时的data字段 (code=200)
|
|
|
+- **类型**: `Array<Object>`
|
|
|
+- **描述**: 成功创建/更新的业务卡片记录数组,每个对象包含完整的名片信息
|
|
|
|
|
|
-#### 成功响应数据字段
|
|
|
+#### 部分成功时的data字段 (code=206)
|
|
|
- **`total_count`**: 总记录数
|
|
|
- **`success_count`**: 成功处理的记录数
|
|
|
- **`failed_count`**: 失败记录数
|
|
|
-- **`success_records`**: 成功记录详情列表
|
|
|
-- **`failed_records`**: 失败记录详情列表
|
|
|
+- **`success_records`**: 成功记录数组,每个对象包含完整的名片信息
|
|
|
+- **`failed_records`**: 失败记录数组,包含错误信息和输入数据
|
|
|
- **`minio_md_path`**: 网页内容在MinIO中的存储路径
|
|
|
|
|
|
+#### 业务卡片记录字段说明
|
|
|
+每个成功创建的业务卡片记录包含以下字段:
|
|
|
+- **`id`**: 数据库记录ID
|
|
|
+- **`name_zh`**: 中文姓名
|
|
|
+- **`name_en`**: 英文姓名
|
|
|
+- **`title_zh`**: 中文职位
|
|
|
+- **`title_en`**: 英文职位
|
|
|
+- **`hotel_zh`**: 酒店中文名称
|
|
|
+- **`hotel_en`**: 酒店英文名称
|
|
|
+- **`mobile`**: 手机号码
|
|
|
+- **`email`**: 电子邮箱
|
|
|
+- **`phone`**: 固定电话
|
|
|
+- **`address_zh`**: 中文地址
|
|
|
+- **`address_en`**: 英文地址
|
|
|
+- **`postal_code_zh`**: 中文邮编
|
|
|
+- **`postal_code_en`**: 英文邮编
|
|
|
+- **`brand_zh`**: 品牌中文名称
|
|
|
+- **`brand_en`**: 品牌英文名称
|
|
|
+- **`affiliation_zh`**: 中文所属机构
|
|
|
+- **`affiliation_en`**: 英文所属机构
|
|
|
+- **`birthday`**: 生日 (YYYY-MM-DD格式)
|
|
|
+- **`age`**: 年龄
|
|
|
+- **`native_place`**: 籍贯
|
|
|
+- **`residence`**: 居住地
|
|
|
+- **`brand_group`**: 品牌组合
|
|
|
+- **`image_path`**: 人才照片在MinIO中的存储路径(如果提供了pic_url)
|
|
|
+- **`career_path`**: 职业轨迹数组,包含职位变化历史
|
|
|
+- **`talent_profile`**: 人才档案信息
|
|
|
+- **`origin_source`**: 数据来源信息,包含以下子字段:
|
|
|
+ - **`type`**: 数据来源类型,固定为"webpage_talent"
|
|
|
+ - **`minio_path`**: 原始网页内容在MinIO中的存储路径
|
|
|
+ - **`source_date`**: 数据处理时间
|
|
|
+- **`created_at`**: 创建时间
|
|
|
+- **`updated_at`**: 更新时间
|
|
|
+- **`updated_by`**: 更新人
|
|
|
+- **`status`**: 记录状态 (通常为"active")
|
|
|
+
|
|
|
---
|
|
|
|
|
|
## 返回状态码
|
|
@@ -281,21 +421,50 @@ async function addWebpageTalent(talentList, webMd) {
|
|
|
console.log('处理成功:', result.message);
|
|
|
console.log('处理详情:', result.data);
|
|
|
|
|
|
- // 处理成功记录
|
|
|
- if (result.data.success_records.length > 0) {
|
|
|
- console.log(`成功处理 ${result.data.success_count} 条记录`);
|
|
|
- result.data.success_records.forEach((record, index) => {
|
|
|
- console.log(`记录 ${record.index}: ${record.data.name_zh} - ${record.message}`);
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- // 处理失败记录
|
|
|
- if (result.data.failed_records.length > 0) {
|
|
|
- console.log(`失败 ${result.data.failed_count} 条记录`);
|
|
|
- result.data.failed_records.forEach((record, index) => {
|
|
|
- console.error(`记录 ${record.index}: ${record.error}`);
|
|
|
- });
|
|
|
- }
|
|
|
+ // 处理成功记录 - 区分全部成功和部分成功的响应格式
|
|
|
+ if (result.code === 200) {
|
|
|
+ // 全部成功:data是业务卡片记录数组
|
|
|
+ console.log(`成功处理 ${result.data.length} 条记录`);
|
|
|
+ result.data.forEach((record, index) => {
|
|
|
+ console.log(`记录 ${index + 1}: ${record.name_zh}`);
|
|
|
+
|
|
|
+ // 显示图片路径信息
|
|
|
+ if (record.image_path) {
|
|
|
+ console.log(` 图片路径: ${record.image_path}`);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 显示人才档案信息
|
|
|
+ if (record.talent_profile) {
|
|
|
+ console.log(` 人才档案: ${record.talent_profile.substring(0, 50)}...`);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 显示数据来源信息
|
|
|
+ if (record.origin_source) {
|
|
|
+ console.log(` 数据来源: ${record.origin_source.type}`);
|
|
|
+ console.log(` 原始文档: ${record.origin_source.minio_path}`);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ } else if (result.code === 206) {
|
|
|
+ // 部分成功:data包含详细的成功和失败信息
|
|
|
+ console.log(`部分成功:${result.data.success_count}/${result.data.total_count} 条记录成功`);
|
|
|
+
|
|
|
+ // 显示成功记录
|
|
|
+ if (result.data.success_records.length > 0) {
|
|
|
+ result.data.success_records.forEach((record, index) => {
|
|
|
+ console.log(`成功记录 ${record.index}: ${record.data.name_zh} - ${record.message}`);
|
|
|
+ if (record.data.image_path) {
|
|
|
+ console.log(` 图片路径: ${record.data.image_path}`);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ // 显示失败记录
|
|
|
+ if (result.data.failed_records.length > 0) {
|
|
|
+ result.data.failed_records.forEach((record, index) => {
|
|
|
+ console.error(`失败记录 ${record.index}: ${record.error}`);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
return result;
|
|
|
} else {
|
|
@@ -319,7 +488,9 @@ const talentData = [
|
|
|
hotel_en: "Beijing Marriott Hotel",
|
|
|
brand_group: "万豪",
|
|
|
mobile: "13800138000",
|
|
|
- email: "zhangsan@example.com"
|
|
|
+ email: "zhangsan@example.com",
|
|
|
+ pic_url: "https://example.com/photos/zhangsan.jpg",
|
|
|
+ talent_profile: "资深酒店管理专家,拥有20年行业经验,曾在多家国际知名酒店担任高级管理职位。精通酒店运营管理、客户服务、团队建设等多个领域。"
|
|
|
},
|
|
|
{
|
|
|
name_zh: "李四",
|
|
@@ -330,7 +501,9 @@ const talentData = [
|
|
|
hotel_en: "Shanghai Hilton Hotel",
|
|
|
brand_group: "希尔顿",
|
|
|
mobile: "13900139000",
|
|
|
- email: "lisi@example.com"
|
|
|
+ email: "lisi@example.com",
|
|
|
+ pic_url: "https://example.com/photos/lisi.jpg",
|
|
|
+ talent_profile: "酒店业资深管理者,专注于市场营销和品牌推广,具有丰富的国际酒店管理经验。"
|
|
|
}
|
|
|
];
|
|
|
|
|
@@ -339,13 +512,19 @@ const webContent = `
|
|
|
|
|
|
## 重要人事变动
|
|
|
|
|
|
+
|
|
|
+
|
|
|
1. **张三**被任命为北京万豪酒店总经理
|
|
|
- 手机:13800138000
|
|
|
- 邮箱:zhangsan@example.com
|
|
|
+ - 简介:资深酒店管理专家,拥有20年行业经验
|
|
|
+
|
|
|
+
|
|
|
|
|
|
2. **李四**被任命为上海希尔顿酒店副总经理
|
|
|
- 手机:13900139000
|
|
|
- 邮箱:lisi@example.com
|
|
|
+ - 简介:酒店业资深管理者,专注于市场营销和品牌推广
|
|
|
`;
|
|
|
|
|
|
// 调用函数
|
|
@@ -374,9 +553,37 @@ function addWebpageTalent(talentList, webMd) {
|
|
|
if (result.success) {
|
|
|
console.log('处理成功:', result.message);
|
|
|
|
|
|
- // 显示处理结果
|
|
|
- if (result.data.success_count > 0) {
|
|
|
- alert(`成功处理 ${result.data.success_count} 条记录`);
|
|
|
+ // 显示处理结果 - 区分全部成功和部分成功的响应格式
|
|
|
+ if (result.code === 200) {
|
|
|
+ // 全部成功
|
|
|
+ alert(`成功处理 ${result.data.length} 条记录`);
|
|
|
+
|
|
|
+ // 显示详细信息
|
|
|
+ result.data.forEach(record => {
|
|
|
+ console.log(`人才: ${record.name_zh}`);
|
|
|
+ if (record.image_path) {
|
|
|
+ console.log(`图片已保存: ${record.image_path}`);
|
|
|
+ }
|
|
|
+ if (record.talent_profile) {
|
|
|
+ console.log(`人才档案: ${record.talent_profile.substring(0, 50)}...`);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ } else if (result.code === 206) {
|
|
|
+ // 部分成功
|
|
|
+ alert(`部分成功: ${result.data.success_count}/${result.data.total_count} 条记录成功`);
|
|
|
+
|
|
|
+ // 显示成功记录
|
|
|
+ result.data.success_records.forEach(record => {
|
|
|
+ console.log(`成功: ${record.data.name_zh}`);
|
|
|
+ if (record.data.image_path) {
|
|
|
+ console.log(`图片已保存: ${record.data.image_path}`);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // 显示失败记录
|
|
|
+ result.data.failed_records.forEach(record => {
|
|
|
+ console.error(`失败: ${record.error}`);
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
if (result.data.failed_count > 0) {
|
|
@@ -402,11 +609,13 @@ const talentData = [
|
|
|
name_zh: "张三",
|
|
|
title_zh: "总经理",
|
|
|
hotel_zh: "北京万豪酒店",
|
|
|
- mobile: "13800138000"
|
|
|
+ mobile: "13800138000",
|
|
|
+ pic_url: "https://example.com/photos/zhangsan.jpg",
|
|
|
+ talent_profile: "资深酒店管理专家,拥有20年行业经验..."
|
|
|
}
|
|
|
];
|
|
|
|
|
|
-const webContent = "# 人事任命公告\n\n张三被任命为总经理...";
|
|
|
+const webContent = "# 人事任命公告\n\n\n\n张三被任命为总经理...";
|
|
|
|
|
|
addWebpageTalent(talentData, webContent);
|
|
|
```
|
|
@@ -445,6 +654,15 @@ addWebpageTalent(talentData, webContent);
|
|
|
<label>电子邮箱:</label>
|
|
|
<input v-model="talent.email" type="email">
|
|
|
</div>
|
|
|
+ <div class="form-group">
|
|
|
+ <label>照片URL:</label>
|
|
|
+ <input v-model="talent.pic_url" type="url" placeholder="https://example.com/photo.jpg">
|
|
|
+ </div>
|
|
|
+ <div class="form-group">
|
|
|
+ <label>人才档案:</label>
|
|
|
+ <textarea v-model="talent.talent_profile" rows="4" cols="50"
|
|
|
+ placeholder="请输入人才的详细档案信息,包括工作经历、专业技能等..."></textarea>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
|
|
|
<!-- 网页内容 -->
|
|
@@ -466,19 +684,68 @@ addWebpageTalent(talentData, webContent);
|
|
|
<h4>处理结果</h4>
|
|
|
<p :class="result.success ? 'success' : 'error'">{{ result.message }}</p>
|
|
|
|
|
|
- <div v-if="result.data">
|
|
|
- <p>总记录数: {{ result.data.total_count }}</p>
|
|
|
- <p>成功: {{ result.data.success_count }}</p>
|
|
|
- <p>失败: {{ result.data.failed_count }}</p>
|
|
|
-
|
|
|
- <div v-if="result.data.failed_records.length > 0">
|
|
|
- <h5>失败记录:</h5>
|
|
|
- <ul>
|
|
|
- <li v-for="record in result.data.failed_records" :key="record.index">
|
|
|
- 记录 {{ record.index }}: {{ record.error }}
|
|
|
- </li>
|
|
|
- </ul>
|
|
|
- </div>
|
|
|
+ <div v-if="result.data">
|
|
|
+ <!-- 全部成功的显示 -->
|
|
|
+ <div v-if="result.code === 200">
|
|
|
+ <p>总记录数: {{ result.data.length }}</p>
|
|
|
+ <p>全部处理成功</p>
|
|
|
+
|
|
|
+ <div class="success-records">
|
|
|
+ <h5>成功记录:</h5>
|
|
|
+ <ul>
|
|
|
+ <li v-for="(record, index) in result.data" :key="index">
|
|
|
+ <strong>{{ record.name_zh }}</strong>
|
|
|
+ <div v-if="record.image_path" class="detail">
|
|
|
+ 图片已保存: {{ record.image_path }}
|
|
|
+ </div>
|
|
|
+ <div v-if="record.talent_profile" class="detail">
|
|
|
+ 人才档案: {{ record.talent_profile.substring(0, 100) }}...
|
|
|
+ </div>
|
|
|
+ <div v-if="record.origin_source" class="detail">
|
|
|
+ 数据来源: {{ record.origin_source.type }}
|
|
|
+ ({{ record.origin_source.source_date }})
|
|
|
+ </div>
|
|
|
+ </li>
|
|
|
+ </ul>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 部分成功的显示 -->
|
|
|
+ <div v-if="result.code === 206">
|
|
|
+ <p>总记录数: {{ result.data.total_count }}</p>
|
|
|
+ <p>成功: {{ result.data.success_count }}</p>
|
|
|
+ <p>失败: {{ result.data.failed_count }}</p>
|
|
|
+
|
|
|
+ <!-- 成功记录详情 -->
|
|
|
+ <div v-if="result.data.success_records.length > 0" class="success-records">
|
|
|
+ <h5>成功记录:</h5>
|
|
|
+ <ul>
|
|
|
+ <li v-for="record in result.data.success_records" :key="record.index">
|
|
|
+ <strong>{{ record.data.name_zh }}</strong> - {{ record.message }}
|
|
|
+ <div v-if="record.data.image_path" class="detail">
|
|
|
+ 图片已保存: {{ record.data.image_path }}
|
|
|
+ </div>
|
|
|
+ <div v-if="record.data.talent_profile" class="detail">
|
|
|
+ 人才档案: {{ record.data.talent_profile.substring(0, 100) }}...
|
|
|
+ </div>
|
|
|
+ <div v-if="record.data.origin_source" class="detail">
|
|
|
+ 数据来源: {{ record.data.origin_source.type }}
|
|
|
+ ({{ record.data.origin_source.source_date }})
|
|
|
+ </div>
|
|
|
+ </li>
|
|
|
+ </ul>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 失败记录详情 -->
|
|
|
+ <div v-if="result.data.failed_records.length > 0" class="failed-records">
|
|
|
+ <h5>失败记录:</h5>
|
|
|
+ <ul>
|
|
|
+ <li v-for="record in result.data.failed_records" :key="record.index">
|
|
|
+ 记录 {{ record.index }}: {{ record.error }}
|
|
|
+ </li>
|
|
|
+ </ul>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -502,7 +769,9 @@ export default {
|
|
|
email: '',
|
|
|
phone: '',
|
|
|
address_zh: '',
|
|
|
- address_en: ''
|
|
|
+ address_en: '',
|
|
|
+ pic_url: '',
|
|
|
+ talent_profile: ''
|
|
|
}
|
|
|
],
|
|
|
webMd: '',
|
|
@@ -524,7 +793,9 @@ export default {
|
|
|
email: '',
|
|
|
phone: '',
|
|
|
address_zh: '',
|
|
|
- address_en: ''
|
|
|
+ address_en: '',
|
|
|
+ pic_url: '',
|
|
|
+ talent_profile: ''
|
|
|
});
|
|
|
},
|
|
|
|
|
@@ -553,6 +824,35 @@ export default {
|
|
|
|
|
|
if (result.success) {
|
|
|
this.$message.success(result.message);
|
|
|
+
|
|
|
+ // 显示详细处理结果
|
|
|
+ if (result.code === 200) {
|
|
|
+ console.log('成功处理的记录详情:');
|
|
|
+ result.data.forEach(record => {
|
|
|
+ console.log(`- ${record.name_zh}:`);
|
|
|
+ if (record.image_path) {
|
|
|
+ console.log(` 图片: ${record.image_path}`);
|
|
|
+ }
|
|
|
+ if (record.talent_profile) {
|
|
|
+ console.log(` 档案: ${record.talent_profile.substring(0, 50)}...`);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ } else if (result.code === 206) {
|
|
|
+ console.log('部分成功的记录详情:');
|
|
|
+ result.data.success_records.forEach(record => {
|
|
|
+ console.log(`- ${record.data.name_zh}: ${record.message}`);
|
|
|
+ if (record.data.image_path) {
|
|
|
+ console.log(` 图片: ${record.data.image_path}`);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ if (result.data.failed_records.length > 0) {
|
|
|
+ console.log('失败的记录详情:');
|
|
|
+ result.data.failed_records.forEach(record => {
|
|
|
+ console.error(`- 记录 ${record.index}: ${record.error}`);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
} else {
|
|
|
this.$message.error(result.message);
|
|
|
}
|
|
@@ -646,6 +946,16 @@ export default {
|
|
|
.error {
|
|
|
color: #dc3545;
|
|
|
}
|
|
|
+
|
|
|
+.success-records, .failed-records {
|
|
|
+ margin-top: 15px;
|
|
|
+}
|
|
|
+
|
|
|
+.detail {
|
|
|
+ font-size: 12px;
|
|
|
+ color: #666;
|
|
|
+ margin-left: 10px;
|
|
|
+}
|
|
|
</style>
|
|
|
```
|
|
|
|
|
@@ -667,12 +977,44 @@ export default {
|
|
|
**错误**: `上传网页内容到MinIO失败`
|
|
|
**解决**: 检查MinIO服务状态和配置
|
|
|
|
|
|
-#### 4. 数据库错误
|
|
|
+#### 4. 图片下载失败
|
|
|
+**错误**: `人员XXX的图片处理失败`
|
|
|
+**解决**: 检查pic_url是否有效,网络连接是否正常。图片下载失败不会影响其他数据的处理
|
|
|
+
|
|
|
+#### 5. 数据库错误
|
|
|
**错误**: `数据库操作失败`
|
|
|
**解决**: 检查数据库连接和表结构
|
|
|
|
|
|
---
|
|
|
|
|
|
+## 数据字段详解
|
|
|
+
|
|
|
+### 新增字段说明
|
|
|
+
|
|
|
+#### `origin_source` (JSON类型)
|
|
|
+系统自动生成的数据来源信息,包含:
|
|
|
+- **`type`**: 数据来源类型,网页人才固定为"webpage_talent"
|
|
|
+- **`minio_path`**: 原始网页内容在MinIO中的存储路径
|
|
|
+- **`source_date`**: 数据处理时间
|
|
|
+
|
|
|
+#### `talent_profile` (文本类型)
|
|
|
+人才档案信息,可包含:
|
|
|
+- 个人简介和背景
|
|
|
+- 工作经历和职业发展
|
|
|
+- 专业技能和资质认证
|
|
|
+- 教育背景
|
|
|
+- 获奖情况和荣誉
|
|
|
+- 其他相关信息
|
|
|
+
|
|
|
+#### `image_path` (字符串类型)
|
|
|
+如果提供了`pic_url`,系统会:
|
|
|
+1. 自动下载图片
|
|
|
+2. 保存到MinIO的`talent_photos/`目录
|
|
|
+3. 生成唯一的文件名
|
|
|
+4. 将MinIO路径保存到此字段
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
## 注意事项
|
|
|
|
|
|
1. **数据完整性**: 确保talent_list中每个对象都包含name_zh字段
|
|
@@ -681,15 +1023,28 @@ export default {
|
|
|
4. **重复检查**: 系统会自动检查重复记录并相应处理
|
|
|
5. **存储路径**: 网页内容会自动保存到MinIO的`webpage_talent/`目录下
|
|
|
6. **数据溯源**: origin_source字段保存了完整的数据来源信息,便于后续追溯
|
|
|
+7. **图片处理**:
|
|
|
+ - 支持常见图片格式(JPG、PNG、GIF、WebP)
|
|
|
+ - 图片下载失败不会影响其他数据处理
|
|
|
+ - 图片文件名会包含人员姓名、时间戳和唯一标识
|
|
|
+8. **人才档案**: talent_profile字段支持存储大量文本信息,建议合理控制内容长度
|
|
|
+9. **自动字段**: origin_source字段由系统自动生成,无需在请求中提供
|
|
|
+10. **向后兼容**: 新增字段都是可选的,现有的API调用不会受到影响
|
|
|
|
|
|
---
|
|
|
|
|
|
## 版本信息
|
|
|
|
|
|
-- **API版本**: v1.0
|
|
|
-- **文档版本**: 1.0.0
|
|
|
-- **创建日期**: 2024年
|
|
|
-- **最后更新**: 2024年
|
|
|
+- **API版本**: v1.1
|
|
|
+- **文档版本**: 1.1.0
|
|
|
+- **创建日期**: 2025年
|
|
|
+- **最后更新**: 2025年07月10日
|
|
|
+- **更新内容**:
|
|
|
+ - 新增 `origin_source` 字段支持
|
|
|
+ - 新增 `talent_profile` 字段支持
|
|
|
+ - 新增 `pic_url` 字段和图片自动下载功能
|
|
|
+ - 更新响应示例和代码示例
|
|
|
+ - 增加详细的字段说明和注意事项
|
|
|
|
|
|
---
|
|
|
|