diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinSecurityExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinSecurityExtensions.cs
index 029d003c..e74ad805 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinSecurityExtensions.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinSecurityExtensions.cs
@@ -9,6 +9,29 @@ namespace SKIT.FlurlHttpClient.Wechat.Work
{
public static class WechatWorkClientExecuteCgibinSecurityExtensions
{
+ ///
+ /// 异步调用 [GET] /cgi-bin/security/get_server_domain_ip 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinSecurityGetServerDomainIpAsync(this WechatWorkClient client, Models.CgibinSecurityGetServerDomainIpRequest 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
+ .CreateFlurlRequest(request, HttpMethod.Get, "cgi-bin", "security", "get_server_domain_ip")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
///
/// 异步调用 [POST] /cgi-bin/security/get_file_oper_record 接口。
///
@@ -33,26 +56,72 @@ namespace SKIT.FlurlHttpClient.Wechat.Work
}
///
- /// 异步调用 [GET] /cgi-bin/security/get_server_domain_ip 接口。
+ /// 异步调用 [POST] /cgi-bin/security/get_screen_oper_record 接口。
///
/// REF:
- ///
+ ///
///
///
///
///
///
///
- public static async Task ExecuteCgibinSecurityGetServerDomainIpAsync(this WechatWorkClient client, Models.CgibinSecurityGetServerDomainIpRequest request, CancellationToken cancellationToken = default)
+ public static async Task ExecuteCgibinSecurityGetScreenOperateRecordAsync(this WechatWorkClient client, Models.CgibinSecurityGetScreenOperateRecordRequest 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
- .CreateFlurlRequest(request, HttpMethod.Get, "cgi-bin", "security", "get_server_domain_ip")
+ .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "security", "get_screen_oper_record")
.SetQueryParam("access_token", request.AccessToken);
- return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /cgi-bin/security/member_oper_log/list 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinSecurityMemberOperateLogListAsync(this WechatWorkClient client, Models.CgibinSecurityMemberOperateLogListRequest 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
+ .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "security", "member_oper_log", "list")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /cgi-bin/security/admin_oper_log/list 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinSecurityAdministratorOperateLogListAsync(this WechatWorkClient client, Models.CgibinSecurityAdministratorOperateLogListRequest 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
+ .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "security", "admin_oper_log", "list")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
#region TrustDevice
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinSecurity/CgibinSecurityAdministratorOperateLogListRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinSecurity/CgibinSecurityAdministratorOperateLogListRequest.cs
new file mode 100644
index 00000000..59f4fc5f
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinSecurity/CgibinSecurityAdministratorOperateLogListRequest.cs
@@ -0,0 +1,50 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/security/admin_oper_log/list 接口的请求。
+ ///
+ public class CgibinSecurityAdministratorOperateLogListRequest : WechatWorkRequest
+ {
+ ///
+ /// 获取或设置开始时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("start_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("start_time")]
+ public long StartTimestamp { get; set; }
+
+ ///
+ /// 获取或设置结束时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("end_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("end_time")]
+ public long EndTimestamp { get; set; }
+
+ ///
+ /// 获取或设置操作者 UserId。
+ ///
+ [Newtonsoft.Json.JsonProperty("userid")]
+ [System.Text.Json.Serialization.JsonPropertyName("userid")]
+ public string? UserId { get; set; }
+
+ ///
+ /// 获取或设置操作类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("oper_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("oper_type")]
+ public int? OperateType { get; set; }
+
+ ///
+ /// 获取或设置分页每页数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("limit")]
+ [System.Text.Json.Serialization.JsonPropertyName("limit")]
+ public int? Limit { get; set; }
+
+ ///
+ /// 获取或设置翻页标记。
+ ///
+ [Newtonsoft.Json.JsonProperty("cursor")]
+ [System.Text.Json.Serialization.JsonPropertyName("cursor")]
+ public string? Cursor { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinSecurity/CgibinSecurityAdministratorOperateLogListResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinSecurity/CgibinSecurityAdministratorOperateLogListResponse.cs
new file mode 100644
index 00000000..a04cd379
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinSecurity/CgibinSecurityAdministratorOperateLogListResponse.cs
@@ -0,0 +1,77 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/security/admin_oper_log/list 接口的响应。
+ ///
+ public class CgibinSecurityAdministratorOperateLogListResponse : WechatWorkResponse
+ {
+ public static class Types
+ {
+ public class Record
+ {
+ ///
+ /// 获取或设置操作者 UserId。
+ ///
+ [Newtonsoft.Json.JsonProperty("userid")]
+ [System.Text.Json.Serialization.JsonPropertyName("userid")]
+ public string UserId { get; set; } = default!;
+
+ ///
+ /// 获取或设置操作类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("oper_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("oper_type")]
+ public int OperateType { get; set; }
+
+ ///
+ /// 获取或设置时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("time")]
+ [System.Text.Json.Serialization.JsonPropertyName("time")]
+ public long Timestamp { get; set; }
+
+ ///
+ /// 获取或设置操作行为类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("detail_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("detail_type")]
+ public int DetailType { get; set; }
+
+ ///
+ /// 获取或设置相关数据。
+ ///
+ [Newtonsoft.Json.JsonProperty("detail_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("detail_info")]
+ public string? DetailInfo { get; set; }
+
+ ///
+ /// 获取或设置操作者 IP。
+ ///
+ [Newtonsoft.Json.JsonProperty("ip")]
+ [System.Text.Json.Serialization.JsonPropertyName("ip")]
+ public string? Ip { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置操作记录列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("record_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("record_list")]
+ public Types.Record[] RecordList { get; set; } = default!;
+
+ ///
+ /// 获取或设置是否还有更多数据。
+ ///
+ [Newtonsoft.Json.JsonProperty("has_more")]
+ [System.Text.Json.Serialization.JsonPropertyName("has_more")]
+ public bool HasMore { get; set; }
+
+ ///
+ /// 获取或设置翻页标记。
+ ///
+ [Newtonsoft.Json.JsonProperty("next_cursor")]
+ [System.Text.Json.Serialization.JsonPropertyName("next_cursor")]
+ public string? NextCursor { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinSecurity/CgibinSecurityGetScreenOperateRecordRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinSecurity/CgibinSecurityGetScreenOperateRecordRequest.cs
new file mode 100644
index 00000000..356f29ac
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinSecurity/CgibinSecurityGetScreenOperateRecordRequest.cs
@@ -0,0 +1,59 @@
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/security/get_screen_oper_record 接口的请求。
+ ///
+ public class CgibinSecurityGetScreenOperateRecordRequest : WechatWorkRequest
+ {
+ ///
+ /// 获取或设置开始时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("start_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("start_time")]
+ public long StartTimestamp { get; set; }
+
+ ///
+ /// 获取或设置结束时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("end_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("end_time")]
+ public long EndTimestamp { get; set; }
+
+ ///
+ /// 获取或设置操作者 UserId 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("userid_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("userid_list")]
+ public IList? UserIdList { get; set; }
+
+ ///
+ /// 获取或设置操作者部门 ID 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("department_id_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("department_id_list")]
+ public IList? DepartmentIdList { get; set; }
+
+ ///
+ /// 获取或设置截屏内容类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("screen_shot_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("screen_shot_type")]
+ public int? ScreenshotType { get; set; }
+
+ ///
+ /// 获取或设置分页每页数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("limit")]
+ [System.Text.Json.Serialization.JsonPropertyName("limit")]
+ public int? Limit { get; set; }
+
+ ///
+ /// 获取或设置翻页标记。
+ ///
+ [Newtonsoft.Json.JsonProperty("cursor")]
+ [System.Text.Json.Serialization.JsonPropertyName("cursor")]
+ public string? Cursor { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinSecurity/CgibinSecurityGetScreenOperateRecordResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinSecurity/CgibinSecurityGetScreenOperateRecordResponse.cs
new file mode 100644
index 00000000..0a3ac9e3
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinSecurity/CgibinSecurityGetScreenOperateRecordResponse.cs
@@ -0,0 +1,77 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/security/get_screen_oper_record 接口的响应。
+ ///
+ public class CgibinSecurityGetScreenOperateRecordResponse : WechatWorkResponse
+ {
+ public static class Types
+ {
+ public class Record
+ {
+ ///
+ /// 获取或设置操作者 UserId。
+ ///
+ [Newtonsoft.Json.JsonProperty("userid")]
+ [System.Text.Json.Serialization.JsonPropertyName("userid")]
+ public string UserId { get; set; } = default!;
+
+ ///
+ /// 获取或设置操作者部门 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("department_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("department_id")]
+ public long DepartmentId { get; set; }
+
+ ///
+ /// 获取或设置截屏内容类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("screen_shot_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("screen_shot_type")]
+ public int ScreenshotType { get; set; }
+
+ ///
+ /// 获取或设置截屏内容。
+ ///
+ [Newtonsoft.Json.JsonProperty("screen_shot_content")]
+ [System.Text.Json.Serialization.JsonPropertyName("screen_shot_content")]
+ public string ScreenshotContent { get; set; } = default!;
+
+ ///
+ /// 获取或设置时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("time")]
+ [System.Text.Json.Serialization.JsonPropertyName("time")]
+ public long Timestamp { get; set; }
+
+ ///
+ /// 获取或设置用户的操作系统。
+ ///
+ [Newtonsoft.Json.JsonProperty("system")]
+ [System.Text.Json.Serialization.JsonPropertyName("system")]
+ public string? System { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置操作记录列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("record_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("record_list")]
+ public Types.Record[] RecordList { get; set; } = default!;
+
+ ///
+ /// 获取或设置是否还有更多数据。
+ ///
+ [Newtonsoft.Json.JsonProperty("has_more")]
+ [System.Text.Json.Serialization.JsonPropertyName("has_more")]
+ public bool HasMore { get; set; }
+
+ ///
+ /// 获取或设置翻页标记。
+ ///
+ [Newtonsoft.Json.JsonProperty("next_cursor")]
+ [System.Text.Json.Serialization.JsonPropertyName("next_cursor")]
+ public string? NextCursor { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinSecurity/CgibinSecurityMemberOperateLogListRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinSecurity/CgibinSecurityMemberOperateLogListRequest.cs
new file mode 100644
index 00000000..1a497016
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinSecurity/CgibinSecurityMemberOperateLogListRequest.cs
@@ -0,0 +1,50 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/security/member_oper_log/list 接口的请求。
+ ///
+ public class CgibinSecurityMemberOperateLogListRequest : WechatWorkRequest
+ {
+ ///
+ /// 获取或设置开始时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("start_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("start_time")]
+ public long StartTimestamp { get; set; }
+
+ ///
+ /// 获取或设置结束时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("end_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("end_time")]
+ public long EndTimestamp { get; set; }
+
+ ///
+ /// 获取或设置操作者 UserId。
+ ///
+ [Newtonsoft.Json.JsonProperty("userid")]
+ [System.Text.Json.Serialization.JsonPropertyName("userid")]
+ public string? UserId { get; set; }
+
+ ///
+ /// 获取或设置操作类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("oper_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("oper_type")]
+ public int? OperateType { get; set; }
+
+ ///
+ /// 获取或设置分页每页数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("limit")]
+ [System.Text.Json.Serialization.JsonPropertyName("limit")]
+ public int? Limit { get; set; }
+
+ ///
+ /// 获取或设置翻页标记。
+ ///
+ [Newtonsoft.Json.JsonProperty("cursor")]
+ [System.Text.Json.Serialization.JsonPropertyName("cursor")]
+ public string? Cursor { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinSecurity/CgibinSecurityMemberOperateLogListResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinSecurity/CgibinSecurityMemberOperateLogListResponse.cs
new file mode 100644
index 00000000..2e0aa9bd
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinSecurity/CgibinSecurityMemberOperateLogListResponse.cs
@@ -0,0 +1,70 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/security/member_oper_log/list 接口的响应。
+ ///
+ public class CgibinSecurityMemberOperateLogListResponse : WechatWorkResponse
+ {
+ public static class Types
+ {
+ public class Record
+ {
+ ///
+ /// 获取或设置操作者 UserId。
+ ///
+ [Newtonsoft.Json.JsonProperty("userid")]
+ [System.Text.Json.Serialization.JsonPropertyName("userid")]
+ public string UserId { get; set; } = default!;
+
+ ///
+ /// 获取或设置操作类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("oper_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("oper_type")]
+ public int OperateType { get; set; }
+
+ ///
+ /// 获取或设置时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("time")]
+ [System.Text.Json.Serialization.JsonPropertyName("time")]
+ public long Timestamp { get; set; }
+
+ ///
+ /// 获取或设置相关数据。
+ ///
+ [Newtonsoft.Json.JsonProperty("detail_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("detail_info")]
+ public string? DetailInfo { get; set; }
+
+ ///
+ /// 获取或设置操作者 IP。
+ ///
+ [Newtonsoft.Json.JsonProperty("ip")]
+ [System.Text.Json.Serialization.JsonPropertyName("ip")]
+ public string? Ip { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置操作记录列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("record_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("record_list")]
+ public Types.Record[] RecordList { get; set; } = default!;
+
+ ///
+ /// 获取或设置是否还有更多数据。
+ ///
+ [Newtonsoft.Json.JsonProperty("has_more")]
+ [System.Text.Json.Serialization.JsonPropertyName("has_more")]
+ public bool HasMore { get; set; }
+
+ ///
+ /// 获取或设置翻页标记。
+ ///
+ [Newtonsoft.Json.JsonProperty("next_cursor")]
+ [System.Text.Json.Serialization.JsonPropertyName("next_cursor")]
+ public string? NextCursor { get; set; }
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinSecurity/CgibinSecurityAdministratorOperateLogListRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinSecurity/CgibinSecurityAdministratorOperateLogListRequest.json
new file mode 100644
index 00000000..fbe649b8
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinSecurity/CgibinSecurityAdministratorOperateLogListRequest.json
@@ -0,0 +1,8 @@
+{
+ "start_time": 1724256000,
+ "end_time": 1724860799,
+ "oper_type": 1,
+ "userid": "sam",
+ "cursor": "xxxxx",
+ "limit": 2
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinSecurity/CgibinSecurityAdministratorOperateLogListResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinSecurity/CgibinSecurityAdministratorOperateLogListResponse.json
new file mode 100644
index 00000000..12ff45bb
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinSecurity/CgibinSecurityAdministratorOperateLogListResponse.json
@@ -0,0 +1,24 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "has_more": true,
+ "next_cursor": "xxxx",
+ "record_list": [
+ {
+ "time": 1724256000,
+ "userid": "sam",
+ "oper_type": 1,
+ "detail_type": 2,
+ "detail_info": "姓名:shel;手机号:15622244106",
+ "ip": "183.40.88.11"
+ },
+ {
+ "time": 1724256400,
+ "userid": "sam",
+ "oper_type": 1,
+ "detail_type": 2,
+ "detail_info": "姓名:abel;手机号:15622244108",
+ "ip": "61.40.122.129"
+ }
+ ]
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinSecurity/CgibinSecurityGetScreenOperateRecordRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinSecurity/CgibinSecurityGetScreenOperateRecordRequest.json
new file mode 100644
index 00000000..c17d3e51
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinSecurity/CgibinSecurityGetScreenOperateRecordRequest.json
@@ -0,0 +1,9 @@
+{
+ "start_time": 166666666,
+ "end_time": 166666667,
+ "userid_list": [ "zhangsan", "lisi" ],
+ "department_id_list": [ 2, 3 ],
+ "screen_shot_type": 1,
+ "cursor": "ngLgjieajgieo",
+ "limit": 100
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinSecurity/CgibinSecurityGetScreenOperateRecordResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinSecurity/CgibinSecurityGetScreenOperateRecordResponse.json
new file mode 100644
index 00000000..ba5e67c6
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinSecurity/CgibinSecurityGetScreenOperateRecordResponse.json
@@ -0,0 +1,24 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "has_more": true,
+ "next_cursor": "gejMjgLjgeigoejg",
+ "record_list": [
+ {
+ "time": 16666666666,
+ "userid": "zhangsan",
+ "department_id": 2,
+ "screen_shot_type": 1,
+ "screen_shot_content": "聊天",
+ "system": "iPad"
+ },
+ {
+ "time": 16666666666,
+ "userid": "lisi",
+ "department_id": 3,
+ "screen_shot_type": 4,
+ "screen_shot_content": "文件(防泄露文件:test.pdf)",
+ "system": "iOS"
+ }
+ ]
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinSecurity/CgibinSecurityMemberOperateLogListRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinSecurity/CgibinSecurityMemberOperateLogListRequest.json
new file mode 100644
index 00000000..fbe649b8
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinSecurity/CgibinSecurityMemberOperateLogListRequest.json
@@ -0,0 +1,8 @@
+{
+ "start_time": 1724256000,
+ "end_time": 1724860799,
+ "oper_type": 1,
+ "userid": "sam",
+ "cursor": "xxxxx",
+ "limit": 2
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinSecurity/CgibinSecurityMemberOperateLogListResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinSecurity/CgibinSecurityMemberOperateLogListResponse.json
new file mode 100644
index 00000000..8074204f
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinSecurity/CgibinSecurityMemberOperateLogListResponse.json
@@ -0,0 +1,22 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "has_more": true,
+ "next_cursor": "xxxxxx",
+ "record_list": [
+ {
+ "time": 1724256000,
+ "userid": "sam",
+ "oper_type": 1,
+ "detail_info": "姓名:shel;手机号:15622244106",
+ "ip": "183.40.88.*"
+ },
+ {
+ "time": 1724256400,
+ "userid": "sam",
+ "oper_type": 1,
+ "detail_info": "姓名:abel;手机号:15622244108",
+ "ip": "61.40.122.*"
+ }
+ ]
+}