weaver-work-cli 0.1.40 → 0.1.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/{archive-JHTONRST.js → archive-J4I6MCKF.js} +2 -2
- package/dist/chunks/{archive-oa-FCHLCPHC.js → archive-oa-BRZKKTO4.js} +2 -2
- package/dist/chunks/{asset-RLIHC7DB.js → asset-L7D4FAOZ.js} +2 -2
- package/dist/chunks/{asset-idle-KVOFTLCP.js → asset-idle-DADLLV75.js} +2 -2
- package/dist/chunks/{attachment-content-RZYDB3MB.js → attachment-content-K4C7VLWQ.js} +3 -3
- package/dist/chunks/{blog-42OZTJNP.js → blog-BVGQ7NZL.js} +2 -2
- package/dist/chunks/{caizhilian-KRK547K5.js → caizhilian-SAADNFD6.js} +2 -2
- package/dist/chunks/{calendar-RTWAMKHD.js → calendar-Q7NQY5Z2.js} +61 -23
- package/dist/chunks/{chunk-LFMSDBZN.js → chunk-3KTFS4IA.js} +308 -153
- package/dist/chunks/{chunk-G2JSIUWF.js → chunk-4PD5NWAX.js} +89 -0
- package/dist/chunks/{chunk-T6EGVBKU.js → chunk-4RAE6JXP.js} +1 -1
- package/dist/chunks/{chunk-7BRU4EFH.js → chunk-72CKAUAG.js} +29 -2
- package/dist/chunks/{chunk-NETCCARD.js → chunk-APVFJUQH.js} +2 -2
- package/dist/chunks/{chunk-CAQNBBQA.js → chunk-BBKDXQEC.js} +2 -2
- package/dist/chunks/{chunk-57IECMWX.js → chunk-BIPYLLVS.js} +26 -12
- package/dist/chunks/{chunk-LN447PY2.js → chunk-EKWAQSLU.js} +3 -2
- package/dist/chunks/{chunk-4TEDNCON.js → chunk-FOAA27U5.js} +338 -52
- package/dist/chunks/{chunk-7U577Q7U.js → chunk-G4UR6NXN.js} +2 -2
- package/dist/chunks/{chunk-NJKREDA3.js → chunk-GEWYMQME.js} +1 -1
- package/dist/chunks/{chunk-I566ZYNF.js → chunk-GHXCDPTM.js} +1 -1
- package/dist/chunks/{chunk-4CTESSKI.js → chunk-IZ7S7QUS.js} +4 -4
- package/dist/chunks/{chunk-VNBU55SL.js → chunk-JPRO6ER2.js} +57 -2432
- package/dist/chunks/{chunk-IZSSVYAG.js → chunk-LADPYOWC.js} +2 -2
- package/dist/chunks/chunk-LDZQPUIA.js +1238 -0
- package/dist/chunks/chunk-NKZRQXST.js +2546 -0
- package/dist/chunks/{chunk-JWRZM2H2.js → chunk-QKNKR4RH.js} +3 -3
- package/dist/chunks/{chunk-FLS4DPGP.js → chunk-R4CHUSKC.js} +28 -15
- package/dist/chunks/{chunk-WFFNM65B.js → chunk-SA6VBIHY.js} +73 -19
- package/dist/chunks/{chunk-SPRHHSVC.js → chunk-TTPJJJC4.js} +2 -2
- package/dist/chunks/{chunk-7E6MUOEK.js → chunk-W7BEHOSR.js} +2 -2
- package/dist/chunks/{chunk-CXRQWOZ5.js → chunk-YRSZQUD2.js} +2 -2
- package/dist/chunks/{conflict-VR55AOOO.js → conflict-F2OMZRTO.js} +2 -2
- package/dist/chunks/{contract-HI4FNPYE.js → contract-5BETHRSG.js} +2 -2
- package/dist/chunks/{cowork-HJLI353D.js → cowork-3MN6EQQO.js} +22 -12
- package/dist/chunks/create-flow-5FQNNMVO.js +55 -0
- package/dist/chunks/{ebuilder-form-HTGI63UU.js → ebuilder-form-SBHOYBUD.js} +3 -3
- package/dist/chunks/{ehr-GYXIYH3A.js → ehr-KMOJULKG.js} +432 -1234
- package/dist/chunks/{env-DW3G4HUO.js → env-LB7NBL2O.js} +2 -2
- package/dist/chunks/{esb-I5INCEFE.js → esb-W2PJCFCX.js} +4 -4
- package/dist/chunks/{factory-TKXGXS6L.js → factory-6ZFQXQ46.js} +1 -1
- package/dist/chunks/{fna-K2MHTQ24.js → fna-ZQPCUV4R.js} +2 -2
- package/dist/chunks/{group-chat-VYBNMJLG.js → group-chat-2HHAJN46.js} +5 -3
- package/dist/chunks/{host-ZUQTJYYK.js → host-4CBHGOHT.js} +3 -3
- package/dist/chunks/{host-D5SERMAJ.js → host-ATKVNZAT.js} +3 -3
- package/dist/chunks/{host-JM4YVHFM.js → host-BQH22NTQ.js} +3 -3
- package/dist/chunks/{host-L3VLITMT.js → host-X2CSLFM6.js} +3 -3
- package/dist/chunks/{host-256GVCAH.js → host-YTODKMSL.js} +3 -3
- package/dist/chunks/{hrm-VLRBKTZB.js → hrm-FFM4UJFS.js} +4 -4
- package/dist/chunks/{im-QK3VTLXK.js → im-VEHKDQPB.js} +7 -7
- package/dist/chunks/{invoice-T5JTA32H.js → invoice-LVIKSIIF.js} +3 -3
- package/dist/chunks/{jiuchuanhui-P2FNEQVZ.js → jiuchuanhui-X6DINO5P.js} +2 -2
- package/dist/chunks/{lazy-dispatch-XRRI46M6.js → lazy-dispatch-KSWTN5L6.js} +4 -4
- package/dist/chunks/{mail-3Y7MJ6PS.js → mail-VDKRGUD3.js} +2 -2
- package/dist/chunks/{meeting-M7LTXGJE.js → meeting-CLC6HP3Z.js} +12 -11
- package/dist/chunks/{okr-OBC6S67L.js → okr-CHG4OO3U.js} +2 -2
- package/dist/chunks/{plan-5H6I53SK.js → plan-XWR75667.js} +2 -2
- package/dist/chunks/{project-L75QZV4S.js → project-5BXOOKMG.js} +40 -23
- package/dist/chunks/recruit-stage-DGMFNNDE.js +4507 -0
- package/dist/chunks/{registry-RXPN6BBT.js → registry-7FFOXIAW.js} +4 -4
- package/dist/chunks/{registry-KMHCPAAD.js → registry-BKBZPBAJ.js} +10 -9
- package/dist/chunks/{registry-QGHFNUWS.js → registry-OZSMDVPP.js} +2 -2
- package/dist/chunks/{registry-UGRBCBHO.js → registry-RHMW6ANW.js} +2 -2
- package/dist/chunks/{registry-NYPYMZXG.js → registry-Z43434VG.js} +1 -1
- package/dist/chunks/{room-recommend-A3UDC3CA.js → room-recommend-62H7ZQQ6.js} +4 -4
- package/dist/chunks/{schedule-5GCACCK7.js → schedule-FNXKH3DQ.js} +4 -4
- package/dist/chunks/{workflow-M5ZJ7DWF.js → workflow-ADHKCAJK.js} +6 -6
- package/dist/index.js +33 -28
- package/dist/internal/e10/auth/commands.js +1 -0
- package/dist/internal/e10/auth/messages.js +6 -0
- package/dist/internal/e10/auth/session.js +17 -0
- package/dist/internal/e10/auth/xiaoe.js +286 -44
- package/dist/internal/e10/auth-recovery.js +36 -5
- package/dist/internal/e10/context.js +56 -12
- package/dist/internal/e10/index.js +1 -1
- package/dist/internal/e10/network-error.js +93 -0
- package/dist/internal/e10/request-runtime.js +6 -0
- package/dist/shortcuts/calendar/operations/read.js +31 -22
- package/dist/shortcuts/calendar/operations/write.js +45 -1
- package/dist/shortcuts/cowork/operations/discuss-write.js +5 -1
- package/dist/shortcuts/cowork/operations/item-write.js +1 -7
- package/dist/shortcuts/cowork/operations/member-write.js +3 -1
- package/dist/shortcuts/cowork/operations/permission-write.js +5 -1
- package/dist/shortcuts/cowork/operations/shared.js +7 -0
- package/dist/shortcuts/ehr/operations/attend-write.js +43 -1
- package/dist/shortcuts/ehr/operations/hr-contact.js +7 -4
- package/dist/shortcuts/ehr/operations/hr-report.js +13 -7
- package/dist/shortcuts/ehr/operations/recruit-candidate-import.js +134 -59
- package/dist/shortcuts/ehr/operations/recruit-write.js +262 -17
- package/dist/shortcuts/ehr/operations/recruit.js +10 -4
- package/dist/shortcuts/ehr/operations/shared.js +47 -0
- package/dist/shortcuts/hrm/operations/org.js +118 -0
- package/dist/shortcuts/index.js +5 -0
- package/dist/shortcuts/meeting/operations/eb/catalog.js +4 -1
- package/dist/shortcuts/meeting/operations/eb/create-flow.js +85 -28
- package/dist/shortcuts/meeting/operations/eb/factory.js +33 -0
- package/dist/shortcuts/meeting/operations/eb/group-chat.js +25 -3
- package/dist/shortcuts/meeting/operations/eb/person-cache.js +96 -0
- package/dist/shortcuts/meeting/operations/eb/room-recommend.js +33 -11
- package/dist/shortcuts/project/operations/read.js +6 -25
- package/dist/shortcuts/project/operations/shared.js +22 -0
- package/dist/shortcuts/project/operations/write.js +28 -2
- package/dist/shortcuts/recruit-stage/context.js +119 -0
- package/dist/shortcuts/recruit-stage/continuation.js +73 -0
- package/dist/shortcuts/recruit-stage/errors.js +65 -0
- package/dist/shortcuts/recruit-stage/host.js +109 -0
- package/dist/shortcuts/recruit-stage/index.js +115 -0
- package/dist/shortcuts/recruit-stage/manifest.js +29 -0
- package/dist/shortcuts/recruit-stage/operations/interview-arrange.js +722 -0
- package/dist/shortcuts/recruit-stage/operations/interview-feedback.js +269 -0
- package/dist/shortcuts/recruit-stage/operations/jd-create.js +630 -0
- package/dist/shortcuts/recruit-stage/operations/list.js +431 -0
- package/dist/shortcuts/recruit-stage/operations/registry.js +38 -0
- package/dist/shortcuts/recruit-stage/operations/resume-import.js +1198 -0
- package/dist/shortcuts/recruit-stage/operations/search.js +158 -0
- package/dist/shortcuts/recruit-stage/operations/types.js +25 -0
- package/dist/shortcuts/recruit-stage/school-tiers.json +318 -0
- package/dist/shortcuts/recruit-stage/shared.js +608 -0
- package/dist/shortcuts/workflow/operations/todoSmartConvert/detailFieldRules.js +4 -2
- package/dist/shortcuts/workflow/operations/todoSmartConvert/summaryCache.js +13 -6
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoDetailCache.js +17 -24
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoDetailFetcher.js +14 -9
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.collect.js +50 -8
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.core.js +2 -1
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.detail.js +17 -11
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.group.js +7 -39
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.groupSummary.js +3 -2
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.js +51 -15
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.pipeline.js +16 -1
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.smartGroup.js +151 -63
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.subGroup.js +56 -0
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.summary.js +39 -14
- package/docs/e10-auth.md +7 -1
- package/docs/operation-manual.md +8 -0
- package/package.json +1 -1
- package/scripts/install-skill-to-xiaoe.mjs +105 -0
- package/scripts/package-skill.mjs +4 -2
- package/skill-template/business-info.json +24 -0
- package/skill-template/domains/recruit-stage.md +29 -0
- package/skills/weaver-e10-calendar/SKILL.md +2 -1
- package/skills/weaver-e10-calendar/references/calendar-write.md +54 -0
- package/skills/weaver-e10-cowork/SKILL.md +1 -1
- package/skills/weaver-e10-cowork/references/cowork-write.md +3 -1
- package/skills/weaver-e10-jucailin/SKILL.md +1 -1
- package/skills/weaver-e10-jucailin/references/attend-write.md +8 -0
- package/skills/weaver-e10-jucailin/references/hr-contact.md +8 -0
- package/skills/weaver-e10-jucailin/references/hr-report.md +8 -0
- package/skills/weaver-e10-jucailin/references/recruit-create.md +2 -2
- package/skills/weaver-e10-jucailin/references/recruit-read.md +1 -1
- package/skills/weaver-e10-jucailin/references/recruit-write.md +4 -3
- package/skills/weaver-e10-mail/SKILL.md +1 -1
- package/skills/weaver-e10-meeting/SKILL.md +32 -2
- package/skills/weaver-e10-meeting.zip +0 -0
- package/skills/weaver-e10-recruit-stage/SKILL.md +226 -0
- package/skills/weaver-e10-recruit-stage/agents/openai.yaml +119 -0
- package/skills/weaver-e10-recruit-stage/lib/recruit-xiaoe-file.mjs +188 -0
- package/skills/weaver-e10-recruit-stage/references/recruit-arrange-interview.md +322 -0
- package/skills/weaver-e10-recruit-stage/references/recruit-capability-check.md +127 -0
- package/skills/weaver-e10-recruit-stage/references/recruit-check-install.md +65 -0
- package/skills/weaver-e10-recruit-stage/references/recruit-detail-process.md +63 -0
- package/skills/weaver-e10-recruit-stage/references/recruit-edit-interview-feedback.md +142 -0
- package/skills/weaver-e10-recruit-stage/references/recruit-jd-create.md +73 -0
- package/skills/weaver-e10-recruit-stage/references/recruit-jd-template.md +56 -0
- package/skills/weaver-e10-recruit-stage/references/recruit-list-candidate.md +101 -0
- package/skills/weaver-e10-recruit-stage/references/recruit-list-interview.md +148 -0
- package/skills/weaver-e10-recruit-stage/references/recruit-match-candidates.md +77 -0
- package/skills/weaver-e10-recruit-stage/references/recruit-output-links.md +59 -0
- package/skills/weaver-e10-recruit-stage/references/recruit-resolve-creator.md +69 -0
- package/skills/weaver-e10-recruit-stage/references/recruit-resolve-metadata.md +241 -0
- package/skills/weaver-e10-recruit-stage/references/recruit-resume-import.md +438 -0
- package/skills/weaver-e10-recruit-stage/references/recruit-resume-parse.md +128 -0
- package/skills/weaver-e10-recruit-stage/references/recruit-search-candidate.md +146 -0
- package/skills/weaver-e10-recruit-stage/references/recruit-urge-feedback.md +69 -0
- package/skills/weaver-e10-shared/SKILL.md +1 -1
- package/skills/weaver-e10-shared/references/e10-auth-and-session.md +4 -2
- package/skills/weaver-e10-shijingran/SKILL.md +3 -2
- package/skills/weaver-e10-shijingran/references/operations.md +3 -1
- package/skills/weaver-e10-shijingran/references/source-manifest.json +41 -40
- package/skills/weaver-e10-shijingran/references/write-operations.md +2 -0
- package/skills/weaver-e10-workflow/SKILL.md +4 -2
- package/skills/weaver-e10-workflow/aigroup/default.json +11 -9
- package/skills/weaver-e10-workflow/references/todo-smart-convert.md +23 -13
- package/skills/weaver-e10-workflow/tools/todo-summary.cjs +62 -20
- package/skills/weaver-e10-yepiaotong/SKILL.md +9 -10
- package/skills/weaver-e10-yepiaotong/references/invoice-agent-entry.md +6 -3
- package/dist/chunks/{chunk-E7OK5WD5.js → chunk-2LV74IWP.js} +5 -5
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { rsSuccess, schemaOf } from './types.js';
|
|
2
|
+
import { rsFail } from '../errors.js';
|
|
3
|
+
import { randHex32 } from '../shared.js';
|
|
4
|
+
const ID_RE = /^\d+$/;
|
|
5
|
+
// 门户字段内联解析:正常实例 creator 直接返回 [{id,name,...}] / {name} / 字符串 JSON 数组
|
|
6
|
+
function parsePortalName(field) {
|
|
7
|
+
if (!field)
|
|
8
|
+
return null;
|
|
9
|
+
if (Array.isArray(field)) {
|
|
10
|
+
const names = field.map((x) => (x && (x.name || x.username || x.text))).filter(Boolean);
|
|
11
|
+
return names.length ? names.join('、') : null;
|
|
12
|
+
}
|
|
13
|
+
if (typeof field === 'object') {
|
|
14
|
+
const f = field;
|
|
15
|
+
return f.name || f.username || f.text || f.title || null;
|
|
16
|
+
}
|
|
17
|
+
if (typeof field === 'string') {
|
|
18
|
+
const s = field.trim();
|
|
19
|
+
if (s.startsWith('[')) {
|
|
20
|
+
try {
|
|
21
|
+
return parsePortalName(JSON.parse(s));
|
|
22
|
+
}
|
|
23
|
+
catch { /* 回退裸 ID 处理 */ }
|
|
24
|
+
}
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
// 兼容分支:creator 为纯数字 ID 时,走 hrm 人员批量解析接口(一次最多 100 自动分批)
|
|
30
|
+
async function resolvePureIds(host, ids) {
|
|
31
|
+
const uniq = [...new Set(ids.filter((x) => x != null && ID_RE.test(String(x).trim())).map((x) => String(x).trim()))];
|
|
32
|
+
const map = {};
|
|
33
|
+
if (!uniq.length)
|
|
34
|
+
return map;
|
|
35
|
+
for (let i = 0; i < uniq.length; i += 100) {
|
|
36
|
+
const batch = uniq.slice(i, i + 100);
|
|
37
|
+
try {
|
|
38
|
+
const r = await host.request({
|
|
39
|
+
path: '/api/hrm/common/getEmployeeByIds',
|
|
40
|
+
body: { userIdList: batch, externalIdList: [] },
|
|
41
|
+
headers: { devtype: '5' },
|
|
42
|
+
});
|
|
43
|
+
for (const u of (r?.data?.userList || [])) {
|
|
44
|
+
if (u?.id != null)
|
|
45
|
+
map[String(u.id)] = u.name || null;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch { /* 单批失败不影响其余 */ }
|
|
49
|
+
}
|
|
50
|
+
return map;
|
|
51
|
+
}
|
|
52
|
+
async function handler(args, env) {
|
|
53
|
+
const host = env.host;
|
|
54
|
+
const session = await host.getSession();
|
|
55
|
+
const baseUrl = session.baseUrl.replace(/\/+$/, '');
|
|
56
|
+
const cache = await env.recruitContext();
|
|
57
|
+
const talent = cache.lists?.talent;
|
|
58
|
+
const listId = talent?.listId;
|
|
59
|
+
const objId = cache.forms?.talent_pool?.objId;
|
|
60
|
+
if (!listId || !objId) {
|
|
61
|
+
throw rsFail('当前环境未解析到「人才库」菜单或人才库表单,无法搜索人才。请确认 CLI 已登录目标环境且该环境已部署招聘应用(可运行 ehr.recruit.context.resolve 对照检查)。');
|
|
62
|
+
}
|
|
63
|
+
const cusMenuId = talent.cusMenuId;
|
|
64
|
+
const menuName = talent.menuName || '人才管理';
|
|
65
|
+
const fields = cache.fields[objId] || {};
|
|
66
|
+
const nameField = 'field_' + (fields.candidate_name || fields.name);
|
|
67
|
+
const mobileField = 'field_' + fields.telephone;
|
|
68
|
+
const name = args.name ? String(args.name) : '';
|
|
69
|
+
const mobile = args.mobile ? String(args.mobile) : '';
|
|
70
|
+
const conds = {};
|
|
71
|
+
if (name)
|
|
72
|
+
conds[nameField] = [{ [nameField]: name, [nameField + '_condition_type']: 'like' }];
|
|
73
|
+
if (mobile)
|
|
74
|
+
conds[mobileField] = [{ [mobileField]: mobile, [mobileField + '_condition_type']: 'like' }];
|
|
75
|
+
const baseBody = {
|
|
76
|
+
current: Number(args.current || 1),
|
|
77
|
+
pageSize: Number(args.pageSize || 10),
|
|
78
|
+
tableuid: randHex32(),
|
|
79
|
+
listId,
|
|
80
|
+
searchParamData: { searchType: '3', commonSearchFields: conds, type: 'and' },
|
|
81
|
+
terminal: 'PC', browser: 'Chrome',
|
|
82
|
+
requiredMatch: 1, mapResult: 1, recheckQuery: 1,
|
|
83
|
+
isFollow: 0, isShareToMe: 0, filterCondition: {},
|
|
84
|
+
cusMenuId, urlPageTitle: '人才库', menuName,
|
|
85
|
+
};
|
|
86
|
+
const extra = { ebBusinessId: listId };
|
|
87
|
+
const cntBody = { ...baseBody };
|
|
88
|
+
delete cntBody.current;
|
|
89
|
+
delete cntBody.pageSize;
|
|
90
|
+
// 列表 + 计数并行(计数失败用行数兜底)
|
|
91
|
+
const [resp, c] = await Promise.all([
|
|
92
|
+
host.request({
|
|
93
|
+
path: '/api/ebuilder/form/list/getListDatas?passid=' + objId + '&cid=' + objId,
|
|
94
|
+
body: baseBody, headers: extra,
|
|
95
|
+
}),
|
|
96
|
+
host.request({
|
|
97
|
+
path: '/api/ebuilder/form/list/getListDataCount?passid=' + objId + '&cid=' + objId,
|
|
98
|
+
body: cntBody, headers: extra,
|
|
99
|
+
}).catch(() => null),
|
|
100
|
+
]);
|
|
101
|
+
const rawRows = resp?.data?.data || [];
|
|
102
|
+
const dispRows = resp?.data?.displayData;
|
|
103
|
+
const rows = Array.isArray(dispRows) && dispRows.length ? dispRows : rawRows;
|
|
104
|
+
let total = rows.length;
|
|
105
|
+
if (c?.data?.total !== undefined)
|
|
106
|
+
total = c.data.total;
|
|
107
|
+
const statusMap = (cache.options?.recruit_status || {});
|
|
108
|
+
const dictNameMap = {};
|
|
109
|
+
for (const item of cache.dict?.raw || []) {
|
|
110
|
+
if (item.option_id && item.selection_name)
|
|
111
|
+
dictNameMap[item.option_id] = item.selection_name;
|
|
112
|
+
}
|
|
113
|
+
const out = { env: new URL(baseUrl).hostname, total, rows: [] };
|
|
114
|
+
const outRows = out.rows;
|
|
115
|
+
const inlineNames = rows.map((r) => parsePortalName(r.creator));
|
|
116
|
+
const pureIds = [];
|
|
117
|
+
rows.forEach((r, i) => {
|
|
118
|
+
if (inlineNames[i] == null && r.creator != null && ID_RE.test(String(r.creator).trim())) {
|
|
119
|
+
pureIds.push(String(r.creator).trim());
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
const idNameMap = await resolvePureIds(host, pureIds);
|
|
123
|
+
rows.forEach((r, i) => {
|
|
124
|
+
let creator = inlineNames[i];
|
|
125
|
+
if (creator == null) {
|
|
126
|
+
const raw = r.creator != null ? String(r.creator).trim() : null;
|
|
127
|
+
creator = (raw != null && ID_RE.test(raw) ? (idNameMap[raw] || raw) : raw) || null;
|
|
128
|
+
}
|
|
129
|
+
outRows.push({
|
|
130
|
+
talentId: r.form_data_id || r.id || null,
|
|
131
|
+
name: r.candidate_name || r.name || null,
|
|
132
|
+
mobile: r.telephone || null,
|
|
133
|
+
channel: dictNameMap[r.channel] || r.channel || null,
|
|
134
|
+
status: statusMap[r.recruit_status] || r.recruit_status || null,
|
|
135
|
+
creator,
|
|
136
|
+
createTime: r.create_time || null,
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
return rsSuccess('recruit-stage.candidate.search', out);
|
|
140
|
+
}
|
|
141
|
+
export const searchOperations = [
|
|
142
|
+
{
|
|
143
|
+
name: 'recruit-stage.candidate.search',
|
|
144
|
+
resource: 'recruit.candidate',
|
|
145
|
+
method: 'query',
|
|
146
|
+
action: 'candidate.search',
|
|
147
|
+
summary: '按姓名/手机号模糊搜索人才库人才;无筛选条件时列出全部人才用于浏览。返回白名单展示字段(talentId/姓名/手机/渠道/状态/创建人)',
|
|
148
|
+
capability: 'recruit.candidate.search',
|
|
149
|
+
risk: 'read',
|
|
150
|
+
inputSchema: schemaOf({
|
|
151
|
+
name: { type: 'string', description: '姓名关键词(like)' },
|
|
152
|
+
mobile: { type: 'string', pattern: '^\\d{6,20}$', description: '手机号(like)' },
|
|
153
|
+
pageSize: { type: 'integer', minimum: 1, maximum: 100 },
|
|
154
|
+
current: { type: 'integer', minimum: 1 },
|
|
155
|
+
}, {}),
|
|
156
|
+
handler,
|
|
157
|
+
},
|
|
158
|
+
];
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { rsValidationError } from '../errors.js';
|
|
2
|
+
export const READ = 'read';
|
|
3
|
+
export const WRITE = 'write';
|
|
4
|
+
export function rsSuccess(action, data, meta) {
|
|
5
|
+
const payload = { ok: true, action, data };
|
|
6
|
+
if (meta && Object.keys(meta).length > 0)
|
|
7
|
+
payload.meta = meta;
|
|
8
|
+
return payload;
|
|
9
|
+
}
|
|
10
|
+
/** 构造「对象类型 + 严格禁止额外字段」的 JSON Schema。 */
|
|
11
|
+
export function schemaOf(properties, options = {}) {
|
|
12
|
+
return {
|
|
13
|
+
type: 'object',
|
|
14
|
+
additionalProperties: false,
|
|
15
|
+
properties,
|
|
16
|
+
...(options.required?.length ? { required: options.required } : {}),
|
|
17
|
+
...(options.description ? { description: options.description } : {}),
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export function asObject(value) {
|
|
21
|
+
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
22
|
+
throw rsValidationError('input_not_object', '输入必须是 JSON 对象');
|
|
23
|
+
}
|
|
24
|
+
return value;
|
|
25
|
+
}
|
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
{
|
|
2
|
+
"source": "985:39所(固定);211:教育部官网『211工程学校名单』(moe.gov.cn,2005-12);双一流:教育部第二轮『双一流』建设高校名单(教研函〔2022〕1号,147所)。仅用于人才标签自动推导,不参与其他业务。",
|
|
3
|
+
"aliases": {
|
|
4
|
+
"第二军医大学": "海军军医大学",
|
|
5
|
+
"第四军医大学": "空军军医大学",
|
|
6
|
+
"国防科学技术大学": "国防科技大学",
|
|
7
|
+
"中国协和医科大学": "北京协和医学院",
|
|
8
|
+
"北方交通大学": "北京交通大学",
|
|
9
|
+
"北京广播学院": "中国传媒大学",
|
|
10
|
+
"上海第二医科大学": "上海交通大学",
|
|
11
|
+
"上海体育大学": "上海体育学院",
|
|
12
|
+
"石油大学": "中国石油大学"
|
|
13
|
+
},
|
|
14
|
+
"985": [
|
|
15
|
+
"北京大学",
|
|
16
|
+
"中国人民大学",
|
|
17
|
+
"清华大学",
|
|
18
|
+
"北京航空航天大学",
|
|
19
|
+
"北京理工大学",
|
|
20
|
+
"中国农业大学",
|
|
21
|
+
"北京师范大学",
|
|
22
|
+
"中央民族大学",
|
|
23
|
+
"南开大学",
|
|
24
|
+
"天津大学",
|
|
25
|
+
"大连理工大学",
|
|
26
|
+
"东北大学",
|
|
27
|
+
"吉林大学",
|
|
28
|
+
"哈尔滨工业大学",
|
|
29
|
+
"复旦大学",
|
|
30
|
+
"同济大学",
|
|
31
|
+
"上海交通大学",
|
|
32
|
+
"华东师范大学",
|
|
33
|
+
"南京大学",
|
|
34
|
+
"东南大学",
|
|
35
|
+
"浙江大学",
|
|
36
|
+
"中国科学技术大学",
|
|
37
|
+
"厦门大学",
|
|
38
|
+
"山东大学",
|
|
39
|
+
"中国海洋大学",
|
|
40
|
+
"武汉大学",
|
|
41
|
+
"华中科技大学",
|
|
42
|
+
"湖南大学",
|
|
43
|
+
"中南大学",
|
|
44
|
+
"国防科技大学",
|
|
45
|
+
"中山大学",
|
|
46
|
+
"华南理工大学",
|
|
47
|
+
"四川大学",
|
|
48
|
+
"电子科技大学",
|
|
49
|
+
"重庆大学",
|
|
50
|
+
"西安交通大学",
|
|
51
|
+
"西北工业大学",
|
|
52
|
+
"西北农林科技大学",
|
|
53
|
+
"兰州大学"
|
|
54
|
+
],
|
|
55
|
+
"211": [
|
|
56
|
+
"北京大学",
|
|
57
|
+
"中国人民大学",
|
|
58
|
+
"清华大学",
|
|
59
|
+
"北京交通大学",
|
|
60
|
+
"北京工业大学",
|
|
61
|
+
"北京航空航天大学",
|
|
62
|
+
"北京理工大学",
|
|
63
|
+
"北京科技大学",
|
|
64
|
+
"北京化工大学",
|
|
65
|
+
"北京邮电大学",
|
|
66
|
+
"中国农业大学",
|
|
67
|
+
"北京林业大学",
|
|
68
|
+
"北京中医药大学",
|
|
69
|
+
"北京师范大学",
|
|
70
|
+
"北京外国语大学",
|
|
71
|
+
"中国传媒大学",
|
|
72
|
+
"中央财经大学",
|
|
73
|
+
"对外经济贸易大学",
|
|
74
|
+
"北京体育大学",
|
|
75
|
+
"中央音乐学院",
|
|
76
|
+
"中央民族大学",
|
|
77
|
+
"中国政法大学",
|
|
78
|
+
"华北电力大学",
|
|
79
|
+
"南开大学",
|
|
80
|
+
"天津大学",
|
|
81
|
+
"天津医科大学",
|
|
82
|
+
"河北工业大学",
|
|
83
|
+
"太原理工大学",
|
|
84
|
+
"内蒙古大学",
|
|
85
|
+
"辽宁大学",
|
|
86
|
+
"大连理工大学",
|
|
87
|
+
"东北大学",
|
|
88
|
+
"大连海事大学",
|
|
89
|
+
"吉林大学",
|
|
90
|
+
"延边大学",
|
|
91
|
+
"东北师范大学",
|
|
92
|
+
"哈尔滨工业大学",
|
|
93
|
+
"哈尔滨工程大学",
|
|
94
|
+
"东北农业大学",
|
|
95
|
+
"东北林业大学",
|
|
96
|
+
"复旦大学",
|
|
97
|
+
"同济大学",
|
|
98
|
+
"上海交通大学",
|
|
99
|
+
"华东理工大学",
|
|
100
|
+
"东华大学",
|
|
101
|
+
"华东师范大学",
|
|
102
|
+
"上海外国语大学",
|
|
103
|
+
"上海财经大学",
|
|
104
|
+
"上海大学",
|
|
105
|
+
"第二军医大学",
|
|
106
|
+
"南京大学",
|
|
107
|
+
"苏州大学",
|
|
108
|
+
"东南大学",
|
|
109
|
+
"南京航空航天大学",
|
|
110
|
+
"南京理工大学",
|
|
111
|
+
"中国矿业大学",
|
|
112
|
+
"河海大学",
|
|
113
|
+
"江南大学",
|
|
114
|
+
"南京农业大学",
|
|
115
|
+
"中国药科大学",
|
|
116
|
+
"南京师范大学",
|
|
117
|
+
"浙江大学",
|
|
118
|
+
"安徽大学",
|
|
119
|
+
"中国科学技术大学",
|
|
120
|
+
"合肥工业大学",
|
|
121
|
+
"厦门大学",
|
|
122
|
+
"福州大学",
|
|
123
|
+
"南昌大学",
|
|
124
|
+
"山东大学",
|
|
125
|
+
"中国海洋大学",
|
|
126
|
+
"中国石油大学",
|
|
127
|
+
"郑州大学",
|
|
128
|
+
"武汉大学",
|
|
129
|
+
"华中科技大学",
|
|
130
|
+
"中国地质大学",
|
|
131
|
+
"武汉理工大学",
|
|
132
|
+
"华中农业大学",
|
|
133
|
+
"华中师范大学",
|
|
134
|
+
"中南财经政法大学",
|
|
135
|
+
"湖南大学",
|
|
136
|
+
"中南大学",
|
|
137
|
+
"湖南师范大学",
|
|
138
|
+
"国防科学技术大学",
|
|
139
|
+
"中山大学",
|
|
140
|
+
"暨南大学",
|
|
141
|
+
"华南理工大学",
|
|
142
|
+
"华南师范大学",
|
|
143
|
+
"广西大学",
|
|
144
|
+
"海南大学",
|
|
145
|
+
"四川大学",
|
|
146
|
+
"西南交通大学",
|
|
147
|
+
"电子科技大学",
|
|
148
|
+
"四川农业大学",
|
|
149
|
+
"西南财经大学",
|
|
150
|
+
"重庆大学",
|
|
151
|
+
"西南大学",
|
|
152
|
+
"贵州大学",
|
|
153
|
+
"云南大学",
|
|
154
|
+
"西藏大学",
|
|
155
|
+
"西北大学",
|
|
156
|
+
"西安交通大学",
|
|
157
|
+
"西北工业大学",
|
|
158
|
+
"西安电子科技大学",
|
|
159
|
+
"长安大学",
|
|
160
|
+
"西北农林科技大学",
|
|
161
|
+
"陕西师范大学",
|
|
162
|
+
"第四军医大学",
|
|
163
|
+
"兰州大学",
|
|
164
|
+
"青海大学",
|
|
165
|
+
"宁夏大学",
|
|
166
|
+
"新疆大学",
|
|
167
|
+
"石河子大学"
|
|
168
|
+
],
|
|
169
|
+
"双一流": [
|
|
170
|
+
"北京大学",
|
|
171
|
+
"中国人民大学",
|
|
172
|
+
"清华大学",
|
|
173
|
+
"北京交通大学",
|
|
174
|
+
"北京工业大学",
|
|
175
|
+
"北京航空航天大学",
|
|
176
|
+
"北京理工大学",
|
|
177
|
+
"北京科技大学",
|
|
178
|
+
"北京化工大学",
|
|
179
|
+
"北京邮电大学",
|
|
180
|
+
"中国农业大学",
|
|
181
|
+
"北京林业大学",
|
|
182
|
+
"北京协和医学院",
|
|
183
|
+
"北京中医药大学",
|
|
184
|
+
"北京师范大学",
|
|
185
|
+
"首都师范大学",
|
|
186
|
+
"北京外国语大学",
|
|
187
|
+
"中国传媒大学",
|
|
188
|
+
"中央财经大学",
|
|
189
|
+
"对外经济贸易大学",
|
|
190
|
+
"外交学院",
|
|
191
|
+
"中国人民公安大学",
|
|
192
|
+
"北京体育大学",
|
|
193
|
+
"中央音乐学院",
|
|
194
|
+
"中国音乐学院",
|
|
195
|
+
"中央美术学院",
|
|
196
|
+
"中央戏剧学院",
|
|
197
|
+
"中央民族大学",
|
|
198
|
+
"中国政法大学",
|
|
199
|
+
"南开大学",
|
|
200
|
+
"天津大学",
|
|
201
|
+
"天津工业大学",
|
|
202
|
+
"天津医科大学",
|
|
203
|
+
"天津中医药大学",
|
|
204
|
+
"华北电力大学",
|
|
205
|
+
"河北工业大学",
|
|
206
|
+
"山西大学",
|
|
207
|
+
"太原理工大学",
|
|
208
|
+
"内蒙古大学",
|
|
209
|
+
"辽宁大学",
|
|
210
|
+
"大连理工大学",
|
|
211
|
+
"东北大学",
|
|
212
|
+
"大连海事大学",
|
|
213
|
+
"吉林大学",
|
|
214
|
+
"延边大学",
|
|
215
|
+
"东北师范大学",
|
|
216
|
+
"哈尔滨工业大学",
|
|
217
|
+
"哈尔滨工程大学",
|
|
218
|
+
"东北农业大学",
|
|
219
|
+
"东北林业大学",
|
|
220
|
+
"复旦大学",
|
|
221
|
+
"同济大学",
|
|
222
|
+
"上海交通大学",
|
|
223
|
+
"华东理工大学",
|
|
224
|
+
"东华大学",
|
|
225
|
+
"上海海洋大学",
|
|
226
|
+
"上海中医药大学",
|
|
227
|
+
"华东师范大学",
|
|
228
|
+
"上海外国语大学",
|
|
229
|
+
"上海财经大学",
|
|
230
|
+
"上海体育学院",
|
|
231
|
+
"上海音乐学院",
|
|
232
|
+
"上海大学",
|
|
233
|
+
"南京大学",
|
|
234
|
+
"苏州大学",
|
|
235
|
+
"东南大学",
|
|
236
|
+
"南京航空航天大学",
|
|
237
|
+
"南京理工大学",
|
|
238
|
+
"中国矿业大学",
|
|
239
|
+
"南京邮电大学",
|
|
240
|
+
"河海大学",
|
|
241
|
+
"江南大学",
|
|
242
|
+
"南京林业大学",
|
|
243
|
+
"南京信息工程大学",
|
|
244
|
+
"南京农业大学",
|
|
245
|
+
"南京医科大学",
|
|
246
|
+
"南京中医药大学",
|
|
247
|
+
"中国药科大学",
|
|
248
|
+
"南京师范大学",
|
|
249
|
+
"浙江大学",
|
|
250
|
+
"中国美术学院",
|
|
251
|
+
"安徽大学",
|
|
252
|
+
"中国科学技术大学",
|
|
253
|
+
"合肥工业大学",
|
|
254
|
+
"厦门大学",
|
|
255
|
+
"福州大学",
|
|
256
|
+
"南昌大学",
|
|
257
|
+
"山东大学",
|
|
258
|
+
"中国海洋大学",
|
|
259
|
+
"中国石油大学(华东)",
|
|
260
|
+
"郑州大学",
|
|
261
|
+
"河南大学",
|
|
262
|
+
"武汉大学",
|
|
263
|
+
"华中科技大学",
|
|
264
|
+
"中国地质大学(武汉)",
|
|
265
|
+
"武汉理工大学",
|
|
266
|
+
"华中农业大学",
|
|
267
|
+
"华中师范大学",
|
|
268
|
+
"中南财经政法大学",
|
|
269
|
+
"湘潭大学",
|
|
270
|
+
"湖南大学",
|
|
271
|
+
"中南大学",
|
|
272
|
+
"湖南师范大学",
|
|
273
|
+
"中山大学",
|
|
274
|
+
"暨南大学",
|
|
275
|
+
"华南理工大学",
|
|
276
|
+
"华南农业大学",
|
|
277
|
+
"广州医科大学",
|
|
278
|
+
"广州中医药大学",
|
|
279
|
+
"华南师范大学",
|
|
280
|
+
"海南大学",
|
|
281
|
+
"广西大学",
|
|
282
|
+
"四川大学",
|
|
283
|
+
"重庆大学",
|
|
284
|
+
"西南交通大学",
|
|
285
|
+
"电子科技大学",
|
|
286
|
+
"西南石油大学",
|
|
287
|
+
"成都理工大学",
|
|
288
|
+
"四川农业大学",
|
|
289
|
+
"成都中医药大学",
|
|
290
|
+
"西南大学",
|
|
291
|
+
"西南财经大学",
|
|
292
|
+
"贵州大学",
|
|
293
|
+
"云南大学",
|
|
294
|
+
"西藏大学",
|
|
295
|
+
"西北大学",
|
|
296
|
+
"西安交通大学",
|
|
297
|
+
"西北工业大学",
|
|
298
|
+
"西安电子科技大学",
|
|
299
|
+
"长安大学",
|
|
300
|
+
"西北农林科技大学",
|
|
301
|
+
"陕西师范大学",
|
|
302
|
+
"兰州大学",
|
|
303
|
+
"青海大学",
|
|
304
|
+
"宁夏大学",
|
|
305
|
+
"新疆大学",
|
|
306
|
+
"石河子大学",
|
|
307
|
+
"中国矿业大学(北京)",
|
|
308
|
+
"中国石油大学(北京)",
|
|
309
|
+
"中国地质大学(北京)",
|
|
310
|
+
"宁波大学",
|
|
311
|
+
"南方科技大学",
|
|
312
|
+
"上海科技大学",
|
|
313
|
+
"中国科学院大学",
|
|
314
|
+
"国防科技大学",
|
|
315
|
+
"海军军医大学",
|
|
316
|
+
"空军军医大学"
|
|
317
|
+
]
|
|
318
|
+
}
|