diff --git a/nodes/WeCom/resources/wedoc/createForm.ts b/nodes/WeCom/resources/wedoc/createForm.ts index ee690b2..b186574 100644 --- a/nodes/WeCom/resources/wedoc/createForm.ts +++ b/nodes/WeCom/resources/wedoc/createForm.ts @@ -162,10 +162,13 @@ export const createFormDescription: INodeProperties[] = [ { displayName: '收集表管理员', name: 'setting_manager_range', - type: 'string', - default: '', - description: '收集表管理员的企业成员userid列表,多个用英文逗号分隔', - placeholder: '例如: userid1,userid2,userid3', + type: 'multiOptions', + typeOptions: { + loadOptionsMethod: 'getAllUsers', + }, + default: [], + description: '指定收集表管理员。选择多个企业成员作为收集表管理员', + hint: '支持多选', }, ], }, diff --git a/nodes/WeCom/resources/wedoc/execute.ts b/nodes/WeCom/resources/wedoc/execute.ts index 63bb6eb..dfe835f 100644 --- a/nodes/WeCom/resources/wedoc/execute.ts +++ b/nodes/WeCom/resources/wedoc/execute.ts @@ -1155,16 +1155,11 @@ export async function executeWedoc( } } - // 处理 setting_manager_range:将逗号分隔的userid字符串转换为对象数组 + // 处理 setting_manager_range:从多选下拉框获取userid数组 if (formSetting.setting_manager_range) { - const managerRange = formSetting.setting_manager_range as string; - if (managerRange && managerRange.trim()) { - const userids = managerRange.split(',').map((id) => id.trim()).filter((id) => id); - if (userids.length > 0) { - formSetting.setting_manager_range = { userids }; - } else { - delete formSetting.setting_manager_range; - } + const managerRange = formSetting.setting_manager_range as string[]; + if (Array.isArray(managerRange) && managerRange.length > 0) { + formSetting.setting_manager_range = { userids: managerRange }; } else { delete formSetting.setting_manager_range; } diff --git a/nodes/WeComOffice/WeComOffice.node.ts b/nodes/WeComOffice/WeComOffice.node.ts index 904a759..963aa97 100644 --- a/nodes/WeComOffice/WeComOffice.node.ts +++ b/nodes/WeComOffice/WeComOffice.node.ts @@ -1,10 +1,13 @@ import type { IExecuteFunctions, + ILoadOptionsFunctions, INodeExecutionData, + INodePropertyOptions, INodeType, INodeTypeDescription, } from 'n8n-workflow'; import { NodeConnectionTypes } from 'n8n-workflow'; +import { weComApiRequest } from '../WeCom/shared/transport'; import { wedocDescription } from '../WeCom/resources/wedoc'; import { wefileDescription } from '../WeCom/resources/wefile'; import { mailDescription } from '../WeCom/resources/mail'; @@ -145,6 +148,42 @@ export class WeComOffice implements INodeType { usableAsTool: true, }; + methods = { + loadOptions: { + // 获取所有成员列表 + async getAllUsers(this: ILoadOptionsFunctions): Promise { + try { + const response = await weComApiRequest.call(this, 'GET', '/cgi-bin/user/list', {}, { + department_id: 1, + fetch_child: 1, + }); + const users = response.userlist as Array<{ userid: string; name: string }>; + + if (!users || !Array.isArray(users) || users.length === 0) { + return [ + { + name: '暂无成员,请先添加', + value: '', + }, + ]; + } + + return users.map((user) => ({ + name: `${user.name} (${user.userid})`, + value: user.userid, + })); + } catch { + return [ + { + name: '获取成员列表失败', + value: '', + }, + ]; + } + }, + }, + }; + async execute(this: IExecuteFunctions): Promise { const items = this.getInputData(); const resource = this.getNodeParameter('resource', 0);