// 一键修改密码 async function changePasswordBatch(users) { // RSA加密 function encryptPassword(password, publicKey) { const jsencrypt = new JSEncrypt(); jsencrypt.setPublicKey(publicKey); const encrypted = jsencrypt.encrypt(password); if (!encrypted) throw new Error("密码加密失败"); return encrypted; } // 给单个用户改密(带重试) async function updateUserPassword(user, retry = 3) { try { // 1. 获取验证码 const ts1 = Date.now(); const imgRes = await fetch( `https://oa.zwgczx.com/weaver/weaver.file.MakeValidateCode?isView=1&validatetype=0&validatenum=4&seriesnum_=${ts1}`, { credentials: "include" } ); const buf = await imgRes.arrayBuffer(); const base64 = btoa( new Uint8Array(buf).reduce((data, byte) => data + String.fromCharCode(byte), "") ); // 2. OCR 识别验证码 const ocrRes = await fetch("https://nest.zwgczx.com/api/v1/tmp-redis/test", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ base64 }) }); const { data: validatecode } = await ocrRes.json(); console.log("识别验证码:", validatecode); // 3. 获取RSA公钥 const ts2 = Date.now(); const { rsa_pub, rsa_flag, rsa_code } = await ( await fetch(`https://oa.zwgczx.com/rsa/weaver.rsa.GetRsaInfo?ts=${ts2}`, { credentials: "include" }) ).json(); const encPwd = encryptPassword(user.password + rsa_code, rsa_pub) + rsa_flag; const ts3 = Date.now(); const { rsa_pub: rsa_pub1, rsa_flag: rsa_flag1, rsa_code: rsa_code1 } = await ( await fetch(`https://oa.zwgczx.com/rsa/weaver.rsa.GetRsaInfo?ts=${ts3}`, { credentials: "include" }) ).json(); const encPwd1 = encryptPassword(user.password + rsa_code1, rsa_pub1) + rsa_flag1; // 4. 提交改密 const body = new URLSearchParams({ id: user.id, loginid: user.loginid, password: encPwd, password1: encPwd1, usbstate: "0", isADAccount: "0", validatecode, seclevel: 0, useSecondaryPwd: 0, passwordlock: 0, needauto: 0, enableDate: "2025-09-10", enableUsbType: 0 }); const saveRes = await fetch("https://oa.zwgczx.com/api/hrm/systeminfo/save", { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded; charset=utf-8", "x-requested-with": "XMLHttpRequest" }, body, credentials: "include" }); const resultText = await saveRes.text(); let result = {}; try { result = JSON.parse(resultText); } catch { // 如果不是标准JSON,就简单返回原始文本 result = { raw: resultText }; } if (result.status === "-1") { if (retry > 0) { console.warn( `用户 ${user.loginid} 验证码失败,重试剩余 ${retry} 次...` ); return await updateUserPassword(user, retry - 1); } else { throw new Error(`用户 ${user.loginid} 改密失败(验证码多次失败)`); } } console.log(`用户 ${user.loginid} 改密结果:`, result); } catch (err) { console.error(`用户 ${user.loginid} 改密失败:`, err); } } // 遍历用户批量处理 for (const user of users) { await updateUserPassword(user); } } // 示例调用,id需要是hrmresource的id,密码需要符合系统安全设置 changePasswordBatch([ { "id": 523, "loginid": "CUS-CDYH", "password": "RY.42281" }, { "id": 524, "loginid": "CUS-GYYH", "password": "RY.13953" }, { "id": 525, "loginid": "CUS-JTYH", "password": "RY.98457" }, { "id": 526, "loginid": "CUS-LLT", "password": "RY.11517" }, { "id": 527, "loginid": "CUS-NDYH", "password": "RY.20880" }, { "id": 304, "loginid": "RY-BSFGS", "password": "RY.48137" }, { "id": 343, "loginid": "RY-CHGS", "password": "RY.93925" }, { "id": 315, "loginid": "RY-CSHX", "password": "RY.78478" }, { "id": 330, "loginid": "RY-CZGLZX", "password": "RY.41274" }, { "id": 347, "loginid": "RY-DCGS", "password": "RY.55742" }, { "id": 349, "loginid": "RY-DYFGS", "password": "RY.71620" }, { "id": 309, "loginid": "RY-EGFGS", "password": "RY.20707" }, { "id": 351, "loginid": "RY-FKFGS", "password": "RY.64596" }, { "id": 350, "loginid": "RY-GFGS", "password": "RY.05010" }, { "id": 306, "loginid": "RY-GFZGS", "password": "RY.86999" }, { "id": 308, "loginid": "RY-GHFGS", "password": "RY.63878" }, { "id": 337, "loginid": "RY-GHGS", "password": "RY.45039" }, { "id": 340, "loginid": "RY-GLGS", "password": "RY.59570" }, { "id": 310, "loginid": "RY-GSFGS", "password": "RY.81003" }, { "id": 302, "loginid": "RY-GSZGS", "password": "RY.44099" }, { "id": 299, "loginid": "RY-GZXX", "password": "RY.05592" }, { "id": 328, "loginid": "RY-HHGGLZX", "password": "RY.90622" }, { "id": 303, "loginid": "RY-HMDQ", "password": "RY.81619" }, { "id": 301, "loginid": "RY-HMEWFGS", "password": "RY.25967" }, { "id": 311, "loginid": "RY-HQGS", "password": "RY.89632" }, { "id": 318, "loginid": "RY-HZGLC", "password": "RY.92680" }, { "id": 320, "loginid": "RY-JGGLC", "password": "RY.29439" }, { "id": 329, "loginid": "RY-JHGLZX", "password": "RY.83392" }, { "id": 293, "loginid": "RY-JLFGS", "password": "RY.00699" }, { "id": 354, "loginid": "RY-JS", "password": "RY.53500" }, { "id": 353, "loginid": "RY-JTJT", "password": "RY.10700" }, { "id": 338, "loginid": "RY-JZB", "password": "RY.31698" }, { "id": 319, "loginid": "RY-JZGLZX", "password": "RY.43983" }, { "id": 298, "loginid": "RY-JZGS", "password": "RY.91799" }, { "id": 297, "loginid": "RY-JZGSGZBD", "password": "RY.35764" }, { "id": 296, "loginid": "RY-JZGSGZD", "password": "RY.40224" }, { "id": 335, "loginid": "RY-KYGS", "password": "RY.40975" }, { "id": 313, "loginid": "RY-LDFGS", "password": "RY.43105" }, { "id": 327, "loginid": "RY-LLGLC", "password": "RY.50593" }, { "id": 355, "loginid": "RY-LQ", "password": "RY.37570" }, { "id": 348, "loginid": "RY-MPGS", "password": "RY.39292" }, { "id": 333, "loginid": "RY-MZGS", "password": "RY.14628" }, { "id": 300, "loginid": "RY-NHDFGS", "password": "RY.50066" }, { "id": 314, "loginid": "RY-NHGS", "password": "RY.14002" }, { "id": 356, "loginid": "RY-NY", "password": "RY.35568" }, { "id": 325, "loginid": "RY-NYLYGLC", "password": "RY.81717" }, { "id": 321, "loginid": "RY-QYGLZX", "password": "RY.12508" }, { "id": 324, "loginid": "RY-RXGLC", "password": "RY.38510" }, { "id": 345, "loginid": "RY-SFGS", "password": "RY.55017" }, { "id": 357, "loginid": "RY-SG", "password": "RY.98997" }, { "id": 323, "loginid": "RY-SGGLZX", "password": "RY.16123" }, { "id": 339, "loginid": "RY-SGGQFGS", "password": "RY.55621" }, { "id": 332, "loginid": "RY-SGZJFGS", "password": "RY.94912" }, { "id": 342, "loginid": "RY-SSXFGS", "password": "RY.23889" }, { "id": 312, "loginid": "RY-SZFGS", "password": "RY.63003" }, { "id": 522, "loginid": "RY-SZTD", "password": "RY.33575" }, { "id": 358, "loginid": "RY-TZ", "password": "RY.84725" }, { "id": 334, "loginid": "RY-TZFGS", "password": "RY.21588" }, { "id": 326, "loginid": "RY-XBGLC", "password": "RY.13156" }, { "id": 346, "loginid": "RY-XBYHFGS", "password": "RY.04216" }, { "id": 336, "loginid": "RY-YANGMAOGS", "password": "RY.38286" }, { "id": 341, "loginid": "RY-YGFGS", "password": "RY.06696" }, { "id": 359, "loginid": "RY-YGS", "password": "RY.12380" }, { "id": 316, "loginid": "RY-YHGLC", "password": "RY.92641" }, { "id": 322, "loginid": "RY-YHGLCH", "password": "RY.86731" }, { "id": 295, "loginid": "RY-YUNMAOGS", "password": "RY.56787" }, { "id": 305, "loginid": "RY-YWFGS", "password": "RY.61043" }, { "id": 307, "loginid": "RY-YZGS", "password": "RY.33185" } ]);