diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Wedoc/DocumentChangeEvent.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Wedoc/DocumentChangeEvent.cs
new file mode 100644
index 00000000..1c3f995b
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Wedoc/DocumentChangeEvent.cs
@@ -0,0 +1,23 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Events
+{
+ ///
+ /// 表示 EVENT.doc_change 事件的数据。
+ /// REF: https://developer.work.weixin.qq.com/document/path/97833
+ /// REF: https://developer.work.weixin.qq.com/document/path/97834
+ /// REF: https://developer.work.weixin.qq.com/document/path/97835
+ ///
+ public class DocumentChangeEvent : WechatWorkEvent, WechatWorkEvent.Serialization.IXmlSerializable
+ {
+ ///
+ /// 获取或设置变更类型。
+ ///
+ [System.Xml.Serialization.XmlElement("ChangeType")]
+ public string ChangeType { get; set; } = default!;
+
+ ///
+ /// 获取或设置文档 ID 列表。
+ ///
+ [System.Xml.Serialization.XmlElement("DocId", Type = typeof(string))]
+ public string[] DocumentIdList { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinWedocExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinWedocExtensions.cs
new file mode 100644
index 00000000..9cfbc14d
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinWedocExtensions.cs
@@ -0,0 +1,296 @@
+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 WechatWorkClientExecuteCgibinWedocExtensions
+ {
+ #region Document
+ ///
+ /// 异步调用 [POST] /cgi-bin/wedoc/create_doc 接口。
+ /// REF: https://developer.work.weixin.qq.com/document/path/97460
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinWedocCreateDocumentAsync(this WechatWorkClient client, Models.CgibinWedocCreateDocumentRequest 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", "wedoc", "create_doc")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /cgi-bin/wedoc/rename_doc 接口。
+ /// REF: https://developer.work.weixin.qq.com/document/path/97736
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinWedocRenameDocumentAsync(this WechatWorkClient client, Models.CgibinWedocRenameDocumentRequest 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", "wedoc", "rename_doc")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /cgi-bin/wedoc/del_doc 接口。
+ /// REF: https://developer.work.weixin.qq.com/document/path/97735
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinWedocDeleteDocumentAsync(this WechatWorkClient client, Models.CgibinWedocDeleteDocumentRequest 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", "wedoc", "del_doc")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /cgi-bin/wedoc/get_doc_base_info 接口。
+ /// REF: https://developer.work.weixin.qq.com/document/path/97734
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinWedocGetDocumentBaseInfoAsync(this WechatWorkClient client, Models.CgibinWedocGetDocumentBaseInfoRequest 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", "wedoc", "get_doc_base_info")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /cgi-bin/wedoc/doc_share 接口。
+ /// REF: https://developer.work.weixin.qq.com/document/path/97733
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinWedocDocumentShareAsync(this WechatWorkClient client, Models.CgibinWedocDocumentShareRequest 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", "wedoc", "doc_share")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /cgi-bin/wedoc/doc_get_auth 接口。
+ /// REF: https://developer.work.weixin.qq.com/document/path/97733
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinWedocDocumentGetAuthAsync(this WechatWorkClient client, Models.CgibinWedocDocumentGetAuthRequest 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", "wedoc", "doc_get_auth")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /cgi-bin/wedoc/mod_doc_join_rule 接口。
+ /// REF: https://developer.work.weixin.qq.com/document/path/97733
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinWedocModifyDocumentJoinRuleAsync(this WechatWorkClient client, Models.CgibinWedocModifyDocumentJoinRuleRequest 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", "wedoc", "mod_doc_join_rule")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /cgi-bin/wedoc/mod_doc_member 接口。
+ /// REF: https://developer.work.weixin.qq.com/document/path/97733
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinWedocModifyDocumentMemberAsync(this WechatWorkClient client, Models.CgibinWedocModifyDocumentMemberRequest 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", "wedoc", "mod_doc_member")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /cgi-bin/wedoc/mod_doc_safty_setting 接口。
+ /// REF: https://developer.work.weixin.qq.com/document/path/97782
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinWedocModifyDocumentSafeSettingAsync(this WechatWorkClient client, Models.CgibinWedocModifyDocumentSafeSettingRequest 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", "wedoc", "mod_doc_safty_setting")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+ #endregion
+
+ #region Collect
+ ///
+ /// 异步调用 [POST] /cgi-bin/wedoc/create_collect 接口。
+ /// REF: https://developer.work.weixin.qq.com/document/path/97462
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinWedocCreateCollectAsync(this WechatWorkClient client, Models.CgibinWedocCreateCollectRequest 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", "wedoc", "create_collect")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /cgi-bin/wedoc/modify_collect 接口。
+ /// REF: https://developer.work.weixin.qq.com/document/path/97462
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinWedocModifyCollectAsync(this WechatWorkClient client, Models.CgibinWedocModifyCollectRequest 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", "wedoc", "modify_collect")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /cgi-bin/wedoc/get_form_info 接口。
+ /// REF: https://developer.work.weixin.qq.com/document/path/97817
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinWedocGetFormInfoAsync(this WechatWorkClient client, Models.CgibinWedocGetFormInfoRequest 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", "wedoc", "get_form_info")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /cgi-bin/wedoc/get_form_statistic 接口。
+ /// REF: https://developer.work.weixin.qq.com/document/path/97818
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinWedocGetFormStatisticAsync(this WechatWorkClient client, Models.CgibinWedocGetFormStatisticRequest 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", "wedoc", "get_form_statistic")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /cgi-bin/wedoc/get_form_answer 接口。
+ /// REF: https://developer.work.weixin.qq.com/document/path/97818
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinWedocGetFormAnswerAsync(this WechatWorkClient client, Models.CgibinWedocGetFormAnswerRequest 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", "wedoc", "get_form_answer")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+ #endregion
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Collect/CgibinWedocCreateCollectRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Collect/CgibinWedocCreateCollectRequest.cs
new file mode 100644
index 00000000..b762f69b
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Collect/CgibinWedocCreateCollectRequest.cs
@@ -0,0 +1,319 @@
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/wedoc/create_collect 接口的请求。
+ ///
+ public class CgibinWedocCreateCollectRequest : WechatWorkRequest
+ {
+ public static class Types
+ {
+ public class Form
+ {
+ public static class Types
+ {
+ public class QuestionList
+ {
+ ///
+ /// 获取或设置问题列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("items")]
+ [System.Text.Json.Serialization.JsonPropertyName("items")]
+ public IList Items { get; set; } = new List();
+ }
+
+ public class QuestionItem
+ {
+ public static class Types
+ {
+ public class Option
+ {
+ ///
+ /// 获取或设置选项键
+ ///
+ [Newtonsoft.Json.JsonProperty("key")]
+ [System.Text.Json.Serialization.JsonPropertyName("key")]
+ public int Key { get; set; }
+
+ ///
+ /// 获取或设置选项值。
+ ///
+ [Newtonsoft.Json.JsonProperty("value")]
+ [System.Text.Json.Serialization.JsonPropertyName("value")]
+ public string Value { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置选项状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("status")]
+ [System.Text.Json.Serialization.JsonPropertyName("status")]
+ public int Status { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置问题 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("question_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("question_id")]
+ public int QuestionId { get; set; }
+
+ ///
+ /// 获取或设置问题序号。
+ ///
+ [Newtonsoft.Json.JsonProperty("pos")]
+ [System.Text.Json.Serialization.JsonPropertyName("pos")]
+ public int Sequence { get; set; }
+
+ ///
+ /// 获取或设置问题描述。
+ ///
+ [Newtonsoft.Json.JsonProperty("title")]
+ [System.Text.Json.Serialization.JsonPropertyName("title")]
+ public string Title { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置问题状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("status")]
+ [System.Text.Json.Serialization.JsonPropertyName("status")]
+ public int Status { get; set; }
+
+ ///
+ /// 获取或设置回答类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("reply_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("reply_type")]
+ public int ReplyType { get; set; }
+
+ ///
+ /// 获取或设置是否必答。
+ ///
+ [Newtonsoft.Json.JsonProperty("must_reply")]
+ [System.Text.Json.Serialization.JsonPropertyName("must_reply")]
+ public bool IsMustReply { get; set; }
+
+ ///
+ /// 获取或设置选项列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("option_item")]
+ [System.Text.Json.Serialization.JsonPropertyName("option_item")]
+ public IList? OptionList { get; set; }
+
+ ///
+ /// 获取或设置问题备注。
+ ///
+ [Newtonsoft.Json.JsonProperty("note")]
+ [System.Text.Json.Serialization.JsonPropertyName("note")]
+ public string? Note { get; set; }
+
+ ///
+ /// 获取或设置编辑提示。
+ ///
+ [Newtonsoft.Json.JsonProperty("placeholder")]
+ [System.Text.Json.Serialization.JsonPropertyName("placeholder")]
+ public string? Placeholder { get; set; }
+ }
+
+ public class Settings
+ {
+ public static class Types
+ {
+ public class FillInRange
+ {
+ ///
+ /// 获取或设置 UserId 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("userids")]
+ [System.Text.Json.Serialization.JsonPropertyName("userids")]
+ public IList? UserIdList { get; set; }
+
+ ///
+ /// 获取或设置部门 ID 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("departmentids")]
+ [System.Text.Json.Serialization.JsonPropertyName("departmentids")]
+ public IList? DepartmentIdList { get; set; }
+ }
+
+ public class ManagerRange
+ {
+ ///
+ /// 获取或设置 UserId 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("userids")]
+ [System.Text.Json.Serialization.JsonPropertyName("userids")]
+ public IList UserIdList { get; set; } = new List();
+ }
+
+ public class Repetition
+ {
+ ///
+ /// 获取或设置是否开启定时重复。
+ ///
+ [Newtonsoft.Json.JsonProperty("enable")]
+ [System.Text.Json.Serialization.JsonPropertyName("enable")]
+ public bool? IsEnabled { get; set; }
+
+ ///
+ /// 获取或设置提醒时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("remind_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("remind_time")]
+ public long? RemindTimestamp { get; set; }
+
+ ///
+ /// 获取或设置重复类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("repeat_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("repeat_type")]
+ public int? RepeatType { get; set; }
+
+ ///
+ /// 获取或设置每周周几重复。
+ ///
+ [Newtonsoft.Json.JsonProperty("week_flag")]
+ [System.Text.Json.Serialization.JsonPropertyName("week_flag")]
+ public int? RepeatDayOfWeek { get; set; }
+
+ ///
+ /// 获取或设置每月第几天重复。
+ ///
+ [Newtonsoft.Json.JsonProperty("day_of_month")]
+ [System.Text.Json.Serialization.JsonPropertyName("day_of_month")]
+ public int? RepeatDayOfMonth { get; set; }
+
+ ///
+ /// 获取或设置是否跳过节假日。
+ ///
+ [Newtonsoft.Json.JsonProperty("skip_holiday")]
+ [System.Text.Json.Serialization.JsonPropertyName("skip_holiday")]
+ public bool? IsSkipHoliday { get; set; }
+
+ ///
+ /// 获取或设置补填类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("fork_finish_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("fork_finish_type")]
+ public int? ForkFinishType { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置填写权限类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("fill_out_auth")]
+ [System.Text.Json.Serialization.JsonPropertyName("fill_out_auth")]
+ public int? FillOutAuthType { get; set; }
+
+ ///
+ /// 获取或设置填写范围信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("fill_in_range")]
+ [System.Text.Json.Serialization.JsonPropertyName("fill_in_range")]
+ public Types.FillInRange? FillInRange { get; set; }
+
+ ///
+ /// 获取或设置管理员范围信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("setting_manager_range")]
+ [System.Text.Json.Serialization.JsonPropertyName("setting_manager_range")]
+ public Types.ManagerRange? ManagerRange { get; set; }
+
+ ///
+ /// 获取或设置定时重复设置信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("timed_repeat_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("timed_repeat_info")]
+ public Types.Repetition? Repetition { get; set; }
+
+ ///
+ /// 获取或设置最多填写数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("max_fill_cnt")]
+ [System.Text.Json.Serialization.JsonPropertyName("max_fill_cnt")]
+ public int? MaxFillCount { get; set; }
+
+ ///
+ /// 获取或设置定时关闭时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("timed_finish")]
+ [System.Text.Json.Serialization.JsonPropertyName("timed_finish")]
+ public long? FinishTimestamp { get; set; }
+
+ ///
+ /// 获取或设置是否支持匿名填写。
+ ///
+ [Newtonsoft.Json.JsonProperty("can_anonymous")]
+ [System.Text.Json.Serialization.JsonPropertyName("can_anonymous")]
+ public bool? EnableAnonymous { get; set; }
+
+ ///
+ /// 获取或设置是否有回复时提醒。
+ ///
+ [Newtonsoft.Json.JsonProperty("can_notify_submit")]
+ [System.Text.Json.Serialization.JsonPropertyName("can_notify_submit")]
+ public bool? EnableNotifySubmit { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置收集表标题。
+ ///
+ [Newtonsoft.Json.JsonProperty("form_title")]
+ [System.Text.Json.Serialization.JsonPropertyName("form_title")]
+ public string Title { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置收集表描述。
+ ///
+ [Newtonsoft.Json.JsonProperty("form_desc")]
+ [System.Text.Json.Serialization.JsonPropertyName("form_desc")]
+ public string? Description { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置收集表表头背景图 URL。
+ ///
+ [Newtonsoft.Json.JsonProperty("form_header")]
+ [System.Text.Json.Serialization.JsonPropertyName("form_header")]
+ public string? HeaderImageUrl { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置收集表问题列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("form_question")]
+ [System.Text.Json.Serialization.JsonPropertyName("form_question")]
+ public Types.QuestionList QuestionList { get; set; } = new Types.QuestionList();
+
+ ///
+ /// 获取或设置收集表设置信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("form_setting")]
+ [System.Text.Json.Serialization.JsonPropertyName("form_setting")]
+ public Types.Settings? Settings { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置空间 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("spaceid")]
+ [System.Text.Json.Serialization.JsonPropertyName("spaceid")]
+ public string? SpaceId { get; set; }
+
+ ///
+ /// 获取或设置上级文件 ID 或空间 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("fatherid")]
+ [System.Text.Json.Serialization.JsonPropertyName("fatherid")]
+ public string? ParentFileOrSpaceId { get; set; }
+
+ ///
+ /// 获取或设置收集表信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("form_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("form_info")]
+ public Types.Form Form { get; set; } = new Types.Form();
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Collect/CgibinWedocCreateCollectResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Collect/CgibinWedocCreateCollectResponse.cs
new file mode 100644
index 00000000..cfdf94b5
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Collect/CgibinWedocCreateCollectResponse.cs
@@ -0,0 +1,15 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/wedoc/create_collect 接口的响应。
+ ///
+ public class CgibinWedocCreateCollectResponse : WechatWorkResponse
+ {
+ ///
+ /// 获取或设置收集表 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("formid")]
+ [System.Text.Json.Serialization.JsonPropertyName("formid")]
+ public string FormId { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Collect/CgibinWedocGetFormAnswerRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Collect/CgibinWedocGetFormAnswerRequest.cs
new file mode 100644
index 00000000..58793b62
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Collect/CgibinWedocGetFormAnswerRequest.cs
@@ -0,0 +1,24 @@
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/wedoc/get_form_answer 接口的请求。
+ ///
+ public class CgibinWedocGetFormAnswerRequest : WechatWorkRequest
+ {
+ ///
+ /// 获取或设置收集表周期 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("repeated_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("repeated_id")]
+ public string RepeatedId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置答案 ID 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("answer_ids")]
+ [System.Text.Json.Serialization.JsonPropertyName("answer_ids")]
+ public IList? AnswerIdList { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Collect/CgibinWedocGetFormAnswerResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Collect/CgibinWedocGetFormAnswerResponse.cs
new file mode 100644
index 00000000..fcb1d54e
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Collect/CgibinWedocGetFormAnswerResponse.cs
@@ -0,0 +1,168 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/wedoc/get_form_answer 接口的响应。
+ ///
+ public class CgibinWedocGetFormAnswerResponse : WechatWorkResponse
+ {
+ public static class Types
+ {
+ public class AnswerList
+ {
+ ///
+ /// 获取或设置答案列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("answer_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("answer_list")]
+ public AnswerItem[] Items { get; set; } = default!;
+ }
+
+ public class AnswerItem
+ {
+ public static class Types
+ {
+ public class ReplyList
+ {
+ ///
+ /// 获取或设置回答列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("items")]
+ [System.Text.Json.Serialization.JsonPropertyName("items")]
+ public ReplyItem[] Items { get; set; } = default!;
+ }
+
+ public class ReplyItem
+ {
+ public static class Types
+ {
+ public class ExtendedFileReply
+ {
+ ///
+ /// 获取或设置文件 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("fileid")]
+ [System.Text.Json.Serialization.JsonPropertyName("fileid")]
+ public string FileId { get; set; } = default!;
+
+ ///
+ /// 获取或设置文件名。
+ ///
+ [Newtonsoft.Json.JsonProperty("name")]
+ [System.Text.Json.Serialization.JsonPropertyName("name")]
+ public string Name { get; set; } = default!;
+ }
+
+ public class ExtendedOptionReply
+ {
+ ///
+ /// 获取或设置额外回答选项键。
+ ///
+ [Newtonsoft.Json.JsonProperty("option_reply")]
+ [System.Text.Json.Serialization.JsonPropertyName("option_reply")]
+ public int OptionKey { get; set; }
+
+ ///
+ /// 获取或设置文本。
+ ///
+ [Newtonsoft.Json.JsonProperty("extend_text")]
+ [System.Text.Json.Serialization.JsonPropertyName("extend_text")]
+ public string Text { get; set; } = default!;
+ }
+ }
+
+ ///
+ /// 获取或设置问题 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("question_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("question_id")]
+ public int QuestionId { get; set; }
+
+ ///
+ /// 获取或设置回答文本内容。
+ ///
+ [Newtonsoft.Json.JsonProperty("text_reply")]
+ [System.Text.Json.Serialization.JsonPropertyName("text_reply")]
+ public string? ReplyText { get; set; }
+
+ ///
+ /// 获取或设置回答选项键列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("option_reply")]
+ [System.Text.Json.Serialization.JsonPropertyName("option_reply")]
+ public int[]? ReplyOptionKeyList { get; set; }
+
+ ///
+ /// 获取或设置回答文件列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("file_extend_reply")]
+ [System.Text.Json.Serialization.JsonPropertyName("file_extend_reply")]
+ public Types.ExtendedFileReply[]? ReplyExtendedFileReply { get; set; }
+
+ ///
+ /// 获取或设置回答额外选项列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("option_extend_reply")]
+ [System.Text.Json.Serialization.JsonPropertyName("option_extend_reply")]
+ public Types.ExtendedOptionReply[]? ReplyExtendedOptionList { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置答案 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("answer_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("answer_id")]
+ public long AnswerId { get; set; }
+
+ ///
+ /// 获取或设置用户名。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_name")]
+ public string UserName { get; set; } = default!;
+
+ ///
+ /// 获取或设置外部联系人临时 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("tmp_external_userid")]
+ [System.Text.Json.Serialization.JsonPropertyName("tmp_external_userid")]
+ public string? TempExternalUserId { get; set; }
+
+ ///
+ /// 获取或设置回答列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("reply")]
+ [System.Text.Json.Serialization.JsonPropertyName("reply")]
+ public Types.ReplyList ReplyList { get; set; } = default!;
+
+ ///
+ /// 获取或设置答案状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("answer_status")]
+ [System.Text.Json.Serialization.JsonPropertyName("answer_status")]
+ public int AnswerStatus { get; set; }
+
+ ///
+ /// 获取或设置创建时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("ctime")]
+ [System.Text.Json.Serialization.JsonPropertyName("ctime")]
+ public long CreateTimestamp { get; set; }
+
+ ///
+ /// 获取或设置修改时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("mtime")]
+ [System.Text.Json.Serialization.JsonPropertyName("mtime")]
+ public long ModifyTimestamp { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置收集表答案列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("answer")]
+ [System.Text.Json.Serialization.JsonPropertyName("answer")]
+ public Types.AnswerList AnswerList { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Collect/CgibinWedocGetFormInfoRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Collect/CgibinWedocGetFormInfoRequest.cs
new file mode 100644
index 00000000..c03ff5f0
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Collect/CgibinWedocGetFormInfoRequest.cs
@@ -0,0 +1,15 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/wedoc/get_form_info 接口的请求。
+ ///
+ public class CgibinWedocGetFormInfoRequest : WechatWorkRequest
+ {
+ ///
+ /// 获取或设置收集表 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("formid")]
+ [System.Text.Json.Serialization.JsonPropertyName("formid")]
+ public string FormId { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Collect/CgibinWedocGetFormInfoResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Collect/CgibinWedocGetFormInfoResponse.cs
new file mode 100644
index 00000000..d62fec48
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Collect/CgibinWedocGetFormInfoResponse.cs
@@ -0,0 +1,331 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/wedoc/get_form_info 接口的响应。
+ ///
+ public class CgibinWedocGetFormInfoResponse : WechatWorkResponse
+ {
+ public static class Types
+ {
+ public class Form
+ {
+ public static class Types
+ {
+ public class QuestionList
+ {
+ ///
+ /// 获取或设置问题列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("items")]
+ [System.Text.Json.Serialization.JsonPropertyName("items")]
+ public QuestionItem[] Items { get; set; } = default!;
+ }
+
+ public class QuestionItem
+ {
+ public static class Types
+ {
+ public class Option
+ {
+ ///
+ /// 获取或设置选项键
+ ///
+ [Newtonsoft.Json.JsonProperty("key")]
+ [System.Text.Json.Serialization.JsonPropertyName("key")]
+ public int Key { get; set; }
+
+ ///
+ /// 获取或设置选项值。
+ ///
+ [Newtonsoft.Json.JsonProperty("value")]
+ [System.Text.Json.Serialization.JsonPropertyName("value")]
+ public string Value { get; set; } = default!;
+
+ ///
+ /// 获取或设置选项状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("status")]
+ [System.Text.Json.Serialization.JsonPropertyName("status")]
+ public int Status { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置问题 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("question_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("question_id")]
+ public int QuestionId { get; set; }
+
+ ///
+ /// 获取或设置问题序号。
+ ///
+ [Newtonsoft.Json.JsonProperty("pos")]
+ [System.Text.Json.Serialization.JsonPropertyName("pos")]
+ public int Sequence { get; set; }
+
+ ///
+ /// 获取或设置问题描述。
+ ///
+ [Newtonsoft.Json.JsonProperty("title")]
+ [System.Text.Json.Serialization.JsonPropertyName("title")]
+ public string Title { get; set; } = default!;
+
+ ///
+ /// 获取或设置问题状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("status")]
+ [System.Text.Json.Serialization.JsonPropertyName("status")]
+ public int Status { get; set; }
+
+ ///
+ /// 获取或设置回答类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("reply_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("reply_type")]
+ public int ReplyType { get; set; }
+
+ ///
+ /// 获取或设置是否必答。
+ ///
+ [Newtonsoft.Json.JsonProperty("must_reply")]
+ [System.Text.Json.Serialization.JsonPropertyName("must_reply")]
+ public bool IsMustReply { get; set; }
+
+ ///
+ /// 获取或设置选项列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("option_item")]
+ [System.Text.Json.Serialization.JsonPropertyName("option_item")]
+ public Types.Option[]? OptionList { get; set; }
+
+ ///
+ /// 获取或设置问题备注。
+ ///
+ [Newtonsoft.Json.JsonProperty("note")]
+ [System.Text.Json.Serialization.JsonPropertyName("note")]
+ public string? Note { get; set; }
+
+ ///
+ /// 获取或设置编辑提示。
+ ///
+ [Newtonsoft.Json.JsonProperty("placeholder")]
+ [System.Text.Json.Serialization.JsonPropertyName("placeholder")]
+ public string? Placeholder { get; set; }
+ }
+
+ public class Settings
+ {
+ public static class Types
+ {
+ public class FillInRange
+ {
+ ///
+ /// 获取或设置 UserId 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("userids")]
+ [System.Text.Json.Serialization.JsonPropertyName("userids")]
+ public string[]? UserIdList { get; set; }
+
+ ///
+ /// 获取或设置部门 ID 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("departmentids")]
+ [System.Text.Json.Serialization.JsonPropertyName("departmentids")]
+ public long[]? DepartmentIdList { get; set; }
+ }
+
+ public class ManagerRange
+ {
+ ///
+ /// 获取或设置 UserId 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("userids")]
+ [System.Text.Json.Serialization.JsonPropertyName("userids")]
+ public string[] UserIdList { get; set; } = default!;
+ }
+
+ public class Repetition
+ {
+ ///
+ /// 获取或设置是否开启定时重复。
+ ///
+ [Newtonsoft.Json.JsonProperty("enable")]
+ [System.Text.Json.Serialization.JsonPropertyName("enable")]
+ public bool IsEnabled { get; set; }
+
+ ///
+ /// 获取或设置提醒时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("remind_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("remind_time")]
+ public long? RemindTimestamp { get; set; }
+
+ ///
+ /// 获取或设置重复类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("repeat_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("repeat_type")]
+ public int? RepeatType { get; set; }
+
+ ///
+ /// 获取或设置每周周几重复。
+ ///
+ [Newtonsoft.Json.JsonProperty("week_flag")]
+ [System.Text.Json.Serialization.JsonPropertyName("week_flag")]
+ public int? RepeatDayOfWeek { get; set; }
+
+ ///
+ /// 获取或设置每月第几天重复。
+ ///
+ [Newtonsoft.Json.JsonProperty("day_of_month")]
+ [System.Text.Json.Serialization.JsonPropertyName("day_of_month")]
+ public int? RepeatDayOfMonth { get; set; }
+
+ ///
+ /// 获取或设置是否跳过节假日。
+ ///
+ [Newtonsoft.Json.JsonProperty("skip_holiday")]
+ [System.Text.Json.Serialization.JsonPropertyName("skip_holiday")]
+ public bool? IsSkipHoliday { get; set; }
+
+ ///
+ /// 获取或设置补填类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("fork_finish_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("fork_finish_type")]
+ public int? ForkFinishType { get; set; }
+
+ ///
+ /// 获取或设置规则创建时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("rule_ctime")]
+ [System.Text.Json.Serialization.JsonPropertyName("rule_ctime")]
+ public long? RuleCreateTimestamp { get; set; }
+
+ ///
+ /// 获取或设置规则修改时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("rule_mtime")]
+ [System.Text.Json.Serialization.JsonPropertyName("rule_mtime")]
+ public long? RuleModifyTimestamp { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置填写权限类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("fill_out_auth")]
+ [System.Text.Json.Serialization.JsonPropertyName("fill_out_auth")]
+ public int FillOutAuthType { get; set; }
+
+ ///
+ /// 获取或设置填写范围信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("fill_in_range")]
+ [System.Text.Json.Serialization.JsonPropertyName("fill_in_range")]
+ public Types.FillInRange? FillInRange { get; set; }
+
+ ///
+ /// 获取或设置管理员范围信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("setting_manager_range")]
+ [System.Text.Json.Serialization.JsonPropertyName("setting_manager_range")]
+ public Types.ManagerRange? ManagerRange { get; set; }
+
+ ///
+ /// 获取或设置定时重复设置信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("timed_repeat_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("timed_repeat_info")]
+ public Types.Repetition? Repetition { get; set; }
+
+ ///
+ /// 获取或设置最多填写数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("max_fill_cnt")]
+ [System.Text.Json.Serialization.JsonPropertyName("max_fill_cnt")]
+ public int MaxFillCount { get; set; }
+
+ ///
+ /// 获取或设置定时关闭时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("timed_finish")]
+ [System.Text.Json.Serialization.JsonPropertyName("timed_finish")]
+ public long? FinishTimestamp { get; set; }
+
+ ///
+ /// 获取或设置是否支持匿名填写。
+ ///
+ [Newtonsoft.Json.JsonProperty("can_anonymous")]
+ [System.Text.Json.Serialization.JsonPropertyName("can_anonymous")]
+ public bool EnableAnonymous { get; set; }
+
+ ///
+ /// 获取或设置是否有回复时提醒。
+ ///
+ [Newtonsoft.Json.JsonProperty("can_notify_submit")]
+ [System.Text.Json.Serialization.JsonPropertyName("can_notify_submit")]
+ public bool EnableNotifySubmit { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置收集表 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("formid")]
+ [System.Text.Json.Serialization.JsonPropertyName("formid")]
+ public string FormId { get; set; } = default!;
+
+ ///
+ /// 获取或设置收集表标题。
+ ///
+ [Newtonsoft.Json.JsonProperty("form_title")]
+ [System.Text.Json.Serialization.JsonPropertyName("form_title")]
+ public string Title { get; set; } = default!;
+
+ ///
+ /// 获取或设置收集表描述。
+ ///
+ [Newtonsoft.Json.JsonProperty("form_desc")]
+ [System.Text.Json.Serialization.JsonPropertyName("form_desc")]
+ public string Description { get; set; } = default!;
+
+ ///
+ /// 获取或设置收集表表头背景图 URL。
+ ///
+ [Newtonsoft.Json.JsonProperty("form_header")]
+ [System.Text.Json.Serialization.JsonPropertyName("form_header")]
+ public string HeaderImageUrl { get; set; } = default!;
+
+ ///
+ /// 获取或设置收集表问题列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("form_question")]
+ [System.Text.Json.Serialization.JsonPropertyName("form_question")]
+ public Types.QuestionList QuestionList { get; set; } = default!;
+
+ ///
+ /// 获取或设置收集表设置信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("form_setting")]
+ [System.Text.Json.Serialization.JsonPropertyName("form_setting")]
+ public Types.Settings Settings { get; set; } = default!;
+
+ ///
+ /// 获取或设置收集表周期 ID 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("repeated_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("repeated_id")]
+ public string[]? RepeatedId { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置收集表信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("form_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("form_info")]
+ public Types.Form Form { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Collect/CgibinWedocGetFormStatisticRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Collect/CgibinWedocGetFormStatisticRequest.cs
new file mode 100644
index 00000000..74ca14b0
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Collect/CgibinWedocGetFormStatisticRequest.cs
@@ -0,0 +1,50 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/wedoc/get_form_statistic 接口的请求。
+ ///
+ public class CgibinWedocGetFormStatisticRequest : WechatWorkRequest
+ {
+ ///
+ /// 获取或设置收集表周期 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("repeated_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("repeated_id")]
+ public string RepeatedId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置请求类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("req_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("req_type")]
+ public int RequestType { get; set; }
+
+ ///
+ /// 获取或设置开始时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("start_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("start_time")]
+ public int? StartTimestamp { get; set; }
+
+ ///
+ /// 获取或设置结束时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("end_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("end_time")]
+ public int? Endimestamp { 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 int? Cursor { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Collect/CgibinWedocGetFormStatisticResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Collect/CgibinWedocGetFormStatisticResponse.cs
new file mode 100644
index 00000000..cc682ab5
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Collect/CgibinWedocGetFormStatisticResponse.cs
@@ -0,0 +1,115 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/wedoc/get_form_statistic 接口的响应。
+ ///
+ public class CgibinWedocGetFormStatisticResponse : WechatWorkResponse
+ {
+ public static class Types
+ {
+ public class FillUser
+ {
+ ///
+ /// 获取或设置用户成员账号。
+ ///
+ [Newtonsoft.Json.JsonProperty("userid")]
+ [System.Text.Json.Serialization.JsonPropertyName("userid")]
+ public string? UserId { get; set; }
+
+ ///
+ /// 获取或设置外部联系人临时 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("tmp_external_userid")]
+ [System.Text.Json.Serialization.JsonPropertyName("tmp_external_userid")]
+ public string? TempExternalUserId { get; set; }
+
+ ///
+ /// 获取或设置用户名。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_name")]
+ public string UserName { get; set; } = default!;
+
+ ///
+ /// 获取或设置答案 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("answer_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("answer_id")]
+ public long AnswerId { get; set; }
+
+ ///
+ /// 获取或设置提交时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("submit_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("submit_time")]
+ public long SubmitTimestamp { get; set; }
+ }
+
+ public class UnfillUser
+ {
+ ///
+ /// 获取或设置用户成员账号。
+ ///
+ [Newtonsoft.Json.JsonProperty("userid")]
+ [System.Text.Json.Serialization.JsonPropertyName("userid")]
+ public string UserId { get; set; } = default!;
+
+ ///
+ /// 获取或设置用户名。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_name")]
+ public string UserName { get; set; } = default!;
+ }
+ }
+
+ ///
+ /// 获取或设置已填写次数。
+ ///
+ [Newtonsoft.Json.JsonProperty("fill_cnt")]
+ [System.Text.Json.Serialization.JsonPropertyName("fill_cnt")]
+ public int FillCount { get; set; }
+
+ ///
+ /// 获取或设置已填写人数。
+ ///
+ [Newtonsoft.Json.JsonProperty("fill_user_cnt")]
+ [System.Text.Json.Serialization.JsonPropertyName("fill_user_cnt")]
+ public int FillUserCount { get; set; }
+
+ ///
+ /// 获取或设置未填写人数。
+ ///
+ [Newtonsoft.Json.JsonProperty("unfill_user_cnt")]
+ [System.Text.Json.Serialization.JsonPropertyName("unfill_user_cnt")]
+ public int UnfillUserCount { get; set; }
+
+ ///
+ /// 获取或设置已填写人列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("submit_users")]
+ [System.Text.Json.Serialization.JsonPropertyName("submit_users")]
+ public Types.FillUser[]? FillUserList { get; set; }
+
+ ///
+ /// 获取或设置未填写人列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("unfill_users")]
+ [System.Text.Json.Serialization.JsonPropertyName("unfill_users")]
+ public Types.UnfillUser[]? UnfillUserList { get; set; }
+
+ ///
+ /// 获取或设置是否还有更多数据。
+ ///
+ [Newtonsoft.Json.JsonProperty("has_more")]
+ [System.Text.Json.Serialization.JsonPropertyName("has_more")]
+ public bool? HasMore { get; set; }
+
+ ///
+ /// 获取或设置翻页标记。
+ ///
+ [Newtonsoft.Json.JsonProperty("cursor")]
+ [System.Text.Json.Serialization.JsonPropertyName("cursor")]
+ public int? NextCursor { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Collect/CgibinWedocModifyCollectRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Collect/CgibinWedocModifyCollectRequest.cs
new file mode 100644
index 00000000..2bf943c5
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Collect/CgibinWedocModifyCollectRequest.cs
@@ -0,0 +1,141 @@
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/wedoc/modify_collect 接口的请求。
+ ///
+ public class CgibinWedocModifyCollectRequest : WechatWorkRequest
+ {
+ public static class Types
+ {
+ public class Form
+ {
+
+ public static class Types
+ {
+ public class QuestionList : CgibinWedocCreateCollectRequest.Types.Form.Types.QuestionList
+ {
+ ///
+ /// 获取或设置问题列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("items")]
+ [System.Text.Json.Serialization.JsonPropertyName("items")]
+ public new IList Items { get; set; } = new List();
+ }
+
+ public class QuestionItem : CgibinWedocCreateCollectRequest.Types.Form.Types.QuestionItem
+ {
+ public static new class Types
+ {
+ public class Option : CgibinWedocCreateCollectRequest.Types.Form.Types.QuestionItem.Types.Option
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置选项列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("option_item")]
+ [System.Text.Json.Serialization.JsonPropertyName("option_item")]
+ public new IList? OptionList { get; set; }
+ }
+
+ public class Settings : CgibinWedocCreateCollectRequest.Types.Form.Types.Settings
+ {
+ public static new class Types
+ {
+ public class FillInRange : CgibinWedocCreateCollectRequest.Types.Form.Types.Settings.Types.FillInRange
+ {
+ }
+
+ public class ManagerRange : CgibinWedocCreateCollectRequest.Types.Form.Types.Settings.Types.ManagerRange
+ {
+ }
+
+ public class Repetition : CgibinWedocCreateCollectRequest.Types.Form.Types.Settings.Types.Repetition
+ {
+ }
+ }
+ ///
+ /// 获取或设置填写范围信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("fill_in_range")]
+ [System.Text.Json.Serialization.JsonPropertyName("fill_in_range")]
+ public new Types.FillInRange? FillInRange { get; set; }
+
+ ///
+ /// 获取或设置管理员范围信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("setting_manager_range")]
+ [System.Text.Json.Serialization.JsonPropertyName("setting_manager_range")]
+ public new Types.ManagerRange? ManagerRange { get; set; }
+
+ ///
+ /// 获取或设置定时重复设置信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("timed_repeat_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("timed_repeat_info")]
+ public new Types.Repetition? Repetition { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置收集表标题。
+ ///
+ [Newtonsoft.Json.JsonProperty("form_title")]
+ [System.Text.Json.Serialization.JsonPropertyName("form_title")]
+ public string? Title { get; set; }
+
+ ///
+ /// 获取或设置收集表描述。
+ ///
+ [Newtonsoft.Json.JsonProperty("form_desc")]
+ [System.Text.Json.Serialization.JsonPropertyName("form_desc")]
+ public string? Description { get; set; }
+
+ ///
+ /// 获取或设置收集表表头背景图 URL。
+ ///
+ [Newtonsoft.Json.JsonProperty("form_header")]
+ [System.Text.Json.Serialization.JsonPropertyName("form_header")]
+ public string? HeaderImageUrl { get; set; }
+
+ ///
+ /// 获取或设置收集表问题列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("form_question")]
+ [System.Text.Json.Serialization.JsonPropertyName("form_question")]
+ public Types.QuestionList? QuestionList { get; set; }
+
+ ///
+ /// 获取或设置收集表设置信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("form_setting")]
+ [System.Text.Json.Serialization.JsonPropertyName("form_setting")]
+ public Types.Settings? Settings { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置操作模式。
+ ///
+ [Newtonsoft.Json.JsonProperty("oper")]
+ [System.Text.Json.Serialization.JsonPropertyName("oper")]
+ public int OperateMode { get; set; }
+
+ ///
+ /// 获取或设置收集表 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("formid")]
+ [System.Text.Json.Serialization.JsonPropertyName("formid")]
+ public string FormId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置收集表信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("form_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("form_info")]
+ public Types.Form Form { get; set; } = new Types.Form();
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Collect/CgibinWedocModifyCollectResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Collect/CgibinWedocModifyCollectResponse.cs
new file mode 100644
index 00000000..0a32d634
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Collect/CgibinWedocModifyCollectResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/wedoc/modify_collect 接口的响应。
+ ///
+ public class CgibinWedocModifyCollectResponse : WechatWorkResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocCreateDocumentRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocCreateDocumentRequest.cs
new file mode 100644
index 00000000..16694c6e
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocCreateDocumentRequest.cs
@@ -0,0 +1,45 @@
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/wedoc/create_doc 接口的请求。
+ ///
+ public class CgibinWedocCreateDocumentRequest : WechatWorkRequest
+ {
+ ///
+ /// 获取或设置空间 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("spaceid")]
+ [System.Text.Json.Serialization.JsonPropertyName("spaceid")]
+ public string? SpaceId { get; set; }
+
+ ///
+ /// 获取或设置上级文件 ID 或空间 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("fatherid")]
+ [System.Text.Json.Serialization.JsonPropertyName("fatherid")]
+ public string? ParentFileOrSpaceId { get; set; }
+
+ ///
+ /// 获取或设置文档类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("doc_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("doc_type")]
+ public int DocumentType { get; set; }
+
+ ///
+ /// 获取或设置文档名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("doc_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("doc_name")]
+ public string DocumentName { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置管理员成员账号列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("admin_users")]
+ [System.Text.Json.Serialization.JsonPropertyName("admin_users")]
+ public IList? AdminUserIdList { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocCreateDocumentResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocCreateDocumentResponse.cs
new file mode 100644
index 00000000..fff1d784
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocCreateDocumentResponse.cs
@@ -0,0 +1,22 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/wedoc/create_doc 接口的响应。
+ ///
+ public class CgibinWedocCreateDocumentResponse : WechatWorkResponse
+ {
+ ///
+ /// 获取或设置文档 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("docid")]
+ [System.Text.Json.Serialization.JsonPropertyName("docid")]
+ public string DocumentId { get; set; } = default!;
+
+ ///
+ /// 获取或设置访问链接。
+ ///
+ [Newtonsoft.Json.JsonProperty("url")]
+ [System.Text.Json.Serialization.JsonPropertyName("url")]
+ public string Url { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocDeleteDocumentRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocDeleteDocumentRequest.cs
new file mode 100644
index 00000000..76f2c505
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocDeleteDocumentRequest.cs
@@ -0,0 +1,22 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/wedoc/del_doc 接口的请求。
+ ///
+ public class CgibinWedocDeleteDocumentRequest : WechatWorkRequest
+ {
+ ///
+ /// 获取或设置文档 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("docid")]
+ [System.Text.Json.Serialization.JsonPropertyName("docid")]
+ public string? DocumentId { get; set; }
+
+ ///
+ /// 获取或设置收集表 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("formid")]
+ [System.Text.Json.Serialization.JsonPropertyName("formid")]
+ public string? FormId { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocDeleteDocumentResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocDeleteDocumentResponse.cs
new file mode 100644
index 00000000..b87872d3
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocDeleteDocumentResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/wedoc/del_doc 接口的响应。
+ ///
+ public class CgibinWedocDeleteDocumentResponse : WechatWorkResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocDocumentGetAuthRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocDocumentGetAuthRequest.cs
new file mode 100644
index 00000000..1e015b85
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocDocumentGetAuthRequest.cs
@@ -0,0 +1,15 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/wedoc/doc_get_auth 接口的请求。
+ ///
+ public class CgibinWedocDocumentGetAuthRequest : WechatWorkRequest
+ {
+ ///
+ /// 获取或设置文档 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("docid")]
+ [System.Text.Json.Serialization.JsonPropertyName("docid")]
+ public string DocumentId { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocDocumentGetAuthResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocDocumentGetAuthResponse.cs
new file mode 100644
index 00000000..37d003ea
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocDocumentGetAuthResponse.cs
@@ -0,0 +1,187 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/wedoc/doc_get_auth 接口的响应。
+ ///
+ public class CgibinWedocDocumentGetAuthResponse : WechatWorkResponse
+ {
+ public static class Types
+ {
+ public class AccessRule
+ {
+ ///
+ /// 获取或设置是否为企业内可访问。
+ ///
+ [Newtonsoft.Json.JsonProperty("enable_corp_internal")]
+ [System.Text.Json.Serialization.JsonPropertyName("enable_corp_internal")]
+ public bool EnableCorpInternal { get; set; }
+
+ ///
+ /// 获取或设置企业内权限类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("corp_internal_auth")]
+ [System.Text.Json.Serialization.JsonPropertyName("corp_internal_auth")]
+ public int CorpInternalAuthType { get; set; }
+
+ ///
+ /// 获取或设置是否开启企业内管理员审批。
+ ///
+ [Newtonsoft.Json.JsonProperty("corp_internal_approve_only_by_admin")]
+ [System.Text.Json.Serialization.JsonPropertyName("corp_internal_approve_only_by_admin")]
+ public bool? IsCorpInternalApproveOnlyByAdmin { get; set; }
+
+ ///
+ /// 获取或设置是否为企业外可访问。
+ ///
+ [Newtonsoft.Json.JsonProperty("enable_corp_external")]
+ [System.Text.Json.Serialization.JsonPropertyName("enable_corp_external")]
+ public bool EnableCorpExternal { get; set; }
+
+ ///
+ /// 获取或设置企业外权限类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("corp_external_auth")]
+ [System.Text.Json.Serialization.JsonPropertyName("corp_external_auth")]
+ public int CorpExternalAuthType { get; set; }
+
+ ///
+ /// 获取或设置是否开启企业外管理员审批。
+ ///
+ [Newtonsoft.Json.JsonProperty("corp_external_approve_only_by_admin")]
+ [System.Text.Json.Serialization.JsonPropertyName("corp_external_approve_only_by_admin")]
+ public bool? IsCorpExternalApproveOnlyByAdmin { get; set; }
+
+ ///
+ /// 获取或设置是否禁止分享到企业外部。
+ ///
+ [Newtonsoft.Json.JsonProperty("ban_share_external")]
+ [System.Text.Json.Serialization.JsonPropertyName("ban_share_external")]
+ public bool IsBanShareExternal { get; set; }
+ }
+
+ public class SecureSettings
+ {
+ public static class Types
+ {
+ public class Watermark
+ {
+ ///
+ /// 获取或设置水印文字。
+ ///
+ [Newtonsoft.Json.JsonProperty("text")]
+ [System.Text.Json.Serialization.JsonPropertyName("text")]
+ public string Text { get; set; } = default!;
+
+ ///
+ /// 获取或设置水印类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("margin_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("margin_type")]
+ public int MarginType { get; set; }
+
+ ///
+ /// 获取或设置是否开启水印文本。
+ ///
+ [Newtonsoft.Json.JsonProperty("show_text")]
+ [System.Text.Json.Serialization.JsonPropertyName("show_text")]
+ public bool EnableShowText { get; set; }
+
+ ///
+ /// 获取或设置是否开启水印访问人名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("show_visitor_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("show_visitor_name")]
+ public bool EnableShowVisitorName { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置是否开启只读备份。
+ ///
+ [Newtonsoft.Json.JsonProperty("enable_readonly_copy")]
+ [System.Text.Json.Serialization.JsonPropertyName("enable_readonly_copy")]
+ public bool EnableReadonlyCopy { get; set; }
+
+ ///
+ /// 获取或设置是否开启只读评论。
+ ///
+ [Newtonsoft.Json.JsonProperty("enable_readonly_comment")]
+ [System.Text.Json.Serialization.JsonPropertyName("enable_readonly_comment")]
+ public bool EnableReadonlyComment { get; set; }
+
+ ///
+ /// 获取或设置水印信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("watermark")]
+ [System.Text.Json.Serialization.JsonPropertyName("watermark")]
+ public Types.Watermark? Watermark { get; set; }
+ }
+
+ public class Authority
+ {
+ ///
+ /// 获取或设置类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("type")]
+ [System.Text.Json.Serialization.JsonPropertyName("type")]
+ public int Type { get; set; }
+
+ ///
+ /// 获取或设置成员账号。
+ ///
+ [Newtonsoft.Json.JsonProperty("userid")]
+ [System.Text.Json.Serialization.JsonPropertyName("userid")]
+ public string? UserId { get; set; }
+
+ ///
+ /// 获取或设置外部联系人临时 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("tmp_external_userid")]
+ [System.Text.Json.Serialization.JsonPropertyName("tmp_external_userid")]
+ public string? TempExternalUserId { get; set; }
+
+ ///
+ /// 获取或设置部门 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("departmentid")]
+ [System.Text.Json.Serialization.JsonPropertyName("departmentid")]
+ public long? DepartmentId { get; set; }
+
+ ///
+ /// 获取或设置权限类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("auth")]
+ [System.Text.Json.Serialization.JsonPropertyName("auth")]
+ public int AuthType { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置文档访问规则。
+ ///
+ [Newtonsoft.Json.JsonProperty("access_rule")]
+ [System.Text.Json.Serialization.JsonPropertyName("access_rule")]
+ public Types.AccessRule AccessRule { get; set; } = default!;
+
+ ///
+ /// 获取或设置安全配置信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("secure_setting")]
+ [System.Text.Json.Serialization.JsonPropertyName("secure_setting")]
+ public Types.SecureSettings SecureSettings { get; set; } = default!;
+
+ ///
+ /// 获取或设置文档成员授权信息列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("doc_member_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("doc_member_list")]
+ public Types.Authority[]? DocumentMemberAuthorityList { get; set; }
+
+ ///
+ /// 获取或设置文档查看者授权信息列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("co_auth_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("co_auth_list")]
+ public Types.Authority[]? DocumentCollaboratorAuthorityList { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocDocumentShareRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocDocumentShareRequest.cs
new file mode 100644
index 00000000..c33fda6c
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocDocumentShareRequest.cs
@@ -0,0 +1,22 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/wedoc/doc_share 接口的请求。
+ ///
+ public class CgibinWedocDocumentShareRequest : WechatWorkRequest
+ {
+ ///
+ /// 获取或设置文档 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("docid")]
+ [System.Text.Json.Serialization.JsonPropertyName("docid")]
+ public string? DocumentId { get; set; }
+
+ ///
+ /// 获取或设置收集表 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("formid")]
+ [System.Text.Json.Serialization.JsonPropertyName("formid")]
+ public string? FormId { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocDocumentShareResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocDocumentShareResponse.cs
new file mode 100644
index 00000000..d4f22da9
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocDocumentShareResponse.cs
@@ -0,0 +1,15 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/wedoc/doc_share 接口的响应。
+ ///
+ public class CgibinWedocDocumentShareResponse : WechatWorkResponse
+ {
+ ///
+ /// 获取或设置分享链接。
+ ///
+ [Newtonsoft.Json.JsonProperty("share_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("share_url")]
+ public string ShareUrl { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocGetDocumentBaseInfoRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocGetDocumentBaseInfoRequest.cs
new file mode 100644
index 00000000..6205e266
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocGetDocumentBaseInfoRequest.cs
@@ -0,0 +1,15 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/wedoc/get_doc_base_info 接口的请求。
+ ///
+ public class CgibinWedocGetDocumentBaseInfoRequest : WechatWorkRequest
+ {
+ ///
+ /// 获取或设置文档 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("docid")]
+ [System.Text.Json.Serialization.JsonPropertyName("docid")]
+ public string DocumentId { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocGetDocumentBaseInfoResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocGetDocumentBaseInfoResponse.cs
new file mode 100644
index 00000000..31d7054e
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocGetDocumentBaseInfoResponse.cs
@@ -0,0 +1,56 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/wedoc/get_doc_base_info 接口的响应。
+ ///
+ public class CgibinWedocGetDocumentBaseInfoResponse : WechatWorkResponse
+ {
+ public static class Types
+ {
+ public class Document
+ {
+ ///
+ /// 获取或设置文档 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("docid")]
+ [System.Text.Json.Serialization.JsonPropertyName("docid")]
+ public string DocumentId { get; set; } = default!;
+
+ ///
+ /// 获取或设置文档类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("doc_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("doc_type")]
+ public int DocumentType { get; set; }
+
+ ///
+ /// 获取或设置文档名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("doc_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("doc_name")]
+ public string DocumentName { get; set; } = default!;
+
+ ///
+ /// 获取或设置文档创建时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("create_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("create_time")]
+ public long CreateTimestamp { get; set; }
+
+ ///
+ /// 获取或设置文档最后修改的时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("modify_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("modify_time")]
+ public long ModifyTimestamp { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置文档信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("doc_base_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("doc_base_info")]
+ public Types.Document Document { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocModifyDocumentJoinRuleRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocModifyDocumentJoinRuleRequest.cs
new file mode 100644
index 00000000..fce9f2bb
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocModifyDocumentJoinRuleRequest.cs
@@ -0,0 +1,121 @@
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/wedoc/mod_doc_join_rule 接口的请求。
+ ///
+ public class CgibinWedocModifyDocumentJoinRuleRequest : WechatWorkRequest
+ {
+ public static class Types
+ {
+ public class Authority
+ {
+ ///
+ /// 获取或设置类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("type")]
+ [System.Text.Json.Serialization.JsonPropertyName("type")]
+ public int Type { get; set; }
+
+ ///
+ /// 获取或设置成员账号。
+ ///
+ [Newtonsoft.Json.JsonProperty("userid")]
+ [System.Text.Json.Serialization.JsonPropertyName("userid")]
+ public string? UserId { get; set; }
+
+ ///
+ /// 获取或设置外部联系人临时 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("tmp_external_userid")]
+ [System.Text.Json.Serialization.JsonPropertyName("tmp_external_userid")]
+ public string? TempExternalUserId { get; set; }
+
+ ///
+ /// 获取或设置部门 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("departmentid")]
+ [System.Text.Json.Serialization.JsonPropertyName("departmentid")]
+ public long? DepartmentId { get; set; }
+
+ ///
+ /// 获取或设置权限类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("auth")]
+ [System.Text.Json.Serialization.JsonPropertyName("auth")]
+ public int AuthType { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置文档 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("docid")]
+ [System.Text.Json.Serialization.JsonPropertyName("docid")]
+ public string DocumentId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置是否为企业内可访问。
+ ///
+ [Newtonsoft.Json.JsonProperty("enable_corp_internal")]
+ [System.Text.Json.Serialization.JsonPropertyName("enable_corp_internal")]
+ public bool? EnableCorpInternal { get; set; }
+
+ ///
+ /// 获取或设置企业内权限类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("corp_internal_auth")]
+ [System.Text.Json.Serialization.JsonPropertyName("corp_internal_auth")]
+ public int? CorpInternalAuthType { get; set; }
+
+ ///
+ /// 获取或设置是否开启企业内管理员审批。
+ ///
+ [Newtonsoft.Json.JsonProperty("corp_internal_approve_only_by_admin")]
+ [System.Text.Json.Serialization.JsonPropertyName("corp_internal_approve_only_by_admin")]
+ public bool? IsCorpInternalApproveOnlyByAdmin { get; set; }
+
+ ///
+ /// 获取或设置是否为企业外可访问。
+ ///
+ [Newtonsoft.Json.JsonProperty("enable_corp_external")]
+ [System.Text.Json.Serialization.JsonPropertyName("enable_corp_external")]
+ public bool? EnableCorpExternal { get; set; }
+
+ ///
+ /// 获取或设置企业外权限类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("corp_external_auth")]
+ [System.Text.Json.Serialization.JsonPropertyName("corp_external_auth")]
+ public int? CorpExternalAuthType { get; set; }
+
+ ///
+ /// 获取或设置是否开启企业外管理员审批。
+ ///
+ [Newtonsoft.Json.JsonProperty("corp_external_approve_only_by_admin")]
+ [System.Text.Json.Serialization.JsonPropertyName("corp_external_approve_only_by_admin")]
+ public bool? IsCorpExternalApproveOnlyByAdmin { get; set; }
+
+ ///
+ /// 获取或设置是否禁止分享到企业外部。
+ ///
+ [Newtonsoft.Json.JsonProperty("ban_share_external")]
+ [System.Text.Json.Serialization.JsonPropertyName("ban_share_external")]
+ public bool? IsBanShareExternal { get; set; }
+
+ ///
+ /// 获取或设置是否更新文档查看者授权信息列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("update_co_auth_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("update_co_auth_list")]
+ public bool? RequireUpdateCollaboratorAuthorityList { get; set; }
+
+ ///
+ /// 获取或设置新的文档查看者授权信息列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("co_auth_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("co_auth_list")]
+ public IList? DocumentCollaboratorAuthorityList { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocModifyDocumentJoinRuleResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocModifyDocumentJoinRuleResponse.cs
new file mode 100644
index 00000000..d25190d2
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocModifyDocumentJoinRuleResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/wedoc/mod_doc_join_rule 接口的响应。
+ ///
+ public class CgibinWedocModifyDocumentJoinRuleResponse : WechatWorkResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocModifyDocumentMemberRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocModifyDocumentMemberRequest.cs
new file mode 100644
index 00000000..0b28fdd4
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocModifyDocumentMemberRequest.cs
@@ -0,0 +1,38 @@
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/wedoc/mod_doc_member 接口的请求。
+ ///
+ public class CgibinWedocModifyDocumentMemberRequest : WechatWorkRequest
+ {
+ public static class Types
+ {
+ public class Authority : CgibinWedocModifyDocumentJoinRuleRequest.Types.Authority
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置文档 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("docid")]
+ [System.Text.Json.Serialization.JsonPropertyName("docid")]
+ public string DocumentId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置新增的文档成员授权信息列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("update_file_member_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("update_file_member_list")]
+ public IList? AddedMemberAuthorityList { get; set; }
+
+ ///
+ /// 获取或设置删除的文档成员授权信息列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("del_file_member_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("del_file_member_list")]
+ public IList? DeletedMemberAuthorityList { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocModifyDocumentMemberResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocModifyDocumentMemberResponse.cs
new file mode 100644
index 00000000..c09447ab
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocModifyDocumentMemberResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/wedoc/mod_doc_member 接口的响应。
+ ///
+ public class CgibinWedocModifyDocumentMemberResponse : WechatWorkResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocModifyDocumentSafeSettingRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocModifyDocumentSafeSettingRequest.cs
new file mode 100644
index 00000000..ed1a442f
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocModifyDocumentSafeSettingRequest.cs
@@ -0,0 +1,70 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/wedoc/mod_doc_safty_setting 接口的请求。
+ ///
+ public class CgibinWedocModifyDocumentSafeSettingRequest : WechatWorkRequest
+ {
+ public static class Types
+ {
+ public class Watermark
+ {
+ ///
+ /// 获取或设置水印文字。
+ ///
+ [Newtonsoft.Json.JsonProperty("text")]
+ [System.Text.Json.Serialization.JsonPropertyName("text")]
+ public string? Text { get; set; }
+
+ ///
+ /// 获取或设置水印类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("margin_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("margin_type")]
+ public int? MarginType { get; set; }
+
+ ///
+ /// 获取或设置是否开启水印文本。
+ ///
+ [Newtonsoft.Json.JsonProperty("show_text")]
+ [System.Text.Json.Serialization.JsonPropertyName("show_text")]
+ public bool? EnableShowText { get; set; }
+
+ ///
+ /// 获取或设置是否开启水印访问人名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("show_visitor_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("show_visitor_name")]
+ public bool? EnableShowVisitorName { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置文档 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("docid")]
+ [System.Text.Json.Serialization.JsonPropertyName("docid")]
+ public string DocumentId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置是否开启只读备份。
+ ///
+ [Newtonsoft.Json.JsonProperty("enable_readonly_copy")]
+ [System.Text.Json.Serialization.JsonPropertyName("enable_readonly_copy")]
+ public bool? EnableReadonlyCopy { get; set; }
+
+ ///
+ /// 获取或设置是否开启只读评论。
+ ///
+ [Newtonsoft.Json.JsonProperty("enable_readonly_comment")]
+ [System.Text.Json.Serialization.JsonPropertyName("enable_readonly_comment")]
+ public bool? EnableReadonlyComment { get; set; }
+
+ ///
+ /// 获取或设置水印信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("watermark")]
+ [System.Text.Json.Serialization.JsonPropertyName("watermark")]
+ public Types.Watermark? Watermark { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocModifyDocumentSafeSettingResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocModifyDocumentSafeSettingResponse.cs
new file mode 100644
index 00000000..69bc7fb8
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocModifyDocumentSafeSettingResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/wedoc/mod_doc_safty_setting 接口的响应。
+ ///
+ public class CgibinWedocModifyDocumentSafeSettingResponse : WechatWorkResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocRenameDocumentRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocRenameDocumentRequest.cs
new file mode 100644
index 00000000..5f79e00c
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocRenameDocumentRequest.cs
@@ -0,0 +1,29 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/wedoc/rename_doc 接口的请求。
+ ///
+ public class CgibinWedocRenameDocumentRequest : WechatWorkRequest
+ {
+ ///
+ /// 获取或设置文档 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("docid")]
+ [System.Text.Json.Serialization.JsonPropertyName("docid")]
+ public string? DocumentId { get; set; }
+
+ ///
+ /// 获取或设置收集表 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("formid")]
+ [System.Text.Json.Serialization.JsonPropertyName("formid")]
+ public string? FormId { get; set; }
+
+ ///
+ /// 获取或设置新名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("new_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("new_name")]
+ public string NewName { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocRenameDocumentResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocRenameDocumentResponse.cs
new file mode 100644
index 00000000..a798137e
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedoc/Document/CgibinWedocRenameDocumentResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/wedoc/rename_doc 接口的响应。
+ ///
+ public class CgibinWedocRenameDocumentResponse : WechatWorkResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedrive/File/CgibinWedriveGetFilePermissionResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedrive/File/CgibinWedriveGetFilePermissionResponse.cs
index 8c7cedc7..0d562381 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedrive/File/CgibinWedriveGetFilePermissionResponse.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinWedrive/File/CgibinWedriveGetFilePermissionResponse.cs
@@ -179,7 +179,7 @@
public Types.Authority[]? FileMemberAuthorityList { get; set; }
///
- /// 获取或设置文件协作者授权信息列表。
+ /// 获取或设置文件查看者授权信息列表。
///
[Newtonsoft.Json.JsonProperty("co_auth_list")]
[System.Text.Json.Serialization.JsonPropertyName("co_auth_list")]
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Wedoc/DocumentChangeEvent.xml b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Wedoc/DocumentChangeEvent.xml
new file mode 100644
index 00000000..4abbd1ed
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Wedoc/DocumentChangeEvent.xml
@@ -0,0 +1,10 @@
+
+
+
+ 1348831860
+
+
+
+
+
+
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Collect/CgibinWedocCreateCollectRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Collect/CgibinWedocCreateCollectRequest.json
new file mode 100644
index 00000000..66508f9f
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Collect/CgibinWedocCreateCollectRequest.json
@@ -0,0 +1,53 @@
+{
+ "spaceid": "SPACEID",
+ "fatherid": "FATHERID",
+ "form_info": {
+ "form_title": "FORM_TITLE",
+ "form_desc": "FORM_DESC",
+ "form_header": "FORM_HEADER",
+ "form_question": {
+ "items": [
+ {
+ "question_id": 1,
+ "title": "TITLE",
+ "pos": 0,
+ "status": 1,
+ "reply_type": 1,
+ "must_reply": true,
+ "note": "NOTE",
+ "option_item": [
+ {
+ "key": 1,
+ "value": "VALUE",
+ "status": 1
+ }
+ ],
+ "placeholder": "PLACEHOLDER"
+ }
+ ]
+ },
+ "form_setting": {
+ "fill_out_auth": 0,
+ "fill_in_range": {
+ "userids": ["USER_1", "USER_2", "USER_3"],
+ "departmentids": [10001, 10002, 10003]
+ },
+ "setting_manager_range": {
+ "userids": ["USER_4", "USER_5", "USER_6"]
+ },
+ "timed_repeat_info": {
+ "enable": true,
+ "week_flag": 1,
+ "remind_time": 1,
+ "repeat_type": 1,
+ "skip_holiday": true,
+ "day_of_month": 1,
+ "fork_finish_type": 1
+ },
+ "max_fill_cnt": 0,
+ "timed_finish": 0,
+ "can_anonymous": false,
+ "can_notify_submit": false
+ }
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Collect/CgibinWedocCreateCollectResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Collect/CgibinWedocCreateCollectResponse.json
new file mode 100644
index 00000000..6d179544
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Collect/CgibinWedocCreateCollectResponse.json
@@ -0,0 +1,5 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "formid": "FORMID"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Collect/CgibinWedocGetFormAnswerRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Collect/CgibinWedocGetFormAnswerRequest.json
new file mode 100644
index 00000000..5cf7a212
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Collect/CgibinWedocGetFormAnswerRequest.json
@@ -0,0 +1,4 @@
+{
+ "repeated_id": "REPEATED_ID1",
+ "answer_ids": [1]
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Collect/CgibinWedocGetFormAnswerResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Collect/CgibinWedocGetFormAnswerResponse.json
new file mode 100644
index 00000000..3f3d98d4
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Collect/CgibinWedocGetFormAnswerResponse.json
@@ -0,0 +1,75 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "answer": {
+ "answer_list": [
+ {
+ "answer_id": 15,
+ "user_name": "USER_NAME1",
+ "ctime": 1668430580,
+ "mtime": 1668430580,
+ "reply": {
+ "items": [
+ {
+ "question_id": 1,
+ "text_reply": "Ndjnd"
+ },
+ {
+ "question_id": 2,
+ "option_reply": [2]
+ },
+ {
+ "question_id": 3,
+ "text_reply": "20:53"
+ },
+ {
+ "question_id": 4,
+ "text_reply": "73℃"
+ },
+ {
+ "question_id": 5,
+ "file_extend_reply": [
+ {
+ "name": "FILE_NAME1",
+ "fileid": "FILEID1"
+ }
+ ]
+ },
+ {
+ "question_id": 6,
+ "text_reply": "四川省/成都市/武侯区/天府三街(峰汇中心)"
+ },
+ {
+ "question_id": 7,
+ "text_reply": "test"
+ },
+ {
+ "question_id": 8,
+ "option_reply": [1]
+ },
+ {
+ "question_id": 9,
+ "text_reply": "2022年11月"
+ },
+ {
+ "question_id": 10,
+ "option_reply": [5]
+ },
+ {
+ "question_id": 11,
+ "option_reply": [3],
+ "option_extend_reply": [
+ {
+ "option_reply": 3,
+ "extend_text": "test"
+ }
+ ]
+ }
+ ]
+ },
+ "answer_status": 1,
+ "tmp_external_userid": "TMP_EXTERNAL_USERID1"
+ }
+ ]
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Collect/CgibinWedocGetFormInfoRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Collect/CgibinWedocGetFormInfoRequest.json
new file mode 100644
index 00000000..454274c5
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Collect/CgibinWedocGetFormInfoRequest.json
@@ -0,0 +1,3 @@
+{
+ "formid": "FORMID"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Collect/CgibinWedocGetFormInfoResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Collect/CgibinWedocGetFormInfoResponse.json
new file mode 100644
index 00000000..e0cdc356
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Collect/CgibinWedocGetFormInfoResponse.json
@@ -0,0 +1,74 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "form_info": {
+ "formid": "FORMID1",
+ "form_title": "api创建的收集表_周期",
+ "form_desc": "这是描述",
+ "form_header": "URL",
+ "form_question": {
+ "items": [
+ {
+ "question_id": 1,
+ "title": "问题1",
+ "pos": 1,
+ "status": 1,
+ "reply_type": 1,
+ "must_reply": true,
+ "note": "问题备注1",
+ "placeholder": "提示1"
+ },
+ {
+ "question_id": 2,
+ "title": "问题2",
+ "pos": 2,
+ "status": 1,
+ "reply_type": 2,
+ "must_reply": false,
+ "note": "问题备注2",
+ "option_item": [
+ {
+ "key": 1,
+ "value": "A",
+ "status": 1
+ },
+ {
+ "key": 2,
+ "value": "B",
+ "status": 1
+ },
+ {
+ "key": 3,
+ "value": "C",
+ "status": 1
+ }
+ ],
+ "placeholder": "提示2"
+ }
+ ]
+ },
+ "form_setting": {
+ "fill_out_auth": 1,
+ "fill_in_range": {
+ "departmentids": [1],
+ "userids": ["USERID1", "USERID2"]
+ },
+ "setting_manager_range": {
+ "userids": ["USERID1", "USERID2"]
+ },
+ "timed_repeat_info": {
+ "enable": true,
+ "remind_time": 1668389400,
+ "rule_ctime": 1668418140,
+ "rule_mtime": 1668418140,
+ "repeat_type": 1,
+ "skip_holiday": false
+ },
+ "max_fill_cnt": 0,
+ "timed_finish": 0,
+ "can_anonymous": false,
+ "can_notify_submit": true
+ },
+ "repeated_id": ["REPEAT_ID1"]
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Collect/CgibinWedocGetFormStatisticRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Collect/CgibinWedocGetFormStatisticRequest.json
new file mode 100644
index 00000000..13486f90
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Collect/CgibinWedocGetFormStatisticRequest.json
@@ -0,0 +1,8 @@
+{
+ "repeated_id": "REPEATED_ID2",
+ "req_type": 2,
+ "start_time": 1667395287,
+ "end_time": 1668418369,
+ "limit": 20,
+ "cursor": 1
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Collect/CgibinWedocGetFormStatisticResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Collect/CgibinWedocGetFormStatisticResponse.json
new file mode 100644
index 00000000..703af289
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Collect/CgibinWedocGetFormStatisticResponse.json
@@ -0,0 +1,29 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "fill_cnt": 1,
+ "fill_user_cnt": 1,
+ "unfill_user_cnt": 90,
+ "submit_users": [
+ {
+ "userid": "USERID1",
+ "submit_time": 1668418200,
+ "answer_id": 1,
+ "user_name": "USER_NAME1"
+ },
+ {
+ "tmp_external_userid": "TMP_EXTERNAL_USERID1",
+ "submit_time": 1668418200,
+ "answer_id": 2,
+ "user_name": "USER_NAME2"
+ }
+ ],
+ "unfill_users": [
+ {
+ "userid": "USERID1",
+ "user_name": "USER_NAME1"
+ }
+ ],
+ "has_more": false,
+ "cursor": 1
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Collect/CgibinWedocModifyCollectRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Collect/CgibinWedocModifyCollectRequest.json
new file mode 100644
index 00000000..3a3cafa8
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Collect/CgibinWedocModifyCollectRequest.json
@@ -0,0 +1,44 @@
+{
+ "oper": 1,
+ "formid": "FORMID",
+ "form_info": {
+ "form_title": "FORM_TITLE",
+ "form_desc": "FORM_DESC",
+ "form_header": "FORM_HEADER",
+ "form_question": {
+ "items": [
+ {
+ "question_id": 1,
+ "title": "TITLE",
+ "pos": 0,
+ "status": 1,
+ "reply_type": 1,
+ "must_reply": true,
+ "note": "NOTE",
+ "option_item": [
+ {
+ "key": 1,
+ "value": "VALUE",
+ "status": 1
+ }
+ ],
+ "placeholder": "PLACEHOLDER"
+ }
+ ]
+ },
+ "form_setting": {
+ "fill_out_auth": 0,
+ "fill_in_range": {
+ "userids": ["USER_1", "USER_2", "USER_3"],
+ "departmentids": [10001, 10002, 10003]
+ },
+ "setting_manager_range": {
+ "userids": ["USER_4", "USER_5", "USER_6"]
+ },
+ "max_fill_cnt": 0,
+ "timed_finish": 0,
+ "can_anonymous": false,
+ "can_notify_submit": false
+ }
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Document/CgibinWedocCreateDocumentRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Document/CgibinWedocCreateDocumentRequest.json
new file mode 100644
index 00000000..62f00362
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Document/CgibinWedocCreateDocumentRequest.json
@@ -0,0 +1,7 @@
+{
+ "spaceid": "SPACEID",
+ "fatherid": "FATHERID",
+ "doc_type": 0,
+ "doc_name": "DOC_NAME",
+ "admin_users": ["USERID1", "USERID2", "USERID3"]
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Document/CgibinWedocCreateDocumentResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Document/CgibinWedocCreateDocumentResponse.json
new file mode 100644
index 00000000..fcd482ff
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Document/CgibinWedocCreateDocumentResponse.json
@@ -0,0 +1,6 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "url": "URL",
+ "docid": "DOCID"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Document/CgibinWedocDeleteDocumentRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Document/CgibinWedocDeleteDocumentRequest.json
new file mode 100644
index 00000000..8e64bf2d
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Document/CgibinWedocDeleteDocumentRequest.json
@@ -0,0 +1,4 @@
+{
+ "docid": "DOCID",
+ "formid": "FORMID"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Document/CgibinWedocDocumentGetAuthRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Document/CgibinWedocDocumentGetAuthRequest.json
new file mode 100644
index 00000000..eb0191b5
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Document/CgibinWedocDocumentGetAuthRequest.json
@@ -0,0 +1,3 @@
+{
+ "docid": "DOCID"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Document/CgibinWedocDocumentGetAuthResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Document/CgibinWedocDocumentGetAuthResponse.json
new file mode 100644
index 00000000..eaa0f8f3
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Document/CgibinWedocDocumentGetAuthResponse.json
@@ -0,0 +1,42 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "access_rule": {
+ "enable_corp_internal": true,
+ "corp_internal_auth": 1,
+ "enable_corp_external": true,
+ "corp_external_auth": 1,
+ "corp_internal_approve_only_by_admin": true,
+ "corp_external_approve_only_by_admin": true,
+ "ban_share_external": false
+ },
+ "secure_setting": {
+ "enable_readonly_copy": false,
+ "watermark": {
+ "margin_type": 2,
+ "show_visitor_name": false,
+ "show_text": false,
+ "text": ""
+ },
+ "enable_readonly_comment": false
+ },
+ "doc_member_list": [
+ {
+ "type": 1,
+ "userid": "USERID1",
+ "auth": 7
+ },
+ {
+ "type": 1,
+ "tmp_external_userid": "TMP_EXTERNAL_USERID2",
+ "auth": 1
+ }
+ ],
+ "co_auth_list": [
+ {
+ "type": 2,
+ "departmentid": 1,
+ "auth": 1
+ }
+ ]
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Document/CgibinWedocDocumentShareRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Document/CgibinWedocDocumentShareRequest.json
new file mode 100644
index 00000000..8e64bf2d
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Document/CgibinWedocDocumentShareRequest.json
@@ -0,0 +1,4 @@
+{
+ "docid": "DOCID",
+ "formid": "FORMID"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Document/CgibinWedocDocumentShareResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Document/CgibinWedocDocumentShareResponse.json
new file mode 100644
index 00000000..05bd51ce
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Document/CgibinWedocDocumentShareResponse.json
@@ -0,0 +1,5 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "share_url": "URL1"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Document/CgibinWedocGetDocumentBaseInfoRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Document/CgibinWedocGetDocumentBaseInfoRequest.json
new file mode 100644
index 00000000..eb0191b5
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Document/CgibinWedocGetDocumentBaseInfoRequest.json
@@ -0,0 +1,3 @@
+{
+ "docid": "DOCID"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Document/CgibinWedocGetDocumentBaseInfoResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Document/CgibinWedocGetDocumentBaseInfoResponse.json
new file mode 100644
index 00000000..1d7edb0e
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Document/CgibinWedocGetDocumentBaseInfoResponse.json
@@ -0,0 +1,11 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "doc_base_info": {
+ "docid": "DOCID",
+ "doc_name": "DOC_NAME",
+ "create_time": 0,
+ "modify_time": 0,
+ "doc_type": 0
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Document/CgibinWedocModifyDocumentJoinRuleRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Document/CgibinWedocModifyDocumentJoinRuleRequest.json
new file mode 100644
index 00000000..21cded01
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Document/CgibinWedocModifyDocumentJoinRuleRequest.json
@@ -0,0 +1,18 @@
+{
+ "docid": "DOCID",
+ "enable_corp_internal": true,
+ "corp_internal_auth": 1,
+ "enable_corp_external": true,
+ "corp_external_auth": 1,
+ "corp_internal_approve_only_by_admin": true,
+ "corp_external_approve_only_by_admin": true,
+ "ban_share_external": false,
+ "update_co_auth_list": true,
+ "co_auth_list": [
+ {
+ "departmentid": 1,
+ "auth": 1,
+ "type": 2
+ }
+ ]
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Document/CgibinWedocModifyDocumentMemberRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Document/CgibinWedocModifyDocumentMemberRequest.json
new file mode 100644
index 00000000..99c07886
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Document/CgibinWedocModifyDocumentMemberRequest.json
@@ -0,0 +1,20 @@
+{
+ "docid": "DOCID",
+ "update_file_member_list": [
+ {
+ "type": 1,
+ "auth": 7,
+ "userid": "USERID1"
+ }
+ ],
+ "del_file_member_list": [
+ {
+ "type": 1,
+ "userid": "USERID2"
+ },
+ {
+ "type": 1,
+ "tmp_external_userid": "TMP_EXTERNAL_USERID2"
+ }
+ ]
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Document/CgibinWedocModifyDocumentSafeSettingRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Document/CgibinWedocModifyDocumentSafeSettingRequest.json
new file mode 100644
index 00000000..97b71981
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Document/CgibinWedocModifyDocumentSafeSettingRequest.json
@@ -0,0 +1,10 @@
+{
+ "docid": "DOCID",
+ "enable_readonly_copy": false,
+ "watermark": {
+ "margin_type": 1,
+ "show_visitor_name": true,
+ "show_text": true,
+ "text": "test mark"
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Document/CgibinWedocRenameDocumentRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Document/CgibinWedocRenameDocumentRequest.json
new file mode 100644
index 00000000..09459b3a
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinWedoc/Document/CgibinWedocRenameDocumentRequest.json
@@ -0,0 +1,5 @@
+{
+ "docid": "DOCID",
+ "formid": "FORMID",
+ "new_name": "NEW_NAME"
+}