Files
wecom_it_smart_desk/frontend-agent/dist.bak/assets/MfaBind-CCREh_DU.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

2 lines
6.3 KiB
JavaScript

import{d as X,o as D,E as A,b as o,c as u,g as t,w as a,q as H,j as J,r as i,i as r,u as y,l as O,f as s,F as K,h as g,V as L,W as Y,X as $,n as Z,e as P,m as ee}from"./index-B1u3nieA.js";import{a as V}from"./index-ChNUjLLo.js";async function te(){return await V.get("/mfa/status")}async function se(){return await V.post("/mfa/bind/start")}async function ae(C){const x={otp_code:C};return await V.post("/mfa/bind/confirm",x)}const le={class:"mfa-bind-page"},ne={class:"card-header"},oe={key:0,class:"state-loading"},ie={key:1,class:"state-success"},re={key:0,class:"step-intro"},ue={key:1,class:"step-qrcode"},de={class:"step-tip"},ce={class:"qrcode-container"},pe=["src"],ve={key:1,class:"qrcode-placeholder"},fe={class:"manual-secret"},me={class:"qrcode-actions"},_e={key:2,class:"step-verify"},ye={class:"step-tip"},ge={class:"verify-actions"},be=X({__name:"MfaBind",setup(C){const x=H(),B=J(),q=i(!0),F=i(!1),d=i(0),b=i(!1),f=i(!1),M=i(""),w=i(""),m=i(""),c=i(""),T=i([]);D(async()=>{try{if((await te()).bound){F.value=!0,setTimeout(()=>N(),800);return}}catch(l){E(l,"检查绑定状态失败")}finally{q.value=!1}});async function h(){if(!b.value){b.value=!0,c.value="";try{const l=await se();M.value=l.qr_code_base64,w.value=l.secret,d.value=1}catch(l){E(l,"生成二维码失败")}finally{b.value=!1}}}async function R(){await h()}async function U(){if(w.value)try{await navigator.clipboard.writeText(w.value),A.success("密钥已复制到剪贴板")}catch{A.error("复制失败,请手动选中复制")}}async function j(){var l,e;if(!(m.value.length!==6||f.value)){f.value=!0,c.value="";try{if((await ae(m.value)).success){A.success("MFA 绑定成功!"),d.value=3,setTimeout(()=>N(),800);return}c.value="绑定失败,请重试"}catch(n){const p=((e=(l=n==null?void 0:n.response)==null?void 0:l.data)==null?void 0:e.message)||(n==null?void 0:n.message)||"验证失败";p.includes("OTP")||p.includes("验证码")?(c.value="OTP 验证码错误,请重新输入",m.value=""):c.value=p}finally{f.value=!1}}}function E(l,e){var p,v;const n=((v=(p=l==null?void 0:l.response)==null?void 0:p.data)==null?void 0:v.message)||(l==null?void 0:l.message)||e;A.error(n),c.value=n}function N(){const l=x.query.redirect||"/workspace";B.replace(l)}return(l,e)=>{const n=r("el-icon"),p=r("el-result"),v=r("el-step"),G=r("el-steps"),S=r("el-alert"),_=r("el-button"),z=r("el-input"),I=r("el-collapse-item"),Q=r("el-collapse"),W=r("el-card");return o(),u("div",le,[t(W,{class:"mfa-card",shadow:"hover"},{header:a(()=>[s("div",ne,[t(n,{class:"header-icon"},{default:a(()=>[t(y($))]),_:1}),e[4]||(e[4]=s("span",{class:"header-title"},"绑定动态令牌(MFA)",-1))])]),default:a(()=>[q.value?(o(),u("div",oe,[t(n,{class:"is-loading"},{default:a(()=>[t(y(O))]),_:1}),e[5]||(e[5]=s("span",null,"正在检查绑定状态...",-1))])):F.value?(o(),u("div",ie,[t(p,{icon:"success",title:"已绑定 MFA","sub-title":"正在跳转到工作台..."})])):(o(),u(K,{key:2},[t(G,{active:d.value,"finish-status":"success","align-center":"",class:"steps"},{default:a(()=>[t(v,{title:"开始绑定"}),t(v,{title:"扫码"}),t(v,{title:"验证"}),t(v,{title:"完成"})]),_:1},8,["active"]),d.value===0?(o(),u("div",re,[t(S,{type:"info",closable:!1,class:"intro-alert"},{title:a(()=>[...e[6]||(e[6]=[s("span",null,"什么是 MFA 动态令牌?",-1)])]),default:a(()=>[e[7]||(e[7]=s("div",{class:"intro-content"}," MFA(多因素认证)通过动态令牌为您的账号增加一层保护。 绑定后,每次登录或执行敏感操作时,需要输入手机端 Authenticator 生成的 6 位动态码。 ",-1))]),_:1}),e[9]||(e[9]=s("div",{class:"intro-steps"},[s("div",{class:"intro-step"},[s("div",{class:"intro-num"},"1"),s("div",{class:"intro-text"},"下载 Authenticator(Google / 微软 / Authy 均可)")]),s("div",{class:"intro-step"},[s("div",{class:"intro-num"},"2"),s("div",{class:"intro-text"},'点击下方"开始绑定",扫描二维码')]),s("div",{class:"intro-step"},[s("div",{class:"intro-num"},"3"),s("div",{class:"intro-text"},"输入 Authenticator 显示的 6 位动态码完成绑定")])],-1)),t(_,{type:"primary",size:"large",loading:b.value,disabled:b.value,class:"start-btn",onClick:h},{default:a(()=>[...e[8]||(e[8]=[g(" 开始绑定 ",-1)])]),_:1},8,["loading","disabled"])])):d.value===1?(o(),u("div",ue,[s("p",de,[t(n,null,{default:a(()=>[t(y(L))]),_:1}),e[10]||(e[10]=s("span",null,"请用 Authenticator 扫描下方二维码",-1))]),s("div",ce,[M.value?(o(),u("img",{key:0,src:`data:image/png;base64,${M.value}`,alt:"MFA 二维码",class:"qrcode-image"},null,8,pe)):(o(),u("div",ve,[t(n,{class:"is-loading"},{default:a(()=>[t(y(O))]),_:1}),e[11]||(e[11]=s("span",null,"正在生成二维码...",-1))]))]),t(Q,{modelValue:T.value,"onUpdate:modelValue":e[0]||(e[0]=k=>T.value=k),class:"manual-collapse"},{default:a(()=>[t(I,{title:"无法扫码?手动输入密钥",name:"manual"},{default:a(()=>[s("div",fe,[e[13]||(e[13]=s("p",{class:"manual-hint"},"将以下密钥手动添加到 Authenticator:",-1)),t(z,{"model-value":w.value,readonly:"",class:"secret-input"},{append:a(()=>[t(_,{onClick:U},{default:a(()=>[...e[12]||(e[12]=[g("复制",-1)])]),_:1})]),_:1},8,["model-value"]),e[14]||(e[14]=s("p",{class:"manual-tip"},' 添加时类型选择"基于时间",其他保持默认 ',-1))])]),_:1})]),_:1},8,["modelValue"]),s("div",me,[t(_,{onClick:R},{default:a(()=>[...e[15]||(e[15]=[g("刷新二维码",-1)])]),_:1}),t(_,{type:"primary",onClick:e[1]||(e[1]=k=>d.value=2)},{default:a(()=>[...e[16]||(e[16]=[g("下一步",-1)])]),_:1})])])):d.value===2?(o(),u("div",_e,[s("p",ye,[t(n,null,{default:a(()=>[t(y(Y))]),_:1}),e[17]||(e[17]=s("span",null,"请输入 Authenticator 显示的 6 位动态码",-1))]),t(z,{modelValue:m.value,"onUpdate:modelValue":e[2]||(e[2]=k=>m.value=k),maxlength:"6",placeholder:"请输入 6 位动态码",size:"large",class:"code-input",disabled:f.value},{prefix:a(()=>[t(n,null,{default:a(()=>[t(y($))]),_:1})]),_:1},8,["modelValue","disabled"]),c.value?(o(),Z(S,{key:0,type:"error",title:c.value,closable:!1,class:"error-alert"},null,8,["title"])):P("",!0),s("div",ge,[t(_,{onClick:e[3]||(e[3]=k=>d.value=1)},{default:a(()=>[...e[18]||(e[18]=[g("上一步",-1)])]),_:1}),t(_,{type:"primary",size:"large",loading:f.value,disabled:m.value.length!==6||f.value,onClick:j},{default:a(()=>[...e[19]||(e[19]=[g(" 确认绑定 ",-1)])]),_:1},8,["loading","disabled"])])])):P("",!0)],64))]),_:1})])}}}),we=ee(be,[["__scopeId","data-v-4bc12407"]]);export{we as default};