P0-1: 删除 docker-compose-override.yml + deploy-server 两份 workers=2→1(预防性修复,服务器根 compose 已是 workers=1)
This commit is contained in:
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 @@
|
||||
import{a6 as M,af as G,ap as j,ag as A,ah as D,s as L,a3 as u,a4 as b,aj as i,a8 as o,ak as n,C as H,aq as C,am as V,al as r,b as J,F as K,an as O,ao as m,ar as P,U as T,a2 as Q}from"./index-Dry6uMZb.js";/* empty css */import{b as F}from"./auth-C4b7Y9ej.js";import{C as W}from"./index-spiRTnAv.js";import{R as X,a as Y,F as Z,N as $}from"./index-CYr92l9H.js";const ee={class:"bind-page"},ae={class:"bind-card"},oe={key:0,class:"wecom-user-info"},ne={key:1,class:"bind-options"},te={key:2,class:"bind-form"},le={class:"form-actions"},se={class:"form-actions"},re=M({__name:"Bind",setup(ue){const k=G(),w=j(),_=A(),s=m(null),c=m("existing"),h=m(!1),d=m(!1),f=m(!1),B=m(""),t=P({employee_no:"",real_name:"",department:"",phone:""});function S(){h.value=!0}function q(){h.value=!1}async function z(){if(!s.value){v("用户信息无效");return}d.value=!0;try{const a=await F({employee_id:s.value.userid,bind_type:"existing",employee_no:t.employee_no});_.setToken(a.token),_.setUserInfo(a.user_info),T("绑定成功"),k.replace({name:"ChatView"})}catch(a){console.error("绑定失败:",a);const e=(a==null?void 0:a.message)||"绑定失败,请重试";v(e)}finally{d.value=!1}}async function E(){if(!s.value){v("用户信息无效");return}d.value=!0;try{const a=await F({employee_id:s.value.userid,bind_type:"new",real_name:t.real_name,department:t.department,phone:t.phone});_.setToken(a.token),_.setUserInfo(a.user_info),T("申请成功"),k.replace({name:"ChatView"})}catch(a){console.error("申请绑定失败:",a);const e=(a==null?void 0:a.message)||"申请失败,请重试";v(e)}finally{d.value=!1}}function v(a){B.value=a,f.value=!0,setTimeout(()=>{f.value=!1},3e3)}return D(()=>{const a=w.query.userid,e=w.query.name,y=w.query.corp_name;a&&e?s.value={userid:a,name:e,corp_name:y}:(L("缺少用户信息,请重新登录"),k.replace({name:"Login"}))}),(a,e)=>{const y=H,x=W,U=X,R=Y,p=J,g=K,N=Z,I=$;return u(),b("div",ee,[i("div",ae,[e[13]||(e[13]=i("div",{class:"bind-header"},[i("div",{class:"bind-icon"},"🔗"),i("h1",{class:"bind-title"},"账号绑定"),i("p",{class:"bind-subtitle"},"请绑定您的企业账号")],-1)),s.value?(u(),b("div",oe,[o(x,{inset:""},{default:n(()=>[o(y,{title:"企业微信",value:s.value.name},null,8,["value"]),s.value.corp_name?(u(),C(y,{key:0,title:"企业",value:s.value.corp_name},null,8,["value"])):V("",!0)]),_:1})])):V("",!0),h.value?(u(),b("div",te,[c.value==="existing"?(u(),C(N,{key:0,onSubmit:z},{default:n(()=>[o(x,{inset:""},{default:n(()=>[o(g,{modelValue:t.employee_no,"onUpdate:modelValue":e[1]||(e[1]=l=>t.employee_no=l),name:"employee_no",label:"员工号",placeholder:"请输入您的员工号",rules:[{required:!0,message:"请输入员工号"}]},null,8,["modelValue"])]),_:1}),i("div",le,[o(p,{size:"large",onClick:q},{default:n(()=>[...e[9]||(e[9]=[r("返回",-1)])]),_:1}),o(p,{type:"primary",size:"large","native-type":"submit",loading:d.value},{default:n(()=>[...e[10]||(e[10]=[r(" 绑定 ",-1)])]),_:1},8,["loading"])])]),_:1})):V("",!0),c.value==="new"?(u(),C(N,{key:1,onSubmit:E},{default:n(()=>[o(x,{inset:""},{default:n(()=>[o(g,{modelValue:t.real_name,"onUpdate:modelValue":e[2]||(e[2]=l=>t.real_name=l),name:"real_name",label:"姓名",placeholder:"请输入您的姓名",rules:[{required:!0,message:"请输入姓名"}]},null,8,["modelValue"]),o(g,{modelValue:t.department,"onUpdate:modelValue":e[3]||(e[3]=l=>t.department=l),name:"department",label:"部门",placeholder:"请输入部门",rules:[{required:!0,message:"请输入部门"}]},null,8,["modelValue"]),o(g,{modelValue:t.phone,"onUpdate:modelValue":e[4]||(e[4]=l=>t.phone=l),name:"phone",type:"tel",label:"手机",placeholder:"请输入手机号",rules:[{required:!0,message:"请输入手机号"}]},null,8,["modelValue"])]),_:1}),i("div",se,[o(p,{size:"large",onClick:q},{default:n(()=>[...e[11]||(e[11]=[r("返回",-1)])]),_:1}),o(p,{type:"primary",size:"large","native-type":"submit",loading:d.value},{default:n(()=>[...e[12]||(e[12]=[r(" 申请绑定 ",-1)])]),_:1},8,["loading"])])]),_:1})):V("",!0)])):(u(),b("div",ne,[o(R,{modelValue:c.value,"onUpdate:modelValue":e[0]||(e[0]=l=>c.value=l)},{default:n(()=>[o(U,{name:"existing",shape:"square"},{default:n(()=>[...e[6]||(e[6]=[r("绑定已有账号",-1)])]),_:1}),o(U,{name:"new",shape:"square"},{default:n(()=>[...e[7]||(e[7]=[r("申请新账号",-1)])]),_:1})]),_:1},8,["modelValue"]),o(p,{type:"primary",block:"",size:"large",class:"next-btn",onClick:S},{default:n(()=>[...e[8]||(e[8]=[r(" 下一步 ",-1)])]),_:1})])),o(I,{show:f.value,"onUpdate:show":e[5]||(e[5]=l=>f.value=l),type:"danger"},{default:n(()=>[r(O(B.value),1)]),_:1},8,["show"])])])}}}),ce=Q(re,[["__scopeId","data-v-c14f302d"]]);export{ce as default};
|
||||
@@ -0,0 +1 @@
|
||||
:root,:host{--van-notify-text-color: var(--van-white);--van-notify-padding: var(--van-padding-xs) var(--van-padding-md);--van-notify-font-size: var(--van-font-size-md);--van-notify-line-height: var(--van-line-height-md);--van-notify-primary-background: var(--van-primary-color);--van-notify-success-background: var(--van-success-color);--van-notify-danger-background: var(--van-danger-color);--van-notify-warning-background: var(--van-warning-color)}.van-notify{display:flex;align-items:center;justify-content:center;box-sizing:border-box;padding:var(--van-notify-padding);color:var(--van-notify-text-color);font-size:var(--van-notify-font-size);line-height:var(--van-notify-line-height);white-space:pre-wrap;text-align:center;word-wrap:break-word}.van-notify--primary{background:var(--van-notify-primary-background)}.van-notify--success{background:var(--van-notify-success-background)}.van-notify--danger{background:var(--van-notify-danger-background)}.van-notify--warning{background:var(--van-notify-warning-background)}.van-radio-group--horizontal{display:flex;flex-wrap:wrap}:root,:host{--van-radio-size: 20px;--van-radio-dot-size: 8px;--van-radio-border-color: var(--van-gray-5);--van-radio-duration: var(--van-duration-fast);--van-radio-label-margin: var(--van-padding-xs);--van-radio-label-color: var(--van-text-color);--van-radio-checked-icon-color: var(--van-primary-color);--van-radio-disabled-icon-color: var(--van-gray-5);--van-radio-disabled-label-color: var(--van-text-color-3);--van-radio-disabled-background: var(--van-border-color)}.van-radio{display:flex;align-items:center;overflow:hidden;cursor:pointer;-webkit-user-select:none;user-select:none}.van-radio--disabled{cursor:not-allowed}.van-radio--label-disabled{cursor:default}.van-radio--horizontal{margin-right:var(--van-padding-sm)}.van-radio__icon{flex:none;height:1em;font-size:var(--van-radio-size);line-height:1em;cursor:pointer}.van-radio__icon .van-icon{display:block;box-sizing:border-box;width:1.25em;height:1.25em;color:transparent;font-size:.8em;line-height:1.25;text-align:center;border:1px solid var(--van-radio-border-color);transition-duration:var(--van-radio-duration);transition-property:color,border-color,background-color}.van-radio__icon--round .van-icon{border-radius:100%}.van-radio__icon--dot{position:relative;border-radius:100%;box-sizing:border-box;width:var(--van-radio-size);height:var(--van-radio-size);border:1px solid var(--van-radio-border-color);transition-duration:var(--van-radio-duration);transition-property:border-color}.van-radio__icon--dot__icon{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);border-radius:100%;height:calc(100% - var(--van-radio-dot-size));width:calc(100% - var(--van-radio-dot-size));transition-duration:var(--van-radio-duration);transition-property:background-color}.van-radio__icon--checked .van-icon{color:var(--van-white);background-color:var(--van-radio-checked-icon-color);border-color:var(--van-radio-checked-icon-color)}.van-radio__icon--checked.van-radio__icon--dot{border-color:var(--van-radio-checked-icon-color)}.van-radio__icon--checked.van-radio__icon--dot .van-radio__icon--dot__icon{background:var(--van-radio-checked-icon-color)}.van-radio__icon--disabled{cursor:not-allowed}.van-radio__icon--disabled .van-icon{background-color:var(--van-radio-disabled-background);border-color:var(--van-radio-disabled-icon-color)}.van-radio__icon--disabled.van-radio__icon--checked .van-icon{color:var(--van-radio-disabled-icon-color)}.van-radio__label{margin-left:var(--van-radio-label-margin);color:var(--van-radio-label-color);line-height:var(--van-radio-size)}.van-radio__label--left{margin:0 var(--van-radio-label-margin) 0 0}.van-radio__label--disabled{color:var(--van-radio-disabled-label-color)}.bind-page[data-v-c14f302d]{display:flex;align-items:center;justify-content:center;min-height:100vh;min-height:100dvh;background:linear-gradient(135deg,#667eea,#764ba2);padding:24px}.bind-card[data-v-c14f302d]{width:100%;max-width:400px;background:var(--bg-secondary, #ffffff);border-radius:16px;padding:40px 32px;box-shadow:0 8px 32px #00000026}.bind-header[data-v-c14f302d]{text-align:center;margin-bottom:32px}.bind-icon[data-v-c14f302d]{font-size:48px;margin-bottom:12px}.bind-title[data-v-c14f302d]{font-size:24px;font-weight:700;color:var(--text-primary, #303133);margin:0 0 8px}.bind-subtitle[data-v-c14f302d]{font-size:14px;color:var(--text-tertiary, #909399);margin:0}.wecom-user-info[data-v-c14f302d]{margin-bottom:24px}.bind-options[data-v-c14f302d]{display:flex;flex-direction:column;gap:16px}.bind-options[data-v-c14f302d] .van-radio-group{display:flex;flex-direction:column;gap:12px}.bind-options[data-v-c14f302d] .van-radio{padding:12px;background:var(--bg-tertiary, #f5f5f5);border-radius:8px}.next-btn[data-v-c14f302d]{margin-top:24px}.bind-form[data-v-c14f302d]{margin-top:16px}.form-actions[data-v-c14f302d]{display:flex;gap:12px;margin-top:24px}.form-actions[data-v-c14f302d] .van-button{flex:1}
|
||||
@@ -0,0 +1 @@
|
||||
.login-page[data-v-069790d6]{display:flex;align-items:center;justify-content:center;min-height:100vh;min-height:100dvh;background:linear-gradient(135deg,#07c160,#06ad56);padding:24px}.login-card[data-v-069790d6]{width:100%;max-width:400px;background:var(--bg-secondary, #ffffff);border-radius:16px;padding:40px 32px;box-shadow:0 8px 32px #00000026}.login-header[data-v-069790d6]{text-align:center;margin-bottom:32px}.login-logo-row[data-v-069790d6]{display:flex;align-items:center;justify-content:center;gap:8px;margin-bottom:8px}.logo-block[data-v-069790d6]{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:7px;background:#fffffff2;color:#07c160;font-size:16px;font-weight:800;letter-spacing:-.5px;flex-shrink:0}.login-title[data-v-069790d6]{font-size:24px;font-weight:700;color:#fff;margin:0}.login-subtitle[data-v-069790d6]{font-size:14px;color:var(--text-tertiary, #909399);margin:0}.qr-login[data-v-069790d6]{display:flex;flex-direction:column;align-items:center}.qr-container[data-v-069790d6]{width:200px;height:200px;display:flex;align-items:center;justify-content:center;background:var(--bg-tertiary, #f5f5f5);border-radius:12px;margin-bottom:16px}.qr-loading[data-v-069790d6]{display:flex;flex-direction:column;align-items:center;gap:8px;color:var(--text-tertiary, #909399)}.qr-code img[data-v-069790d6]{width:180px;height:180px}.qr-error[data-v-069790d6]{text-align:center;color:var(--error-color, #f56c6c)}.qr-hint[data-v-069790d6]{font-size:14px;color:var(--text-tertiary, #909399);margin:0}.scan-tip[data-v-069790d6]{display:flex;align-items:center;gap:4px;color:var(--success-color, #07c160);font-size:14px;margin-top:12px}.loading-container[data-v-069790d6]{display:flex;flex-direction:column;align-items:center;gap:16px;padding:40px 0;color:var(--text-secondary, #606266)}
|
||||
@@ -0,0 +1 @@
|
||||
import{a6 as U,af as A,ag as N,ah as P,ai as O,a3 as o,a4 as l,aj as r,a5 as z,a8 as m,L as E,ak as Q,al as q,b as R,I as j,am as S,an as D,ao as i,s as v,U as T,a2 as I}from"./index-Dry6uMZb.js";import{g as M,h as W,a as $}from"./auth-C4b7Y9ej.js";const F={class:"login-page"},G={class:"login-card"},H={key:0,class:"qr-login"},J={class:"qr-container"},K={key:0,class:"qr-loading"},X={key:1,class:"qr-code"},Y=["src"],Z={key:2,class:"qr-error"},ee={key:0,class:"scan-tip"},ae={key:1,class:"loading-container"},te=U({__name:"Login",setup(se){const f=A(),c=N(),s=i(!0),h=i(""),y=i(!1),p=i(""),n=i(!1),_=i("请稍候...");let g=null,w="";function x(){return typeof navigator>"u"?!1:/wxwork/i.test(navigator.userAgent)}async function u(){y.value=!0,p.value="waiting";try{const a=await M();h.value=`data:image/png;base64,${a.qrcode_png_base64}`,w=a.ticket,b()}catch(a){console.error("获取二维码失败:",a),v("获取二维码失败,请重试")}finally{y.value=!1}}async function C(){if(w)try{const a=await $(w);a.status==="scanned"?p.value="scanned":a.status==="confirmed"&&a.token?(d(),await L(a.token,a.user_info)):a.status==="expired"?(d(),v("二维码已过期,请重新扫码"),u()):a.status==="cancelled"&&(d(),v("扫码已取消"),p.value="waiting",u())}catch(a){console.warn("轮询扫码状态失败:",a)}}function b(){d(),g=setInterval(C,2e3)}function d(){g&&(clearInterval(g),g=null)}async function L(a,e){n.value=!0,_.value="登录中...";try{if(e!=null&&e.is_new_user){s.value=!1,await f.push({name:"Bind",query:{userid:e.userid,name:e.name}});return}c.setToken(a),e&&c.setUserInfo(e),s.value=!1,T("登录成功"),await f.push({name:"ChatView"})}catch(t){console.error("登录失败:",t),v("登录失败,请重试"),s.value=!0}finally{n.value=!1}}async function V(a,e){n.value=!0,_.value="授权中...";try{const t=await W(a,e);if(t.is_new_user){s.value=!1,await f.push({name:"Bind",query:{userid:t.user_info.userid,name:t.user_info.name}});return}c.setToken(t.token),c.setUserInfo(t.user_info),s.value=!1,T("登录成功"),await f.push({name:"ChatView"})}catch(t){console.error("OAuth回调处理失败:",t),v("授权失败,请重试"),s.value=!0}finally{n.value=!1}}return P(async()=>{const a=new URLSearchParams(window.location.search),e=a.get("code"),t=a.get("state");if(e){await V(e,t||void 0);return}if(x()){n.value=!0,_.value="正在跳转企微授权...";try{await c.redirectToOAuth()}catch(k){console.error("跳转授权失败:",k),s.value=!0,u()}finally{n.value=!1}}else s.value=!0,u()}),O(()=>{d()}),(a,e)=>{const t=E,k=R,B=j;return o(),l("div",F,[r("div",G,[e[5]||(e[5]=z('<div class="login-header" data-v-069790d6><div class="login-logo-row" data-v-069790d6><span class="logo-block" data-v-069790d6>IT</span><h1 class="login-title" data-v-069790d6>智能IT服务</h1></div><p class="login-subtitle" data-v-069790d6>扫码登录</p></div>',1)),s.value?(o(),l("div",H,[r("div",J,[y.value?(o(),l("div",K,[m(t,{type:"spinner",size:"32px"}),e[0]||(e[0]=r("p",null,"加载中...",-1))])):h.value?(o(),l("div",X,[r("img",{src:h.value,alt:"企微扫码登录"},null,8,Y)])):(o(),l("div",Z,[e[2]||(e[2]=r("p",null,"获取二维码失败",-1)),m(k,{size:"small",onClick:u},{default:Q(()=>[...e[1]||(e[1]=[q("重试",-1)])]),_:1})]))]),e[4]||(e[4]=r("p",{class:"qr-hint"},"请使用企业微信扫码登录",-1)),p.value==="scanned"?(o(),l("p",ee,[m(B,{name:"checked"}),e[3]||(e[3]=q(" 已扫码,请在手机确认 ",-1))])):S("",!0)])):S("",!0),n.value?(o(),l("div",ae,[m(t,{type:"spinner",size:"40px"}),r("p",null,D(_.value),1)])):S("",!0)])])}}}),le=I(te,[["__scopeId","data-v-069790d6"]]);export{le as default};
|
||||
@@ -0,0 +1 @@
|
||||
import{a2 as s,a3 as d,a4 as t,a5 as o}from"./index-Dry6uMZb.js";const e={},n={class:"wework-only"};function c(v,a){return d(),t("div",n,[...a[0]||(a[0]=[o('<div class="wework-only__card" data-v-3f90d659><div class="wework-only__icon" data-v-3f90d659><svg viewBox="0 0 1024 1024" width="80" height="80" data-v-3f90d659><path d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm-32 664c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm64-160c-17.7 0-32-14.3-32-32V416c0-17.7 14.3-32 32-32s32 14.3 32 32v120c0 17.7-14.3 32-32 32z" fill="#07C160" data-v-3f90d659></path><path d="M685.6 354.4c-9.6-9.6-25.2-9.6-34.8 0L512 493.2 373.2 354.4c-9.6-9.6-25.2-9.6-34.8 0s-9.6 25.2 0 34.8L486.8 537.6c4.8 4.8 11.1 7.2 17.6 7.2s12.8-2.4 17.6-7.2l138.8-148.4c9.5-9.6 9.5-25.2-.2-34.8z" fill="#07C160" opacity="0.6" data-v-3f90d659></path></svg></div><h2 class="wework-only__title" data-v-3f90d659>请在企业微信中打开</h2><p class="wework-only__desc" data-v-3f90d659> 智能IT服务仅支持在企业微信内使用,<br data-v-3f90d659> 请通过企业微信工作台进入。 </p><div class="wework-only__steps" data-v-3f90d659><div class="wework-only__step" data-v-3f90d659><span class="wework-only__step-num" data-v-3f90d659>1</span><span data-v-3f90d659>打开企业微信</span></div><div class="wework-only__step" data-v-3f90d659><span class="wework-only__step-num" data-v-3f90d659>2</span><span data-v-3f90d659>进入「工作台」</span></div><div class="wework-only__step" data-v-3f90d659><span class="wework-only__step-num" data-v-3f90d659>3</span><span data-v-3f90d659>找到「智能IT服务」</span></div></div></div>',1)])])}const _=s(e,[["render",c],["__scopeId","data-v-3f90d659"]]);export{_ as default};
|
||||
@@ -0,0 +1 @@
|
||||
.wework-only[data-v-3f90d659]{display:flex;align-items:center;justify-content:center;min-height:100vh;background:#f5f6f7;padding:24px;box-sizing:border-box}.wework-only__card[data-v-3f90d659]{text-align:center;background:#fff;border-radius:16px;padding:48px 32px;max-width:360px;width:100%;box-shadow:0 2px 12px #0000000f}.wework-only__icon[data-v-3f90d659]{margin-bottom:24px}.wework-only__title[data-v-3f90d659]{font-size:20px;font-weight:600;color:#1a1a1a;margin:0 0 12px}.wework-only__desc[data-v-3f90d659]{font-size:14px;color:#666;line-height:1.6;margin:0 0 32px}.wework-only__steps[data-v-3f90d659]{display:flex;flex-direction:column;gap:16px;text-align:left;padding:0 16px}.wework-only__step[data-v-3f90d659]{display:flex;align-items:center;gap:12px;font-size:14px;color:#333}.wework-only__step-num[data-v-3f90d659]{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:50%;background:#07c160;color:#fff;font-size:14px;font-weight:600;flex-shrink:0}
|
||||
@@ -0,0 +1 @@
|
||||
import{a1 as t}from"./index-Dry6uMZb.js";async function u(){return t.get("/auth/qrcode")}async function s(a){return t.get("/auth/scan/status",{params:{ticket:a}})}async function r(a,n){return t.get("/auth/oauth2/callback",{params:{code:a,state:n}})}async function e(a){return t.post("/auth/bind",a)}export{s as a,e as b,u as g,r as h};
|
||||
@@ -0,0 +1 @@
|
||||
import{s as a}from"./index-Dry6uMZb.js";import{A as p,a as e,B as t,b as P,C as i,c as l,d as c,D as n,E as d,F as g,I as m,L as f,e as u,O as b,P as B,R as h,S as C,f as w,g as x,h as S,T,i as y,j as I,k as v,l as G,m as N,n as k,o as F,p as R,q as A,r as D,t as L,u as Z,v as E,w as O,x as j,y as q,z,G as H,H as J,J as K,K as M,M as Q,N as U,Q as V,U as W,V as X,W as Y,X as _,Y as $,Z as ss,_ as as,$ as os,a0 as rs}from"./index-Dry6uMZb.js";import{C as es,a as ts,b as Ps,I as is,N as ls,c as cs,S as ns,d as ds,e as gs,f as ms,g as fs,i as us,n as bs,h as Bs,s as hs}from"./index-DNloDtMO.js";import{C as ws,c as xs}from"./index-spiRTnAv.js";import{F as Ts,N as ys,R as Is,a as vs,f as Gs,n as Ns,r as ks,b as Fs}from"./index-CYr92l9H.js";export{p as ActionBar,e as ActionBarButton,t as Badge,P as Button,es as Card,i as Cell,ws as CellGroup,l as Checkbox,ts as Collapse,Ps as CollapseItem,c as ConfigProvider,n as Dialog,d as Empty,g as Field,Ts as Form,m as Icon,is as Image,f as Loading,u as Locale,ls as NavBar,cs as NoticeBar,ys as Notify,b as Overlay,B as Popup,Is as Radio,vs as RadioGroup,h as Rate,C as Search,ns as Step,ds as Steps,w as Sticky,x as Swipe,S as SwipeItem,T as Tab,y as Tabs,I as Tag,v as actionBarButtonProps,G as actionBarProps,N as badgeProps,k as buttonProps,gs as cardProps,xs as cellGroupProps,F as cellProps,R as checkboxProps,A as closeToast,ms as collapseItemProps,fs as collapseProps,D as configProviderProps,L as dialogProps,Z as emptyProps,E as fieldProps,Gs as formProps,O as iconProps,us as imageProps,j as loadingProps,bs as navBarProps,Bs as noticeBarProps,Ns as notifyProps,q as overlayProps,z as popupProps,ks as radioGroupProps,Fs as radioProps,H as rateProps,J as searchProps,K as setGlobalZIndex,M as showConfirmDialog,Q as showDialog,U as showFailToast,V as showLoadingToast,W as showSuccessToast,a as showToast,hs as stepsProps,X as stickyProps,Y as swipeProps,_ as tabProps,$ as tabsProps,ss as tagProps,as as toastProps,os as useAllTabStatus,rs as useGlobalZIndex};
|
||||
@@ -0,0 +1 @@
|
||||
import{a6 as c,a7 as k,as as p,at as D,a8 as m,au as y,ad as f,av as G,aw as M,ae as g,ax as B,ay as O,az as q,aA as K,aB as E,aa as $,aC as Y,aD as F,aE as j,P as U,aF as W,aG as w}from"./index-Dry6uMZb.js";const[H,J]=f("form"),L={colon:Boolean,disabled:Boolean,readonly:Boolean,required:[Boolean,String],showError:Boolean,labelWidth:p,labelAlign:String,inputAlign:String,scrollToError:Boolean,scrollToErrorPosition:String,validateFirst:Boolean,submitOnEnter:k,showErrorMessage:k,errorMessageAlign:String,validateTrigger:{type:[String,Array],default:"onBlur"}};var Q=c({name:H,props:L,emits:["submit","failed"],setup(t,{emit:d,slots:r}){const{children:o,linkChildren:u}=y(G),s=e=>e?o.filter(a=>e.includes(a.name)):o,h=e=>new Promise((a,n)=>{const l=[];s(e).reduce((R,z)=>R.then(()=>{if(!l.length)return z.validate().then(V=>{V&&l.push(V)})}),Promise.resolve()).then(()=>{l.length?n(l):a()})}),C=e=>new Promise((a,n)=>{const l=s(e);Promise.all(l.map(i=>i.validate())).then(i=>{i=i.filter(Boolean),i.length?n(i):a()})}),N=e=>{const a=o.find(n=>n.name===e);return a?new Promise((n,l)=>{a.validate().then(i=>{i?l(i):n()})}):Promise.reject()},v=e=>typeof e=="string"?N(e):t.validateFirst?h(e):C(e),T=e=>{typeof e=="string"&&(e=[e]),s(e).forEach(n=>{n.resetValidation()})},x=()=>o.reduce((e,a)=>(e[a.name]=a.getValidationStatus(),e),{}),S=(e,a)=>{o.some(n=>n.name===e?(n.$el.scrollIntoView(a),!0):!1)},P=()=>o.reduce((e,a)=>(a.name!==void 0&&(e[a.name]=a.formValue.value),e),{}),b=()=>{const e=P();v().then(()=>d("submit",e)).catch(a=>{d("failed",{values:e,errors:a});const{scrollToError:n,scrollToErrorPosition:l}=t;n&&a[0].name&&S(a[0].name,l?{block:l}:void 0)})},I=e=>{M(e),b()};return u({props:t}),D({submit:b,validate:v,getValues:P,scrollToField:S,resetValidation:T,getValidationStatus:x}),()=>{var e;return m("form",{class:J(),onSubmit:I},[(e=r.default)==null?void 0:e.call(r)])}}});const ce=g(Q),[_,X]=f("radio-group"),Z={shape:String,disabled:Boolean,iconSize:p,direction:String,modelValue:B,checkedColor:String},A=Symbol(_);var ee=c({name:_,props:Z,emits:["change","update:modelValue"],setup(t,{emit:d,slots:r}){const{linkChildren:o}=y(A),u=s=>d("update:modelValue",s);return O(()=>t.modelValue,s=>d("change",s)),o({props:t,updateValue:u}),q(()=>t.modelValue),()=>{var s;return m("div",{class:X([t.direction]),role:"radiogroup"},[(s=r.default)==null?void 0:s.call(r)])}}});const me=g(ee),ae=F({},j,{shape:String}),[te,oe]=f("radio");var ne=c({name:te,props:ae,emits:["update:modelValue"],setup(t,{emit:d,slots:r}){const{parent:o}=K(A),u=()=>(o?o.props.modelValue:t.modelValue)===t.name,s=()=>{o?o.updateValue(t.name):d("update:modelValue",t.name)};return()=>m(Y,$({bem:oe,role:"radio",parent:o,checked:u(),onToggle:s},t),E(r,["default","icon"]))}});const fe=g(ne),[se,le]=f("notify"),re=["lockScroll","position","show","teleport","zIndex"],ie=F({},W,{type:w("danger"),color:String,message:p,position:w("top"),className:B,background:String,lockScroll:Boolean});var de=c({name:se,props:ie,emits:["update:show"],setup(t,{emit:d,slots:r}){const o=u=>d("update:show",u);return()=>m(U,$({class:[le([t.type]),t.className],style:{color:t.color,background:t.background},overlay:!1,duration:.2,"onUpdate:show":o},E(t,re)),{default:()=>[r.default?r.default():t.message]})}});const ge=g(de);export{ce as F,ge as N,fe as R,me as a,ae as b,L as f,ie as n,Z as r};
|
||||
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 @@
|
||||
:root,:host{--van-cell-group-background: var(--van-background-2);--van-cell-group-title-color: var(--van-text-color-2);--van-cell-group-title-padding: var(--van-padding-md) var(--van-padding-md);--van-cell-group-title-font-size: var(--van-font-size-md);--van-cell-group-title-line-height: 16px;--van-cell-group-inset-padding: 0 var(--van-padding-md);--van-cell-group-inset-radius: var(--van-radius-lg);--van-cell-group-inset-title-padding: var(--van-padding-md) var(--van-padding-md)}.van-cell-group{background:var(--van-cell-group-background)}.van-cell-group--inset{margin:var(--van-cell-group-inset-padding);border-radius:var(--van-cell-group-inset-radius);overflow:hidden}.van-cell-group__title{padding:var(--van-cell-group-title-padding);color:var(--van-cell-group-title-color);font-size:var(--van-cell-group-title-font-size);line-height:var(--van-cell-group-title-line-height)}.van-cell-group__title--inset{padding:var(--van-cell-group-inset-title-padding)}
|
||||
@@ -0,0 +1 @@
|
||||
import{a6 as c,a7 as o,a8 as a,a9 as u,aa as d,ab as m,ac as f,ad as p,ae as v}from"./index-Dry6uMZb.js";const[b,i]=p("cell-group"),g={title:String,inset:Boolean,border:o};var O=c({name:b,inheritAttrs:!1,props:g,setup(e,{slots:t,attrs:l}){const r=()=>{var n;return a("div",d({class:[i({inset:e.inset}),{[f]:e.border&&!e.inset}]},l,m()),[(n=t.default)==null?void 0:n.call(t)])},s=()=>a("div",{class:i("title",{inset:e.inset})},[t.title?t.title():e.title]);return()=>e.title||t.title?a(u,null,[s(),r()]):r()}});const T=v(O);export{T as C,g as c};
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 9.2 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.4 KiB |
@@ -0,0 +1,78 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<!-- 移动端视口设置(适配企微 WebView) -->
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
||||
<!-- CSP 由 nginx HTTP 头统一管理(移除 meta CSP 避免双 CSP 冲突导致企微 WebView 脚本加载失败) -->
|
||||
<!-- 企微 JS-SDK(静态引入,确保在 Vue 应用加载前 window.wx 就绪;比动态创建 script 更可靠) -->
|
||||
<script src="https://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
|
||||
<!-- 页面标题 -->
|
||||
<title>智能IT服务</title>
|
||||
<!-- 首屏骨架屏样式 v0.5.2 强化版 -->
|
||||
<style>
|
||||
html, body { margin: 0; padding: 0; height: 100%; background: #f7f8fa; }
|
||||
#app-skeleton {
|
||||
position: fixed; inset: 0;
|
||||
display: flex; flex-direction: column;
|
||||
align-items: center; justify-content: center;
|
||||
font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Helvetica Neue", sans-serif;
|
||||
color: #969799;
|
||||
z-index: 9999;
|
||||
}
|
||||
#app-skeleton .logo {
|
||||
width: 48px; height: 48px; border-radius: 10px;
|
||||
background: linear-gradient(135deg, #07C160 0%, #07C160 100%);
|
||||
margin-bottom: 20px;
|
||||
box-shadow: 0 4px 16px rgba(7, 193, 96, 0.25);
|
||||
display: flex; align-items: center; justify-content: center;
|
||||
color: #fff; font-size: 22px; font-weight: 800; letter-spacing: -1px;
|
||||
animation: pulse 1.5s ease-in-out infinite;
|
||||
}
|
||||
#app-skeleton .title {
|
||||
font-size: 20px; font-weight: 700; margin-bottom: 8px;
|
||||
background: linear-gradient(135deg, #07C160, #07C160);
|
||||
-webkit-background-clip: text; -webkit-text-fill-color: transparent;
|
||||
background-clip: text;
|
||||
}
|
||||
#app-skeleton .subtitle { font-size: 14px; color: #969799; margin-bottom: 28px; }
|
||||
#app-skeleton .spinner {
|
||||
width: 28px; height: 28px;
|
||||
border: 3px solid #ebedf0;
|
||||
border-top-color: #07C160;
|
||||
border-radius: 50%;
|
||||
animation: spin 0.8s linear infinite;
|
||||
}
|
||||
@keyframes spin { to { transform: rotate(360deg); } }
|
||||
@keyframes pulse { 0%,100% { opacity: 1; transform: scale(1); } 50% { opacity: 0.7; transform: scale(0.95); } }
|
||||
/* v0.5.2 强化:不再依赖 :empty 选择器(部分浏览器/Vue mount 太快会失效) */
|
||||
/* 改用 body.app-loaded 类名,由 main.ts 挂载后主动添加 */
|
||||
body.app-loaded #app-skeleton { display: none !important; }
|
||||
</style>
|
||||
<script type="module" crossorigin src="/h5/assets/index-Dry6uMZb.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="/h5/assets/index-QnPzuUcm.css">
|
||||
</head>
|
||||
<body>
|
||||
<!-- 非企微环境拦截 -->
|
||||
<script>
|
||||
(function(){
|
||||
var _ok = /^(localhost|127\.0\.0\.1)(:\d+)?$/.test(location.hostname) || navigator.userAgent.toLowerCase().indexOf('wxwork') > -1
|
||||
if (!_ok) {
|
||||
document.open()
|
||||
document.write('<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>仅限企业微信访问</title><style>*{margin:0;padding:0;box-sizing:border-box}body{background:#f7f8fa;display:flex;align-items:center;justify-content:center;min-height:100vh;font-family:-apple-system,BlinkMacSystemFont,PingFang SC,sans-serif;text-align:center;padding:40px}.icon{font-size:60px;margin-bottom:24px}.title{font-size:20px;font-weight:600;color:#323233;margin-bottom:12px}.desc{font-size:14px;color:#969799;line-height:1.8}</style></head><body><div><div class="icon">🔒</div><div class="title">仅限企业微信访问</div><div class="desc">请在<strong>企业微信工作台</strong>中打开<br>「智能IT服务」访问此页面</div></div></body></html>')
|
||||
document.close()
|
||||
}
|
||||
})()
|
||||
</script>
|
||||
<!-- Vue 应用挂载点 -->
|
||||
<div id="app"></div>
|
||||
<!-- 首屏骨架屏(JS 加载期间显示,挂载后自动隐藏) v0.5.2 -->
|
||||
<div id="app-skeleton">
|
||||
<div class="logo">IT</div>
|
||||
<div class="title">智能IT服务</div>
|
||||
<div class="subtitle">正在加载...</div>
|
||||
<div class="spinner"></div>
|
||||
</div>
|
||||
<!-- 入口脚本 -->
|
||||
|
||||
</body>
|
||||
@@ -0,0 +1,64 @@
|
||||
<!doctype html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
|
||||
<title>正在打开 ITSM 工单…</title>
|
||||
<style>
|
||||
* { box-sizing: border-box; }
|
||||
html, body { height: 100%; margin: 0; }
|
||||
body {
|
||||
font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", sans-serif;
|
||||
display: flex; align-items: center; justify-content: center;
|
||||
background: #f2f3f5; color: #646566;
|
||||
}
|
||||
.card {
|
||||
background: #fff; border-radius: 12px; padding: 28px 24px;
|
||||
text-align: center; box-shadow: 0 2px 12px rgba(0,0,0,.06);
|
||||
max-width: 80%;
|
||||
}
|
||||
.spinner {
|
||||
width: 30px; height: 30px; margin: 0 auto 14px;
|
||||
border: 3px solid #ebedf0; border-top-color: #07c160;
|
||||
border-radius: 50%; animation: spin .8s linear infinite;
|
||||
}
|
||||
@keyframes spin { to { transform: rotate(360deg); } }
|
||||
.tip { font-size: 14px; line-height: 1.6; }
|
||||
.tip small { color: #c8c9cc; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="card">
|
||||
<div class="spinner"></div>
|
||||
<div class="tip">正在打开 ITSM 工单…<br /><small>若长时间未跳转,请手动刷新</small></div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
(function () {
|
||||
// 读取工单服务名(H5 卡片传入时已做 URL 编码)
|
||||
var name = new URLSearchParams(location.search).get('name') || '';
|
||||
// 目标:Web ITSM 工单深链(本身不支持静默登录,必须经首页预热会话)
|
||||
var WEB = 'http://devops.dc.servyou-it.com/ITSM/workflow/service/createTicket?name=' + encodeURIComponent(name);
|
||||
// 预热入口:移动端首页在企微 webview 内会静默企微 OAuth,把 ITSM 后端会话“预热”出来
|
||||
var HOME = 'https://itsm.servyou.com.cn/itsm-miniapp-mobile/';
|
||||
|
||||
function goWeb() { window.top.location.href = WEB; }
|
||||
|
||||
// 用隐藏 iframe 加载移动端首页,触发静默企微 OAuth 预热 ITSM 会话。
|
||||
// 预热成功后,后续 top-level 跳转到 Web 深链即可复用该会话、免登录直达表单。
|
||||
try {
|
||||
var f = document.createElement('iframe');
|
||||
f.setAttribute('style', 'position:absolute;width:1px;height:1px;left:-9999px;top:-9999px;border:0;opacity:0;');
|
||||
f.src = HOME;
|
||||
// 不依赖 onload(部分情况下被 X-Frame-Options 拦截不触发),统一靠定时器跳转
|
||||
document.body.appendChild(f);
|
||||
} catch (e) {
|
||||
// 忽略:即使 iframe 被拦截,定时器仍会跳转(退化为冷 hit,可能弹登录,属可预期降级)
|
||||
}
|
||||
|
||||
// 给预热留出时间后跳转 Web 深链
|
||||
setTimeout(goWeb, 2500);
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user