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
This commit is contained in:
Simon
2026-07-11 23:13:10 +08:00
parent 3d152fc8eb
commit bea288e414
928 changed files with 85169 additions and 54205 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
.sidebar[data-v-f8a6ae37]{width:220px;background:var(--bg-secondary);border-right:1px solid var(--border);display:flex;flex-direction:column;flex-shrink:0;overflow:hidden}.sidebar-logo[data-v-f8a6ae37]{padding:16px 20px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:10px}.sidebar-logo-icon[data-v-f8a6ae37]{width:32px;height:32px;background:linear-gradient(135deg,#3b82f6,#8b5cf6);border-radius:8px;display:flex;align-items:center;justify-content:center;color:#fff}.sidebar-logo-text[data-v-f8a6ae37]{font-size:15px;font-weight:600;color:var(--text-primary)}.sidebar-logo-sub[data-v-f8a6ae37]{font-size:10px;color:var(--text-muted)}.sidebar-menu[data-v-f8a6ae37]{flex:1;overflow-y:auto;border-right:none}.menu-section-title[data-v-f8a6ae37]{padding:12px 20px 6px;font-size:11px;color:var(--text-muted);letter-spacing:.5px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.sidebar-menu .el-menu-item[data-v-f8a6ae37]{height:40px;line-height:40px;font-size:13px;border-left:3px solid transparent;margin:0}.sidebar-menu .el-menu-item.is-active[data-v-f8a6ae37]{background-color:var(--accent-light);border-left-color:var(--accent)}.locked-menu-item[data-v-f8a6ae37]{opacity:.5;pointer-events:auto!important}.lock-icon[data-v-f8a6ae37]{margin-left:auto;font-size:12px;color:var(--text-muted)}.search-box-wrapper[data-v-096eb022]{position:relative}.search-box[data-v-096eb022]{display:flex;align-items:center;background:var(--bg-primary);border:1px solid var(--border);border-radius:var(--radius);padding:0 10px;gap:6px}.search-box[data-v-096eb022]:focus-within{border-color:var(--accent)}.search-input[data-v-096eb022]{background:transparent;border:none;color:var(--text-primary);padding:6px 0;font-size:13px;outline:none;width:180px}.search-input[data-v-096eb022]::-moz-placeholder{color:var(--text-muted)}.search-input[data-v-096eb022]::placeholder{color:var(--text-muted)}.search-results[data-v-096eb022]{max-height:300px;overflow-y:auto}.search-loading[data-v-096eb022],.search-empty[data-v-096eb022]{padding:16px;text-align:center;color:var(--text-muted);font-size:13px}.search-result-count[data-v-096eb022]{padding:8px 12px;font-size:11px;color:var(--text-muted);border-bottom:1px solid var(--border)}.search-result-item[data-v-096eb022]{display:flex;align-items:center;gap:10px;padding:10px 12px;cursor:pointer;transition:background .2s;border-bottom:1px solid var(--border)}.search-result-item[data-v-096eb022]:last-child{border-bottom:none}.search-result-item[data-v-096eb022]:hover{background:var(--bg-tertiary)}.result-name[data-v-096eb022]{font-size:13px;color:var(--text-primary)}
@@ -0,0 +1 @@
import{d as A,o as E,b as u,c as g,e as p,f as t,w as o,k as I,a7 as L,W as R,i as k,r as b,E as S,j as i,a2 as U,n as r,t as n,U as j,V as F,g as O,a0 as w,T as x}from"./index-BYp6OBwf.js";import{O as W}from"./admin-QG1MRyaa.js";import{_ as q}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./index-CMW9Tl_L.js";const G={class:"agent-performance"},H={class:"filter-bar"},J={key:0,style:{color:"#909399"}},K={class:"summary-bar"},Q=A({__name:"AgentPerformance",setup(X){const m=b(!1),c=b([]),d=b(null),C=x(()=>c.value.reduce((a,l)=>a+(l.total_conversations||0),0)),V=x(()=>c.value.reduce((a,l)=>a+(l.resolved_conversations||0),0));async function f(){m.value=!0;try{const a={};d.value&&(a.date_from=d.value[0],a.date_to=d.value[1]);const{data:l}=await W(a);l.code===0&&(c.value=l.data.items||[])}catch{S.error("加载绩效数据失败")}finally{m.value=!1}}function z(a){return{online:"success",busy:"warning",offline:"info"}[a]||"info"}function D(a){return{online:"在线",busy:"忙碌",offline:"离线"}[a]||a}function B(a){if(a==="—")return"#909399";const l=parseInt(a);return l>=80?"#67c23a":l>=50?"#e6a23c":"#f56c6c"}return E(()=>f()),(a,l)=>{const M=i("el-date-picker"),N=i("el-button"),s=i("el-table-column"),v=i("el-tag"),P=i("el-table"),_=i("el-descriptions-item"),T=i("el-descriptions"),Y=U("loading");return u(),g("div",G,[p("div",H,[t(M,{modelValue:d.value,"onUpdate:modelValue":l[0]||(l[0]=e=>d.value=e),type:"daterange","range-separator":"至","start-placeholder":"开始日期","end-placeholder":"结束日期","value-format":"YYYY-MM-DD",style:{width:"280px"},onChange:f},null,8,["modelValue"]),t(N,{type:"primary",icon:I(L),onClick:f},{default:o(()=>[...l[1]||(l[1]=[r("刷新",-1)])]),_:1},8,["icon"])]),R((u(),k(P,{data:c.value,stripe:"",style:{width:"100%"}},{default:o(()=>[t(s,{prop:"name",label:"坐席姓名",width:"120"}),t(s,{prop:"status",label:"状态",width:"90"},{default:o(({row:e})=>[t(v,{type:z(e.status),size:"small"},{default:o(()=>[r(n(D(e.status)),1)]),_:2},1032,["type"])]),_:1}),t(s,{prop:"role",label:"角色",width:"80"},{default:o(({row:e})=>[t(v,{type:e.role==="admin"?"danger":"info",size:"small"},{default:o(()=>[r(n(e.role==="admin"?"组长":"坐席"),1)]),_:2},1032,["type"])]),_:1}),t(s,{prop:"skill_tags",label:"技能标签","min-width":"150"},{default:o(({row:e})=>{var y;return[(u(!0),g(j,null,F(e.skill_tags||[],h=>(u(),k(v,{key:h,size:"small",class:"skill-tag"},{default:o(()=>[r(n(h),1)]),_:2},1024))),128)),(y=e.skill_tags)!=null&&y.length?O("",!0):(u(),g("span",J,"—"))]}),_:1}),t(s,{prop:"current_load",label:"当前负载",width:"90",align:"center"},{default:o(({row:e})=>[p("span",{style:w({color:e.current_load>=e.max_load?"#f56c6c":"#303133"})},n(e.current_load)+"/"+n(e.max_load),5)]),_:1}),t(s,{prop:"total_conversations",label:"总会话数",width:"100",align:"center",sortable:""}),t(s,{prop:"resolved_conversations",label:"已结单",width:"90",align:"center",sortable:""}),t(s,{prop:"resolution_rate",label:"结单率",width:"90",align:"center"},{default:o(({row:e})=>[p("span",{style:w({color:B(e.resolution_rate)})},n(e.resolution_rate),5)]),_:1}),t(s,{prop:"today_conversations",label:"今日会话",width:"100",align:"center",sortable:""})]),_:1},8,["data"])),[[Y,m.value]]),p("div",K,[t(T,{column:4,border:"",size:"small"},{default:o(()=>[t(_,{label:"坐席总数"},{default:o(()=>[r(n(c.value.length),1)]),_:1}),t(_,{label:"在线坐席"},{default:o(()=>[r(n(c.value.filter(e=>e.status==="online").length),1)]),_:1}),t(_,{label:"总会话数"},{default:o(()=>[r(n(C.value),1)]),_:1}),t(_,{label:"总结单数"},{default:o(()=>[r(n(V.value),1)]),_:1})]),_:1})])])}}}),ae=q(Q,[["__scopeId","data-v-d7901a83"]]);export{ae as default};
@@ -0,0 +1 @@
.agent-performance[data-v-d7901a83]{padding:0}.filter-bar[data-v-d7901a83]{display:flex;gap:12px;margin-bottom:20px;flex-wrap:wrap;align-items:center}.skill-tag[data-v-d7901a83]{margin-right:4px;margin-bottom:2px}.summary-bar[data-v-d7901a83]{margin-top:20px}
@@ -0,0 +1 @@
.agent-info[data-v-a8c5783f]{display:flex;align-items:center;gap:10px}.agent-avatar[data-v-a8c5783f]{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:var(--accent);font-size:12px;font-weight:600;flex-shrink:0}.agent-name[data-v-a8c5783f]{font-weight:500;color:var(--text-primary)}.agent-id[data-v-a8c5783f]{font-size:11px;color:var(--text-muted)}.text-muted[data-v-a8c5783f]{color:var(--text-muted);font-size:12px}.agent-table-row:hover td{background-color:var(--bg-tertiary)!important}.agents-toolbar[data-v-0e8504fe]{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.category-tabs[data-v-0e8504fe]{display:flex;gap:8px}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
.mode-list[data-v-55cd3e36]{display:flex;flex-direction:column;gap:12px}.mode-card[data-v-55cd3e36]{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-lg);padding:20px;display:flex;align-items:flex-start;gap:16px;cursor:pointer;transition:border-color .2s}.mode-card[data-v-55cd3e36]:hover{border-color:var(--border-hover)}.mode-card.mode-selected[data-v-55cd3e36]{border-color:var(--accent)}.mode-card.mode-locked[data-v-55cd3e36]{opacity:.5;cursor:not-allowed}.mode-card.mode-locked[data-v-55cd3e36]:hover{border-color:var(--border)}.mode-radio[data-v-55cd3e36]{width:20px;height:20px;border-radius:50%;border:2px solid var(--text-muted);display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:2px}.mode-radio.selected[data-v-55cd3e36]{border-color:var(--accent)}.mode-radio.selected[data-v-55cd3e36]:after{content:"";width:10px;height:10px;border-radius:50%;background:var(--accent)}.mode-info[data-v-55cd3e36]{flex:1}.mode-title[data-v-55cd3e36]{font-size:14px;font-weight:600;margin-bottom:2px;display:flex;align-items:center;gap:8px;color:var(--text-primary)}.mode-desc[data-v-55cd3e36]{font-size:12px;color:var(--text-secondary);margin-bottom:4px}.mode-badge[data-v-55cd3e36]{flex-shrink:0}.mode-lock-text[data-v-55cd3e36]{font-size:11px;color:var(--text-muted);font-style:italic;display:flex;align-items:center;gap:4px;margin-top:4px}
@@ -0,0 +1 @@
import{d as C,o as x,b as o,c as l,e as a,U as A,V as B,r as k,a3 as p,n as c,t as i,i as f,w as d,g,f as v,E as r,j as u}from"./index-BYp6OBwf.js";import{J as V,K as z}from"./admin-QG1MRyaa.js";import{_ as L}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./index-CMW9Tl_L.js";const N={class:"assignment-mode-page"},$={class:"mode-list"},q=["onClick"],E={class:"mode-info"},D={class:"mode-title"},j={class:"mode-desc"},F={key:0,class:"mode-lock-text"},I=C({__name:"AssignmentMode",setup(J){const _=k([{id:"manual",name:"手动接单",enabled:!0,locked:!1},{id:"round_robin",name:"轮询分配",enabled:!1,locked:!0,unlock_at:"阶段二"},{id:"least_active",name:"最少活跃优先",enabled:!1,locked:!0,unlock_at:"阶段二"},{id:"weighted",name:"加权比例分配",enabled:!1,locked:!0,unlock_at:"阶段三"},{id:"skill_match",name:"技能匹配分配",enabled:!1,locked:!0,unlock_at:"阶段三"},{id:"priority_queue",name:"优先队列",enabled:!1,locked:!0,unlock_at:"阶段三"}]),n=k("manual");x(async()=>{try{const s=(await V()).data.data;n.value=s.current_mode,s.modes&&s.modes.length>0&&(_.value=s.modes)}catch{}});async function y(e){if(e.locked){r.warning(`${e.name}暂未开放,${e.unlock_at||"后续版本"}解锁`);return}if(e.id!==n.value)try{await z(e.id),n.value=e.id,r.success(`已切换为「${e.name}`)}catch{r.error("切换分配模式失败")}}function b(e){return{manual:"坐席在待办列表中自行选择接单。AB 角色冗余设计,1 人即可承担。",round_robin:"按坐席列表顺序依次分配,循环往复。",least_active:"自动分配给当前活跃会话数最少的坐席。",weighted:"按坐席权重分配(如高级权重2、初级权重1)。",skill_match:"根据问题类别匹配坐席技能标签。",priority_queue:"紧急/阻断性问题优先路由到高级坐席/组长。"}[e]||""}function h(e){return{round_robin:"坐席人数不足3人,暂不需要",least_active:"坐席人数不足3人,暂不需要",weighted:"坐席人数不足5人,暂不需要",skill_match:"需坐席≥5人 + 技能标签体系成熟",priority_queue:"需坐席≥5人 + 紧急度评分上线"}[e]||"后续阶段解锁"}return(e,s)=>{const m=u("el-tag"),w=u("Lock"),M=u("el-icon");return o(),l("div",N,[s[1]||(s[1]=a("div",{class:"page-title"},"消息分配模式",-1)),s[2]||(s[2]=a("div",{class:"page-desc"},"当前坐席1人足以承担,手动接单完全满足。后续模式按坐席规模自动解锁。",-1)),a("div",$,[(o(!0),l(A,null,B(_.value,t=>(o(),l("div",{key:t.id,class:p(["mode-card",{"mode-selected":t.id===n.value,"mode-locked":t.locked}]),onClick:K=>y(t)},[a("div",{class:p(["mode-radio",{selected:t.id===n.value}])},null,2),a("div",E,[a("div",D,[c(i(t.name)+" ",1),t.id===n.value?(o(),f(m,{key:0,type:"success",size:"small",class:"mode-badge"},{default:d(()=>[...s[0]||(s[0]=[c(" 当前启用 ",-1)])]),_:1})):t.locked?(o(),f(m,{key:1,type:t.unlock_at==="阶段三"?"info":"warning",size:"small",class:"mode-badge"},{default:d(()=>[c(i(t.unlock_at||"后续"),1)]),_:2},1032,["type"])):g("",!0)]),a("div",j,i(b(t.id)),1),t.locked?(o(),l("div",F,[v(M,{size:12},{default:d(()=>[v(w)]),_:1}),c(" "+i(h(t.id)),1)])):g("",!0)])],10,q))),128))])])}}}),G=L(I,[["__scopeId","data-v-55cd3e36"]]);export{G as default};
@@ -0,0 +1 @@
.audit-logs[data-v-70572f09]{padding:0}.filter-bar[data-v-70572f09]{margin-bottom:16px;border:none;background:var(--bg-secondary)}.pagination-bar[data-v-70572f09]{display:flex;justify-content:flex-end;margin-top:16px}.detail-block[data-v-70572f09]{padding:8px 16px;background:var(--bg-secondary, #f5f7fa);border-radius:4px}.detail-title[data-v-70572f09]{font-size:12px;color:#909399;margin-bottom:6px}.detail-json[data-v-70572f09]{margin:0;white-space:pre-wrap;word-break:break-all;font-family:Menlo,Consolas,monospace;font-size:12px;line-height:1.5;max-height:280px;overflow:auto}.detail-meta[data-v-70572f09]{display:flex;gap:24px;margin-top:8px;font-size:12px;color:#909399}
@@ -0,0 +1 @@
import{d as j,o as E,b as g,c as f,f as o,w as n,W as F,i as P,e as d,r as w,y as z,E as K,j as i,a2 as O,h as $,q,U as J,V as Q,n as c,t as p,g as W}from"./index-BYp6OBwf.js";import{Q as G}from"./admin-QG1MRyaa.js";import{_ as H}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./index-CMW9Tl_L.js";const X={class:"audit-logs"},Z={class:"detail-block"},ee={class:"detail-json"},te={key:0,class:"detail-meta"},ae={class:"pagination-bar"},oe=j({__name:"AuditLogs",setup(le){const m=w(!1),y=w([]),l=z({employeeId:"",action:"",dateRange:null}),s=z({page:1,pageSize:50,total:0}),V=["config_change","login","logout","permission_change","role_assign","role_revoke","agent_create","agent_update","agent_delete","integration_update"],S=[{text:"最近24小时",value:()=>{const a=new Date,e=new Date;return e.setTime(e.getTime()-3600*1e3*24),[e,a]}},{text:"最近7天",value:()=>{const a=new Date,e=new Date;return e.setTime(e.getTime()-3600*1e3*24*7),[e,a]}}];function D(){const a={page:s.page,page_size:s.pageSize};return l.employeeId&&(a.employee_id=l.employeeId),l.action&&(a.action=l.action),l.dateRange&&l.dateRange.length===2&&(a.from=`${l.dateRange[0]}T00:00:00`,a.to=`${l.dateRange[1]}T23:59:59`),a}async function u(){m.value=!0;try{const{data:a}=await G(D());a.code===0&&(y.value=a.data.items||[],s.total=a.data.total||0)}catch{K.error("加载安全审计日志失败")}finally{m.value=!1}}function v(){s.page=1,u()}function k(){l.employeeId="",l.action="",l.dateRange=null,s.page=1,u()}function x(){s.page=1,u()}function C(a){if(!a)return"—";const e=new Date(a);return isNaN(e.getTime())?a:e.toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})}function I(a){if(a==null)return"—";try{return JSON.stringify(a,null,2)}catch{return String(a)}}return E(()=>u()),(a,e)=>{const T=i("el-input"),_=i("el-form-item"),N=i("el-option"),R=i("el-select"),U=i("el-date-picker"),b=i("el-button"),L=i("el-form"),M=i("el-card"),r=i("el-table-column"),h=i("el-tag"),A=i("el-table"),B=i("el-pagination"),Y=O("loading");return g(),f("div",X,[o(M,{class:"filter-bar",shadow:"never"},{default:n(()=>[o(L,{inline:!0,onSubmit:e[3]||(e[3]=$(()=>{},["prevent"]))},{default:n(()=>[o(_,{label:"操作人"},{default:n(()=>[o(T,{modelValue:l.employeeId,"onUpdate:modelValue":e[0]||(e[0]=t=>l.employeeId=t),placeholder:"employee_id",clearable:"",style:{width:"200px"},onKeyup:q(v,["enter"])},null,8,["modelValue"])]),_:1}),o(_,{label:"操作类型"},{default:n(()=>[o(R,{modelValue:l.action,"onUpdate:modelValue":e[1]||(e[1]=t=>l.action=t),placeholder:"全部",clearable:"",filterable:"","allow-create":"","default-first-option":"",style:{width:"200px"}},{default:n(()=>[(g(),f(J,null,Q(V,t=>o(N,{key:t,label:t,value:t},null,8,["label","value"])),64))]),_:1},8,["modelValue"])]),_:1}),o(_,{label:"时间范围"},{default:n(()=>[o(U,{modelValue:l.dateRange,"onUpdate:modelValue":e[2]||(e[2]=t=>l.dateRange=t),type:"daterange","range-separator":"至","start-placeholder":"开始日期","end-placeholder":"结束日期","value-format":"YYYY-MM-DD",shortcuts:S},null,8,["modelValue"])]),_:1}),o(_,null,{default:n(()=>[o(b,{type:"primary",onClick:v},{default:n(()=>[...e[6]||(e[6]=[c("查询",-1)])]),_:1}),o(b,{onClick:k},{default:n(()=>[...e[7]||(e[7]=[c("重置",-1)])]),_:1})]),_:1})]),_:1})]),_:1}),F((g(),P(A,{data:y.value,stripe:"",style:{width:"100%"}},{default:n(()=>[o(r,{type:"expand"},{default:n(({row:t})=>[d("div",Z,[e[8]||(e[8]=d("div",{class:"detail-title"},"详情 (details)",-1)),d("pre",ee,p(I(t.details)),1),t.resource_id?(g(),f("div",te,[d("span",null,"资源ID"+p(t.resource_id),1),d("span",null,"UA"+p(t.user_agent||"—"),1)])):W("",!0)])]),_:1}),o(r,{prop:"created_at",label:"时间",width:"170"},{default:n(({row:t})=>[c(p(C(t.created_at)),1)]),_:1}),o(r,{prop:"employee_id",label:"操作人",width:"130","show-overflow-tooltip":""}),o(r,{prop:"action",label:"操作类型",width:"150"},{default:n(({row:t})=>[o(h,{size:"small",effect:"plain"},{default:n(()=>[c(p(t.action||"—"),1)]),_:2},1024)]),_:1}),o(r,{prop:"resource",label:"资源",width:"150","show-overflow-tooltip":""}),o(r,{prop:"result",label:"结果",width:"90"},{default:n(({row:t})=>[o(h,{size:"small",type:t.result==="success"?"success":"danger"},{default:n(()=>[c(p(t.result||"—"),1)]),_:2},1032,["type"])]),_:1}),o(r,{prop:"ip_address",label:"IP",width:"140","show-overflow-tooltip":""})]),_:1},8,["data"])),[[Y,m.value]]),d("div",ae,[o(B,{"current-page":s.page,"onUpdate:currentPage":e[4]||(e[4]=t=>s.page=t),"page-size":s.pageSize,"onUpdate:pageSize":e[5]||(e[5]=t=>s.pageSize=t),total:s.total,"page-sizes":[20,50,100],layout:"total, sizes, prev, pager, next, jumper",onCurrentChange:u,onSizeChange:x},null,8,["current-page","page-size","total"])])])}}}),de=H(oe,[["__scopeId","data-v-70572f09"]]);export{de as default};
@@ -0,0 +1 @@
import{S as o}from"./StatCard-D9ZLdGBA.js";import{u as w}from"./automation-xfwMXSBH.js";import{d as g,o as k,b as c,c as i,e as v,k as x,f as a,U as M,w as d,T as _,j as l,n as h}from"./index-BYp6OBwf.js";import{_ as y}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./index-CMW9Tl_L.js";const C={class:"auto-metrics"},A={key:0,class:"loading-state"},B={class:"stat-grid"},N=g({__name:"AutoMetrics",setup(S){const n=w(),e=_(()=>n.metrics),m=_(()=>!e.value||e.value.total_sessions===0?"解决率 -":`解决率 ${Math.round(e.value.resolved_sessions/e.value.total_sessions*100)}%`),p=_(()=>{var s;const r=((s=e.value)==null?void 0:s.by_scenario)||{};return Object.entries(r).map(([u,t])=>({scenario:u,count:t}))});return k(()=>{n.loadMetrics()}),(r,s)=>{const u=l("el-skeleton"),t=l("el-table-column"),b=l("el-table"),f=l("el-card");return c(),i("div",C,[s[1]||(s[1]=v("div",{class:"page-title"},"自动化运营指标",-1)),s[2]||(s[2]=v("div",{class:"page-desc"},"阶段5 自动化闭环核心指标看板,数据实时反映自动化处置成效。",-1)),x(n).metrics?(c(),i(M,{key:1},[v("div",B,[a(o,{label:"自动化会话总数",value:e.value.total_sessions,subtitle:m.value,"value-color":"var(--accent)"},null,8,["value","subtitle"]),a(o,{label:"已解决",value:e.value.resolved_sessions,"value-color":"var(--success)"},null,8,["value"]),a(o,{label:"转人工",value:e.value.handoff_sessions,"value-color":"var(--warning)"},null,8,["value"]),a(o,{label:"异常会话",value:e.value.error_sessions,"value-color":"var(--danger)"},null,8,["value"]),a(o,{label:"自动执行动作",value:e.value.auto_executed_actions},null,8,["value"]),a(o,{label:"需审批动作",value:e.value.approval_required_actions,"value-color":"var(--warning)"},null,8,["value"])]),a(f,{class:"breakdown",shadow:"never"},{header:d(()=>[...s[0]||(s[0]=[h("按场景分布(会话数)",-1)])]),default:d(()=>[a(b,{data:p.value,stripe:""},{default:d(()=>[a(t,{prop:"scenario",label:"场景"}),a(t,{prop:"count",label:"会话数",width:"140"})]),_:1},8,["data"])]),_:1})],64)):(c(),i("div",A,[a(u,{rows:6,animated:""})]))])}}}),E=y(N,[["__scopeId","data-v-f6392139"]]);export{E as default};
@@ -0,0 +1 @@
.auto-metrics[data-v-f6392139]{padding:4px}.page-title[data-v-f6392139]{font-size:20px;font-weight:600;color:var(--text-primary)}.page-desc[data-v-f6392139]{color:var(--text-secondary);font-size:13px;margin:6px 0 16px}.stat-grid[data-v-f6392139]{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:16px;margin-bottom:16px}.breakdown[data-v-f6392139]{margin-top:8px}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
.config-group-card[data-v-fdfcb9b4]{background-color:var(--bg-secondary);border-color:var(--border)}.config-group-header[data-v-fdfcb9b4]{display:flex;align-items:center;justify-content:space-between}.config-group-title[data-v-fdfcb9b4]{display:flex;align-items:center;font-size:14px;font-weight:600;color:var(--text-primary)}.config-group-desc[data-v-fdfcb9b4]{font-size:12px;color:var(--text-secondary);margin-top:6px}.config-items[data-v-fdfcb9b4]{display:flex;flex-direction:column}.config-item[data-v-fdfcb9b4]{display:flex;align-items:center;justify-content:space-between;padding:10px 0;border-top:1px solid var(--border)}.config-item[data-v-fdfcb9b4]:first-child{border-top:none;padding-top:0}.config-item-info[data-v-fdfcb9b4]{display:flex;flex-direction:column;gap:2px}.config-item-name[data-v-fdfcb9b4]{font-size:13px;color:var(--text-primary)}.config-item-stage[data-v-fdfcb9b4]{font-size:11px;color:var(--text-muted)}.config-item-control[data-v-fdfcb9b4]{display:flex;align-items:center;gap:8px;flex-shrink:0}.config-json-preview[data-v-fdfcb9b4]{font-size:11px;max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.loading-state[data-v-f5be3c67]{padding:24px 0}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
.health-list[data-v-5d2e4267]{padding:16px}.health-item[data-v-5d2e4267]{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.health-item[data-v-5d2e4267]:last-child{margin-bottom:0}.health-name[data-v-5d2e4267]{font-size:13px;color:var(--text-primary)}.dashboard-table-row:hover td{background-color:var(--bg-tertiary)!important}
@@ -0,0 +1 @@
.evaluation-stats[data-v-6dbba9b5]{padding:0}.stats-cards[data-v-6dbba9b5]{display:grid;grid-template-columns:repeat(5,1fr);gap:16px;margin-bottom:20px}.stat-card[data-v-6dbba9b5]{background:var(--bg-card);border-radius:8px;padding:20px;display:flex;align-items:center;gap:16px;border:1px solid var(--border)}.stat-card-icon[data-v-6dbba9b5]{width:48px;height:48px;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:24px;color:#fff}.total-icon[data-v-6dbba9b5]{background:linear-gradient(135deg,#409eff,#67b3ff)}.star-icon[data-v-6dbba9b5]{background:linear-gradient(135deg,#e6a23c,#f0c78a)}.satisfied-icon[data-v-6dbba9b5]{background:linear-gradient(135deg,#67c23a,#85ce61)}.neutral-icon[data-v-6dbba9b5]{background:linear-gradient(135deg,#e6a23c,#ebb563)}.dissatisfied-icon[data-v-6dbba9b5]{background:linear-gradient(135deg,#f56c6c,#f78989)}.stat-card-content[data-v-6dbba9b5]{flex:1}.stat-card-value[data-v-6dbba9b5]{font-size:28px;font-weight:600;color:var(--text-primary);line-height:1.2}.stat-card-label[data-v-6dbba9b5]{font-size:13px;color:var(--text-secondary);margin-top:4px}.detail-section[data-v-6dbba9b5]{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:20px}.distribution-card[data-v-6dbba9b5]{border-radius:8px}.card-header[data-v-6dbba9b5]{font-size:15px;font-weight:500;color:var(--text-primary)}.star-bars[data-v-6dbba9b5],.emoji-bars[data-v-6dbba9b5]{display:flex;flex-direction:column;gap:12px}.star-bar-item[data-v-6dbba9b5],.emoji-bar-item[data-v-6dbba9b5]{display:grid;grid-template-columns:50px 1fr 120px;align-items:center;gap:12px}.star-label[data-v-6dbba9b5],.emoji-label[data-v-6dbba9b5]{font-size:13px;color:var(--text-secondary);display:flex;align-items:center;gap:4px}.star-count[data-v-6dbba9b5],.emoji-count[data-v-6dbba9b5]{font-size:13px;color:var(--text-secondary);text-align:right}.table-card[data-v-6dbba9b5]{border-radius:8px}.pagination-container[data-v-6dbba9b5]{margin-top:20px;display:flex;justify-content:flex-end}@media (max-width: 1200px){.stats-cards[data-v-6dbba9b5]{grid-template-columns:repeat(3,1fr)}}@media (max-width: 768px){.stats-cards[data-v-6dbba9b5]{grid-template-columns:repeat(2,1fr)}.detail-section[data-v-6dbba9b5]{grid-template-columns:1fr}.star-bar-item[data-v-6dbba9b5],.emoji-bar-item[data-v-6dbba9b5]{grid-template-columns:40px 1fr}.star-count[data-v-6dbba9b5],.emoji-count[data-v-6dbba9b5]{display:none}}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
.integration-card[data-v-468027ce]{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-lg);padding:20px;text-align:center;transition:border-color .2s}.integration-card[data-v-468027ce]:hover{border-color:var(--border-hover)}.integration-card.is-configurable[data-v-468027ce]{border-color:var(--accent);border-opacity:.3}.integration-icon[data-v-468027ce]{width:48px;height:48px;border-radius:12px;display:flex;align-items:center;justify-content:center;margin:0 auto 12px}.integration-name[data-v-468027ce]{font-size:14px;font-weight:600;margin-bottom:4px;color:var(--text-primary)}.integration-status[data-v-468027ce]{margin-bottom:12px}.integration-detail[data-v-468027ce]{font-size:11px;color:var(--text-muted);margin-bottom:12px;min-height:32px}.config-info[data-v-468027ce]{margin-bottom:2px}.integration-actions[data-v-468027ce]{display:flex;justify-content:center;gap:8px}.loading-state[data-v-4437a7cc]{padding:24px 0}.form-hint[data-v-4437a7cc]{font-size:12px;color:var(--text-muted);margin-top:4px;line-height:1.4}.test-result[data-v-4437a7cc]{text-align:center}.test-detail[data-v-4437a7cc]{margin-top:8px;font-size:14px;color:var(--text-secondary)}.test-debug-hint[data-v-4437a7cc]{display:flex;align-items:flex-start;gap:6px;margin-top:12px;padding:10px 12px;background:#f59e0b14;border:1px solid rgba(245,158,11,.2);border-radius:6px;font-size:12px;color:#d97706;text-align:left;line-height:1.5}.test-debug-info[data-v-4437a7cc]{margin-top:8px;padding:8px 12px;background:var(--bg-tertiary);border-radius:6px;font-size:11px;color:var(--text-muted);text-align:left;font-family:monospace;line-height:1.6}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
.knowledge-toolbar[data-v-8f2a47d4]{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;gap:16px;flex-wrap:wrap}.category-tabs[data-v-8f2a47d4]{display:flex;gap:8px;flex-wrap:wrap;flex:1}.knowledge-list[data-v-8f2a47d4]{display:flex;flex-direction:column;gap:12px}.knowledge-card[data-v-8f2a47d4]{margin-bottom:0}.card-header[data-v-8f2a47d4]{display:flex;justify-content:space-between;align-items:center}.card-title[data-v-8f2a47d4]{display:flex;align-items:center;gap:8px}.title-text[data-v-8f2a47d4]{font-weight:500}.card-actions[data-v-8f2a47d4]{display:flex;gap:8px}.card-content[data-v-8f2a47d4]{color:#666;font-size:14px;line-height:1.6}.card-content p[data-v-8f2a47d4]{margin:0;white-space:pre-wrap}.card-footer[data-v-8f2a47d4]{display:flex;justify-content:space-between;align-items:center}.tag-item[data-v-8f2a47d4]{margin-right:4px}.stats[data-v-8f2a47d4]{display:flex;align-items:center;gap:4px;color:#999;font-size:12px}.loading-state[data-v-8f2a47d4]{padding:24px 0}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
.knowledge-iteration-page[data-v-014b6235]{padding:20px}.knowledge-iteration-page__header[data-v-014b6235]{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.knowledge-iteration-page__header h2[data-v-014b6235]{margin:0;font-size:20px;font-weight:600}.knowledge-iteration-page__header-actions[data-v-014b6235]{display:flex;gap:8px}.knowledge-iteration-page__stats-bar[data-v-014b6235]{display:flex;gap:16px;margin-bottom:16px}.knowledge-iteration-page__stat-item[data-v-014b6235]{display:flex;flex-direction:column;align-items:center;padding:10px 20px;background:#f5f7fa;border-radius:8px;min-width:80px}.knowledge-iteration-page__stat-value[data-v-014b6235]{font-size:24px;font-weight:700;color:#303133}.knowledge-iteration-page__stat-label[data-v-014b6235]{font-size:12px;color:#909399;margin-top:2px}.knowledge-iteration-page__filters[data-v-014b6235]{display:flex;gap:10px;margin-bottom:16px;align-items:center;flex-wrap:wrap}.knowledge-iteration-page__table[data-v-014b6235]{background:#fff;border-radius:8px;overflow:hidden}.knowledge-iteration-page__pagination[data-v-014b6235]{display:flex;justify-content:center;margin-top:20px}.knowledge-iteration-page__graph-filters[data-v-014b6235]{display:flex;gap:10px;align-items:center;margin-bottom:16px}.knowledge-iteration-page__graph-info[data-v-014b6235]{font-size:13px;color:#909399}.knowledge-iteration-page__graph-container[data-v-014b6235]{width:100%;height:550px;background:#fff;border-radius:8px;border:1px solid #e4e7ed}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
.knowledge-suggestions-page[data-v-b4848931]{padding:20px}.page-title[data-v-b4848931]{font-size:20px;font-weight:600;margin-bottom:8px}.page-desc[data-v-b4848931]{color:var(--text-secondary, #909399);margin-bottom:20px}.stats-cards[data-v-b4848931]{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:20px}.stat-card[data-v-b4848931]{text-align:center}.stat-card-content[data-v-b4848931]{padding:10px 0}.stat-value[data-v-b4848931]{font-size:28px;font-weight:600;color:var(--el-color-primary)}.stat-card-warning .stat-value[data-v-b4848931]{color:var(--el-color-warning)}.stat-card-success .stat-value[data-v-b4848931]{color:var(--el-color-success)}.stat-card-danger .stat-value[data-v-b4848931]{color:var(--el-color-danger)}.stat-label[data-v-b4848931]{font-size:14px;color:var(--text-secondary, #909399);margin-top:4px}.toolbar[data-v-b4848931]{display:flex;justify-content:space-between;margin-bottom:16px}.pagination-wrapper[data-v-b4848931]{display:flex;justify-content:flex-end;margin-top:16px}.content-box[data-v-b4848931]{max-height:200px;overflow-y:auto;padding:8px;background:var(--el-fill-color-light);border-radius:4px;white-space:pre-wrap}.mr-2[data-v-b4848931]{margin-right:8px}
@@ -0,0 +1 @@
.login-page[data-v-b50237c1]{min-height:100vh;display:flex;align-items:center;justify-content:center;position:relative;background:var(--bg-primary)}.login-bg[data-v-b50237c1]{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}.login-bg-gradient[data-v-b50237c1]{position:absolute;top:-50%;left:-50%;width:200%;height:200%;background:radial-gradient(ellipse at center,rgba(59,130,246,.08) 0%,transparent 60%);animation:rotate-b50237c1 30s linear infinite}@keyframes rotate-b50237c1{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.login-card[data-v-b50237c1]{position:relative;z-index:1;width:400px;padding:40px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:0 4px 24px #0000004d}.login-logo[data-v-b50237c1]{text-align:center;margin-bottom:32px}.login-logo-icon[data-v-b50237c1]{width:56px;height:56px;background:linear-gradient(135deg,#3b82f6,#8b5cf6);border-radius:14px;display:flex;align-items:center;justify-content:center;color:#fff;margin:0 auto 16px}.login-title[data-v-b50237c1]{font-size:22px;font-weight:700;color:var(--text-primary);margin:0 0 4px}.login-subtitle[data-v-b50237c1]{font-size:13px;color:var(--text-muted);margin:0}.login-btn[data-v-b50237c1]{width:100%;margin-top:8px}.login-tips[data-v-b50237c1]{display:flex;align-items:center;justify-content:center;gap:6px;margin-top:20px;font-size:12px;color:var(--text-muted)}.login-options[data-v-b50237c1]{text-align:center;padding:20px 0}.login-options-title[data-v-b50237c1]{font-size:14px;color:var(--text-secondary);margin-bottom:16px}.login-options-btns[data-v-b50237c1]{display:flex;flex-direction:column;gap:12px}.option-btn[data-v-b50237c1]{width:100%;height:44px;font-size:14px}.qr-login[data-v-b50237c1]{text-align:center;padding:20px 0}.qr-title[data-v-b50237c1]{font-size:16px;color:var(--text-primary);margin-bottom:16px}.qr-code[data-v-b50237c1]{width:180px;height:180px;margin:0 auto 16px;background:var(--bg-secondary);border-radius:8px;display:flex;align-items:center;justify-content:center}.qr-code img[data-v-b50237c1]{max-width:100%;max-height:100%}.qr-loading[data-v-b50237c1]{color:var(--text-muted)}.qr-hint[data-v-b50237c1]{font-size:13px;color:var(--text-muted);margin-bottom:12px}.qr-container[data-v-b50237c1]{margin-bottom:12px}.qr-error[data-v-b50237c1]{color:var(--text-muted);text-align:center;padding:20px 0}.divider[data-v-b50237c1]{display:flex;align-items:center;margin:16px 0;color:var(--text-muted);font-size:13px}.divider[data-v-b50237c1]:before,.divider[data-v-b50237c1]:after{content:"";flex:1;border-bottom:1px solid var(--border)}.divider span[data-v-b50237c1]{padding:0 12px}.password-login-btn[data-v-b50237c1]{width:100%}.password-login[data-v-b50237c1]{margin-top:8px}
File diff suppressed because one or more lines are too long
@@ -0,0 +1,4 @@
import{d as H,o as L,b as r,c,e as n,f as o,q as W,k as w,aa as P,w as l,a7 as B,t as p,W as A,i as z,r as T,y as O,T as U,E as M,j as m,a2 as G,n as y,U as J,V as Q,g as X,Y as Z}from"./index-BYp6OBwf.js";import{a as N}from"./index-CMW9Tl_L.js";import{_ as ee}from"./_plugin-vue_export-helper-DlAUqK2U.js";async function te(k={}){return await N.get("/auth/otp-admin-users",{params:k})}async function ae(k){return await N.post(`/auth/otp-admin-reset/${encodeURIComponent(k)}`)}const se={class:"mfa-manage-page"},ne={class:"filter-bar"},oe={class:"stat-cards"},le={class:"stat-card"},ie={class:"stat-value"},de={class:"stat-card stat-card--success"},re={class:"stat-value"},ue={class:"stat-card stat-card--info"},ce={class:"stat-value"},pe={class:"data-table-wrapper"},_e={key:0},me={key:1,class:"text-muted"},fe={key:0,class:"text-muted"},ge={key:0},ve={key:1,class:"text-muted"},ye={key:0},be={key:1,class:"text-muted"},he={key:1,class:"text-muted"},ke={class:"pagination-bar"},xe=H({__name:"MfaManage",setup(k){const b=T(!1),h=T([]),x=T(""),u=O({keyword:"",bound:""}),i=O({page:1,pageSize:20,total:0}),D=U(()=>h.value.filter(s=>s.mfa_enabled).length),E=U(()=>h.value.filter(s=>!s.mfa_enabled).length);async function f(){var s,e;b.value=!0;try{const a={page:i.page,page_size:i.pageSize};u.keyword.trim()&&(a.keyword=u.keyword.trim()),u.bound&&(a.bound=u.bound);const d=await te(a);h.value=d.items||[],i.total=d.total||0}catch(a){h.value=[],i.total=0;const d=((e=(s=a==null?void 0:a.response)==null?void 0:s.data)==null?void 0:e.message)||(a==null?void 0:a.message)||"加载用户 OTP 列表失败";M.error(d)}finally{b.value=!1}}function S(){i.page=1,f()}function R(){u.keyword="",u.bound="",i.page=1,f()}function I(){i.page=1,f()}async function j(s){var a,d;const e=s.name||s.employee_id;try{await Z.confirm(`确认清除 OTP 绑定?
坐席「${e} (${s.employee_id})」的 OTP 二次验证将被清除。
该坐席下次登录时需重新绑定。`,"清除 OTP 绑定确认",{type:"warning",confirmButtonText:"确认清除",cancelButtonText:"取消",confirmButtonClass:"el-button--danger"})}catch{return}x.value=s.employee_id;try{await ae(s.employee_id),M.success(`已清除 ${e} 的 OTP 绑定`),await f()}catch(_){const v=((d=(a=_==null?void 0:_.response)==null?void 0:a.data)==null?void 0:d.message)||(_==null?void 0:_.message)||"清除失败";M.error(v)}finally{x.value=""}}function V(s){if(!s)return"—";const e=new Date(s);if(isNaN(e.getTime()))return s;const a=d=>String(d).padStart(2,"0");return`${e.getFullYear()}-${a(e.getMonth()+1)}-${a(e.getDate())} ${a(e.getHours())}:${a(e.getMinutes())}`}function F(s){return{user:"info",agent:"success",admin:"danger"}[s]||"info"}return L(()=>{f()}),(s,e)=>{const a=m("el-input"),d=m("el-option"),_=m("el-select"),v=m("el-button"),g=m("el-table-column"),$=m("el-tag"),K=m("el-table"),Y=m("el-pagination"),q=G("loading");return r(),c("div",se,[e[10]||(e[10]=n("div",{class:"page-header"},[n("div",null,[n("div",{class:"page-title"},"OTP 管理"),n("div",{class:"page-desc"},"管理所有用户的动态令牌(OTP)绑定状态,丢手机兜底清除")])],-1)),n("div",ne,[o(a,{modelValue:u.keyword,"onUpdate:modelValue":e[0]||(e[0]=t=>u.keyword=t),placeholder:"搜索员工姓名 / 员工账号","prefix-icon":w(P),clearable:"",style:{width:"260px"},onKeyup:W(S,["enter"])},null,8,["modelValue","prefix-icon"]),o(_,{modelValue:u.bound,"onUpdate:modelValue":e[1]||(e[1]=t=>u.bound=t),placeholder:"绑定状态",clearable:"",style:{width:"140px"}},{default:l(()=>[o(d,{label:"全部",value:""}),o(d,{label:"已绑定",value:"true"}),o(d,{label:"未绑定",value:"false"})]),_:1},8,["modelValue"]),o(v,{type:"primary",icon:w(P),onClick:S},{default:l(()=>[...e[4]||(e[4]=[y("搜索",-1)])]),_:1},8,["icon"]),o(v,{icon:w(B),onClick:R},{default:l(()=>[...e[5]||(e[5]=[y("重置",-1)])]),_:1},8,["icon"]),o(v,{icon:w(B),onClick:f},{default:l(()=>[...e[6]||(e[6]=[y("刷新",-1)])]),_:1},8,["icon"])]),n("div",oe,[n("div",le,[e[7]||(e[7]=n("div",{class:"stat-label"},"总用户数",-1)),n("div",ie,p(i.total),1)]),n("div",de,[e[8]||(e[8]=n("div",{class:"stat-label"},"已绑定",-1)),n("div",re,p(D.value),1)]),n("div",ue,[e[9]||(e[9]=n("div",{class:"stat-label"},"未绑定",-1)),n("div",ce,p(E.value),1)])]),n("div",pe,[A((r(),z(K,{data:h.value,stripe:"",size:"small","empty-text":"暂无用户记录"},{default:l(()=>[o(g,{prop:"employee_id",label:"员工账号","min-width":"140"}),o(g,{prop:"name",label:"姓名","min-width":"100"},{default:l(({row:t})=>[t.name?(r(),c("span",_e,p(t.name),1)):(r(),c("span",me,"—"))]),_:1}),o(g,{prop:"roles",label:"角色","min-width":"120"},{default:l(({row:t})=>[(r(!0),c(J,null,Q(t.roles||[],C=>(r(),z($,{key:C,size:"small",type:F(C),class:"role-tag"},{default:l(()=>[y(p(C),1)]),_:2},1032,["type"]))),128)),!t.roles||t.roles.length===0?(r(),c("span",fe,"—")):X("",!0)]),_:1}),o(g,{label:"OTP 状态","min-width":"100"},{default:l(({row:t})=>[o($,{type:t.mfa_enabled?"success":"info",size:"small"},{default:l(()=>[y(p(t.mfa_enabled?"已绑定":"未绑定"),1)]),_:2},1032,["type"])]),_:1}),o(g,{prop:"mfa_bound_at",label:"首次绑定时间","min-width":"160"},{default:l(({row:t})=>[t.mfa_bound_at?(r(),c("span",ge,p(V(t.mfa_bound_at)),1)):(r(),c("span",ve,"—"))]),_:1}),o(g,{prop:"last_verified_at",label:"最近验证时间","min-width":"160"},{default:l(({row:t})=>[t.last_verified_at?(r(),c("span",ye,p(V(t.last_verified_at)),1)):(r(),c("span",be,"—"))]),_:1}),o(g,{label:"操作",width:"140",fixed:"right"},{default:l(({row:t})=>[t.mfa_enabled?(r(),z(v,{key:0,type:"danger",size:"small",link:"",disabled:x.value===t.employee_id,onClick:C=>j(t)},{default:l(()=>[y(p(x.value===t.employee_id?"清除中...":"清除绑定"),1)]),_:2},1032,["disabled","onClick"])):(r(),c("span",he,"无需操作"))]),_:1})]),_:1},8,["data"])),[[q,b.value]])]),n("div",ke,[o(Y,{"current-page":i.page,"onUpdate:currentPage":e[2]||(e[2]=t=>i.page=t),"page-size":i.pageSize,"onUpdate:pageSize":e[3]||(e[3]=t=>i.pageSize=t),total:i.total,"page-sizes":[10,20,50,100],layout:"total, sizes, prev, pager, next, jumper",onCurrentChange:f,onSizeChange:I},null,8,["current-page","page-size","total"])])])}}}),Te=ee(xe,[["__scopeId","data-v-28b977a1"]]);export{Te as default};
@@ -0,0 +1 @@
.page-header[data-v-28b977a1]{margin-bottom:20px}.page-title[data-v-28b977a1]{font-size:18px;font-weight:600;color:var(--text-primary);margin-bottom:4px}.page-desc[data-v-28b977a1]{font-size:13px;color:var(--text-muted)}.filter-bar[data-v-28b977a1]{display:flex;gap:12px;align-items:center;margin-bottom:16px}.stat-cards[data-v-28b977a1]{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px;margin-bottom:20px}.stat-card[data-v-28b977a1]{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-lg);padding:16px 20px;transition:border-color .2s}.stat-card[data-v-28b977a1]:hover{border-color:var(--border-hover)}.stat-card--success[data-v-28b977a1]{border-left:3px solid var(--success)}.stat-card--info[data-v-28b977a1]{border-left:3px solid var(--text-muted)}.stat-label[data-v-28b977a1]{font-size:12px;color:var(--text-muted);margin-bottom:6px}.stat-value[data-v-28b977a1]{font-size:22px;font-weight:600;color:var(--text-primary);line-height:1.2}.data-table-wrapper[data-v-28b977a1]{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;margin-bottom:16px}.role-tag[data-v-28b977a1]{margin-right:4px}.text-muted[data-v-28b977a1]{color:var(--text-muted);font-size:12px}.pagination-bar[data-v-28b977a1]{display:flex;justify-content:flex-end}
@@ -0,0 +1 @@
.session-id[data-v-6060934e]{font-family:SF Mono,Fira Code,monospace;color:var(--accent)}.monitor-table-row:hover td{background-color:var(--bg-tertiary)!important}
@@ -0,0 +1 @@
import{S as c}from"./StatCard-D9ZLdGBA.js";import{L as S}from"./admin-QG1MRyaa.js";import{d as h,o as D,b as p,c as M,e as s,f as t,w as r,W as x,i as I,r as y,y as k,j as v,a2 as q,n as f,t as i}from"./index-BYp6OBwf.js";import{_ as E}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./index-CMW9Tl_L.js";const O={class:"monitor-page"},P={class:"stats-grid"},z={class:"table-wrapper"},B={class:"table-header-row"},N={class:"session-id"},T=h({__name:"Monitor",setup(V){const u=y(!1),n=k({in_progress:0,queued:0,resolved_today:0,alerts:0}),d=y([]);D(async()=>{u.value=!0;try{const e=(await S()).data.data;Object.assign(n,e.stats),d.value=e.items}catch{n.in_progress=5,n.queued=0,n.resolved_today=42,n.alerts=1,d.value=[{id:"#C042",employee_name:"李明 (EMP101)",status:"serving",assigned_agent_name:"宋献",urgency_score:8,created_at:new Date(Date.now()-5*6e4).toISOString(),last_message_summary:"电脑无法开机"},{id:"#C041",employee_name:"赵刚 (EMP205)",status:"serving",assigned_agent_name:"宋献",urgency_score:14,created_at:new Date(Date.now()-12*6e4).toISOString(),last_message_summary:"VPN连接失败"},{id:"#C040",employee_name:"孙芳 (EMP312)",status:"timeout",assigned_agent_name:"王丽",urgency_score:6,created_at:new Date(Date.now()-8*6e4).toISOString(),last_message_summary:"打印机脱机"},{id:"#C039",employee_name:"周磊 (EMP088)",status:"serving",assigned_agent_name:"宋献",urgency_score:4,created_at:new Date(Date.now()-3*6e4).toISOString(),last_message_summary:"邮箱登录失败"},{id:"#C038",employee_name:"吴婷 (EMP156)",status:"ai_chatting",assigned_agent_name:"AI 助手",urgency_score:2,created_at:new Date(Date.now()-1*6e4).toISOString(),last_message_summary:"密码重置请求"}]}finally{u.value=!1}});function w(l){try{const e=new Date(l.created_at).getTime(),o=Date.now()-e,m=Math.floor(o/6e4),g=Math.floor(o%6e4/1e3);return`${m}${g}`}catch{return"-"}}function b(l){switch(l){case"serving":return"success";case"timeout":return"warning";case"ai_chatting":return"primary";case"queued":return"info";default:return"info"}}function C(l){switch(l){case"serving":return"进行中";case"timeout":return"超时未响应";case"ai_chatting":return"AI 对话中";case"queued":return"等待中";default:return l}}return(l,e)=>{const _=v("el-tag"),o=v("el-table-column"),m=v("el-table"),g=q("loading");return p(),M("div",O,[e[2]||(e[2]=s("div",{class:"page-title"},"会话监控",-1)),e[3]||(e[3]=s("div",{class:"page-desc"}," 实时查看坐席工作状态、会话队列、异常告警。阶段二功能,当前为 Demo 预览。 ",-1)),s("div",P,[t(c,{label:"进行中会话",value:n.in_progress,valueColor:"var(--accent)",icon:"ChatLineSquare",iconColor:"var(--accent)"},null,8,["value"]),t(c,{label:"等待中",value:n.queued,valueColor:"var(--warning)",icon:"Clock",iconColor:"var(--warning)"},null,8,["value"]),t(c,{label:"今日已结单",value:n.resolved_today,valueColor:"var(--success)",icon:"CircleCheckFilled",iconColor:"var(--success)"},null,8,["value"]),t(c,{label:"异常告警",value:n.alerts,valueColor:"var(--danger)",icon:"WarningFilled",iconColor:"var(--danger)"},null,8,["value"])]),s("div",z,[s("div",B,[e[1]||(e[1]=s("div",{class:"table-title"},"实时会话",-1)),t(_,{type:"primary",size:"small"},{default:r(()=>[...e[0]||(e[0]=[f("Demo 预览",-1)])]),_:1})]),x((p(),I(m,{data:d.value,style:{width:"100%"},"header-cell-style":{background:"var(--bg-tertiary)",color:"var(--text-secondary)",fontSize:"12px"},"cell-style":{color:"var(--text-primary)",fontSize:"13px"},"row-class-name":"monitor-table-row","element-loading-text":"正在加载会话数据..."},{default:r(()=>[t(o,{label:"会话ID",width:"80"},{default:r(({row:a})=>[s("span",N,i(a.id),1)]),_:1}),t(o,{label:"员工","min-width":"160"},{default:r(({row:a})=>[s("span",null,i(a.employee_name),1)]),_:1}),t(o,{label:"坐席",width:"100"},{default:r(({row:a})=>[s("span",null,i(a.assigned_agent_name),1)]),_:1}),t(o,{label:"持续时长",width:"100"},{default:r(({row:a})=>[s("span",null,i(w(a)),1)]),_:1}),t(o,{label:"紧急度",width:"80",align:"center"},{default:r(({row:a})=>[s("span",null,i(a.urgency_score||"-"),1)]),_:1}),t(o,{label:"状态",width:"120"},{default:r(({row:a})=>[t(_,{type:b(a.status),size:"small"},{default:r(()=>[f(i(C(a.status)),1)]),_:2},1032,["type"])]),_:1})]),_:1},8,["data"])),[[g,u.value]])])])}}}),$=E(T,[["__scopeId","data-v-6060934e"]]);export{$ as default};
@@ -0,0 +1 @@
.matrix-page[data-v-6385fdb6]{padding:20px}.page-header[data-v-6385fdb6]{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:20px;gap:16px;flex-wrap:wrap}.page-title[data-v-6385fdb6]{font-size:22px;font-weight:600;color:#f1f5f9}.page-desc[data-v-6385fdb6]{font-size:13px;color:#94a3b8;margin-top:4px}.header-actions[data-v-6385fdb6]{display:flex;gap:8px;flex-wrap:wrap}.legend[data-v-6385fdb6]{display:flex;gap:12px;align-items:center;margin-bottom:16px;padding:12px 16px;background:#1e293b80;border-radius:8px;font-size:13px}.legend-title[data-v-6385fdb6]{color:#94a3b8;font-weight:500;margin-right:4px}.legend-item[data-v-6385fdb6]{padding:2px 8px;border-radius:4px;font-size:12px;font-weight:500}.legend-own[data-v-6385fdb6]{background:#dbeafe;color:#1e40af}.legend-dept[data-v-6385fdb6]{background:#93c5fd;color:#1e3a8a}.legend-all[data-v-6385fdb6]{background:#1e40af;color:#fff}.legend-none[data-v-6385fdb6]{background:#e2e8f0;color:#64748b}.matrix-table[data-v-6385fdb6]{margin-bottom:24px}.resource-label[data-v-6385fdb6]{font-family:JetBrains Mono,monospace;font-size:12px;color:#1e293b}.role-header[data-v-6385fdb6]{text-align:center}.role-name[data-v-6385fdb6]{font-weight:600;color:#1e293b}.role-id[data-v-6385fdb6]{font-size:11px;color:#94a3b8;font-family:monospace;margin-top:2px}.perm-cell[data-v-6385fdb6]{display:flex;flex-direction:column;gap:4px;align-items:center}.scope-tag[data-v-6385fdb6]{font-size:10px;font-family:monospace}.scope-own[data-v-6385fdb6]{background:#dbeafe;color:#1e40af;border-color:#93c5fd}.scope-department[data-v-6385fdb6]{background:#93c5fd;color:#1e3a8a;border-color:#60a5fa}.scope-all[data-v-6385fdb6]{background:#1e40af;color:#fff;border-color:#1e3a8a}.no-perm[data-v-6385fdb6]{color:#cbd5e1;font-size:14px}.role-detail[data-v-6385fdb6]{margin-top:24px}.section-title[data-v-6385fdb6]{font-size:16px;font-weight:600;color:#1e293b;margin-bottom:12px}.role-meta[data-v-6385fdb6]{display:flex;flex-direction:column;gap:4px}.role-desc[data-v-6385fdb6]{font-size:13px;color:#475569;line-height:1.4}.role-perm-count[data-v-6385fdb6]{font-size:12px;color:#94a3b8;margin-top:4px}
@@ -0,0 +1,2 @@
import{d as q,o as G,b as a,c as p,e as l,f as o,w as n,i as m,U as g,a5 as H,r as R,T as z,E as D,j as r,V as h,k as E,a6 as J,n as y,a7 as K,t as v,a3 as Q,g as T}from"./index-BYp6OBwf.js";import{a as W}from"./index-CMW9Tl_L.js";import{_ as X}from"./_plugin-vue_export-helper-DlAUqK2U.js";const Y={class:"matrix-page"},Z={class:"page-header"},ee={class:"header-actions"},te={class:"resource-label"},se={class:"role-header"},ae={class:"role-name"},le={class:"role-id"},ne={class:"perm-cell"},oe={key:0,class:"no-perm"},re={class:"role-detail"},ie={class:"role-meta"},ce={class:"role-desc"},de={class:"role-perm-count"},ue=q({__name:"PermissionsMatrix",setup(pe){const x=R(!1),i=R({roles:[],resources:[],actions:[],scopes:[],matrix:{}}),w=R(""),V=R(""),U=z(()=>i.value.roles.length>0),C=z(()=>w.value?i.value.roles.filter(s=>s.name===w.value):i.value.roles),$=z(()=>{const s=[];for(const t of i.value.resources)for(const c of i.value.actions)s.push({resource:t,action:c,key:`${t}:${c}`});return s}),B=z(()=>V.value?$.value.filter(s=>s.resource===V.value):$.value);async function L(){x.value=!0;try{const s=await W.get("/admin/roles/permissions/matrix");i.value=s}catch(s){console.error("loadMatrix 失败:",s),D.error("加载失败: "+((s==null?void 0:s.message)||"未知错误"))}finally{x.value=!1}}function j(s,t){var _;const c=[];for(const d of i.value.scopes){const u=`${s.resource}:${s.action}:${d}`;(_=i.value.matrix[t])!=null&&_[u]&&c.push(d)}return c}function O(s){return{read:"info",create:"success",update:"warning",delete:"danger"}[s]||"info"}function A(){const t=[["resource","action",...C.value.map(f=>f.name)].join(",")];for(const f of B.value){const b=[f.resource,f.action];for(const k of C.value){const M=j(f,k.name);b.push(M.join("|")||"")}t.push(b.join(","))}const c=t.join(`
`),_=new Blob([c],{type:"text/csv;charset=utf-8"}),d=URL.createObjectURL(_),u=document.createElement("a");u.href=d,u.download=`rbac-matrix-${new Date().toISOString().slice(0,10)}.csv`,u.click(),URL.revokeObjectURL(d),D.success("CSV 已导出")}return G(()=>{L()}),(s,t)=>{const c=r("el-option"),_=r("el-select"),d=r("el-icon"),u=r("el-button"),f=r("el-skeleton"),b=r("el-table-column"),k=r("el-tag"),M=r("el-table"),F=r("el-descriptions-item"),I=r("el-descriptions"),P=r("el-empty");return a(),p("div",Y,[l("div",Z,[t[4]||(t[4]=l("div",null,[l("div",{class:"page-title"},"RBAC 权限矩阵"),l("div",{class:"page-desc"}," 5 角色 × 4 资源 × 4 操作 × 3 数据范围,共 240 个权限点 (5 × 16 × 3) ")],-1)),l("div",ee,[o(_,{modelValue:w.value,"onUpdate:modelValue":t[0]||(t[0]=e=>w.value=e),placeholder:"筛选角色",size:"default",clearable:"",style:{width:"180px"}},{default:n(()=>[(a(!0),p(g,null,h(i.value.roles,e=>(a(),m(c,{key:e.name,label:e.display_name+" ("+e.name+")",value:e.name},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),o(_,{modelValue:V.value,"onUpdate:modelValue":t[1]||(t[1]=e=>V.value=e),placeholder:"筛选资源",size:"default",clearable:"",style:{width:"180px"}},{default:n(()=>[(a(!0),p(g,null,h(i.value.resources,e=>(a(),m(c,{key:e,label:e,value:e},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),o(u,{onClick:A},{default:n(()=>[o(d,null,{default:n(()=>[o(E(J))]),_:1}),t[2]||(t[2]=y(" 导出 CSV ",-1))]),_:1}),o(u,{onClick:L,loading:x.value},{default:n(()=>[o(d,null,{default:n(()=>[o(E(K))]),_:1}),t[3]||(t[3]=y(" 刷新 ",-1))]),_:1},8,["loading"])])]),x.value&&!U.value?(a(),m(f,{key:0,rows:10,animated:""})):U.value?(a(),p(g,{key:1},[t[8]||(t[8]=H('<div class="legend" data-v-6385fdb6><span class="legend-title" data-v-6385fdb6>数据范围:</span><span class="legend-item legend-own" data-v-6385fdb6>own — 自己的</span><span class="legend-item legend-dept" data-v-6385fdb6>department — 部门的</span><span class="legend-item legend-all" data-v-6385fdb6>all — 全部</span><span class="legend-item legend-none" data-v-6385fdb6>无权限</span></div>',1)),o(M,{data:B.value,stripe:"",size:"small","empty-text":x.value?"加载中...":"无数据",class:"matrix-table"},{default:n(()=>[o(b,{label:"资源",prop:"resource",width:"140",fixed:""},{default:n(({row:e})=>[l("span",te,v(e.resource),1)]),_:1}),o(b,{label:"操作",prop:"action",width:"100",fixed:""},{default:n(({row:e})=>[o(k,{size:"small",type:O(e.action)},{default:n(()=>[y(v(e.action),1)]),_:2},1032,["type"])]),_:1}),(a(!0),p(g,null,h(C.value,e=>(a(),m(b,{key:e.name,label:e.display_name,"min-width":"140",align:"center"},{header:n(()=>[l("div",se,[l("div",ae,v(e.display_name),1),l("div",le,v(e.name),1)])]),default:n(({row:N})=>[l("div",ne,[(a(!0),p(g,null,h(j(N,e.name),S=>(a(),m(k,{key:S,size:"small",class:Q(["scope-tag",`scope-${S}`])},{default:n(()=>[y(v(S),1)]),_:2},1032,["class"]))),128)),j(N,e.name).length===0?(a(),p("span",oe,"—")):T("",!0)])]),_:2},1032,["label"]))),128))]),_:1},8,["data","empty-text"]),l("div",re,[t[7]||(t[7]=l("div",{class:"section-title"},"角色详情",-1)),o(I,{column:2,border:"",size:"small"},{default:n(()=>[(a(!0),p(g,null,h(C.value,e=>(a(),m(F,{key:e.name,label:e.display_name+" ("+e.name+")"},{default:n(()=>[l("div",ie,[l("div",ce,v(e.description||"—"),1),l("div",de,[t[6]||(t[6]=y(" 权限数: ",-1)),l("b",null,v(e.permission_count),1),e.is_default?(a(),m(k,{key:0,type:"info",size:"small",style:{"margin-left":"8px"}},{default:n(()=>[...t[5]||(t[5]=[y("默认",-1)])]),_:1})):T("",!0)])])]),_:2},1032,["label"]))),128))]),_:1})])],64)):(a(),m(P,{key:2,description:"加载失败, 请检查网络或权限"}))])}}}),ve=X(ue,[["__scopeId","data-v-6385fdb6"]]);export{ve as default};
@@ -0,0 +1 @@
import{d as v,b as T,c as b,e as s,f as e,w as n,t as r,T as i,j as o,n as x,u as C,z as g}from"./index-BYp6OBwf.js";const k={class:"placeholder-center"},y={class:"placeholder-icon"},B={class:"placeholder-title"},H={class:"placeholder-desc"},w=v({__name:"Placeholder",setup(N){const d=C(),t=g(),u=i(()=>{const a=t.meta.title;return t.path==="/:pathMatch(.*)*"?"页面未找到":a||"功能开发中"}),_=i(()=>t.path==="/:pathMatch(.*)*"?"您访问的页面不存在":t.meta.comingSoon?"该功能正在开发中,敬请期待":"此功能将在后续版本中开放,请关注版本更新");function p(){d.push("/dashboard")}return(a,c)=>{const m=o("Tools"),l=o("el-icon"),h=o("HomeFilled"),f=o("el-button");return T(),b("div",k,[s("div",y,[e(l,{size:64},{default:n(()=>[e(m)]),_:1})]),s("div",B,r(u.value),1),s("div",H,r(_.value),1),e(f,{type:"primary",onClick:p},{default:n(()=>[e(l,null,{default:n(()=>[e(h)]),_:1}),c[0]||(c[0]=x(" 返回运营总览 ",-1))]),_:1})])}}});export{w as default};
@@ -0,0 +1 @@
.reply-card[data-v-eab703b7]{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius);padding:14px 16px;margin-bottom:10px;transition:border-color .2s}.reply-card[data-v-eab703b7]:hover{border-color:var(--border-hover)}.reply-card.is-pending[data-v-eab703b7]{border-color:var(--warning)}.reply-card-header[data-v-eab703b7]{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.reply-card-title[data-v-eab703b7]{font-size:13px;font-weight:600;color:var(--text-primary);display:flex;align-items:center}.reply-card-content[data-v-eab703b7]{font-size:12px;color:var(--text-secondary);line-height:1.6;background:var(--bg-primary);padding:10px;border-radius:6px;margin-bottom:8px}.reply-card-footer[data-v-eab703b7]{font-size:11px;color:var(--text-muted);display:flex;align-items:center;flex-wrap:wrap;gap:2px}.footer-label[data-v-eab703b7]{color:var(--text-muted)}.footer-value[data-v-eab703b7]{color:var(--text-secondary)}.footer-sep[data-v-eab703b7]{margin:0 4px;color:var(--text-muted)}.replies-toolbar[data-v-75778112]{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.category-tabs[data-v-75778112]{display:flex;gap:8px;flex-wrap:wrap}.loading-state[data-v-75778112]{padding:24px 0}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
.ragflow-ingestion-page[data-v-2c839024]{padding:20px;max-width:800px}.ragflow-ingestion-page__header h2[data-v-2c839024]{margin:0 0 16px;font-size:20px;font-weight:600}.ragflow-ingestion-page__alert[data-v-2c839024]{margin-bottom:16px}.ragflow-ingestion-page__upload[data-v-2c839024]{border:2px dashed #dcdfe6;border-radius:12px;padding:40px;text-align:center;background:#fafafa;transition:all .3s;margin-bottom:20px}.ragflow-ingestion-page__upload--dragover[data-v-2c839024]{border-color:#409eff;background:#ecf5ff}.ragflow-ingestion-page__upload-content[data-v-2c839024]{display:flex;flex-direction:column;align-items:center;gap:12px}.ragflow-ingestion-page__upload-text[data-v-2c839024]{font-size:14px;color:#606266;margin:0}.ragflow-ingestion-page__upload-hint[data-v-2c839024]{font-size:12px;color:#c0c4cc;margin:0}.ragflow-ingestion-page__category-select[data-v-2c839024]{display:flex;align-items:center;gap:8px;font-size:13px;color:#606266}.ragflow-ingestion-page__upload-btn[data-v-2c839024]{margin-top:8px}.ragflow-ingestion-page__file-input[data-v-2c839024]{display:none}.ragflow-ingestion-page__result[data-v-2c839024]{margin-bottom:20px}.ragflow-ingestion-page__result-info[data-v-2c839024]{display:flex;gap:16px;align-items:center;margin-bottom:12px;font-size:13px}.ragflow-ingestion-page__suggestions[data-v-2c839024]{margin-bottom:12px}.ragflow-ingestion-page__suggestion-item[data-v-2c839024]{padding:8px 12px;background:#f5f7fa;border-radius:6px;margin-bottom:6px}.ragflow-ingestion-page__suggestion-header[data-v-2c839024]{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px;font-size:13px;font-weight:500}.ragflow-ingestion-page__suggestion-category[data-v-2c839024]{font-size:12px;color:#909399}.ragflow-ingestion-page__result-note[data-v-2c839024]{margin-top:12px;padding:8px 12px;background:#f0f9eb;border-radius:4px;font-size:13px;color:#67c23a}.ragflow-ingestion-page__result-note a[data-v-2c839024]{color:#409eff;text-decoration:underline}.ragflow-ingestion-page__logs[data-v-2c839024]{margin-bottom:20px}.ragflow-ingestion-page__log-item[data-v-2c839024]{padding:4px 0;font-size:12px;border-bottom:1px solid #f5f5f5}.ragflow-ingestion-page__log-time[data-v-2c839024]{color:#c0c4cc;margin-right:8px}.ragflow-ingestion-page__log-item--info[data-v-2c839024]{color:#909399}.ragflow-ingestion-page__log-item--success[data-v-2c839024]{color:#67c23a}.ragflow-ingestion-page__log-item--error[data-v-2c839024]{color:#f56c6c}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
.emp-option[data-v-dad2ae6f]{display:flex;align-items:center;gap:8px;width:100%}.emp-name[data-v-dad2ae6f]{font-weight:600;color:var(--text-primary)}.emp-id[data-v-dad2ae6f]{color:var(--text-muted);font-size:12px}.emp-dept[data-v-dad2ae6f]{color:var(--el-color-primary);font-size:12px;margin-left:auto}.form-hint[data-v-dad2ae6f]{font-size:12px;color:var(--text-muted);line-height:1.5;margin-top:4px}.page-header[data-v-dad2ae6f]{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:24px}.page-title[data-v-dad2ae6f]{font-size:18px;font-weight:600;color:var(--text-primary);margin-bottom:4px}.page-desc[data-v-dad2ae6f]{font-size:13px;color:var(--text-muted)}.loading-state[data-v-dad2ae6f]{padding:24px 0}.section-title[data-v-dad2ae6f]{font-size:14px;font-weight:600;color:var(--text-primary);margin-bottom:12px}.section-header[data-v-dad2ae6f]{display:flex;justify-content:space-between;align-items:center;margin:28px 0 12px}.role-cards[data-v-dad2ae6f]{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px;margin-bottom:8px}.role-card[data-v-dad2ae6f]{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-lg);padding:20px;transition:border-color .2s}.role-card[data-v-dad2ae6f]:hover{border-color:var(--border-hover)}.role-card--default[data-v-dad2ae6f]{border-style:dashed}.role-card-header[data-v-dad2ae6f]{display:flex;align-items:center;gap:12px;margin-bottom:16px}.role-card-icon[data-v-dad2ae6f]{width:40px;height:40px;border-radius:10px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.role-card-info[data-v-dad2ae6f]{flex:1;min-width:0}.role-card-name[data-v-dad2ae6f]{font-size:15px;font-weight:600;color:var(--text-primary)}.role-card-id[data-v-dad2ae6f]{font-size:12px;color:var(--text-muted)}.role-card-stats[data-v-dad2ae6f]{display:flex;gap:24px;margin-bottom:12px}.stat-item[data-v-dad2ae6f]{display:flex;flex-direction:column}.stat-value[data-v-dad2ae6f]{font-size:20px;font-weight:600;color:var(--text-primary)}.stat-label[data-v-dad2ae6f]{font-size:12px;color:var(--text-muted)}.role-card-desc[data-v-dad2ae6f]{font-size:12px;color:var(--text-secondary);margin-bottom:12px;line-height:1.5}.role-card-perms[data-v-dad2ae6f]{display:flex;flex-wrap:wrap;gap:4px}.perm-tag[data-v-dad2ae6f]{font-size:11px;font-family:monospace}.data-table-wrapper[data-v-dad2ae6f]{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden}.user-roles-table[data-v-dad2ae6f] .el-table__header th{background-color:var(--bg-tertiary)!important;color:var(--text-primary);font-weight:600}.user-roles-table[data-v-dad2ae6f] .el-table__body td{background-color:#fafafa;color:var(--text-primary)}.user-roles-table[data-v-dad2ae6f] .el-table__body tr:hover>td{background-color:#f0f7ff!important}.user-roles-table[data-v-dad2ae6f] .el-table__row--striped td{background-color:#f8fafc}.employee-name[data-v-dad2ae6f]{color:var(--text-primary);font-weight:500}.source-badge[data-v-dad2ae6f]{display:inline-block;padding:2px 8px;border-radius:4px;font-size:12px;background:var(--bg-tertiary);color:var(--text-secondary)}.source-manual[data-v-dad2ae6f]{background:#3b82f61a;color:#3b82f6}.source-auto[data-v-dad2ae6f]{background:#6b72801a;color:#6b7280}.source-tag[data-v-dad2ae6f]{background:#10b9811a;color:#10b981}.source-ehr[data-v-dad2ae6f]{background:#8b5cf61a;color:#8b5cf6}.text-muted[data-v-dad2ae6f]{color:var(--text-muted);font-size:12px}.revoke-info p[data-v-dad2ae6f]{margin:0 0 12px;font-size:14px;color:var(--text-primary)}.revoke-detail[data-v-dad2ae6f]{background:var(--bg-tertiary);border-radius:8px;padding:12px 16px;font-size:13px;line-height:1.8;color:var(--text-secondary)}.revoke-detail strong[data-v-dad2ae6f]{color:var(--text-primary)}.form-hint[data-v-dad2ae6f]{font-size:12px;color:var(--text-muted);margin-top:4px;line-height:1.4}
@@ -0,0 +1 @@
.rule-version[data-v-bcc0e9e8]{padding:4px}.page-title[data-v-bcc0e9e8]{font-size:20px;font-weight:600;color:var(--text-primary)}.page-desc[data-v-bcc0e9e8]{color:var(--text-secondary);font-size:13px;margin:6px 0 16px}.toolbar[data-v-bcc0e9e8]{display:flex;gap:12px;align-items:center;margin-bottom:16px}.ver-table[data-v-bcc0e9e8]{margin-top:8px}
@@ -0,0 +1 @@
import{d as M,o as j,b as _,c as g,e as w,f as t,w as o,k as x,i as h,z as q,r as d,j as n,U as A,V as F,n as c,t as S,E as C}from"./index-BYp6OBwf.js";import{u as I}from"./automation-xfwMXSBH.js";import{_ as Q}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./index-CMW9Tl_L.js";const $={class:"rule-version"},G={class:"toolbar"},H={key:0,class:"loading-state"},W=M({__name:"RuleVersion",setup(X){const s=I(),U=q(),r=d(""),p=d(!1),y=d(!1),f=d(10),m=d(""),v=d("");j(async()=>{var u;await s.loadScenarios();const a=U.query.scenario||"",e=((u=s.scenarios[0])==null?void 0:u.scenario_key)||"";r.value=a&&s.scenarios.some(b=>b.scenario_key===a)?a:e,r.value&&await s.loadVersions(r.value)});async function P(a){a&&await s.loadVersions(a)}function B(a){switch(a){case"active":case"full":return"success";case"canary":return"warning";case"rollback":return"danger";default:return"info"}}function T(){r.value&&(f.value=10,m.value="",v.value="",p.value=!0)}async function z(){if(!r.value)return;const a=s.scenarios.find(u=>u.scenario_key===r.value);if(!a)return;let e;if(m.value.trim())try{e=JSON.parse(m.value)}catch{C.error("规则内容 JSON 格式有误");return}y.value=!0;try{await s.publishVersion(a.id,{content:e,canary_percent:f.value,remark:v.value}),C.success("新版本已发布"),p.value=!1}catch{C.error("发布失败")}finally{y.value=!1}}function E(a){if(!a)return"-";try{return new Date(a).toLocaleString("zh-CN",{hour12:!1})}catch{return a}}return(a,e)=>{const u=n("el-option"),b=n("el-select"),V=n("el-button"),J=n("el-skeleton"),i=n("el-table-column"),O=n("el-tag"),R=n("el-table"),D=n("el-slider"),k=n("el-form-item"),N=n("el-input"),K=n("el-form"),L=n("el-dialog");return _(),g("div",$,[e[9]||(e[9]=w("div",{class:"page-title"},"规则版本管理 / 灰度",-1)),e[10]||(e[10]=w("div",{class:"page-desc"},"管理各场景自动化规则的版本与灰度放量,新版本先小流量验证再全量。",-1)),w("div",G,[t(b,{modelValue:r.value,"onUpdate:modelValue":e[0]||(e[0]=l=>r.value=l),placeholder:"选择场景",filterable:"",style:{width:"260px"},onChange:P},{default:o(()=>[(_(!0),g(A,null,F(x(s).scenarios,l=>(_(),h(u,{key:l.scenario_key,label:l.name,value:l.scenario_key},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),t(V,{type:"primary",disabled:!r.value,onClick:T},{default:o(()=>[...e[6]||(e[6]=[c(" 发布新版本 ",-1)])]),_:1},8,["disabled"])]),x(s).loading?(_(),g("div",H,[t(J,{rows:6,animated:""})])):(_(),h(R,{key:1,data:x(s).versions,class:"ver-table",stripe:""},{default:o(()=>[t(i,{prop:"version",label:"版本",width:"90"}),t(i,{label:"状态",width:"110"},{default:o(({row:l})=>[t(O,{type:B(l.status),size:"small"},{default:o(()=>[c(S(l.status),1)]),_:2},1032,["type"])]),_:1}),t(i,{label:"灰度比例",width:"120"},{default:o(({row:l})=>[c(S(l.canary_percent)+"%",1)]),_:1}),t(i,{prop:"remark",label:"备注"}),t(i,{prop:"created_by",label:"发布人",width:"120"}),t(i,{label:"发布时间",width:"180"},{default:o(({row:l})=>[c(S(E(l.created_at)),1)]),_:1})]),_:1},8,["data"])),t(L,{modelValue:p.value,"onUpdate:modelValue":e[5]||(e[5]=l=>p.value=l),title:"发布新版本(灰度)",width:"520px","destroy-on-close":""},{footer:o(()=>[t(V,{onClick:e[4]||(e[4]=l=>p.value=!1)},{default:o(()=>[...e[7]||(e[7]=[c("取消",-1)])]),_:1}),t(V,{type:"primary",loading:y.value,onClick:z},{default:o(()=>[...e[8]||(e[8]=[c("发布",-1)])]),_:1},8,["loading"])]),default:o(()=>[t(K,{"label-position":"top"},{default:o(()=>[t(k,{label:"灰度放量比例:{{ canaryPercent }}%"},{default:o(()=>[t(D,{modelValue:f.value,"onUpdate:modelValue":e[1]||(e[1]=l=>f.value=l),min:0,max:100,step:5,"show-input":""},null,8,["modelValue"])]),_:1}),t(k,{label:"规则内容(JSON"},{default:o(()=>[t(N,{modelValue:m.value,"onUpdate:modelValue":e[2]||(e[2]=l=>m.value=l),type:"textarea",rows:6,placeholder:"可选,留空沿用上一版本"},null,8,["modelValue"])]),_:1}),t(k,{label:"备注"},{default:o(()=>[t(N,{modelValue:v.value,"onUpdate:modelValue":e[3]||(e[3]=l=>v.value=l),placeholder:"如:修复 VPN 重置流程"},null,8,["modelValue"])]),_:1})]),_:1})]),_:1},8,["modelValue"])])}}}),te=Q(W,[["__scopeId","data-v-bcc0e9e8"]]);export{te as default};
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
.runtime-logs[data-v-6982aea2]{padding:0}.filter-bar[data-v-6982aea2]{margin-bottom:16px;border:none;background:var(--bg-secondary)}.pagination-bar[data-v-6982aea2]{display:flex;justify-content:flex-end;margin-top:16px}.detail-block[data-v-6982aea2]{padding:8px 16px;background:var(--bg-secondary, #f5f7fa);border-radius:4px}.detail-meta[data-v-6982aea2]{display:flex;gap:24px;margin-bottom:8px;font-size:12px;color:#909399}.detail-message[data-v-6982aea2]{margin:0;white-space:pre-wrap;word-break:break-all;font-family:Menlo,Consolas,monospace;font-size:12px;line-height:1.5;max-height:280px;overflow:auto}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
.automation-config[data-v-553156a6]{padding:4px}.page-title[data-v-553156a6]{font-size:20px;font-weight:600;color:var(--text-primary)}.page-desc[data-v-553156a6]{color:var(--text-secondary);font-size:13px;margin:6px 0 16px}.feature-grid[data-v-553156a6]{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:16px}.scenario-card[data-v-553156a6]{display:flex;flex-direction:column}.sc-header[data-v-553156a6]{display:flex;align-items:flex-start;justify-content:space-between}.sc-name[data-v-553156a6]{font-weight:600;font-size:15px}.sc-key[data-v-553156a6]{font-size:12px;color:var(--text-muted);margin-top:2px}.sc-desc[data-v-553156a6]{font-size:13px;color:var(--text-secondary);margin:10px 0;min-height:36px}.sc-meta[data-v-553156a6]{margin-bottom:10px}.sc-actions[data-v-553156a6]{display:flex;gap:8px;justify-content:flex-end}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
.session-audit[data-v-752ca67a]{padding:0}.filter-bar[data-v-752ca67a]{display:flex;gap:12px;margin-bottom:20px;flex-wrap:wrap;align-items:center}.pagination-bar[data-v-752ca67a]{display:flex;justify-content:flex-end;margin-top:16px}.clickable-row[data-v-752ca67a]{cursor:pointer}.detail-content[data-v-752ca67a]{padding:0 4px}.detail-section[data-v-752ca67a]{margin-bottom:24px}.detail-section h4[data-v-752ca67a]{margin:0 0 12px;font-size:15px;color:#303133;border-bottom:1px solid #ebeef5;padding-bottom:8px}.message-list[data-v-752ca67a]{display:flex;flex-direction:column;gap:12px;max-height:400px;overflow-y:auto}.message-item[data-v-752ca67a]{padding:10px 12px;border-radius:8px;background:#f5f7fa}.message-item.sender-employee[data-v-752ca67a]{background:#ecf5ff;border-left:3px solid #409eff}.message-item.sender-agent[data-v-752ca67a]{background:#f0f9eb;border-left:3px solid #67c23a}.message-item.sender-ai[data-v-752ca67a]{background:#fdf6ec;border-left:3px solid #e6a23c}.message-item.sender-system[data-v-752ca67a]{background:#f4f4f5;border-left:3px solid #909399}.message-header[data-v-752ca67a]{display:flex;align-items:center;gap:8px;margin-bottom:6px;font-size:12px}.sender-name[data-v-752ca67a]{color:#606266;font-weight:500}.message-time[data-v-752ca67a]{color:#909399;margin-left:auto}.message-content[data-v-752ca67a]{font-size:14px;color:#303133;line-height:1.5;white-space:pre-wrap;word-break:break-word}
@@ -0,0 +1 @@
.stat-card[data-v-4d635d1e]{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-lg);padding:20px;transition:border-color .2s}.stat-card[data-v-4d635d1e]:hover{border-color:var(--border-hover)}.stat-card-header[data-v-4d635d1e]{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.stat-label[data-v-4d635d1e]{font-size:12px;color:var(--text-secondary)}.stat-value[data-v-4d635d1e]{font-size:28px;font-weight:700;margin-bottom:4px}.stat-footer[data-v-4d635d1e]{font-size:11px}.trend-up[data-v-4d635d1e]{color:var(--success)}.trend-down[data-v-4d635d1e]{color:var(--danger)}.stat-subtitle[data-v-4d635d1e]{color:var(--text-muted)}
@@ -0,0 +1 @@
import{d as y,b as t,c as a,e as r,t as s,i as c,w as f,a0 as i,g as o,a8 as d,a3 as b,T as u,j as h,a1 as k,n as S}from"./index-BYp6OBwf.js";import{_ as x}from"./_plugin-vue_export-helper-DlAUqK2U.js";const D={class:"stat-card"},w={class:"stat-card-header"},B={class:"stat-label"},V={key:0},z={key:1,class:"stat-subtitle"},N=y({__name:"StatCard",props:{label:{},value:{},valueColor:{},icon:{},iconColor:{},trend:{},trendDirection:{},subtitle:{}},setup(e){const n=e,m=u(()=>n.value??"-"),v=u(()=>n.trendDirection==="up"?"trend-up":n.trendDirection==="down"?"trend-down":"");return(l,g)=>{const C=h("el-icon");return t(),a("div",D,[r("div",w,[r("span",B,s(e.label),1),e.icon?(t(),c(C,{key:0,size:20,style:i({color:e.iconColor||"var(--text-secondary)"})},{default:f(()=>[(t(),c(k(e.icon)))]),_:1},8,["style"])):o("",!0)]),r("div",{class:"stat-value",style:i({color:e.valueColor||"var(--text-primary)"})},[d(l.$slots,"value",{},()=>[S(s(m.value),1)],!0)],4),e.trend||e.subtitle?(t(),a("div",{key:0,class:b(["stat-footer",v.value])},[d(l.$slots,"footer",{},()=>[e.trend?(t(),a("span",V,s(e.trend),1)):o("",!0),e.subtitle?(t(),a("span",z,s(e.subtitle),1)):o("",!0)],!0)],2)):o("",!0)])}}}),j=x(N,[["__scopeId","data-v-4d635d1e"]]);export{j as S};
@@ -0,0 +1 @@
import{d as L,o as M,b as v,c as U,f as o,w as l,W as Y,i as E,e as _,r as w,y as b,E as P,j as s,a2 as j,h as F,q as S,n as u,t as c}from"./index-BYp6OBwf.js";import{P as $}from"./admin-QG1MRyaa.js";import{_ as q}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./index-CMW9Tl_L.js";const I={class:"system-logs"},W={class:"old-value"},A={class:"new-value"},G={class:"pagination-bar"},H=L({__name:"SystemLogs",setup(J){const g=w(!1),f=w([]),a=b({configKey:"",changedBy:"",dateRange:null}),i=b({page:1,pageSize:50,total:0}),z=[{text:"最近24小时",value:()=>{const t=new Date,e=new Date;return e.setTime(e.getTime()-3600*1e3*24),[e,t]}},{text:"最近7天",value:()=>{const t=new Date,e=new Date;return e.setTime(e.getTime()-3600*1e3*24*7),[e,t]}}];function V(){const t={page:i.page,page_size:i.pageSize};return a.configKey&&(t.config_key=a.configKey),a.changedBy&&(t.changed_by=a.changedBy),a.dateRange&&a.dateRange.length===2&&(t.from=`${a.dateRange[0]}T00:00:00`,t.to=`${a.dateRange[1]}T23:59:59`),t}async function r(){g.value=!0;try{const{data:t}=await $(V());t.code===0&&(f.value=t.data.items||[],i.total=t.data.total||0)}catch{P.error("加载配置变更历史失败")}finally{g.value=!1}}function m(){i.page=1,r()}function x(){a.configKey="",a.changedBy="",a.dateRange=null,i.page=1,r()}function B(){i.page=1,r()}function C(t){if(!t)return"—";const e=new Date(t);return isNaN(e.getTime())?t:e.toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})}return M(()=>r()),(t,e)=>{const y=s("el-input"),p=s("el-form-item"),D=s("el-date-picker"),h=s("el-button"),k=s("el-form"),K=s("el-card"),d=s("el-table-column"),T=s("el-table"),R=s("el-pagination"),N=j("loading");return v(),U("div",I,[o(K,{class:"filter-bar",shadow:"never"},{default:l(()=>[o(k,{inline:!0,onSubmit:e[3]||(e[3]=F(()=>{},["prevent"]))},{default:l(()=>[o(p,{label:"配置键"},{default:l(()=>[o(y,{modelValue:a.configKey,"onUpdate:modelValue":e[0]||(e[0]=n=>a.configKey=n),placeholder:"如 emergency_mode",clearable:"",style:{width:"220px"},onKeyup:S(m,["enter"])},null,8,["modelValue"])]),_:1}),o(p,{label:"操作人"},{default:l(()=>[o(y,{modelValue:a.changedBy,"onUpdate:modelValue":e[1]||(e[1]=n=>a.changedBy=n),placeholder:"agent_id",clearable:"",style:{width:"200px"},onKeyup:S(m,["enter"])},null,8,["modelValue"])]),_:1}),o(p,{label:"时间范围"},{default:l(()=>[o(D,{modelValue:a.dateRange,"onUpdate:modelValue":e[2]||(e[2]=n=>a.dateRange=n),type:"daterange","range-separator":"至","start-placeholder":"开始日期","end-placeholder":"结束日期","value-format":"YYYY-MM-DD",shortcuts:z},null,8,["modelValue"])]),_:1}),o(p,null,{default:l(()=>[o(h,{type:"primary",onClick:m},{default:l(()=>[...e[6]||(e[6]=[u("查询",-1)])]),_:1}),o(h,{onClick:x},{default:l(()=>[...e[7]||(e[7]=[u("重置",-1)])]),_:1})]),_:1})]),_:1})]),_:1}),Y((v(),E(T,{data:f.value,stripe:"",style:{width:"100%"}},{default:l(()=>[o(d,{prop:"changed_at",label:"时间",width:"170"},{default:l(({row:n})=>[u(c(C(n.changed_at)),1)]),_:1}),o(d,{prop:"config_key",label:"配置键",width:"250","show-overflow-tooltip":""}),o(d,{prop:"changed_by_name",label:"操作人",width:"100"},{default:l(({row:n})=>[u(c(n.changed_by_name||"—"),1)]),_:1}),o(d,{prop:"old_value",label:"变更前","min-width":"200","show-overflow-tooltip":""},{default:l(({row:n})=>[_("span",W,c(n.old_value||"—"),1)]),_:1}),o(d,{prop:"new_value",label:"变更后","min-width":"200","show-overflow-tooltip":""},{default:l(({row:n})=>[_("span",A,c(n.new_value||"—"),1)]),_:1})]),_:1},8,["data"])),[[N,g.value]]),_("div",G,[o(R,{"current-page":i.page,"onUpdate:currentPage":e[4]||(e[4]=n=>i.page=n),"page-size":i.pageSize,"onUpdate:pageSize":e[5]||(e[5]=n=>i.pageSize=n),total:i.total,"page-sizes":[20,50,100],layout:"total, sizes, prev, pager, next, jumper",onCurrentChange:r,onSizeChange:B},null,8,["current-page","page-size","total"])])])}}}),ee=q(H,[["__scopeId","data-v-1865337b"]]);export{ee as default};
@@ -0,0 +1 @@
.system-logs[data-v-1865337b]{padding:0}.filter-bar[data-v-1865337b]{margin-bottom:16px;border:none;background:var(--bg-secondary)}.pagination-bar[data-v-1865337b]{display:flex;justify-content:flex-end;margin-top:16px}.old-value[data-v-1865337b]{color:#f56c6c;text-decoration:line-through}.new-value[data-v-1865337b]{color:#67c23a;font-weight:500}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
.connection-warning[data-v-965dca2b]{display:flex;align-items:center;gap:8px;padding:10px 16px;background:#eab3081a;border:1px solid rgba(234,179,8,.3);border-radius:var(--radius);margin-bottom:16px;color:var(--text-secondary);font-size:13px}.tab-group[data-v-965dca2b]{display:flex;gap:8px}.search-bar[data-v-965dca2b]{display:flex;gap:8px;align-items:center}.pagination-wrapper[data-v-965dca2b]{display:flex;justify-content:flex-end;margin-top:16px}.terminal-name[data-v-965dca2b]{color:var(--accent);font-weight:500;cursor:pointer}.terminal-name[data-v-965dca2b]:hover{text-decoration:underline}.os-text[data-v-965dca2b]{font-size:12px;color:var(--text-secondary)}.time-text[data-v-965dca2b]{font-size:12px;color:var(--text-muted)}.text-danger[data-v-965dca2b]{color:var(--danger);font-weight:600}.text-muted[data-v-965dca2b]{color:var(--text-muted);font-size:12px}.detail-content[data-v-965dca2b]{padding:0 4px}.detail-section[data-v-965dca2b]{margin-bottom:20px}.detail-section-title[data-v-965dca2b]{font-size:13px;font-weight:600;color:var(--text-primary);margin-bottom:12px;padding-bottom:6px;border-bottom:1px solid var(--border)}.detail-grid[data-v-965dca2b]{display:grid;grid-template-columns:1fr 1fr;gap:10px}.detail-item[data-v-965dca2b]{display:flex;flex-direction:column;gap:2px}.detail-label[data-v-965dca2b]{font-size:11px;color:var(--text-muted)}.detail-value[data-v-965dca2b]{font-size:13px;color:var(--text-primary)}.mono[data-v-965dca2b]{font-family:SF Mono,Fira Code,monospace;font-size:12px}.security-status-grid[data-v-965dca2b]{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px}.security-item[data-v-965dca2b]{text-align:center;padding:12px 8px;border-radius:var(--radius);border:1px solid var(--border)}.security-item.safe[data-v-965dca2b]{background:#22c55e14;border-color:#22c55e33}.security-item.danger[data-v-965dca2b]{background:#ef444414;border-color:#ef444433}.security-item.warning[data-v-965dca2b]{background:#eab30814;border-color:#eab30833}.security-value[data-v-965dca2b]{font-size:20px;font-weight:700;color:var(--text-primary)}.security-item.danger .security-value[data-v-965dca2b]{color:var(--danger)}.security-item.warning .security-value[data-v-965dca2b]{color:var(--warning)}.security-label[data-v-965dca2b]{font-size:11px;color:var(--text-muted);margin-top:4px}.action-buttons[data-v-965dca2b]{display:flex;gap:8px;flex-wrap:wrap}.action-hint[data-v-965dca2b]{margin-top:8px;font-size:11px;color:var(--text-muted);font-style:italic}.terminal-table-row:hover td{background-color:var(--bg-tertiary)!important;cursor:pointer}
@@ -0,0 +1 @@
const s=(t,r)=>{const o=t.__vccOpts||t;for(const[c,e]of r)o[c]=e;return o};export{s as _};
@@ -0,0 +1 @@
import{Z as y,r as c,T as f,$ as p}from"./index-BYp6OBwf.js";import{a as _}from"./index-CMW9Tl_L.js";const u="admin_token",m="admin_user_id",A=y("admin",()=>{const r=c(null),n=c(localStorage.getItem(u)),s=c(localStorage.getItem(m)),l=c(!1),I=f(()=>!!n.value&&!!r.value),h=f(()=>{var e;return((e=r.value)==null?void 0:e.name)||""}),E=f(()=>{var e;return((e=r.value)==null?void 0:e.user_id)||s.value||""});async function S(e,o,d){l.value=!0;try{const t=await _.post("/agents/login",{user_id:e,name:e,password:o,otp_code:d||void 0}),i=t.agent_info||t;if("require_otp"in t&&t.require_otp)throw l.value=!1,new Error("require_otp");if(i.role!=="admin")throw new Error("无管理权限:该账号非管理员角色");n.value=t.token||i.token,s.value=e,localStorage.setItem(u,t.token||i.token),localStorage.setItem(m,e),r.value={...i,role:"admin"},p.push("/dashboard")}catch(a){if(console.error("管理员登录失败:",a),a instanceof Error&&a.message==="require_otp")throw a;const t=a instanceof Error?a.message:"登录失败,请重试";throw new Error(t)}finally{l.value=!1}}function g(){n.value=null,s.value=null,r.value=null,localStorage.removeItem(u),localStorage.removeItem(m),p.push("/login")}async function v(){var e;try{if(!n.value)return;const o=await _.get("/agents/me");r.value=o}catch(o){console.error("获取管理员信息失败:",o),o&&typeof o=="object"&&"response"in o&&((e=o.response)==null?void 0:e.status)===401&&g()}}async function w(){const e=localStorage.getItem(u);if(e){n.value=e,s.value=localStorage.getItem(m);try{await v()}catch{g()}}}return{adminInfo:r,token:n,adminUserId:s,logging:l,isLoggedIn:I,adminName:h,userId:E,login:S,logout:g,refreshAdminInfo:v,initAuth:w}});export{A as u};
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
import{Z as w,r as e}from"./index-BYp6OBwf.js";import{a as s}from"./index-CMW9Tl_L.js";function C(){return s.get("/itportal/automation/admin/scenarios")}function S(a,n){return s.put(`/itportal/automation/admin/scenarios/${a}`,n)}function A(a,n){return s.post(`/itportal/automation/admin/scenarios/${a}/version`,n)}function V(a){return s.get("/itportal/automation/admin/rule-versions",{params:{scenario_key:a}})}function h(){return s.get("/itportal/automation/admin/metrics")}const M=w("automation",()=>{const a=e([]),n=e([]),u=e(null),r=e(!1),c=e("");async function l(){r.value=!0;try{const t=await C();a.value=t.data.data}finally{r.value=!1}}async function f(t,o){const i=(await S(t,o)).data.data,d=a.value.findIndex(y=>y.id===t);return d>=0&&(a.value[d]=i),i}async function m(t){c.value=t;const o=await V(t);n.value=o.data.data}async function p(t,o){const i=(await A(t,o)).data.data;return n.value.unshift(i),i}async function v(){const t=await h();u.value=t.data.data}return{scenarios:a,versions:n,metrics:u,loading:r,currentScenarioKey:c,loadScenarios:l,updateScenario:f,loadVersions:m,publishVersion:p,loadMetrics:v}});export{M as u};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
const a=["电脑","软件","外设","网络","安全","资产","其他"],o=["全部","电脑","软件","外设","网络","安全","资产","其他"],s={auto:"系统自动",tag:"企微标签",ehr:"eHR 岗位",manual:"手动分配"},t={wecom_tag:"企微标签",ehr_position:"eHR 岗位"};export{t as M,o as Q,s as R,a as S};
File diff suppressed because one or more lines are too long
+16
View File
@@ -0,0 +1,16 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- CSP 安全策略 -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'unsafe-eval' https://res.wx.qq.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob: https: http:; connect-src 'self' https://qyapi.weixin.qq.com wss://*;" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<title>智能IT支持服务台 - 管理后台</title>
<script type="module" crossorigin src="/itadmin/assets/index-BYp6OBwf.js"></script>
<link rel="stylesheet" crossorigin href="/itadmin/assets/index-DpwyG6Fg.css">
</head>
<body>
<div id="app"></div>
</body>
@@ -0,0 +1 @@
.sidebar[data-v-f8a6ae37]{width:220px;background:var(--bg-secondary);border-right:1px solid var(--border);display:flex;flex-direction:column;flex-shrink:0;overflow:hidden}.sidebar-logo[data-v-f8a6ae37]{padding:16px 20px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:10px}.sidebar-logo-icon[data-v-f8a6ae37]{width:32px;height:32px;background:linear-gradient(135deg,#3b82f6,#8b5cf6);border-radius:8px;display:flex;align-items:center;justify-content:center;color:#fff}.sidebar-logo-text[data-v-f8a6ae37]{font-size:15px;font-weight:600;color:var(--text-primary)}.sidebar-logo-sub[data-v-f8a6ae37]{font-size:10px;color:var(--text-muted)}.sidebar-menu[data-v-f8a6ae37]{flex:1;overflow-y:auto;border-right:none}.menu-section-title[data-v-f8a6ae37]{padding:12px 20px 6px;font-size:11px;color:var(--text-muted);letter-spacing:.5px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.sidebar-menu .el-menu-item[data-v-f8a6ae37]{height:40px;line-height:40px;font-size:13px;border-left:3px solid transparent;margin:0}.sidebar-menu .el-menu-item.is-active[data-v-f8a6ae37]{background-color:var(--accent-light);border-left-color:var(--accent)}.locked-menu-item[data-v-f8a6ae37]{opacity:.5;pointer-events:auto!important}.lock-icon[data-v-f8a6ae37]{margin-left:auto;font-size:12px;color:var(--text-muted)}.search-box-wrapper[data-v-096eb022]{position:relative}.search-box[data-v-096eb022]{display:flex;align-items:center;background:var(--bg-primary);border:1px solid var(--border);border-radius:var(--radius);padding:0 10px;gap:6px}.search-box[data-v-096eb022]:focus-within{border-color:var(--accent)}.search-input[data-v-096eb022]{background:transparent;border:none;color:var(--text-primary);padding:6px 0;font-size:13px;outline:none;width:180px}.search-input[data-v-096eb022]::-moz-placeholder{color:var(--text-muted)}.search-input[data-v-096eb022]::placeholder{color:var(--text-muted)}.search-results[data-v-096eb022]{max-height:300px;overflow-y:auto}.search-loading[data-v-096eb022],.search-empty[data-v-096eb022]{padding:16px;text-align:center;color:var(--text-muted);font-size:13px}.search-result-count[data-v-096eb022]{padding:8px 12px;font-size:11px;color:var(--text-muted);border-bottom:1px solid var(--border)}.search-result-item[data-v-096eb022]{display:flex;align-items:center;gap:10px;padding:10px 12px;cursor:pointer;transition:background .2s;border-bottom:1px solid var(--border)}.search-result-item[data-v-096eb022]:last-child{border-bottom:none}.search-result-item[data-v-096eb022]:hover{background:var(--bg-tertiary)}.result-name[data-v-096eb022]{font-size:13px;color:var(--text-primary)}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
import{d as A,o as E,b as u,c as g,e as p,f as t,w as o,j as S,a8 as I,V as L,n as k,r as b,E as R,i,a2 as U,g as r,t as n,T as j,U as F,h as O,a0 as w,S as x}from"./index-CcYCuTIa.js";import{O as q}from"./admin-i6XhhI1Z.js";import{_ as G}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./index-CPDTx6RU.js";const H={class:"agent-performance"},J={class:"filter-bar"},K={key:0,style:{color:"#909399"}},Q={class:"summary-bar"},W=A({__name:"AgentPerformance",setup(X){const m=b(!1),c=b([]),d=b(null),C=x(()=>c.value.reduce((a,l)=>a+(l.total_conversations||0),0)),V=x(()=>c.value.reduce((a,l)=>a+(l.resolved_conversations||0),0));async function f(){m.value=!0;try{const a={};d.value&&(a.date_from=d.value[0],a.date_to=d.value[1]);const{data:l}=await q(a);l.code===0&&(c.value=l.data.items||[])}catch{R.error("加载绩效数据失败")}finally{m.value=!1}}function z(a){return{online:"success",busy:"warning",offline:"info"}[a]||"info"}function D(a){return{online:"在线",busy:"忙碌",offline:"离线"}[a]||a}function B(a){if(a==="—")return"#909399";const l=parseInt(a);return l>=80?"#67c23a":l>=50?"#e6a23c":"#f56c6c"}return E(()=>f()),(a,l)=>{const M=i("el-date-picker"),N=i("el-button"),s=i("el-table-column"),v=i("el-tag"),P=i("el-table"),_=i("el-descriptions-item"),T=i("el-descriptions"),Y=U("loading");return u(),g("div",H,[p("div",J,[t(M,{modelValue:d.value,"onUpdate:modelValue":l[0]||(l[0]=e=>d.value=e),type:"daterange","range-separator":"至","start-placeholder":"开始日期","end-placeholder":"结束日期","value-format":"YYYY-MM-DD",style:{width:"280px"},onChange:f},null,8,["modelValue"]),t(N,{type:"primary",icon:S(I),onClick:f},{default:o(()=>[...l[1]||(l[1]=[r("刷新",-1)])]),_:1},8,["icon"])]),L((u(),k(P,{data:c.value,stripe:"",style:{width:"100%"}},{default:o(()=>[t(s,{prop:"name",label:"坐席姓名",width:"120"}),t(s,{prop:"status",label:"状态",width:"90"},{default:o(({row:e})=>[t(v,{type:z(e.status),size:"small"},{default:o(()=>[r(n(D(e.status)),1)]),_:2},1032,["type"])]),_:1}),t(s,{prop:"role",label:"角色",width:"80"},{default:o(({row:e})=>[t(v,{type:e.role==="admin"?"danger":"info",size:"small"},{default:o(()=>[r(n(e.role==="admin"?"组长":"坐席"),1)]),_:2},1032,["type"])]),_:1}),t(s,{prop:"skill_tags",label:"技能标签","min-width":"150"},{default:o(({row:e})=>{var y;return[(u(!0),g(j,null,F(e.skill_tags||[],h=>(u(),k(v,{key:h,size:"small",class:"skill-tag"},{default:o(()=>[r(n(h),1)]),_:2},1024))),128)),(y=e.skill_tags)!=null&&y.length?O("",!0):(u(),g("span",K,"—"))]}),_:1}),t(s,{prop:"current_load",label:"当前负载",width:"90",align:"center"},{default:o(({row:e})=>[p("span",{style:w({color:e.current_load>=e.max_load?"#f56c6c":"#303133"})},n(e.current_load)+"/"+n(e.max_load),5)]),_:1}),t(s,{prop:"total_conversations",label:"总会话数",width:"100",align:"center",sortable:""}),t(s,{prop:"resolved_conversations",label:"已结单",width:"90",align:"center",sortable:""}),t(s,{prop:"resolution_rate",label:"结单率",width:"90",align:"center"},{default:o(({row:e})=>[p("span",{style:w({color:B(e.resolution_rate)})},n(e.resolution_rate),5)]),_:1}),t(s,{prop:"today_conversations",label:"今日会话",width:"100",align:"center",sortable:""})]),_:1},8,["data"])),[[Y,m.value]]),p("div",Q,[t(T,{column:4,border:"",size:"small"},{default:o(()=>[t(_,{label:"坐席总数"},{default:o(()=>[r(n(c.value.length),1)]),_:1}),t(_,{label:"在线坐席"},{default:o(()=>[r(n(c.value.filter(e=>e.status==="online").length),1)]),_:1}),t(_,{label:"总会话数"},{default:o(()=>[r(n(C.value),1)]),_:1}),t(_,{label:"总结单数"},{default:o(()=>[r(n(V.value),1)]),_:1})]),_:1})])])}}}),ae=G(W,[["__scopeId","data-v-d7901a83"]]);export{ae as default};
@@ -0,0 +1 @@
.agent-performance[data-v-d7901a83]{padding:0}.filter-bar[data-v-d7901a83]{display:flex;gap:12px;margin-bottom:20px;flex-wrap:wrap;align-items:center}.skill-tag[data-v-d7901a83]{margin-right:4px;margin-bottom:2px}.summary-bar[data-v-d7901a83]{margin-top:20px}
@@ -0,0 +1 @@
.agent-info[data-v-a8c5783f]{display:flex;align-items:center;gap:10px}.agent-avatar[data-v-a8c5783f]{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:var(--accent);font-size:12px;font-weight:600;flex-shrink:0}.agent-name[data-v-a8c5783f]{font-weight:500;color:var(--text-primary)}.agent-id[data-v-a8c5783f]{font-size:11px;color:var(--text-muted)}.text-muted[data-v-a8c5783f]{color:var(--text-muted);font-size:12px}.agent-table-row:hover td{background-color:var(--bg-tertiary)!important}.agents-toolbar[data-v-0e8504fe]{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.category-tabs[data-v-0e8504fe]{display:flex;gap:8px}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
.mode-list[data-v-55cd3e36]{display:flex;flex-direction:column;gap:12px}.mode-card[data-v-55cd3e36]{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-lg);padding:20px;display:flex;align-items:flex-start;gap:16px;cursor:pointer;transition:border-color .2s}.mode-card[data-v-55cd3e36]:hover{border-color:var(--border-hover)}.mode-card.mode-selected[data-v-55cd3e36]{border-color:var(--accent)}.mode-card.mode-locked[data-v-55cd3e36]{opacity:.5;cursor:not-allowed}.mode-card.mode-locked[data-v-55cd3e36]:hover{border-color:var(--border)}.mode-radio[data-v-55cd3e36]{width:20px;height:20px;border-radius:50%;border:2px solid var(--text-muted);display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:2px}.mode-radio.selected[data-v-55cd3e36]{border-color:var(--accent)}.mode-radio.selected[data-v-55cd3e36]:after{content:"";width:10px;height:10px;border-radius:50%;background:var(--accent)}.mode-info[data-v-55cd3e36]{flex:1}.mode-title[data-v-55cd3e36]{font-size:14px;font-weight:600;margin-bottom:2px;display:flex;align-items:center;gap:8px;color:var(--text-primary)}.mode-desc[data-v-55cd3e36]{font-size:12px;color:var(--text-secondary);margin-bottom:4px}.mode-badge[data-v-55cd3e36]{flex-shrink:0}.mode-lock-text[data-v-55cd3e36]{font-size:11px;color:var(--text-muted);font-style:italic;display:flex;align-items:center;gap:4px;margin-top:4px}
@@ -0,0 +1 @@
import{d as C,o as x,b as o,c as l,e as a,T as A,U as B,r as k,a3 as p,g as c,t as i,n as f,w as d,h as g,f as v,E as r,i as u}from"./index-CcYCuTIa.js";import{J as z,K as L}from"./admin-i6XhhI1Z.js";import{_ as N}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./index-CPDTx6RU.js";const V={class:"assignment-mode-page"},$={class:"mode-list"},q=["onClick"],E={class:"mode-info"},D={class:"mode-title"},T={class:"mode-desc"},F={key:0,class:"mode-lock-text"},I=C({__name:"AssignmentMode",setup(J){const _=k([{id:"manual",name:"手动接单",enabled:!0,locked:!1},{id:"round_robin",name:"轮询分配",enabled:!1,locked:!0,unlock_at:"阶段二"},{id:"least_active",name:"最少活跃优先",enabled:!1,locked:!0,unlock_at:"阶段二"},{id:"weighted",name:"加权比例分配",enabled:!1,locked:!0,unlock_at:"阶段三"},{id:"skill_match",name:"技能匹配分配",enabled:!1,locked:!0,unlock_at:"阶段三"},{id:"priority_queue",name:"优先队列",enabled:!1,locked:!0,unlock_at:"阶段三"}]),n=k("manual");x(async()=>{try{const s=(await z()).data.data;n.value=s.current_mode,s.modes&&s.modes.length>0&&(_.value=s.modes)}catch{}});async function y(e){if(e.locked){r.warning(`${e.name}暂未开放,${e.unlock_at||"后续版本"}解锁`);return}if(e.id!==n.value)try{await L(e.id),n.value=e.id,r.success(`已切换为「${e.name}`)}catch{r.error("切换分配模式失败")}}function h(e){return{manual:"坐席在待办列表中自行选择接单。AB 角色冗余设计,1 人即可承担。",round_robin:"按坐席列表顺序依次分配,循环往复。",least_active:"自动分配给当前活跃会话数最少的坐席。",weighted:"按坐席权重分配(如高级权重2、初级权重1)。",skill_match:"根据问题类别匹配坐席技能标签。",priority_queue:"紧急/阻断性问题优先路由到高级坐席/组长。"}[e]||""}function b(e){return{round_robin:"坐席人数不足3人,暂不需要",least_active:"坐席人数不足3人,暂不需要",weighted:"坐席人数不足5人,暂不需要",skill_match:"需坐席≥5人 + 技能标签体系成熟",priority_queue:"需坐席≥5人 + 紧急度评分上线"}[e]||"后续阶段解锁"}return(e,s)=>{const m=u("el-tag"),w=u("Lock"),M=u("el-icon");return o(),l("div",V,[s[1]||(s[1]=a("div",{class:"page-title"},"消息分配模式",-1)),s[2]||(s[2]=a("div",{class:"page-desc"},"当前坐席1人足以承担,手动接单完全满足。后续模式按坐席规模自动解锁。",-1)),a("div",$,[(o(!0),l(A,null,B(_.value,t=>(o(),l("div",{key:t.id,class:p(["mode-card",{"mode-selected":t.id===n.value,"mode-locked":t.locked}]),onClick:K=>y(t)},[a("div",{class:p(["mode-radio",{selected:t.id===n.value}])},null,2),a("div",E,[a("div",D,[c(i(t.name)+" ",1),t.id===n.value?(o(),f(m,{key:0,type:"success",size:"small",class:"mode-badge"},{default:d(()=>[...s[0]||(s[0]=[c(" 当前启用 ",-1)])]),_:1})):t.locked?(o(),f(m,{key:1,type:t.unlock_at==="阶段三"?"info":"warning",size:"small",class:"mode-badge"},{default:d(()=>[c(i(t.unlock_at||"后续"),1)]),_:2},1032,["type"])):g("",!0)]),a("div",T,i(h(t.id)),1),t.locked?(o(),l("div",F,[v(M,{size:12},{default:d(()=>[v(w)]),_:1}),c(" "+i(b(t.id)),1)])):g("",!0)])],10,q))),128))])])}}}),G=N(I,[["__scopeId","data-v-55cd3e36"]]);export{G as default};
@@ -0,0 +1 @@
.audit-logs[data-v-179502e5]{padding:0}.filter-bar[data-v-179502e5]{margin-bottom:16px;border:none;background:var(--bg-secondary)}.pagination-bar[data-v-179502e5]{display:flex;justify-content:flex-end;margin-top:16px}.detail-block[data-v-179502e5]{padding:8px 16px;background:var(--bg-secondary, #f5f7fa);border-radius:4px}.detail-title[data-v-179502e5]{font-size:12px;color:#909399;margin-bottom:6px}.detail-json[data-v-179502e5]{margin:0;white-space:pre-wrap;word-break:break-all;font-family:Menlo,Consolas,monospace;font-size:12px;line-height:1.5;max-height:280px;overflow:auto}.detail-meta[data-v-179502e5]{display:flex;gap:24px;margin-top:8px;font-size:12px;color:#909399}
@@ -0,0 +1 @@
import{d as E,o as F,b as g,c as f,f as o,w as n,V as P,n as j,e as d,r as w,v as z,E as K,i,a2 as O,p as $,W as J,T as Q,U as W,g as c,t as p,h as q}from"./index-CcYCuTIa.js";import{Q as G}from"./admin-i6XhhI1Z.js";import{_ as H}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./index-CPDTx6RU.js";const X={class:"audit-logs"},Z={class:"detail-block"},ee={class:"detail-json"},te={key:0,class:"detail-meta"},ae={class:"pagination-bar"},oe=E({__name:"AuditLogs",setup(le){const m=w(!1),v=w([]),l=z({employeeId:"",action:"",dateRange:null}),s=z({page:1,pageSize:50,total:0}),V=["config_change","login","logout","permission_change","role_assign","role_revoke","agent_create","agent_update","agent_delete","integration_update"],S=[{text:"最近24小时",value:()=>{const a=new Date,e=new Date;return e.setTime(e.getTime()-3600*1e3*24),[e,a]}},{text:"最近7天",value:()=>{const a=new Date,e=new Date;return e.setTime(e.getTime()-3600*1e3*24*7),[e,a]}}];function D(){const a={page:s.page,page_size:s.pageSize};return l.employeeId&&(a.employee_id=l.employeeId),l.action&&(a.action=l.action),l.dateRange&&l.dateRange.length===2&&(a.from=`${l.dateRange[0]}T00:00:00`,a.to=`${l.dateRange[1]}T23:59:59`),a}async function u(){m.value=!0;try{const{data:a}=await G(D());a.code===0&&(v.value=a.data.items||[],s.total=a.data.total||0)}catch{K.error("加载安全审计日志失败")}finally{m.value=!1}}function y(){s.page=1,u()}function k(){l.employeeId="",l.action="",l.dateRange=null,s.page=1,u()}function x(){s.page=1,u()}function C(a){if(!a)return"—";const e=new Date(a);return isNaN(e.getTime())?a:e.toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})}function T(a){if(a==null)return"—";try{return JSON.stringify(a,null,2)}catch{return String(a)}}return F(()=>u()),(a,e)=>{const I=i("el-input"),_=i("el-form-item"),N=i("el-option"),R=i("el-select"),U=i("el-date-picker"),b=i("el-button"),L=i("el-form"),M=i("el-card"),r=i("el-table-column"),h=i("el-tag"),A=i("el-table"),B=i("el-pagination"),Y=O("loading");return g(),f("div",X,[o(M,{class:"filter-bar",shadow:"never"},{default:n(()=>[o(L,{inline:!0,onSubmit:e[3]||(e[3]=$(()=>{},["prevent"]))},{default:n(()=>[o(_,{label:"操作人"},{default:n(()=>[o(I,{modelValue:l.employeeId,"onUpdate:modelValue":e[0]||(e[0]=t=>l.employeeId=t),placeholder:"employee_id",clearable:"",style:{width:"200px"},onKeyup:J(y,["enter"])},null,8,["modelValue"])]),_:1}),o(_,{label:"操作类型"},{default:n(()=>[o(R,{modelValue:l.action,"onUpdate:modelValue":e[1]||(e[1]=t=>l.action=t),placeholder:"全部",clearable:"",filterable:"","allow-create":"","default-first-option":"",style:{width:"200px"}},{default:n(()=>[(g(),f(Q,null,W(V,t=>o(N,{key:t,label:t,value:t},null,8,["label","value"])),64))]),_:1},8,["modelValue"])]),_:1}),o(_,{label:"时间范围"},{default:n(()=>[o(U,{modelValue:l.dateRange,"onUpdate:modelValue":e[2]||(e[2]=t=>l.dateRange=t),type:"daterange","range-separator":"至","start-placeholder":"开始日期","end-placeholder":"结束日期","value-format":"YYYY-MM-DD",shortcuts:S},null,8,["modelValue"])]),_:1}),o(_,null,{default:n(()=>[o(b,{type:"primary",onClick:y},{default:n(()=>[...e[6]||(e[6]=[c("查询",-1)])]),_:1}),o(b,{onClick:k},{default:n(()=>[...e[7]||(e[7]=[c("重置",-1)])]),_:1})]),_:1})]),_:1})]),_:1}),P((g(),j(A,{data:v.value,stripe:"",style:{width:"100%"}},{default:n(()=>[o(r,{type:"expand"},{default:n(({row:t})=>[d("div",Z,[e[8]||(e[8]=d("div",{class:"detail-title"},"详情 (details)",-1)),d("pre",ee,p(T(t.details)),1),t.resource_id?(g(),f("div",te,[d("span",null,"资源ID"+p(t.resource_id),1),d("span",null,"UA"+p(t.user_agent||"—"),1)])):q("",!0)])]),_:1}),o(r,{prop:"created_at",label:"时间",width:"170"},{default:n(({row:t})=>[c(p(C(t.created_at)),1)]),_:1}),o(r,{prop:"employee_id",label:"操作人",width:"130","show-overflow-tooltip":""}),o(r,{prop:"action",label:"操作类型",width:"150"},{default:n(({row:t})=>[o(h,{size:"small",effect:"plain"},{default:n(()=>[c(p(t.action||"—"),1)]),_:2},1024)]),_:1}),o(r,{prop:"resource",label:"资源",width:"150","show-overflow-tooltip":""}),o(r,{prop:"result",label:"结果",width:"90"},{default:n(({row:t})=>[o(h,{size:"small",type:t.result==="success"?"success":"danger"},{default:n(()=>[c(p(t.result||"—"),1)]),_:2},1032,["type"])]),_:1}),o(r,{prop:"ip_address",label:"IP",width:"140","show-overflow-tooltip":""})]),_:1},8,["data"])),[[Y,m.value]]),d("div",ae,[o(B,{"current-page":s.page,"onUpdate:currentPage":e[4]||(e[4]=t=>s.page=t),"page-size":s.pageSize,"onUpdate:pageSize":e[5]||(e[5]=t=>s.pageSize=t),total:s.total,"page-sizes":[20,50,100],layout:"total, sizes, prev, pager, next, jumper",onCurrentChange:u,onSizeChange:x},null,8,["current-page","page-size","total"])])])}}}),de=H(oe,[["__scopeId","data-v-179502e5"]]);export{de as default};
@@ -0,0 +1 @@
import{S as o}from"./StatCard-xjbOwrQZ.js";import{u as g}from"./automation-Bz1ZqHYw.js";import{d as w,o as k,b as c,c as i,e as v,j as x,f as a,T as M,w as d,S as _,i as l,g as h}from"./index-CcYCuTIa.js";import{_ as y}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./index-CPDTx6RU.js";const C={class:"auto-metrics"},S={key:0,class:"loading-state"},A={class:"stat-grid"},B=w({__name:"AutoMetrics",setup(N){const n=g(),e=_(()=>n.metrics),m=_(()=>!e.value||e.value.total_sessions===0?"解决率 -":`解决率 ${Math.round(e.value.resolved_sessions/e.value.total_sessions*100)}%`),p=_(()=>{var s;const r=((s=e.value)==null?void 0:s.by_scenario)||{};return Object.entries(r).map(([u,t])=>({scenario:u,count:t}))});return k(()=>{n.loadMetrics()}),(r,s)=>{const u=l("el-skeleton"),t=l("el-table-column"),b=l("el-table"),f=l("el-card");return c(),i("div",C,[s[1]||(s[1]=v("div",{class:"page-title"},"自动化运营指标",-1)),s[2]||(s[2]=v("div",{class:"page-desc"},"阶段5 自动化闭环核心指标看板,数据实时反映自动化处置成效。",-1)),x(n).metrics?(c(),i(M,{key:1},[v("div",A,[a(o,{label:"自动化会话总数",value:e.value.total_sessions,subtitle:m.value,"value-color":"var(--accent)"},null,8,["value","subtitle"]),a(o,{label:"已解决",value:e.value.resolved_sessions,"value-color":"var(--success)"},null,8,["value"]),a(o,{label:"转人工",value:e.value.handoff_sessions,"value-color":"var(--warning)"},null,8,["value"]),a(o,{label:"异常会话",value:e.value.error_sessions,"value-color":"var(--danger)"},null,8,["value"]),a(o,{label:"自动执行动作",value:e.value.auto_executed_actions},null,8,["value"]),a(o,{label:"需审批动作",value:e.value.approval_required_actions,"value-color":"var(--warning)"},null,8,["value"])]),a(f,{class:"breakdown",shadow:"never"},{header:d(()=>[...s[0]||(s[0]=[h("按场景分布(会话数)",-1)])]),default:d(()=>[a(b,{data:p.value,stripe:""},{default:d(()=>[a(t,{prop:"scenario",label:"场景"}),a(t,{prop:"count",label:"会话数",width:"140"})]),_:1},8,["data"])]),_:1})],64)):(c(),i("div",S,[a(u,{rows:6,animated:""})]))])}}}),E=y(B,[["__scopeId","data-v-f6392139"]]);export{E as default};
@@ -0,0 +1 @@
.auto-metrics[data-v-f6392139]{padding:4px}.page-title[data-v-f6392139]{font-size:20px;font-weight:600;color:var(--text-primary)}.page-desc[data-v-f6392139]{color:var(--text-secondary);font-size:13px;margin:6px 0 16px}.stat-grid[data-v-f6392139]{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:16px;margin-bottom:16px}.breakdown[data-v-f6392139]{margin-top:8px}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
.bind-page[data-v-0201159d]{min-height:100vh;display:flex;align-items:center;justify-content:center;position:relative;background:var(--bg-primary)}.bind-bg[data-v-0201159d]{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}.bind-bg-gradient[data-v-0201159d]{position:absolute;top:-50%;left:-50%;width:200%;height:200%;background:radial-gradient(ellipse at center,rgba(59,130,246,.08) 0%,transparent 60%);animation:rotate-0201159d 30s linear infinite}@keyframes rotate-0201159d{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.bind-card[data-v-0201159d]{position:relative;z-index:1;width:400px;padding:40px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:0 4px 24px #0000004d}.bind-header[data-v-0201159d]{text-align:center;margin-bottom:32px}.bind-logo-icon[data-v-0201159d]{width:56px;height:56px;background:linear-gradient(135deg,#3b82f6,#8b5cf6);border-radius:14px;display:flex;align-items:center;justify-content:center;color:#fff;margin:0 auto 16px}.bind-title[data-v-0201159d]{font-size:22px;font-weight:700;color:var(--text-primary);margin:0 0 4px}.bind-subtitle[data-v-0201159d]{font-size:13px;color:var(--text-muted);margin:0}.wecom-user-info[data-v-0201159d]{margin-bottom:24px}.bind-options[data-v-0201159d]{display:flex;flex-direction:column;gap:16px}.bind-options[data-v-0201159d] .el-radio-group{display:flex;flex-direction:column;gap:12px}.bind-options[data-v-0201159d] .el-radio{padding:12px;background:var(--bg-tertiary);border-radius:8px}.next-btn[data-v-0201159d]{width:100%;margin-top:24px}.bind-form[data-v-0201159d]{margin-top:16px}.form-actions[data-v-0201159d]{display:flex;gap:12px;margin-top:24px}.form-actions[data-v-0201159d] .el-button{flex:1}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
.config-group-card[data-v-fdfcb9b4]{background-color:var(--bg-secondary);border-color:var(--border)}.config-group-header[data-v-fdfcb9b4]{display:flex;align-items:center;justify-content:space-between}.config-group-title[data-v-fdfcb9b4]{display:flex;align-items:center;font-size:14px;font-weight:600;color:var(--text-primary)}.config-group-desc[data-v-fdfcb9b4]{font-size:12px;color:var(--text-secondary);margin-top:6px}.config-items[data-v-fdfcb9b4]{display:flex;flex-direction:column}.config-item[data-v-fdfcb9b4]{display:flex;align-items:center;justify-content:space-between;padding:10px 0;border-top:1px solid var(--border)}.config-item[data-v-fdfcb9b4]:first-child{border-top:none;padding-top:0}.config-item-info[data-v-fdfcb9b4]{display:flex;flex-direction:column;gap:2px}.config-item-name[data-v-fdfcb9b4]{font-size:13px;color:var(--text-primary)}.config-item-stage[data-v-fdfcb9b4]{font-size:11px;color:var(--text-muted)}.config-item-control[data-v-fdfcb9b4]{display:flex;align-items:center;gap:8px;flex-shrink:0}.config-json-preview[data-v-fdfcb9b4]{font-size:11px;max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.loading-state[data-v-f5be3c67]{padding:24px 0}
@@ -0,0 +1 @@
.health-list[data-v-5d2e4267]{padding:16px}.health-item[data-v-5d2e4267]{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.health-item[data-v-5d2e4267]:last-child{margin-bottom:0}.health-name[data-v-5d2e4267]{font-size:13px;color:var(--text-primary)}.dashboard-table-row:hover td{background-color:var(--bg-tertiary)!important}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
.evaluation-stats[data-v-6dbba9b5]{padding:0}.stats-cards[data-v-6dbba9b5]{display:grid;grid-template-columns:repeat(5,1fr);gap:16px;margin-bottom:20px}.stat-card[data-v-6dbba9b5]{background:var(--bg-card);border-radius:8px;padding:20px;display:flex;align-items:center;gap:16px;border:1px solid var(--border)}.stat-card-icon[data-v-6dbba9b5]{width:48px;height:48px;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:24px;color:#fff}.total-icon[data-v-6dbba9b5]{background:linear-gradient(135deg,#409eff,#67b3ff)}.star-icon[data-v-6dbba9b5]{background:linear-gradient(135deg,#e6a23c,#f0c78a)}.satisfied-icon[data-v-6dbba9b5]{background:linear-gradient(135deg,#67c23a,#85ce61)}.neutral-icon[data-v-6dbba9b5]{background:linear-gradient(135deg,#e6a23c,#ebb563)}.dissatisfied-icon[data-v-6dbba9b5]{background:linear-gradient(135deg,#f56c6c,#f78989)}.stat-card-content[data-v-6dbba9b5]{flex:1}.stat-card-value[data-v-6dbba9b5]{font-size:28px;font-weight:600;color:var(--text-primary);line-height:1.2}.stat-card-label[data-v-6dbba9b5]{font-size:13px;color:var(--text-secondary);margin-top:4px}.detail-section[data-v-6dbba9b5]{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:20px}.distribution-card[data-v-6dbba9b5]{border-radius:8px}.card-header[data-v-6dbba9b5]{font-size:15px;font-weight:500;color:var(--text-primary)}.star-bars[data-v-6dbba9b5],.emoji-bars[data-v-6dbba9b5]{display:flex;flex-direction:column;gap:12px}.star-bar-item[data-v-6dbba9b5],.emoji-bar-item[data-v-6dbba9b5]{display:grid;grid-template-columns:50px 1fr 120px;align-items:center;gap:12px}.star-label[data-v-6dbba9b5],.emoji-label[data-v-6dbba9b5]{font-size:13px;color:var(--text-secondary);display:flex;align-items:center;gap:4px}.star-count[data-v-6dbba9b5],.emoji-count[data-v-6dbba9b5]{font-size:13px;color:var(--text-secondary);text-align:right}.table-card[data-v-6dbba9b5]{border-radius:8px}.pagination-container[data-v-6dbba9b5]{margin-top:20px;display:flex;justify-content:flex-end}@media (max-width: 1200px){.stats-cards[data-v-6dbba9b5]{grid-template-columns:repeat(3,1fr)}}@media (max-width: 768px){.stats-cards[data-v-6dbba9b5]{grid-template-columns:repeat(2,1fr)}.detail-section[data-v-6dbba9b5]{grid-template-columns:1fr}.star-bar-item[data-v-6dbba9b5],.emoji-bar-item[data-v-6dbba9b5]{grid-template-columns:40px 1fr}.star-count[data-v-6dbba9b5],.emoji-count[data-v-6dbba9b5]{display:none}}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More