bea288e414
== 已部署上线 (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
3 lines
7.7 KiB
JavaScript
3 lines
7.7 KiB
JavaScript
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};
|