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
+7
View File
@@ -0,0 +1,7 @@
cat /tmp/h5-main-part1.bin /tmp/h5-main-part2.bin /tmp/h5-main-part3.bin /tmp/h5-main-part4.bin > /tmp/h5-main-merged.js
wc -c < /tmp/h5-main-merged.js
cp /opt/wecom-it-desk/frontend-h5/dist/assets/index-CFP5_C6V.js /opt/wecom-it-desk/frontend-h5/dist/assets/index-CFP5_C6V.js.bak
cp /tmp/h5-main-merged.js /opt/wecom-it-desk/frontend-h5/dist/assets/index-Ad4OgjKG.js
cp /opt/wecom-it-desk/frontend-h5/dist/index.html /opt/wecom-it-desk/frontend-h5/dist/index.html.bak
cp /tmp/h5-index-v2.html /opt/wecom-it-desk/frontend-h5/dist/index.html
ls -la /opt/wecom-it-desk/frontend-h5/dist/assets/index-Ad4OgjKG.js /opt/wecom-it-desk/frontend-h5/dist/index.html
@@ -0,0 +1,8 @@
cat /tmp/h5-full-part1.bin /tmp/h5-full-part2.bin > /tmp/h5-full.tar.gz
wc -c < /tmp/h5-full.tar.gz
cd /opt/wecom-it-desk/frontend-h5/dist && tar xzf /tmp/h5-full.tar.gz
ls -la /opt/wecom-it-desk/frontend-h5/dist/assets/index-CgWukqlD.css
ls -la /opt/wecom-it-desk/frontend-h5/dist/assets/index-Cfeo0axm.js
ls -la /opt/wecom-it-desk/frontend-h5/dist/index.html
grep -o 'index-[A-Za-z0-9_]*\.js' /opt/wecom-it-desk/frontend-h5/dist/index.html
grep -o 'index-[A-Za-z0-9_]*\.css' /opt/wecom-it-desk/frontend-h5/dist/index.html
+8
View File
@@ -0,0 +1,8 @@
cat /tmp/h5-main-v2-part1.bin /tmp/h5-main-v2-part2.bin /tmp/h5-main-v2-part3.bin /tmp/h5-main-v2-part4.bin > /tmp/h5-main-v2-merged.js
wc -c < /tmp/h5-main-v2-merged.js
cp /opt/wecom-it-desk/frontend-h5/dist/assets/index-Ad4OgjKG.js /opt/wecom-it-desk/frontend-h5/dist/assets/index-Ad4OgjKG.js.bak.$(date +%Y%m%d-%H%M%S)
cp /tmp/h5-main-v2-merged.js /opt/wecom-it-desk/frontend-h5/dist/assets/index-Cfeo0axm.js
cp /opt/wecom-it-desk/frontend-h5/dist/index.html /opt/wecom-it-desk/frontend-h5/dist/index.html.bak.$(date +%Y%m%d-%H%M%S)
cp /tmp/h5-index-v3.html /opt/wecom-it-desk/frontend-h5/dist/index.html
ls -la /opt/wecom-it-desk/frontend-h5/dist/assets/index-Cfeo0axm.js /opt/wecom-it-desk/frontend-h5/dist/index.html
grep -o 'index-[A-Za-z0-9_]*\.js' /opt/wecom-it-desk/frontend-h5/dist/index.html
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
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
t(EE,[["__scopeId","data-v-f91237e0"]]);function xE(){return typeof navigator>"u"?!1:/wxwork/i.test(navigator.userAgent)}const CE=[{path:"/",name:"ChatView",component:aE,meta:{title:"IT智能服务台",requiresAuth:!0}},{path:"/login",name:"Login",component:()=>Hn(()=>import("./Login-B-38pybU.js"),__vite__mapDeps([4,5,6])),meta:{title:"登录",requiresAuth:!1}},{path:"/bind",name:"Bind",component:()=>Hn(()=>import("./Bind-DVCQqFbQ.js"),__vite__mapDeps([7,5,1,2,8,9])),meta:{title:"账号绑定",requiresAuth:!1}},{path:"/wework-only",name:"WeworkOnly",component:()=>Hn(()=>import("./WeworkOnly-t2Ct8LGE.js"),__vite__mapDeps([10,11])),meta:{title:"请在企业微信中打开",requiresAuth:!1}},{path:"/emergency",name:"EmergencyDispatcher",component:hE,meta:{title:"应急身份检测",requiresAuth:!1}},{path:"/h5-preview",name:"H5Preview",component:SE,meta:{title:"员工自助",requiresAuth:!1}},{path:"/automation/:id",name:"AutomationProgress",component:()=>Hn(()=>import("./AutomationProgress-BpfwCyBW.js"),__vite__mapDeps([12,3,1,13,9])),meta:{title:"自动化处置",requiresAuth:!0}},{path:"/:pathMatch(.*)*",redirect:"/"}],jf=X_({history:T_("/h5/"),routes:CE});jf.beforeEach(async(e,t,n)=>{if(e.name==="WeworkOnly"||e.name==="Login"||e.name==="Bind"||e.name==="EmergencyDispatcher"||e.name==="H5Preview"){n();return}const s=new URLSearchParams(window.location.search),o=e.query.token||s.get("token");if(o){localStorage.setItem("h5_token",o),s.delete("token");const c=s.toString(),u=c?`${window.location.pathname}?${c}`:window.location.pathname;window.history.replaceState({},"",u)}const{useEmployeeStore:r}=await Hn(async()=>{const{useEmployeeStore:c}=await Promise.resolve().then(()=>aw);return{useEmployeeStore:c}},void 0),i=r();if(o){i.$patch({token:o});try{await i.fetchEmployeeInfo()}catch(c){console.warn("[Router] Portal token 验证失败:",c)}}if(!(/^localhost(:\d+)?$/.test(window.location.hostname)||window.location.hostname==="127.0.0.1")&&!xE()){if(i.isAuthenticated){n();return}n({name:"Login"});return}const a=e.query.code||new URLSearchParams(window.location.search).get("code");if(a){try{await i.handleOAuthCallback(a);const c=new URLSearchParams(window.location.search);c.delete("code"),c.delete("state");const u=c.toString(),f=u?`${window.location.pathname}?${u}`:window.location.pathname;window.history.replaceState({},"",f),n()}catch(c){console.error("[Router] OAuth2 授权失败:",c),i.redirectToOAuth()}return}if(i.isAuthenticated){n();return}i.redirectToOAuth()});const zi=hu(Ug);zi.use(Fg());zi.use(jf);const AE=Date.now(),ja=500;zi.mount("#app");const Ua=Date.now()-AE;Ua>=ja?document.body.classList.add("app-loaded"):setTimeout(()=>{document.body.classList.add("app-loaded")},ja-Ua);export{mt as $,sm as A,am as B,Gm as C,Rg as D,vg as E,Fi as F,$e as G,B as H,Rt as I,M as J,Op as K,Go as L,Se as M,yt as N,Mm as O,Ws as P,A as Q,Ig as R,Re as S,Lt as T,Wl as U,kE as V,ut as W,ft as X,ff as Y,It as Z,Et as _,ql as a,Fn as a0,p as a1,dt as a2,Xe as a3,fe as a4,ie as a5,K as a6,df as a7,Bt as a8,bt as a9,Co as aa,Oe as ab,Xh as ac,De as ad,em as ae,TE as af,Dh as ag,Sh as ah,yu as ai,wu as aj,zs as ak,oe as al,Ko as am,Yh as an,On as ao,sn as ap,Ie as aq,kh as ar,Ke as as,RE as at,lt as au,_u as av,Ii as aw,Bi as ax,de as ay,Ft as az,Ns as b,hg as c,Hh as d,Om as e,tm as f,im as g,Am as h,Wm as i,dm as j,wg as k,gg as l,ng as m,vm as n,Sm as o,Nm as p,Vm as q,Og as r,ve as s,um as t,Ag as u,Cg as v,pg as w,OE as x,lg as y,cm as z};
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
+1
View File
@@ -0,0 +1 @@
(),M("div",bE,[...i[6]||(i[6]=[p("p",null,"💡 电脑端访问可获得完整体验(右栏常驻显示)",-1),p("p",null,'移动端请点上方"右栏"按钮打开内容',-1)])])):fe("",!0)])}}}),SE=Et(EE,[["__scopeId","data-v-f91237e0"]]);function xE(){return typeof navigator>"u"?!1:/wxwork/i.test(navigator.userAgent)}const CE=[{path:"/",name:"ChatView",component:aE,meta:{title:"IT智能服务台",requiresAuth:!0}},{path:"/login",name:"Login",component:()=>qn(()=>import("./Login-B4ja_KpA.js"),__vite__mapDeps([4,5,6])),meta:{title:"登录",requiresAuth:!1}},{path:"/bind",name:"Bind",component:()=>qn(()=>import("./Bind-CR1wzN0t.js"),__vite__mapDeps([7,5,1,2,8,9])),meta:{title:"账号绑定",requiresAuth:!1}},{path:"/wework-only",name:"WeworkOnly",component:()=>qn(()=>import("./WeworkOnly-CSgFNSQF.js"),__vite__mapDeps([10,11])),meta:{title:"请在企业微信中打开",requiresAuth:!1}},{path:"/emergency",name:"EmergencyDispatcher",component:hE,meta:{title:"应急身份检测",requiresAuth:!1}},{path:"/h5-preview",name:"H5Preview",component:SE,meta:{title:"员工自助",requiresAuth:!1}},{path:"/automation/:id",name:"AutomationProgress",component:()=>qn(()=>import("./AutomationProgress-CGiOnei3.js"),__vite__mapDeps([12,3,1,13,9])),meta:{title:"自动化处置",requiresAuth:!0}},{path:"/:pathMatch(.*)*",redirect:"/"}],jf=X_({history:T_("/h5/"),routes:CE});jf.beforeEach(async(e,t,n)=>{if(e.name==="WeworkOnly"||e.name==="Login"||e.name==="Bind"||e.name==="EmergencyDispatcher"||e.name==="H5Preview"){n();return}const s=new URLSearchParams(window.location.search),o=e.query.token||s.get("token");if(o){localStorage.setItem("h5_token",o),s.delete("token");const c=s.toString(),u=c?`${window.location.pathname}?${c}`:window.location.pathname;window.history.replaceState({},"",u)}const{useEmployeeStore:r}=await qn(async()=>{const{useEmployeeStore:c}=await Promise.resolve().then(()=>aw);return{useEmployeeStore:c}},void 0),i=r();if(o){i.$patch({token:o});try{await i.fetchEmployeeInfo()}catch(c){console.warn("[Router] Portal token 验证失败:",c)}}if(!(/^localhost(:\d+)?$/.test(window.location.hostname)||window.location.hostname==="127.0.0.1")&&!xE()){if(i.isAuthenticated){n();return}n({name:"Login"});return}const a=e.query.code||new URLSearchParams(window.location.search).get("code");if(a){try{await i.handleOAuthCallback(a);const c=new URLSearchParams(window.location.search);c.delete("code"),c.delete("state");const u=c.toString(),f=u?`${window.location.pathname}?${u}`:window.location.pathname;window.history.replaceState({},"",f),n()}catch(c){console.error("[Router] OAuth2 授权失败:",c),i.redirectToOAuth()}return}if(i.isAuthenticated){n();return}i.redirectToOAuth()});const zi=hu(Ug);zi.use(Fg());zi.use(jf);const AE=Date.now(),ja=500;zi.mount("#app");const Ua=Date.now()-AE;Ua>=ja?document.body.classList.add("app-loaded"):setTimeout(()=>{document.body.classList.add("app-loaded")},ja-Ua);export{mt as $,sm as A,am as B,Gm as C,Rg as D,vg as E,Fi as F,$e as G,B as H,Rt as I,M as J,Op as K,Go as L,Se as M,yt as N,Mm as O,Ks as P,A as Q,Ig as R,Re as S,Lt as T,Wl as U,kE as V,ut as W,ft as X,ff as Y,It as Z,Et as _,ql as a,Bn as a0,p as a1,dt as a2,Xe as a3,fe as a4,ie as a5,K as a6,df as a7,Bt as a8,bt as a9,Co as aa,Oe as ab,Xh as ac,De as ad,em as ae,TE as af,Dh as ag,Sh as ah,yu as ai,wu as aj,Ws as ak,oe as al,Ko as am,Yh as an,Pn as ao,sn as ap,Ie as aq,kh as ar,Ke as as,RE as at,lt as au,_u as av,Ii as aw,Bi as ax,de as ay,Ft as az,Ls as b,hg as c,Hh as d,Om as e,tm as f,im as g,Am as h,Wm as i,dm as j,wg as k,gg as l,ng as m,vm as n,Sm as o,Nm as p,Vm as q,Og as r,ve as s,um as t,Ag as u,Cg as v,pg as w,OE as x,lg as y,cm as z};
+3
View File
@@ -0,0 +1,3 @@
curl -s -o /dev/null -w "%{http_code}" https://itsupport.servyou.com.cn/h5/
grep -o "index-[A-Za-z0-9_]*\.js" /opt/wecom-it-desk/frontend-h5/dist/index.html
curl -s -o /dev/null -w "%{http_code}" https://itsupport.servyou.com.cn/h5/assets/index-Ad4OgjKG.js
+12
View File
@@ -0,0 +1,12 @@
curl -s -o /dev/null -w '%{http_code}' http://localhost/h5/
echo
curl -s -o /dev/null -w '%{http_code}' http://localhost/h5/assets/index-Cfeo0axm.js
echo
curl -sI http://localhost/h5/assets/index-Cfeo0axm.js | grep -i content-length
curl -s -o /dev/null -w '%{http_code}' http://localhost/h5/assets/index-CgWukqlD.css
echo
curl -sI http://localhost/h5/assets/index-CgWukqlD.css | grep -i content-length
curl -s -o /dev/null -w '%{http_code}' http://localhost/h5/assets/Login-B4ja_KpA.js
echo
curl -s -o /dev/null -w '%{http_code}' http://localhost/h5/assets/auth-Bb_rTrmj.js
echo