Files
wecom_it_smart_desk/frontend-admin/dist-old/assets/Login-DQqUrkbw.js
T
Simon bea288e414 feat: 2026-07-11 全量更新 - 代办集成+会议室预定+知识迭代修复+UI统一+Bug修复
== 已部署上线 (9项) ==
- 代办事项真实数据源集成 (企微审批API 8bug修复链)
- H5/坐席端 Logo样式统一+绿色背景
- 视频引导页修复 (localStorage key v2)
- 坐席端 v9 Vue版本修复 (ElMessage._context)
- 截图按钮 v10 修复 (getDisplayMedia user gesture)
- 扫码样式恢复+H5扫码登录跳转修复
- H5截图快捷键提示

== 代码完成待部署 (3项) ==
- 知识迭代3Bug修复 (#8 POST端点/#7 MERGE幂等/#6 过期检查)
- 会议室预定-小鱼易联终端 (40文件, 40/40测试通过)
- IT资产升级审批推送 (asset_service.py)

== 需求文档 (2项) ==
- 坐席端AI辅助消息框-PRD (4项新功能确认)
- 坐席端布局优化建议 v2.0 (7天计划)

== 新增文档 ==
- 日报-2026-07-11.md
- 知识迭代Bug修复报告-20260711.md
- 会议室预定-部署指南.md
- CHANGELOG.md 更新

== 测试 ==
- test_todo_integration.py: 40/40
- test_meetingroom.py: 40/40
- test_bugfix_ki_suggestions.py: 21/21
2026-07-11 23:13:10 +08:00

3 lines
7.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-CMW9Tl_L.js","assets/index-BYp6OBwf.js","assets/index-DpwyG6Fg.css"])))=>i.map(i=>d[i]);
import{d as F,o as G,a as H,b as _,c as v,e as l,f as s,w as r,g as q,h as X,i as j,r as p,_ as V,j as w,E as b,u as Y,k as c,l as Z,m as M,n as L,t as W,p as ee,q as D,s as oe,v as te,x as ne,y as se}from"./index-BYp6OBwf.js";import{u as le}from"./admin-BbnaYI80.js";import{_ as ae}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./index-CMW9Tl_L.js";const ie={class:"login-page"},re={class:"login-card"},de={class:"login-logo"},ue={class:"login-logo-icon"},ce={key:0,style:{"text-align":"center","margin-bottom":"12px"}},pe={class:"qr-login"},fe={class:"qr-container"},ge={key:0,class:"qr-loading"},_e={key:1,class:"qr-code"},me=["src"],ve={key:2,class:"qr-error"},we={key:1,class:"password-login"},ye={class:"login-tips"},ke=F({__name:"Login",setup(Ce){const z=Y(),f=le(),O=p(),d=se({userId:"",password:"",otpCode:""}),S=p(!1),y=p(""),U=p(!1),I=p(""),E=p(!1),k=p(""),P=p(!1);let h=null,A="";const T=p(!1),B={userId:[{required:!0,message:"请输入账号",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}],otpCode:[{required:!0,message:"请输入 OTP 验证码",trigger:"blur"},{len:6,message:"验证码为 6 位数字",trigger:"blur"}]};async function N(){T.value=!0;try{if(!/wxwork/i.test(navigator.userAgent)){T.value=!1;return}if(typeof window.wx<"u")try{const e=window.location.href.split("#")[0],o=(await V(async()=>{const{default:u}=await import("./index-CMW9Tl_L.js").then(a=>a.i);return{default:u}},__vite__mapDeps([0,1,2]))).default,n=await o.get("/wecom/jsapi-config",{params:{url:e}});console.log("[Admin Login] 获取到企微 JS-SDK 配置:",n),await new Promise(u=>{window.wx.config({beta:!0,debug:!1,appId:n.corp_id,timestamp:n.timestamp,nonceStr:n.nonce_str,signature:n.signature,jsApiList:["agentConfig"]}),u()});const g=(await new Promise((u,a)=>{window.wx.agentConfig({corpid:n.corp_id,agentid:n.agent_id,timestamp:n.timestamp,nonceStr:n.nonce_str,signature:n.signature,success:R=>u(R),fail:R=>a(new Error(R.errMsg||"agentConfig 失败"))})})).userId;if(g){console.log("[Admin Login] 获取到企微用户 ID:",g),I.value=g;const a=await o.get("/wecom/check-role",{params:{userid:g}});console.log("[Admin Login] 用户角色:",a),a.role}}catch(e){console.warn("[Admin Login] 企微 JS-SDK 检测失败:",e)}else console.log("[Admin Login] 无企微 JS-SDK,使用默认登录")}catch(i){console.error("企微客户端检测失败:",i)}finally{T.value=!1}}async function Q(){E.value=!0;try{const e=await(await V(async()=>{const{default:o}=await import("./index-CMW9Tl_L.js").then(t=>t.i);return{default:o}},__vite__mapDeps([0,1,2]))).default.post("/auth_wecom/jsdk-login",{userid:I.value,login_source:"wecom_jsdk_admin"});if(e!=null&&e.token){const{token:o,employee_id:t,name:n}=e;localStorage.setItem("admin_token",o),t&&localStorage.setItem("admin_user_id",t),f.token=o,f.adminUserId=t,b.success("登录成功"),z.push("/")}else throw new Error("免密登录失败")}catch(i){console.error("企微免密登录失败:",i),b.error("免密登录失败,请使用其他方式")}finally{E.value=!1}}async function K(){P.value=!0;try{const e=await(await V(async()=>{const{default:o}=await import("./index-CMW9Tl_L.js").then(t=>t.i);return{default:o}},__vite__mapDeps([0,1,2]))).default.post("/auth_qrcode/create");e.qrcode_png_base64?k.value=`data:image/png;base64,${e.qrcode_png_base64}`:e.qrcode_url&&(k.value=e.qrcode_url),e.ticket&&(A=e.ticket,J())}catch(i){console.error("获取二维码失败:",i)}finally{P.value=!1}}async function $(){if(A)try{const e=await(await V(async()=>{const{default:g}=await import("./index-CMW9Tl_L.js").then(u=>u.i);return{default:g}},__vite__mapDeps([0,1,2]))).default.get(`/auth_qrcode/poll/${A}`);if(!e)return;const{status:o,token:t,employee_id:n,name:m}=e;o==="confirmed"&&t?(x(),localStorage.setItem("admin_token",t),n&&localStorage.setItem("admin_user_id",n),f.token=t,f.adminUserId=n,b.success("扫码登录成功"),z.push("/")):o==="expired"&&(x(),k.value="",b.warning("二维码已过期,请刷新"))}catch(i){console.warn("轮询扫码状态失败:",i)}}function J(){x(),h=setInterval($,2e3)}function x(){h&&(clearInterval(h),h=null)}async function C(){var e;if(await((e=O.value)==null?void 0:e.validate().catch(()=>!1))){y.value="";try{await f.login(d.userId.trim(),d.password,d.otpCode.trim()||void 0)}catch(o){if(o instanceof Error&&o.message==="require_otp"){S.value=!0,d.otpCode="",b.info("请输入 OTP 验证码");return}const t=o instanceof Error?o.message:"登录失败,请重试";y.value=t}}}return G(()=>{N(),K()}),H(()=>{x()}),(i,e)=>{const o=w("el-icon"),t=w("el-button"),n=w("el-input"),m=w("el-form-item"),g=w("el-form"),u=w("el-alert");return _(),v("div",ie,[e[14]||(e[14]=l("div",{class:"login-bg"},[l("div",{class:"login-bg-gradient"})],-1)),l("div",re,[l("div",de,[l("div",ue,[s(o,{size:28},{default:r(()=>[s(c(Z))]),_:1})]),e[5]||(e[5]=l("h1",{class:"login-title"},"IT智能服务台",-1)),e[6]||(e[6]=l("p",{class:"login-subtitle"},"管理后台",-1))]),I.value?(_(),v("div",ce,[s(t,{type:"primary",size:"large",loading:E.value,onClick:Q,class:"option-btn",style:{width:"100%"}},{default:r(()=>[s(o,null,{default:r(()=>[s(c(M))]),_:1}),L(" 企微免密登录("+W(I.value)+" ",1)]),_:1},8,["loading"])])):q("",!0),l("div",pe,[l("div",fe,[P.value?(_(),v("div",ge,[s(o,{class:"is-loading"},{default:r(()=>[s(c(ee))]),_:1}),e[7]||(e[7]=l("p",null,"加载中...",-1))])):k.value?(_(),v("div",_e,[l("img",{src:k.value,alt:"企微扫码登录"},null,8,me)])):(_(),v("div",ve,[e[9]||(e[9]=l("p",null,"获取二维码失败",-1)),s(t,{size:"small",onClick:K},{default:r(()=>[...e[8]||(e[8]=[L("重试",-1)])]),_:1})]))]),e[11]||(e[11]=l("p",{class:"qr-hint"},"请使用企业微信扫码登录",-1)),e[12]||(e[12]=l("div",{class:"divider"},[l("span",null,"其他登录方式")],-1)),s(t,{size:"large",class:"password-login-btn",onClick:e[0]||(e[0]=a=>U.value=!0)},{default:r(()=>[...e[10]||(e[10]=[l("span",null,"🔐",-1),L(" 账号密码登录 ",-1)])]),_:1})]),U.value?(_(),v("div",we,[s(g,{ref_key:"formRef",ref:O,model:d,rules:B,"label-position":"top",onSubmit:X(C,["prevent"])},{default:r(()=>[s(m,{label:"账号",prop:"userId"},{default:r(()=>[s(n,{modelValue:d.userId,"onUpdate:modelValue":e[1]||(e[1]=a=>d.userId=a),placeholder:"请输入账号(如 sxn",size:"large","prefix-icon":c(oe),onKeydown:D(C,["enter"])},null,8,["modelValue","prefix-icon"])]),_:1}),s(m,{label:"密码",prop:"password"},{default:r(()=>[s(n,{modelValue:d.password,"onUpdate:modelValue":e[2]||(e[2]=a=>d.password=a),type:"password",placeholder:"请输入密码",size:"large","prefix-icon":c(te),"show-password":"",onKeydown:D(C,["enter"])},null,8,["modelValue","prefix-icon"])]),_:1}),S.value?(_(),j(m,{key:0,label:"OTP 验证码",prop:"otpCode"},{default:r(()=>[s(n,{modelValue:d.otpCode,"onUpdate:modelValue":e[3]||(e[3]=a=>d.otpCode=a),placeholder:"请输入 Google Authenticator 验证码",size:"large","prefix-icon":c(M),maxlength:"6",onKeydown:D(C,["enter"])},null,8,["modelValue","prefix-icon"])]),_:1})):q("",!0),s(m,null,{default:r(()=>[s(t,{type:"primary",size:"large",loading:c(f).logging,disabled:c(f).logging,onClick:C,class:"login-btn"},{default:r(()=>[L(W(c(f).logging?"登录中...":S.value?"验证 OTP":"登录管理后台"),1)]),_:1},8,["loading","disabled"])]),_:1})]),_:1},8,["model"])])):q("",!0),y.value?(_(),j(u,{key:2,title:y.value,type:"error","show-icon":"",closable:!0,onClose:e[4]||(e[4]=a=>y.value=""),style:{"margin-top":"16px"}},null,8,["title"])):q("",!0),l("div",ye,[s(o,{size:14},{default:r(()=>[s(c(ne))]),_:1}),e[13]||(e[13]=l("span",null,"仅限组长(admin角色)登录管理后台",-1))])])])}}}),qe=ae(ke,[["__scopeId","data-v-b50237c1"]]);export{qe as default};