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

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

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

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

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

2 lines
8.6 KiB
JavaScript

import{d as P,b as d,c as g,a3 as H,e as i,f as a,w as s,n as v,t as k,i as $,U as x,g as B,j as m,Z as J,r as V,T as N,o as W,V as D,k as R,E as C}from"./index-BYp6OBwf.js";import{_ as I}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{C as X,D as h,E as ee}from"./admin-QG1MRyaa.js";import{Q as A}from"./index-CQ6vhAxl.js";import"./index-CMW9Tl_L.js";const te={class:"reply-card-header"},le={class:"reply-card-title"},oe={class:"reply-card-status"},ae={key:1,class:"review-actions"},se={class:"reply-card-content"},ne={class:"reply-card-footer"},re={class:"footer-value"},ie={class:"footer-value"},ue={class:"footer-value"},de={class:"footer-value"},pe=P({__name:"QuickReplyCard",props:{reply:{}},emits:["approve","reject"],setup(n){function r(f){if(!f)return"-";try{return new Date(f).toLocaleDateString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit"})}catch{return f}}return(f,t)=>{const o=m("el-tag"),b=m("el-button");return d(),g("div",{class:H(["reply-card",{"is-pending":n.reply.status==="pending_review"}])},[i("div",te,[i("div",le,[a(o,{size:"small",effect:"plain",style:{"margin-right":"8px"}},{default:s(()=>[v(k(n.reply.category),1)]),_:1}),v(" "+k(n.reply.title),1)]),i("div",oe,[n.reply.status==="approved"?(d(),$(o,{key:0,type:"success",size:"small"},{default:s(()=>[...t[2]||(t[2]=[v(" 已审核 ",-1)])]),_:1})):n.reply.status==="pending_review"?(d(),g("div",ae,[a(b,{size:"small",type:"primary",onClick:t[0]||(t[0]=_=>f.$emit("approve",n.reply))},{default:s(()=>[...t[3]||(t[3]=[v(" 通过 ",-1)])]),_:1}),a(b,{size:"small",onClick:t[1]||(t[1]=_=>f.$emit("reject",n.reply))},{default:s(()=>[...t[4]||(t[4]=[v(" 驳回 ",-1)])]),_:1})])):n.reply.status==="rejected"?(d(),$(o,{key:2,type:"danger",size:"small"},{default:s(()=>[...t[5]||(t[5]=[v(" 已驳回 ",-1)])]),_:1})):(d(),$(o,{key:3,type:"info",size:"small"},{default:s(()=>[...t[6]||(t[6]=[v(" 草稿 ",-1)])]),_:1}))])]),i("div",se,k(n.reply.content),1),i("div",ne,[n.reply.variables&&n.reply.variables.length>0?(d(),g(x,{key:0},[t[7]||(t[7]=i("span",{class:"footer-label"},"变量:",-1)),i("span",re,k(n.reply.variables.join(", ")),1),t[8]||(t[8]=i("span",{class:"footer-sep"},"·",-1))],64)):B("",!0),n.reply.submitted_by_name?(d(),g(x,{key:1},[t[9]||(t[9]=i("span",{class:"footer-label"},"提交人:",-1)),i("span",ie,k(n.reply.submitted_by_name),1),t[10]||(t[10]=i("span",{class:"footer-sep"},"·",-1))],64)):B("",!0),t[11]||(t[11]=i("span",{class:"footer-label"},"版本:",-1)),i("span",ue,"v"+k(n.reply.version),1),t[12]||(t[12]=i("span",{class:"footer-sep"},"·",-1)),t[13]||(t[13]=i("span",{class:"footer-label"},"更新:",-1)),i("span",de,k(r(n.reply.updated_at)),1)])],2)}}}),me=I(pe,[["__scopeId","data-v-eab703b7"]]),ve=J("quickReply",()=>{const n=V([]),r=V("全部"),f=V(!1),t=N(()=>r.value==="全部"?n.value:n.value.filter(u=>u.category===r.value)),o=N(()=>{const u={全部:n.value.length};for(const y of n.value)u[y.category]=(u[y.category]||0)+1;return u});async function b(u){f.value=!0;try{const y=await X(u);n.value=y.data.data.items}catch(y){console.error("加载快速回复列表失败:",y)}finally{f.value=!1}}function _(u){r.value=u}async function j(u,y,U){try{return await h(u,y,U),await b(r.value==="全部"?void 0:r.value),!0}catch(z){return console.error("审核操作失败:",z),!1}}return{replies:n,activeCategory:r,loading:f,filteredReplies:t,categoryCounts:o,loadReplies:b,setCategory:_,review:j}}),fe={class:"quick-replies-page"},ye={class:"replies-toolbar"},ce={class:"category-tabs"},ge={key:0,class:"loading-state"},be={key:1},_e=P({__name:"QuickReplies",setup(n){const r=ve(),f=[...A],t=V(!1),o=V({category:"其他",title:"",content:"",variables:[],sort_order:0}),b=V(!1),_=V(!1),j=V(null),u=V("");W(()=>{r.loadReplies()});function y(p){return p==="全部"?r.replies.length:r.replies.filter(e=>e.category===p).length}function U(){const p=o.value.variables;typeof p=="string"&&p.trim()&&(o.value.variables=p.split(",").map(e=>e.trim()).filter(e=>e))}async function z(){var p;if(!o.value.title.trim()){C.warning("请输入模板标题");return}if(!o.value.content.trim()){C.warning("请输入模板内容");return}b.value=!0;try{const e=Array.isArray(o.value.variables)?o.value.variables:((p=o.value.variables)==null?void 0:p.split(",").map(c=>c.trim()).filter(c=>c))||[];await ee({id:"",category:o.value.category,title:o.value.title,content:o.value.content,variables:e,sort_order:o.value.sort_order,status:"approved",version:1,submitted_by:"",submitted_by_name:"",created_at:"",updated_at:""}),C.success("创建成功"),t.value=!1,o.value={category:"其他",title:"",content:"",variables:[],sort_order:0},r.loadReplies()}catch(e){console.error("创建失败:",e),C.error("创建失败")}finally{b.value=!1}}async function L(p){await r.review(p.id,"approve")?C.success("已通过审核"):C.error("审核操作失败")}function S(p){j.value=p,u.value="",_.value=!0}async function T(){if(!j.value)return;await r.review(j.value.id,"reject",u.value||"未填写原因")?(C.success("已驳回"),_.value=!1):C.error("驳回操作失败")}return(p,e)=>{const c=m("el-button"),F=m("Plus"),M=m("el-icon"),G=m("el-skeleton"),K=m("el-empty"),O=m("el-option"),Y=m("el-select"),w=m("el-form-item"),Q=m("el-input"),Z=m("el-input-number"),E=m("el-form"),q=m("el-dialog");return d(),g("div",fe,[e[16]||(e[16]=i("div",{class:"page-title"},"快速回复管理",-1)),e[17]||(e[17]=i("div",{class:"page-desc"},"分类管理 + 版本历史 + 审核发布流程。坐席提交→组长审核→全员可见。",-1)),i("div",ye,[i("div",ce,[(d(),g(x,null,D(f,l=>a(c,{key:l,type:R(r).activeCategory===l?"primary":"default",size:"small",onClick:ke=>R(r).setCategory(l)},{default:s(()=>[v(k(l)+" ("+k(y(l))+") ",1)]),_:2},1032,["type","onClick"])),64))]),a(c,{type:"primary",onClick:e[0]||(e[0]=l=>t.value=!0)},{default:s(()=>[a(M,null,{default:s(()=>[a(F)]),_:1}),e[11]||(e[11]=v(" 新增模板 ",-1))]),_:1})]),R(r).loading?(d(),g("div",ge,[a(G,{rows:5,animated:""})])):R(r).filteredReplies.length>0?(d(),g("div",be,[(d(!0),g(x,null,D(R(r).filteredReplies,l=>(d(),$(me,{key:l.id,reply:l,onApprove:L,onReject:S},null,8,["reply"]))),128))])):(d(),$(K,{key:2,description:"暂无待审核的快速回复模板"})),a(q,{modelValue:t.value,"onUpdate:modelValue":e[7]||(e[7]=l=>t.value=l),title:"新增快速回复模板",width:"520px","destroy-on-close":""},{footer:s(()=>[a(c,{onClick:e[6]||(e[6]=l=>t.value=!1)},{default:s(()=>[...e[12]||(e[12]=[v("取消",-1)])]),_:1}),a(c,{type:"primary",loading:b.value,onClick:z},{default:s(()=>[...e[13]||(e[13]=[v("确认创建",-1)])]),_:1},8,["loading"])]),default:s(()=>[a(E,{model:o.value,"label-position":"top"},{default:s(()=>[a(w,{label:"分类",required:""},{default:s(()=>[a(Y,{modelValue:o.value.category,"onUpdate:modelValue":e[1]||(e[1]=l=>o.value.category=l),placeholder:"请选择分类"},{default:s(()=>[(d(!0),g(x,null,D(R(A),l=>(d(),$(O,{key:l,label:l,value:l,disabled:l==="全部"},null,8,["label","value","disabled"]))),128))]),_:1},8,["modelValue"])]),_:1}),a(w,{label:"模板标题",required:""},{default:s(()=>[a(Q,{modelValue:o.value.title,"onUpdate:modelValue":e[2]||(e[2]=l=>o.value.title=l),placeholder:"请输入模板标题,如:VPN连接失败排查",maxlength:"128","show-word-limit":""},null,8,["modelValue"])]),_:1}),a(w,{label:"模板内容",required:""},{default:s(()=>[a(Q,{modelValue:o.value.content,"onUpdate:modelValue":e[3]||(e[3]=l=>o.value.content=l),type:"textarea",rows:6,placeholder:"请输入模板内容,支持变量替换,如:{employee_name}、{department}等"},null,8,["modelValue"])]),_:1}),a(w,{label:"可用变量(用逗号分隔)"},{default:s(()=>[a(Q,{modelValue:o.value.variables,"onUpdate:modelValue":e[4]||(e[4]=l=>o.value.variables=l),placeholder:"如:employee_name, department(用逗号分隔)",onBlur:U},null,8,["modelValue"])]),_:1}),a(w,{label:"排序权重"},{default:s(()=>[a(Z,{modelValue:o.value.sort_order,"onUpdate:modelValue":e[5]||(e[5]=l=>o.value.sort_order=l),min:0,max:9999},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue"]),a(q,{modelValue:_.value,"onUpdate:modelValue":e[10]||(e[10]=l=>_.value=l),title:"驳回快速回复",width:"440px","destroy-on-close":""},{footer:s(()=>[a(c,{onClick:e[9]||(e[9]=l=>_.value=!1)},{default:s(()=>[...e[14]||(e[14]=[v("取消",-1)])]),_:1}),a(c,{type:"danger",onClick:T},{default:s(()=>[...e[15]||(e[15]=[v("确认驳回",-1)])]),_:1})]),default:s(()=>[a(E,{"label-position":"top"},{default:s(()=>[a(w,{label:"驳回原因"},{default:s(()=>[a(Q,{modelValue:u.value,"onUpdate:modelValue":e[8]||(e[8]=l=>u.value=l),type:"textarea",rows:4,placeholder:"请填写驳回原因,如:内容需要更具体的操作步骤"},null,8,["modelValue"])]),_:1})]),_:1})]),_:1},8,["modelValue"])])}}}),je=I(_e,[["__scopeId","data-v-75778112"]]);export{je as default};