diff --git a/docs/WechatWork/Basic_ModelDefinition.md b/docs/WechatWork/Basic_ModelDefinition.md
index 866a6034..d31d142e 100644
--- a/docs/WechatWork/Basic_ModelDefinition.md
+++ b/docs/WechatWork/Basic_ModelDefinition.md
@@ -59,6 +59,7 @@
| √ | 办公:打卡 | 企业 & 第三方 & 服务商 | |
| √ | 办公:审批 | 企业 & 第三方 & 服务商 | |
| √ | 办公:汇报 | 企业 | |
+| √ | 办公:人事助手 | 企业 | |
| √ | 办公:会议室 | 企业 | |
| √ | 办公:紧急通知 | 企业 | |
| √ | 智慧硬件 | 第三方 | |
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinHrExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinHrExtensions.cs
new file mode 100644
index 00000000..08d9ad35
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinHrExtensions.cs
@@ -0,0 +1,72 @@
+using System;
+using System.Net.Http;
+using System.Threading;
+using System.Threading.Tasks;
+using Flurl;
+using Flurl.Http;
+
+namespace SKIT.FlurlHttpClient.Wechat.Work
+{
+ public static class WechatWorkClientExecuteCgibinHrExtensions
+ {
+ ///
+ /// 异步调用 [GET] /cgi-bin/hr/get_fields 接口。
+ /// REF: https://developer.work.weixin.qq.com/document/path/99131
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinHrGetFieldsAsync(this WechatWorkClient client, Models.CgibinHrGetFieldsRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ IFlurlRequest flurlReq = client
+ .CreateRequest(request, HttpMethod.Get, "cgi-bin", "hr", "get_fields")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /cgi-bin/hr/get_staff_info 接口。
+ /// REF: https://developer.work.weixin.qq.com/document/path/99132
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinHrGetStaffInfoAsync(this WechatWorkClient client, Models.CgibinHrGetStaffInfoRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ IFlurlRequest flurlReq = client
+ .CreateRequest(request, HttpMethod.Post, "cgi-bin", "hr", "get_staff_info")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /cgi-bin/hr/update_staff_info 接口。
+ /// REF: https://developer.work.weixin.qq.com/document/path/99133
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinHrUpdateStaffInfoAsync(this WechatWorkClient client, Models.CgibinHrUpdateStaffInfoRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ IFlurlRequest flurlReq = client
+ .CreateRequest(request, HttpMethod.Post, "cgi-bin", "hr", "update_staff_info")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinHr/CgibinHrGetFieldsRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinHr/CgibinHrGetFieldsRequest.cs
new file mode 100644
index 00000000..5acea392
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinHr/CgibinHrGetFieldsRequest.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [GET] /cgi-bin/hr/get_fields 接口的请求。
+ ///
+ public class CgibinHrGetFieldsRequest : WechatWorkRequest
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinHr/CgibinHrGetFieldsResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinHr/CgibinHrGetFieldsResponse.cs
new file mode 100644
index 00000000..7e8fcd72
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinHr/CgibinHrGetFieldsResponse.cs
@@ -0,0 +1,76 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [GET] /cgi-bin/hr/get_fields 接口的响应。
+ ///
+ public class CgibinHrGetFieldsResponse : WechatWorkResponse
+ {
+ public static class Types
+ {
+ public class FieldGroup
+ {
+ public static class Types
+ {
+ public class Field
+ {
+ ///
+ /// 获取或设置字段 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("fieldid")]
+ [System.Text.Json.Serialization.JsonPropertyName("fieldid")]
+ public int FieldId { get; set; }
+
+ ///
+ /// 获取或设置字段名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("field_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("field_name")]
+ public string FieldName { get; set; } = default!;
+
+ ///
+ /// 获取或设置字段类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("field_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("field_type")]
+ public int FieldType { get; set; }
+
+ ///
+ /// 获取或设置是否必须。
+ ///
+ [Newtonsoft.Json.JsonProperty("is_must")]
+ [System.Text.Json.Serialization.JsonPropertyName("is_must")]
+ public bool IsMust { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置字段组 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("group_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("group_id")]
+ public int GroupId { get; set; }
+
+ ///
+ /// 获取或设置字段组名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("group_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("group_name")]
+ public string GroupName { get; set; } = default!;
+
+ ///
+ /// 获取或设置字段列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("field_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("field_list")]
+ public Types.Field[] FieldList { get; set; } = default!;
+ }
+ }
+
+ ///
+ /// 获取或设置字段组列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("group_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("group_list")]
+ public Types.FieldGroup[] FieldGroupList { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinHr/CgibinHrGetStaffInfoRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinHr/CgibinHrGetStaffInfoRequest.cs
new file mode 100644
index 00000000..9d808af6
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinHr/CgibinHrGetStaffInfoRequest.cs
@@ -0,0 +1,51 @@
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/hr/get_staff_info 接口的请求。
+ ///
+ public class CgibinHrGetStaffInfoRequest : WechatWorkRequest
+ {
+ public static class Types
+ {
+ public class Field
+ {
+ ///
+ /// 获取或设置字段 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("fieldid")]
+ [System.Text.Json.Serialization.JsonPropertyName("fieldid")]
+ public int FieldId { get; set; }
+
+ ///
+ /// 获取或设置需要获取的字段下标。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_idx")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_idx")]
+ public int? SubIndex { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置成员账号。
+ ///
+ [Newtonsoft.Json.JsonProperty("userid")]
+ [System.Text.Json.Serialization.JsonPropertyName("userid")]
+ public string UserId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置是否获取全部字段信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("get_all")]
+ [System.Text.Json.Serialization.JsonPropertyName("get_all")]
+ public bool? RequireAll { get; set; }
+
+ ///
+ /// 获取或设置需要获取的字段列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("fieldids")]
+ [System.Text.Json.Serialization.JsonPropertyName("fieldids")]
+ public IList? FieldList { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinHr/CgibinHrGetStaffInfoResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinHr/CgibinHrGetStaffInfoResponse.cs
new file mode 100644
index 00000000..67f6884e
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinHr/CgibinHrGetStaffInfoResponse.cs
@@ -0,0 +1,128 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/hr/get_staff_info 接口的响应。
+ ///
+ public class CgibinHrGetStaffInfoResponse : WechatWorkResponse
+ {
+ public static class Types
+ {
+ public class Field
+ {
+ public static class Types
+ {
+ public class MobileValue
+ {
+ ///
+ /// 获取或设置国际区号。
+ ///
+ [Newtonsoft.Json.JsonProperty("value_country_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("value_country_code")]
+ public string CountryCode { get; set; } = default!;
+
+ ///
+ /// 获取或设置手机号码。
+ ///
+ [Newtonsoft.Json.JsonProperty("value_mobile")]
+ [System.Text.Json.Serialization.JsonPropertyName("value_mobile")]
+ public string MobileNumber { get; set; } = default!;
+ }
+
+ public class FileValue
+ {
+ ///
+ /// 获取或设置文件 MediaId 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("media_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("media_id")]
+ public string[] MediaIdList { get; set; } = default!;
+ }
+ }
+
+ ///
+ /// 获取或设置字段 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("fieldid")]
+ [System.Text.Json.Serialization.JsonPropertyName("fieldid")]
+ public int FieldId { get; set; }
+
+ ///
+ /// 获取或设置字段下标。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_idx")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_idx")]
+ public int? SubIndex { get; set; }
+
+ ///
+ /// 获取或设置查询结果。
+ ///
+ [Newtonsoft.Json.JsonProperty("result")]
+ [System.Text.Json.Serialization.JsonPropertyName("result")]
+ public int Result { get; set; }
+
+ ///
+ /// 获取或设置字段值的类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("value_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("value_type")]
+ public int ValueType { get; set; }
+
+ ///
+ /// 获取或设置字符串类型的字段值。
+ ///
+ [Newtonsoft.Json.JsonProperty("value_string")]
+ [System.Text.Json.Serialization.JsonPropertyName("value_string")]
+ public string? StringValue { get; set; }
+
+ ///
+ /// 获取或设置 32 位非负整数类型的字段值。
+ ///
+ [Newtonsoft.Json.JsonProperty("value_uint32")]
+ [System.Text.Json.Serialization.JsonPropertyName("value_uint32")]
+ public uint? UInt32Value { get; set; }
+
+ ///
+ /// 获取或设置 64 位非负整数类型的字段值。
+ ///
+ [Newtonsoft.Json.JsonProperty("value_uint64")]
+ [System.Text.Json.Serialization.JsonPropertyName("value_uint64")]
+ public ulong? UInt64Value { get; set; }
+
+ ///
+ /// 获取或设置 32 位整数类型的字段值。
+ ///
+ [Newtonsoft.Json.JsonProperty("value_int32")]
+ [System.Text.Json.Serialization.JsonPropertyName("value_int32")]
+ public int? Int32Value { get; set; }
+
+ ///
+ /// 获取或设置 64 位整数类型的字段值。
+ ///
+ [Newtonsoft.Json.JsonProperty("value_int64")]
+ [System.Text.Json.Serialization.JsonPropertyName("value_int64")]
+ public long? Int64Value { get; set; }
+
+ ///
+ /// 获取或设置手机号码类型的字段值。
+ ///
+ [Newtonsoft.Json.JsonProperty("value_mobile")]
+ [System.Text.Json.Serialization.JsonPropertyName("value_mobile")]
+ public Types.MobileValue? MobileValue { get; set; }
+
+ ///
+ /// 获取或设置文件类型的字段值。
+ ///
+ [Newtonsoft.Json.JsonProperty("value_file")]
+ [System.Text.Json.Serialization.JsonPropertyName("value_file")]
+ public Types.FileValue? FileValue { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置字段列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("fieldinfo")]
+ [System.Text.Json.Serialization.JsonPropertyName("fieldinfo")]
+ public Types.Field[] FieldList { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinHr/CgibinHrUpdateStaffInfoRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinHr/CgibinHrUpdateStaffInfoRequest.cs
new file mode 100644
index 00000000..a854eb3b
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinHr/CgibinHrUpdateStaffInfoRequest.cs
@@ -0,0 +1,178 @@
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/hr/update_staff_info 接口的请求。
+ ///
+ public class CgibinHrUpdateStaffInfoRequest : WechatWorkRequest
+ {
+ public static class Types
+ {
+ public class UpdatedItem
+ {
+ public static class Types
+ {
+ public class MobileValue
+ {
+ ///
+ /// 获取或设置国际区号。
+ ///
+ [Newtonsoft.Json.JsonProperty("value_country_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("value_country_code")]
+ public string CountryCode { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置手机号码。
+ ///
+ [Newtonsoft.Json.JsonProperty("value_mobile")]
+ [System.Text.Json.Serialization.JsonPropertyName("value_mobile")]
+ public string MobileNumber { get; set; } = string.Empty;
+ }
+
+ public class FileValue
+ {
+ ///
+ /// 获取或设置文件 MediaId 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("media_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("media_id")]
+ public IList MediaIdList { get; set; } = new List();
+ }
+ }
+
+ ///
+ /// 获取或设置字段 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("fieldid")]
+ [System.Text.Json.Serialization.JsonPropertyName("fieldid")]
+ public int FieldId { get; set; }
+
+ ///
+ /// 获取或设置需要获取的字段下标。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_idx")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_idx")]
+ public int? SubIndex { get; set; }
+
+ ///
+ /// 获取或设置字符串类型的字段值。
+ ///
+ [Newtonsoft.Json.JsonProperty("value_string")]
+ [System.Text.Json.Serialization.JsonPropertyName("value_string")]
+ public string? StringValue { get; set; }
+
+ ///
+ /// 获取或设置 32 位非负整数类型的字段值。
+ ///
+ [Newtonsoft.Json.JsonProperty("value_uint32")]
+ [System.Text.Json.Serialization.JsonPropertyName("value_uint32")]
+ public uint? UInt32Value { get; set; }
+
+ ///
+ /// 获取或设置 64 位非负整数类型的字段值。
+ ///
+ [Newtonsoft.Json.JsonProperty("value_uint64")]
+ [System.Text.Json.Serialization.JsonPropertyName("value_uint64")]
+ public ulong? UInt64Value { get; set; }
+
+ ///
+ /// 获取或设置 32 位整数类型的字段值。
+ ///
+ [Newtonsoft.Json.JsonProperty("value_int32")]
+ [System.Text.Json.Serialization.JsonPropertyName("value_int32")]
+ public int? Int32Value { get; set; }
+
+ ///
+ /// 获取或设置 64 位整数类型的字段值。
+ ///
+ [Newtonsoft.Json.JsonProperty("value_int64")]
+ [System.Text.Json.Serialization.JsonPropertyName("value_int64")]
+ public long? Int64Value { get; set; }
+
+ ///
+ /// 获取或设置手机号码类型的字段值。
+ ///
+ [Newtonsoft.Json.JsonProperty("value_mobile")]
+ [System.Text.Json.Serialization.JsonPropertyName("value_mobile")]
+ public Types.MobileValue? MobileValue { get; set; }
+
+ ///
+ /// 获取或设置文件类型的字段值。
+ ///
+ [Newtonsoft.Json.JsonProperty("value_file")]
+ [System.Text.Json.Serialization.JsonPropertyName("value_file")]
+ public Types.FileValue? FileValue { get; set; }
+ }
+
+ public class InsertedItem
+ {
+ public static class Types
+ {
+ public class Field : UpdatedItem
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置字段组类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("group_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("group_type")]
+ public int GroupType { get; set; }
+
+ ///
+ /// 获取或设置字段列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("item")]
+ [System.Text.Json.Serialization.JsonPropertyName("item")]
+ public IList FieldList { get; set; } = new List();
+ }
+
+ public class RemovedItem
+ {
+ ///
+ /// 获取或设置字段组类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("group_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("group_type")]
+ public int GroupType { get; set; }
+
+ ///
+ /// 获取或设置字段组下标。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_idx")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_idx")]
+ public int SubIndex { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置成员账号。
+ ///
+ [Newtonsoft.Json.JsonProperty("userid")]
+ [System.Text.Json.Serialization.JsonPropertyName("userid")]
+ public string UserId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置需要更新的项列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("update_items")]
+ [System.Text.Json.Serialization.JsonPropertyName("update_items")]
+ public IList? UpdatedItemList { get; set; }
+
+ ///
+ /// 获取或设置需要新增的项列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("insert_items")]
+ [System.Text.Json.Serialization.JsonPropertyName("insert_items")]
+ public IList? InsertedItemList { get; set; }
+
+ ///
+ /// 获取或设置需要删除的项列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("remove_items")]
+ [System.Text.Json.Serialization.JsonPropertyName("remove_items")]
+ public IList? RemovedItemList { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinHr/CgibinHrUpdateStaffInfoResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinHr/CgibinHrUpdateStaffInfoResponse.cs
new file mode 100644
index 00000000..28ff0de6
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinHr/CgibinHrUpdateStaffInfoResponse.cs
@@ -0,0 +1,104 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/hr/update_staff_info 接口的响应。
+ ///
+ public class CgibinHrUpdateStaffInfoResponse : WechatWorkResponse
+ {
+ public static class Types
+ {
+ public class UpdatedResult
+ {
+ ///
+ /// 获取或设置字段 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("fieldid")]
+ [System.Text.Json.Serialization.JsonPropertyName("fieldid")]
+ public int FieldId { get; set; }
+
+ ///
+ /// 获取或设置需要获取的字段下标。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_idx")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_idx")]
+ public int? SubIndex { get; set; }
+
+ ///
+ /// 获取或设置更新结果。
+ ///
+ [Newtonsoft.Json.JsonProperty("result")]
+ [System.Text.Json.Serialization.JsonPropertyName("result")]
+ public int Result { get; set; }
+ }
+
+ public class InsertedResult
+ {
+ ///
+ /// 获取或设置字段组类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("group_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("group_type")]
+ public int GroupType { get; set; }
+
+ ///
+ /// 获取或设置字段下标。
+ ///
+ [Newtonsoft.Json.JsonProperty("idx")]
+ [System.Text.Json.Serialization.JsonPropertyName("idx")]
+ public int? Index { get; set; }
+
+ ///
+ /// 获取或设置新增结果。
+ ///
+ [Newtonsoft.Json.JsonProperty("result")]
+ [System.Text.Json.Serialization.JsonPropertyName("result")]
+ public int Result { get; set; }
+ }
+
+ public class RemovedResult
+ {
+ ///
+ /// 获取或设置字段组类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("group_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("group_type")]
+ public int GroupType { get; set; }
+
+ ///
+ /// 获取或设置字段组下标。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_idx")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_idx")]
+ public int SubIndex { get; set; }
+
+ ///
+ /// 获取或设置删除结果。
+ ///
+ [Newtonsoft.Json.JsonProperty("result")]
+ [System.Text.Json.Serialization.JsonPropertyName("result")]
+ public int Result { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置更新结果列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("update_results")]
+ [System.Text.Json.Serialization.JsonPropertyName("update_results")]
+ public Types.UpdatedResult[]? UpdatedResultList { get; set; }
+
+ ///
+ /// 获取或设置新增结果列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("insert_result")]
+ [System.Text.Json.Serialization.JsonPropertyName("insert_result")]
+ public Types.InsertedResult[]? InsertedResultList { get; set; }
+
+ ///
+ /// 获取或设置删除结果列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("remove_results")]
+ [System.Text.Json.Serialization.JsonPropertyName("remove_results")]
+ public Types.RemovedResult[]? RemovedResultList { get; set; }
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinHr/CgibinHrGetFieldsResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinHr/CgibinHrGetFieldsResponse.json
new file mode 100644
index 00000000..f7456341
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinHr/CgibinHrGetFieldsResponse.json
@@ -0,0 +1,36 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "group_list": [
+ {
+ "group_id": 1001,
+ "group_name": "个人信息",
+ "field_list": [
+ {
+ "fieldid": 11001,
+ "field_name": "姓名",
+ "field_type": 1,
+ "is_must": true
+ },
+ {
+ "fieldid": 11002,
+ "field_name": "别名",
+ "field_type": 1,
+ "is_must": false
+ }
+ ]
+ },
+ {
+ "group_id": 1002,
+ "group_name": "在职信息",
+ "field_list": [
+ {
+ "fieldid": 12024,
+ "field_name": "工号",
+ "field_type": 1,
+ "is_must": true
+ }
+ ]
+ }
+ ]
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinHr/CgibinHrGetStaffInfoRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinHr/CgibinHrGetStaffInfoRequest.json
new file mode 100644
index 00000000..0da596ea
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinHr/CgibinHrGetStaffInfoRequest.json
@@ -0,0 +1,14 @@
+{
+ "userid": "xxxxx",
+ "get_all": false,
+ "fieldids": [
+ {
+ "fieldid": 11004,
+ "sub_idx": 0
+ },
+ {
+ "fieldid": 14001,
+ "sub_idx": 1
+ }
+ ]
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinHr/CgibinHrGetStaffInfoResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinHr/CgibinHrGetStaffInfoResponse.json
new file mode 100644
index 00000000..94240b3d
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinHr/CgibinHrGetStaffInfoResponse.json
@@ -0,0 +1,32 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "fieldinfo": [
+ {
+ "fieldid": 11004,
+ "sub_idx": 0,
+ "result": 1,
+ "value_type": 3,
+ "value_uint32": 1
+ },
+ {
+ "fieldid": 11003,
+ "sub_idx": 0,
+ "result": 1,
+ "value_type": 5,
+ "value_mobile": {
+ "value_country_code": "xx",
+ "value_mobile": "xxxxxxxxxx"
+ }
+ },
+ {
+ "fieldid": 19001,
+ "sub_idx": 0,
+ "result": 1,
+ "value_type": 6,
+ "value_file": {
+ "media_id": [ "xxxxxx", "xxxxxx" ]
+ }
+ }
+ ]
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinHr/CgibinHrUpdateStaffInfoRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinHr/CgibinHrUpdateStaffInfoRequest.json
new file mode 100644
index 00000000..15029d0b
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinHr/CgibinHrUpdateStaffInfoRequest.json
@@ -0,0 +1,58 @@
+{
+ "userid": "xxxxx",
+ "update_items": [
+ {
+ "fieldid": 11020,
+ "sub_idx": 0,
+ "value_string": "xxxxx"
+ },
+ {
+ "fieldid": 17003,
+ "sub_idx": 1,
+ "value_mobile": {
+ "value_country_code": "xxx",
+ "value_mobile": "xxxxxxxx"
+ }
+ }
+ ],
+ "remove_items": [
+ {
+ "group_type": 1,
+ "sub_idx": 1
+ },
+ {
+ "group_type": 1,
+ "sub_idx": 2
+ }
+ ],
+ "insert_items": [
+ {
+ "group_type": 4,
+ "item": [
+ {
+ "fieldid": 17001,
+ "sub_idx": 0,
+ "value_string": "孙悟空"
+ },
+ {
+ "fieldid": 17002,
+ "sub_idx": 0,
+ "value_uint32": 1
+ },
+ {
+ "fieldid": 17003,
+ "sub_idx": 0,
+ "value_mobile": {
+ "value_country_code": "xxx",
+ "value_mobile": "xxxxxxxx"
+ }
+ },
+ {
+ "fieldid": 17004,
+ "sub_idx": 0,
+ "value_string": "娜美克星"
+ }
+ ]
+ }
+ ]
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinHr/CgibinHrUpdateStaffInfoResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinHr/CgibinHrUpdateStaffInfoResponse.json
new file mode 100644
index 00000000..e20c7ba3
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinHr/CgibinHrUpdateStaffInfoResponse.json
@@ -0,0 +1,25 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "update_results": [
+ {
+ "fieldid": 11001,
+ "sub_idx": 0,
+ "result": 1
+ }
+ ],
+ "remove_results": [
+ {
+ "group_type": 1,
+ "sub_idx": 20,
+ "result": 3
+ }
+ ],
+ "insert_result": [
+ {
+ "group_type": 1,
+ "idx": 1,
+ "result": 4
+ }
+ ]
+}