`;r.setLabel({content:t,direction:"bottom-right"})}else{const t=o(e);r.setLabel({text:b.content,color:e.color,fontSize:e.fontSize,className:t})}}const w=e.callout||{};let x,S=r.callout;if(w.content||l){Cg()&&w.content&&(w.content=w.content.replaceAll("\n","
"));const o="0px 0px 3px 1px rgba(0,0,0,0.5)";let i=-d/2;if((e.width||e.height)&&(i+=14-d/2),x=w.content?{position:c,map:n,top:m,offsetY:i,content:w.content,color:w.color,fontSize:w.fontSize,borderRadius:w.borderRadius,bgColor:w.bgColor,padding:w.padding,boxShadow:w.boxShadow||o,display:w.display}:{position:c,map:n,top:m,offsetY:i,content:l,boxShadow:o},S)S.setOption(x);else if(Cg()){const e=()=>{""!==t&&a("callouttap",{},{markerId:Number(t)})};S=r.callout=new s.Callout(x,e)}else S=r.callout=new s.Callout(x),S.div.onclick=function(e){""!==t&&a("callouttap",e,{markerId:Number(t)}),e.stopPropagation(),e.preventDefault()},Sg().type===xg.GOOGLE&&(S.div.ontouchstart=function(e){e.stopPropagation()},S.div.onpointerdown=function(e){e.stopPropagation()})}else S&&(i(S),delete r.callout)},e.iconPath?u.src=rp(e.iconPath):console.error("Marker.iconPath is required.")}!function(e){Eg()||(r=new s.Marker({map:n,flat:!0,autoRotation:!1})),l(e);const o=s.event||s.Event;Eg()||o.addListener(r,"click",()=>{const n=r.callout;if(n&&!n.alwaysVisible)if(Cg())n.visible=!n.visible,n.visible?r.callout.createAMapText():r.callout.removeAMapText();else if(n.set("visible",!n.visible),n.visible){const e=n.div,t=e.parentNode;t.removeChild(e),t.appendChild(e)}t&&a("markertap",{},{markerId:Number(t),latitude:e.latitude,longitude:e.longitude})})}(e),Lo(e,l)}),t){const e=Xr("addMapChidlContext"),o=Xr("removeMapChidlContext"),i={id:t,translate(e){n((t,n,o)=>{const i=e.destination,s=e.duration,a=!!e.autoRotate;let l=Number(e.rotate)||0,c=0;"getRotation"in r&&(c=r.getRotation());const u=r.getPosition(),d=new n.LatLng(i.latitude,i.longitude),f=n.geometry.spherical.computeDistanceBetween(u,d)/1e3/(("number"==typeof s?s:1e3)/36e5),p=n.event||n.Event,h=p.addListener(r,"moving",e=>{const t=e.latLng,n=r.label;n&&n.setPosition(t);const o=r.callout;o&&o.setPosition(t)}),g=p.addListener(r,"moveend",()=>{g.remove(),h.remove(),r.lastPosition=u,r.setPosition(d);const t=r.label;t&&t.setPosition(d);const n=r.callout;n&&n.setPosition(d);const o=e.animationEnd;m(o)&&o()});let v=0;a&&(r.lastPosition&&(v=n.geometry.spherical.computeHeading(r.lastPosition,u)),l=n.geometry.spherical.computeHeading(u,d)-v),"setRotation"in r&&r.setRotation(c+l),"moveTo"in r?r.moveTo(d,f):(r.setPosition(d),p.trigger(r,"moveend",{}))})}};e(i),br(()=>o(i))}return br(function(){r&&(r.label&&"setMap"in r.label&&r.label.setMap(null),r.callout&&i(r.callout),r.setMap(null))}),()=>null}});function Mg(e){if(!e)return{r:0,g:0,b:0,a:0};let t=e.slice(1);const n=t.length;if(![3,4,6,8].includes(n))return{r:0,g:0,b:0,a:0};3!==n&&4!==n||(t=t.replace(/(\w{1})/g,"$1$1"));let[o,r,i,s]=t.match(/(\w{2})/g);const a=parseInt(o,16),l=parseInt(r,16),c=parseInt(i,16);return s?{r:a,g:l,b:c,a:(`0x100${s}`-65536)/255}:{r:a,g:l,b:c,a:1}}const Og={points:{type:Array,require:!0},color:{type:String,default:"#000000"},width:{type:[Number,String],default:""},dottedLine:{type:[Boolean,String],default:!1},arrowLine:{type:[Boolean,String],default:!1},arrowIconPath:{type:String,default:""},borderColor:{type:String,default:"#000000"},borderWidth:{type:[Number,String],default:""},colorList:{type:Array,default:()=>[]},level:{type:String,default:""}},Lg=ju({name:"MapPolyline",props:Og,setup(e){let t,n;function o(){t&&t.setMap(null),n&&n.setMap(null)}return Xr("onMapReady")((r,i)=>{function s(e){const o=[];e.points.forEach(e=>{let t;t=Cg()?[e.longitude,e.latitude]:Eg()?new i.Point(e.longitude,e.latitude):new i.LatLng(e.latitude,e.longitude),o.push(t)});const s=Number(e.width)||1,{r:a,g:l,b:c,a:u}=Mg(e.color),{r:d,g:f,b:p,a:h}=Mg(e.borderColor),g={map:r,clickable:!1,path:o,strokeWeight:s,strokeColor:e.color||void 0,strokeDashStyle:e.dottedLine?"dash":"solid"},m=Number(e.borderWidth)||0,v={map:r,clickable:!1,path:o,strokeWeight:s+2*m,strokeColor:e.borderColor||void 0,strokeDashStyle:e.dottedLine?"dash":"solid"};"Color"in i?(g.strokeColor=new i.Color(a,l,c,u),v.strokeColor=new i.Color(d,f,p,h)):(g.strokeColor=`rgb(${a}, ${l}, ${c})`,g.strokeOpacity=u,v.strokeColor=`rgb(${d}, ${f}, ${p})`,v.strokeOpacity=h),m&&(n=new i.Polyline(v)),Eg()?(t=new i.Polyline(g.path,g),r.addOverlay(t)):t=new i.Polyline(g)}s(e),Lo(e,function(e){o(),s(e)})}),br(o),()=>null}}),Pg=ju({name:"MapCircle",props:{latitude:{type:[Number,String],require:!0},longitude:{type:[Number,String],require:!0},color:{type:String,default:"#000000"},fillColor:{type:String,default:"#00000000"},radius:{type:[Number,String],require:!0},strokeWidth:{type:[Number,String],default:""},level:{type:String,default:""}},setup(e){let t;function n(){t&&t.setMap(null)}return Xr("onMapReady")((o,r)=>{function i(e){const n=Cg()||Eg()?[e.longitude,e.latitude]:new r.LatLng(e.latitude,e.longitude),i={map:o,center:n,clickable:!1,radius:e.radius,strokeWeight:Number(e.strokeWidth)||1,strokeDashStyle:"solid"};if(Eg())i.strokeColor=e.color,i.fillColor=e.fillColor||"#000",i.fillOpacity=1;else{const{r:t,g:n,b:o,a:s}=Mg(e.fillColor),{r:a,g:l,b:c,a:u}=Mg(e.color);"Color"in r?(i.fillColor=new r.Color(t,n,o,s),i.strokeColor=new r.Color(a,l,c,u)):(i.fillColor=`rgb(${t}, ${n}, ${o})`,i.fillOpacity=s,i.strokeColor=`rgb(${a}, ${l}, ${c})`,i.strokeOpacity=u)}if(Eg()){let e=new r.Point(i.center[0],i.center[1]);t=new r.Circle(e,i.radius,i),o.addOverlay(t)}else t=new r.Circle(i),Cg()&&o.add(t)}i(e),Lo(e,function(e){n(),i(e)})}),br(n),()=>null}}),Dg={id:{type:[Number,String],default:""},position:{type:Object,required:!0},iconPath:{type:String,required:!0},clickable:{type:[Boolean,String],default:""},trigger:{type:Function,required:!0}},$g=ju({name:"MapControl",props:Dg,setup(e){const t=ns(()=>rp(e.iconPath)),n=ns(()=>{let t=`top:${e.position.top||0}px;left:${e.position.left||0}px;`;return e.position.width&&(t+=`width:${e.position.width}px;`),e.position.height&&(t+=`height:${e.position.height}px;`),t}),o=t=>{e.clickable&&e.trigger("controltap",t,{controlId:e.id})};return()=>Di("div",{class:"uni-map-control"},[Di("img",{src:t.value,style:n.value,class:"uni-map-control-icon",onClick:o},null,12,["src","onClick"])])}}),Ng="__DC_STAT_UUID",Rg=navigator.cookieEnabled&&(window.localStorage||window.sessionStorage)||{};let Ig;function zg(){if(Ig=Ig||Rg[Ng],!Ig){Ig=Date.now()+""+Math.floor(1e7*Math.random());try{Rg[Ng]=Ig}catch(e){}}return Ig}function Bg(){if(!0!==__uniConfig.darkmode)return v(__uniConfig.darkmode)?__uniConfig.darkmode:"light";try{return window.matchMedia("(prefers-color-scheme: light)").matches?"light":"dark"}catch(e){return"light"}}function jg(){let e,t="0",n="",o="phone";const r=navigator.language;if(ap){e="iOS";const o=ip.match(/OS\s([\w_]+)\slike/);o&&(t=o[1].replace(/_/g,"."));const r=ip.match(/\(([a-zA-Z]+);/);r&&(n=r[1])}else if(sp){e="Android";const o=ip.match(/Android[\s/]([\w\.]+)[;\s]/);o&&(t=o[1]);const r=ip.match(/\((.+?)\)/),i=r?r[1].split(";"):ip.split(" "),s=[/\bAndroid\b/i,/\bLinux\b/i,/\bU\b/i,/^\s?[a-z][a-z]$/i,/^\s?[a-z][a-z]-[a-z][a-z]$/i,/\bwv\b/i,/\/[\d\.,]+$/,/^\s?[\d\.,]+$/,/\bBrowser\b/i,/\bMobile\b/i];for(let e=0;e
0){n=t.split("Build")[0].trim();break}let o;for(let e=0;e-1&&e.indexOf("MSIE")>-1,n=e.indexOf("Edge")>-1&&!t,o=e.indexOf("Trident")>-1&&e.indexOf("rv:11.0")>-1;if(t){new RegExp("MSIE (\\d+\\.\\d+);").test(e);const t=parseFloat(RegExp.$1);return t>6?t:6}return n?-1:o?11:-1}());if("-1"!==l)a="IE";else{const e=["Version","Firefox","Chrome","Edge{0,1}"],t=["Safari","Firefox","Chrome","Edge"];for(let n=0;n{const e=window.devicePixelRatio,t=fp(),n=pp(t),o=hp(t,n),r=function(e,t){return e?Math[t?"min":"max"](screen.height,screen.width):screen.height}(t,n),i=gp(o);let s=window.innerHeight;const a=Bc.top,l={left:Bc.left,right:i-Bc.right,top:Bc.top,bottom:s-Bc.bottom,width:i-Bc.left-Bc.right,height:s-Bc.top-Bc.bottom},{top:c,bottom:u}=function(){const e=document.documentElement.style,t=Fc(),n=Vc(e,"--window-bottom"),o=Vc(e,"--window-left"),r=Vc(e,"--window-right"),i=Vc(e,"--top-window-height");return{top:t,bottom:n?n+Bc.bottom:0,left:o?o+Bc.left:0,right:r?r+Bc.right:0,topWindowHeight:i||0}}();return s-=c,s-=u,{windowTop:c,windowBottom:u,windowWidth:i,windowHeight:s,pixelRatio:e,screenWidth:o,screenHeight:r,statusBarHeight:a,safeArea:l,safeAreaInsets:{top:Bc.top,right:Bc.right,bottom:Bc.bottom,left:Bc.left},screenTop:r-s}});let Vg,Fg=!0;function Hg(){Fg&&(Vg=jg())}const Wg=zd(0,()=>{Hg();const{deviceBrand:e,deviceModel:t,brand:n,model:o,platform:r,system:i,deviceOrientation:s,deviceType:a,osname:l,osversion:u}=Vg;return c({brand:n,deviceBrand:e,deviceModel:t,devicePixelRatio:window.devicePixelRatio,deviceId:zg(),deviceOrientation:s,deviceType:a,model:o,platform:r,system:i,osName:l?l.toLocaleLowerCase():void 0,osVersion:u})}),Ug=zd(0,()=>{Hg();const{theme:e,language:t,browserName:n,browserVersion:o}=Vg;return c({appId:__uniConfig.appId,appName:__uniConfig.appName,appVersion:__uniConfig.appVersion,appVersionCode:__uniConfig.appVersionCode,appLanguage:Xd?Xd():t,enableDebug:!1,hostSDKVersion:void 0,hostPackageName:void 0,hostFontSizeSetting:void 0,hostName:n,hostVersion:o,hostTheme:e,hostLanguage:t,language:t,SDKVersion:"",theme:e,version:"",uniPlatform:"web",isUniAppX:!1,uniCompileVersion:__uniConfig.compilerVersion,uniCompilerVersion:__uniConfig.compilerVersion,uniRuntimeVersion:__uniConfig.compilerVersion},{})}),Yg=zd(0,()=>{Fg=!0,Hg(),Fg=!1;const e=qg(),t=Wg(),n=Ug();Fg=!0;const{ua:o,browserName:r,browserVersion:i,osname:s,osversion:a}=Vg,l=c(e,t,n,{ua:o,browserName:r,browserVersion:i,uniPlatform:"web",uniCompileVersion:__uniConfig.compilerVersion,uniRuntimeVersion:__uniConfig.compilerVersion,fontSizeSetting:void 0,osName:s.toLocaleLowerCase(),osVersion:a,osLanguage:void 0,osTheme:void 0});return delete l.screenTop,delete l.enableDebug,__uniConfig.darkmode||delete l.theme,function(e){let t={};return S(e)&&Object.keys(e).sort().forEach(n=>{const o=n;t[o]=e[o]}),Object.keys(t)?t:e}(l)});let Gg=null;const Xg=Nd(Qd,()=>{Jg()}),Kg=Rd("offCompass",()=>{Qg()}),Jg=Bd("startCompass",(e,{resolve:t,reject:n})=>{if(window.DeviceOrientationEvent){if(!Gg){if(DeviceOrientationEvent.requestPermission)return void DeviceOrientationEvent.requestPermission().then(e=>{"granted"===e?(o(),t()):n(`${e}`)}).catch(e=>{n(`${e}`)});o()}t()}else n();function o(){Gg=function(e){const t=360-(null!==e.alpha?e.alpha:360);wv.invokeOnCallback(Qd,{direction:t})},window.addEventListener("deviceorientation",Gg,!1)}}),Qg=Bd("stopCompass",(e,{resolve:t})=>{Gg&&(window.removeEventListener("deviceorientation",Gg,!1),Gg=null),t()});const Zg=Bd("setClipboardData",(e,t)=>{return n=void 0,o=[e,t],r=function*({data:e},{resolve:t,reject:n}){try{yield navigator.clipboard.writeText(e),t()}catch(o){!function(e,t,n){const o=document.getElementById("#clipboard");o&&o.remove();const r=document.createElement("textarea");r.setAttribute("inputmode","none"),r.id="#clipboard",r.style.position="fixed",r.style.top="-9999px",r.style.zIndex="-9999",document.body.appendChild(r),r.value=e,r.select(),r.setSelectionRange(0,r.value.length);const i=document.execCommand("Copy",!1);r.blur(),i?t():n()}(e,t,n)}},new Promise((e,t)=>{var i=e=>{try{a(r.next(e))}catch(n){t(n)}},s=e=>{try{a(r.throw(e))}catch(n){t(n)}},a=t=>t.done?e(t.value):Promise.resolve(t.value).then(i,s);a((r=r.apply(n,o)).next())});var n,o,r},0,Jd);const em=zd(0,(e,t)=>{const n=typeof t,o="string"===n?t:JSON.stringify({type:n,data:t});localStorage.setItem(e,o)});function tm(e){const t=localStorage&&localStorage.getItem(e);if(!v(t))throw new Error("data not found");let n=t;try{const e=function(e){const t=["object","string","number","boolean","undefined"];try{const n=v(e)?JSON.parse(e):e,o=n.type;if(t.indexOf(o)>=0){const e=Object.keys(n);if(2===e.length&&"data"in n){if(typeof n.data===o)return n.data;if("object"===o&&/^\d{4}-\d{2}-\d{2}T\d{2}\:\d{2}\:\d{2}\.\d{3}Z$/.test(n.data))return new Date(n.data)}else if(1===e.length)return""}}catch(n){}}(JSON.parse(t));void 0!==e&&(n=e)}catch(o){}return n}const nm=zd(0,e=>{try{return tm(e)}catch(t){return""}}),om=zd(0,e=>{localStorage&&localStorage.removeItem(e)}),rm={image:{jpg:"jpeg",jpe:"jpeg",pbm:"x-portable-bitmap",pgm:"x-portable-graymap",pnm:"x-portable-anymap",ppm:"x-portable-pixmap",psd:"vnd.adobe.photoshop",pic:"x-pict",rgb:"x-rgb",svg:"svg+xml",svgz:"svg+xml",tif:"tiff",xif:"vnd.xiff",wbmp:"vnd.wap.wbmp",wdp:"vnd.ms-photo",xbm:"x-xbitmap",ico:"x-icon"},video:{"3g2":"3gpp2","3gp":"3gpp",avi:"x-msvideo",f4v:"x-f4v",flv:"x-flv",jpgm:"jpm",jpgv:"jpeg",m1v:"mpeg",m2v:"mpeg",mpe:"mpeg",mpg:"mpeg",mpg4:"mpeg",m4v:"x-m4v",mkv:"x-matroska",mov:"quicktime",qt:"quicktime",movie:"x-sgi-movie",mp4v:"mp4",ogv:"ogg",smv:"x-smv",wm:"x-ms-wm",wmv:"x-ms-wmv",wmx:"x-ms-wmx",wvx:"x-ms-wvx"}};let im=null;const sm=Bd("chooseImage",({count:e,sourceType:t,extension:n},{resolve:o,reject:r})=>{ac();const{t:i}=tc();im&&(document.body.removeChild(im),im=null),im=function({count:e,sourceType:t,type:n,extension:o}){Yp();const r=document.createElement("input");return r.type="file",function(e,t){for(const n in t)e.style[n]=t[n]}(r,{position:"absolute",visibility:"hidden",zIndex:"-999",width:"0",height:"0",top:"0",left:"0"}),r.accept=o.map(e=>{{const t=e.replace(".","");return`${n}/${rm[n][t]||t}`}}).join(","),e&&e>1&&(r.multiple=!0),t instanceof Array&&1===t.length&&"camera"===t[0]&&r.setAttribute("capture","camera"),r}({count:e,sourceType:t,extension:n,type:"image"}),document.body.appendChild(im),im.addEventListener("change",function(t){const n=t.target,r=[];if(n&&n.files){const t=n.files.length;for(let o=0;o(i=i||bp(t),i)}),oe)},tempFiles:r})}),im.click(),Hp||console.warn(i("uni.chooseFile.notUserActivation"))},0,tf),am={esc:["Esc","Escape"],enter:["Enter"]},lm=Object.keys(am);function cm(){const e=$n(""),t=$n(!1),n=n=>{if(t.value)return;const o=lm.find(e=>-1!==am[e].indexOf(n.key));o&&(e.value=o),eo(()=>e.value="")};return gr(()=>{document.addEventListener("keyup",n)}),yr(()=>{document.removeEventListener("keyup",n)}),{key:e,disable:t}}const um=Di("div",{class:"uni-mask"},null,-1);function dm(e,t,n){return t.onClose=(...e)=>(t.visible=!1,n.apply(null,e)),ta(Xo({setup:()=>()=>(wi(),Ci(e,t,null,16))}))}function fm(e){let t=document.getElementById(e);return t||(t=document.createElement("div"),t.id=e,document.body.append(t)),t}function pm(e,{onEsc:t,onEnter:n}){const o=$n(e.visible),{key:r,disable:i}=cm();return Lo(()=>e.visible,e=>o.value=e),Lo(()=>o.value,e=>i.value=!e),Mo(()=>{const{value:e}=r;"esc"===e?t&&t():"enter"===e&&n&&n()}),o}let hm=0,gm="";function mm(e){let t=hm;hm+=e?1:-1,hm=Math.max(0,hm),hm>0?0===t&&(gm=document.body.style.overflow,document.body.style.overflow="hidden"):(document.body.style.overflow=gm,gm="")}const vm=Id("request",({url:e,data:t,header:n={},method:o,dataType:r,responseType:i,withCredentials:s,timeout:a=__uniConfig.networkTimeout.request},{resolve:l,reject:c})=>{let u=null;const d=function(e){const t=Object.keys(e).find(e=>"content-type"===e.toLowerCase());if(!t)return;const n=e[t];if(0===n.indexOf("application/json"))return"json";if(0===n.indexOf("application/x-www-form-urlencoded"))return"urlencoded";return"string"}(n);if("GET"!==o)if(v(t)||t instanceof ArrayBuffer)u=t;else if("json"===d)try{u=JSON.stringify(t)}catch(m){u=t.toString()}else if("urlencoded"===d){const e=[];for(const n in t)f(t,n)&&e.push(encodeURIComponent(n)+"="+encodeURIComponent(t[n]));u=e.join("&")}else u=t.toString();const p=new XMLHttpRequest,h=new ym(p);p.open(o,e);for(const v in n)f(n,v)&&p.setRequestHeader(v,n[v]);const g=setTimeout(function(){p.onload=p.onabort=p.onerror=null,h.abort(),c("timeout",{errCode:5})},a);return p.responseType=i,p.onload=function(){clearTimeout(g);const e=p.status;let t="text"===i?p.responseText:p.response;if("text"===i&&"json"===r)try{t=JSON.parse(t)}catch(m){}l({data:t,statusCode:e,header:bm(p.getAllResponseHeaders()),cookies:[]})},p.onabort=function(){clearTimeout(g),c("abort",{errCode:600003})},p.onerror=function(){clearTimeout(g),c(void 0,{errCode:5})},p.withCredentials=s,p.send(u),h},0,sf);class ym{constructor(e){this._xhr=e}abort(){this._xhr&&(this._xhr.abort(),delete this._xhr)}onHeadersReceived(e){throw new Error("Method not implemented.")}offHeadersReceived(e){throw new Error("Method not implemented.")}}function bm(e){const t={};return e.split(ee).forEach(e=>{const n=e.match(/(\S+\s*):\s*(.*)/);n&&3===n.length&&(t[n[1]]=n[2])}),t}class _m{constructor(e){this._callbacks=[],this._xhr=e}onProgressUpdate(e){m(e)&&this._callbacks.push(e)}offProgressUpdate(e){const t=this._callbacks.indexOf(e);t>=0&&this._callbacks.splice(t,1)}abort(){this._isAbort=!0,this._xhr&&(this._xhr.abort(),delete this._xhr)}onHeadersReceived(e){throw new Error("Method not implemented.")}offHeadersReceived(e){throw new Error("Method not implemented.")}}const wm=Id("uploadFile",({url:e,file:t,filePath:n,name:o,files:r,header:i={},formData:s={},timeout:a=__uniConfig.networkTimeout.uploadFile},{resolve:l,reject:c})=>{var u=new _m;return p(r)&&r.length||(r=[{name:o,file:t,uri:n}]),Promise.all(r.map(({file:e,uri:t})=>e instanceof Blob?Promise.resolve(yp(e)):vp(t))).then(function(t){var n,o=new XMLHttpRequest,d=new FormData;Object.keys(s).forEach(e=>{d.append(e,s[e])}),Object.values(r).forEach(({name:e},n)=>{const o=t[n];d.append(e||"file",o,o.name||`file-${Date.now()}`)}),o.open("POST",e),Object.keys(i).forEach(e=>{o.setRequestHeader(e,i[e])}),o.upload.onprogress=function(e){u._callbacks.forEach(t=>{var n=e.loaded,o=e.total;t({progress:Math.round(n/o*100),totalBytesSent:n,totalBytesExpectedToSend:o})})},o.onerror=function(){clearTimeout(n),c("",{errCode:602001})},o.onabort=function(){clearTimeout(n),c("abort",{errCode:600003})},o.onload=function(){clearTimeout(n);const e=o.status;l({statusCode:e,data:o.responseText||o.response})},u._isAbort?c("abort",{errCode:600003}):(n=setTimeout(function(){o.upload.onprogress=o.onload=o.onabort=o.onerror=null,u.abort(),c("timeout",{errCode:5})},a),o.send(d),u._xhr=o)}).catch(()=>{setTimeout(()=>{c("file error")},0)}),u},0,af),xm=Bd("getLocation",({type:e,altitude:t,highAccuracyExpireTime:n,isHighAccuracy:o},{resolve:r,reject:i})=>{const s=Sg();new Promise((e,r)=>{navigator.geolocation?navigator.geolocation.getCurrentPosition(t=>e({coords:t.coords}),r,{enableHighAccuracy:o||t,timeout:n||1e5}):r(new Error("device nonsupport geolocation"))}).catch(e=>new Promise((t,n)=>{s.type===xg.QQ?vg(`https://apis.map.qq.com/ws/location/v1/ip?output=jsonp&key=${s.key}`,{callback:"callback"},e=>{if("result"in e&&e.result.location){const n=e.result.location;t({coords:{latitude:n.lat,longitude:n.lng},skip:!0})}else n(new Error(e.message||JSON.stringify(e)))},()=>n(new Error("network error"))):s.type===xg.GOOGLE?vm({method:"POST",url:`https://www.googleapis.com/geolocation/v1/geolocate?key=${s.key}`,success(e){const o=e.data;"location"in o?t({coords:{latitude:o.location.lat,longitude:o.location.lng,accuracy:o.accuracy},skip:!0}):n(new Error(o.error&&o.error.message||JSON.stringify(e)))},fail(){n(new Error("network error"))}}):s.type===xg.AMAP?_g([],()=>{window.AMap.plugin("AMap.Geolocation",()=>{new window.AMap.Geolocation({enableHighAccuracy:!0,timeout:1e4}).getCurrentPosition((e,o)=>{"complete"===e?t({coords:{latitude:o.position.lat,longitude:o.position.lng,accuracy:o.accuracy},skip:!0}):n(new Error(o.message))})})}):n(e)})).then(({coords:t,skip:n})=>{(function(e,t,n){const o=Sg();return e&&"WGS84"===e.toUpperCase()||["google"].includes(o.type)||n?Promise.resolve(t):"qq"===o.type?new Promise(e=>{vg(`https://apis.map.qq.com/ws/coord/v1/translate?type=1&locations=${t.latitude},${t.longitude}&key=${o.key}&output=jsonp`,{callback:"callback"},n=>{if("locations"in n&&n.locations.length){const{lng:o,lat:r}=n.locations[0];e({longitude:o,latitude:r,altitude:t.altitude,accuracy:t.accuracy,altitudeAccuracy:t.altitudeAccuracy,heading:t.heading,speed:t.speed})}else e(t)},()=>e(t))}):"AMap"===o.type?new Promise(e=>{_g([],()=>{window.AMap.convertFrom([t.longitude,t.latitude],"gps",(n,o)=>{if("ok"===o.info&&o.locations.length){const{lat:n,lng:r}=o.locations[0];e({longitude:r,latitude:n,altitude:t.altitude,accuracy:t.accuracy,altitudeAccuracy:t.altitudeAccuracy,heading:t.heading,speed:t.speed})}else e(t)})})}):Promise.reject(new Error("translate coordinate system faild"))})(e,t,n).then(e=>{r({latitude:e.latitude,longitude:e.longitude,accuracy:e.accuracy,speed:e.altitude||0,altitude:e.altitude||0,verticalAccuracy:e.altitudeAccuracy||0,horizontalAccuracy:e.accuracy||0})}).catch(e=>{i(e.message)})}).catch(e=>{i(e.message||JSON.stringify(e))})},0,ef);const Sm=ju({name:"LoctaionPicker",props:{latitude:{type:Number},longitude:{type:Number}},emits:["close"],setup(e,{emit:t}){gr(()=>mm(!0)),br(()=>mm(!1)),uc();const{t:n}=tc(),o=function(e){const t=yn({latitude:0,longitude:0,keyword:"",searching:!1});function n(){e.latitude&&e.longitude&&(t.latitude=e.latitude,t.longitude=e.longitude)}return Lo([()=>e.latitude,()=>e.longitude],n),n(),t}(e),{list:r,listState:i,loadMore:s,reset:a,getList:l}=function(e){const t=__uniConfig.qqMapKey,n=yn([]),o=$n(-1),r=ns(()=>n[o.value]),i=yn({loading:!0,pageSize:20,pageIndex:1,hasNextPage:!0,nextPage:null,selectedIndex:o,selected:r}),s=$n(""),a=ns(()=>s.value?`region(${s.value},1,${e.latitude},${e.longitude})`:`nearby(${e.latitude},${e.longitude},5000)`);function l(e){e.forEach(e=>{n.push({name:e.title||e.name,address:e.address,distance:e._distance||e.distance,latitude:e.location.lat,longitude:e.location.lng})})}function c(){i.loading=!0;const o=Sg();if(o.type===xg.GOOGLE){if(i.pageIndex>1&&i.nextPage)return void i.nextPage();new google.maps.places.PlacesService(document.createElement("div"))[e.searching?"textSearch":"nearbySearch"]({location:{lat:e.latitude,lng:e.longitude},query:e.keyword,radius:5e3},(e,t,o)=>{i.loading=!1,e&&e.length&&e.forEach(e=>{n.push({name:e.name||"",address:e.vicinity||e.formatted_address||"",distance:0,latitude:e.geometry.location.lat(),longitude:e.geometry.location.lng()})}),o&&(o.hasNextPage?i.nextPage=()=>{o.nextPage()}:i.hasNextPage=!1)})}else o.type===xg.QQ?vg(e.searching?`https://apis.map.qq.com/ws/place/v1/search?output=jsonp&key=${t}&boundary=${a.value}&keyword=${e.keyword}&page_size=${i.pageSize}&page_index=${i.pageIndex}`:`https://apis.map.qq.com/ws/geocoder/v1/?output=jsonp&key=${t}&location=${e.latitude},${e.longitude}&get_poi=1&poi_options=page_size=${i.pageSize};page_index=${i.pageIndex}`,{callback:"callback"},t=>{if(i.loading=!1,e.searching&&"data"in t&&t.data.length)l(t.data);else if("result"in t){const e=t.result;s.value=e.ad_info?e.ad_info.adcode:"",e.pois&&l(e.pois)}n.length===i.pageSize*i.pageIndex&&(i.hasNextPage=!1)},()=>{i.loading=!1}):o.type===xg.AMAP&&window.AMap.plugin("AMap.PlaceSearch",function(){const t=new window.AMap.PlaceSearch({city:"全国",pageSize:10,pageIndex:i.pageIndex}),n=e.searching?e.keyword:"",o=e.searching?5e4:5e3;t.searchNearBy(n,[e.longitude,e.latitude],o,function(e,t){"error"===e?console.error(t):"no_data"===e?i.hasNextPage=!1:l(t.poiList.pois)}),i.loading=!1})}return{listState:i,list:n,loadMore:function(){!i.loading&&i.hasNextPage&&(i.pageIndex++,c())},reset:function(){i.selectedIndex=-1,i.pageIndex=1,i.hasNextPage=!0,i.nextPage=null,n.splice(0,n.length)},getList:c}}(o),u=Qe(()=>{a(),o.keyword&&l()},1e3,{setTimeout:setTimeout,clearTimeout:clearTimeout});function d(e){o.keyword=e.detail.value,u()}function f(){t("close",c({},i.selected))}function p(){t("close")}function h(e){const t=e.detail.centerLocation;t&&m(t)}function g(){xm({type:"gcj02",success:m,fail:()=>{}})}function m({latitude:e,longitude:t}){o.latitude=e,o.longitude=t,o.searching||(a(),l())}return Lo(()=>o.searching,e=>{a(),e||l()}),o.latitude&&o.longitude||g(),()=>{const e=r.map((e,t)=>{return Di("div",{key:t,class:{"list-item":!0,selected:i.selectedIndex===t},onClick:()=>{i.selectedIndex=t,o.latitude=e.latitude,o.longitude=e.longitude}},[Jc(Kc,"#007aff",24),Di("div",{class:"list-item-title"},[e.name]),Di("div",{class:"list-item-detail"},[(n=e.distance,n>100?`${n>1e3?(n/1e3).toFixed(1)+"k":n.toFixed(0)}m | `:n>0?"<100m | ":""),e.address])],10,["onClick"]);var n});return i.loading&&e.unshift(Di("div",{class:"list-loading"},[Di("i",{class:"uni-loading"},null)])),Di("div",{class:"uni-system-choose-location"},[Di(lv,{latitude:o.latitude,longitude:o.longitude,class:"map","show-location":!0,libraries:["places"],onUpdated:l,onRegionchange:h},{default:()=>[Di("div",{class:"map-location",style:'background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAACcCAMAAAC3Fl5oAAAB3VBMVEVMaXH/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/EhL/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/Dw//AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/GRn/NTX/Dw//Fhb/AAD/AAD/AAD/GRn/GRn/Y2P/AAD/AAD/ExP/Ghr/AAD/AAD/MzP/GRn/AAD/Hh7/AAD/RUX/AAD/AAD/AAD/AAD/AAD/AAD/Dg7/AAD/HR3/Dw//FRX/SUn/AAD/////kJD/DQ3/Zmb/+/v/wMD/mJj/6en/vb3/1NT//Pz/ODj/+fn/3Nz/nJz/j4//9/f/7e3/9vb/7Oz/2Nj/x8f/Ozv/+Pj/3d3/nZ3/2dn//f3/6Oj/2tr/v7//09P/vr7/mZn/l5cdSvP3AAAAe3RSTlMAAhLiZgTb/vztB/JMRhlp6lQW86g8mQ4KFPs3UCH5U8huwlesWtTYGI7RsdVeJGfTW5rxnutLsvXWF8vQNdo6qQbuz7D4hgVIx2xtw8GC1TtZaIw0i84P98tU0/fsj7PKaAgiZZxeVfo8Z52eg1P0nESrENnjXVPUgw/uuSmDAAADsUlEQVR42u3aZ3cTRxgF4GtbYleSLdnGcsENG2ODjbExEHrvhAQCIb1Bem+QdkeuuFMNBBJIfmuOckzZI8/srHYmH3Lm+QNXK632LTvQ03Tu/IWeU/tTGTKT2n+q58L5c00wpXJd47DHEt5w47pKxLbhdLdPKb/7dBYxVLxw1GcI/2h1BcpzKNFHLX2JQ4gumaiitqpEEhEdOMJI9h5AFC3feYzI+7IF2tpSLEOqDXpObPRYFm/jCWho/4Ble7MdoT7fzhhq9yHEz28wltU1UPrJZ0wd66HwicfYvEFIfePTAP8tSLTupBHvtGJFH9bSkNrNWEHzERrT34xSH9Ogr1CijkbVAUH1KRqVqkdQAw07iIAaGlcTqI+/0LjeJJ5J0IIEnkpXMdzs4sTtW9dnZq7fuj2xOMtwVWk88RHDjBYejYvnjD8qjOpfQsUqhvj7oSjxcJIhVj3pyKqpNjYvVjQ/RrXq5YABKi3MCYm5BSrtWO5v11DlmlC4RpU1WRS9SJU7QukOVbpQ9JLu549+Dd0AUOlTbkGEuk85vxLAK5QbuytC3R2j3HoAjZSbFxrmKTcCoJdSk0LLJKV6gSaPMqNTQsvUKGW8JrxKqUWhaZFSeWyh1LTQNE2pHF6mzOy40DQ+S5mLimJcENoKlOnBWsr8KbRNUGYt5LXgd6HtD3lNQIoyN4S2G5RJIUOZm0LbTcqsBqVmhLYZSlkPsP4VWf+Rrd+m1v9o9h8Vv5p42C1R5qL1x7WRglOgVN52yfwNOBu76P+lLPoYidu23KPciIHGa07ZeIW1jvcNtI7q5vexCPGYCmf+m/Y9a3sAwQ5bI9T7ukPgPcn9GToEao+xk1OixJT+GIsvNAbx6eAgPq0xiF+KtkpYKhRXCQ8eFFcJhSWGu3rZ8jJkCM8kz9K4TUnrC6mAgzTsB9tLwQ2W15qfosQ2GrQNpZr7aczbzVjBZsvLcaC1g0bsbIVEnU8DOr6H1KDH2LwtUBi0/JII6Dxm9zUXkH+XMWzfh1Dte1i2Pe3QkC77Zel7aehpO8wyHG6Dtt0NjKxhN6I4uSli/TqJiJJDUQ4NDCURXTrXRy1XcumyD24M+AzhD1RXIIZsl/LoyZmurJHDM7s8lvB2FQ/PmPJ6PseAXP5HGMYAAC7ABbgAF+ACXIALcAEuwAW4ABfgAlyAC3ABLsAFuID/d8Cx4NEt8/byOf0wLnis8zjMq9/Kp7bWw4JOj8u8TlhRl+G/Mp2wpOX48GffvvZ1CyL4B53LAS6zb08EAAAAAElFTkSuQmCC")'},null),Di("div",{class:"map-move",onClick:g},[Jc("M13.3334375 16 q0.033125 1.1334375 0.783125 1.8834375 q0.75 0.75 1.8834375 0.75 q1.1334375 0 1.8834375 -0.75 q0.75 -0.75 0.75 -1.8834375 q0 -1.1334375 -0.75 -1.8834375 q-0.75 -0.75 -1.8834375 -0.75 q-1.1334375 0 -1.8834375 0.75 q-0.75 0.75 -0.783125 1.8834375 ZM30.9334375 14.9334375 l-1.1334375 0 q-0.5 -5.2 -4.0165625 -8.716875 q-3.516875 -3.5165625 -8.716875 -4.0165625 l0 -1.1334375 q0 -0.4665625 -0.3 -0.7665625 q-0.3 -0.3 -0.7665625 -0.3 q-0.4665625 0 -0.7665625 0.3 q-0.3 0.3 -0.3 0.7665625 l0 1.1334375 q-5.2 0.5 -8.716875 4.0165625 q-3.5165625 3.516875 -4.0165625 8.716875 l-1.1334375 0 q-0.4665625 0 -0.7665625 0.3 q-0.3 0.3 -0.3 0.7665625 q0 0.4665625 0.3 0.7665625 q0.3 0.3 0.7665625 0.3 l1.1334375 0 q0.5 5.2 4.0165625 8.716875 q3.516875 3.5165625 8.716875 4.0165625 l0 1.1334375 q0 0.4665625 0.3 0.7665625 q0.3 0.3 0.7665625 0.3 q0.4665625 0 0.7665625 -0.3 q0.3 -0.3 0.3 -0.7665625 l0 -1.1334375 q5.2 -0.5 8.716875 -4.0165625 q3.5165625 -3.516875 4.0165625 -8.716875 l1.1334375 0 q0.4665625 0 0.7665625 -0.3 q0.3 -0.3 0.3 -0.7665625 q0 -0.4665625 -0.3 -0.7665625 q-0.3 -0.3 -0.7665625 -0.3 ZM17.0665625 27.6665625 l0 -2.0665625 q0 -0.4665625 -0.3 -0.7665625 q-0.3 -0.3 -0.7665625 -0.3 q-0.4665625 0 -0.7665625 0.3 q-0.3 0.3 -0.3 0.7665625 l0 2.0665625 q-4.3 -0.4665625 -7.216875 -3.383125 q-2.916875 -2.916875 -3.3834375 -7.216875 l2.0665625 0 q0.4665625 0 0.7665625 -0.3 q0.3 -0.3 0.3 -0.7665625 q0 -0.4665625 -0.3 -0.7665625 q-0.3 -0.3 -0.7665625 -0.3 l-2.0665625 0 q0.4665625 -4.3 3.3834375 -7.216875 q2.9165625 -2.916875 7.216875 -3.3834375 l0 2.0665625 q0 0.4665625 0.3 0.7665625 q0.3 0.3 0.7665625 0.3 q0.4665625 0 0.7665625 -0.3 q0.3 -0.3 0.3 -0.7665625 l0 -2.0665625 q4.3 0.4665625 7.216875 3.3834375 q2.9165625 2.9165625 3.383125 7.216875 l-2.0665625 0 q-0.4665625 0 -0.7665625 0.3 q-0.3 0.3 -0.3 0.7665625 q0 0.4665625 0.3 0.7665625 q0.3 0.3 0.7665625 0.3 l2.0665625 0 q-0.4665625 4.3 -3.383125 7.216875 q-2.916875 2.9165625 -7.216875 3.383125 Z","#000000",24)],8,["onClick"])],_:1},8,["latitude","longitude","show-location","onUpdated","onRegionchange"]),Di("div",{class:"nav"},[Di("div",{class:"nav-btn back",onClick:p},[Jc("M17.25 16.156l7.375-7.313q0.281-0.281 0.281-0.641t-0.281-0.641q-0.25-0.25-0.625-0.25t-0.625 0.25l-7.375 7.344-7.313-7.344q-0.25-0.25-0.625-0.25t-0.625 0.25q-0.281 0.25-0.281 0.625t0.281 0.625l7.313 7.344-7.375 7.344q-0.281 0.25-0.281 0.625t0.281 0.625q0.125 0.125 0.281 0.188t0.344 0.063q0.156 0 0.328-0.063t0.297-0.188l7.375-7.344 7.375 7.406q0.125 0.156 0.297 0.219t0.328 0.063q0.188 0 0.344-0.078t0.281-0.203q0.281-0.25 0.281-0.609t-0.281-0.641l-7.375-7.406z","#ffffff",26)],8,["onClick"]),Di("div",{class:{"nav-btn":!0,confirm:!0,disable:!i.selected},onClick:f},[Jc(Kc,"#ffffff",26)],10,["onClick"])]),Di("div",{class:"menu"},[Di("div",{class:"search"},[Di(ah,{value:o.keyword,class:"search-input",placeholder:n("uni.chooseLocation.search"),onFocus:()=>o.searching=!0,onInput:d},null,8,["value","placeholder","onFocus","onInput"]),o.searching&&Di("div",{class:"search-btn",onClick:()=>{o.searching=!1,o.keyword=""}},[n("uni.chooseLocation.cancel")],8,["onClick"])]),Di(Th,{"scroll-y":!0,class:"list",onScrolltolower:s},(t=e,"function"==typeof t||"[object Object]"===Object.prototype.toString.call(t)&&!Ei(t)?e:{default:()=>[e],_:2}),8,["scroll-y","onScrolltolower"])])]);var t}}});let Am=null;const Tm=Bd("chooseLocation",(e,{resolve:t,reject:n})=>{Am?n("cancel"):(Am=yn(e),eo(()=>{const e=dm(Sm,Am,o=>{Am=null,eo(()=>{e.unmount()}),o?t(o):n("cancel")});e.mount(fm("u-a-c"))}))}),Cm=Bd(cf,({url:e,events:t,isAutomatedTesting:n},{resolve:o,reject:r})=>{if(If.handledBeforeEntryPageRoutes)return Ef({type:cf,url:e,events:t,isAutomatedTesting:n}).then(o).catch(r);zf.push({args:{type:cf,url:e,events:t,isAutomatedTesting:n},resolve:o,reject:r})},0,hf);function Em(e){__uniConfig.darkmode&&wv.on(se,e)}function km(e){wv.off(se,e)}const Mm={light:{cancelColor:"#000000"},dark:{cancelColor:"rgb(170, 170, 170)"}},Om=Xo({props:{title:{type:String,default:""},content:{type:String,default:""},showCancel:{type:Boolean,default:!0},cancelText:{type:String,default:"Cancel"},cancelColor:{type:String,default:"#000000"},confirmText:{type:String,default:"OK"},confirmColor:{type:String,default:"#007aff"},visible:{type:Boolean},editable:{type:Boolean,default:!1},placeholderText:{type:String,default:""}},setup(e,{emit:t}){const n=$n(""),o=()=>s.value=!1,r=()=>(o(),t("close","cancel")),i=()=>(o(),t("close","confirm",n.value)),s=pm(e,{onEsc:r,onEnter:()=>{!e.editable&&i()}}),a=function(e){const t=$n(e.cancelColor),n=({theme:e})=>{((e,t)=>{t.value=Mm[e].cancelColor})(e,t)};return Mo(()=>{e.visible?(t.value=e.cancelColor,"#000"===e.cancelColor&&("dark"===Bg()&&n({theme:"dark"}),Em(n))):km(n)}),t}(e);return()=>{const{title:t,content:o,showCancel:l,confirmText:c,confirmColor:u,editable:d,placeholderText:f}=e;return n.value=o,Di(ds,{name:"uni-fade"},{default:()=>[Ro(Di("uni-modal",{onTouchmove:jc},[um,Di("div",{class:"uni-modal"},[t?Di("div",{class:"uni-modal__hd"},[Di("strong",{class:"uni-modal__title",textContent:t||""},null,8,["textContent"])]):null,d?Di("textarea",{class:"uni-modal__textarea",rows:"1",placeholder:f,value:o,onInput:e=>n.value=e.target.value},null,40,["placeholder","value","onInput"]):Di("div",{class:"uni-modal__bd",onTouchmovePassive:qc,textContent:o},null,40,["onTouchmovePassive","textContent"]),Di("div",{class:"uni-modal__ft"},[l&&Di("div",{style:{color:a.value},class:"uni-modal__btn uni-modal__btn_default",onClick:r},[e.cancelText],12,["onClick"]),Di("div",{style:{color:u},class:"uni-modal__btn uni-modal__btn_primary",onClick:i},[c],12,["onClick"])])])],40,["onTouchmove"]),[[Ts,s.value]])]})}}});let Lm;const Pm=Pe(()=>{wv.on("onHidePopup",()=>Lm.visible=!1)});let Dm;function $m(e,t){const n="confirm"===e,o={confirm:n,cancel:"cancel"===e};n&&Lm.editable&&(o.content=t),Dm&&Dm(o)}const Nm=Bd("showModal",(e,{resolve:t})=>{Pm(),Dm=t,Lm?(c(Lm,e),Lm.visible=!0):(Lm=yn(e),eo(()=>(dm(Om,Lm,$m).mount(fm("u-a-m")),eo(()=>Lm.visible=!0))))},0,wf),Rm={title:{type:String,default:""},icon:{default:"success",validator:e=>-1!==xf.indexOf(e)},image:{type:String,default:""},duration:{type:Number,default:1500},mask:{type:Boolean,default:!1},visible:{type:Boolean}},Im="uni-toast__icon",zm={light:"#fff",dark:"rgba(255,255,255,0.9)"},Bm=e=>zm[e],jm=Xo({name:"Toast",props:Rm,setup(e){rc(),ic();const{Icon:t}=function(e){const t=$n(Bm(Bg())),n=({theme:e})=>t.value=Bm(e);Mo(()=>{e.visible?Em(n):km(n)});const o=ns(()=>{switch(e.icon){case"success":return Di(Jc(Gc,t.value,38),{class:Im});case"error":return Di(Jc(Xc,t.value,38),{class:Im});case"loading":return Di("i",{class:[Im,"uni-loading"]},null,2);default:return null}});return{Icon:o}}(e),n=pm(e,{});return()=>{const{mask:o,duration:r,title:i,image:s}=e;return Di(ds,{name:"uni-fade"},{default:()=>[Ro(Di("uni-toast",{"data-duration":r},[o?Di("div",{class:"uni-mask",style:"background: transparent;",onTouchmove:jc},null,40,["onTouchmove"]):"",s||t.value?Di("div",{class:"uni-toast"},[s?Di("img",{src:s,class:Im},null,10,["src"]):t.value,Di("p",{class:"uni-toast__content"},[i])]):Di("div",{class:"uni-sample-toast"},[Di("p",{class:"uni-simple-toast__text"},[i])])],8,["data-duration"]),[[Ts,n.value]])]})}}});let qm,Vm,Fm="";const Hm=ft();function Wm(e){qm?c(qm,e):(qm=yn(c(e,{visible:!1})),eo(()=>{Hm.run(()=>{Lo([()=>qm.visible,()=>qm.duration],([e,t])=>{if(e){if(Vm&&clearTimeout(Vm),"onShowLoading"===Fm)return;Vm=setTimeout(()=>{Km("onHideToast")},t)}else Vm&&clearTimeout(Vm)})}),wv.on("onHidePopup",()=>Km("onHidePopup")),dm(jm,qm,()=>{}).mount(fm("u-a-t"))})),setTimeout(()=>{qm.visible=!0},10)}const Um=Bd("showToast",(e,{resolve:t,reject:n})=>{Wm(e),Fm="onShowToast",t()},0,Sf),Ym={icon:"loading",duration:1e8,image:""},Gm=Bd("showLoading",(e,{resolve:t,reject:n})=>{c(e,Ym),Wm(e),Fm="onShowLoading",t()},0,_f),Xm=Bd("hideLoading",(e,{resolve:t,reject:n})=>{Km("onHideLoading"),t()});function Km(e){const{t:t}=tc();if(!Fm)return;let n="";if("onHideToast"===e&&"onShowToast"!==Fm?n=t("uni.showToast.unpaired"):"onHideLoading"===e&&"onShowLoading"!==Fm&&(n=t("uni.showLoading.unpaired")),n)return console.warn(n);Fm="",setTimeout(()=>{qm.visible=!1},10)}function Jm(e){function t(){var t;t=e.navigationBar.titleText,document.title=t,wv.emit("onNavigationBarChange",{titleText:t})}Mo(t),rr(t)}const Qm="0px",Zm=ju({name:"Layout",setup(e,{emit:t}){const n=$n(null);Hc({"--status-bar-height":Qm,"--top-window-height":Qm,"--window-left":Qm,"--window-right":Qm,"--window-margin":Qm,"--tab-bar-height":Qm});const o=function(){const e=zl();return{routeKey:ns(()=>Gf("/"+e.meta.route,td())),isTabBar:ns(()=>e.meta.isTabBar),routeCache:Kf}}(),{layoutState:r,windowState:i}=function(){ed();{const e=yn({marginWidth:0,leftWindowWidth:0,rightWindowWidth:0});return Lo(()=>e.marginWidth,e=>Hc({"--window-margin":e+"px"})),Lo(()=>e.leftWindowWidth+e.marginWidth,e=>{Hc({"--window-left":e+"px"})}),Lo(()=>e.rightWindowWidth+e.marginWidth,e=>{Hc({"--window-right":e+"px"})}),{layoutState:e,windowState:ns(()=>({}))}}}();!function(e,t){const n=ed();function o(){const o=document.body.clientWidth,r=Hf();let i={};if(r.length>0){i=Rf(r[r.length-1]).meta}else{const e=fu(n.path,!0);e&&(i=e.meta)}const s=parseInt(String((f(i,"maxWidth")?i.maxWidth:__uniConfig.globalStyle.maxWidth)||Number.MAX_SAFE_INTEGER));let a=!1;a=o>s,a&&s?(e.marginWidth=(o-s)/2,eo(()=>{const e=t.value;e&&e.setAttribute("style","max-width:"+s+"px;margin:0 auto;")})):(e.marginWidth=0,eo(()=>{const e=t.value;e&&e.removeAttribute("style")}))}Lo([()=>n.path],o),gr(()=>{o(),window.addEventListener("resize",o)})}(r,n);const s=function(e){const t=$n(!1);return ns(()=>({"uni-app--showtabbar":e,"uni-app--maxwidth":t.value}))}(!1);return()=>{const e=function(e){const t=function({routeKey:e,isTabBar:t,routeCache:n}){return Di(Rl,null,{default:mo(({Component:o})=>[(wi(),Ci(nr,{matchBy:"key",cache:n},[(wi(),Ci(Ao(o),{type:t.value?"tabBar":"",key:e.value}))],1032,["cache"]))]),_:1})}(e);return t}(o);return Di("uni-app",{ref:n,class:s.value},[e,!1],2)}}});const ev="MAP_LOCATION",tv=ju({name:"MapLocation",setup(){const e=yn({latitude:0,longitude:0,rotate:0});{let t=function(t){e.rotate=t.direction},n=function(){xm({type:"gcj02",success:t=>{e.latitude=t.latitude,e.longitude=t.longitude},complete:()=>{i=setTimeout(n,3e4)}})},o=function(){i&&clearTimeout(i),Kg(t)};const r=Xr("onMapReady");let i;Xg(t),r(n),br(o);const s=Xr("addMapChidlContext"),a=Xr("removeMapChidlContext"),l={id:ev,state:e};s(l),br(()=>a(l))}return()=>e.latitude?Di(kg,ji({anchor:{x:.5,y:.5},width:"44",height:"44",iconPath:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIQAAACECAMAAABmmnOVAAAC01BMVEUAAAAAef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef96quGStdqStdpbnujMzMzCyM7Gyc7Ky83MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMwAef8GfP0yjfNWnOp0qOKKsdyYt9mju9aZt9mMstx1qeJYnekyjvIIfP0qivVmouaWttnMzMyat9lppOUujPQKffxhoOfNzc3Y2Njh4eHp6enu7u7y8vL19fXv7+/i4uLZ2dnOzs6auNgOf/sKff15quHR0dHx8fH9/f3////j4+N6quFdn+iywdPb29vw8PD+/v7c3NyywtLa2tr29vbS0tLd3d38/Pzf39/o6Ojc7f+q0v+HwP9rsf9dqv9Hnv9Vpv/q6urj8P+Vx/9Am/8Pgf8Iff/z8/OAvP95uf/n5+c5l//V6f+52v+y1//7+/vt7e0rkP/09PTQ0NDq9P8Whf+cy//W1tbe3t7A3v/m5ubs7OxOov/r6+vk5OQiaPjKAAAAknRSTlMACBZ9oB71/jiqywJBZATT6hBukRXv+zDCAVrkDIf4JbQsTb7eVeJLbwfa8Rh4G/OlPS/6/kxQ9/xdmZudoJxNVhng7B6wtWdzAtQOipcF1329wS44doK/BAkyP1pvgZOsrbnGXArAg34G2IsD1eMRe7bi7k5YnqFT9V0csyPedQyYD3p/Fje+hDpskq/MwpRBC6yKp2MAAAQdSURBVHja7Zn1exMxGIAPHbrhDsPdneHuNtzd3d3dIbjLh93o2o4i7TpgG1Jk0g0mMNwd/gTa5rq129reHnK5e/bk/TFNk/dJ7r5894XjGAwGg8GgTZasCpDIll1+hxw5vXLJLpEboTx5ZXbIhyzkl9fB28cqUaCgrBKFkI3CcjoUKYolihWXUSI7EihRUjaHXF52CVRKLoe8eZIdUOkyMknkRw6UlcehYAFHiXK+skgURk6Ul8OhQjFnCVRRBolKqRxQ5SzUHaqgNGSj7VCmalqJnDkoS5RF6ZCbroNvufQkUD6qEuXTdUA+3hQdqiEXVKfnUKOmK4latalJ1EEuoZZ6162HJ9x/4OChw0eOHj12/MTJU6dxG7XUu751tjNnz4ET5y9ctLZTSr0beKFLl89bpuUDrqgC1RqNWqsKuqqzNFw7e51S6u3tc+OmZUJ9kCHY6ECwOkRvab51iUrqXej2HYDQsHBjWgx3Ae7dppB6N2wEcF9jdMGDUIDGTaR2aNoM9FqjG7QmaN5CWgc/gIePjG559BigpZQOrYB/4jBfRGRUtDkmJjY6KjLCofkpD62lc2gDfMpWPIuLdwyV8XEpHgaddBZ+wBuSFcwJqSN2ovmZ/dfnOvCTxqGtwzq8SEjv4EhISn48eWgnhUP7DvDSvgzxrs6vV6+FLiro2EkCic4QKkzwJsH1KYreCp0eQhfyDl1B/w4P/xa5JVJ4U03QjbRD9x7wXlgH5IE3wmMBHXoSlugFAcI6f/AkkSi8q6HQm6xDn77wEQ8djTwSj3tqAMguRTe4ikeOQyJ4YV+KfkQl+oNW5GbY4gWOWgbwJ+kwAD6Fi90MK2ZsrIeBBCUGwRXbqJ+/iJMQliIEBhOU6AJhtlG/IpHE2bqrYQg5h6HA4yQiRqwEfkGCdTCMmMRw+IbPDCQaHCsCYAQxiZHw3TbmD/ESOHgHwShiEqPhp/gggYkSztIxxCRawy/bmEniJaJtfwiEscQkxkFgRqJESqQwwHhiEuMBp3Vm8RK/cZoHEzKXhCK2QxEPpiJe0YlKCFaKCNv/cYBNUsBRPlkJSc0U+dM7E9H0ThGJbgZT/iR7yj+VqMS06Qr4+OFm2JdCxIa8lugzkJs5K6MfxAaYPUcBpYG5khZJEkUUSb7DPCnKRfPBXj6M8FwuegoLpCgXcQszVjhbJFUJUee2hBhLoYTIcYtB57KY+opSMdVqwatSlZVj05aV//CwJLMX2DluaUcwhXm4ali2XOoLjxUrPV26zFtF4f5p0Gp310+z13BUWNvbehEXona6iAtX/zVZmtfN4WixfsNky4S6gCCVVq3RPLdfSfpv3MRRZfPoLc6Xs/5bt3EyMGzE9h07/Xft2t15z6i9+zgGg8FgMBgMBoPBYDAYDAYj8/APG67Rie8pUDsAAAAASUVORK5CYII="},e),null,16,["iconPath"]):null}}),nv=ju({name:"MapPolygon",props:{dashArray:{type:Array,default:()=>[0,0]},points:{type:Array,required:!0},strokeWidth:{type:Number,default:1},strokeColor:{type:String,default:"#000000"},fillColor:{type:String,default:"#00000000"},zIndex:{type:Number,default:0}},setup(e){let t;return Xr("onMapReady")((n,o,r)=>{function i(){const{points:r,strokeWidth:i,strokeColor:s,dashArray:a,fillColor:l,zIndex:c}=e,u=r.map(e=>{const{latitude:t,longitude:n}=e;return Cg()?[n,t]:Eg()?new o.Point(n,t):new o.LatLng(t,n)}),{r:d,g:f,b:p,a:h}=Mg(l),{r:g,g:m,b:v,a:y}=Mg(s),b={clickable:!0,cursor:"crosshair",editable:!1,map:n,fillColor:"",path:u,strokeColor:"",strokeDashStyle:a.some(e=>e>0)?"dash":"solid",strokeWeight:i,visible:!0,zIndex:c};o.Color?(b.fillColor=new o.Color(d,f,p,h),b.strokeColor=new o.Color(g,m,v,y)):(b.fillColor=`rgb(${d}, ${f}, ${p})`,b.fillOpacity=h,b.strokeColor=`rgb(${g}, ${m}, ${v})`,b.strokeOpacity=y),t?t.setOptions(b):Eg()?(t=new o.Polygon(b.path,b),n.addOverlay(t)):t=new o.Polygon(b)}i(),Lo(e,i)}),br(()=>{t.setMap(null)}),()=>null}});function ov(e){const t=[];return p(e)&&e.forEach(e=>{e&&e.latitude&&e.longitude&&t.push({latitude:e.latitude,longitude:e.longitude})}),t}function rv(e,t,n){return Eg()?function(e,t,n){return new e.Point(n,t)}(e,t,n):Cg()?function(e,t,n){return new e.LngLat(n,t)}(e,t,n):function(e,t,n){return new e.LatLng(t,n)}(e,t,n)}function iv(e){return"getLat"in e?e.getLat():Eg()?e.lat:e.lat()}function sv(e){return"getLng"in e?e.getLng():Eg()?e.lng:e.lng()}function av(e,t,n){const o=Vu(t,n),r=$n(null);let i,s;const a=yn({latitude:Number(e.latitude),longitude:Number(e.longitude),includePoints:ov(e.includePoints)}),l=[];let u,d;function f(e){u?e(s,i,o):l.push(e)}const p=[];function h(e){d?e():l.push(e)}const g={};function m(){const e=s.getCenter();return{scale:s.getZoom(),centerLocation:{latitude:iv(e),longitude:sv(e)}}}function v(){if(Cg()){const e=[];a.includePoints.forEach(t=>{e.push([t.longitude,t.latitude])});const t=new i.Bounds(...e);s.setBounds(t)}else if(Eg());else{const e=new i.LatLngBounds;a.includePoints.forEach(({latitude:t,longitude:n})=>{const o=new i.LatLng(t,n);e.extend(o)}),s.fitBounds(e)}}function y(){const t=r.value,l=rv(i,a.latitude,a.longitude),u=i.event||i.Event,f=new i.Map(t,{center:l,zoom:Number(e.scale),disableDoubleClickZoom:!0,mapTypeControl:!1,zoomControl:!1,scaleControl:!1,panControl:!1,fullscreenControl:!1,streetViewControl:!1,keyboardShortcuts:!1,minZoom:5,maxZoom:18,draggable:!0});if(Eg()&&(f.centerAndZoom(l,Number(e.scale)),f.enableScrollWheelZoom(),f._printLog&&f._printLog("uniapp")),Lo(()=>e.scale,e=>{f.setZoom(Number(e)||16)}),h(()=>{a.includePoints.length&&(v(),function(){const e=rv(i,a.latitude,a.longitude);s.setCenter(e)}())}),Eg())f.addEventListener("click",()=>{o("tap",{},{}),o("click",{},{})}),f.addEventListener("dragstart",()=>{o("regionchange",{},{type:"begin",causedBy:"gesture"})}),f.addEventListener("dragend",()=>{o("regionchange",{},c({type:"end",causedBy:"drag"},m()))});else{const e=u.addListener(f,"bounds_changed",()=>{e.remove(),d=!0,p.forEach(e=>e()),p.length=0});u.addListener(f,"click",()=>{o("tap",{},{}),o("click",{},{})}),u.addListener(f,"dragstart",()=>{o("regionchange",{},{type:"begin",causedBy:"gesture"})}),u.addListener(f,"dragend",()=>{o("regionchange",{},c({type:"end",causedBy:"drag"},m()))});const t=()=>{n("update:scale",f.getZoom()),o("regionchange",{},c({type:"end",causedBy:"scale"},m()))};u.addListener(f,"zoom_changed",t),u.addListener(f,"zoomend",t),u.addListener(f,"center_changed",()=>{const e=f.getCenter(),t=iv(e),o=sv(e);n("update:latitude",t),n("update:longitude",o)})}return f}Lo([()=>e.latitude,()=>e.longitude],([e,t])=>{const n=Number(e),o=Number(t);if((n!==a.latitude||o!==a.longitude)&&(a.latitude=n,a.longitude=o,s)){const e=rv(i,a.latitude,a.longitude);s.setCenter(e)}}),Lo(()=>e.includePoints,e=>{a.includePoints=ov(e),d&&v()},{deep:!0});try{Ih((e,t={})=>{switch(e){case"getCenterLocation":f(()=>{const n=s.getCenter();Ne(t,{latitude:iv(n),longitude:sv(n),errMsg:`${e}:ok`})});break;case"moveToLocation":{let n=Number(t.latitude),o=Number(t.longitude);if(!n||!o){const e=g[ev];e&&(n=e.state.latitude,o=e.state.longitude)}if(n&&o){if(a.latitude=n,a.longitude=o,s){const e=rv(i,n,o);s.setCenter(e)}f(()=>{Ne(t,`${e}:ok`)})}else Ne(t,`${e}:fail`)}break;case"translateMarker":f(()=>{const n=g[t.markerId];if(n){try{n.translate(t)}catch(o){Ne(t,`${e}:fail ${o.message}`)}Ne(t,`${e}:ok`)}else Ne(t,`${e}:fail not found`)});break;case"includePoints":a.includePoints=ov(t.includePoints),(d||Cg())&&v(),h(()=>{Ne(t,`${e}:ok`)});break;case"getRegion":h(()=>{const n=s.getBounds(),o=n.getSouthWest(),r=n.getNorthEast();Ne(t,{southwest:{latitude:iv(o),longitude:sv(o)},northeast:{latitude:iv(r),longitude:sv(r)},errMsg:`${e}:ok`})});break;case"getScale":f(()=>{Ne(t,{scale:s.getZoom(),errMsg:`${e}:ok`})})}},Bh())}catch(b){}return gr(()=>{_g(e.libraries,e=>{i=e,s=y(),u=!0,l.forEach(e=>e(s,i,o)),l.length=0,o("updated",{},{})})}),Gr("onMapReady",f),Gr("addMapChidlContext",function(e){g[e.id]=e}),Gr("removeMapChidlContext",function(e){delete g[e.id]}),{state:a,mapRef:r,trigger:o}}const lv=Bu({name:"Map",props:{id:{type:String,default:""},latitude:{type:[String,Number],default:0},longitude:{type:[String,Number],default:0},scale:{type:[String,Number],default:16},markers:{type:Array,default:()=>[]},includePoints:{type:Array,default:()=>[]},polyline:{type:Array,default:()=>[]},circles:{type:Array,default:()=>[]},controls:{type:Array,default:()=>[]},showLocation:{type:[Boolean,String],default:!1},libraries:{type:Array,default:()=>[]},polygons:{type:Array,default:()=>[]}},emits:["markertap","labeltap","callouttap","controltap","regionchange","tap","click","updated","update:scale","update:latitude","update:longitude"],setup(e,{emit:t,slots:n}){const o=$n(null),{mapRef:r,trigger:i}=av(e,o,t);return()=>Di("uni-map",{ref:o,id:e.id},[Di("div",{ref:r,style:"width: 100%; height: 100%; position: relative; overflow: hidden"},null,512),e.markers.map(e=>Di(kg,ji({key:e.id},e),null,16)),e.polyline.map(e=>Di(Lg,e,null,16)),e.circles.map(e=>Di(Pg,e,null,16)),e.controls.map(e=>Di($g,ji(e,{trigger:i}),null,16,["trigger"])),e.showLocation&&Di(tv,null,null),e.polygons.map(e=>Di(nv,e,null,16)),Di("div",{style:"position: absolute;top: 0;width: 100%;height: 100%;overflow: hidden;pointer-events: none;"},[n.default&&n.default()])],8,["id"])}});function cv(e){return"function"==typeof e||"[object Object]"===Object.prototype.toString.call(e)&&!Ei(e)}function uv(e){if(e.mode===pv.TIME)return"00:00";if(e.mode===pv.DATE){const t=(new Date).getFullYear()-150;switch(e.fields){case hv.YEAR:return t.toString();case hv.MONTH:return t+"-01";default:return t+"-01-01"}}return""}function dv(e){if(e.mode===pv.TIME)return"23:59";if(e.mode===pv.DATE){const t=(new Date).getFullYear()+150;switch(e.fields){case hv.YEAR:return t.toString();case hv.MONTH:return t+"-12";default:return t+"-12-31"}}return""}function fv(e,t,n,o){const r=e.mode===pv.DATE?"-":":",i=e.mode===pv.DATE?t.dateArray:t.timeArray;let s;if(e.mode===pv.TIME)s=2;else switch(e.fields){case hv.YEAR:s=1;break;case hv.MONTH:s=2;break;default:s=3}const a=String(n).split(r);let l=[];for(let c=0;c=0&&(l=o?fv(e,t,o):l.map(()=>0)),l}const pv={SELECTOR:"selector",MULTISELECTOR:"multiSelector",TIME:"time",DATE:"date"},hv={YEAR:"year",MONTH:"month",DAY:"day"},gv={PICKER:"picker",SELECT:"select"},mv=Bu({name:"Picker",compatConfig:{MODE:3},props:{name:{type:String,default:""},range:{type:Array,default:()=>[]},rangeKey:{type:String,default:""},value:{type:[Number,String,Array],default:0},mode:{type:String,default:pv.SELECTOR,validator:e=>Object.values(pv).includes(e)},fields:{type:String,default:""},start:{type:String,default:e=>uv(e)},end:{type:String,default:e=>dv(e)},disabled:{type:[Boolean,String],default:!1},selectorType:{type:String,default:""}},emits:["change","cancel","columnchange"],setup(e,{emit:t,slots:n}){cc();const{t:o}=tc(),r=$n(null),i=$n(null),s=$n(null),a=$n(null),l=$n(!1),{state:u,rangeArray:d}=function(e){const t=yn({valueSync:void 0,visible:!1,contentVisible:!1,popover:null,valueChangeSource:"",timeArray:[],dateArray:[],valueArray:[],oldValueArray:[],isDesktop:!1,popupStyle:{content:{},triangle:{}}}),n=ns(()=>{let n=e.range;switch(e.mode){case pv.SELECTOR:return[n];case pv.MULTISELECTOR:return n;case pv.TIME:return t.timeArray;case pv.DATE:{const n=t.dateArray;switch(e.fields){case hv.YEAR:return[n[0]];case hv.MONTH:return[n[0],n[1]];default:return[n[0],n[1],n[2]]}}}return[]});return{state:t,rangeArray:n}}(e),f=Vu(r,t),{system:h,selectorTypeComputed:g,_show:m,_l10nColumn:v,_l10nItem:y,_input:b,_fixInputPosition:_,_pickerViewChange:w,_cancel:x,_change:S,_resetFormData:A,_getFormData:T,_createTime:C,_createDate:E,_setValueSync:k}=function(e,t,n,o,r,i,s){const a=function(){const e=$n(!1);return e.value=vv(),e}(),l=function(){const e=$n("");return e.value=yv(),e}(),c=ns(()=>{const t=e.selectorType;return Object.values(gv).includes(t)?t:a.value?gv.PICKER:gv.SELECT}),u=ns(()=>e.mode===pv.DATE&&!Object.values(hv).includes(e.fields)&&t.isDesktop?l.value:""),d=ns(()=>fv(e,t,e.start,uv(e))),f=ns(()=>fv(e,t,e.end,dv(e)));function h(n){if(e.disabled)return;t.valueChangeSource="";let o=r.value,i=n.currentTarget;o.remove(),(document.querySelector("uni-app")||document.body).appendChild(o),o.style.display="block";const s=i.getBoundingClientRect();t.popover={top:s.top,left:s.left,width:s.width,height:s.height},setTimeout(()=>{t.visible=!0},20)}function g(){return{value:t.valueSync,key:e.name}}function m(){switch(e.mode){case pv.SELECTOR:t.valueSync=0;break;case pv.MULTISELECTOR:t.valueSync=e.value.map(e=>0);break;case pv.DATE:case pv.TIME:t.valueSync=""}}function v(){let e=[],n=[];for(let t=0;t<24;t++)e.push((t<10?"0":"")+t);for(let t=0;t<60;t++)n.push((t<10?"0":"")+t);t.timeArray.push(e,n)}function y(){let t=(new Date).getFullYear(),n=t-150,o=t+150;if(e.start){const t=new Date(e.start).getFullYear();!isNaN(t)&&to&&(o=t)}return{start:n,end:o}}function b(){let e=[];const n=y();for(let t=n.start,i=n.end;t<=i;t++)e.push(String(t));let o=[];for(let t=1;t<=12;t++)o.push((t<10?"0":"")+t);let r=[];for(let t=1;t<=31;t++)r.push((t<10?"0":"")+t);t.dateArray.push(e,o,r)}function _(e){return 60*e[0]+e[1]}function w(e){const t=31;return e[0]*t*12+(e[1]||0)*t+(e[2]||0)}function x(e,t){for(let n=0;na?0:s)}}break;case pv.TIME:case pv.DATE:t.valueSync=String(n);break;default:{const e=Number(n);t.valueSync=e<0?0:e;break}}}function A(){let n,o=t.valueSync;switch(e.mode){case pv.MULTISELECTOR:n=[...o];break;case pv.TIME:n=fv(e,t,o,$e({mode:pv.TIME}));break;case pv.DATE:n=fv(e,t,o,$e({mode:pv.DATE}));break;default:n=[o]}t.oldValueArray=[...n],t.valueArray=[...n]}function T(){let n=t.valueArray;switch(e.mode){case pv.SELECTOR:return n[0];case pv.MULTISELECTOR:return n.map(e=>e);case pv.TIME:return t.valueArray.map((e,n)=>t.timeArray[n][e]).join(":");case pv.DATE:return t.valueArray.map((e,n)=>t.dateArray[n][e]).join("-")}}function C(){k(),t.valueChangeSource="click";const e=T();t.valueSync=p(e)?e.map(e=>e):e,n("change",{},{value:e})}function E(e){if("firefox"===u.value&&e){const{top:n,left:o,width:r,height:i}=t.popover,{pageX:s,pageY:a}=e;if(s>o&&sn&&a{let e=r.value;e.remove(),o.value.prepend(e),e.style.display="none"},260)}function M(){e.mode===pv.SELECTOR&&c.value===gv.SELECT&&(i.value.scrollTop=34*t.valueArray[0])}function O(e){const n=e.target;t.valueSync=n.value,eo(()=>{C()})}function L(e){if("chrome"===u.value){const t=o.value.getBoundingClientRect(),n=32;s.value.style.left=e.clientX-t.left-1.5*n+"px",s.value.style.top=e.clientY-t.top-.5*n+"px"}}function P(e){t.valueArray=D(e.detail.value,!0)}function D(t,n){const{getLocale:o}=tc();if(e.mode===pv.DATE){const r=o();if(!r.startsWith("zh"))switch(e.fields){case hv.YEAR:return t;case hv.MONTH:return[t[1],t[0]];default:switch(r){case"es":case"fr":return[t[2],t[1],t[0]];default:return n?[t[2],t[0],t[1]]:[t[1],t[2],t[0]]}}}return t}function $(t,n){const{getLocale:o}=tc();if(e.mode===pv.DATE){const r=o();if(r.startsWith("zh")){return t+["年","月","日"][n]}if(e.fields!==hv.YEAR&&n===(e.fields===hv.MONTH||"es"!==r&&"fr"!==r?0:1)){let e;switch(r){case"es":e=["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"];break;case"fr":e=["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"];break;default:e=["January","February","March","April","May","June","July","August","September","October","November","December"]}return e[Number(t)-1]}}return t}return Lo(()=>t.visible,e=>{e?(clearTimeout(bv),t.contentVisible=e,M()):bv=setTimeout(()=>{t.contentVisible=e},300)}),Lo([()=>e.mode,()=>e.value,()=>e.range],S,{deep:!0}),Lo(()=>t.valueSync,A,{deep:!0}),Lo(()=>t.valueArray,o=>{if(e.mode===pv.TIME||e.mode===pv.DATE){const n=e.mode===pv.TIME?_:w,o=t.valueArray,r=d.value,i=f.value;if(e.mode===pv.DATE){const e=t.dateArray,n=e[2].length,r=Number(e[2][o[2]])||1,i=new Date(`${e[0][o[0]]}/${e[1][o[1]]}/${r}`).getDate();in(i)&&x(o,i)}o.forEach((o,r)=>{o!==t.oldValueArray[r]&&(t.oldValueArray[r]=o,e.mode===pv.MULTISELECTOR&&n("columnchange",{},{column:r,value:o}))})}),{selectorTypeComputed:c,system:u,_show:h,_cancel:E,_change:C,_l10nColumn:D,_l10nItem:$,_input:O,_resetFormData:m,_getFormData:g,_createTime:v,_createDate:b,_setValueSync:S,_fixInputPosition:L,_pickerViewChange:P}}(e,u,f,r,i,s,a);!function(e,t,n){const{key:o,disable:r}=cm();Mo(()=>{r.value=!e.visible}),Lo(o,e=>{"esc"===e?t():"enter"===e&&n()})}(u,x,S),function(e,t){const n=Xr(Uu,!1);if(n){const o={reset:e,submit:()=>{const e=["",null],{key:n,value:o}=t();return""!==n&&(e[0]=n,e[1]=o),e}};n.addField(o),yr(()=>{n.removeField(o)})}}(A,T),C(),E(),k();const M=function(e){const t=$n(0),n=$n(0),o=ns(()=>t.value>=500&&n.value>=500),r=ns(()=>{const t={content:{transform:"",left:"",top:"",bottom:""},triangle:{left:"",top:"",bottom:"","border-width":"","border-color":""}},r=t.content,i=t.triangle,s=e.popover;function a(e){return Number(e)||0}if(o.value&&s){c(i,{position:"absolute",width:"0",height:"0","margin-left":"-6px","border-style":"solid"});const e=a(s.left),t=a(s.width),o=a(s.top),l=a(s.height),u=e+t/2;r.transform="none !important";const d=Math.max(0,u-150);r.left=`${d}px`;let f=Math.max(12,u-d);f=Math.min(288,f),i.left=`${f}px`;const p=n.value/2;o+l-p>p-o?(r.top="auto",r.bottom=n.value-o+6+"px",i.bottom="-6px",i["border-width"]="6px 6px 0 6px",i["border-color"]="#fcfcfd transparent transparent transparent"):(r.top=`${o+l+6}px`,i.top="-6px",i["border-width"]="0 6px 6px 6px",i["border-color"]="transparent transparent #fcfcfd transparent")}return t});return gr(()=>{const e=()=>{const{windowWidth:e,windowHeight:o,windowTop:r}=Yg();t.value=e,n.value=o+(r||0)};window.addEventListener("resize",e),e(),br(()=>{window.removeEventListener("resize",e)})}),{isDesktop:o,popupStyle:r}}(u);return Mo(()=>{u.isDesktop=M.isDesktop.value,u.popupStyle=M.popupStyle.value}),yr(()=>{i.value&&i.value.remove()}),gr(()=>{l.value=!0}),()=>{let t;const{visible:c,contentVisible:f,valueArray:p,popupStyle:A,valueSync:T}=u,{rangeKey:C,mode:E,start:k,end:M}=e,O=Wu(e,"disabled");return Di("uni-picker",ji({ref:r},O,{onClick:qu(m)}),[l.value?Di("div",{ref:i,class:["uni-picker-container",`uni-${E}-${g.value}`],onWheel:jc,onTouchmove:jc},[Di(ds,{name:"uni-fade"},{default:()=>[Ro(Di("div",{class:"uni-mask uni-picker-mask",onClick:qu(x),onMousemove:_},null,40,["onClick","onMousemove"]),[[Ts,c]])]}),h.value?null:Di("div",{class:[{"uni-picker-toggle":c},"uni-picker-custom"],style:A.content},[Di("div",{class:"uni-picker-header",onClick:qc},[Di("div",{class:"uni-picker-action uni-picker-action-cancel",onClick:qu(x)},[o("uni.picker.cancel")],8,["onClick"]),Di("div",{class:"uni-picker-action uni-picker-action-confirm",onClick:S},[o("uni.picker.done")],8,["onClick"])],8,["onClick"]),f?Di(gh,{value:v(p),class:"uni-picker-content",onChange:w},cv(t=Ar(v(d.value),(e,t)=>{let n;return Di(xh,{key:t},cv(n=Ar(e,(e,n)=>Di("div",{key:n,class:"uni-picker-item"},["object"==typeof e?e[C]||"":y(e,t)])))?n:{default:()=>[n],_:1})}))?t:{default:()=>[t],_:1},8,["value","onChange"]):null,Di("div",{ref:s,class:"uni-picker-select",onWheel:qc,onTouchmove:qc},[Ar(d.value[0],(e,t)=>Di("div",{key:t,class:["uni-picker-item",{selected:p[0]===t}],onClick:()=>{p[0]=t,S()}},["object"==typeof e?e[C]||"":e],10,["onClick"]))],40,["onWheel","onTouchmove"]),Di("div",{style:A.triangle},null,4)],6)],40,["onWheel","onTouchmove"]):null,Di("div",null,[n.default&&n.default()]),h.value?Di("div",{class:"uni-picker-system",onMousemove:qu(_)},[Di("input",{class:["uni-picker-system_input",h.value],ref:a,value:T,type:E,tabindex:"-1",min:k,max:M,onChange:e=>{b(e),qc(e)}},null,42,["value","type","min","max","onChange"])],40,["onMousemove"]):null],16,["onClick"])}}});const vv=()=>0===String(navigator.vendor).indexOf("Apple")&&navigator.maxTouchPoints>0;const yv=()=>{if(/win|mac/i.test(navigator.platform)){if("Google Inc."===navigator.vendor)return"chrome";if(/Firefox/.test(navigator.userAgent))return"firefox"}return""};let bv;const _v=c(bc,{publishHandler(e,t,n){wv.subscribeHandler(e,t,n)}}),wv=c(Cu,{publishHandler(e,t,n){_v.subscribeHandler(e,t,n)}}),xv=ju({name:"PageBody",setup(e,t){const n=!1,o=$n(null),r=$n(null);return Lo(()=>n.enablePullDownRefresh,()=>{r.value=null},{immediate:!0}),()=>Di(gi,null,[!1,Di("uni-page-wrapper",ji({ref:o},r.value),[Di("uni-page-body",null,[Tr(t.slots,"default")]),null],16)])}}),Sv=ju({name:"Page",setup(e,t){let n=Zu(td());n.navigationBar;const o={};return Jm(n),()=>Di("uni-page",{"data-page":n.route,style:o},[Av(t),null])}});function Av(e){return wi(),Ci(xv,{key:0},{default:mo(()=>[Tr(e.slots,"page")]),_:3})}const Tv={loading:"AsyncLoading",error:"AsyncError",delay:200,timeout:6e4,suspensible:!0};window.uni={},window.wx={},window.rpx2px=Gd;const Cv=Object.assign({}),Ev=Object.assign;window.__uniConfig=Ev({globalStyle:{backgroundColor:"#F8F8F8",navigationBar:{backgroundColor:"#07c160",titleText:"宠伴生活馆",style:"custom",type:"default",titleColor:"#ffffff"},isNVue:!1},compilerVersion:"4.66"},{appId:"",appName:"宠伴生活馆",appVersion:"1.0.0",appVersionCode:"100",async:Tv,debug:!1,networkTimeout:{request:6e4,connectSocket:6e4,uploadFile:6e4,downloadFile:6e4},sdkConfigs:{},qqMapKey:void 0,bMapKey:void 0,googleMapKey:void 0,aMapKey:void 0,aMapSecurityJsCode:void 0,aMapServiceHost:void 0,nvue:{"flex-direction":"column"},locale:"",fallbackLocale:"",locales:Object.keys(Cv).reduce((e,t)=>{const n=t.replace(/\.\/locale\/(uni-app.)?(.*).json/,"$2");return Ev(e[n]||(e[n]={}),Cv[t].default),e},{}),router:{mode:"hash",base:"/",assets:"assets",routerBase:"/"},darkmode:!1,themeConfig:{}}),window.__uniLayout=window.__uniLayout||{};const kv={delay:Tv.delay,timeout:Tv.timeout,suspensible:Tv.suspensible};Tv.loading&&(kv.loadingComponent={name:"SystemAsyncLoading",render:()=>Di(xo(Tv.loading))}),Tv.error&&(kv.errorComponent={name:"SystemAsyncError",render:()=>Di(xo(Tv.error))});const Mv=()=>t(()=>import("./pages-login-Login.CIwfoiFM.js"),__vite__mapDeps([0,1,2,3])).then(e=>ug(e.default||e)),Ov=Jo(Ev({loader:Mv},kv)),Lv=()=>t(()=>import("./pages-home-Home.Ddvq7wQe.js"),__vite__mapDeps([4,1,5,6,2,7,8,9,10,11])).then(e=>ug(e.default||e)),Pv=Jo(Ev({loader:Lv},kv)),Dv=()=>t(()=>import("./pages-report-Report.4YqXiEo9.js"),__vite__mapDeps([12,1,5,6,2,7,8,13])).then(e=>ug(e.default||e)),$v=Jo(Ev({loader:Dv},kv)),Nv=()=>t(()=>import("./pages-mine-Mine.DIiFTf9A.js"),__vite__mapDeps([14,5,6,2,7,8,15])).then(e=>ug(e.default||e)),Rv=Jo(Ev({loader:Nv},kv)),Iv=()=>t(()=>import("./pages-mine-Staff.MjRBMiPA.js"),__vite__mapDeps([16,6,2,7,1,17])).then(e=>ug(e.default||e)),zv=Jo(Ev({loader:Iv},kv)),Bv=()=>t(()=>import("./pages-mine-ServiceType.DZbIoYg-.js"),__vite__mapDeps([18,6,2,7,1,19])).then(e=>ug(e.default||e)),jv=Jo(Ev({loader:Bv},kv)),qv=()=>t(()=>import("./pages-mine-Store.Chv7yw34.js"),__vite__mapDeps([20,6,2,7,1,21])).then(e=>ug(e.default||e)),Vv=Jo(Ev({loader:qv},kv)),Fv=()=>t(()=>import("./pages-mine-MyReports.DUWMQM2L.js"),__vite__mapDeps([22,6,2,7,1,23])).then(e=>ug(e.default||e)),Hv=Jo(Ev({loader:Fv},kv)),Wv=()=>t(()=>import("./pages-mine-MyOrders.BrCwBUxo.js"),__vite__mapDeps([24,6,2,7,1,9,10,25])).then(e=>ug(e.default||e)),Uv=Jo(Ev({loader:Wv},kv)),Yv=()=>t(()=>import("./pages-mine-Profile.DCcNMmIP.js"),__vite__mapDeps([26,6,2,7,1,27])).then(e=>ug(e.default||e)),Gv=Jo(Ev({loader:Yv},kv)),Xv=()=>t(()=>import("./pages-report-view-reportView.DYnt0bpU.js"),__vite__mapDeps([28,1,9,6,2,7,29])).then(e=>ug(e.default||e)),Kv=Jo(Ev({loader:Xv},kv));function Jv(e,t){return wi(),Ci(Sv,null,{page:mo(()=>[Di(e,Ev({},t,{ref:"page"}),null,512)]),_:1})}window.__uniRoutes=[{path:"/",alias:"/pages/login/Login",component:{setup(){const e=sg(),t=e&&e.$route&&e.$route.query||{};return()=>Jv(Ov,t)}},loader:Mv,meta:{isQuit:!0,isEntry:!0,navigationBar:{},isNVue:!1}},{path:"/pages/home/Home",component:{setup(){const e=sg(),t=e&&e.$route&&e.$route.query||{};return()=>Jv(Pv,t)}},loader:Lv,meta:{navigationBar:{},isNVue:!1}},{path:"/pages/report/Report",component:{setup(){const e=sg(),t=e&&e.$route&&e.$route.query||{};return()=>Jv($v,t)}},loader:Dv,meta:{navigationBar:{},isNVue:!1}},{path:"/pages/mine/Mine",component:{setup(){const e=sg(),t=e&&e.$route&&e.$route.query||{};return()=>Jv(Rv,t)}},loader:Nv,meta:{navigationBar:{},isNVue:!1}},{path:"/pages/mine/Staff",component:{setup(){const e=sg(),t=e&&e.$route&&e.$route.query||{};return()=>Jv(zv,t)}},loader:Iv,meta:{navigationBar:{},isNVue:!1}},{path:"/pages/mine/ServiceType",component:{setup(){const e=sg(),t=e&&e.$route&&e.$route.query||{};return()=>Jv(jv,t)}},loader:Bv,meta:{navigationBar:{},isNVue:!1}},{path:"/pages/mine/Store",component:{setup(){const e=sg(),t=e&&e.$route&&e.$route.query||{};return()=>Jv(Vv,t)}},loader:qv,meta:{navigationBar:{},isNVue:!1}},{path:"/pages/mine/MyReports",component:{setup(){const e=sg(),t=e&&e.$route&&e.$route.query||{};return()=>Jv(Hv,t)}},loader:Fv,meta:{navigationBar:{},isNVue:!1}},{path:"/pages/mine/MyOrders",component:{setup(){const e=sg(),t=e&&e.$route&&e.$route.query||{};return()=>Jv(Uv,t)}},loader:Wv,meta:{navigationBar:{},isNVue:!1}},{path:"/pages/mine/Profile",component:{setup(){const e=sg(),t=e&&e.$route&&e.$route.query||{};return()=>Jv(Gv,t)}},loader:Yv,meta:{navigationBar:{},isNVue:!1}},{path:"/pages/report-view/reportView",component:{setup(){const e=sg(),t=e&&e.$route&&e.$route.query||{};return()=>Jv(Kv,t)}},loader:Xv,meta:{navigationBar:{},isNVue:!1}}].map(e=>(e.meta.route=(e.alias||e.path).slice(1),e));const Qv=(e,t={})=>{if(!e)return t;try{return JSON.parse(e)}catch(n){return t}},Zv=()=>Qv(nm("petstore_user"),{}),ey=()=>Qv(nm("petstore_store"),{}),ty=e=>{em("petstore_user",JSON.stringify(e||{}))},ny=e=>{em("petstore_store",JSON.stringify(e||{}))},oy=()=>{om("petstore_user"),om("petstore_store")};function ry(){setTimeout(()=>{try{if((()=>{const e=Zv();return!(!e||!e.id)})())return;const e=Ff(),t=e[e.length-1];if((e=>!(!e||!e.includes("pages/login/Login")&&!e.includes("pages/report-view/reportView")))(t&&t.route?t.route:""))return;Cf({url:"/pages/login/Login"})}catch(e){Cf({url:"/pages/login/Login"})}},50)}const iy={onLaunch(){ry()},onShow(){ry()}};cg(iy,{init:ag,setup(e){const t=ed(),n=()=>{var n;n=e,Object.keys(Kd).forEach(e=>{Kd[e].forEach(t=>{fr(e,t,n)})});const{onLaunch:o,onShow:r,onPageNotFound:i}=e,s=function({path:e,query:t}){return c(_p,{path:e,query:t}),c(wp,_p),c({},_p)}({path:t.path.slice(1)||__uniRoutes[0].meta.route,query:Xe(t.query)});if(o&&$(o,s),r&&$(r,s),!t.matched.length){const e={notFound:!0,openType:"appLaunch",path:t.path,query:{},scene:1001};kf(),i&&$(i,e)}};return Xr(tl).isReady().then(n),gr(()=>{window.addEventListener("resize",Qe(dg,50,{setTimeout:setTimeout,clearTimeout:clearTimeout})),window.addEventListener("message",fg),document.addEventListener("visibilitychange",pg),function(){let e=null;try{e=window.matchMedia("(prefers-color-scheme: dark)")}catch(t){}if(e){let t=e=>{wv.emit(se,{theme:e.matches?"dark":"light"})};e.addEventListener?e.addEventListener("change",t):e.addListener(t)}}()}),t.query},before(e){e.mpType="app";const{setup:t}=e,n=()=>(wi(),Ci(Zm));e.setup=(e,o)=>{const r=t&&t(e,o);return m(r)?n:r},e.render=n}}),ta(iy).use(Qh).mount("#app");export{kh as A,qe as B,Qs as C,mv as D,Ph as E,gi as F,Nm as G,em as H,ah as I,nm as J,om as K,sm as L,Gm as M,wm as N,Xm as O,oy as P,Tm as Q,fr as R,Wi as S,ce as T,Ji as U,jp as V,Dp as W,vm as X,Cf as Y,Cm as Z,yn as a,Pi as b,Ti as c,Di as d,Ri as e,Dh as f,wi as g,Ni as h,Ku as i,Um as j,ty as k,ny as l,Zv as m,ey as n,br as o,Yg as p,ns as q,$n as r,Zg as s,Y as t,gr as u,je as v,mo as w,zn as x,Ar as y,Ci as z};
diff --git a/dist/build/h5/assets/index.DsJtDI4O.js b/dist/build/h5/assets/index.DsJtDI4O.js
new file mode 100644
index 0000000..306f2ff
--- /dev/null
+++ b/dist/build/h5/assets/index.DsJtDI4O.js
@@ -0,0 +1 @@
+import{X as e}from"./index-DrZc8biM.js";const t="http://localhost:8080".replace(/\/$/,""),s=`${t}/api`,a=t=>new Promise((a,r)=>{e({url:s+t.url,method:t.method||"GET",data:t.data||{},header:t.header||{},success:e=>a(e.data),fail:e=>r(e)})}),r=(e,t={})=>{const s=Object.entries(t).filter(([,e])=>null!=e).map(([e,t])=>`${encodeURIComponent(e)}=${encodeURIComponent(t)}`).join("&");return a({url:`${e}${s?"?"+s:""}`,method:"GET"})},o=(e,t={})=>a({url:e,method:"POST",data:t,header:{"Content-Type":"application/json"}}),n=(e,t={})=>a({url:e,method:"PUT",data:t,header:{"Content-Type":"application/json"}}),p=e=>a({url:e,method:"DELETE"}),d=e=>e?e.startsWith("http")?e:`${t}${e}`:"",i=e=>o("/sms/send",{phone:e}),l=(e,t)=>o("/user/login",{phone:e,code:t}),c=e=>o("/user/register-boss",e),u=e=>o("/user/register-staff",e),m=(e,t)=>r("/appointment/list",{userId:e,storeId:t}),h=e=>o("/appointment/create",e),f=(e,t)=>o("/appointment/start",{appointmentId:e,staffUserId:t}),$=e=>n(`/appointment/status?id=${e}&status=cancel`),I=e=>o("/report/create",e),T=e=>r("/report/get",{token:e}),j=e=>r("/report/list",e),g=e=>r("/service-type/list",{storeId:e}),y=(e,t)=>o("/service-type/create",{storeId:e,name:t}),E=e=>p(`/service-type/delete?id=${e}`),C=e=>r("/user/staff-list",{storeId:e}),U=e=>o("/user/create-staff",e),b=e=>p(`/user/staff?staffId=${e}`),v=e=>n("/user/update",e),P=e=>n("/store/update",e);export{t as A,s as B,u as a,g as b,f as c,$ as d,h as e,I as f,m as g,C as h,d as i,b as j,U as k,l,E as m,y as n,j as o,v as p,T as q,c as r,i as s,P as u};
diff --git a/dist/build/h5/assets/pages-home-Home.Ddvq7wQe.js b/dist/build/h5/assets/pages-home-Home.Ddvq7wQe.js
new file mode 100644
index 0000000..6bc3713
--- /dev/null
+++ b/dist/build/h5/assets/pages-home-Home.Ddvq7wQe.js
@@ -0,0 +1 @@
+import{m as e,n as a,p as l,r as t,q as s,u as n,c as i,b as o,d as c,w as u,v as d,x as p,F as r,y as v,e as m,z as f,j as g,f as _,g as y,A as T,h as k,i as h,B as b,t as C,C as w,I as N,D as $,E as x,G as j,H as I}from"./index-DrZc8biM.js";import{g as V,b as B,c as z,d as A,e as H}from"./index.DsJtDI4O.js";import{T as M,u as U}from"./useNavigator.BKsocaY0.js";import{A as q}from"./AppIcon.M7CZvvJr.js";import{f as D}from"./datetime.CB5sbvg8.js";import{g as E,a as F}from"./appointment.SHi7qFlK.js";import{_ as G}from"./_plugin-vue_export-helper.2L545UbL.js";const J=G({__name:"Home",emits:["change-page"],setup(G,{emit:J}){const O=e(),P=a();O.id;const{goPage:R,navigateTo:S}=U(),K=(()=>{var e,a;const t=(null==(e=l)?void 0:e().statusBarHeight)||20;let s=t+44;const n=null==(a=uni.getMenuButtonBoundingClientRect)?void 0:a.call(uni);if(n&&n.top&&n.height){s=t+2*Math.max(n.top-t,4)+n.height}return`padding-top:${t}px;height:${s}px;`})(),L=t("new"),Q=[{title:"待确认",name:"new"},{title:"进行中",name:"doing"},{title:"已完成",name:"done"}],W=t([]),X=t([]),Y=t(!1),Z=t(!1),ee=[{label:"猫",value:"猫"},{label:"狗",value:"狗"},{label:"其他",value:"其他"}],ae=t({petName:"",petType:"",serviceType:"",appointmentTime:"",remark:""}),le=s(()=>{const e=ae.value.appointmentTime||"";return e.includes("T")?e.split("T")[0]:""}),te=s(()=>{const e=ae.value.appointmentTime||"";return e.includes("T")?(e.split("T")[1]||"").slice(0,5):""}),se=s(()=>W.value.filter(e=>"new"===L.value?"new"===e.status:"doing"===L.value?"doing"===e.status:"done"!==L.value||("done"===e.status||"cancel"===e.status))),ne=e=>{var a;const l=(null==(a=null==e?void 0:e.detail)?void 0:a.value)||"",t=te.value||"00:00";ae.value.appointmentTime=l?`${l}T${t}`:""},ie=e=>{var a;const l=(null==(a=null==e?void 0:e.detail)?void 0:a.value)||"",t=le.value;t?ae.value.appointmentTime=`${t}T${l}`:g({title:"请先选择日期",icon:"none"})},oe=async()=>{if(!P.id)return;const e=await V(null,P.id);if(200===e.code){W.value=e.data.map(e=>({id:e.id,title:e.serviceType||"洗澡美容预约",desc:`${e.petType||""} - ${e.petName||""}`,time:D(e.appointmentTime),status:e.status||"new",statusText:E(e.status),petName:e.petName,petType:e.petType,serviceType:e.serviceType,appointmentTime:e.appointmentTime}));const a=W.value.filter(e=>"new"===e.status).length;a>0&&g({title:`有 ${a} 个待确认预约`,icon:"none"})}},ce=async()=>{const e=ae.value;if(!e.petName)return void g({title:"请输入宠物名字",icon:"none"});if(!e.petType)return void g({title:"请选择宠物类型",icon:"none"});if(!e.serviceType)return void g({title:"请选择服务类型",icon:"none"});if(!e.appointmentTime)return void g({title:"请选择预约时间",icon:"none"});Z.value=!0;const a=await H({...e,storeId:P.id,userId:O.id});Z.value=!1,200===a.code?(g({title:"预约创建成功",icon:"success"}),ae.value={petName:"",petType:"",serviceType:"",appointmentTime:"",remark:""},Y.value=!1,oe()):g({title:a.message||"创建失败",icon:"none"})};return n(()=>{oe(),(async()=>{if(!P.id)return;const e=await B(P.id);200===e.code&&(X.value=e.data.map(e=>({label:e.name,value:e.name})))})()}),(e,a)=>{const l=T,t=h,s=_,n=N,V=$,B=x;return y(),i(r,null,[o("div",{class:"page-shell home-page"},[c(s,{class:"home-nav nav-gradient",style:d(p(K))},{default:u(()=>[c(l,{class:"nav-title"},{default:u(()=>[k("宠伴生活馆")]),_:1}),c(t,{class:"btn-primary",onClick:a[0]||(a[0]=e=>Y.value=!0)},{default:u(()=>[k("新建预约")]),_:1})]),_:1},8,["style"]),c(s,{class:"page-section home-hero"},{default:u(()=>[c(s,{class:"hero-title"},{default:u(()=>[k("今日服务看板")]),_:1}),c(s,{class:"hero-sub"},{default:u(()=>[k("待确认、进行中、已完成实时同步,支持一键开始服务与快速填报。")]),_:1})]),_:1}),c(s,{class:"page-section custom-tabs"},{default:u(()=>[(y(),i(r,null,v(Q,e=>c(s,{key:e.name,class:b(["tab-item",{active:L.value===e.name}]),onClick:a=>L.value=e.name},{default:u(()=>[k(C(e.title),1)]),_:2},1032,["class","onClick"])),64))]),_:1}),o("div",{class:"page-section list-content"},[se.value.length>0?(y(),i("div",{key:0,class:"timeline"},[(y(!0),i(r,null,v(se.value,e=>{return y(),i("div",{key:e.id,class:"timeline-item"},[o("div",{class:b(["timeline-dot",`dot-${e.status}`])},[o("span",{class:"dot-inner"})],2),o("div",{class:"timeline-line"}),o("div",{class:b(["order-card",`card-${e.status}`])},[o("div",{class:"card-header"},[o("div",{class:"pet-info"},[o("span",{class:"pet-emoji"},[c(q,{name:"profile",size:14})]),o("span",{class:"pet-name"},C(e.petName),1)]),c(s,{class:b((a=e.status,F(a)))},{default:u(()=>[k(C(e.statusText),1)]),_:2},1032,["class"])]),o("div",{class:"service-row"},[o("span",{class:b(["service-tag",`tag-${e.status}`])},C(e.serviceType),3)]),o("div",{class:"card-body"},[o("div",{class:"card-time"},[c(q,{name:"orders",size:13}),k(C(e.time),1)])]),o("div",{class:"card-footer"},["new"===e.status?(y(),i("div",{key:0,class:"action-btns"},[c(t,{class:"btn-primary",onClick:a=>(async e=>{const a=await z(e.id,O.id);200===a.code?(g({title:"已开始服务",icon:"success"}),oe()):g({title:a.message||"操作失败",icon:"none"})})(e)},{default:u(()=>[k("开始服务")]),_:2},1032,["onClick"]),c(t,{class:"btn-secondary",onClick:a=>(async e=>{j({title:"提示",content:"确定取消该预约?",success:async a=>{if(!a.confirm)return;const l=await A(e.id);200===l.code?(g({title:"已取消",icon:"success"}),oe()):g({title:l.message||"操作失败",icon:"none"})}})})(e)},{default:u(()=>[k("取消")]),_:2},1032,["onClick"])])):"doing"===e.status?(y(),f(t,{key:1,class:"btn-secondary",onClick:a=>(e=>{S("report"),I("petstore_report_prefill",JSON.stringify({appointmentId:e.id,petName:e.petName,serviceType:e.serviceType,appointmentTime:e.appointmentTime}))})(e)},{default:u(()=>[k("填写报告")]),_:2},1032,["onClick"])):(y(),i("span",{key:2,class:"done-label"},C("cancel"===e.status?"已取消":"已完成"),1))])],2)]);var a}),128))])):m("",!0),0===se.value.length?(y(),f(s,{key:1,class:"empty"},{default:u(()=>[c(l,null,{default:u(()=>[k("暂无数据")]),_:1})]),_:1})):m("",!0)]),Y.value?(y(),f(s,{key:0,class:"popup-mask",onClick:a[8]||(a[8]=e=>Y.value=!1)},{default:u(()=>[c(s,{class:"popup-content",onClick:a[7]||(a[7]=w(()=>{},["stop"]))},{default:u(()=>[c(s,{class:"popup-header"},{default:u(()=>[c(l,{class:"popup-title"},{default:u(()=>[k("新建预约")]),_:1}),c(l,{class:"popup-close",onClick:a[1]||(a[1]=e=>Y.value=!1)},{default:u(()=>[k("✕")]),_:1})]),_:1}),c(s,{class:"popup-body"},{default:u(()=>[c(s,{class:"popup-desc"},{default:u(()=>[k("填写基础信息后即可创建预约,后续可在列表中继续处理。")]),_:1}),c(s,{class:"field-label"},{default:u(()=>[k("宠物名字")]),_:1}),c(n,{modelValue:ae.value.petName,"onUpdate:modelValue":a[2]||(a[2]=e=>ae.value.petName=e),class:"van-field",placeholder:"请输入"},null,8,["modelValue"]),c(s,{class:"field-label"},{default:u(()=>[k("宠物类型")]),_:1}),c(V,{mode:"selector",range:ee,"range-key":"label",onChange:a[3]||(a[3]=e=>ae.value.petType=ee[e.detail.value].value)},{default:u(()=>[c(s,{class:"van-field picker-field"},{default:u(()=>[k(C(ae.value.petType||"请选择"),1)]),_:1})]),_:1}),c(s,{class:"field-label"},{default:u(()=>[k("服务类型")]),_:1}),c(V,{mode:"selector",range:X.value,"range-key":"label",onChange:a[4]||(a[4]=e=>ae.value.serviceType=X.value[e.detail.value].value)},{default:u(()=>[c(s,{class:"van-field picker-field"},{default:u(()=>[k(C(ae.value.serviceType||"请选择"),1)]),_:1})]),_:1},8,["range"]),c(s,{class:"field-label"},{default:u(()=>[k("预约日期")]),_:1}),c(V,{mode:"date",value:le.value,onChange:ne},{default:u(()=>[c(s,{class:"van-field picker-field"},{default:u(()=>[k(C(le.value||"请选择日期"),1)]),_:1})]),_:1},8,["value"]),c(s,{class:"field-label"},{default:u(()=>[k("预约时间")]),_:1}),c(V,{mode:"time",value:te.value,onChange:ie},{default:u(()=>[c(s,{class:"van-field picker-field"},{default:u(()=>[k(C(te.value||"请选择时间"),1)]),_:1})]),_:1},8,["value"]),c(s,{class:"field-label"},{default:u(()=>[k("备注(可选)")]),_:1}),c(B,{modelValue:ae.value.remark,"onUpdate:modelValue":a[5]||(a[5]=e=>ae.value.remark=e),class:"van-field remark-textarea",placeholder:"可选"},null,8,["modelValue"])]),_:1}),c(s,{class:"popup-footer"},{default:u(()=>[c(s,{class:"popup-actions"},{default:u(()=>[c(t,{class:"btn-ghost",onClick:a[6]||(a[6]=e=>Y.value=!1)},{default:u(()=>[k("取消")]),_:1}),c(t,{class:"btn-block",loading:Z.value,onClick:ce},{default:u(()=>[k("确认创建")]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1})]),_:1})):m("",!0)]),c(M,{"current-page":"home",onChange:p(R)},null,8,["onChange"])],64)}}},[["__scopeId","data-v-dbe01c7d"]]);export{J as default};
diff --git a/dist/build/h5/assets/pages-login-Login.CIwfoiFM.js b/dist/build/h5/assets/pages-login-Login.CIwfoiFM.js
new file mode 100644
index 0000000..7af47c5
--- /dev/null
+++ b/dist/build/h5/assets/pages-login-Login.CIwfoiFM.js
@@ -0,0 +1 @@
+import{r as a,a as e,o as l,c as s,b as o,t as n,d as t,w as d,e as i,i as c,I as u,f as v,g as r,h as p,s as m,j as f,k as h,l as g}from"./index-DrZc8biM.js";import{s as b,l as k,r as V,a as w}from"./index.DsJtDI4O.js";import{_ as y,n as C}from"./_plugin-vue_export-helper.2L545UbL.js";const _=y({__name:"Login",setup(y){const _=a("login"),x=e({phone:"13800138001",code:"123456"}),U=e({storeName:"",bossName:"",phone:"",password:""}),N=e({inviteCode:"",name:"",phone:"",password:""}),I=a(!1),j=a(!1),L=a(0),T=a(!1),q=a(!1),z=a({store:{},user:{}});let A=null;const B=a=>f({title:a,icon:"none"}),D=async()=>{if(!x.phone||11!==x.phone.length)return B("请输入正确的手机号");const a=await b(x.phone);200===a.code?(B("验证码已发送"),L.value=60,A=setInterval(()=>{L.value--,L.value<=0&&clearInterval(A)},1e3)):B(a.message||"发送失败")},E=async()=>{if(!x.phone||11!==x.phone.length)return B("请输入正确的手机号");if(!x.code||6!==x.code.length)return B("请输入6位验证码");I.value=!0;try{const a=await k(x.phone,x.code);200===a.code?(h(a.data.user),g(a.data.store),C("home")):B(a.message||"登录失败")}catch(a){B("网络异常,请检查服务是否启动")}finally{I.value=!1}},F=()=>{B("跳转到微信授权..."),setTimeout(()=>{h({id:99,name:"微信用户",phone:"",role:"staff"}),g({id:2,name:"宠伴生活馆测试店"}),C("home")},1500)},G=async()=>{const a=U;if(!a.storeName)return B("请输入店铺名称");if(!a.bossName)return B("请输入您的姓名");if(!a.phone||11!==a.phone.length)return B("请输入正确的手机号");if(!a.password||a.password.length<6)return B("密码至少6位");j.value=!0;const e=await V(a);j.value=!1,200===e.code?(z.value=e.data,T.value=!0):B(e.message||"注册失败")},H=async()=>{const a=N;if(!a.inviteCode||8!==a.inviteCode.length)return B("请输入8位邀请码");if(!a.name)return B("请输入您的姓名");if(!a.phone||11!==a.phone.length)return B("请输入正确的手机号");if(!a.password||a.password.length<6)return B("密码至少6位");j.value=!0;const e=await w(a);j.value=!1,200===e.code?(z.value=e.data,q.value=!0):B(e.message||"注册失败")},J=()=>{m({data:z.value.store.inviteCode,success:()=>f({title:"邀请码已复制",icon:"none"})})},K=()=>{_.value="login",T.value=!1,q.value=!1};return l(()=>{A&&clearInterval(A)}),(a,e)=>{var l,m,f;const h=c,g=u,b=v;return r(),s("div",{class:"login-page"},[o("div",{class:"login-logo"},[o("div",{class:"login-logo-text"},"宠伴生活馆"),o("div",{class:"login-logo-sub"},"宠物服务,让爱更专业")]),T.value?(r(),s("div",{key:0,class:"form-card"},[o("div",{class:"success-icon"},"🎉"),o("div",{class:"success-title"},"入驻成功"),o("div",{class:"success-sub"},"欢迎加入宠伴生活馆"),o("div",{class:"success-info"},[o("div",{class:"info-row"},[o("span",{class:"label"},"店铺名称"),o("span",{class:"value"},n(z.value.store.name),1)]),o("div",{class:"info-row"},[o("span",{class:"label"},"您的账号"),o("span",{class:"value"},n(z.value.user.phone),1)]),o("div",{class:"info-row"},[o("span",{class:"label"},"初始密码"),o("span",{class:"value"},n(z.value.user.password),1)]),o("div",{class:"info-row"},[o("span",{class:"label"},"员工邀请码"),o("span",{class:"value"},n(z.value.store.inviteCode),1)])]),t(h,{class:"van-button van-button--primary van-button--block",onClick:J},{default:d(()=>[p("复制员工邀请码")]),_:1}),t(h,{class:"van-button van-button--block top-gap-sm",onClick:K},{default:d(()=>[p("前往登录 →")]),_:1})])):q.value?(r(),s("div",{key:1,class:"form-card"},[o("div",{class:"success-icon"},"✅"),o("div",{class:"success-title"},"注册成功"),o("div",{class:"success-sub"},"您已成功加入 "+n(null==(l=z.value.store)?void 0:l.name)+" 团队",1),o("div",{class:"success-info"},[o("div",{class:"info-row"},[o("span",{class:"label"},"所属店铺"),o("span",{class:"value"},n(null==(m=z.value.store)?void 0:m.name),1)]),o("div",{class:"info-row"},[o("span",{class:"label"},"您的账号"),o("span",{class:"value"},n(null==(f=z.value.user)?void 0:f.phone),1)])]),t(h,{class:"van-button van-button--primary van-button--block",onClick:K},{default:d(()=>[p("前往登录 →")]),_:1})])):"login"===_.value?(r(),s("div",{key:2,class:"form-card"},[o("div",{class:"form-title"},"手机验证码登录"),t(g,{modelValue:x.phone,"onUpdate:modelValue":e[0]||(e[0]=a=>x.phone=a),type:"tel",class:"van-field",placeholder:"请输入手机号",maxlength:"11"},null,8,["modelValue"]),t(b,{class:"sms-field"},{default:d(()=>[t(g,{modelValue:x.code,"onUpdate:modelValue":e[1]||(e[1]=a=>x.code=a),type:"digit",class:"van-field sms-input",placeholder:"短信验证码",maxlength:"6"},null,8,["modelValue"]),t(h,{class:"van-button van-button--small",disabled:L.value>0,onClick:D},{default:d(()=>[p(n(L.value>0?L.value+"s":"获取验证码"),1)]),_:1},8,["disabled"])]),_:1}),t(h,{class:"van-button van-button--primary van-button--block",loading:I.value,onClick:E},{default:d(()=>[p("登录")]),_:1},8,["loading"]),o("div",{class:"login-divider"},"其他登录方式"),t(h,{class:"van-button van-button--block",onClick:F},{default:d(()=>[o("span",{class:"wechat-icon"},"📱"),p(" 微信授权登录")]),_:1}),o("div",{class:"links"},[o("span",{class:"link",onClick:e[2]||(e[2]=a=>_.value="staff-reg")},"员工注册"),o("span",{class:"link",onClick:e[3]||(e[3]=a=>_.value="boss-reg")},"商家入驻")])])):"boss-reg"===_.value?(r(),s("div",{key:3,class:"form-card"},[o("div",{class:"form-title"},"商家入驻"),t(g,{modelValue:U.storeName,"onUpdate:modelValue":e[4]||(e[4]=a=>U.storeName=a),class:"van-field",placeholder:"店铺名称"},null,8,["modelValue"]),t(g,{modelValue:U.bossName,"onUpdate:modelValue":e[5]||(e[5]=a=>U.bossName=a),class:"van-field",placeholder:"您的姓名"},null,8,["modelValue"]),t(g,{modelValue:U.phone,"onUpdate:modelValue":e[6]||(e[6]=a=>U.phone=a),type:"tel",class:"van-field",placeholder:"手机号",maxlength:"11"},null,8,["modelValue"]),t(g,{modelValue:U.password,"onUpdate:modelValue":e[7]||(e[7]=a=>U.password=a),type:"password",class:"van-field",placeholder:"登录密码(至少6位)"},null,8,["modelValue"]),t(h,{class:"van-button van-button--primary van-button--block",loading:j.value,onClick:G},{default:d(()=>[p("提交申请")]),_:1},8,["loading"]),o("div",{class:"links top-gap-md"},[o("span",{class:"link",onClick:e[8]||(e[8]=a=>_.value="login")},"返回登录")])])):"staff-reg"===_.value?(r(),s("div",{key:4,class:"form-card"},[o("div",{class:"form-title"},"员工注册"),o("div",{class:"invite-hint"},"请输入店长提供的邀请码加入团队"),t(g,{modelValue:N.inviteCode,"onUpdate:modelValue":e[9]||(e[9]=a=>N.inviteCode=a),class:"van-field",placeholder:"请输入8位邀请码",maxlength:"8"},null,8,["modelValue"]),t(g,{modelValue:N.name,"onUpdate:modelValue":e[10]||(e[10]=a=>N.name=a),class:"van-field",placeholder:"您的姓名"},null,8,["modelValue"]),t(g,{modelValue:N.phone,"onUpdate:modelValue":e[11]||(e[11]=a=>N.phone=a),type:"tel",class:"van-field",placeholder:"手机号",maxlength:"11"},null,8,["modelValue"]),t(g,{modelValue:N.password,"onUpdate:modelValue":e[12]||(e[12]=a=>N.password=a),type:"password",class:"van-field",placeholder:"登录密码(至少6位)"},null,8,["modelValue"]),t(h,{class:"van-button van-button--primary van-button--block",loading:j.value,onClick:H},{default:d(()=>[p("注册")]),_:1},8,["loading"]),o("div",{class:"links top-gap-md"},[o("span",{class:"link",onClick:e[13]||(e[13]=a=>_.value="login")},"返回登录")])])):i("",!0)])}}},[["__scopeId","data-v-1ba576fe"]]);export{_ as default};
diff --git a/dist/build/h5/assets/pages-mine-Mine.DIiFTf9A.js b/dist/build/h5/assets/pages-mine-Mine.DIiFTf9A.js
new file mode 100644
index 0000000..87ff8a7
--- /dev/null
+++ b/dist/build/h5/assets/pages-mine-Mine.DIiFTf9A.js
@@ -0,0 +1 @@
+import{m as s,p as e,q as a,c as n,b as l,x as i,v as t,t as c,d as o,e as r,w as m,F as u,i as p,g as d,h as v,G as f,P as g}from"./index-DrZc8biM.js";import{T as h,u as C}from"./useNavigator.BKsocaY0.js";import{A as k}from"./AppIcon.M7CZvvJr.js";import{_ as x}from"./_plugin-vue_export-helper.2L545UbL.js";const y=x({__name:"Mine",emits:["change-page"],setup(x,{emit:y}){const _=s(),{goPage:w,navigateTo:z}=C(),b=(()=>{var s,a;let n=((null==(s=e)?void 0:s().statusBarHeight)||20)+12;const l=null==(a=uni.getMenuButtonBoundingClientRect)?void 0:a.call(uni);return l&&l.top&&l.height&&(n=l.top+l.height+8),`padding-top:${n}px;`})(),j=a(()=>_.name?_.name.slice(0,1).toUpperCase():"?"),A=a(()=>{var s;if(_.avatar)return{};const e=["#ff7c43","#07c160","#8b6914","#e06040","#5090d0"];return{background:e[((null==(s=_.name)?void 0:s.charCodeAt(0))||0)%e.length]}}),B=()=>{f({title:"提示",content:"确定退出登录?",success:s=>{s.confirm&&(g(),z("login"))}})};return(s,e)=>{const a=p;return d(),n(u,null,[l("div",{class:"mine-page"},[l("div",{class:"user-card",style:t(i(b)),onClick:e[0]||(e[0]=s=>i(z)("profile"))},[l("div",{class:"user-info"},[l("div",{class:"user-avatar",style:t(A.value)},[i(_).avatar?(d(),n("img",{key:0,src:i(_).avatar,class:"avatar-img"},null,8,["src"])):(d(),n("span",{key:1,class:"avatar-initials"},c(j.value),1))],4),l("div",{class:"user-info-content"},[l("div",{class:"user-name"},c(i(_).name),1),l("div",{class:"user-phone"},c(i(_).phone),1),l("div",{class:"role-pill"},c("boss"===i(_).role?"店长":"员工"),1)])])],4),"boss"===i(_).role?(d(),n("div",{key:0,class:"menu-section"},[l("div",{class:"menu-card"},[l("div",{class:"menu-title"},"店铺管理"),l("div",{class:"menu-item",onClick:e[1]||(e[1]=s=>i(z)("staff"))},[l("div",{class:"menu-left"},[l("span",{class:"menu-icon"},[o(k,{name:"staff",size:15})]),l("span",{class:"menu-text"},"员工管理")]),l("span",{class:"menu-arrow"},"›")]),l("div",{class:"menu-item",onClick:e[2]||(e[2]=s=>i(z)("serviceType"))},[l("div",{class:"menu-left"},[l("span",{class:"menu-icon"},[o(k,{name:"service",size:15})]),l("span",{class:"menu-text"},"服务类型")]),l("span",{class:"menu-arrow"},"›")]),l("div",{class:"menu-item",onClick:e[3]||(e[3]=s=>i(z)("store"))},[l("div",{class:"menu-left"},[l("span",{class:"menu-icon"},[o(k,{name:"store",size:15})]),l("span",{class:"menu-text"},"店铺设置")]),l("span",{class:"menu-arrow"},"›")])])])):r("",!0),l("div",{class:"menu-section"},[l("div",{class:"menu-card"},[l("div",{class:"menu-title"},"个人中心"),l("div",{class:"menu-item",onClick:e[4]||(e[4]=s=>i(z)("profile"))},[l("div",{class:"menu-left"},[l("span",{class:"menu-icon"},[o(k,{name:"profile",size:15})]),l("span",{class:"menu-text"},"个人信息")]),l("span",{class:"menu-arrow"},"›")]),l("div",{class:"menu-item",onClick:e[5]||(e[5]=s=>i(z)("myReports"))},[l("div",{class:"menu-left"},[l("span",{class:"menu-icon"},[o(k,{name:"report",size:15})]),l("span",{class:"menu-text"},"我的报告")]),l("span",{class:"menu-arrow"},"›")]),l("div",{class:"menu-item",onClick:e[6]||(e[6]=s=>i(z)("myOrders"))},[l("div",{class:"menu-left"},[l("span",{class:"menu-icon"},[o(k,{name:"orders",size:15})]),l("span",{class:"menu-text"},"我的订单")]),l("span",{class:"menu-arrow"},"›")])])]),l("div",{class:"menu-section"},[o(a,{class:"logout-btn",onClick:B},{default:m(()=>[o(k,{name:"logout",size:15,color:"#dc2626"}),v("退出登录")]),_:1})])]),o(h,{"current-page":"mine",onChange:i(w)},null,8,["onChange"])],64)}}},[["__scopeId","data-v-27768e55"]]);export{y as default};
diff --git a/dist/build/h5/assets/pages-mine-MyOrders.BrCwBUxo.js b/dist/build/h5/assets/pages-mine-MyOrders.BrCwBUxo.js
new file mode 100644
index 0000000..964e81e
--- /dev/null
+++ b/dist/build/h5/assets/pages-mine-MyOrders.BrCwBUxo.js
@@ -0,0 +1 @@
+import{m as e,p as a,r as t,q as s,u as n,c as l,d as i,w as o,v as c,x as r,z as d,e as u,f as p,g as m,A as v,h as f,F as g,y as _,B as y,t as b,b as h,i as k,j as T,G as w,H as x}from"./index-DrZc8biM.js";import{A as C}from"./AppIcon.M7CZvvJr.js";import{_ as j,n as N}from"./_plugin-vue_export-helper.2L545UbL.js";import{g as $,c as z,d as B}from"./index.DsJtDI4O.js";import{f as A}from"./datetime.CB5sbvg8.js";import{g as I,b as M}from"./appointment.SHi7qFlK.js";const H=j({__name:"MyOrders",emits:["change-page"],setup(j,{emit:H}){const O=e(),q=O.id,F=(()=>{var e,t;const s=(null==(e=a)?void 0:e().statusBarHeight)||20;let n=s+44;const l=null==(t=uni.getMenuButtonBoundingClientRect)?void 0:t.call(uni);if(l&&l.top&&l.height){n=s+2*Math.max(l.top-s,4)+l.height}return`padding-top:${s}px;height:${n}px;`})(),G=t("new"),J=t([]),R=[{title:"待确认",name:"new"},{title:"进行中",name:"doing"},{title:"已完成",name:"done"}],S=s(()=>J.value.filter(e=>"new"===G.value?"new"===e.status:"doing"===G.value?"doing"===e.status:"done"!==G.value||("done"===e.status||"cancel"===e.status))),D=async()=>{if(!q)return;const e=await $(q);200===e.code&&(J.value=e.data.map(e=>({id:e.id,title:e.serviceType||"洗澡美容预约",desc:`${e.petType||""} - ${e.petName||""}`,time:A(e.appointmentTime),status:e.status||"new",statusText:I(e.status),petName:e.petName,petType:e.petType,serviceType:e.serviceType,appointmentTime:e.appointmentTime})))};return n(()=>D()),(e,a)=>{const t=v,s=p,n=k;return m(),l("div",{class:"page-shell orders-page"},[i(s,{class:"orders-nav nav-gradient",style:c(r(F))},{default:o(()=>[i(t,{class:"nav-back",onClick:a[0]||(a[0]=e=>r(N)("mine"))},{default:o(()=>[i(C,{name:"back",size:18,color:"#ffffff"})]),_:1}),i(t,{class:"nav-title"},{default:o(()=>[f("我的订单")]),_:1}),i(s,{class:"nav-placeholder"})]),_:1},8,["style"]),i(s,{class:"page-section orders-hero"},{default:o(()=>[i(s,{class:"hero-title"},{default:o(()=>[f("服务进度一目了然")]),_:1}),i(s,{class:"hero-sub"},{default:o(()=>[f("按状态查看订单,待确认可快速开始服务,进行中可直接填写报告。")]),_:1})]),_:1}),i(s,{class:"van-tabs"},{default:o(()=>[(m(),l(g,null,_(R,e=>i(s,{key:e.name,class:y(["van-tabs__tab",{active:G.value===e.name}]),onClick:a=>G.value=e.name},{default:o(()=>[f(b(e.title),1)]),_:2},1032,["class","onClick"])),64))]),_:1}),i(s,{class:"page-section section-gap"},{default:o(()=>[(m(!0),l(g,null,_(S.value,e=>{return m(),l("div",{key:e.id,class:"order-item"},[h("div",{class:"order-head"},[h("div",{class:"order-title"},b(e.title),1),i(s,{class:y(`van-tag van-tag--${a=e.status,M(a)}`)},{default:o(()=>[f(b(e.statusText),1)]),_:2},1032,["class"])]),h("div",{class:"order-desc"},[h("span",{class:"desc-icon"},[i(C,{name:"profile",size:12})]),h("span",null,b(e.desc),1)]),h("div",{class:"order-footer"},[h("span",{class:"order-time"},[i(C,{name:"orders",size:12,color:"#94a3b8"}),i(t,null,{default:o(()=>[f(b(e.time),1)]),_:2},1024)])]),"new"===e.status?(m(),l("div",{key:0,class:"action-btns"},[i(n,{class:"van-button van-button--small van-button--primary",onClick:a=>(async e=>{const a=await z(e.id,O.id);200===a.code?(T({title:"已开始服务",icon:"success"}),D()):T({title:a.message||"操作失败",icon:"none"})})(e)},{default:o(()=>[f("开始服务")]),_:2},1032,["onClick"]),i(n,{class:"van-button van-button--small",onClick:a=>(async e=>{w({title:"提示",content:"确定取消该预约?",success:async a=>{a.confirm&&200===(await B(e.id)).code&&(T({title:"已取消",icon:"success"}),D())}})})(e)},{default:o(()=>[f("取消")]),_:2},1032,["onClick"])])):"doing"===e.status?(m(),d(n,{key:1,class:"van-button van-button--small btn-mt",onClick:a=>(e=>{x("petstore_report_prefill",JSON.stringify({appointmentId:e.id,petName:e.petName,serviceType:e.serviceType,appointmentTime:e.appointmentTime})),N("report")})(e)},{default:o(()=>[f("填写报告")]),_:2},1032,["onClick"])):u("",!0)]);var a}),128))]),_:1}),0===S.value.length?(m(),d(s,{key:0,class:"empty"},{default:o(()=>[i(t,null,{default:o(()=>[f("暂无数据")]),_:1})]),_:1})):u("",!0)])}}},[["__scopeId","data-v-be66263e"]]);export{H as default};
diff --git a/dist/build/h5/assets/pages-mine-MyReports.DUWMQM2L.js b/dist/build/h5/assets/pages-mine-MyReports.DUWMQM2L.js
new file mode 100644
index 0000000..a925b2b
--- /dev/null
+++ b/dist/build/h5/assets/pages-mine-MyReports.DUWMQM2L.js
@@ -0,0 +1 @@
+import{m as e,n as a,p as s,r as l,u as t,c as o,d as r,w as n,v as c,x as i,F as d,y as p,e as u,z as v,f as g,g as h,A as m,h as f,t as y,b as _}from"./index-DrZc8biM.js";import{A as b}from"./AppIcon.M7CZvvJr.js";import{_ as k,n as x}from"./_plugin-vue_export-helper.2L545UbL.js";import{o as w,i as j,A as z}from"./index.DsJtDI4O.js";const A=k({__name:"MyReports",emits:["change-page"],setup(k,{emit:A}){const C=e(),I=a(),$=(()=>{var e,a;const l=(null==(e=s)?void 0:e().statusBarHeight)||20;let t=l+44;const o=null==(a=uni.getMenuButtonBoundingClientRect)?void 0:a.call(uni);if(o&&o.top&&o.height){t=l+2*Math.max(o.top-l,4)+o.height}return`padding-top:${l}px;height:${t}px;`})(),B=l(!1),M=l([]),P=()=>{x("home")};return t(()=>(async()=>{B.value=!0;const e="boss"===C.role?{storeId:I.id}:{userId:C.id},a=await w(e);B.value=!1,200===a.code&&(M.value=a.data)})()),(e,a)=>{const s=m,l=g;return h(),o("div",{class:"page-shell my-reports-page"},[r(l,{class:"report-nav nav-gradient",style:c(i($))},{default:n(()=>[r(s,{class:"nav-back nav-home-btn",onClick:P},{default:n(()=>[r(b,{name:"home",size:16,color:"#ffffff"})]),_:1}),r(s,{class:"nav-title"},{default:n(()=>[f("我的报告")]),_:1}),r(l,{class:"nav-placeholder"})]),_:1},8,["style"]),r(l,{class:"page-section reports-hero"},{default:n(()=>[r(l,{class:"hero-title"},{default:n(()=>[f("服务成果回顾")]),_:1}),r(l,{class:"hero-sub"},{default:n(()=>[f("已生成 "),r(s,{class:"hero-count"},{default:n(()=>[f(y(M.value.length),1)]),_:1}),f(" 份报告,点击卡片可查看详情并分享。")]),_:1})]),_:1}),M.value.length>0?(h(),o("div",{key:0,class:"page-section section-gap gallery-grid"},[(h(!0),o(d,null,p(M.value,e=>(h(),o("div",{key:e.id,class:"gallery-item",onClick:a=>(e=>{let a=z;a=window.location.origin;const s=`${a}/report.html?token=${e.reportToken}`;window.location.href=s})(e)},[_("div",{class:"gallery-cover"},[e.beforePhoto?(h(),o("img",{key:0,src:i(j)(e.beforePhoto),class:"cover-img"},null,8,["src"])):(h(),o("div",{key:1,class:"cover-placeholder"},[_("span",{class:"placeholder-icon"},[r(b,{name:"camera",size:18,color:"#94a3b8"})])])),_("div",{class:"gallery-overlay"},[_("div",{class:"overlay-name"},y(e.petName),1),_("div",{class:"overlay-service"},y(e.serviceType),1)])]),_("div",{class:"gallery-meta"},[_("span",{class:"meta-chip"},[r(b,{name:"report",size:11,color:"#64748b"}),r(s,null,{default:n(()=>[f("查看报告")]),_:1})])])],8,["onClick"]))),128))])):u("",!0),B.value||0!==M.value.length?u("",!0):(h(),v(l,{key:1,class:"empty"},{default:n(()=>[r(s,null,{default:n(()=>[f("暂无报告")]),_:1})]),_:1}))])}}},[["__scopeId","data-v-b92fb009"]]);export{A as default};
diff --git a/dist/build/h5/assets/pages-mine-Profile.DCcNMmIP.js b/dist/build/h5/assets/pages-mine-Profile.DCcNMmIP.js
new file mode 100644
index 0000000..59470e5
--- /dev/null
+++ b/dist/build/h5/assets/pages-mine-Profile.DCcNMmIP.js
@@ -0,0 +1 @@
+import{p as e,r as a,m as l,q as s,u as n,o,c as t,d as i,w as u,v as c,x as p,b as d,t as r,z as v,e as m,f,L as h,M as g,N as b,O as k,j as _,k as y,g as x,A as C,h as w,C as V,I as z,i as I}from"./index-DrZc8biM.js";import{A as j}from"./AppIcon.M7CZvvJr.js";import{_ as A,n as B}from"./_plugin-vue_export-helper.2L545UbL.js";import{B as U,i as M,p as P,s as $}from"./index.DsJtDI4O.js";const N=A({__name:"Profile",emits:["change-page"],setup(A,{emit:N}){const O=(()=>{var a,l;const s=(null==(a=e)?void 0:a().statusBarHeight)||20;let n=s+44;const o=null==(l=uni.getMenuButtonBoundingClientRect)?void 0:l.call(uni);if(o&&o.top&&o.height){n=s+2*Math.max(o.top-s,4)+o.height}return`padding-top:${s}px;height:${n}px;`})(),q=a(l()),F=a(!1),H=a(!1),J=a(!1),L=a(!1),R=a(0);let S=null;const D=a({name:"",phone:"",code:""}),E=s(()=>q.value.name?q.value.name.slice(0,1).toUpperCase():"?"),G=["#ff7c43","#07c160","#8b6914","#e06040","#5090d0"],K=s(()=>{var e;const a=((null==(e=q.value.name)?void 0:e.charCodeAt(0))||0)%G.length;return{background:G[a]}}),Q=async()=>{const e=D.value.phone;if(!e||11!==e.length)return void _({title:"请输入正确的手机号",icon:"none"});const a=await $(e);200===a.code?(_({title:"验证码已发送",icon:"none"}),R.value=60,S=setInterval(()=>{R.value--,R.value<=0&&clearInterval(S)},1e3)):_({title:a.message||"发送失败",icon:"none"})},T=async()=>{if(!D.value.name||!D.value.name.trim())return void _({title:"请输入姓名",icon:"none"});J.value=!0;const e=await P({id:q.value.id,name:D.value.name.trim()});J.value=!1,200===e.code?(q.value.name=D.value.name.trim(),y(q.value),_({title:"修改成功",icon:"success"}),F.value=!1):_({title:e.message||"修改失败",icon:"none"})},W=async()=>{const{phone:e,code:a}=D.value;if(!e||11!==e.length)return void _({title:"请输入正确的手机号",icon:"none"});if(!a||6!==a.length)return void _({title:"请输入6位验证码",icon:"none"});L.value=!0;const l=await P({id:q.value.id,phone:e,code:a});L.value=!1,200===l.code?(q.value.phone=e,y(q.value),_({title:"修改成功",icon:"success"}),H.value=!1):_({title:l.message||"修改失败",icon:"none"})},X=()=>{h({count:1,success:async e=>{const a=e.tempFilePaths[0];g({title:"上传中..."}),b({url:`${U}/upload/image`,filePath:a,name:"file",success:async e=>{k();const a=JSON.parse(e.data);if(200===a.code){const e=M(a.data.url),l=await P({id:q.value.id,avatar:a.data.url});200===l.code?(q.value.avatar=e,y(q.value),_({title:"头像已更新",icon:"success"})):_({title:l.message||"更新失败",icon:"none"})}else _({title:a.message||"上传失败",icon:"none"})},fail:()=>{k(),_({title:"上传失败",icon:"none"})}})}})};return n(()=>{D.value.name=q.value.name||"",D.value.phone=q.value.phone||""}),o(()=>{S&&clearInterval(S)}),(e,a)=>{const l=C,s=f,n=z,o=I;return x(),t("div",{class:"page-shell profile-page"},[i(s,{class:"profile-nav nav-gradient",style:c(p(O))},{default:u(()=>[i(l,{class:"nav-back",onClick:a[0]||(a[0]=e=>p(B)("mine"))},{default:u(()=>[i(j,{name:"back",size:18,color:"#ffffff"})]),_:1}),i(l,{class:"nav-title"},{default:u(()=>[w("个人信息")]),_:1}),i(s,{class:"nav-placeholder"})]),_:1},8,["style"]),d("div",{class:"profile-hero"},[d("div",{class:"hero-main-row"},[d("div",{class:"avatar-wrap",onClick:X},[q.value.avatar?(x(),t("img",{key:0,src:p(M)(q.value.avatar),class:"avatar-img"},null,8,["src"])):(x(),t("div",{key:1,class:"avatar-placeholder",style:c(K.value)},[d("span",{class:"avatar-initials"},r(E.value),1)],4)),d("div",{class:"avatar-badge","aria-hidden":"true"},[i(j,{name:"camera",size:12,color:"#64748b"})])]),d("div",{class:"hero-text"},[d("div",{class:"hero-name text-title"},r(q.value.name||"未设置姓名"),1),d("div",{class:"hero-phone text-sub"},r(q.value.phone||"未绑定手机号"),1),d("div",{class:"hero-tags"},["boss"===q.value.role?(x(),t("span",{key:0,class:"role-pill hero-role"},"店长")):(x(),t("span",{key:1,class:"role-pill hero-role role-staff"},"员工"))])])]),d("div",{class:"hero-hint text-sub"},"点击左侧头像可更换照片")]),d("div",{class:"menu-section"},[d("div",{class:"menu-card"},[d("div",{class:"menu-title"},"资料与账号"),d("div",{class:"menu-item",onClick:a[1]||(a[1]=e=>F.value=!0)},[d("div",{class:"menu-left"},[d("span",{class:"menu-icon"},[i(j,{name:"profile",size:15})]),d("span",{class:"menu-text"},"姓名")]),d("div",{class:"menu-right"},[d("span",{class:"menu-value"},r(q.value.name||"未设置"),1),d("span",{class:"menu-arrow"},"›")])]),d("div",{class:"menu-item",onClick:a[2]||(a[2]=e=>H.value=!0)},[d("div",{class:"menu-left"},[d("span",{class:"menu-icon"},[i(j,{name:"orders",size:15})]),d("span",{class:"menu-text"},"手机号")]),d("div",{class:"menu-right"},[d("span",{class:"menu-value"},r(q.value.phone||"未设置"),1),d("span",{class:"menu-arrow"},"›")])]),d("div",{class:"menu-item menu-item-static"},[d("div",{class:"menu-left"},[d("span",{class:"menu-icon"},[i(j,{name:"mine",size:15})]),d("span",{class:"menu-text"},"角色")]),d("div",{class:"menu-right"},["boss"===q.value.role?(x(),t("span",{key:0,class:"role-pill role-pill-compact"},"店长")):(x(),t("span",{key:1,class:"role-pill role-pill-compact role-staff"},"员工"))])])])]),d("div",{class:"footer-tip"},"宠伴生活馆 · "+r("boss"===q.value.role?"商家版":"员工版"),1),F.value?(x(),v(s,{key:0,class:"popup-mask profile-popup-mask",onClick:a[6]||(a[6]=e=>F.value=!1)},{default:u(()=>[i(s,{class:"popup-content profile-popup-sheet",onClick:a[5]||(a[5]=V(()=>{},["stop"]))},{default:u(()=>[i(s,{class:"popup-header"},{default:u(()=>[i(l,{class:"popup-title"},{default:u(()=>[w("修改姓名")]),_:1}),i(s,{class:"popup-close",onClick:a[3]||(a[3]=e=>F.value=!1)},{default:u(()=>[i(j,{name:"close",size:18,color:"#94a3b8"})]),_:1})]),_:1}),i(s,{class:"popup-body"},{default:u(()=>[i(s,{class:"field-label"},{default:u(()=>[w("姓名")]),_:1}),i(n,{modelValue:D.value.name,"onUpdate:modelValue":a[4]||(a[4]=e=>D.value.name=e),class:"van-field",placeholder:"请输入姓名"},null,8,["modelValue"])]),_:1}),i(s,{class:"popup-footer profile-popup-footer"},{default:u(()=>[i(o,{class:"van-button van-button--block van-button--primary",loading:J.value,onClick:T},{default:u(()=>[w("保存")]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1})):m("",!0),H.value?(x(),v(s,{key:1,class:"popup-mask profile-popup-mask",onClick:a[11]||(a[11]=e=>H.value=!1)},{default:u(()=>[i(s,{class:"popup-content profile-popup-sheet",onClick:a[10]||(a[10]=V(()=>{},["stop"]))},{default:u(()=>[i(s,{class:"popup-header"},{default:u(()=>[i(l,{class:"popup-title"},{default:u(()=>[w("修改手机号")]),_:1}),i(s,{class:"popup-close",onClick:a[7]||(a[7]=e=>H.value=!1)},{default:u(()=>[i(j,{name:"close",size:18,color:"#94a3b8"})]),_:1})]),_:1}),i(s,{class:"popup-body"},{default:u(()=>[i(s,{class:"field-label"},{default:u(()=>[w("新手机号")]),_:1}),i(n,{modelValue:D.value.phone,"onUpdate:modelValue":a[8]||(a[8]=e=>D.value.phone=e),type:"tel",class:"van-field",placeholder:"请输入手机号",maxlength:"11"},null,8,["modelValue"]),i(s,{class:"field-label field-label-gap"},{default:u(()=>[w("验证码")]),_:1}),i(s,{class:"sms-row"},{default:u(()=>[i(n,{modelValue:D.value.code,"onUpdate:modelValue":a[9]||(a[9]=e=>D.value.code=e),type:"digit",class:"van-field sms-input",placeholder:"请输入验证码",maxlength:"6"},null,8,["modelValue"]),i(o,{class:"van-button van-button--small",disabled:R.value>0,onClick:Q},{default:u(()=>[w(r(R.value>0?R.value+"s":"获取验证码"),1)]),_:1},8,["disabled"])]),_:1})]),_:1}),i(s,{class:"popup-footer profile-popup-footer"},{default:u(()=>[i(o,{class:"van-button van-button--block van-button--primary",loading:L.value,onClick:W},{default:u(()=>[w("保存")]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1})):m("",!0)])}}},[["__scopeId","data-v-2268527d"]]);export{N as default};
diff --git a/dist/build/h5/assets/pages-mine-ServiceType.DZbIoYg-.js b/dist/build/h5/assets/pages-mine-ServiceType.DZbIoYg-.js
new file mode 100644
index 0000000..2cbb988
--- /dev/null
+++ b/dist/build/h5/assets/pages-mine-ServiceType.DZbIoYg-.js
@@ -0,0 +1 @@
+import{n as a,p as e,r as s,u as l,c as t,d as n,w as u,v as o,x as c,z as d,e as i,f as p,g as v,A as r,h as f,i as _,F as m,y as g,B as h,C as k,b,t as y,I as C,G as w,j as x}from"./index-DrZc8biM.js";import{A as T}from"./AppIcon.M7CZvvJr.js";import{_ as I,n as j}from"./_plugin-vue_export-helper.2L545UbL.js";import{b as B,m as z,n as A}from"./index.DsJtDI4O.js";const V=I({__name:"ServiceType",emits:["change-page"],setup(I,{emit:V}){const M=a(),X=(()=>{var a,s;const l=(null==(a=e)?void 0:a().statusBarHeight)||20;let t=l+44;const n=null==(s=uni.getMenuButtonBoundingClientRect)?void 0:s.call(uni);if(n&&n.top&&n.height){t=l+2*Math.max(n.top-l,4)+n.height}return`padding-top:${l}px;height:${t}px;`})(),$=s([]),F=s(!1),G=s(""),H=s(null),R=s(0),S=s(0),U=async()=>{const a=await B(M.id);200===a.code&&($.value=a.data)},q=async()=>{if(!G.value)return void x({title:"请输入服务类型名称",icon:"none"});const a=await A(M.id,G.value);200===a.code?(x({title:"添加成功",icon:"success"}),G.value="",F.value=!1,U()):x({title:a.message||"添加失败",icon:"none"})},D=a=>{var e,s;return(null==(e=null==a?void 0:a.touches)?void 0:e[0])?a.touches[0].pageX:(null==(s=null==a?void 0:a.changedTouches)?void 0:s[0])?a.changedTouches[0].pageX:0};return l(()=>U()),(a,e)=>{const s=r,l=p,I=_,B=C;return v(),t("div",{class:"page-shell st-page"},[n(l,{class:"st-nav nav-gradient",style:o(c(X))},{default:u(()=>[n(s,{class:"nav-back",onClick:e[0]||(e[0]=a=>c(j)("mine"))},{default:u(()=>[n(T,{name:"back",size:18,color:"#ffffff"})]),_:1}),n(s,{class:"nav-title"},{default:u(()=>[f("服务类型")]),_:1}),n(l,{class:"nav-placeholder"})]),_:1},8,["style"]),n(l,{class:"page-section add-btn-wrap"},{default:u(()=>[n(I,{class:"van-button van-button--primary van-button--block",onClick:e[1]||(e[1]=a=>F.value=!0)},{default:u(()=>[f("新增服务类型")]),_:1})]),_:1}),n(l,{class:"page-section"},{default:u(()=>[n(l,{class:"van-cell-group card-section st-list"},{default:u(()=>[(v(!0),t(m,null,g($.value,a=>(v(),d(l,{key:a.id,class:h(["st-swipe-wrap",{"is-open":H.value===a.id&&!!a.storeId}])},{default:u(()=>[n(l,{class:"st-swipe-track",onTouchstart:e=>((a,e)=>{const s=D(a);R.value=s,S.value=s,H.value&&H.value!==e.id&&(H.value=null)})(e,a),onTouchmove:e[2]||(e[2]=k(a=>{return e=a,void(S.value=D(e));var e},["stop"])),onTouchend:e=>((a,e)=>{if(!e.storeId)return;const s=(D(a)||S.value)-R.value;s<-40?H.value=e.id:s>24&&H.value===e.id&&(H.value=null)})(e,a)},{default:u(()=>[n(l,{class:"van-cell st-cell"},{default:u(()=>[n(l,{class:"st-name-row"},{default:u(()=>[b("span",{class:"st-dot"},[n(T,{name:"service",size:14})]),n(s,{class:"st-name"},{default:u(()=>[f(y(a.name),1)]),_:2},1024),a.storeId?i("",!0):(v(),d(l,{key:0,class:"van-tag van-tag--success van-tag--small system-tag"},{default:u(()=>[f("系统默认")]),_:1}))]),_:2},1024)]),_:2},1024),a.storeId?(v(),d(l,{key:0,class:"swipe-delete-btn",onClick:k(e=>(async a=>{w({title:"提示",content:"确定删除?",success:async e=>{e.confirm&&200===(await z(a)).code&&(H.value=null,x({title:"已删除",icon:"success"}),U())}})})(a.id),["stop"])},{default:u(()=>[f(" 删除 ")]),_:2},1032,["onClick"])):i("",!0)]),_:2},1032,["onTouchstart","onTouchend"])]),_:2},1032,["class"]))),128))]),_:1})]),_:1}),0===$.value.length?(v(),d(l,{key:0,class:"empty"},{default:u(()=>[n(s,null,{default:u(()=>[f("暂无服务类型")]),_:1})]),_:1})):i("",!0),F.value?(v(),d(l,{key:1,class:"popup-mask",onClick:e[7]||(e[7]=a=>F.value=!1)},{default:u(()=>[n(l,{class:"popup-content",onClick:e[6]||(e[6]=k(()=>{},["stop"]))},{default:u(()=>[n(l,{class:"popup-header"},{default:u(()=>[n(s,{class:"popup-title"},{default:u(()=>[f("新增服务类型")]),_:1}),n(s,{class:"popup-close",onClick:e[3]||(e[3]=a=>F.value=!1)},{default:u(()=>[f("✕")]),_:1})]),_:1}),n(l,{class:"popup-body"},{default:u(()=>[n(l,{class:"popup-desc"},{default:u(()=>[f("建议使用简洁明确的命名,方便前台下单与报告展示。")]),_:1}),n(l,{class:"field-label"},{default:u(()=>[f("服务类型名称")]),_:1}),n(B,{modelValue:G.value,"onUpdate:modelValue":e[4]||(e[4]=a=>G.value=a),class:"van-field",placeholder:"请输入"},null,8,["modelValue"])]),_:1}),n(l,{class:"popup-footer"},{default:u(()=>[n(l,{class:"popup-actions"},{default:u(()=>[n(I,{class:"van-button btn-ghost",onClick:e[5]||(e[5]=a=>F.value=!1)},{default:u(()=>[f("取消")]),_:1}),n(I,{class:"van-button van-button--primary btn-confirm",onClick:q},{default:u(()=>[f("确认创建")]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})):i("",!0)])}}},[["__scopeId","data-v-663ba7c1"]]);export{V as default};
diff --git a/dist/build/h5/assets/pages-mine-Staff.MjRBMiPA.js b/dist/build/h5/assets/pages-mine-Staff.MjRBMiPA.js
new file mode 100644
index 0000000..18ee3ac
--- /dev/null
+++ b/dist/build/h5/assets/pages-mine-Staff.MjRBMiPA.js
@@ -0,0 +1 @@
+import{n as a,p as e,r as l,u as s,c as t,d as n,w as o,v as u,x as c,z as i,e as d,f as v,g as p,A as f,h as r,t as _,i as m,F as h,y as g,B as b,C as k,I as y,s as C,j as w,G as x}from"./index-DrZc8biM.js";import{A as T}from"./AppIcon.M7CZvvJr.js";import{_ as j,n as V}from"./_plugin-vue_export-helper.2L545UbL.js";import{h as A,j as B,k as I}from"./index.DsJtDI4O.js";const $=j({__name:"Staff",emits:["change-page"],setup(j,{emit:$}){const z=a(),M=(()=>{var a,l;const s=(null==(a=e)?void 0:a().statusBarHeight)||20;let t=s+44;const n=null==(l=uni.getMenuButtonBoundingClientRect)?void 0:l.call(uni);if(n&&n.top&&n.height){t=s+2*Math.max(n.top-s,4)+n.height}return`padding-top:${s}px;height:${t}px;`})(),U=l([]),X=l(!1),F=l({name:"",phone:""}),G=l(null),H=l(0),R=l(0),S=["#ff7c43","#07c160","#8b6914","#e06040","#5090d0","#9b59b6"],q=a=>{var e;if(a.avatar)return{background:"transparent"};const l=((null==(e=a.name)?void 0:e.charCodeAt(0))||0)%S.length;return{background:S[l]}},D=async()=>{const a=await A(z.id);200===a.code&&(U.value=a.data)},E=()=>{C({data:z.inviteCode,success:()=>w({title:"邀请码已复制",icon:"none"})})},J=async()=>{if(!F.value.name)return void w({title:"请输入员工姓名",icon:"none"});if(!F.value.phone||11!==F.value.phone.length)return void w({title:"请输入正确的手机号",icon:"none"});const a=await I({storeId:z.id,name:F.value.name,phone:F.value.phone});200===a.code?(w({title:`添加成功,密码:${a.data.password}`,icon:"none",duration:3e3}),X.value=!1,F.value={name:"",phone:""},D()):w({title:a.message||"添加失败",icon:"none"})},K=a=>{var e,l;return(null==(e=null==a?void 0:a.touches)?void 0:e[0])?a.touches[0].pageX:(null==(l=null==a?void 0:a.changedTouches)?void 0:l[0])?a.changedTouches[0].pageX:0};return s(()=>D()),(a,e)=>{const l=f,s=v,C=m,j=y;return p(),t("div",{class:"page-shell staff-page"},[n(s,{class:"staff-nav nav-gradient",style:u(c(M))},{default:o(()=>[n(l,{class:"nav-back",onClick:e[0]||(e[0]=a=>c(V)("mine"))},{default:o(()=>[n(T,{name:"back",size:18,color:"#ffffff"})]),_:1}),n(l,{class:"nav-title"},{default:o(()=>[r("员工管理")]),_:1}),n(s,{class:"nav-placeholder"})]),_:1},8,["style"]),n(s,{class:"van-cell-group page-section card-section invite-card"},{default:o(()=>[n(s,{class:"van-cell"},{default:o(()=>[n(s,{class:"van-cell__title"},{default:o(()=>[r("员工邀请码")]),_:1}),n(s,{class:"van-cell__value invite-code-cell"},{default:o(()=>[n(l,{class:"invite-code"},{default:o(()=>[r(_(c(z).inviteCode),1)]),_:1}),n(C,{class:"van-button van-button--small van-button--primary",onClick:E},{default:o(()=>[r("复制")]),_:1})]),_:1})]),_:1})]),_:1}),n(s,{class:"page-section add-btn-wrap"},{default:o(()=>[n(C,{class:"van-button van-button--primary van-button--block",onClick:e[1]||(e[1]=a=>X.value=!0)},{default:o(()=>[r("新增员工")]),_:1})]),_:1}),n(s,{class:"page-section section-gap"},{default:o(()=>[n(s,{class:"van-cell-group card-section"},{default:o(()=>[(p(!0),t(h,null,g(U.value,a=>(p(),i(s,{key:a.id,class:b(["staff-swipe-wrap",{"is-open":G.value===a.id&&"boss"!==a.role}]),onClick:e=>{return l=a,void(G.value&&G.value!==l.id&&(G.value=null));var l}},{default:o(()=>["boss"!==a.role?(p(),i(s,{key:0,class:"swipe-delete-btn",onClick:k(e=>(async a=>{x({title:"提示",content:"确定删除该员工?",success:async e=>{e.confirm&&200===(await B(a)).code&&(G.value=null,w({title:"已删除",icon:"success"}),D())}})})(a.id),["stop"])},{default:o(()=>[r(" 删除 ")]),_:2},1032,["onClick"])):d("",!0),n(s,{class:"staff-main",onTouchstart:e=>((a,e)=>{const l=K(a);H.value=l,R.value=l,G.value&&G.value!==e.id&&(G.value=null)})(e,a),onTouchmove:e[2]||(e[2]=k(a=>{return e=a,void(R.value=K(e));var e},["stop"])),onTouchend:e=>((a,e)=>{if("boss"===e.role)return;const l=(K(a)||R.value)-H.value;l<-40?G.value=e.id:l>24&&G.value===e.id&&(G.value=null)})(e,a)},{default:o(()=>[n(s,{class:"van-cell staff-cell"},{default:o(()=>[n(s,{class:"staff-info-row"},{default:o(()=>[n(s,{class:"avatar",style:u(q(a))},{default:o(()=>[a.avatar?(p(),t("img",{key:0,src:a.avatar,class:"avatar-img"},null,8,["src"])):(p(),t("span",{key:1,class:"avatar-initials"},_(a.name?a.name[0]:"?"),1))]),_:2},1032,["style"]),n(s,null,{default:o(()=>[n(s,{class:"staff-name"},{default:o(()=>[r(_(a.name),1)]),_:2},1024),n(s,{class:"staff-meta"},{default:o(()=>[r(_(a.phone),1)]),_:2},1024),n(s,{class:"staff-meta"},{default:o(()=>[r(_("boss"===a.role?"店长":"员工"),1)]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:2},1032,["onTouchstart","onTouchend"])]),_:2},1032,["class","onClick"]))),128))]),_:1})]),_:1}),0===U.value.length?(p(),i(s,{key:0,class:"empty"},{default:o(()=>[n(l,null,{default:o(()=>[r("暂无员工")]),_:1})]),_:1})):d("",!0),X.value?(p(),i(s,{key:1,class:"popup-mask",onClick:e[8]||(e[8]=a=>X.value=!1)},{default:o(()=>[n(s,{class:"popup-content",onClick:e[7]||(e[7]=k(()=>{},["stop"]))},{default:o(()=>[n(s,{class:"popup-header"},{default:o(()=>[n(l,{class:"popup-title"},{default:o(()=>[r("新增员工")]),_:1}),n(l,{class:"popup-close",onClick:e[3]||(e[3]=a=>X.value=!1)},{default:o(()=>[r("✕")]),_:1})]),_:1}),n(s,{class:"popup-body"},{default:o(()=>[n(s,{class:"popup-desc"},{default:o(()=>[r("创建后会自动生成初始密码,员工可使用手机号登录。")]),_:1}),n(s,{class:"field-label"},{default:o(()=>[r("员工姓名")]),_:1}),n(j,{modelValue:F.value.name,"onUpdate:modelValue":e[4]||(e[4]=a=>F.value.name=a),class:"van-field",placeholder:"请输入"},null,8,["modelValue"]),n(s,{class:"field-label"},{default:o(()=>[r("手机号")]),_:1}),n(j,{modelValue:F.value.phone,"onUpdate:modelValue":e[5]||(e[5]=a=>F.value.phone=a),type:"tel",class:"van-field",placeholder:"请输入",maxlength:"11"},null,8,["modelValue"])]),_:1}),n(s,{class:"popup-footer"},{default:o(()=>[n(s,{class:"popup-actions"},{default:o(()=>[n(C,{class:"van-button btn-ghost",onClick:e[6]||(e[6]=a=>X.value=!1)},{default:o(()=>[r("取消")]),_:1}),n(C,{class:"van-button van-button--primary btn-confirm",onClick:J},{default:o(()=>[r("确认创建")]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})):d("",!0)])}}},[["__scopeId","data-v-8ecf2675"]]);export{$ as default};
diff --git a/dist/build/h5/assets/pages-mine-Store.Chv7yw34.js b/dist/build/h5/assets/pages-mine-Store.Chv7yw34.js
new file mode 100644
index 0000000..e3c26ad
--- /dev/null
+++ b/dist/build/h5/assets/pages-mine-Store.Chv7yw34.js
@@ -0,0 +1 @@
+import{n as e,p as a,r as l,q as s,u as t,c as o,d as n,w as i,v as d,x as r,b as u,e as c,f as v,A as p,I as f,i as m,E as h,g,h as b,Q as _,j as V,l as x}from"./index-DrZc8biM.js";import{A as k}from"./AppIcon.M7CZvvJr.js";import{_ as y,n as j}from"./_plugin-vue_export-helper.2L545UbL.js";import{u as z}from"./index.DsJtDI4O.js";const B=y({__name:"Store",emits:["change-page"],setup(y){const B=e(),C=(()=>{var e,l;const s=(null==(e=a)?void 0:e().statusBarHeight)||20;let t=s+44;const o=null==(l=uni.getMenuButtonBoundingClientRect)?void 0:l.call(uni);if(o&&o.top&&o.height){t=s+2*Math.max(o.top-s,4)+o.height}return`padding-top:${s}px;height:${t}px;`})(),U=l(!1),w=l(!1),A=l({name:"",phone:"",address:"",intro:"",latitude:null,longitude:null}),I=s(()=>null!=A.value.latitude&&null!=A.value.longitude),M=e=>{if(null==e||""===e)return null;const a="number"==typeof e?e:parseFloat(e);return Number.isFinite(a)?a:null},F=()=>{w.value=!0,_({success:e=>{const a=e.name||"",l=e.address||"";A.value.address=[a,l].filter(Boolean).join(" · ")||l||a,A.value.latitude=M(e.latitude),A.value.longitude=M(e.longitude)},fail:e=>{const a=e&&e.errMsg||"";/cancel|取消/i.test(a)||V({title:"无法打开选点,请手动填写",icon:"none"})},complete:()=>{w.value=!1}})},$=async()=>{U.value=!0;const e=await z({id:B.id,...A.value});if(U.value=!1,200===e.code){V({title:"保存成功",icon:"success"});const a=e.data?{...B,...e.data}:{...B,...A.value};x(a)}else V({title:e.message||"保存失败",icon:"none"})};return t(()=>{A.value={name:B.name||"",phone:B.phone||"",address:B.address||"",intro:B.intro||"",latitude:M(B.latitude),longitude:M(B.longitude)}}),(e,a)=>{const l=p,s=v,t=f,_=m,V=h;return g(),o("div",{class:"page-shell store-page"},[n(s,{class:"store-nav nav-gradient",style:d(r(C))},{default:i(()=>[n(l,{class:"nav-back",onClick:a[0]||(a[0]=e=>r(j)("mine"))},{default:i(()=>[n(k,{name:"back",size:18,color:"#ffffff"})]),_:1}),n(l,{class:"nav-title"},{default:i(()=>[b("店铺设置")]),_:1}),n(s,{class:"nav-placeholder"})]),_:1},8,["style"]),u("div",{class:"store-body"},[u("div",{class:"store-hero"},[n(s,{class:"store-hero-icon","aria-hidden":"true"},{default:i(()=>[n(k,{name:"store",size:22,color:"#15803d"})]),_:1}),u("div",{class:"store-hero-text"},[u("div",{class:"store-hero-title"},"门店资料"),u("div",{class:"store-hero-desc"},"以下信息会用于预约展示与客户联系,建议保持准确、易读。")])]),u("div",{class:"store-card"},[u("div",{class:"store-card-head"},[u("span",{class:"store-card-kicker"},"基础信息")]),u("div",{class:"store-field"},[u("div",{class:"store-field-label"},[u("span",{class:"store-ico"},[n(k,{name:"store",size:15,color:"#475569"})]),n(l,null,{default:i(()=>[b("店铺名称")]),_:1})]),n(t,{modelValue:A.value.name,"onUpdate:modelValue":a[1]||(a[1]=e=>A.value.name=e),class:"van-field store-input",placeholder:"请输入店铺名称"},null,8,["modelValue"])]),u("div",{class:"store-field"},[u("div",{class:"store-field-label"},[u("span",{class:"store-ico"},[n(k,{name:"phone",size:15,color:"#475569"})]),n(l,null,{default:i(()=>[b("联系电话")]),_:1})]),n(t,{modelValue:A.value.phone,"onUpdate:modelValue":a[2]||(a[2]=e=>A.value.phone=e),type:"tel",class:"van-field store-input",placeholder:"请输入联系电话",maxlength:"20"},null,8,["modelValue"])]),u("div",{class:"store-field"},[u("div",{class:"store-field-label"},[u("span",{class:"store-ico"},[n(k,{name:"pin",size:15,color:"#475569"})]),n(l,null,{default:i(()=>[b("地址")]),_:1})]),u("div",{class:"address-row"},[n(t,{modelValue:A.value.address,"onUpdate:modelValue":a[3]||(a[3]=e=>A.value.address=e),class:"van-field store-input address-input",placeholder:"输入地址或点右侧选点"},null,8,["modelValue"]),n(_,{type:"button",class:"pick-location-btn",disabled:w.value,onClick:F},{default:i(()=>[b(" 地图选点 ")]),_:1},8,["disabled"])]),I.value?(g(),o("div",{key:0,class:"geo-hint"},"已选地图位置,可再微调上方文字后保存")):c("",!0)]),u("div",{class:"store-field store-field-last"},[u("div",{class:"store-field-label"},[u("span",{class:"store-ico"},[n(k,{name:"report",size:15,color:"#475569"})]),n(l,null,{default:i(()=>[b("简介")]),_:1})]),n(V,{modelValue:A.value.intro,"onUpdate:modelValue":a[4]||(a[4]=e=>A.value.intro=e),class:"van-field store-input intro-textarea",placeholder:"一句话介绍门店特色、服务亮点等"},null,8,["modelValue"])])]),u("div",{class:"store-actions"},[n(_,{class:"van-button van-button--primary van-button--block store-save-btn",loading:U.value,onClick:$},{default:i(()=>[b(" 保存设置 ")]),_:1},8,["loading"]),u("div",{class:"store-actions-hint"},"保存后立即生效,并写入本地缓存。")]),u("div",{class:"store-footer-tip"},"宠伴生活馆 · 商家版")])])}}},[["__scopeId","data-v-eb0ed336"]]);export{B as default};
diff --git a/dist/build/h5/assets/pages-report-Report.4YqXiEo9.js b/dist/build/h5/assets/pages-report-Report.4YqXiEo9.js
new file mode 100644
index 0000000..b55b151
--- /dev/null
+++ b/dist/build/h5/assets/pages-report-Report.4YqXiEo9.js
@@ -0,0 +1 @@
+import{m as e,n as a,p as l,r as t,q as s,u as o,J as n,K as u,c as r,b as i,d as c,w as p,v as d,x as f,z as m,e as v,F as _,f as b,g,A as k,h,i as y,I as w,D as T,t as C,E as x,s as N,j as V,L as z,M as U,N as I,O as j}from"./index-DrZc8biM.js";import{b as $,B as q,i as P,f as A,A as B}from"./index.DsJtDI4O.js";import{T as J,u as M}from"./useNavigator.BKsocaY0.js";import{A as O}from"./AppIcon.M7CZvvJr.js";import{_ as R}from"./_plugin-vue_export-helper.2L545UbL.js";const F=R({__name:"Report",emits:["change-page"],setup(R,{emit:F}){const S=e(),D=a(),{goPage:E,navigateTo:H}=M(),K=(()=>{var e,a;const t=(null==(e=l)?void 0:e().statusBarHeight)||20;let s=t+44;const o=null==(a=uni.getMenuButtonBoundingClientRect)?void 0:a.call(uni);if(o&&o.top&&o.height){s=t+2*Math.max(o.top-t,4)+o.height}return`padding-top:${t}px;height:${s}px;`})(),L=t({petName:"",serviceType:"",appointmentTime:"",before:"",after:"",remark:""}),G=t(null),Q=t([]),W=t(null),X=t(!1),Y=s(()=>Q.value.map(e=>({label:e.name,value:e.name}))),Z=s(()=>G.value?`https://api.qrserver.com/v1/create-qr-code/?size=180x180&data=${encodeURIComponent(G.value.reportUrl)}`:""),ee=e=>{z({count:1,success:a=>{const l=a.tempFilePaths[0];U({title:"上传中..."}),I({url:`${q}/upload/image`,filePath:l,name:"file",success:a=>{j();const l=JSON.parse(a.data);200===l.code?L.value[e]=P(l.data.url):V({title:l.message||"上传失败",icon:"none"})},fail:()=>{j(),V({title:"上传失败",icon:"none"})}})}})},ae=e=>{const a=e.detail.value;L.value.serviceType=Y.value[a].value},le=async()=>{if(!L.value.petName)return V({title:"请输入宠物名字",icon:"none"});if(!L.value.serviceType)return V({title:"请选择服务类型",icon:"none"});X.value=!0;const e={appointmentId:W.value||null,userId:S.id,petName:L.value.petName,serviceType:L.value.serviceType,appointmentTime:L.value.appointmentTime||null,beforePhoto:L.value.before,afterPhoto:L.value.after,remark:L.value.remark},a=await A(e);if(X.value=!1,200===a.code){const e=a.data.reportToken;let l=B;l=window.location.origin;const t=`${l}/report.html?token=${e}`;G.value={token:e,reportUrl:t}}else V({title:a.message||"提交失败",icon:"none"})},te=()=>{N({data:G.value.reportUrl,success:()=>V({title:"链接已复制",icon:"none"})})},se=()=>{V({title:"请长按二维码图片保存",icon:"none"})},oe=()=>H("home"),ne=()=>{G.value=null,L.value={petName:"",serviceType:"",appointmentTime:"",before:"",after:"",remark:""},H("home")};return o(async()=>{await(async()=>{if(!D.id)return;const e=await $(D.id);200===e.code&&(Q.value=e.data)})();const e=JSON.parse(n("petstore_report_prefill")||"null");e&&(W.value=e.appointmentId,L.value.petName=e.petName||"",L.value.serviceType=e.serviceType||"",L.value.appointmentTime=e.appointmentTime?e.appointmentTime.slice(0,16):"",u("petstore_report_prefill"))}),(e,a)=>{const l=k,t=b,s=y,o=w,n=T,u=x;return g(),r(_,null,[i("div",{class:"page-shell report-page"},[c(t,{class:"report-nav nav-gradient",style:d(f(K))},{default:p(()=>[c(l,{class:"nav-back",onClick:oe},{default:p(()=>[c(O,{name:"back",size:18,color:"#ffffff"})]),_:1}),c(l,{class:"nav-title"},{default:p(()=>[h("洗护美容报告")]),_:1}),c(t,{class:"nav-placeholder"})]),_:1},8,["style"]),G.value?(g(),r("div",{key:0,class:"result-wrap"},[c(t,{class:"notice-bar success"},{default:p(()=>[h("✓ 提交成功,可复制链接或扫描二维码分享给宠主")]),_:1}),c(t,{class:"page-section result-content"},{default:p(()=>[c(t,{class:"result-link-row"},{default:p(()=>[c(t,{class:"field-label field-label-tight"},{default:p(()=>[h("报告链接")]),_:1}),c(s,{class:"van-button van-button--small van-button--primary",onClick:te},{default:p(()=>[h("复制")]),_:1})]),_:1}),c(o,{class:"van-field report-url-input",value:G.value.reportUrl,readonly:""},null,8,["value"]),c(t,{class:"qr-wrap"},{default:p(()=>[i("img",{src:Z.value,alt:"二维码",class:"qr-img"},null,8,["src"])]),_:1}),c(s,{class:"van-button van-button--primary van-button--block",onClick:se},{default:p(()=>[h("保存二维码到相册")]),_:1}),c(s,{class:"van-button van-button--block btn-ghost",onClick:ne},{default:p(()=>[h("返回首页")]),_:1})]),_:1})])):(g(),r("div",{key:1,class:"report-form"},[c(t,{class:"page-section report-hero"},{default:p(()=>[c(t,{class:"hero-title"},{default:p(()=>[h("填写服务记录")]),_:1}),c(t,{class:"hero-sub"},{default:p(()=>[h("完善本次服务细节,提交后可生成分享链接与二维码。")]),_:1})]),_:1}),c(t,{class:"van-cell-group page-section form-section"},{default:p(()=>[c(t,{class:"module-title section-title"},{default:p(()=>[i("span",{class:"section-icon"},[c(O,{name:"profile",size:12})]),c(l,null,{default:p(()=>[h("基础信息")]),_:1})]),_:1}),c(t,{class:"section-body"},{default:p(()=>[c(t,{class:"form-field-wrap"},{default:p(()=>[c(t,{class:"field-label"},{default:p(()=>[h("宠物名字")]),_:1}),c(o,{modelValue:L.value.petName,"onUpdate:modelValue":a[0]||(a[0]=e=>L.value.petName=e),class:"van-field",placeholder:"请输入宠物名字"},null,8,["modelValue"])]),_:1}),c(t,{class:"form-field-wrap"},{default:p(()=>[c(t,{class:"field-label"},{default:p(()=>[h("服务类型")]),_:1}),c(n,{mode:"selector",range:Y.value,"range-key":"label",onChange:ae},{default:p(()=>[c(t,{class:"van-field picker-field"},{default:p(()=>[h(C(L.value.serviceType||"请选择"),1)]),_:1})]),_:1},8,["range"])]),_:1}),c(t,{class:"form-field-wrap"},{default:p(()=>[c(t,{class:"field-label"},{default:p(()=>[h("服务时间")]),_:1}),c(o,{modelValue:L.value.appointmentTime,"onUpdate:modelValue":a[1]||(a[1]=e=>L.value.appointmentTime=e),type:"datetime-local",class:"van-field"},null,8,["modelValue"])]),_:1})]),_:1})]),_:1}),c(t,{class:"van-cell-group page-section form-section"},{default:p(()=>[c(t,{class:"module-title section-title"},{default:p(()=>[i("span",{class:"section-icon"},[c(O,{name:"camera",size:12})]),c(l,null,{default:p(()=>[h("服务照片")]),_:1})]),_:1}),c(t,{class:"section-body"},{default:p(()=>[c(t,{class:"photo-row"},{default:p(()=>[c(t,{class:"photo-col"},{default:p(()=>[c(t,{class:"field-label"},{default:p(()=>[h("服务前")]),_:1}),c(t,{class:"upload-wrap"},{default:p(()=>[L.value.before?(g(),m(t,{key:0,class:"upload-preview"},{default:p(()=>[i("img",{src:L.value.before,class:"preview-img"},null,8,["src"]),c(t,{class:"preview-remove",onClick:a[2]||(a[2]=e=>L.value.before="")},{default:p(()=>[h("✕")]),_:1})]),_:1})):(g(),m(t,{key:1,class:"upload-box",onClick:a[3]||(a[3]=e=>ee("before"))},{default:p(()=>[i("span",{class:"upload-icon"},[c(O,{name:"camera",size:16,color:"#94a3b8"})]),i("span",{class:"upload-tip"},"上传照片")]),_:1}))]),_:1})]),_:1}),c(t,{class:"photo-col"},{default:p(()=>[c(t,{class:"field-label"},{default:p(()=>[h("服务后")]),_:1}),c(t,{class:"upload-wrap"},{default:p(()=>[L.value.after?(g(),m(t,{key:0,class:"upload-preview"},{default:p(()=>[i("img",{src:L.value.after,class:"preview-img"},null,8,["src"]),c(t,{class:"preview-remove",onClick:a[4]||(a[4]=e=>L.value.after="")},{default:p(()=>[h("✕")]),_:1})]),_:1})):(g(),m(t,{key:1,class:"upload-box",onClick:a[5]||(a[5]=e=>ee("after"))},{default:p(()=>[i("span",{class:"upload-icon"},[c(O,{name:"camera",size:16,color:"#94a3b8"})]),i("span",{class:"upload-tip"},"上传照片")]),_:1}))]),_:1})]),_:1})]),_:1})]),_:1})]),_:1}),c(t,{class:"van-cell-group page-section form-section"},{default:p(()=>[c(t,{class:"module-title section-title"},{default:p(()=>[i("span",{class:"section-icon"},[c(O,{name:"orders",size:12})]),c(l,null,{default:p(()=>[h("服务备注")]),_:1})]),_:1}),c(t,{class:"section-body"},{default:p(()=>[c(t,{class:"form-field-wrap"},{default:p(()=>[c(t,{class:"field-label"},{default:p(()=>[h("备注")]),_:1}),c(u,{modelValue:L.value.remark,"onUpdate:modelValue":a[6]||(a[6]=e=>L.value.remark=e),class:"van-field remark-textarea",placeholder:"输入本次服务过程、状态、注意事项..."},null,8,["modelValue"])]),_:1})]),_:1})]),_:1}),c(t,{class:"page-section form-submit-wrap"},{default:p(()=>[c(s,{class:"van-button van-button--primary van-button--block report-submit-btn",onClick:le},{default:p(()=>[h("提交并生成分享链接")]),_:1})]),_:1})])),X.value?(g(),m(t,{key:2,class:"loading-mask"},{default:p(()=>[c(t,{class:"loading-box"},{default:p(()=>[h("提交中...")]),_:1})]),_:1})):v("",!0)]),c(J,{"current-page":"report",onChange:f(E)},null,8,["onChange"])],64)}}},[["__scopeId","data-v-e2283bdf"]]);export{F as default};
diff --git a/dist/build/h5/assets/pages-report-view-reportView.DYnt0bpU.js b/dist/build/h5/assets/pages-report-view-reportView.DYnt0bpU.js
new file mode 100644
index 0000000..9a31454
--- /dev/null
+++ b/dist/build/h5/assets/pages-report-view-reportView.DYnt0bpU.js
@@ -0,0 +1 @@
+import{R as e,S as l,T as a,U as t,r as s,p as o,u as n,c as i,d as r,b as f,w as c,t as d,e as u,v,x as p,z as m,M as h,O as _,f as g,V as b,i as x,g as y,A as T,h as P,W as k,j as S}from"./index-DrZc8biM.js";import{q as w,i as A}from"./index.DsJtDI4O.js";import{a as C}from"./datetime.CB5sbvg8.js";import{A as j}from"./AppIcon.M7CZvvJr.js";import{_ as q,n as I}from"./_plugin-vue_export-helper.2L545UbL.js";const N=(a=>(s,o=l())=>{!t&&e(a,s,o)})(a),R=q({__name:"reportView",setup(e){const l=s(!0),a=s(!1),t=s(null),q=s(null),R=s(""),L=`padding-top:${((null==(U=o)?void 0:U().statusBarHeight)||20)+10}px;`;var U;const $=e=>C(e),z=()=>{I("home")},B=e=>new Promise(l=>{const a=new Image;a.crossOrigin="anonymous",a.onload=()=>l(a),a.onerror=()=>l(null),a.src=e}),E=async()=>{var e,l,a;if(!t.value)return;S({title:"正在生成海报...",icon:"none"});const s=t.value,o=q.value,n=o.getContext("2d");o.width=750,o.height=1100,n.fillStyle="#ffffff",n.fillRect(0,0,750,1100);const i=n.createLinearGradient(0,0,750,300);i.addColorStop(0,"#07c160"),i.addColorStop(1,"#10b76f"),n.fillStyle=i,n.fillRect(0,0,750,300);const r=(null==(e=s.store)?void 0:e.name)||"宠伴生活馆",f=(null==(l=s.store)?void 0:l.phone)||"",c=(null==(a=s.store)?void 0:a.address)||"";if(n.fillStyle="#ffffff",n.font="bold 36px sans-serif",n.textAlign="center",n.fillText(r,375,70),n.font="20px sans-serif",n.globalAlpha=.7,n.fillText("宠物服务,让爱更专业",375,105),n.globalAlpha=1,f||c){n.font="18px sans-serif",n.globalAlpha=.85;const e=[f,c].filter(Boolean).join(" | ");n.fillText(e,375,138),n.globalAlpha=1}n.fillStyle="#333333",n.font="bold 36px sans-serif",n.fillText("服务报告",375,220),n.fillStyle="#f8f6f3",n.beginPath(),F(n,40,260,670,220,20),n.fill();const d=[["宠物名字",s.petName||"-"],["服务项目",s.serviceType||"-"],["服务时间",$(s.appointmentTime)||"-"],["服务技师",s.staffName||"-"]];let u=310;n.textAlign="left",d.forEach(([e,l])=>{n.fillStyle="#999999",n.font="22px sans-serif",n.fillText(e,80,u),n.fillStyle="#333333",n.font="bold 24px sans-serif",n.fillText(l,220,u),u+=48}),n.fillStyle="#f8f6f3",n.beginPath(),F(n,40,500,670,360,20),n.fill(),n.fillStyle="#333333",n.font="bold 24px sans-serif",n.textAlign="center",n.fillText("服务前后对比",375,545);const v=575,p=260,m=300;if(n.fillStyle="#e0e0e0",n.beginPath(),F(n,60,v,m,p,16),n.fill(),n.fillStyle="#999999",n.font="20px sans-serif",n.fillText("服务前",210,705),n.fillStyle="#e0e0e0",n.beginPath(),F(n,390,v,m,p,16),n.fill(),n.fillStyle="#999999",n.fillText("服务后",540,705),s.remark){n.fillStyle="#f8f6f3",n.beginPath(),F(n,40,880,670,100,20),n.fill(),n.fillStyle="#666666",n.font="22px sans-serif",n.textAlign="left";const e=s.remark;e.length>30?(n.fillText(e.substring(0,30),70,920),n.fillText(e.substring(30),70,955)):n.fillText(e,70,930)}n.fillStyle="#07c160",n.font="bold 22px sans-serif",n.textAlign="center",n.fillText(`— ${r} —`,375,1050);const h=s.beforePhoto?A(s.beforePhoto):null,_=s.afterPhoto?A(s.afterPhoto):null,[g,b]=await Promise.all([h?B(h):Promise.resolve(null),_?B(_):Promise.resolve(null)]);g&&(n.save(),n.beginPath(),F(n,60,v,m,p,16),n.clip(),n.drawImage(g,60,v,m,p),n.restore()),b&&(n.save(),n.beginPath(),F(n,390,v,m,p,16),n.clip(),n.drawImage(b,390,v,m,p),n.restore());const x=document.createElement("a");x.download=`服务报告_${s.petName||"宠物"}.png`,x.href=o.toDataURL("image/png"),x.click()};function F(e,l,a,t,s,o){e.beginPath(),e.moveTo(l+o,a),e.lineTo(l+t-o,a),e.quadraticCurveTo(l+t,a,l+t,a+o),e.lineTo(l+t,a+s-o),e.quadraticCurveTo(l+t,a+s,l+t-o,a+s),e.lineTo(l+o,a+s),e.quadraticCurveTo(l,a+s,l,a+s-o),e.lineTo(l,a+o),e.quadraticCurveTo(l,a,l+o,a),e.closePath()}return N(e=>{R.value=(null==e?void 0:e.token)||""}),n(()=>(async()=>{let e=R.value;if(e=new URLSearchParams(window.location.search).get("token"),!e)return a.value=!0,void(l.value=!1);h({title:"加载中..."});const s=await w(e);_(),l.value=!1,200===s.code?t.value=s.data:a.value=!0})()),(e,s)=>{var o,n,h;const _=g,S=T,w=b,C=x,I=k;return y(),i("div",{class:"report-view"},[l.value?(y(),i("div",{key:0,class:"loading-wrap"},[r(_,{class:"loading-spinner"}),f("span",null,"加载报告中...")])):a.value?(y(),i("div",{key:1,class:"not-found"},[r(_,{class:"empty"},{default:c(()=>[r(S,null,{default:c(()=>[P("报告不存在或链接已失效")]),_:1})]),_:1})])):t.value?(y(),i("div",{key:2,class:"report-content"},[f("div",{class:"brand-header",style:v(p(L))},[f("div",{class:"header-actions"},[r(_,{class:"header-btn",onClick:z},{default:c(()=>[r(j,{name:"home",size:15,color:"#ffffff"})]),_:1}),r(_,{class:"header-placeholder"})]),f("div",{class:"brand-logo"},d((null==(o=t.value.store)?void 0:o.name)||"宠伴生活馆"),1),f("div",{class:"brand-sub"},"宠物服务,让爱更专业"),f("div",{class:"brand-contact"},[(null==(n=t.value.store)?void 0:n.phone)?(y(),i("span",{key:0},"电话:"+d(t.value.store.phone),1)):u("",!0),(null==(h=t.value.store)?void 0:h.address)?(y(),i("span",{key:1},"地址:"+d(t.value.store.address),1)):u("",!0)])],4),f("div",{class:"report-title-wrap"},[f("div",{class:"report-title"},"服务报告"),f("div",{class:"report-time"},d($(t.value.appointmentTime)),1)]),r(_,{class:"van-cell-group service-info"},{default:c(()=>[r(_,{class:"van-cell"},{default:c(()=>[r(_,{class:"van-cell__title"},{default:c(()=>[P("宠物名字")]),_:1}),r(_,{class:"van-cell__value"},{default:c(()=>[P(d(t.value.petName),1)]),_:1})]),_:1}),r(_,{class:"van-cell"},{default:c(()=>[r(_,{class:"van-cell__title"},{default:c(()=>[P("服务项目")]),_:1}),r(_,{class:"van-cell__value"},{default:c(()=>[P(d(t.value.serviceType),1)]),_:1})]),_:1}),r(_,{class:"van-cell"},{default:c(()=>[r(_,{class:"van-cell__title"},{default:c(()=>[P("服务时间")]),_:1}),r(_,{class:"van-cell__value"},{default:c(()=>[P(d($(t.value.appointmentTime)),1)]),_:1})]),_:1}),r(_,{class:"van-cell"},{default:c(()=>[r(_,{class:"van-cell__title"},{default:c(()=>[P("服务技师")]),_:1}),r(_,{class:"van-cell__value"},{default:c(()=>[P(d(t.value.staffName||"-"),1)]),_:1})]),_:1})]),_:1}),f("div",{class:"photo-section section-card"},[f("div",{class:"section-label"},"服务前后对比"),f("div",{class:"photo-grid"},[t.value.beforePhoto?(y(),m(w,{key:0,src:p(A)(t.value.beforePhoto),class:"photo-image",mode:"aspectFill"},null,8,["src"])):(y(),m(_,{key:1,class:"photo-empty"},{default:c(()=>[P("暂无照片")]),_:1})),t.value.afterPhoto?(y(),m(w,{key:2,src:p(A)(t.value.afterPhoto),class:"photo-image",mode:"aspectFill"},null,8,["src"])):(y(),m(_,{key:3,class:"photo-empty"},{default:c(()=>[P("暂无照片")]),_:1}))])]),f("div",{class:"remark-section section-card"},[f("div",{class:"section-label"},"备注"),f("div",{class:"remark-content"},d(t.value.remark||"暂无备注"),1)]),f("div",{class:"action-section"},[r(C,{class:"van-button van-button--primary van-button--round van-button--block",onClick:E},{default:c(()=>[P("生成图片分享朋友圈")]),_:1})])])):u("",!0),r(I,{ref_key:"posterCanvas",ref:q,style:{position:"fixed",top:"-9999px",left:"-9999px"}},null,512)])}}},[["__scopeId","data-v-3d43fb47"]]);export{R as default};
diff --git a/dist/build/h5/assets/reportView-D1bRLJLP.css b/dist/build/h5/assets/reportView-D1bRLJLP.css
new file mode 100644
index 0000000..ebf3d7c
--- /dev/null
+++ b/dist/build/h5/assets/reportView-D1bRLJLP.css
@@ -0,0 +1 @@
+.report-view[data-v-3d43fb47]{background:#f5f7fb;min-height:100vh}.loading-wrap[data-v-3d43fb47]{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;gap:16px;color:#999}.loading-spinner[data-v-3d43fb47]{width:32px;height:32px;border:3px solid #e0e0e0;border-top-color:#07c160;border-radius:50%;animation:spin-3d43fb47 .8s linear infinite}@keyframes spin-3d43fb47{to{transform:rotate(360deg)}}.not-found[data-v-3d43fb47]{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh}.report-content[data-v-3d43fb47]{max-width:430px;margin:0 auto;background:#f8fafc;min-height:100vh;box-shadow:0 10px 30px rgba(15,23,42,.06)}.brand-header[data-v-3d43fb47]{background:linear-gradient(135deg,#22c55e,#16a34a);padding:20px 20px 18px;text-align:center;color:#fff;border-radius:0 0 16px 16px;box-shadow:0 8px 20px rgba(34,197,94,.24);position:relative}.header-actions[data-v-3d43fb47]{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.header-btn[data-v-3d43fb47]{width:30px;height:30px;border-radius:999px;border:1px solid rgba(255,255,255,.45);background:rgba(255,255,255,.2);display:inline-flex;align-items:center;justify-content:center}.header-placeholder[data-v-3d43fb47]{width:30px;height:30px}.brand-logo[data-v-3d43fb47]{font-size:20px;font-weight:700;letter-spacing:1px;margin-bottom:4px}.brand-sub[data-v-3d43fb47]{font-size:12px;opacity:.7;margin-bottom:12px}.brand-contact[data-v-3d43fb47]{font-size:12px;opacity:.85;display:flex;justify-content:center;gap:16px;flex-wrap:wrap}.report-title-wrap[data-v-3d43fb47]{text-align:center;padding:20px 20px 14px}.report-title[data-v-3d43fb47]{font-size:22px;font-weight:700;color:#333}.report-time[data-v-3d43fb47]{font-size:13px;color:#999;margin-top:6px}.service-info[data-v-3d43fb47]{margin:0 16px 12px;border-radius:14px!important}.section-card[data-v-3d43fb47]{margin:0 16px 12px;background:#fff;border:1px solid #e8edf4;border-radius:14px;padding:12px;box-shadow:0 6px 16px rgba(15,23,42,.04)}.section-label[data-v-3d43fb47]{font-size:15px;font-weight:700;color:#1f2937;margin-bottom:10px}.photo-grid[data-v-3d43fb47]{display:grid;grid-template-columns:1fr 1fr;gap:12px}.photo-image[data-v-3d43fb47]{width:100%;aspect-ratio:1 / 1;border-radius:12px;border:1px solid #e5e7eb}.photo-empty[data-v-3d43fb47]{width:100%;aspect-ratio:1 / 1;background:#f1f5f9;border:1px dashed #d1d9e6;border-radius:12px;display:flex;align-items:center;justify-content:center;color:#94a3b8;font-size:13px}.remark-content[data-v-3d43fb47]{background:#f8fafc;border:1px solid #e8edf4;border-radius:12px;padding:14px;font-size:14px;color:#64748b;line-height:1.6;min-height:60px}.action-section[data-v-3d43fb47]{margin:0 16px 24px}
diff --git a/dist/build/h5/assets/uni.dacb0817.css b/dist/build/h5/assets/uni.dacb0817.css
new file mode 100644
index 0000000..9290d5a
--- /dev/null
+++ b/dist/build/h5/assets/uni.dacb0817.css
@@ -0,0 +1 @@
+uni-scroll-view{display:block;width:100%}uni-scroll-view[hidden]{display:none}.uni-scroll-view{position:relative;-webkit-overflow-scrolling:touch;width:100%;height:100%;max-height:inherit}.uni-scroll-view-scrollbar-hidden::-webkit-scrollbar{display:none}.uni-scroll-view-scrollbar-hidden{-moz-scrollbars:none;scrollbar-width:none}.uni-scroll-view-content{width:100%;height:100%}uni-button{position:relative;display:block;margin-left:auto;margin-right:auto;padding-left:14px;padding-right:14px;box-sizing:border-box;font-size:18px;text-align:center;text-decoration:none;line-height:2.55555556;border-radius:5px;-webkit-tap-highlight-color:transparent;overflow:hidden;color:#000;background-color:#f8f8f8;cursor:pointer}uni-button[hidden]{display:none!important}uni-button:after{content:" ";width:200%;height:200%;position:absolute;top:0;left:0;border:1px solid rgba(0,0,0,.2);transform:scale(.5);transform-origin:0 0;box-sizing:border-box;border-radius:10px}uni-button[native]{padding-left:0;padding-right:0}uni-button[native] .uni-button-cover-view-wrapper{border:inherit;border-color:inherit;border-radius:inherit;background-color:inherit}uni-button[native] .uni-button-cover-view-inner{padding-left:14px;padding-right:14px}uni-button uni-cover-view{line-height:inherit;white-space:inherit}uni-button[type=default]{color:#000;background-color:#f8f8f8}uni-button[type=primary]{color:#fff;background-color:#007aff}uni-button[type=warn]{color:#fff;background-color:#e64340}uni-button[disabled]{color:rgba(255,255,255,.6);cursor:not-allowed}uni-button[disabled][type=default],uni-button[disabled]:not([type]){color:rgba(0,0,0,.3);background-color:#f7f7f7}uni-button[disabled][type=primary]{background-color:rgba(0,122,255,.6)}uni-button[disabled][type=warn]{background-color:#ec8b89}uni-button[type=primary][plain]{color:#007aff;border:1px solid #007aff;background-color:transparent}uni-button[type=primary][plain][disabled]{color:rgba(0,0,0,.2);border-color:rgba(0,0,0,.2)}uni-button[type=primary][plain]:after{border-width:0}uni-button[type=default][plain]{color:#353535;border:1px solid #353535;background-color:transparent}uni-button[type=default][plain][disabled]{color:rgba(0,0,0,.2);border-color:rgba(0,0,0,.2)}uni-button[type=default][plain]:after{border-width:0}uni-button[plain]{color:#353535;border:1px solid #353535;background-color:transparent}uni-button[plain][disabled]{color:rgba(0,0,0,.2);border-color:rgba(0,0,0,.2)}uni-button[plain]:after{border-width:0}uni-button[plain][native] .uni-button-cover-view-inner{padding:0}uni-button[type=warn][plain]{color:#e64340;border:1px solid #e64340;background-color:transparent}uni-button[type=warn][plain][disabled]{color:rgba(0,0,0,.2);border-color:rgba(0,0,0,.2)}uni-button[type=warn][plain]:after{border-width:0}uni-button[size=mini]{display:inline-block;line-height:2.3;font-size:13px;padding:0 1.34em}uni-button[size=mini][native]{padding:0}uni-button[size=mini][native] .uni-button-cover-view-inner{padding:0 1.34em}uni-button[loading]:not([disabled]){cursor:progress}uni-button[loading]:before{content:" ";display:inline-block;width:18px;height:18px;vertical-align:middle;animation:uni-loading 1s steps(12,end) infinite;background-size:100%}uni-button[loading][type=primary]{color:rgba(255,255,255,.6);background-color:#0062cc}uni-button[loading][type=primary][plain]{color:#007aff;background-color:transparent}uni-button[loading][type=default]{color:rgba(0,0,0,.6);background-color:#dedede}uni-button[loading][type=default][plain]{color:#353535;background-color:transparent}uni-button[loading][type=warn]{color:rgba(255,255,255,.6);background-color:#ce3c39}uni-button[loading][type=warn][plain]{color:#e64340;background-color:transparent}uni-button[loading][native]:before{content:none}.button-hover{color:rgba(0,0,0,.6);background-color:#dedede}.button-hover[plain]{color:rgba(53,53,53,.6);border-color:rgba(53,53,53,.6);background-color:transparent}.button-hover[type=primary]{color:rgba(255,255,255,.6);background-color:#0062cc}.button-hover[type=primary][plain]{color:rgba(0,122,255,.6);border-color:rgba(0,122,255,.6);background-color:transparent}.button-hover[type=default]{color:rgba(0,0,0,.6);background-color:#dedede}.button-hover[type=default][plain]{color:rgba(53,53,53,.6);border-color:rgba(53,53,53,.6);background-color:transparent}.button-hover[type=warn]{color:rgba(255,255,255,.6);background-color:#ce3c39}.button-hover[type=warn][plain]{color:rgba(230,67,64,.6);border-color:rgba(230,67,64,.6);background-color:transparent}uni-canvas{width:300px;height:150px;display:block;position:relative}uni-canvas>.uni-canvas-canvas{position:absolute;top:0;left:0;width:100%;height:100%}uni-image{width:320px;height:240px;display:inline-block;overflow:hidden;position:relative}uni-image[hidden]{display:none}uni-image>div{width:100%;height:100%;background-repeat:no-repeat}uni-image>img{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;display:block;position:absolute;top:0;left:0;width:100%;height:100%;opacity:0}uni-image>.uni-image-will-change{will-change:transform}uni-input{display:block;font-size:16px;line-height:1.4em;height:1.4em;min-height:1.4em;overflow:hidden}uni-input[hidden]{display:none}.uni-input-wrapper,.uni-input-placeholder,.uni-input-form,.uni-input-input{outline:none;border:none;padding:0;margin:0;text-decoration:inherit}.uni-input-wrapper,.uni-input-form{display:flex;position:relative;width:100%;height:100%;flex-direction:column;justify-content:center}.uni-input-placeholder,.uni-input-input{width:100%}.uni-input-placeholder{position:absolute;top:auto!important;left:0;color:gray;overflow:hidden;text-overflow:clip;white-space:pre;word-break:keep-all;pointer-events:none;line-height:inherit}.uni-input-input{position:relative;display:block;height:100%;background:none;color:inherit;opacity:1;font:inherit;line-height:inherit;letter-spacing:inherit;text-align:inherit;text-indent:inherit;text-transform:inherit;text-shadow:inherit}.uni-input-input[type=search]::-webkit-search-cancel-button,.uni-input-input[type=search]::-webkit-search-decoration{display:none}.uni-input-input::-webkit-outer-spin-button,.uni-input-input::-webkit-inner-spin-button{-webkit-appearance:none;appearance:none;margin:0}.uni-input-input[type=number]{-moz-appearance:textfield}.uni-input-input:disabled{-webkit-text-fill-color:currentcolor}uni-picker-view-column{flex:1;position:relative;height:100%;overflow:hidden}uni-picker-view-column[hidden]{display:none}.uni-picker-view-group{height:100%;overflow:hidden}.uni-picker-view-mask{transform:translateZ(0)}.uni-picker-view-indicator,.uni-picker-view-mask{position:absolute;left:0;width:100%;z-index:3;pointer-events:none}.uni-picker-view-mask{top:0;height:100%;margin:0 auto;background-image:linear-gradient(180deg,rgba(255,255,255,.95),rgba(255,255,255,.6)),linear-gradient(0deg,rgba(255,255,255,.95),rgba(255,255,255,.6));background-position:top,bottom;background-size:100% 102px;background-repeat:no-repeat;transform:translateZ(0)}.uni-picker-view-indicator{height:34px;top:50%;transform:translateY(-50%)}.uni-picker-view-content{position:absolute;top:0;left:0;width:100%;will-change:transform;padding:102px 0;cursor:pointer}.uni-picker-view-content>*{height:var(--picker-view-column-indicator-height);overflow:hidden}.uni-picker-view-indicator:before{top:0;border-top:1px solid #e5e5e5;transform-origin:0 0;transform:scaleY(.5)}.uni-picker-view-indicator:after{bottom:0;border-bottom:1px solid #e5e5e5;transform-origin:0 100%;transform:scaleY(.5)}.uni-picker-view-indicator:after,.uni-picker-view-indicator:before{content:" ";position:absolute;left:0;right:0;height:1px;color:#e5e5e5}uni-picker-view{display:block}.uni-picker-view-wrapper{display:flex;position:relative;overflow:hidden;height:100%}uni-picker-view[hidden]{display:none}@keyframes once-show{0%{top:0}}uni-resize-sensor,uni-resize-sensor>div{position:absolute;left:0;top:0;right:0;bottom:0;overflow:hidden}uni-resize-sensor{display:block;z-index:-1;visibility:hidden;animation:once-show 1ms}uni-resize-sensor>div>div{position:absolute;left:0;top:0}uni-resize-sensor>div:first-child>div{width:100000px;height:100000px}uni-resize-sensor>div:last-child>div{width:200%;height:200%}uni-text[selectable]{cursor:auto;-webkit-user-select:text;user-select:text}uni-text{white-space:pre-line}uni-textarea{width:300px;height:150px;display:block;position:relative;font-size:16px;line-height:normal;white-space:pre-wrap;word-break:break-all}uni-textarea[hidden]{display:none}.uni-textarea-wrapper,.uni-textarea-placeholder,.uni-textarea-line,.uni-textarea-compute,.uni-textarea-textarea{outline:none;border:none;padding:0;margin:0;text-decoration:inherit}.uni-textarea-wrapper{display:block;position:relative;width:100%;height:100%;min-height:inherit;overflow-y:hidden}.uni-textarea-placeholder,.uni-textarea-line,.uni-textarea-compute,.uni-textarea-textarea{position:absolute;width:100%;height:100%;left:0;top:0;white-space:inherit;word-break:inherit}.uni-textarea-placeholder{color:gray;overflow:hidden}.uni-textarea-line,.uni-textarea-compute{visibility:hidden;height:auto}.uni-textarea-line{width:1em}.uni-textarea-textarea{resize:none;background:none;color:inherit;opacity:1;font:inherit;line-height:inherit;letter-spacing:inherit;text-align:inherit;text-indent:inherit;text-transform:inherit;text-shadow:inherit}.uni-textarea-textarea-fix-margin{width:auto;right:0;margin:0 -3px}.uni-textarea-textarea:disabled{-webkit-text-fill-color:currentcolor}uni-view{display:block}uni-view[hidden]{display:none}uni-map{position:relative;width:300px;height:150px;display:block}uni-map[hidden]{display:none}.amap-marker-label{padding:0;border:none;background-color:transparent}.amap-marker>.amap-icon>img{left:0!important;top:0!important}.uni-map-control{position:absolute;width:0;height:0;top:0;left:0;z-index:999}.uni-map-control-icon{position:absolute;max-width:initial}.uni-system-choose-location{display:block;position:fixed;left:0;top:0;width:100%;height:100%;background:#f8f8f8;z-index:999}.uni-system-choose-location .map{position:absolute;top:0;left:0;width:100%;height:300px}.uni-system-choose-location .map-location{position:absolute;left:50%;bottom:50%;width:32px;height:52px;margin-left:-16px;cursor:pointer;background-size:100%}.uni-system-choose-location .map-move{position:absolute;bottom:50px;right:10px;width:40px;height:40px;box-sizing:border-box;line-height:40px;background-color:#fff;border-radius:50%;pointer-events:auto;cursor:pointer;box-shadow:0 0 5px 1px rgba(0,0,0,.3)}.uni-system-choose-location .map-move>svg{display:block;width:100%;height:100%;box-sizing:border-box;padding:8px}.uni-system-choose-location .nav{position:absolute;top:0;left:0;width:100%;height:44px;background-color:transparent;background-image:linear-gradient(to bottom,rgba(0,0,0,.3),rgba(0,0,0,0))}.uni-system-choose-location .nav-btn{position:absolute;box-sizing:border-box;top:0;left:0;width:60px;height:44px;padding:6px;line-height:32px;font-size:26px;color:#fff;text-align:center;cursor:pointer}.uni-system-choose-location .nav-btn.confirm{left:auto;right:0}.uni-system-choose-location .nav-btn.disable{opacity:.4}.uni-system-choose-location .nav-btn>svg{display:block;width:100%;height:100%;border-radius:2px;box-sizing:border-box;padding:3px}.uni-system-choose-location .nav-btn.confirm>svg{background-color:#007aff;padding:5px}.uni-system-choose-location .menu{position:absolute;top:300px;left:0;width:100%;bottom:0;background-color:#fff}.uni-system-choose-location .search{display:flex;flex-direction:row;height:50px;padding:8px;line-height:34px;box-sizing:border-box;background-color:#fff}.uni-system-choose-location .search-input{flex:1;height:100%;border-radius:5px;padding:0 5px;background:#ebebeb}.uni-system-choose-location .search-btn{margin-left:5px;color:#007aff;font-size:17px;text-align:center}.uni-system-choose-location .list{position:absolute;top:50px;left:0;width:100%;bottom:0;padding-bottom:10px}.uni-system-choose-location .list-loading{display:flex;height:50px;justify-content:center;align-items:center}.uni-system-choose-location .list-item{position:relative;padding:10px 40px 10px 10px;cursor:pointer}.uni-system-choose-location .list-item>svg{display:none;position:absolute;top:50%;right:10px;width:30px;height:30px;margin-top:-15px;box-sizing:border-box;padding:5px}.uni-system-choose-location .list-item.selected>svg{display:block}.uni-system-choose-location .list-item:not(:last-child):after{position:absolute;content:"";height:1px;left:10px;bottom:0;width:100%;background-color:#d3d3d3}.uni-system-choose-location .list-item-title{font-size:14px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.uni-system-choose-location .list-item-detail{font-size:12px;color:gray;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}@media screen and (min-width: 800px){.uni-system-choose-location .map{top:0;height:100%}.uni-system-choose-location .map-move{bottom:10px;right:320px}.uni-system-choose-location .menu{top:54px;left:auto;right:10px;width:300px;bottom:10px;max-height:600px;box-shadow:0 0 20px 5px rgba(0,0,0,.3)}}uni-modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:999;display:block;box-sizing:border-box}.uni-modal{position:fixed;z-index:999;width:80%;max-width:300px;top:50%;left:50%;transform:translate(-50%,-50%);background-color:#fff;text-align:center;border-radius:3px;overflow:hidden}.uni-modal *{box-sizing:border-box}.uni-modal__hd{padding:1em 1.6em .3em}.uni-modal__title{font-weight:400;font-size:18px;word-wrap:break-word;word-break:break-all;white-space:pre-wrap;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.uni-modal__bd{padding:1.3em 1.6em;min-height:40px;font-size:15px;line-height:1.4;word-wrap:break-word;word-break:break-all;white-space:pre-wrap;color:#999;max-height:400px;overflow-x:hidden;overflow-y:auto}.uni-modal__textarea{resize:none;border:0;margin:0;width:90%;padding:10px;font-size:20px;outline:none;border:none;background-color:#eee;text-decoration:inherit}.uni-modal__ft{position:relative;line-height:48px;font-size:18px;display:flex}.uni-modal__ft:after{content:" ";position:absolute;left:0;top:0;right:0;height:1px;border-top:1px solid #d5d5d6;color:#d5d5d6;transform-origin:0 0;transform:scaleY(.5)}.uni-modal__btn{display:block;flex:1;color:#3cc51f;text-decoration:none;-webkit-tap-highlight-color:rgba(0,0,0,0);position:relative;cursor:pointer}.uni-modal__btn:active{background-color:#eee}.uni-modal__btn:after{content:" ";position:absolute;left:0;top:0;width:1px;bottom:0;border-left:1px solid #d5d5d6;color:#d5d5d6;transform-origin:0 0;transform:scaleX(.5)}.uni-modal__btn:first-child:after{display:none}.uni-modal__btn_default{color:#353535}.uni-modal__btn_primary{color:#007aff}uni-toast{position:fixed;top:0;right:0;bottom:0;left:0;z-index:999;display:block;box-sizing:border-box;pointer-events:none;font-size:16px}.uni-sample-toast{position:fixed;z-index:999;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center;max-width:80%}.uni-simple-toast__text{display:inline-block;vertical-align:middle;color:#fff;background-color:rgba(17,17,17,.7);padding:10px 20px;border-radius:5px;font-size:13px;text-align:center;max-width:100%;word-break:break-all;white-space:normal}uni-toast .uni-mask{pointer-events:auto}.uni-toast{position:fixed;z-index:999;width:8em;top:50%;left:50%;transform:translate(-50%,-50%);background:rgba(17,17,17,.7);text-align:center;border-radius:5px;color:#fff}.uni-toast *{box-sizing:border-box}.uni-toast__icon{margin:20px 0 0;width:38px!important;height:38px!important;vertical-align:baseline!important}.uni-icon_toast{margin:15px 0 0}.uni-icon_toast.uni-icon-success-no-circle:before{color:#fff;font-size:55px}.uni-icon_toast.uni-loading{margin:20px 0 0;width:38px;height:38px;vertical-align:baseline}.uni-toast__content{margin:0 0 15px}uni-picker{position:relative;display:block;cursor:pointer}uni-picker[hidden]{display:none}uni-picker[disabled]{cursor:not-allowed}.uni-picker-container{display:none;position:fixed;left:0;right:0;top:0;bottom:0;box-sizing:border-box;z-index:999;font-size:16px}.uni-picker-container .uni-picker-custom *{box-sizing:border-box}.uni-picker-container .uni-picker-custom{position:fixed;left:0;bottom:0;transform:translateY(100%);backface-visibility:hidden;z-index:999;width:100%;background-color:#fff;visibility:hidden;transition:transform .3s,visibility .3s}.uni-picker-container .uni-picker-custom.uni-picker-toggle{visibility:visible;transform:translate(0)}.uni-picker-container .uni-picker-content{position:relative;display:block;width:100%;height:238px;background-color:#fff}.uni-picker-container .uni-picker-item{padding:0;height:34px;line-height:34px;text-align:center;color:#000;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;cursor:pointer}.uni-picker-container .uni-picker-header{display:block;position:relative;text-align:center;width:100%;height:45px}.uni-picker-container .uni-picker-header:after{content:"";position:absolute;left:0;bottom:0;right:0;height:1px;clear:both;border-bottom:1px solid #e5e5e5;color:#e5e5e5;transform-origin:0 100%;transform:scaleY(.5)}.uni-picker-container .uni-picker-action{display:block;max-width:50%;top:0;height:100%;box-sizing:border-box;padding:0 14px;font-size:17px;line-height:45px;overflow:hidden;cursor:pointer}.uni-picker-container .uni-picker-action.uni-picker-action-cancel{float:left;color:#888}.uni-picker-container .uni-picker-action.uni-picker-action-confirm{float:right;color:#007aff}.uni-picker-container .uni-picker-select{display:none}.uni-picker-system{position:absolute;display:none;display:block;top:0;left:0;width:100%;height:100%;overflow:hidden}.uni-picker-system>.uni-picker-system_input{position:absolute;border:none;height:100%;opacity:0;cursor:pointer}.uni-picker-system>.uni-picker-system_input.firefox{top:0;left:0;width:100%}.uni-picker-system>.uni-picker-system_input.chrome{top:0;left:0;width:2em;font-size:32px;height:32px}@media screen and (min-width: 500px) and (min-height: 500px){.uni-mask.uni-picker-mask{background:none}.uni-picker-container .uni-picker-custom{width:300px;left:50%;right:auto;top:50%;bottom:auto;transform:translate(-50%,-50%);opacity:0;border-radius:5px;transition:opacity .3s,visibility .3s;box-shadow:0 0 20px 5px rgba(0,0,0,.3)}.uni-picker-container .uni-picker-header{border-radius:5px 5px 0 0}.uni-picker-container .uni-picker-content{transform:translate(0 0);overflow:hidden;border-radius:0 0 5px 5px}.uni-picker-container .uni-picker-custom.uni-picker-toggle{opacity:1;transform:translate(-50%,-50%)}.uni-selector-select .uni-picker-header,.uni-selector-select .uni-picker-content{display:none}.uni-selector-select .uni-picker-select{display:block;max-height:300px;overflow:auto;background-color:#fff;border-radius:5px;padding:6px 0}.uni-selector-select .uni-picker-item{padding:0 10px;color:#555}.uni-selector-select .uni-picker-item:hover{background-color:#f6f6f6}.uni-selector-select .uni-picker-item.selected{color:#007aff}}
diff --git a/dist/build/h5/assets/useNavigator-uhlsy5Ae.css b/dist/build/h5/assets/useNavigator-uhlsy5Ae.css
new file mode 100644
index 0000000..41dfb34
--- /dev/null
+++ b/dist/build/h5/assets/useNavigator-uhlsy5Ae.css
@@ -0,0 +1 @@
+.tabbar[data-v-09922235]{position:fixed;bottom:0;left:0;right:0;height:calc(3.25rem + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom);background:rgba(255,255,255,.96);backdrop-filter:blur(8px);border-top:1px solid #e8edf4;display:flex;flex-direction:row;z-index:999}.tabbar-item[data-v-09922235]{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;color:#94a3b8;transition:color .2s ease}.tabbar-item.active[data-v-09922235]{color:#16a34a}.tabbar-icon[data-v-09922235]{width:1.25rem;height:1.25rem;border-radius:.34375rem;background:#eaf0f7;display:flex;align-items:center;justify-content:center;margin-bottom:.125rem}.tabbar-item.active .tabbar-icon[data-v-09922235]{background:#dcfce7}.tabbar-text[data-v-09922235]{font-size:.6875rem;line-height:1;font-weight:600}
diff --git a/dist/build/h5/assets/useNavigator.BKsocaY0.js b/dist/build/h5/assets/useNavigator.BKsocaY0.js
new file mode 100644
index 0000000..54eb227
--- /dev/null
+++ b/dist/build/h5/assets/useNavigator.BKsocaY0.js
@@ -0,0 +1 @@
+import{g as a,z as e,w as t,d as r,f as s,A as c,h as o,B as l}from"./index-DrZc8biM.js";import{A as n}from"./AppIcon.M7CZvvJr.js";import{_ as i,n as u}from"./_plugin-vue_export-helper.2L545UbL.js";const b=i({__name:"TabBar",props:{currentPage:{type:String,default:"home"}},emits:["change"],setup(i,{emit:u}){const b=i,m=u;function p(a){b.currentPage!==a&&m("change",a)}return(i,u)=>{const m=s,g=c;return a(),e(m,{class:"tabbar"},{default:t(()=>[r(m,{class:l(["tabbar-item",{active:"home"===b.currentPage}]),onClick:u[0]||(u[0]=a=>p("home"))},{default:t(()=>[r(m,{class:"tabbar-icon"},{default:t(()=>[r(n,{name:"home",size:16,color:"home"===b.currentPage?"#16a34a":"#64748b"},null,8,["color"])]),_:1}),r(g,{class:"tabbar-text"},{default:t(()=>[o("服务预约")]),_:1})]),_:1},8,["class"]),r(m,{class:l(["tabbar-item",{active:"report"===b.currentPage}]),onClick:u[1]||(u[1]=a=>p("report"))},{default:t(()=>[r(m,{class:"tabbar-icon"},{default:t(()=>[r(n,{name:"report",size:16,color:"report"===b.currentPage?"#16a34a":"#64748b"},null,8,["color"])]),_:1}),r(g,{class:"tabbar-text"},{default:t(()=>[o("洗美报告")]),_:1})]),_:1},8,["class"]),r(m,{class:l(["tabbar-item",{active:"mine"===b.currentPage}]),onClick:u[2]||(u[2]=a=>p("mine"))},{default:t(()=>[r(m,{class:"tabbar-icon"},{default:t(()=>[r(n,{name:"mine",size:16,color:"mine"===b.currentPage?"#16a34a":"#64748b"},null,8,["color"])]),_:1}),r(g,{class:"tabbar-text"},{default:t(()=>[o("我的")]),_:1})]),_:1},8,["class"])]),_:1})}}},[["__scopeId","data-v-09922235"]]),m=()=>({goPage:a=>{u(a)},navigateTo:u});export{b as T,m as u};
diff --git a/dist/build/h5/index.html b/dist/build/h5/index.html
new file mode 100644
index 0000000..7e0a772
--- /dev/null
+++ b/dist/build/h5/index.html
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+ 宠伴生活馆
+
+
+
+
+
+
+
+
diff --git a/dist/build/h5/static/make-icons.py b/dist/build/h5/static/make-icons.py
new file mode 100644
index 0000000..ee9e9d3
--- /dev/null
+++ b/dist/build/h5/static/make-icons.py
@@ -0,0 +1,92 @@
+#!/usr/bin/env python3
+"""Generate simple PNG icons for tabBar using only stdlib"""
+import struct, zlib, math, os
+
+def save_png(img_data, w, h, filepath):
+ """img_data: list of (r,g,b) tuples, row-major"""
+ def chunk(ctype, data):
+ c = ctype + data
+ return struct.pack('>I', len(data)) + c + struct.pack('>I', zlib.crc32(c) & 0xffffffff)
+ sig = b'\x89PNG\r\n\x1a\n'
+ ihdr = chunk(b'IHDR', struct.pack('>IIBBBBB', w, h, 8, 2, 0, 0, 0))
+ raw = b''
+ for row in img_data:
+ raw += b'\x00'
+ for r, g, b in row:
+ raw += bytes([r, g, b])
+ idat = chunk(b'IDAT', zlib.compress(raw, 9))
+ iend = chunk(b'IEND', b'')
+ with open(filepath, 'wb') as f:
+ f.write(sig + ihdr + idat + iend)
+
+def draw_circle(img, w, h, cx, cy, radius, r, g, b, fill=True):
+ for y in range(h):
+ for x in range(w):
+ d = math.sqrt((x-cx)**2 + (y-cy)**2)
+ if fill and d <= radius:
+ img[y][x] = (r, g, b)
+ elif not fill and abs(d - radius) < 1.0:
+ img[y][x] = (r, g, b)
+
+def solid_img(w, h, r, g, b):
+ return [[(r, g, b)] * w for _ in range(h)]
+
+def home_icon(active):
+ img = solid_img(81, 81, 0, 0, 0)
+ base = (180, 180, 180) if not active else (7, 193, 96)
+ accent = (7, 193, 96) if active else (120, 120, 120)
+ # house shape: triangle roof + rectangle body
+ roof = [(40,15),(15,40),(66,40)] # simplified triangle roof points
+ for y in range(81):
+ for x in range(81):
+ # roof triangle
+ if y <= 40 and x >= 15 and x <= 66:
+ in_roof = (y - 15) >= abs(x - 40) * 0.8
+ else:
+ in_roof = False
+ # body rectangle
+ in_body = x >= 22 and x <= 60 and y >= 38 and y <= 66
+ if in_roof or in_body:
+ img[y][x] = accent
+ return img
+
+def report_icon(active):
+ img = solid_img(81, 81, 0, 0, 0)
+ accent = (7, 193, 96) if active else (180, 180, 180)
+ for y in range(81):
+ for x in range(81):
+ # doc rectangle with folded corner
+ in_doc = x >= 20 and x <= 62 and y >= 12 and y <= 70
+ corner = x >= 46 and y <= 28 and (x - 46 + y - 28) <= 6
+ if in_doc and not corner:
+ img[y][x] = accent
+ if 28 <= y <= 50 and x >= 30 and x <= 52 and (y - 28) > abs(x - 41) * 0.7:
+ img[y][x] = (255,255,255) if active else (220,220,220)
+ return img
+
+def mine_icon(active):
+ img = solid_img(81, 81, 0, 0, 0)
+ accent = (7, 193, 96) if active else (180, 180, 180)
+ cx, cy = 40, 36
+ r = 18
+ for y in range(81):
+ for x in range(81):
+ d = math.sqrt((x-cx)**2 + (y-cy)**2)
+ if d <= r:
+ img[y][x] = accent
+ # shoulders
+ for y in range(55, 75):
+ for x in range(15, 66):
+ d = math.sqrt((x-40)**2/900 + (y-62)**2/225)
+ if d <= 1:
+ img[y][x] = accent
+ return img
+
+static = '/Users/wac/Desktop/www/_src/petstore/frontend/src/static'
+save_png(home_icon(False), 81, 81, f'{static}/tab-home.png')
+save_png(home_icon(True), 81, 81, f'{static}/tab-home-active.png')
+save_png(report_icon(False), 81, 81, f'{static}/tab-report.png')
+save_png(report_icon(True), 81, 81, f'{static}/tab-report-active.png')
+save_png(mine_icon(False), 81, 81, f'{static}/tab-mine.png')
+save_png(mine_icon(True), 81, 81, f'{static}/tab-mine-active.png')
+print('done')
diff --git a/dist/build/h5/static/tab-home-active.png b/dist/build/h5/static/tab-home-active.png
new file mode 100644
index 0000000..c910ae3
Binary files /dev/null and b/dist/build/h5/static/tab-home-active.png differ
diff --git a/dist/build/h5/static/tab-home.png b/dist/build/h5/static/tab-home.png
new file mode 100644
index 0000000..45cb0b1
Binary files /dev/null and b/dist/build/h5/static/tab-home.png differ
diff --git a/dist/build/h5/static/tab-mine-active.png b/dist/build/h5/static/tab-mine-active.png
new file mode 100644
index 0000000..5fe7d8e
Binary files /dev/null and b/dist/build/h5/static/tab-mine-active.png differ
diff --git a/dist/build/h5/static/tab-mine.png b/dist/build/h5/static/tab-mine.png
new file mode 100644
index 0000000..1231723
Binary files /dev/null and b/dist/build/h5/static/tab-mine.png differ
diff --git a/dist/build/h5/static/tab-report-active.png b/dist/build/h5/static/tab-report-active.png
new file mode 100644
index 0000000..f93146c
Binary files /dev/null and b/dist/build/h5/static/tab-report-active.png differ
diff --git a/dist/build/h5/static/tab-report.png b/dist/build/h5/static/tab-report.png
new file mode 100644
index 0000000..e5f5212
Binary files /dev/null and b/dist/build/h5/static/tab-report.png differ
diff --git a/dist/build/mp-weixin/api/index.js b/dist/build/mp-weixin/api/index.js
new file mode 100644
index 0000000..9633100
--- /dev/null
+++ b/dist/build/mp-weixin/api/index.js
@@ -0,0 +1 @@
+"use strict";const e=require("../common/vendor.js"),t="http://localhost:8080".replace(/\/$/,""),r=`${t}/api`,s=t=>new Promise((s,o)=>{e.index.request({url:r+t.url,method:t.method||"GET",data:t.data||{},header:t.header||{},success:e=>s(e.data),fail:e=>o(e)})}),o=(e,t={})=>{const r=Object.entries(t).filter(([,e])=>null!=e).map(([e,t])=>`${encodeURIComponent(e)}=${encodeURIComponent(t)}`).join("&");return s({url:`${e}${r?"?"+r:""}`,method:"GET"})},p=(e,t={})=>s({url:e,method:"POST",data:t,header:{"Content-Type":"application/json"}}),a=(e,t={})=>s({url:e,method:"PUT",data:t,header:{"Content-Type":"application/json"}}),n=e=>s({url:e,method:"DELETE"});exports.API_ORIGIN=t,exports.BASE_URL=r,exports.cancelAppointment=e=>a(`/appointment/status?id=${e}&status=cancel`),exports.createAppointment=e=>p("/appointment/create",e),exports.createReport=e=>p("/report/create",e),exports.createServiceType=(e,t)=>p("/service-type/create",{storeId:e,name:t}),exports.createStaff=e=>p("/user/create-staff",e),exports.deleteServiceType=e=>n(`/service-type/delete?id=${e}`),exports.deleteStaff=e=>n(`/user/staff?staffId=${e}`),exports.getAppointmentList=(e,t)=>o("/appointment/list",{userId:e,storeId:t}),exports.getReportByToken=e=>o("/report/get",{token:e}),exports.getReportList=e=>o("/report/list",e),exports.getServiceTypeList=e=>o("/service-type/list",{storeId:e}),exports.getStaffList=e=>o("/user/staff-list",{storeId:e}),exports.imgUrl=e=>e?e.startsWith("http")?e:`${t}${e}`:"",exports.login=(e,t)=>p("/user/login",{phone:e,code:t}),exports.registerBoss=e=>p("/user/register-boss",e),exports.registerStaff=e=>p("/user/register-staff",e),exports.sendSms=e=>p("/sms/send",{phone:e}),exports.startAppointment=(e,t)=>p("/appointment/start",{appointmentId:e,staffUserId:t}),exports.updateStore=e=>a("/store/update",e),exports.updateUser=e=>a("/user/update",e);
diff --git a/dist/build/mp-weixin/app.js b/dist/build/mp-weixin/app.js
new file mode 100644
index 0000000..9340545
--- /dev/null
+++ b/dist/build/mp-weixin/app.js
@@ -0,0 +1 @@
+"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./common/vendor.js"),n=require("./utils/session.js");Math;function r(){setTimeout(()=>{try{if(n.isLoggedIn())return;const r=getCurrentPages(),t=r[r.length-1];if((e=>!(!e||!e.includes("pages/login/Login")&&!e.includes("pages/report-view/reportView")))(t&&t.route?t.route:""))return;e.index.reLaunch({url:"/pages/login/Login"})}catch(r){e.index.reLaunch({url:"/pages/login/Login"})}},50)}const t={onLaunch(){r()},onShow(){r()}};function o(){return{app:e.createSSRApp(t)}}o().app.mount("#app"),exports.createApp=o;
diff --git a/dist/build/mp-weixin/app.json b/dist/build/mp-weixin/app.json
new file mode 100644
index 0000000..ab03f52
--- /dev/null
+++ b/dist/build/mp-weixin/app.json
@@ -0,0 +1,32 @@
+{
+ "pages": [
+ "pages/login/Login",
+ "pages/home/Home",
+ "pages/report/Report",
+ "pages/mine/Mine",
+ "pages/mine/Staff",
+ "pages/mine/ServiceType",
+ "pages/mine/Store",
+ "pages/mine/MyReports",
+ "pages/mine/MyOrders",
+ "pages/mine/Profile",
+ "pages/report-view/reportView"
+ ],
+ "window": {
+ "navigationStyle": "custom",
+ "navigationBarTextStyle": "white",
+ "navigationBarTitleText": "宠伴生活馆",
+ "navigationBarBackgroundColor": "#07c160",
+ "backgroundColor": "#F8F8F8"
+ },
+ "lazyCodeLoading": "requiredComponents",
+ "permission": {
+ "scope.userLocation": {
+ "desc": "用于在地图上选择门店位置"
+ }
+ },
+ "requiredPrivateInfos": [
+ "chooseLocation"
+ ],
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/dist/build/mp-weixin/app.wxss b/dist/build/mp-weixin/app.wxss
new file mode 100644
index 0000000..8e02f82
--- /dev/null
+++ b/dist/build/mp-weixin/app.wxss
@@ -0,0 +1,2 @@
+page{margin:0;padding:0;box-sizing:border-box;background:linear-gradient(180deg,#f7f9fc,#f3f6fa);font-family:-apple-system,BlinkMacSystemFont,PingFang SC,Helvetica Neue,Helvetica,Arial,sans-serif;color:#1f2937;font-size:15px;-webkit-font-smoothing:antialiased}.van-field{background:#fff!important;border:1px solid #dfe5ee!important;border-radius:12px!important;padding:10px 14px!important;font-size:15px!important;color:#1f2937!important;min-height:44px!important;width:100%!important;box-sizing:border-box!important;transition:border-color .2s,box-shadow .2s}.van-field:focus{border-color:#22c55e!important;box-shadow:0 0 0 3px rgba(34,197,94,.14)!important}.van-field::-moz-placeholder{color:#9aa4b2!important}.van-field::placeholder{color:#9aa4b2!important}.van-button{border-radius:12px!important;font-size:15px!important;height:44px!important;line-height:44px!important;font-weight:600!important;display:inline-flex!important;align-items:center!important;justify-content:center!important}.van-button--primary{background:linear-gradient(135deg,#22c55e,#16a34a)!important;border:1px solid #16a34a!important;color:#fff!important;box-shadow:0 8px 20px rgba(34,197,94,.28)!important}.van-button--primary:active{transform:translateY(1px)}.van-button--block{width:100%!important;margin-top:12px!important}.van-button--small{height:34px!important;line-height:34px!important;font-size:13px!important;padding:0 14px!important;border-radius:8px!important;background:#07c160!important;border:1px solid #07c160!important;color:#fff!important;flex-shrink:0}.van-button[disabled]{background:#c8e8d8!important;border-color:#c8e8d8!important;color:#fff!important;box-shadow:none!important}button:after{border:none!important}.van-cell-group{background:#fff!important;border-radius:18px!important;overflow:hidden;margin:0!important;border:1px solid #e7edf5;box-shadow:0 6px 20px rgba(15,23,42,.04)}.van-cell{padding:14px 16px!important;background:#fff!important;font-size:15px!important;min-height:48px!important}.van-cell:after{left:16px!important;right:16px!important;border-color:#eef2f7!important}.van-cell--link:active{background:#fafafa!important}.van-cell__title{color:#111827!important;font-size:15px!important}.van-cell__value{color:#6b7280!important;font-size:14px!important}.van-cell__arrow{color:#c3ccd8!important;font-size:16px!important;margin-left:4px}.van-cell__icon{margin-right:10px!important}.van-tag{border-radius:6px!important;font-size:12px!important;padding:2px 8px!important}.van-tag--warning{background:#fff3e8!important;color:#ff6b35!important}.van-tag--primary{background:#e8f7ef!important;color:#07c160!important}.van-tag--success{background:#f0f0f0!important;color:#888!important}.van-tag--default{background:#f5f5f5!important;color:#999!important}.card-section{background:#fff;border-radius:16px;overflow:hidden;margin:0 16px}.popup-mask{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.5);z-index:200;display:flex;align-items:flex-end;justify-content:center}.popup-content{background:#fff;border-radius:20px 20px 0 0;width:100%;max-height:85vh;display:flex;flex-direction:column}.popup-header{display:flex;justify-content:space-between;align-items:center;padding:18px 20px 14px;border-bottom:1px solid #f0f0f0;flex-shrink:0}.popup-title{font-size:17px;font-weight:600;color:#1a1a1a}.popup-close{font-size:20px;color:#bbb}.popup-body{padding:16px 20px;overflow-y:auto;flex:1}.popup-footer{padding:8px 20px max(env(safe-area-inset-bottom),20px);flex-shrink:0}.field-label{font-size:14px;color:#666;margin-bottom:8px;margin-top:14px;font-weight:500}.field-label:first-child{margin-top:0}.form-card{background:#fff;border-radius:22px;padding:28px 24px;border:1px solid #e8edf4;box-shadow:0 14px 40px rgba(15,23,42,.12)}:root{--space-8: 8px;--space-12: 12px;--space-16: 16px;--space-24: 24px;--pet-green: #16a34a;--pet-green-light: #e8f7ef;--pet-orange: #f97316;--pet-orange-light: #fff7ed;--pet-bg: #f5f7fb;--pet-text: #111827;--pet-subtext: #6b7280;--pet-border: #e5ebf3;--pet-card-shadow: 0 8px 24px rgba(15, 23, 42, .06)}.van-tabs{display:flex;background:#fff;border-bottom:1px solid #f0f0f0;padding:0 16px}.van-tabs__tab{flex:1;text-align:center;padding:12px 0;font-size:15px;color:#999;cursor:pointer;position:relative}.van-tabs__tab.active{color:#07c160;font-weight:600}.van-tabs__tab.active:after{content:"";position:absolute;bottom:0;left:50%;transform:translate(-50%);width:40px;height:3px;background:#07c160;border-radius:2px}[class*=-nav]{border-bottom-left-radius:16px;border-bottom-right-radius:16px;box-sizing:border-box}.nav-title{letter-spacing:.3px}.nav-back{font-weight:700;width:28px;height:28px;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;transition:transform .16s ease,background-color .16s ease,opacity .16s ease;-webkit-tap-highlight-color:transparent}.nav-back:active{transform:scale(.94);opacity:.9;background:rgba(255,255,255,.15)}.empty{margin:24px 16px;padding:22px 16px;background:#fff;border:1px solid var(--pet-border);border-radius:14px;color:var(--pet-subtext);text-align:center}.page-shell{min-height:100vh;background:var(--pet-bg);padding-bottom:120rpx}.page-section{margin:var(--space-16)}.section-gap{margin-top:var(--space-12)}.module-title{font-size:12px;color:#94a3b8;font-weight:700;margin-bottom:var(--space-8)}.form-field-wrap{padding:6px var(--space-16) var(--space-12)}.text-title{font-size:18px;font-weight:700;color:var(--pet-text)}.text-body{font-size:14px;color:var(--pet-text);line-height:1.5}.text-sub{font-size:12px;color:var(--pet-subtext)}.nav-gradient{background:linear-gradient(135deg,#22c55e,#16a34a);box-shadow:0 8px 20px rgba(34,197,94,.25)}.van-button,.order-item,.gallery-item,.menu-card,.card-section,.user-card{transition:transform .16s ease,box-shadow .2s ease,opacity .16s ease;-webkit-tap-highlight-color:transparent}.van-button:active,.order-item:active,.gallery-item:active,.menu-card:active,.card-section:active,.user-card:active{transform:translateY(1px) scale(.995);opacity:.97}page{margin:0;padding:0;box-sizing:border-box;background:#f5f5f5;font-family:-apple-system,BlinkMacSystemFont,PingFang SC,Helvetica Neue,Helvetica,Arial,sans-serif}
+page::after{position:fixed;content:'';left:-1000px;top:-1000px;-webkit-animation:shadow-preload .1s;-webkit-animation-delay:3s;animation:shadow-preload .1s;animation-delay:3s}@-webkit-keyframes shadow-preload{0%{background-image:url(https://cdn1.dcloud.net.cn/img/shadow-grey.png)}100%{background-image:url(https://cdn1.dcloud.net.cn/img/shadow-grey.png)}}@keyframes shadow-preload{0%{background-image:url(https://cdn1.dcloud.net.cn/img/shadow-grey.png)}100%{background-image:url(https://cdn1.dcloud.net.cn/img/shadow-grey.png)}}page{--status-bar-height:25px;--top-window-height:0px;--window-top:0px;--window-bottom:0px;--window-left:0px;--window-right:0px;--window-magin:0px}[data-c-h="true"]{display: none !important;}
\ No newline at end of file
diff --git a/dist/build/mp-weixin/common/vendor.js b/dist/build/mp-weixin/common/vendor.js
new file mode 100644
index 0000000..9a09986
--- /dev/null
+++ b/dist/build/mp-weixin/common/vendor.js
@@ -0,0 +1,7 @@
+"use strict";
+/**
+* @vue/shared v3.4.21
+* (c) 2018-present Yuxi (Evan) You and Vue contributors
+* @license MIT
+**/
+function e(e,t){const n=new Set(e.split(","));return e=>n.has(e)}const t={},n=[],o=()=>{},r=()=>!1,s=e=>111===e.charCodeAt(0)&&110===e.charCodeAt(1)&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),i=e=>e.startsWith("onUpdate:"),c=Object.assign,u=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},l=Object.prototype.hasOwnProperty,a=(e,t)=>l.call(e,t),f=Array.isArray,p=e=>"[object Map]"===x(e),d=e=>"[object Set]"===x(e),h=e=>"function"==typeof e,g=e=>"string"==typeof e,m=e=>"symbol"==typeof e,v=e=>null!==e&&"object"==typeof e,_=e=>(v(e)||h(e))&&h(e.then)&&h(e.catch),y=Object.prototype.toString,x=e=>y.call(e),b=e=>"[object Object]"===x(e),w=e=>g(e)&&"NaN"!==e&&"-"!==e[0]&&""+parseInt(e,10)===e,$=e(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),S=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},k=/-(\w)/g,O=S(e=>e.replace(k,(e,t)=>t?t.toUpperCase():"")),P=/\B([A-Z])/g,E=S(e=>e.replace(P,"-$1").toLowerCase()),C=S(e=>e.charAt(0).toUpperCase()+e.slice(1)),A=S(e=>e?`on${C(e)}`:""),I=(e,t)=>!Object.is(e,t),j=(e,t)=>{for(let n=0;n{const t=parseFloat(e);return isNaN(t)?e:t};function L(e){if(f(e)){const t={};for(let n=0;n{if(e){const n=e.split(V);n.length>1&&(t[n[0].trim()]=n[1].trim())}}),t}function H(e){let t="";if(g(e))t=e;else if(f(e))for(let n=0;nt&&t.__v_isRef?N(e,t.value):p(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((e,[t,n],o)=>(e[B(t,o)+" =>"]=n,e),{})}:d(t)?{[`Set(${t.size})`]:[...t.values()].map(e=>B(e))}:m(t)?B(t):!v(t)||f(t)||b(t)?t:String(t),B=(e,t="")=>{var n;return m(e)?`Symbol(${null!=(n=e.description)?n:t})`:e},U="onShow",W="onHide",z="onLaunch",F="onError",K="onThemeChange",q="onPageNotFound",G="onUnhandledRejection",J="onLoad",Z="onReady",Q="onUnload",X="onInit",Y="onSaveExitState",ee="onResize",te="onBackPress",ne="onPageScroll",oe="onTabItemTap",re="onReachBottom",se="onPullDownRefresh",ie="onShareTimeline",ce="onShareChat",ue="onAddToFavorites",le="onShareAppMessage",ae="onNavigationBarButtonTap",fe="onNavigationBarSearchInputClicked",pe="onNavigationBarSearchInputChanged",de="onNavigationBarSearchInputConfirmed",he="onNavigationBarSearchInputFocusChanged",ge="virtualHostId";function me(e,t=null){let n;return(...o)=>(e&&(n=e.apply(t,o),e=null),n)}function ve(e,t){if(!g(t))return;const n=(t=t.replace(/\[(\d+)\]/g,".$1")).split(".");let o=n[0];return e||(e={}),1===n.length?e[o]:ve(e[o],n.slice(1).join("."))}function _e(e){let t={};return b(e)&&Object.keys(e).sort().forEach(n=>{const o=n;t[o]=e[o]}),Object.keys(t)?t:e}const ye=/:/g;const xe=encodeURIComponent;function be(e,t=xe){const n=e?Object.keys(e).map(n=>{let o=e[n];return void 0===typeof o||null===o?o="":b(o)&&(o=JSON.stringify(o)),t(n)+"="+t(o)}).filter(e=>e.length>0).join("&"):null;return n?`?${n}`:""}const we=[X,J,U,W,Q,te,ne,oe,re,se,ie,le,ce,ue,Y,ae,fe,pe,de,he];const $e=[U,W,z,F,K,q,G,"onExit",X,J,Z,Q,ee,te,ne,oe,re,se,ie,ue,le,ce,Y,ae,fe,pe,de,he],Se=(()=>({onPageScroll:1,onShareAppMessage:2,onShareTimeline:4}))();function ke(e,t,n=!0){return!(n&&!h(t))&&($e.indexOf(e)>-1||0===e.indexOf("on"))}let Oe;const Pe=[];const Ee=me((e,t)=>t(e)),Ce=function(){};Ce.prototype={_id:1,on:function(e,t,n){var o=this.e||(this.e={});return(o[e]||(o[e]=[])).push({fn:t,ctx:n,_id:this._id}),this._id++},once:function(e,t,n){var o=this;function r(){o.off(e,r),t.apply(n,arguments)}return r._=t,this.on(e,r,n)},emit:function(e){for(var t=[].slice.call(arguments,1),n=((this.e||(this.e={}))[e]||[]).slice(),o=0,r=n.length;o=0;s--)if(o[s].fn===t||o[s].fn._===t||o[s]._id===t){o.splice(s,1);break}r=o}return r.length?n[e]=r:delete n[e],this}};var Ae=Ce;const Ie="zh-Hans",je="zh-Hant",Re="en";function Le(e,t){if(!e)return;if("chinese"===(e=(e=e.trim().replace(/_/g,"-")).toLowerCase()))return Ie;if(0===e.indexOf("zh"))return e.indexOf("-hans")>-1?Ie:e.indexOf("-hant")>-1?je:(n=e,["-tw","-hk","-mo","-cht"].find(e=>-1!==n.indexOf(e))?je:Ie);var n;const o=function(e,t){return t.find(t=>0===e.indexOf(t))}(e,[Re,"fr","es"]);return o||void 0}function Me(e){return function(){try{return e.apply(e,arguments)}catch(t){console.error(t)}}}let Ve=1;const Te={};function De(e,t,n){if("number"==typeof e){const o=Te[e];if(o)return o.keepAlive||delete Te[e],o.callback(t,n)}return t}const He="success",Ne="fail",Be="complete";function Ue(e,t={},{beforeAll:n,beforeSuccess:o}={}){b(t)||(t={});const{success:r,fail:s,complete:i}=function(e){const t={};for(const n in e){const o=e[n];h(o)&&(t[n]=Me(o),delete e[n])}return t}(t),c=h(r),u=h(s),l=h(i),a=Ve++;return function(e,t,n,o=!1){Te[e]={name:t,keepAlive:o,callback:n}}(a,e,a=>{(a=a||{}).errMsg=function(e,t){return e&&-1!==e.indexOf(":fail")?t+e.substring(e.indexOf(":fail")):t+":ok"}(a.errMsg,e),h(n)&&n(a),a.errMsg===e+":ok"?(h(o)&&o(a,t),c&&r(a)):u&&s(a),l&&i(a)}),a}const We="success",ze="fail",Fe="complete",Ke={},qe={};function Ge(e,t){return function(n){return e(n,t)||n}}function Je(e,t,n){let o=!1;for(let r=0;re(t),catch(){}}}function Ze(e,t={}){return[We,ze,Fe].forEach(n=>{const o=e[n];if(!f(o))return;const r=t[n];t[n]=function(e){Je(o,e,t).then(e=>h(r)&&r(e)||e)}}),t}function Qe(e,t){const n=[];f(Ke.returnValue)&&n.push(...Ke.returnValue);const o=qe[e];return o&&f(o.returnValue)&&n.push(...o.returnValue),n.forEach(e=>{t=e(t)||t}),t}function Xe(e){const t=Object.create(null);Object.keys(Ke).forEach(e=>{"returnValue"!==e&&(t[e]=Ke[e].slice())});const n=qe[e];return n&&Object.keys(n).forEach(e=>{"returnValue"!==e&&(t[e]=(t[e]||[]).concat(n[e]))}),t}function Ye(e,t,n,o){const r=Xe(e);if(r&&Object.keys(r).length){if(f(r.invoke)){return Je(r.invoke,n).then(n=>t(Ze(Xe(e),n),...o))}return t(Ze(r,n),...o)}return t(n,...o)}function et(e,t){return(n={},...o)=>function(e){return!(!b(e)||![He,Ne,Be].find(t=>h(e[t])))}(n)?Qe(e,Ye(e,t,n,o)):Qe(e,new Promise((r,s)=>{Ye(e,t,c(n,{success:r,fail:s}),o)}))}function tt(e,t,n,o={}){const r=t+":fail";let s="";return s=n?0===n.indexOf(r)?n:r+" "+n:r,delete o.errCode,De(e,c({errMsg:s},o))}function nt(e,t,n,o){const r=function(e){e[0]}(t);if(r)return r}function ot(e,t,n,o){return n=>{const r=Ue(e,n,o),s=nt(0,[n]);return s?tt(r,e,s):t(n,{resolve:t=>function(e,t,n){return De(e,c(n||{},{errMsg:t+":ok"}))}(r,e,t),reject:(t,n)=>tt(r,e,function(e){return!e||g(e)?e:e.stack?("undefined"!=typeof globalThis&&globalThis.harmonyChannel||console.error(e.message+"\n"+e.stack),e.message):e}(t),n)})}}function rt(e,t,n,o){return function(e,t){return(...e)=>{const n=nt(0,e);if(n)throw new Error(n);return t.apply(null,e)}}(0,t)}let st=!1,it=0,ct=0;const ut=rt(0,(e,t)=>{if(0===it&&function(){var e,t;let n,o,r;{const s=(null===(e=wx.getWindowInfo)||void 0===e?void 0:e.call(wx))||wx.getSystemInfoSync(),i=(null===(t=wx.getDeviceInfo)||void 0===t?void 0:t.call(wx))||wx.getSystemInfoSync();n=s.windowWidth,o=s.pixelRatio,r=i.platform}it=n,ct=o,st="ios"===r}(),0===(e=Number(e)))return 0;let n=e/750*(t||it);return n<0&&(n=-n),n=Math.floor(n+1e-4),0===n&&(n=1!==ct&&st?.5:1),e<0?-n:n});function lt(e,t){Object.keys(t).forEach(n=>{h(t[n])&&(e[n]=function(e,t){const n=t?e?e.concat(t):f(t)?t:[t]:e;return n?function(e){const t=[];for(let n=0;n{const o=e[n],r=t[n];f(o)&&h(r)&&u(o,r)})}const ft=rt(0,(e,t)=>{g(e)&&b(t)?lt(qe[e]||(qe[e]={}),t):b(e)&<(Ke,e)}),pt=rt(0,(e,t)=>{g(e)?b(t)?at(qe[e],t):delete qe[e]:b(e)&&at(Ke,e)});const dt=new class{constructor(){this.$emitter=new Ae}on(e,t){return this.$emitter.on(e,t)}once(e,t){return this.$emitter.once(e,t)}off(e,t){e?this.$emitter.off(e,t):this.$emitter.e={}}emit(e,...t){this.$emitter.emit(e,...t)}},ht=rt(0,(e,t)=>(dt.on(e,t),()=>dt.off(e,t))),gt=rt(0,(e,t)=>(dt.once(e,t),()=>dt.off(e,t))),mt=rt(0,(e,t)=>{f(e)||(e=e?[e]:[]),e.forEach(e=>{dt.off(e,t)})}),vt=rt(0,(e,...t)=>{dt.emit(e,...t)});let _t,yt,xt;function bt(e){try{return JSON.parse(e)}catch(t){}return e}const wt=[];function $t(e,t){wt.forEach(n=>{n(e,t)}),wt.length=0}const St=et(kt="getPushClientId",function(e,t,n,o){return ot(e,t,0,o)}(kt,(e,{resolve:t,reject:n})=>{Promise.resolve().then(()=>{void 0===xt&&(xt=!1,_t="",yt="uniPush is not enabled"),wt.push((e,o)=>{e?t({cid:e}):n(o)}),void 0!==_t&&$t(_t,yt)})},0,Ot));var kt,Ot;const Pt=[],Et=/^\$|__f__|getLocale|setLocale|sendNativeEvent|restoreGlobal|requireGlobal|getCurrentSubNVue|getMenuButtonBoundingClientRect|^report|interceptors|Interceptor$|getSubNVueById|requireNativePlugin|upx2px|rpx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64|getDeviceInfo|getAppBaseInfo|getWindowInfo|getSystemSetting|getAppAuthorizeSetting/,Ct=/^create|Manager$/,At=["createBLEConnection"],It=["request","downloadFile","uploadFile","connectSocket"],jt=["createBLEConnection"],Rt=/^on|^off/;function Lt(e){return Ct.test(e)&&-1===At.indexOf(e)}function Mt(e){return Et.test(e)&&-1===jt.indexOf(e)}function Vt(e){return-1!==It.indexOf(e)}function Tt(e){return!(Lt(e)||Mt(e)||function(e){return Rt.test(e)&&"onPush"!==e}(e))}function Dt(e,t){return Tt(e)&&h(t)?function(n={},...o){return h(n.success)||h(n.fail)||h(n.complete)?Qe(e,Ye(e,t,n,o)):Qe(e,new Promise((r,s)=>{Ye(e,t,c({},n,{success:r,fail:s}),o)}))}:t}Promise.prototype.finally||(Promise.prototype.finally=function(e){const t=this.constructor;return this.then(n=>t.resolve(e&&e()).then(()=>n),n=>t.resolve(e&&e()).then(()=>{throw n}))});const Ht=["success","fail","cancel","complete"];const Nt=()=>{const e=h(getApp)&&getApp({allowDefault:!0});return e&&e.$vm?e.$vm.$locale:function(){var e;let t="";{const n=(null===(e=wx.getAppBaseInfo)||void 0===e?void 0:e.call(wx))||wx.getSystemInfoSync();t=Le(n&&n.language?n.language:Re)||Re}return t}()},Bt=[];"undefined"!=typeof global&&(global.getLocale=Nt);const Ut="__DC_STAT_UUID";let Wt;function zt(e=wx){return function(t,n){Wt=Wt||e.getStorageSync(Ut),Wt||(Wt=Date.now()+""+Math.floor(1e7*Math.random()),wx.setStorage({key:Ut,data:Wt})),n.deviceId=Wt}}function Ft(e,t){if(e.safeArea){const n=e.safeArea;t.safeAreaInsets={top:n.top,left:n.left,right:e.windowWidth-n.right,bottom:e.screenHeight-n.bottom}}}function Kt(e,t){let n="",o="";switch(n=e.split(" ")[0]||t,o=e.split(" ")[1]||"",n=n.toLocaleLowerCase(),n){case"harmony":case"ohos":case"openharmony":n="harmonyos";break;case"iphone os":n="ios";break;case"mac":case"darwin":n="macos";break;case"windows_nt":n="windows"}return{osName:n,osVersion:o}}function qt(e,t){let n=e.deviceType||"phone";{const e={ipad:"pad",windows:"pc",mac:"pc"},o=Object.keys(e),r=t.toLocaleLowerCase();for(let t=0;t{Ft(e,t),zt()(e,t),function(e,t){const{brand:n="",model:o="",system:r="",language:s="",theme:i,version:u,platform:l,fontSizeSetting:a,SDKVersion:f,pixelRatio:p,deviceOrientation:d}=e,{osName:h,osVersion:g}=Kt(r,l);let m=u,v=qt(e,o),_=Gt(n),y=Zt(e),x=d,b=p,w=f;const $=(s||"").replace(/_/g,"-"),S={appId:"",appName:"宠伴生活馆",appVersion:"1.0.0",appVersionCode:"100",appLanguage:Jt($),uniCompileVersion:"4.66",uniCompilerVersion:"4.66",uniRuntimeVersion:"4.66",uniPlatform:"mp-weixin",deviceBrand:_,deviceModel:o,deviceType:v,devicePixelRatio:b,deviceOrientation:x,osName:h,osVersion:g,hostTheme:i,hostVersion:m,hostLanguage:$,hostName:y,hostSDKVersion:w,hostFontSizeSetting:a,windowTop:0,windowBottom:0,osLanguage:void 0,osTheme:void 0,ua:void 0,hostPackageName:void 0,browserName:void 0,browserVersion:void 0,isUniAppX:!1};c(t,S)}(e,t)}},Xt=Qt,Yt={args(e,t){let n=parseInt(e.current);if(isNaN(n))return;const o=e.urls;if(!f(o))return;const r=o.length;return r?(n<0?n=0:n>=r&&(n=r-1),n>0?(t.current=o[n],t.urls=o.filter((e,t)=>!(t{const{brand:n,model:o,system:r="",platform:s=""}=e;let i=qt(e,o),u=Gt(n);zt()(e,t);const{osName:l,osVersion:a}=Kt(r,s);t=_e(c(t,{deviceType:i,deviceBrand:u,deviceModel:o,osName:l,osVersion:a}))}},nn={returnValue:(e,t)=>{const{version:n,language:o,SDKVersion:r,theme:s}=e;let i=Zt(e),u=(o||"").replace(/_/g,"-");const l={hostVersion:n,hostLanguage:u,hostName:i,hostSDKVersion:r,hostTheme:s,appId:"",appName:"宠伴生活馆",appVersion:"1.0.0",appVersionCode:"100",appLanguage:Jt(u),isUniAppX:!1,uniPlatform:"mp-weixin",uniCompileVersion:"4.66",uniCompilerVersion:"4.66",uniRuntimeVersion:"4.66"};c(t,l)}},on={returnValue:(e,t)=>{Ft(e,t),t=_e(c(t,{windowTop:0,windowBottom:0}))}},rn={args(e){const t=getApp({allowDefault:!0})||{};t.$vm?Nr(F,e,t.$vm.$):(wx.$onErrorHandlers||(wx.$onErrorHandlers=[]),wx.$onErrorHandlers.push(e))}},sn={args(e){const t=getApp({allowDefault:!0})||{};if(t.$vm){if(e.__weh){const n=t.$vm.$[F];if(n){const t=n.indexOf(e.__weh);t>-1&&n.splice(t,1)}}}else{if(!wx.$onErrorHandlers)return;const t=wx.$onErrorHandlers.findIndex(t=>t===e);-1!==t&&wx.$onErrorHandlers.splice(t,1)}}},cn={args(){if(wx.__uni_console__){if(wx.__uni_console_warned__)return;wx.__uni_console_warned__=!0,console.warn("开发模式下小程序日志回显会使用 socket 连接,为了避免冲突,建议使用 SocketTask 的方式去管理 WebSocket 或手动关闭日志回显功能。[详情](https://uniapp.dcloud.net.cn/tutorial/run/mp-log.html)")}}},un=cn,ln={$on:ht,$off:mt,$once:gt,$emit:vt,upx2px:ut,rpx2px:ut,interceptors:{},addInterceptor:ft,removeInterceptor:pt,onCreateVueApp:function(e){if(Oe)return e(Oe);Pe.push(e)},invokeCreateVueAppHook:function(e){Oe=e,Pe.forEach(t=>t(e))},getLocale:Nt,setLocale:e=>{const t=h(getApp)&&getApp();if(!t)return!1;return t.$vm.$locale!==e&&(t.$vm.$locale=e,Bt.forEach(t=>t({locale:e})),!0)},onLocaleChange:e=>{-1===Bt.indexOf(e)&&Bt.push(e)},getPushClientId:St,onPushMessage:e=>{-1===Pt.indexOf(e)&&Pt.push(e)},offPushMessage:e=>{if(e){const t=Pt.indexOf(e);t>-1&&Pt.splice(t,1)}else Pt.length=0},invokePushCallback:function(e){if("enabled"===e.type)xt=!0;else if("clientId"===e.type)_t=e.cid,yt=e.errMsg,$t(_t,e.errMsg);else if("pushMsg"===e.type){const t={type:"receive",data:bt(e.message)};for(let e=0;e{t({type:"click",data:bt(e.message)})})},__f__:function(e,t,...n){t&&n.push(t),console[e].apply(console,n)}};const an=["qy","env","error","version","lanDebug","cloud","serviceMarket","router","worklet","__webpack_require_UNI_MP_PLUGIN__"],fn=["lanDebug","router","worklet"],pn=wx.getLaunchOptionsSync?wx.getLaunchOptionsSync():null;function dn(e){return(!pn||1154!==pn.scene||!fn.includes(e))&&(an.indexOf(e)>-1||"function"==typeof wx[e])}function hn(){const e={};for(const t in wx)dn(t)&&(e[t]=wx[t]);return"undefined"!=typeof globalThis&&"undefined"==typeof requireMiniProgram&&(globalThis.wx=e),e}const gn=["__route__","__wxExparserNodeId__","__wxWebviewId__"],mn=(vn={oauth:["weixin"],share:["weixin"],payment:["wxpay"],push:["weixin"]},function({service:e,success:t,fail:n,complete:o}){let r;vn[e]?(r={errMsg:"getProvider:ok",service:e,provider:vn[e]},h(t)&&t(r)):(r={errMsg:"getProvider:fail:服务["+e+"]不存在"},h(n)&&n(r)),h(o)&&o(r)});var vn;const _n=hn();_n.canIUse("getAppBaseInfo")||(_n.getAppBaseInfo=_n.getSystemInfoSync),_n.canIUse("getWindowInfo")||(_n.getWindowInfo=_n.getSystemInfoSync),_n.canIUse("getDeviceInfo")||(_n.getDeviceInfo=_n.getSystemInfoSync);let yn=_n.getAppBaseInfo&&_n.getAppBaseInfo();yn||(yn=_n.getSystemInfoSync());const xn=yn?yn.host:null,bn=xn&&"SAAASDK"===xn.env?_n.miniapp.shareVideoMessage:_n.shareVideoMessage;var wn=Object.freeze({__proto__:null,createSelectorQuery:function(){const e=_n.createSelectorQuery(),t=e.in;return e.in=function(e){return e.$scope?t.call(this,e.$scope):t.call(this,function(e){const t=Object.create(null);return gn.forEach(n=>{t[n]=e[n]}),t}(e))},e},getProvider:mn,shareVideoMessage:bn});const $n={args(e,t){e.compressedHeight&&!t.compressHeight&&(t.compressHeight=e.compressedHeight),e.compressedWidth&&!t.compressWidth&&(t.compressWidth=e.compressedWidth)}};var Sn=function(e,t,n=wx){const o=function(e){function t(e,t,n){return function(r){return t(o(e,r,n))}}function n(e,n,o={},r={},s=!1){if(b(n)){const i=!0===s?n:{};h(o)&&(o=o(n,i)||{});for(const c in n)if(a(o,c)){let t=o[c];h(t)&&(t=t(n[c],n,i)),t?g(t)?i[t]=n[c]:b(t)&&(i[t.name?t.name:c]=t.value):console.warn(`微信小程序 ${e} 暂不支持 ${c}`)}else if(-1!==Ht.indexOf(c)){const o=n[c];h(o)&&(i[c]=t(e,o,r))}else s||a(i,c)||(i[c]=n[c]);return i}return h(n)&&(h(o)&&o(n,{}),n=t(e,n,r)),n}function o(t,o,r,s=!1){return h(e.returnValue)&&(o=e.returnValue(t,o)),n(t,o,r,{},s||!1)}return function(t,r){const s=a(e,t);if(!s&&"function"!=typeof wx[t])return r;const i=s||h(e.returnValue)||Lt(t)||Vt(t),c=s||h(r);if(!s&&!r)return function(){console.error(`微信小程序 暂不支持${t}`)};if(!i||!c)return r;const u=e[t];return function(e,r){let s=u||{};h(u)&&(s=u(e));const i=[e=n(t,e,s.args,s.returnValue)];void 0!==r&&i.push(r);const c=wx[s.name||t].apply(wx,i);return(Lt(t)||Vt(t))&&c&&!c.__v_skip&&(c.__v_skip=!0),Mt(t)?o(t,c,s.returnValue,Lt(t)):c}}}(t);return new Proxy({},{get:(t,r)=>a(t,r)?t[r]:a(e,r)?Dt(r,e[r]):a(ln,r)?Dt(r,ln[r]):Dt(r,o(r,n[r]))})}(wn,Object.freeze({__proto__:null,compressImage:$n,getAppAuthorizeSetting:{returnValue:function(e,t){const{locationReducedAccuracy:n}=e;t.locationAccuracy="unsupported",!0===n?t.locationAccuracy="reduced":!1===n&&(t.locationAccuracy="full")}},getAppBaseInfo:nn,getDeviceInfo:tn,getSystemInfo:Qt,getSystemInfoSync:Xt,getWindowInfo:on,offError:sn,onError:rn,onSocketMessage:un,onSocketOpen:cn,previewImage:Yt,redirectTo:{},showActionSheet:en}),hn());let kn,On;class Pn{constructor(e=!1){this.detached=e,this._active=!0,this.effects=[],this.cleanups=[],this.parent=kn,!e&&kn&&(this.index=(kn.scopes||(kn.scopes=[])).push(this)-1)}get active(){return this._active}run(e){if(this._active){const t=kn;try{return kn=this,e()}finally{kn=t}}}on(){kn=this}off(){kn=this.parent}stop(e){if(this._active){let t,n;for(t=0,n=this.effects.length;t=4))break}1===this._dirtyLevel&&(this._dirtyLevel=0),Tn()}return this._dirtyLevel>=4}set dirty(e){this._dirtyLevel=e?4:0}run(){if(this._dirtyLevel=0,!this.active)return this.fn();let e=Rn,t=On;try{return Rn=!0,On=this,this._runnings++,An(this),this.fn()}finally{In(this),this._runnings--,On=t,Rn=e}}stop(){var e;this.active&&(An(this),In(this),null==(e=this.onStop)||e.call(this),this.active=!1)}}function Cn(e){return e.value}function An(e){e._trackId++,e._depsLength=0}function In(e){if(e.deps.length>e._depsLength){for(let t=e._depsLength;t{const n=new Map;return n.cleanup=e,n.computed=t,n},zn=new WeakMap,Fn=Symbol(""),Kn=Symbol("");function qn(e,t,n){if(Rn&&On){let t=zn.get(e);t||zn.set(e,t=new Map);let o=t.get(n);o||t.set(n,o=Wn(()=>t.delete(n))),Nn(On,o)}}function Gn(e,t,n,o,r,s){const i=zn.get(e);if(!i)return;let c=[];if("clear"===t)c=[...i.values()];else if("length"===n&&f(e)){const e=Number(o);i.forEach((t,n)=>{("length"===n||!m(n)&&n>=e)&&c.push(t)})}else switch(void 0!==n&&c.push(i.get(n)),t){case"add":f(e)?w(n)&&c.push(i.get("length")):(c.push(i.get(Fn)),p(e)&&c.push(i.get(Kn)));break;case"delete":f(e)||(c.push(i.get(Fn)),p(e)&&c.push(i.get(Kn)));break;case"set":p(e)&&c.push(i.get(Fn))}Dn();for(const u of c)u&&Un(u,4);Hn()}const Jn=e("__proto__,__v_isRef,__isVue"),Zn=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>"arguments"!==e&&"caller"!==e).map(e=>Symbol[e]).filter(m)),Qn=Xn();function Xn(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...e){const n=Ho(this);for(let t=0,r=this.length;t{e[t]=function(...e){Vn(),Dn();const n=Ho(this)[t].apply(this,e);return Hn(),Tn(),n}}),e}function Yn(e){const t=Ho(this);return qn(t,0,e),t.hasOwnProperty(e)}class eo{constructor(e=!1,t=!1){this._isReadonly=e,this._isShallow=t}get(e,t,n){const o=this._isReadonly,r=this._isShallow;if("__v_isReactive"===t)return!o;if("__v_isReadonly"===t)return o;if("__v_isShallow"===t)return r;if("__v_raw"===t)return n===(o?r?Io:Ao:r?Co:Eo).get(e)||Object.getPrototypeOf(e)===Object.getPrototypeOf(n)?e:void 0;const s=f(e);if(!o){if(s&&a(Qn,t))return Reflect.get(Qn,t,n);if("hasOwnProperty"===t)return Yn}const i=Reflect.get(e,t,n);return(m(t)?Zn.has(t):Jn(t))?i:(o||qn(e,0,t),r?i:Ko(i)?s&&w(t)?i:i.value:v(i)?o?Lo(i):Ro(i):i)}}class to extends eo{constructor(e=!1){super(!1,e)}set(e,t,n,o){let r=e[t];if(!this._isShallow){const t=To(r);if(Do(n)||To(n)||(r=Ho(r),n=Ho(n)),!f(e)&&Ko(r)&&!Ko(n))return!t&&(r.value=n,!0)}const s=f(e)&&w(t)?Number(t)e,co=e=>Reflect.getPrototypeOf(e);function uo(e,t,n=!1,o=!1){const r=Ho(e=e.__v_raw),s=Ho(t);n||(I(t,s)&&qn(r,0,t),qn(r,0,s));const{has:i}=co(r),c=o?io:n?Uo:Bo;return i.call(r,t)?c(e.get(t)):i.call(r,s)?c(e.get(s)):void(e!==r&&e.get(t))}function lo(e,t=!1){const n=this.__v_raw,o=Ho(n),r=Ho(e);return t||(I(e,r)&&qn(o,0,e),qn(o,0,r)),e===r?n.has(e):n.has(e)||n.has(r)}function ao(e,t=!1){return e=e.__v_raw,!t&&qn(Ho(e),0,Fn),Reflect.get(e,"size",e)}function fo(e){e=Ho(e);const t=Ho(this);return co(t).has.call(t,e)||(t.add(e),Gn(t,"add",e,e)),this}function po(e,t){t=Ho(t);const n=Ho(this),{has:o,get:r}=co(n);let s=o.call(n,e);s||(e=Ho(e),s=o.call(n,e));const i=r.call(n,e);return n.set(e,t),s?I(t,i)&&Gn(n,"set",e,t):Gn(n,"add",e,t),this}function ho(e){const t=Ho(this),{has:n,get:o}=co(t);let r=n.call(t,e);r||(e=Ho(e),r=n.call(t,e)),o&&o.call(t,e);const s=t.delete(e);return r&&Gn(t,"delete",e,void 0),s}function go(){const e=Ho(this),t=0!==e.size,n=e.clear();return t&&Gn(e,"clear",void 0,void 0),n}function mo(e,t){return function(n,o){const r=this,s=r.__v_raw,i=Ho(s),c=t?io:e?Uo:Bo;return!e&&qn(i,0,Fn),s.forEach((e,t)=>n.call(o,c(e),c(t),r))}}function vo(e,t,n){return function(...o){const r=this.__v_raw,s=Ho(r),i=p(s),c="entries"===e||e===Symbol.iterator&&i,u="keys"===e&&i,l=r[e](...o),a=n?io:t?Uo:Bo;return!t&&qn(s,0,u?Kn:Fn),{next(){const{value:e,done:t}=l.next();return t?{value:e,done:t}:{value:c?[a(e[0]),a(e[1])]:a(e),done:t}},[Symbol.iterator](){return this}}}}function _o(e){return function(...t){return"delete"!==e&&("clear"===e?void 0:this)}}function yo(){const e={get(e){return uo(this,e)},get size(){return ao(this)},has:lo,add:fo,set:po,delete:ho,clear:go,forEach:mo(!1,!1)},t={get(e){return uo(this,e,!1,!0)},get size(){return ao(this)},has:lo,add:fo,set:po,delete:ho,clear:go,forEach:mo(!1,!0)},n={get(e){return uo(this,e,!0)},get size(){return ao(this,!0)},has(e){return lo.call(this,e,!0)},add:_o("add"),set:_o("set"),delete:_o("delete"),clear:_o("clear"),forEach:mo(!0,!1)},o={get(e){return uo(this,e,!0,!0)},get size(){return ao(this,!0)},has(e){return lo.call(this,e,!0)},add:_o("add"),set:_o("set"),delete:_o("delete"),clear:_o("clear"),forEach:mo(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(r=>{e[r]=vo(r,!1,!1),n[r]=vo(r,!0,!1),t[r]=vo(r,!1,!0),o[r]=vo(r,!0,!0)}),[e,n,t,o]}const[xo,bo,wo,$o]=yo();function So(e,t){const n=t?e?$o:wo:e?bo:xo;return(t,o,r)=>"__v_isReactive"===o?!e:"__v_isReadonly"===o?e:"__v_raw"===o?t:Reflect.get(a(n,o)&&o in t?n:t,o,r)}const ko={get:So(!1,!1)},Oo={get:So(!1,!0)},Po={get:So(!0,!1)},Eo=new WeakMap,Co=new WeakMap,Ao=new WeakMap,Io=new WeakMap;function jo(e){return e.__v_skip||!Object.isExtensible(e)?0:function(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}((e=>x(e).slice(8,-1))(e))}function Ro(e){return To(e)?e:Mo(e,!1,oo,ko,Eo)}function Lo(e){return Mo(e,!0,ro,Po,Ao)}function Mo(e,t,n,o,r){if(!v(e))return e;if(e.__v_raw&&(!t||!e.__v_isReactive))return e;const s=r.get(e);if(s)return s;const i=jo(e);if(0===i)return e;const c=new Proxy(e,2===i?o:n);return r.set(e,c),c}function Vo(e){return To(e)?Vo(e.__v_raw):!(!e||!e.__v_isReactive)}function To(e){return!(!e||!e.__v_isReadonly)}function Do(e){return!(!e||!e.__v_isShallow)}function Ho(e){const t=e&&e.__v_raw;return t?Ho(t):e}function No(e){return Object.isExtensible(e)&&((e,t,n)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})})(e,"__v_skip",!0),e}const Bo=e=>v(e)?Ro(e):e,Uo=e=>v(e)?Lo(e):e;class Wo{constructor(e,t,n,o){this.getter=e,this._setter=t,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this.effect=new En(()=>e(this._value),()=>Fo(this,2===this.effect._dirtyLevel?2:3)),this.effect.computed=this,this.effect.active=this._cacheable=!o,this.__v_isReadonly=n}get value(){const e=Ho(this);return e._cacheable&&!e.effect.dirty||!I(e._value,e._value=e.effect.run())||Fo(e,4),zo(e),e.effect._dirtyLevel>=2&&Fo(e,2),e._value}set value(e){this._setter(e)}get _dirty(){return this.effect.dirty}set _dirty(e){this.effect.dirty=e}}function zo(e){var t;Rn&&On&&(e=Ho(e),Nn(On,null!=(t=e.dep)?t:e.dep=Wn(()=>e.dep=void 0,e instanceof Wo?e:void 0)))}function Fo(e,t=4,n){const o=(e=Ho(e)).dep;o&&Un(o,t)}function Ko(e){return!(!e||!0!==e.__v_isRef)}function qo(e){return function(e,t){if(Ko(e))return e;return new Go(e,t)}(e,!1)}class Go{constructor(e,t){this.__v_isShallow=t,this.dep=void 0,this.__v_isRef=!0,this._rawValue=t?e:Ho(e),this._value=t?e:Bo(e)}get value(){return zo(this),this._value}set value(e){const t=this.__v_isShallow||Do(e)||To(e);e=t?e:Ho(e),I(e,this._rawValue)&&(this._rawValue=e,this._value=t?e:Bo(e),Fo(this,4))}}function Jo(e){return Ko(e)?e.value:e}const Zo={get:(e,t,n)=>Jo(Reflect.get(e,t,n)),set:(e,t,n,o)=>{const r=e[t];return Ko(r)&&!Ko(n)?(r.value=n,!0):Reflect.set(e,t,n,o)}};function Qo(e){return Vo(e)?e:new Proxy(e,Zo)}function Xo(e,t,n,o){try{return o?e(...o):e()}catch(r){er(r,t,n)}}function Yo(e,t,n,o){if(h(e)){const r=Xo(e,t,n,o);return r&&_(r)&&r.catch(e=>{er(e,t,n)}),r}const r=[];for(let s=0;s>>1,r=rr[o],s=mr(r);snull==e.id?1/0:e.id,vr=(e,t)=>{const n=mr(e)-mr(t);if(0===n){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function _r(e){or=!1,nr=!0,rr.sort(vr);try{for(sr=0;srmr(e)-mr(t));if(ir.length=0,cr)return void cr.push(...e);for(cr=e,ur=0;urg(e)?e.trim():e)),n&&(s=o.map(R))}let u,l=r[u=A(n)]||r[u=A(O(n))];!l&&i&&(l=r[u=A(E(n))]),l&&Yo(l,e,6,s);const a=r[u+"Once"];if(a){if(e.emitted){if(e.emitted[u])return}else e.emitted={};e.emitted[u]=!0,Yo(a,e,6,s)}}function xr(e,t,n=!1){const o=t.emitsCache,r=o.get(e);if(void 0!==r)return r;const s=e.emits;let i={},u=!1;if(!h(e)){const o=e=>{const n=xr(e,t,!0);n&&(u=!0,c(i,n))};!n&&t.mixins.length&&t.mixins.forEach(o),e.extends&&o(e.extends),e.mixins&&e.mixins.forEach(o)}return s||u?(f(s)?s.forEach(e=>i[e]=null):c(i,s),v(e)&&o.set(e,i),i):(v(e)&&o.set(e,null),null)}function br(e,t){return!(!e||!s(t))&&(t=t.slice(2).replace(/Once$/,""),a(e,t[0].toLowerCase()+t.slice(1))||a(e,E(t))||a(e,t))}let wr=null;function $r(e){const t=wr;return wr=e,e&&e.type.__scopeId,t}function Sr(e,t){return e&&(e[t]||e[O(t)]||e[C(O(t))])}const kr={};function Or(e,t,n){return Pr(e,t,n)}function Pr(e,n,{immediate:r,deep:s,flush:i,once:c,onTrack:l,onTrigger:a}=t){if(n&&c){const e=n;n=(...t)=>{e(...t),k()}}const p=Es,d=e=>!0===s?e:Ar(e,!1===s?1:void 0);let g,m,v=!1,_=!1;if(Ko(e)?(g=()=>e.value,v=Do(e)):Vo(e)?(g=()=>d(e),v=!0):f(e)?(_=!0,v=e.some(e=>Vo(e)||Do(e)),g=()=>e.map(e=>Ko(e)?e.value:Vo(e)?d(e):h(e)?Xo(e,p,2):void 0)):g=h(e)?n?()=>Xo(e,p,2):()=>(m&&m(),Yo(e,p,3,[y])):o,n&&s){const e=g;g=()=>Ar(e())}let y=e=>{m=$.onStop=()=>{Xo(e,p,4),m=$.onStop=void 0}},x=_?new Array(e.length).fill(kr):kr;const b=()=>{if($.active&&$.dirty)if(n){const e=$.run();(s||v||(_?e.some((e,t)=>I(e,x[t])):I(e,x)))&&(m&&m(),Yo(n,p,3,[e,x===kr?void 0:_&&x[0]===kr?[]:x,y]),x=e)}else $.run()};let w;b.allowRecurse=!!n,"sync"===i?w=b:"post"===i?w=()=>$s(b,p&&p.suspense):(b.pre=!0,p&&(b.id=p.uid),w=()=>pr(b));const $=new En(g,o,w),S=kn,k=()=>{$.stop(),S&&u(S.effects,$)};return n?r?b():x=$.run():"post"===i?$s($.run.bind($),p&&p.suspense):$.run(),k}function Er(e,t,n){const o=this.proxy,r=g(e)?e.includes(".")?Cr(o,e):()=>o[e]:e.bind(o,o);let s;h(t)?s=t:(s=t.handler,n=t);const i=js(this),c=Pr(r,s.bind(o),n);return i(),c}function Cr(e,t){const n=t.split(".");return()=>{let t=e;for(let e=0;e0){if(n>=t)return e;n++}if((o=o||new Set).has(e))return e;if(o.add(e),Ko(e))Ar(e.value,t,n,o);else if(f(e))for(let r=0;r{Ar(e,t,n,o)});else if(b(e))for(const r in e)Ar(e[r],t,n,o);return e}function Ir(){return{app:null,config:{isNativeTag:r,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let jr=0;let Rr=null;function Lr(e,t,n=!1){const o=Es||wr;if(o||Rr){const r=o?null==o.parent?o.vnode.appContext&&o.vnode.appContext.provides:o.parent.provides:Rr._context.provides;if(r&&e in r)return r[e];if(arguments.length>1)return n&&h(t)?t.call(o&&o.proxy):t}}const Mr=e=>e.type.__isKeepAlive;function Vr(e,t){Dr(e,"a",t)}function Tr(e,t){Dr(e,"da",t)}function Dr(e,t,n=Es){const o=e.__wdc||(e.__wdc=()=>{let t=n;for(;t;){if(t.isDeactivated)return;t=t.parent}return e()});if(Nr(t,o,n),n){let e=n.parent;for(;e&&e.parent;)Mr(e.parent.vnode)&&Hr(o,t,n,e),e=e.parent}}function Hr(e,t,n,o){const r=Nr(t,e,o,!0);qr(()=>{u(o[t],r)},n)}function Nr(e,t,n=Es,o=!1){if(n){(function(e){return we.indexOf(e)>-1})(e)&&(n=n.root);const r=n[e]||(n[e]=[]),s=t.__weh||(t.__weh=(...o)=>{if(n.isUnmounted)return;Vn();const r=js(n),s=Yo(t,n,e,o);return r(),Tn(),s});return o?r.unshift(s):r.push(s),s}}const Br=e=>(t,n=Es)=>(!Ms||"sp"===e)&&Nr(e,(...e)=>t(...e),n),Ur=Br("bm"),Wr=Br("m"),zr=Br("bu"),Fr=Br("u"),Kr=Br("bum"),qr=Br("um"),Gr=Br("sp"),Jr=Br("rtg"),Zr=Br("rtc");function Qr(e,t=Es){Nr("ec",e,t)}const Xr=e=>e?Ls(e)?Ds(e)||e.proxy:Xr(e.parent):null,Yr=c(Object.create(null),{$:e=>e,$el:e=>e.__$el||(e.__$el={}),$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Xr(e.parent),$root:e=>Xr(e.root),$emit:e=>e.emit,$options:e=>cs(e),$forceUpdate:e=>e.f||(e.f=()=>{e.effect.dirty=!0,pr(e.update)}),$watch:e=>Er.bind(e)}),es=(e,n)=>e!==t&&!e.__isScriptSetup&&a(e,n),ts={get({_:e},n){const{ctx:o,setupState:r,data:s,props:i,accessCache:c,type:u,appContext:l}=e;let f;if("$"!==n[0]){const u=c[n];if(void 0!==u)switch(u){case 1:return r[n];case 2:return s[n];case 4:return o[n];case 3:return i[n]}else{if(es(r,n))return c[n]=1,r[n];if(s!==t&&a(s,n))return c[n]=2,s[n];if((f=e.propsOptions[0])&&a(f,n))return c[n]=3,i[n];if(o!==t&&a(o,n))return c[n]=4,o[n];os&&(c[n]=0)}}const p=Yr[n];let d,h;return p?("$attrs"===n&&qn(e,0,n),p(e)):(d=u.__cssModules)&&(d=d[n])?d:o!==t&&a(o,n)?(c[n]=4,o[n]):(h=l.config.globalProperties,a(h,n)?h[n]:void 0)},set({_:e},n,o){const{data:r,setupState:s,ctx:i}=e;return es(s,n)?(s[n]=o,!0):r!==t&&a(r,n)?(r[n]=o,!0):!a(e.props,n)&&(("$"!==n[0]||!(n.slice(1)in e))&&(i[n]=o,!0))},has({_:{data:e,setupState:n,accessCache:o,ctx:r,appContext:s,propsOptions:i}},c){let u;return!!o[c]||e!==t&&a(e,c)||es(n,c)||(u=i[0])&&a(u,c)||a(r,c)||a(Yr,c)||a(s.config.globalProperties,c)},defineProperty(e,t,n){return null!=n.get?e._.accessCache[t]=0:a(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function ns(e){return f(e)?e.reduce((e,t)=>(e[t]=null,e),{}):e}let os=!0;function rs(e){const t=cs(e),n=e.proxy,r=e.ctx;os=!1,t.beforeCreate&&ss(t.beforeCreate,e,"bc");const{data:s,computed:i,methods:c,watch:u,provide:l,inject:a,created:p,beforeMount:d,mounted:g,beforeUpdate:m,updated:_,activated:y,deactivated:x,beforeDestroy:b,beforeUnmount:w,destroyed:$,unmounted:S,render:k,renderTracked:O,renderTriggered:P,errorCaptured:E,serverPrefetch:C,expose:A,inheritAttrs:I,components:j,directives:R,filters:L}=t;if(a&&function(e,t){f(e)&&(e=fs(e));for(const n in e){const o=e[n];let r;r=v(o)?"default"in o?Lr(o.from||n,o.default,!0):Lr(o.from||n):Lr(o),Ko(r)?Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:()=>r.value,set:e=>r.value=e}):t[n]=r}}(a,r),c)for(const o in c){const e=c[o];h(e)&&(r[o]=e.bind(n))}if(s){const t=s.call(n,n);v(t)&&(e.data=Ro(t))}if(os=!0,i)for(const f in i){const e=i[f],t=h(e)?e.bind(n,n):h(e.get)?e.get.bind(n,n):o,s=!h(e)&&h(e.set)?e.set.bind(n):o,c=Hs({get:t,set:s});Object.defineProperty(r,f,{enumerable:!0,configurable:!0,get:()=>c.value,set:e=>c.value=e})}if(u)for(const o in u)is(u[o],r,n,o);function M(e,t){f(t)?t.forEach(t=>e(t.bind(n))):t&&e(t.bind(n))}if(function(){if(l){const e=h(l)?l.call(n):l;Reflect.ownKeys(e).forEach(t=>{!function(e,t){if(Es){let n=Es.provides;const o=Es.parent&&Es.parent.provides;o===n&&(n=Es.provides=Object.create(o)),n[e]=t,"app"===Es.type.mpType&&Es.appContext.app.provide(e,t)}}(t,e[t])})}}(),p&&ss(p,e,"c"),M(Ur,d),M(Wr,g),M(zr,m),M(Fr,_),M(Vr,y),M(Tr,x),M(Qr,E),M(Zr,O),M(Jr,P),M(Kr,w),M(qr,S),M(Gr,C),f(A))if(A.length){const t=e.exposed||(e.exposed={});A.forEach(e=>{Object.defineProperty(t,e,{get:()=>n[e],set:t=>n[e]=t})})}else e.exposed||(e.exposed={});k&&e.render===o&&(e.render=k),null!=I&&(e.inheritAttrs=I),j&&(e.components=j),R&&(e.directives=R),e.ctx.$onApplyOptions&&e.ctx.$onApplyOptions(t,e,n)}function ss(e,t,n){Yo(f(e)?e.map(e=>e.bind(t.proxy)):e.bind(t.proxy),t,n)}function is(e,t,n,o){const r=o.includes(".")?Cr(n,o):()=>n[o];if(g(e)){const n=t[e];h(n)&&Or(r,n)}else if(h(e))Or(r,e.bind(n));else if(v(e))if(f(e))e.forEach(e=>is(e,t,n,o));else{const o=h(e.handler)?e.handler.bind(n):t[e.handler];h(o)&&Or(r,o,e)}}function cs(e){const t=e.type,{mixins:n,extends:o}=t,{mixins:r,optionsCache:s,config:{optionMergeStrategies:i}}=e.appContext,c=s.get(t);let u;return c?u=c:r.length||n||o?(u={},r.length&&r.forEach(e=>us(u,e,i,!0)),us(u,t,i)):u=t,v(t)&&s.set(t,u),u}function us(e,t,n,o=!1){const{mixins:r,extends:s}=t;s&&us(e,s,n,!0),r&&r.forEach(t=>us(e,t,n,!0));for(const i in t)if(o&&"expose"===i);else{const o=ls[i]||n&&n[i];e[i]=o?o(e[i],t[i]):t[i]}return e}const ls={data:as,props:hs,emits:hs,methods:ds,computed:ds,beforeCreate:ps,created:ps,beforeMount:ps,mounted:ps,beforeUpdate:ps,updated:ps,beforeDestroy:ps,beforeUnmount:ps,destroyed:ps,unmounted:ps,activated:ps,deactivated:ps,errorCaptured:ps,serverPrefetch:ps,components:ds,directives:ds,watch:function(e,t){if(!e)return t;if(!t)return e;const n=c(Object.create(null),e);for(const o in t)n[o]=ps(e[o],t[o]);return n},provide:as,inject:function(e,t){return ds(fs(e),fs(t))}};function as(e,t){return t?e?function(){return c(h(e)?e.call(this,this):e,h(t)?t.call(this,this):t)}:t:e}function fs(e){if(f(e)){const t={};for(let n=0;n{d=!0;const[t,n]=_s(e,o,!0);c(l,t),n&&p.push(...n)};!r&&o.mixins.length&&o.mixins.forEach(t),e.extends&&t(e.extends),e.mixins&&e.mixins.forEach(t)}if(!u&&!d)return v(e)&&s.set(e,n),n;if(f(u))for(let n=0;n-1,o[1]=n<0||t-1||a(o,"default"))&&p.push(e)}}}const g=[l,p];return v(e)&&s.set(e,g),g}function ys(e){return"$"!==e[0]&&!$(e)}function xs(e){if(null===e)return"null";if("function"==typeof e)return e.name||"";if("object"==typeof e){return e.constructor&&e.constructor.name||""}return""}function bs(e,t){return xs(e)===xs(t)}function ws(e,t){return f(t)?t.findIndex(t=>bs(t,e)):h(t)&&bs(t,e)?0:-1}const $s=hr;function Ss(e){return e?Vo(t=e)||To(t)||"__vInternal"in e?c({},e):e:null;var t}const ks=Ir();let Os=0;function Ps(e,n,o){const r=e.type,s=(n?n.appContext:e.appContext)||ks,i={uid:Os++,vnode:e,type:r,parent:n,appContext:s,root:null,next:null,subTree:null,effect:null,update:null,scope:new Pn(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:n?n.provides:Object.create(s.provides),accessCache:null,renderCache:[],components:null,directives:null,propsOptions:_s(r,s),emitsOptions:xr(r,s),emit:null,emitted:null,propsDefaults:t,inheritAttrs:r.inheritAttrs,ctx:t,data:t,props:t,attrs:t,slots:t,refs:t,setupState:t,setupContext:null,attrsProxy:null,slotsProxy:null,suspense:o,suspenseId:o?o.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null,$uniElements:new Map,$templateUniElementRefs:[],$templateUniElementStyles:{},$eS:{},$eA:{}};return i.ctx={_:i},i.root=n?n.root:i,i.emit=yr.bind(null,i),e.ce&&e.ce(i),i}let Es=null;const Cs=()=>Es||wr;let As,Is;As=e=>{Es=e},Is=e=>{Ms=e};const js=e=>{const t=Es;return As(e),e.scope.on(),()=>{e.scope.off(),As(t)}},Rs=()=>{Es&&Es.scope.off(),As(null)};function Ls(e){return 4&e.vnode.shapeFlag}let Ms=!1;function Vs(e,t=!1){t&&Is(t);const{props:n}=e.vnode,o=Ls(e);gs(e,n,o,t);const r=o?function(e){const t=e.type;e.accessCache=Object.create(null),e.proxy=No(new Proxy(e.ctx,ts));const{setup:n}=t;if(n){const t=e.setupContext=n.length>1?function(e){const t=t=>{e.exposed=t||{}};return{get attrs(){return function(e){return e.attrsProxy||(e.attrsProxy=new Proxy(e.attrs,{get:(t,n)=>(qn(e,0,"$attrs"),t[n])}))}(e)},slots:e.slots,emit:e.emit,expose:t}}(e):null,o=js(e);Vn();const r=Xo(n,e,0,[e.props,t]);Tn(),o(),_(r)?r.then(Rs,Rs):function(e,t){h(t)?e.render=t:v(t)&&(e.setupState=Qo(t));Ts(e)}(e,r)}else Ts(e)}(e):void 0;return t&&Is(!1),r}function Ts(e,t,n){const r=e.type;e.render||(e.render=r.render||o);{const t=js(e);Vn();try{rs(e)}finally{Tn(),t()}}}function Ds(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Qo(No(e.exposed)),{get:(t,n)=>n in t?t[n]:e.proxy[n],has:(e,t)=>t in e||t in Yr}))}const Hs=(e,t)=>{const n=function(e,t,n=!1){let r,s;const i=h(e);return i?(r=e,s=o):(r=e.get,s=e.set),new Wo(r,s,i||!s,n)}(e,0,Ms);return n},Ns="3.4.21";function Bs(e){return Jo(e)}const Us="[object Array]",Ws="[object Object]";function zs(e,t){const n={};return Fs(e,t),Ks(e,t,"",n),n}function Fs(e,t){if((e=Bs(e))===t)return;const n=x(e),o=x(t);if(n==Ws&&o==Ws)for(let r in t){const n=e[r];void 0===n?e[r]=null:Fs(n,t[r])}else n==Us&&o==Us&&e.length>=t.length&&t.forEach((t,n)=>{Fs(e[n],t)})}function Ks(e,t,n,o){if((e=Bs(e))===t)return;const r=x(e),s=x(t);if(r==Ws)if(s!=Ws||Object.keys(e).length{Ks(e,s[t],(""==n?"":n+".")+i+"["+t+"]",o)});else if(c==Ws)if(u!=Ws||Object.keys(r).length{Ks(e,t[r],n+"["+r+"]",o)}):qs(o,n,e)}function qs(e,t,n){e[t]=n}function Gs(e){const t=e.ctx.__next_tick_callbacks;if(t&&t.length){const e=t.slice(0);t.length=0;for(let t=0;t{t?Xo(t.bind(e.proxy),e,14):o&&o(e.proxy)}),new Promise(e=>{o=e})}function Zs(e,t){const n=typeof(e=Bs(e));if("object"===n&&null!==e){let n=t.get(e);if(void 0!==n)return n;if(f(e)){const o=e.length;n=new Array(o),t.set(e,n);for(let r=0;r{o[e]=n[e]}),o}(n,Object.keys(t)));Object.keys(r).length?(o.__next_tick_pending=!0,n.setData(r,()=>{o.__next_tick_pending=!1,Gs(e)}),gr()):Gs(e)}}function Ys(e,t,n){t.appContext.config.globalProperties.$applyOptions(e,t,n);const o=e.computed;if(o){const e=Object.keys(o);if(e.length){const n=t.ctx;n.$computedKeys||(n.$computedKeys=[]),n.$computedKeys.push(...e)}}delete t.ctx.$onApplyOptions}function ei(e,t=!1){const{setupState:n,$templateRefs:o,$templateUniElementRefs:r,ctx:{$scope:s,$mpPlatform:i}}=e;if("mp-alipay"===i)return;if(!s||!o&&!r)return;if(t)return o&&o.forEach(e=>ti(e,null,n)),void(r&&r.forEach(e=>ti(e,null,n)));const c="mp-baidu"===i||"mp-toutiao"===i,u=e=>{if(0===e.length)return[];const t=(s.selectAllComponents(".r")||[]).concat(s.selectAllComponents(".r-i-f")||[]);return e.filter(e=>{const o=function(e,t){const n=e.find(e=>e&&(e.properties||e.props).uI===t);if(n){const e=n.$vm;return e?Ds(e.$)||e:function(e){v(e)&&No(e);return e}(n)}return null}(t,e.i);return!(!c||null!==o)||(ti(e,o,n),!1)})},l=()=>{if(o){const t=u(o);t.length&&e.proxy&&e.proxy.$scope&&e.proxy.$scope.setData({r1:1},()=>{u(t)})}};r&&r.length&&Js(e,()=>{r.forEach(e=>{f(e.v)?e.v.forEach(t=>{ti(e,t,n)}):ti(e,e.v,n)})}),s._$setRef?s._$setRef(l):Js(e,l)}function ti({r:e,f:t},n,o){if(h(e))e(n,{});else{const r=g(e),s=Ko(e);if(r||s)if(t){if(!s)return;f(e.value)||(e.value=[]);const t=e.value;if(-1===t.indexOf(n)){if(t.push(n),!n)return;n.$&&Kr(()=>u(t,n),n.$)}}else r?a(o,e)&&(o[e]=n):Ko(e)&&(e.value=n)}}const ni=hr;function oi(e,t){const n=e.component=Ps(e,t.parentComponent,null);return n.ctx.$onApplyOptions=Ys,n.ctx.$children=[],"app"===t.mpType&&(n.render=o),t.onBeforeSetup&&t.onBeforeSetup(n,t),Vs(n),t.parentComponent&&n.proxy&&t.parentComponent.ctx.$children.push(Ds(n)||n.proxy),function(e){const t=ui.bind(e);e.$updateScopedSlots=()=>fr(()=>pr(t));const n=()=>{if(e.isMounted){const{next:t,bu:n,u:o}=e;li(e,!1),ci(),n&&j(n),li(e,!0),Xs(e,si(e)),o&&ni(o)}else Kr(()=>{ei(e,!0)},e),Xs(e,si(e))},r=e.effect=new En(n,o,()=>pr(s),e.scope),s=e.update=()=>{r.dirty&&r.run()};s.id=e.uid,li(e,!0),s()}(n),n.proxy}const ri=e=>{let t;for(const n in e)("class"===n||"style"===n||s(n))&&((t||(t={}))[n]=e[n]);return t};function si(e){const{type:t,vnode:n,proxy:o,withProxy:r,props:s,propsOptions:[i],slots:c,attrs:u,emit:l,render:a,renderCache:f,data:p,setupState:d,ctx:h,uid:g,appContext:{app:{config:{globalProperties:{pruneComponentPropsCache:m}}}},inheritAttrs:v}=e;let _;e.$uniElementIds=new Map,e.$templateRefs=[],e.$templateUniElementRefs=[],e.$templateUniElementStyles={},e.$ei=0,m(g),e.__counter=0===e.__counter?1:0;const y=$r(e);try{if(4&n.shapeFlag){ii(v,s,i,u);const e=r||o;_=a.call(e,e,f,s,d,p,h)}else{ii(v,s,i,t.props?u:ri(u));const e=t;_=e.length>1?e(s,{attrs:u,slots:c,emit:l}):e(s,null)}}catch(x){er(x,e,1),_=!1}return ei(e),$r(y),_}function ii(e,t,n,o){if(t&&o&&!1!==e){const e=Object.keys(o).filter(e=>"class"!==e&&"style"!==e);if(!e.length)return;n&&e.some(i)?e.forEach(e=>{i(e)&&e.slice(9)in n||(t[e]=o[e])}):e.forEach(e=>t[e]=o[e])}}const ci=e=>{Vn(),gr(),Tn()};function ui(){const e=this.$scopedSlotsData;if(!e||0===e.length)return;const t=this.ctx.$scope,n=t.data,o=Object.create(null);e.forEach(({path:e,index:t,data:r})=>{const s=ve(n,e),i=g(t)?`${e}.${t}`:`${e}[${t}]`;if(void 0===s||void 0===s[t])o[i]=r;else{const e=zs(r,s[t]);Object.keys(e).forEach(t=>{o[i+"."+t]=e[t]})}}),e.length=0,Object.keys(o).length&&t.setData(o)}function li({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}const ai=function(e,t=null){h(e)||(e=c({},e)),null==t||v(t)||(t=null);const n=Ir(),o=new WeakSet,r=n.app={_uid:jr++,_component:e,_props:t,_container:null,_context:n,_instance:null,version:Ns,get config(){return n.config},set config(e){},use:(e,...t)=>(o.has(e)||(e&&h(e.install)?(o.add(e),e.install(r,...t)):h(e)&&(o.add(e),e(r,...t))),r),mixin:e=>(n.mixins.includes(e)||n.mixins.push(e),r),component:(e,t)=>t?(n.components[e]=t,r):n.components[e],directive:(e,t)=>t?(n.directives[e]=t,r):n.directives[e],mount(){},unmount(){},provide:(e,t)=>(n.provides[e]=t,r),runWithContext(e){const t=Rr;Rr=r;try{return e()}finally{Rr=t}}};return r};function fi(e,t=null){("undefined"!=typeof window?window:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof global?global:"undefined"!=typeof my?my:void 0).__VUE__=!0;const n=ai(e,t),r=n._context;r.config.globalProperties.$nextTick=function(e){return Js(this.$,e)};const s=e=>(e.appContext=r,e.shapeFlag=6,e),i=function(e,t){return oi(s(e),t)},c=function(e){return e&&function(e){const{bum:t,scope:n,update:o,um:r}=e;t&&j(t);{const t=e.parent;if(t){const n=t.ctx.$children,o=Ds(e)||e.proxy,r=n.indexOf(o);r>-1&&n.splice(r,1)}}n.stop(),o&&(o.active=!1),r&&ni(r),ni(()=>{e.isUnmounted=!0})}(e.$)};return n.mount=function(){e.render=o;const t=oi(s({type:e}),{mpType:"app",mpInstance:null,parentComponent:null,slots:[],props:null});return n._instance=t.$,t.$app=n,t.$createComponent=i,t.$destroyComponent=c,r.$appInstance=t,t},n.unmount=function(){},n}function pi(e,t,n,o){h(t)&&Nr(e,t.bind(n),o)}function di(e,t,n){!function(e,t,n){const o=e.mpType||n.$mpType;o&&"component"!==o&&Object.keys(e).forEach(o=>{if(ke(o,e[o],!1)){const r=e[o];f(r)?r.forEach(e=>pi(o,e,n,t)):pi(o,r,n,t)}})}(e,t,n)}function hi(e,t,n){return e[t]=n}function gi(e,...t){const n=this[e];return n?n(...t):(console.error(`method ${e} not found`),null)}function mi(e){const t=e.config.errorHandler;return function(n,o,r){t&&t(n,o,r);const s=e._instance;if(!s||!s.proxy)throw n;s[F]?s.proxy.$callHook(F,n):tr(n,0,o&&o.$.vnode,!1)}}function vi(e,t){return e?[...new Set([].concat(e,t))]:t}let _i;const yi="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",xi=/^(?:[A-Za-z\d+/]{4})*?(?:[A-Za-z\d+/]{2}(?:==)?|[A-Za-z\d+/]{3}=?)?$/;function bi(){const e=Sn.getStorageSync("uni_id_token")||"",t=e.split(".");if(!e||3!==t.length)return{uid:null,role:[],permission:[],tokenExpired:0};let n;try{n=JSON.parse((o=t[1],decodeURIComponent(_i(o).split("").map(function(e){return"%"+("00"+e.charCodeAt(0).toString(16)).slice(-2)}).join(""))))}catch(r){throw new Error("获取当前用户信息出错,详细错误信息为:"+r.message)}var o;return n.tokenExpired=1e3*n.exp,delete n.exp,delete n.iat,n}function wi(e){const t=e.config;var n;t.errorHandler=Ee(e,mi),n=t.optionMergeStrategies,$e.forEach(e=>{n[e]=vi});const o=t.globalProperties;!function(e){e.uniIDHasRole=function(e){const{role:t}=bi();return t.indexOf(e)>-1},e.uniIDHasPermission=function(e){const{permission:t}=bi();return this.uniIDHasRole("admin")||t.indexOf(e)>-1},e.uniIDTokenValid=function(){const{tokenExpired:e}=bi();return e>Date.now()}}(o),o.$set=hi,o.$applyOptions=di,o.$callMethod=gi,Sn.invokeCreateVueAppHook(e)}_i="function"!=typeof atob?function(e){if(e=String(e).replace(/[\t\n\f\r ]+/g,""),!xi.test(e))throw new Error("Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.");var t;e+="==".slice(2-(3&e.length));for(var n,o,r="",s=0;s>16&255):64===o?String.fromCharCode(t>>16&255,t>>8&255):String.fromCharCode(t>>16&255,t>>8&255,255&t);return r}:atob;const $i=Object.create(null);function Si(e){delete $i[e]}function ki(e){if(!e)return;const[t,n]=e.split(",");return $i[t]?$i[t][parseInt(n)]:void 0}var Oi={install(e){wi(e),e.config.globalProperties.pruneComponentPropsCache=Si;const t=e.mount;e.mount=function(n){const o=t.call(e,n),r=function(){const e="createApp";if("undefined"!=typeof global&&void 0!==global[e])return global[e];if("undefined"!=typeof my)return my[e]}();return r?r(o):"undefined"!=typeof createMiniProgramApp&&createMiniProgramApp(o),o}}};function Pi(e){return g(e)?e:function(e){let t="";if(!e||g(e))return t;for(const n in e)t+=`${n.startsWith("--")?n:E(n)}:${e[n]};`;return t}(L(e))}function Ei(e,t){const n=Cs(),r=n.ctx,s=void 0===t||"mp-weixin"!==r.$mpPlatform&&"mp-qq"!==r.$mpPlatform&&"mp-xhs"!==r.$mpPlatform||!g(t)&&"number"!=typeof t?"":"_"+t,i="e"+n.$ei+++s,u=r.$scope;if(!e)return delete u[i],i;const l=u[i];return l?l.value=e:u[i]=function(e,t){const n=e=>{var r;(r=e).type&&r.target&&(r.preventDefault=o,r.stopPropagation=o,r.stopImmediatePropagation=o,a(r,"detail")||(r.detail={}),a(r,"markerId")&&(r.detail="object"==typeof r.detail?r.detail:{},r.detail.markerId=r.markerId),b(r.detail)&&a(r.detail,"checked")&&!a(r.detail,"value")&&(r.detail.value=r.detail.checked),b(r.detail)&&(r.target=c({},r.target,r.detail)));let s=[e];t&&t.ctx.$getTriggerEventDetail&&"number"==typeof e.detail&&(e.detail=t.ctx.$getTriggerEventDetail(e.detail)),e.detail&&e.detail.__args__&&(s=e.detail.__args__);const i=n.value,u=()=>Yo(function(e,t){if(f(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n&&n.call(e),e._stopped=!0},t.map(e=>t=>!t._stopped&&e(t))}return t}(e,i),t,5,s),l=e.target,p=!!l&&(!!l.dataset&&"true"===String(l.dataset.eventsync));if(!Ci.includes(e.type)||p){const t=u();if("input"===e.type&&(f(t)||_(t)))return;return t}setTimeout(u)};return n.value=e,n}(e,n),i}const Ci=["tap","longpress","longtap","transitionend","animationstart","animationiteration","animationend","touchforcechange"];const Ai=function(e,t=null){return e&&(e.mpType="app"),fi(e,t).use(Oi)};const Ii=["externalClasses"];const ji=/_(.*)_worklet_factory_/;function Ri(e,t){const n=e.$children;for(let r=n.length-1;r>=0;r--){const e=n[r];if(e.$scope._$vueId===t)return e}let o;for(let r=n.length-1;r>=0;r--)if(o=Ri(n[r],t),o)return o}const Li=["createSelectorQuery","createIntersectionObserver","selectAllComponents","selectComponent"];function Mi(e,t){const n=e.ctx;n.mpType=t.mpType,n.$mpType=t.mpType,n.$mpPlatform="mp-weixin",n.$scope=t.mpInstance,Object.defineProperties(n,{[ge]:{get(){const e=this.$scope.data[ge];return void 0===e?"":e}}}),n.$mp={},n._self={},e.slots={},f(t.slots)&&t.slots.length&&(t.slots.forEach(t=>{e.slots[t]=!0}),e.slots.d&&(e.slots.default=!0)),n.getOpenerEventChannel=function(){return t.mpInstance.getOpenerEventChannel()},n.$hasHook=Vi,n.$callHook=Ti,e.emit=function(e,t){return function(n,...o){const r=t.$scope;if(r&&n){const e={__args__:o};r.triggerEvent(n,e)}return e.apply(this,[n,...o])}}(e.emit,n)}function Vi(e){const t=this.$[e];return!(!t||!t.length)}function Ti(e,t){"mounted"===e&&(Ti.call(this,"bm"),this.$.isMounted=!0,e="m");const n=this.$[e];return n&&((e,t)=>{let n;for(let o=0;o{ke(n,e[n])&&t.add(n)});{const{extends:n,mixins:o}=e;o&&o.forEach(e=>Hi(e,t)),n&&Hi(n,t)}}return t}function Ni(e,t,n){-1!==n.indexOf(t)||a(e,t)||(e[t]=function(e){return this.$vm&&this.$vm.$callHook(t,e)})}const Bi=[Z];function Ui(e,t,n=Bi){t.forEach(t=>Ni(e,t,n))}function Wi(e,t,n=Bi){Hi(t).forEach(t=>Ni(e,t,n))}const zi=me(()=>{const e=[],t=h(getApp)&&getApp({allowDefault:!0});if(t&&t.$vm&&t.$vm.$){const n=t.$vm.$.appContext.mixins;if(f(n)){const t=Object.keys(Se);n.forEach(n=>{t.forEach(t=>{a(n,t)&&!e.includes(t)&&e.push(t)})})}}return e});const Fi=[U,W,F,K,q,G];function Ki(e,t){const n=e.$,o={globalData:e.$options&&e.$options.globalData||{},$vm:e,onLaunch(t){this.$vm=e;const o=n.ctx;this.$vm&&o.$scope&&o.$callHook||(Mi(n,{mpType:"app",mpInstance:this,slots:[]}),o.globalData=this.globalData,e.$callHook(z,t))}},r=wx.$onErrorHandlers;r&&(r.forEach(e=>{Nr(F,e,n)}),r.length=0),function(e){const t=qo(function(){var e;let t="";{const n=(null===(e=wx.getAppBaseInfo)||void 0===e?void 0:e.call(wx))||wx.getSystemInfoSync();t=Le(n&&n.language?n.language:Re)||Re}return t}());Object.defineProperty(e,"$locale",{get:()=>t.value,set(e){t.value=e}})}(e);const s=e.$.type;Ui(o,Fi),Wi(o,s);{const e=s.methods;e&&c(o,e)}return o}function qi(e,t){if(h(e.onLaunch)){const t=wx.getLaunchOptionsSync&&wx.getLaunchOptionsSync();e.onLaunch(t)}h(e.onShow)&&wx.onAppShow&&wx.onAppShow(e=>{t.$callHook("onShow",e)}),h(e.onHide)&&wx.onAppHide&&wx.onAppHide(e=>{t.$callHook("onHide",e)})}const Gi=["eO","uR","uRIF","uI","uT","uP","uS"];function Ji(e){e.properties||(e.properties={}),c(e.properties,function(e,t=!1){const n={};if(!t){let e=function(e){const t=Object.create(null);e&&e.forEach(e=>{t[e]=!0}),this.setData({$slots:t})};Gi.forEach(e=>{n[e]={type:null,value:""}}),n.uS={type:null,value:[]},n.uS.observer=e}return e.behaviors&&e.behaviors.includes("wx://form-field")&&(e.properties&&e.properties.name||(n.name={type:null,value:""}),e.properties&&e.properties.value||(n.value={type:null,value:""})),n}(e),function(e){const t={};return e&&e.virtualHost&&(t.virtualHostStyle={type:null,value:""},t.virtualHostClass={type:null,value:""},t.virtualHostHidden={type:null,value:""},t[ge]={type:null,value:""}),t}(e.options))}const Zi=[String,Number,Boolean,Object,Array,null];function Qi(e,t){const n=function(e){return f(e)&&1===e.length?e[0]:e}(e);return-1!==Zi.indexOf(n)?n:null}function Xi(e,t){return(t?function(e){const t={};b(e)&&Object.keys(e).forEach(n=>{-1===Gi.indexOf(n)&&(t[n]=e[n])});return t}(e):ki(e.uP))||{}}function Yi(e){const t=function(){const e=this.properties.uP;e&&(this.$vm?function(e,t){const n=Ho(t.props),o=ki(e)||{};ec(n,o)&&(!function(e,t,n){const{props:o,attrs:r,vnode:{patchFlag:s}}=e,i=Ho(o),[c]=e.propsOptions;let u=!1;if(s>0&&!(16&s)){if(8&s){const n=e.vnode.dynamicProps;for(let s=0;s-1&&function(e){const t=rr.indexOf(e);t>sr&&rr.splice(t,1)}(t.update),t.update());var r}(e,this.$vm.$):"m"===this.properties.uT&&function(e,t){const n=t.properties,o=ki(e)||{};ec(n,o,!1)&&t.setData(o)}(e,this))};e.observers||(e.observers={}),e.observers.uP=t}function ec(e,t,n=!0){const o=Object.keys(t);if(n&&o.length!==Object.keys(e).length)return!0;for(let r=0;r{o.push(e.replace("uni://","wx://")),"uni://form-field"===e&&(f(n)?(n.push("name"),n.push("modelValue")):(n.name={type:String,default:""},n.modelValue={type:[String,Number,Boolean,Array,Object,Date],default:""}))}),o}(t)}function nc(e,{parse:t,mocks:n,isPage:o,isPageInProject:r,initRelation:s,handleLink:i,initLifetimes:u}){e=e.default||e;const l={multipleSlots:!0,addGlobalClass:!0,pureDataPattern:/^uP$/};f(e.mixins)&&e.mixins.forEach(e=>{v(e.options)&&c(l,e.options)}),e.options&&c(l,e.options);const p={options:l,lifetimes:u({mocks:n,isPage:o,initRelation:s,vueOptions:e}),pageLifetimes:{show(){this.$vm&&this.$vm.$callHook("onPageShow")},hide(){this.$vm&&this.$vm.$callHook("onPageHide")},resize(e){this.$vm&&this.$vm.$callHook("onPageResize",e)}},methods:{__l:i}};var d,h,g,m;return tc(p,e),Ji(p),Yi(p),function(e,t){Ii.forEach(n=>{a(t,n)&&(e[n]=t[n])})}(p,e),d=p.methods,h=e.wxsCallMethods,f(h)&&h.forEach(e=>{d[e]=function(t){return this.$vm[e](t)}}),g=p.methods,(m=e.methods)&&Object.keys(m).forEach(e=>{const t=e.match(ji);if(t){const n=t[1];g[e]=m[e],g[n]=m[n]}}),t&&t(p,{handleLink:i}),p}let oc,rc;function sc(){return getApp().$vm}function ic(e,t){const{parse:n,mocks:o,isPage:r,initRelation:s,handleLink:i,initLifetimes:c}=t,u=nc(e,{mocks:o,isPage:r,isPageInProject:!0,initRelation:s,handleLink:i,initLifetimes:c});!function({properties:e},t){f(t)?t.forEach(t=>{e[t]={type:String,value:""}}):b(t)&&Object.keys(t).forEach(n=>{const o=t[n];if(b(o)){let t=o.default;h(t)&&(t=t());const r=o.type;o.type=Qi(r),e[n]={type:o.type,value:t}}else e[n]={type:Qi(o)}})}(u,(e.default||e).props);const l=u.methods;return l.onLoad=function(e){var t;return this.options=e,this.$page={fullPath:(t=this.route+be(e),function(e){return 0===e.indexOf("/")}(t)?t:"/"+t)},this.$vm&&this.$vm.$callHook(J,e)},Ui(l,Di),Wi(l,e),function(e,t){if(!t)return;Object.keys(Se).forEach(n=>{t&Se[n]&&Ni(e,n,[])})}(l,e.__runtimeHooks),Ui(l,zi()),n&&n(u,{handleLink:i}),u}const cc=Page,uc=Component;function lc(e){const t=e.triggerEvent,n=function(n,...o){return t.apply(e,[(r=n,O(r.replace(ye,"-"))),...o]);var r};try{e.triggerEvent=n}catch(o){e._triggerEvent=n}}function ac(e,t,n){const o=t[e];t[e]=o?function(...e){return lc(this),o.apply(this,e)}:function(){lc(this)}}Page=function(e){return ac(J,e),cc(e)},Component=function(e){ac("created",e);return e.properties&&e.properties.uP||(Ji(e),Yi(e)),uc(e)};var fc=Object.freeze({__proto__:null,handleLink:function(e){const t=e.detail||e.value,n=t.vuePid;let o;n&&(o=Ri(this.$vm,n)),o||(o=this.$vm),t.parent=o},initLifetimes:function({mocks:e,isPage:t,initRelation:n,vueOptions:o}){return{attached(){let r=this.properties;!function(e,t){if(!e)return;const n=e.split(","),o=n.length;1===o?t._$vueId=n[0]:2===o&&(t._$vueId=n[0],t._$vuePid=n[1])}(r.uI,this);const s={vuePid:this._$vuePid};n(this,s);const i=this,c=t(i);let u=r;this.$vm=function(e,t){oc||(oc=sc().$createComponent);const n=oc(e,t);return Ds(n.$)||n}({type:o,props:Xi(u,c)},{mpType:c?"page":"component",mpInstance:i,slots:r.uS||{},parentComponent:s.parent&&s.parent.$,onBeforeSetup(t,n){!function(e,t){Object.defineProperty(e,"refs",{get(){const e={};return function(e,t,n){e.selectAllComponents(t).forEach(e=>{const t=e.properties.uR;n[t]=e.$vm||e})}(t,".r",e),t.selectAllComponents(".r-i-f").forEach(t=>{const n=t.properties.uR;n&&(e[n]||(e[n]=[]),e[n].push(t.$vm||t))}),e}})}(t,i),function(e,t,n){const o=e.ctx;n.forEach(n=>{a(t,n)&&(e[n]=o[n]=t[n])})}(t,i,e),function(e,t){Mi(e,t);const n=e.ctx;Li.forEach(e=>{n[e]=function(...t){const o=n.$scope;if(o&&o[e])return o[e].apply(o,t)}})}(t,n)}}),c||function(e){const t=e.$options;f(t.behaviors)&&t.behaviors.includes("uni://form-field")&&e.$watch("modelValue",()=>{e.$scope&&e.$scope.setData({name:e.name,value:e.modelValue})},{immediate:!0})}(this.$vm)},ready(){this.$vm&&(this.$vm.$callHook("mounted"),this.$vm.$callHook(Z))},detached(){var e;this.$vm&&(Si(this.$vm.$.uid),e=this.$vm,rc||(rc=sc().$destroyComponent),rc(e))}}},initRelation:function(e,t){e.triggerEvent("__l",t)},isPage:function(e){return!!e.route},mocks:["__route__","__wxExparserNodeId__","__wxWebviewId__"]});const pc=function(e){return App(Ki(e))},dc=(hc=fc,function(e){return Component(ic(e,hc))});var hc;const gc=function(e){return function(t){return Component(nc(t,e))}}(fc),mc=function(e){qi(Ki(e),e)},vc=function(e){const t=Ki(e),n=h(getApp)&&getApp({allowDefault:!0});if(!n)return;e.$.ctx.$scope=n;const o=n.globalData;o&&Object.keys(t.globalData).forEach(e=>{a(o,e)||(o[e]=t.globalData[e])}),Object.keys(t).forEach(e=>{a(n,e)||(n[e]=t[e])}),qi(t,e)};wx.createApp=global.createApp=pc,wx.createPage=dc,wx.createComponent=gc,wx.createPluginApp=global.createPluginApp=mc,wx.createSubpackageApp=global.createSubpackageApp=vc;const _c=e=>(t,n=Cs())=>{!Ms&&Nr(e,t,n)},yc=_c(J),xc=_c(ie),bc=_c(le);exports._export_sfc=(e,t)=>{const n=e.__vccOpts||e;for(const[o,r]of t)n[o]=r;return n},exports.computed=Hs,exports.createSSRApp=Ai,exports.e=(e,...t)=>c(e,...t),exports.f=(e,t)=>function(e,t){let n;if(f(e)||g(e)){n=new Array(e.length);for(let o=0,r=e.length;ot(e,n,n));else{const o=Object.keys(e);n=new Array(o.length);for(let r=0,s=o.length;rH(e),exports.o=(e,t)=>Ei(e,t),exports.onLoad=yc,exports.onMounted=Wr,exports.onShareAppMessage=bc,exports.onShareTimeline=xc,exports.onUnmounted=qr,exports.p=e=>function(e){const{uid:t,__counter:n}=Cs();return t+","+(($i[t]||($i[t]=[])).push(Ss(e))-1)+","+n}(e),exports.reactive=Ro,exports.ref=qo,exports.resolveComponent=function(e,t){return function(e,t,n=!0,o=!1){const r=wr||Es;if(r){const n=r.type;{const e=function(e,t=!0){return h(e)?e.displayName||e.name:e.name||t&&e.__name}(n,!1);if(e&&(e===t||e===O(t)||e===C(O(t))))return n}const s=Sr(r[e]||n[e],t)||Sr(r.appContext[e],t);return!s&&o?n:s}}("components",e,!0,t)||e},exports.s=e=>Pi(e),exports.t=e=>(e=>g(e)?e:null==e?"":f(e)||v(e)&&(e.toString===y||!h(e.toString))?JSON.stringify(e,N,2):String(e))(e),exports.unref=Jo;
diff --git a/dist/build/mp-weixin/components/AppIcon.js b/dist/build/mp-weixin/components/AppIcon.js
new file mode 100644
index 0000000..3d96e6b
--- /dev/null
+++ b/dist/build/mp-weixin/components/AppIcon.js
@@ -0,0 +1 @@
+"use strict";const e=require("../common/vendor.js");if(!Array){(e.resolveComponent("path")+e.resolveComponent("svg"))()}const C={__name:"AppIcon",props:{name:{type:String,required:!0},size:{type:Number,default:18},color:{type:String,default:"#475569"}},setup(C){const o=C,M={home:["M3 10.5L12 3L21 10.5","M6 9.5V20H18V9.5","M10 20V14H14V20"],report:["M7 3.5H14L18 7.5V20.5H7V3.5Z","M14 3.5V7.5H18","M9.5 12H15.5","M9.5 16H14"],mine:["M12 12C14.4853 12 16.5 9.98528 16.5 7.5C16.5 5.01472 14.4853 3 12 3C9.51472 3 7.5 5.01472 7.5 7.5C7.5 9.98528 9.51472 12 12 12Z","M4 20C4.9 16.7 8 14.5 12 14.5C16 14.5 19.1 16.7 20 20"],staff:["M7 11C8.65685 11 10 9.65685 10 8C10 6.34315 8.65685 5 7 5C5.34315 5 4 6.34315 4 8C4 9.65685 5.34315 11 7 11Z","M17 10C18.3807 10 19.5 8.88071 19.5 7.5C19.5 6.11929 18.3807 5 17 5C15.6193 5 14.5 6.11929 14.5 7.5C14.5 8.88071 15.6193 10 17 10Z","M3.5 19C4.1 16.7 5.9 15.2 8.4 15.2C10.9 15.2 12.7 16.7 13.3 19","M14 19C14.4 17.3 15.6 16.2 17.3 16.2C19 16.2 20.2 17.3 20.6 19"],service:["M5 8.5H19","M7.5 8.5V6.5C7.5 5.4 8.4 4.5 9.5 4.5H14.5C15.6 4.5 16.5 5.4 16.5 6.5V8.5","M6.5 8.5L7.2 18.5H16.8L17.5 8.5","M10 12.5L14 12.5"],store:["M4 9L5.5 4.5H18.5L20 9","M5 9V19H19V9","M8.5 19V14H15.5V19"],profile:["M12 12C14.4853 12 16.5 9.98528 16.5 7.5C16.5 5.01472 14.4853 3 12 3C9.51472 3 7.5 5.01472 7.5 7.5C7.5 9.98528 9.51472 12 12 12Z","M4.5 20C5.5 16.9 8.4 14.8 12 14.8C15.6 14.8 18.5 16.9 19.5 20"],orders:["M6 5H18","M6 9H18","M6 13H14","M6 3.5H18C18.8 3.5 19.5 4.2 19.5 5V19C19.5 19.8 18.8 20.5 18 20.5H6C5.2 20.5 4.5 19.8 4.5 19V5C4.5 4.2 5.2 3.5 6 3.5Z"],logout:["M10 6V4.5H5V19.5H10V18","M14 8L18 12L14 16","M18 12H9"],back:["M15 5L8 12L15 19"],close:["M6 6L18 18","M18 6L6 18"],camera:["M4.5 8.5H8L9.5 6.5H14.5L16 8.5H19.5V18.5H4.5V8.5Z","M12 16C13.933 16 15.5 14.433 15.5 12.5C15.5 10.567 13.933 9 12 9C10.067 9 8.5 10.567 8.5 12.5C8.5 14.433 10.067 16 12 16"],phone:["M2.25 6.75C2.25 15.03 8.97 21.75 17.25 21.75H19.5C20.7426 21.75 21.75 20.7426 21.75 19.5V19.128C21.75 18.612 21.399 18.162 20.898 18.03L16.475 16.924C16.035 16.814 15.573 16.979 15.303 17.354L14.333 18.647C14.051 19.047 13.53 19.188 13.098 19.035C10.834 18.208 8.792 16.166 7.965 13.902C7.812 13.47 7.953 12.949 8.353 12.667L9.646 11.697C10.021 11.427 10.186 10.965 10.076 10.525L8.97 6.102C8.838 5.601 8.388 5.25 7.872 5.25H4.5C3.25736 5.25 2.25 6.25736 2.25 7.5V6.75Z"],pin:["M15 10.5a3 3 0 11-6 0 3 3 0 016 0z","M19.5 10.5c0 7.142-7.5 11.25-7.5 11.25S4.5 17.642 4.5 10.5a7.5 7.5 0 1115 0z"]},r=e.computed(()=>M[o.name]||M.profile);return(o,M)=>({a:e.f(r.value,(o,M,r)=>({a:`${C.name}-${M}`,b:"385dda18-1-"+r+",385dda18-0",c:e.p({d:o,stroke:C.color,"stroke-width":"1.9","stroke-linecap":"round","stroke-linejoin":"round"})})),b:e.p({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"}),c:`${C.size}px`,d:`${C.size}px`})}},o=e._export_sfc(C,[["__scopeId","data-v-385dda18"]]);wx.createComponent(o);
diff --git a/dist/build/mp-weixin/components/AppIcon.json b/dist/build/mp-weixin/components/AppIcon.json
new file mode 100644
index 0000000..e8cfaaf
--- /dev/null
+++ b/dist/build/mp-weixin/components/AppIcon.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/dist/build/mp-weixin/components/AppIcon.wxml b/dist/build/mp-weixin/components/AppIcon.wxml
new file mode 100644
index 0000000..f22bf44
--- /dev/null
+++ b/dist/build/mp-weixin/components/AppIcon.wxml
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/dist/build/mp-weixin/components/AppIcon.wxss b/dist/build/mp-weixin/components/AppIcon.wxss
new file mode 100644
index 0000000..5e11e29
--- /dev/null
+++ b/dist/build/mp-weixin/components/AppIcon.wxss
@@ -0,0 +1 @@
+.app-icon.data-v-385dda18{display:inline-flex;align-items:center;justify-content:center}.app-icon svg.data-v-385dda18{width:100%;height:100%}
diff --git a/dist/build/mp-weixin/components/TabBar.js b/dist/build/mp-weixin/components/TabBar.js
new file mode 100644
index 0000000..644fc90
--- /dev/null
+++ b/dist/build/mp-weixin/components/TabBar.js
@@ -0,0 +1 @@
+"use strict";const e=require("../common/vendor.js");Math||r();const r=()=>"./AppIcon.js",o={__name:"TabBar",props:{currentPage:{type:String,default:"home"}},emits:["change"],setup(r,{emit:o}){const n=r,t=o;function a(e){n.currentPage!==e&&t("change",e)}return(r,o)=>({a:e.p({name:"home",size:16,color:"home"===n.currentPage?"#16a34a":"#64748b"}),b:"home"===n.currentPage?1:"",c:e.o(e=>a("home")),d:e.p({name:"report",size:16,color:"report"===n.currentPage?"#16a34a":"#64748b"}),e:"report"===n.currentPage?1:"",f:e.o(e=>a("report")),g:e.p({name:"mine",size:16,color:"mine"===n.currentPage?"#16a34a":"#64748b"}),h:"mine"===n.currentPage?1:"",i:e.o(e=>a("mine"))})}},n=e._export_sfc(o,[["__scopeId","data-v-09922235"]]);wx.createComponent(n);
diff --git a/dist/build/mp-weixin/components/TabBar.json b/dist/build/mp-weixin/components/TabBar.json
new file mode 100644
index 0000000..1d71049
--- /dev/null
+++ b/dist/build/mp-weixin/components/TabBar.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "app-icon": "./AppIcon"
+ }
+}
\ No newline at end of file
diff --git a/dist/build/mp-weixin/components/TabBar.wxml b/dist/build/mp-weixin/components/TabBar.wxml
new file mode 100644
index 0000000..7f70c1a
--- /dev/null
+++ b/dist/build/mp-weixin/components/TabBar.wxml
@@ -0,0 +1 @@
+服务预约洗美报告我的
\ No newline at end of file
diff --git a/dist/build/mp-weixin/components/TabBar.wxss b/dist/build/mp-weixin/components/TabBar.wxss
new file mode 100644
index 0000000..00e7461
--- /dev/null
+++ b/dist/build/mp-weixin/components/TabBar.wxss
@@ -0,0 +1 @@
+.tabbar.data-v-09922235{position:fixed;bottom:0;left:0;right:0;height:calc(104rpx + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom);background:rgba(255,255,255,.96);backdrop-filter:blur(8px);border-top:1px solid #e8edf4;display:flex;flex-direction:row;z-index:999}.tabbar-item.data-v-09922235{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;color:#94a3b8;transition:color .2s ease}.tabbar-item.active.data-v-09922235{color:#16a34a}.tabbar-icon.data-v-09922235{width:40rpx;height:40rpx;border-radius:11rpx;background:#eaf0f7;display:flex;align-items:center;justify-content:center;margin-bottom:4rpx}.tabbar-item.active .tabbar-icon.data-v-09922235{background:#dcfce7}.tabbar-text.data-v-09922235{font-size:22rpx;line-height:1;font-weight:600}
diff --git a/dist/build/mp-weixin/composables/useNavigator.js b/dist/build/mp-weixin/composables/useNavigator.js
new file mode 100644
index 0000000..e3f4c84
--- /dev/null
+++ b/dist/build/mp-weixin/composables/useNavigator.js
@@ -0,0 +1 @@
+"use strict";const a=require("../utils/globalState.js");exports.useNavigator=()=>({goPage:t=>{a.navigateTo(t)},navigateTo:a.navigateTo});
diff --git a/dist/build/mp-weixin/pages/home/Home.js b/dist/build/mp-weixin/pages/home/Home.js
new file mode 100644
index 0000000..91f76eb
--- /dev/null
+++ b/dist/build/mp-weixin/pages/home/Home.js
@@ -0,0 +1 @@
+"use strict";const e=require("../../common/vendor.js"),t=require("../../api/index.js"),a=require("../../utils/session.js"),n=require("../../composables/useNavigator.js"),i=require("../../utils/datetime.js"),s=require("../../utils/appointment.js");Math||(l+o)();const o=()=>"../../components/TabBar.js",l=()=>"../../components/AppIcon.js",u={__name:"Home",emits:["change-page"],setup(o,{emit:l}){const u=a.getUserSession(),p=a.getStoreSession();u.id;const{goPage:r,navigateTo:c}=n.useNavigator(),v=(()=>{var t,a,n,i;const s=(null==(a=(t=e.index).getSystemInfoSync)?void 0:a.call(t).statusBarHeight)||20;let o=s+44;const l=null==(i=(n=e.index).getMenuButtonBoundingClientRect)?void 0:i.call(n);if(l&&l.top&&l.height){o=s+2*Math.max(l.top-s,4)+l.height}return`padding-top:${s}px;height:${o}px;`})(),d=e.ref("doing"),m=[{title:"待确认",name:"new"},{title:"进行中",name:"doing"},{title:"已完成",name:"done"}],T=e.ref([]),g=e.computed(()=>T.value.filter(e=>"new"===e.status).length),f=e.ref([]),h=e.ref(!1),y=e.ref(!1),w=[{label:"猫",value:"猫"},{label:"狗",value:"狗"},{label:"其他",value:"其他"}],x=e.ref({petName:"",petType:"",serviceType:"",appointmentTime:"",remark:""}),N=e.computed(()=>{const e=x.value.appointmentTime||"";return e.includes("T")?e.split("T")[0]:""}),$=e.computed(()=>{const e=x.value.appointmentTime||"";return e.includes("T")?(e.split("T")[1]||"").slice(0,5):""}),j=e.computed(()=>T.value.filter(e=>"new"===d.value?"new"===e.status:"doing"===d.value?"doing"===e.status:"done"!==d.value||("done"===e.status||"cancel"===e.status))),S=e=>{var t;const a=(null==(t=null==e?void 0:e.detail)?void 0:t.value)||"",n=$.value||"00:00";x.value.appointmentTime=a?`${a}T${n}`:""},b=t=>{var a;const n=(null==(a=null==t?void 0:t.detail)?void 0:a.value)||"",i=N.value;i?x.value.appointmentTime=`${i}T${n}`:e.index.showToast({title:"请先选择日期",icon:"none"})},q=async()=>{if(!p.id)return;const a=await t.getAppointmentList(null,p.id);if(200===a.code){T.value=a.data.map(e=>({id:e.id,title:e.serviceType||"洗澡美容预约",desc:`${e.petType||""} - ${e.petName||""}`,time:i.formatDateTimeCN(e.appointmentTime),status:e.status||"new",statusText:s.getAppointmentStatusText(e.status),petName:e.petName,petType:e.petType,serviceType:e.serviceType,appointmentTime:e.appointmentTime}));const t=T.value.filter(e=>"new"===e.status).length;t>0&&e.index.showToast({title:`有 ${t} 个待确认预约`,icon:"none"})}},A=async()=>{const a=x.value;if(!a.petName)return void e.index.showToast({title:"请输入宠物名字",icon:"none"});if(!a.petType)return void e.index.showToast({title:"请选择宠物类型",icon:"none"});if(!a.serviceType)return void e.index.showToast({title:"请选择服务类型",icon:"none"});if(!a.appointmentTime)return void e.index.showToast({title:"请选择预约时间",icon:"none"});y.value=!0;const n=await t.createAppointment({...a,storeId:p.id,userId:u.id});y.value=!1,200===n.code?(e.index.showToast({title:"预约创建成功",icon:"success"}),x.value={petName:"",petType:"",serviceType:"",appointmentTime:"",remark:""},h.value=!1,q()):e.index.showToast({title:n.message||"创建失败",icon:"none"})};return e.onMounted(()=>{q(),(async()=>{if(!p.id)return;const e=await t.getServiceTypeList(p.id);200===e.code&&(f.value=e.data.map(e=>({label:e.name,value:e.name})))})()}),(a,n)=>e.e({a:e.o(e=>h.value=!0),b:e.s(e.unref(v)),c:e.f(m,(t,a,n)=>e.e({a:e.t(t.title),b:"new"===t.name&&g.value>0},"new"===t.name&&g.value>0?{c:e.t(g.value)}:{},{d:t.name,e:e.n({active:d.value===t.name}),f:e.o(e=>d.value=t.name,t.name)})),d:j.value.length>0},j.value.length>0?{e:e.f(j.value,(a,n,i)=>{return e.e({a:e.n(`dot-${a.status}`),b:"d5a02c57-0-"+i,c:e.t(a.petName),d:e.t(a.statusText),e:e.n((o=a.status,s.getAppointmentTagClass(o))),f:e.t(a.serviceType),g:e.n(`tag-${a.status}`),h:"d5a02c57-1-"+i,i:e.t(a.time),j:"new"===a.status},"new"===a.status?{k:e.o(n=>(async a=>{const n=await t.startAppointment(a.id,u.id);200===n.code?(e.index.showToast({title:"已开始服务",icon:"success"}),q()):e.index.showToast({title:n.message||"操作失败",icon:"none"})})(a),a.id),l:e.o(n=>(async a=>{e.index.showModal({title:"提示",content:"确定取消该预约?",success:async n=>{if(!n.confirm)return;const i=await t.cancelAppointment(a.id);200===i.code?(e.index.showToast({title:"已取消",icon:"success"}),q()):e.index.showToast({title:i.message||"操作失败",icon:"none"})}})})(a),a.id)}:"doing"===a.status?{n:e.o(t=>(t=>{c("report"),e.index.setStorageSync("petstore_report_prefill",JSON.stringify({appointmentId:t.id,petName:t.petName,serviceType:t.serviceType,appointmentTime:t.appointmentTime}))})(a),a.id)}:{o:e.t("cancel"===a.status?"已取消":"已完成")},{m:"doing"===a.status,p:e.n(`card-${a.status}`),q:a.id});var o}),f:e.p({name:"profile",size:14}),g:e.p({name:"orders",size:13})}:{},{h:0===j.value.length},(j.value.length,{}),{i:h.value},h.value?{j:e.o(e=>h.value=!1),k:x.value.petName,l:e.o(e=>x.value.petName=e.detail.value),m:e.t(x.value.petType||"请选择"),n:w,o:e.o(e=>x.value.petType=w[e.detail.value].value),p:e.t(x.value.serviceType||"请选择"),q:f.value,r:e.o(e=>x.value.serviceType=f.value[e.detail.value].value),s:e.t(N.value||"请选择日期"),t:N.value,v:e.o(S),w:e.t($.value||"请选择时间"),x:$.value,y:e.o(b),z:x.value.remark,A:e.o(e=>x.value.remark=e.detail.value),B:e.o(e=>h.value=!1),C:y.value,D:e.o(A),E:e.o(()=>{}),F:e.o(e=>h.value=!1)}:{},{G:e.o(e.unref(r)),H:e.p({"current-page":"home"})})}},p=e._export_sfc(u,[["__scopeId","data-v-d5a02c57"]]);wx.createPage(p);
diff --git a/dist/build/mp-weixin/pages/home/Home.json b/dist/build/mp-weixin/pages/home/Home.json
new file mode 100644
index 0000000..41b9197
--- /dev/null
+++ b/dist/build/mp-weixin/pages/home/Home.json
@@ -0,0 +1,6 @@
+{
+ "usingComponents": {
+ "tab-bar": "../../components/TabBar",
+ "app-icon": "../../components/AppIcon"
+ }
+}
\ No newline at end of file
diff --git a/dist/build/mp-weixin/pages/home/Home.wxml b/dist/build/mp-weixin/pages/home/Home.wxml
new file mode 100644
index 0000000..3674aa0
--- /dev/null
+++ b/dist/build/mp-weixin/pages/home/Home.wxml
@@ -0,0 +1 @@
+宠伴生活馆今日服务看板待确认、进行中、已完成实时同步,支持一键开始服务与快速填报。{{tab.a}} {{item.i}}暂无数据
\ No newline at end of file
diff --git a/dist/build/mp-weixin/pages/home/Home.wxss b/dist/build/mp-weixin/pages/home/Home.wxss
new file mode 100644
index 0000000..88623e2
--- /dev/null
+++ b/dist/build/mp-weixin/pages/home/Home.wxss
@@ -0,0 +1 @@
+.home-page.data-v-d5a02c57{padding-bottom:140rpx}.home-nav.data-v-d5a02c57{padding:0 16px 10px;display:flex;justify-content:space-between;align-items:center;position:sticky;top:0;z-index:10}.nav-title.data-v-d5a02c57{font-size:18px;font-weight:700;color:#fff;letter-spacing:.5px}.home-hero.data-v-d5a02c57{margin-top:12px;padding:14px 16px;border:1px solid #dcefe3;border-radius:14px;background:linear-gradient(135deg,#f3fff7,#ecfbf3)}.hero-title.data-v-d5a02c57{font-size:16px;font-weight:700;color:#166534}.hero-sub.data-v-d5a02c57{margin-top:4px;font-size:12px;color:#4b5563;line-height:1.45}.list-content.data-v-d5a02c57{padding:0}.btn-primary.data-v-d5a02c57{display:inline-flex;align-items:center;justify-content:center;height:34px;padding:0 16px;font-size:14px;border-radius:10px;background:linear-gradient(135deg,#22c55e,#16a34a);color:#fff;border:none;cursor:pointer;font-weight:600;box-shadow:0 6px 14px rgba(34,197,94,.22)}.btn-secondary.data-v-d5a02c57{display:inline-flex;align-items:center;justify-content:center;height:34px;padding:0 14px;font-size:14px;border-radius:10px;background:#f8fafc;color:#334155;border:1px solid #dbe3ee;cursor:pointer}.btn-block.data-v-d5a02c57{display:inline-flex;align-items:center;justify-content:center;flex:1;height:44px;font-size:16px;border-radius:8px;background:linear-gradient(135deg,#22c55e,#16a34a);color:#fff;border:none;cursor:pointer}.btn-ghost.data-v-d5a02c57{display:inline-flex;align-items:center;justify-content:center;width:96px;height:44px;border-radius:8px;border:1px solid #dbe3ee;background:#fff;color:#64748b;font-size:15px}.remark-textarea.data-v-d5a02c57{min-height:84px;line-height:1.45}.custom-tabs.data-v-d5a02c57{display:flex;background:#fff;border:1px solid #e8edf4;border-radius:14px;box-shadow:0 4px 16px rgba(15,23,42,.05);margin:12px 0 0;padding:0 12px}.tab-item.data-v-d5a02c57{flex:1;text-align:center;padding:12px 0;font-size:15px;color:#999;cursor:pointer;position:relative}.tab-item.active.data-v-d5a02c57{color:#16a34a;font-weight:600}.tab-item.active.data-v-d5a02c57:after{content:"";position:absolute;bottom:0;left:50%;transform:translate(-50%);width:40px;height:3px;background:#16a34a;border-radius:2px}.tab-badge.data-v-d5a02c57{position:absolute;top:6px;right:12px;background:#ef4444;color:#fff;font-size:10px;font-weight:700;padding:0 5px;height:16px;line-height:16px;border-radius:8px;min-width:8px;text-align:center}.tag-warning.data-v-d5a02c57{display:inline-flex;align-items:center;font-size:12px;padding:2px 8px;border-radius:10px;background:#fff3e8;color:#ff6b35;font-weight:500}.tag-primary.data-v-d5a02c57{display:inline-flex;align-items:center;font-size:12px;padding:2px 8px;border-radius:10px;background:#e8f7ef;color:#07c160;font-weight:500}.tag-success.data-v-d5a02c57{display:inline-flex;align-items:center;font-size:12px;padding:2px 8px;border-radius:10px;background:#f0f0f0;color:#888;font-weight:500}.tag-default.data-v-d5a02c57{display:inline-flex;align-items:center;font-size:12px;padding:2px 8px;border-radius:10px;background:#f5f5f5;color:#999;font-weight:500}.van-field.data-v-d5a02c57{display:flex;align-items:center;background:#f5f5f5;border-radius:8px;padding:8px 12px;color:#333;min-height:40px;font-size:14px;width:100%;box-sizing:border-box}.timeline.data-v-d5a02c57{padding:4px 0}.timeline-item.data-v-d5a02c57{display:flex;align-items:flex-start;margin-bottom:4px;position:relative}.timeline-dot.data-v-d5a02c57{display:flex;flex-direction:column;align-items:center;width:24px;flex-shrink:0;padding-top:14px}.dot-inner.data-v-d5a02c57{width:12px;height:12px;border-radius:50%;background:#fff;z-index:1}.dot-new .dot-inner.data-v-d5a02c57{background:#ff6b35}.dot-doing .dot-inner.data-v-d5a02c57{background:#07c160}.dot-done .dot-inner.data-v-d5a02c57{background:silver}.dot-cancel .dot-inner.data-v-d5a02c57{background:#d0d0d0}.timeline-line.data-v-d5a02c57{position:absolute;left:11px;top:28px;bottom:-4px;width:2px;background:#e8e0d8}.timeline-item:last-child .timeline-line.data-v-d5a02c57{display:none}.order-card.data-v-d5a02c57{flex:1;background:#fff;border-radius:14px;padding:14px 16px;margin-left:12px;margin-bottom:12px;box-shadow:0 8px 18px rgba(15,23,42,.06);border-left:4px solid;border:1px solid #e8edf4}.card-new.data-v-d5a02c57{border-left-color:#ff6b35}.card-doing.data-v-d5a02c57{border-left-color:#07c160}.card-done.data-v-d5a02c57{border-left-color:silver}.card-cancel.data-v-d5a02c57{border-left-color:#d8d8d8;opacity:.7}.card-header.data-v-d5a02c57{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.pet-info.data-v-d5a02c57{display:flex;align-items:center;gap:8px}.pet-emoji.data-v-d5a02c57{width:20px;height:20px;border-radius:6px;background:#eef2f7;display:inline-flex;align-items:center;justify-content:center}.pet-name.data-v-d5a02c57{font-weight:600;color:#333;font-size:15px}.service-row.data-v-d5a02c57{margin-bottom:8px}.service-tag.data-v-d5a02c57{font-size:12px;background:#fdf6f0;color:#8b5e3c;padding:2px 8px;border-radius:10px;font-weight:500}.tag-new.data-v-d5a02c57{background:#fff3e8;color:#ff6b35}.tag-doing.data-v-d5a02c57{background:#e8f7ef;color:#07c160}.tag-done.data-v-d5a02c57{background:#f0f0f0;color:#888}.card-body.data-v-d5a02c57{margin-bottom:10px}.card-time.data-v-d5a02c57{font-size:13px;color:#6b7280;display:inline-flex;align-items:center;gap:4px}.card-footer.data-v-d5a02c57{display:flex;justify-content:flex-end;align-items:center}.action-btns.data-v-d5a02c57{display:flex;gap:8px}.done-label.data-v-d5a02c57{font-size:13px;color:#999}.popup-mask.data-v-d5a02c57{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.5);z-index:3000;display:flex;align-items:flex-end;justify-content:center}.popup-content.data-v-d5a02c57{background:#fff;border-radius:20px 20px 0 0;width:430px;max-width:100%;height:calc(100vh - 24px);max-height:calc(100vh - 24px);display:flex;flex-direction:column;position:relative}.popup-header.data-v-d5a02c57{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid #f0f0f0}.popup-title.data-v-d5a02c57{font-size:16px;font-weight:600}.popup-close.data-v-d5a02c57{font-size:18px;color:#999}.popup-body.data-v-d5a02c57{padding:16px 20px 120px;overflow-y:auto;flex:1}.popup-footer.data-v-d5a02c57{position:absolute;left:0;right:0;bottom:0;background:#fff;border-top:1px solid #eef2f7;padding:10px 20px max(env(safe-area-inset-bottom),16px);z-index:2}.popup-desc.data-v-d5a02c57{font-size:12px;color:#6b7280;line-height:1.45;margin-bottom:10px}.popup-actions.data-v-d5a02c57{display:flex;align-items:center;gap:10px}.field-label.data-v-d5a02c57{font-size:14px;color:#666;margin-bottom:6px;margin-top:12px}.picker-field.data-v-d5a02c57{display:flex;align-items:center;background:#f5f5f5;border-radius:8px;padding:8px 12px;color:#333;min-height:40px;font-size:14px;width:100%;box-sizing:border-box}
diff --git a/dist/build/mp-weixin/pages/login/Login.js b/dist/build/mp-weixin/pages/login/Login.js
new file mode 100644
index 0000000..fb8f334
--- /dev/null
+++ b/dist/build/mp-weixin/pages/login/Login.js
@@ -0,0 +1 @@
+"use strict";const e=require("../../common/vendor.js"),o=require("../../api/index.js"),a=require("../../utils/session.js"),l=require("../../utils/globalState.js"),n={__name:"Login",setup(n){const s=e.ref("login"),t=e.reactive({phone:"13800138001",code:"123456"}),r=e.reactive({storeName:"",bossName:"",phone:"",password:""}),u=e.reactive({inviteCode:"",name:"",phone:"",password:""}),i=e.ref(!1),v=e.ref(!1),d=e.ref(0),c=e.ref(!1),p=e.ref(!1),h=e.ref({store:{},user:{}});let g=null;const f=o=>e.index.showToast({title:o,icon:"none"}),m=async()=>{if(!t.phone||11!==t.phone.length)return f("请输入正确的手机号");const e=await o.sendSms(t.phone);200===e.code?(f("验证码已发送"),d.value=60,g=setInterval(()=>{d.value--,d.value<=0&&clearInterval(g)},1e3)):f(e.message||"发送失败")},w=async()=>{if(!t.phone||11!==t.phone.length)return f("请输入正确的手机号");if(!t.code||6!==t.code.length)return f("请输入6位验证码");i.value=!0;try{const e=await o.login(t.phone,t.code);200===e.code?(a.setUserSession(e.data.user),a.setStoreSession(e.data.store),l.navigateTo("home")):f(e.message||"登录失败")}catch(e){f("网络异常,请检查服务是否启动")}finally{i.value=!1}},b=()=>{f("跳转到微信授权..."),setTimeout(()=>{a.setUserSession({id:99,name:"微信用户",phone:"",role:"staff"}),a.setStoreSession({id:2,name:"宠伴生活馆测试店"}),l.navigateTo("home")},1500)},S=async()=>{const e=r;if(!e.storeName)return f("请输入店铺名称");if(!e.bossName)return f("请输入您的姓名");if(!e.phone||11!==e.phone.length)return f("请输入正确的手机号");if(!e.password||e.password.length<6)return f("密码至少6位");v.value=!0;const a=await o.registerBoss(e);v.value=!1,200===a.code?(h.value=a.data,c.value=!0):f(a.message||"注册失败")},C=async()=>{const e=u;if(!e.inviteCode||8!==e.inviteCode.length)return f("请输入8位邀请码");if(!e.name)return f("请输入您的姓名");if(!e.phone||11!==e.phone.length)return f("请输入正确的手机号");if(!e.password||e.password.length<6)return f("密码至少6位");v.value=!0;const a=await o.registerStaff(e);v.value=!1,200===a.code?(h.value=a.data,p.value=!0):f(a.message||"注册失败")},N=()=>{var o,a;e.index.setClipboardData({data:(null==(a=null==(o=h.value)?void 0:o.store)?void 0:a.inviteCode)||"",success:()=>e.index.showToast({title:"邀请码已复制",icon:"none"})})},x=()=>{s.value="login",c.value=!1,p.value=!1};return e.onUnmounted(()=>{g&&clearInterval(g)}),(o,a)=>{var l,n,g,f,y,T,_,j,q,I,U,B,D,L;return e.e({a:c.value},c.value?{b:e.t(null==(n=null==(l=h.value)?void 0:l.store)?void 0:n.name),c:e.t(null==(f=null==(g=h.value)?void 0:g.user)?void 0:f.phone),d:e.t(null==(T=null==(y=h.value)?void 0:y.user)?void 0:T.password),e:e.t(null==(j=null==(_=h.value)?void 0:_.store)?void 0:j.inviteCode),f:e.o(N),g:e.o(x)}:p.value?{i:e.t(null==(I=null==(q=h.value)?void 0:q.store)?void 0:I.name),j:e.t(null==(B=null==(U=h.value)?void 0:U.store)?void 0:B.name),k:e.t(null==(L=null==(D=h.value)?void 0:D.user)?void 0:L.phone),l:e.o(x)}:"login"===s.value?{n:t.phone,o:e.o(e=>t.phone=e.detail.value),p:t.code,q:e.o(e=>t.code=e.detail.value),r:e.t(d.value>0?d.value+"s":"获取验证码"),s:d.value>0,t:e.o(m),v:i.value,w:e.o(w),x:e.o(b),y:e.o(e=>s.value="staff-reg"),z:e.o(e=>s.value="boss-reg")}:"boss-reg"===s.value?{B:r.storeName,C:e.o(e=>r.storeName=e.detail.value),D:r.bossName,E:e.o(e=>r.bossName=e.detail.value),F:r.phone,G:e.o(e=>r.phone=e.detail.value),H:r.password,I:e.o(e=>r.password=e.detail.value),J:v.value,K:e.o(S),L:e.o(e=>s.value="login")}:"staff-reg"===s.value?{N:u.inviteCode,O:e.o(e=>u.inviteCode=e.detail.value),P:u.name,Q:e.o(e=>u.name=e.detail.value),R:u.phone,S:e.o(e=>u.phone=e.detail.value),T:u.password,U:e.o(e=>u.password=e.detail.value),V:v.value,W:e.o(C),X:e.o(e=>s.value="login")}:{},{h:p.value,m:"login"===s.value,A:"boss-reg"===s.value,M:"staff-reg"===s.value})}}},s=e._export_sfc(n,[["__scopeId","data-v-3e0cfe9c"]]);wx.createPage(s);
diff --git a/dist/build/mp-weixin/pages/login/Login.json b/dist/build/mp-weixin/pages/login/Login.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/dist/build/mp-weixin/pages/login/Login.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/dist/build/mp-weixin/pages/login/Login.wxml b/dist/build/mp-weixin/pages/login/Login.wxml
new file mode 100644
index 0000000..35cf03e
--- /dev/null
+++ b/dist/build/mp-weixin/pages/login/Login.wxml
@@ -0,0 +1 @@
+宠伴生活馆宠物服务,让爱更专业🎉入驻成功欢迎加入宠伴生活馆✅注册成功您已成功加入 {{i}} 团队手机验证码登录其他登录方式商家入驻员工注册请输入店长提供的邀请码加入团队
\ No newline at end of file
diff --git a/dist/build/mp-weixin/pages/login/Login.wxss b/dist/build/mp-weixin/pages/login/Login.wxss
new file mode 100644
index 0000000..cc6fcc0
--- /dev/null
+++ b/dist/build/mp-weixin/pages/login/Login.wxss
@@ -0,0 +1 @@
+.login-page.data-v-3e0cfe9c{min-height:100vh;background:radial-gradient(circle at top left,#22c55e,#16a34a 46%,#15803d);display:flex;flex-direction:column;padding:60px 32px 32px}.login-logo.data-v-3e0cfe9c{text-align:center;margin-bottom:44px}.login-logo-text.data-v-3e0cfe9c{font-size:30px;font-weight:800;color:#fff;letter-spacing:2px;text-shadow:0 4px 12px rgba(0,0,0,.18)}.login-logo-sub.data-v-3e0cfe9c{font-size:13px;color:rgba(255,255,255,.82);margin-top:6px}.form-title.data-v-3e0cfe9c{font-size:18px;font-weight:600;color:#333;margin-bottom:20px;text-align:center}.login-divider.data-v-3e0cfe9c{text-align:center;margin:16px 0 12px;color:#999;font-size:13px;position:relative}.login-divider.data-v-3e0cfe9c:before,.login-divider.data-v-3e0cfe9c:after{content:"";position:absolute;top:50%;width:28%;height:1px;background:#eee}.login-divider.data-v-3e0cfe9c:before{left:0}.login-divider.data-v-3e0cfe9c:after{right:0}.links.data-v-3e0cfe9c{display:flex;justify-content:space-between;font-size:13px}.link.data-v-3e0cfe9c{color:#16a34a;font-weight:600;cursor:pointer}.invite-hint.data-v-3e0cfe9c{background:#f0f9f4;border:1px solid #b7eb8f;border-radius:8px;padding:12px;font-size:13px;color:#52c41a;margin-bottom:12px}.wechat-icon.data-v-3e0cfe9c{margin-right:6px}.success-icon.data-v-3e0cfe9c{font-size:60px;text-align:center;margin-bottom:16px}.success-title.data-v-3e0cfe9c{font-size:20px;font-weight:600;text-align:center;color:#333;margin-bottom:8px}.success-sub.data-v-3e0cfe9c{font-size:14px;color:#999;text-align:center;margin-bottom:24px}.success-info.data-v-3e0cfe9c{background:#f9f9f9;border-radius:12px;padding:16px;margin-bottom:20px}.info-row.data-v-3e0cfe9c{display:flex;justify-content:space-between;padding:6px 0;font-size:14px}.info-row .label.data-v-3e0cfe9c{color:#999}.info-row .value.data-v-3e0cfe9c{color:#333;font-weight:500}.sms-field.data-v-3e0cfe9c{display:flex;align-items:center;gap:8px;margin-bottom:12px}.sms-input.data-v-3e0cfe9c{flex:1}.top-gap-sm.data-v-3e0cfe9c{margin-top:12px}.top-gap-md.data-v-3e0cfe9c{margin-top:20px}
diff --git a/dist/build/mp-weixin/pages/mine/Mine.js b/dist/build/mp-weixin/pages/mine/Mine.js
new file mode 100644
index 0000000..77d8310
--- /dev/null
+++ b/dist/build/mp-weixin/pages/mine/Mine.js
@@ -0,0 +1 @@
+"use strict";const e=require("../../common/vendor.js"),n=require("../../utils/session.js"),o=require("../../composables/useNavigator.js");Math||(t+r)();const r=()=>"../../components/TabBar.js",t=()=>"../../components/AppIcon.js",s={__name:"Mine",emits:["change-page"],setup(r,{emit:t}){const s=n.getUserSession(),{goPage:a,navigateTo:i}=o.useNavigator(),u=(()=>{var n,o,r,t;let s=((null==(o=(n=e.index).getSystemInfoSync)?void 0:o.call(n).statusBarHeight)||20)+12;const a=null==(t=(r=e.index).getMenuButtonBoundingClientRect)?void 0:t.call(r);return a&&a.top&&a.height&&(s=a.top+a.height+8),`padding-top:${s}px;`})(),c=e.computed(()=>s.name?s.name.slice(0,1).toUpperCase():"?"),p=e.computed(()=>{var e;if(s.avatar)return{};const n=["#ff7c43","#07c160","#8b6914","#e06040","#5090d0"];return{background:n[((null==(e=s.name)?void 0:e.charCodeAt(0))||0)%n.length]}}),f=()=>{e.index.showModal({title:"提示",content:"确定退出登录?",success:e=>{e.confirm&&(n.clearSession(),i("login"))}})};return(n,o)=>e.e({a:e.unref(s).avatar},e.unref(s).avatar?{b:e.unref(s).avatar}:{c:e.t(c.value)},{d:e.s(p.value),e:e.t(e.unref(s).name),f:e.t(e.unref(s).phone),g:e.t("boss"===e.unref(s).role?"店长":"员工"),h:e.s(e.unref(u)),i:e.o(n=>e.unref(i)("profile")),j:"boss"===e.unref(s).role},"boss"===e.unref(s).role?{k:e.p({name:"staff",size:15}),l:e.o(n=>e.unref(i)("staff")),m:e.p({name:"service",size:15}),n:e.o(n=>e.unref(i)("serviceType")),o:e.p({name:"store",size:15}),p:e.o(n=>e.unref(i)("store"))}:{},{q:e.p({name:"profile",size:15}),r:e.o(n=>e.unref(i)("profile")),s:e.p({name:"report",size:15}),t:e.o(n=>e.unref(i)("myReports")),v:e.p({name:"orders",size:15}),w:e.o(n=>e.unref(i)("myOrders")),x:e.p({name:"logout",size:15,color:"#dc2626"}),y:e.o(f),z:e.o(e.unref(a)),A:e.p({"current-page":"mine"})})}},a=e._export_sfc(s,[["__scopeId","data-v-27768e55"]]);wx.createPage(a);
diff --git a/dist/build/mp-weixin/pages/mine/Mine.json b/dist/build/mp-weixin/pages/mine/Mine.json
new file mode 100644
index 0000000..41b9197
--- /dev/null
+++ b/dist/build/mp-weixin/pages/mine/Mine.json
@@ -0,0 +1,6 @@
+{
+ "usingComponents": {
+ "tab-bar": "../../components/TabBar",
+ "app-icon": "../../components/AppIcon"
+ }
+}
\ No newline at end of file
diff --git a/dist/build/mp-weixin/pages/mine/Mine.wxml b/dist/build/mp-weixin/pages/mine/Mine.wxml
new file mode 100644
index 0000000..d5c5870
--- /dev/null
+++ b/dist/build/mp-weixin/pages/mine/Mine.wxml
@@ -0,0 +1 @@
+{{e}}{{f}}{{g}}
\ No newline at end of file
diff --git a/dist/build/mp-weixin/pages/mine/Mine.wxss b/dist/build/mp-weixin/pages/mine/Mine.wxss
new file mode 100644
index 0000000..939f838
--- /dev/null
+++ b/dist/build/mp-weixin/pages/mine/Mine.wxss
@@ -0,0 +1 @@
+.mine-page.data-v-27768e55{padding-bottom:140rpx;background:#f5f7fb;min-height:100vh}.user-card.data-v-27768e55{background:linear-gradient(135deg,#22c55e,#16a34a);border-radius:0 0 24px 24px;padding:24px 16px 22px;color:#fff;cursor:pointer;box-shadow:0 10px 24px rgba(34,197,94,.25)}.user-info.data-v-27768e55{display:flex;align-items:center;gap:12px}.user-info-content.data-v-27768e55{flex:1}.user-avatar.data-v-27768e55{width:58px;height:58px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:24px;overflow:hidden;flex-shrink:0;border:2px solid rgba(255,255,255,.3)}.avatar-img.data-v-27768e55{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.avatar-initials.data-v-27768e55{color:#fff;font-size:22px;font-weight:700}.user-name.data-v-27768e55{font-size:21px;font-weight:700;color:#fff;line-height:1.1}.user-phone.data-v-27768e55{font-size:14px;opacity:.92;margin-top:4px}.role-pill.data-v-27768e55{margin-top:8px;display:inline-flex;align-items:center;height:24px;padding:0 10px;border-radius:999px;font-size:12px;font-weight:700;background:rgba(255,255,255,.92);color:#166534}.menu-section.data-v-27768e55{padding:0 14px;margin-top:12px}.menu-card.data-v-27768e55{background:#fff;border:1px solid #e6ecf4;border-radius:16px;box-shadow:0 8px 20px rgba(15,23,42,.05);overflow:hidden}.menu-title.data-v-27768e55{font-size:12px;color:#94a3b8;font-weight:700;padding:12px 14px 8px}.menu-item.data-v-27768e55{min-height:54px;padding:0 14px;display:flex;align-items:center;justify-content:space-between}.menu-item+.menu-item.data-v-27768e55{border-top:1px solid #eef2f7}.menu-left.data-v-27768e55{display:flex;align-items:center;gap:10px}.menu-icon.data-v-27768e55{width:28px;height:28px;border-radius:8px;background:#f1f5f9;display:inline-flex;align-items:center;justify-content:center;font-size:16px}.menu-text.data-v-27768e55{font-size:16px;color:#1f2937;font-weight:600}.menu-arrow.data-v-27768e55{color:#c4cfdd;font-size:18px}.logout-btn.data-v-27768e55{width:100%;height:44px;display:inline-flex;align-items:center;justify-content:center;gap:6px;border-radius:12px;border:1px solid #fecaca;background:#fff1f2;color:#dc2626;font-size:15px;font-weight:700}
diff --git a/dist/build/mp-weixin/pages/mine/MyOrders.js b/dist/build/mp-weixin/pages/mine/MyOrders.js
new file mode 100644
index 0000000..6219459
--- /dev/null
+++ b/dist/build/mp-weixin/pages/mine/MyOrders.js
@@ -0,0 +1 @@
+"use strict";const e=require("../../common/vendor.js"),t=require("../../utils/globalState.js"),n=require("../../api/index.js"),i=require("../../utils/session.js"),a=require("../../utils/datetime.js"),s=require("../../utils/appointment.js");Math||o();const o=()=>"../../components/AppIcon.js",p={__name:"MyOrders",emits:["change-page"],setup(o,{emit:p}){const c=i.getUserSession(),r=c.id,u=(()=>{var t,n,i,a;const s=(null==(n=(t=e.index).getSystemInfoSync)?void 0:n.call(t).statusBarHeight)||20;let o=s+44;const p=null==(a=(i=e.index).getMenuButtonBoundingClientRect)?void 0:a.call(i);if(p&&p.top&&p.height){o=s+2*Math.max(p.top-s,4)+p.height}return`padding-top:${s}px;height:${o}px;`})(),d=e.ref("new"),m=e.ref([]),l=[{title:"待确认",name:"new"},{title:"进行中",name:"doing"},{title:"已完成",name:"done"}],g=e.computed(()=>m.value.filter(e=>"new"===d.value?"new"===e.status:"doing"===d.value?"doing"===e.status:"done"!==d.value||("done"===e.status||"cancel"===e.status))),v=async()=>{if(!r)return;const e=await n.getAppointmentList(r);200===e.code&&(m.value=e.data.map(e=>({id:e.id,title:e.serviceType||"洗澡美容预约",desc:`${e.petType||""} - ${e.petName||""}`,time:a.formatDateTimeCN(e.appointmentTime),status:e.status||"new",statusText:s.getAppointmentStatusText(e.status),petName:e.petName,petType:e.petType,serviceType:e.serviceType,appointmentTime:e.appointmentTime})))};return e.onMounted(()=>v()),(i,a)=>e.e({a:e.p({name:"back",size:18,color:"#ffffff"}),b:e.o(n=>e.unref(t.navigateTo)("mine")),c:e.s(e.unref(u)),d:e.f(l,(t,n,i)=>({a:e.t(t.title),b:t.name,c:e.n({active:d.value===t.name}),d:e.o(e=>d.value=t.name,t.name)})),e:e.f(g.value,(i,a,o)=>{return e.e({a:e.t(i.title),b:e.t(i.statusText),c:e.n(`van-tag van-tag--${p=i.status,s.getAppointmentTagType(p)}`),d:"be66263e-1-"+o,e:e.t(i.desc),f:"be66263e-2-"+o,g:e.t(i.time),h:"new"===i.status},"new"===i.status?{i:e.o(t=>(async t=>{const i=await n.startAppointment(t.id,c.id);200===i.code?(e.index.showToast({title:"已开始服务",icon:"success"}),v()):e.index.showToast({title:i.message||"操作失败",icon:"none"})})(i),i.id),j:e.o(t=>(async t=>{e.index.showModal({title:"提示",content:"确定取消该预约?",success:async i=>{i.confirm&&200===(await n.cancelAppointment(t.id)).code&&(e.index.showToast({title:"已取消",icon:"success"}),v())}})})(i),i.id)}:"doing"===i.status?{l:e.o(n=>(n=>{e.index.setStorageSync("petstore_report_prefill",JSON.stringify({appointmentId:n.id,petName:n.petName,serviceType:n.serviceType,appointmentTime:n.appointmentTime})),t.navigateTo("report")})(i),i.id)}:{},{k:"doing"===i.status,m:i.id});var p}),f:e.p({name:"profile",size:12}),g:e.p({name:"orders",size:12,color:"#94a3b8"}),h:0===g.value.length},(g.value.length,{}))}},c=e._export_sfc(p,[["__scopeId","data-v-be66263e"]]);wx.createPage(c);
diff --git a/dist/build/mp-weixin/pages/mine/MyOrders.json b/dist/build/mp-weixin/pages/mine/MyOrders.json
new file mode 100644
index 0000000..841188a
--- /dev/null
+++ b/dist/build/mp-weixin/pages/mine/MyOrders.json
@@ -0,0 +1,5 @@
+{
+ "usingComponents": {
+ "app-icon": "../../components/AppIcon"
+ }
+}
\ No newline at end of file
diff --git a/dist/build/mp-weixin/pages/mine/MyOrders.wxml b/dist/build/mp-weixin/pages/mine/MyOrders.wxml
new file mode 100644
index 0000000..6e54dc8
--- /dev/null
+++ b/dist/build/mp-weixin/pages/mine/MyOrders.wxml
@@ -0,0 +1 @@
+我的订单服务进度一目了然按状态查看订单,待确认可快速开始服务,进行中可直接填写报告。{{tab.a}}{{item.a}}{{item.b}}暂无数据
\ No newline at end of file
diff --git a/dist/build/mp-weixin/pages/mine/MyOrders.wxss b/dist/build/mp-weixin/pages/mine/MyOrders.wxss
new file mode 100644
index 0000000..e7fa3ed
--- /dev/null
+++ b/dist/build/mp-weixin/pages/mine/MyOrders.wxss
@@ -0,0 +1 @@
+.orders-page.data-v-be66263e{padding-bottom:120rpx}.nav-placeholder.data-v-be66263e{width:32px}.btn-mt.data-v-be66263e{margin-top:10px}.orders-hero.data-v-be66263e{margin-top:12px;padding:14px 16px;border:1px solid #dcefe3;border-radius:14px;background:linear-gradient(135deg,#f3fff7,#ecfbf3)}.hero-title.data-v-be66263e{font-size:16px;font-weight:700;color:#166534}.hero-sub.data-v-be66263e{margin-top:4px;font-size:12px;color:#4b5563;line-height:1.45}.orders-nav.data-v-be66263e{padding:14px 16px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:10}.nav-back.data-v-be66263e{font-size:20px;color:#fff}.nav-title.data-v-be66263e{font-size:18px;font-weight:700;color:#fff}.order-item.data-v-be66263e{background:#fff;margin-bottom:12px;border-radius:14px;padding:16px;border:1px solid #e8edf4;box-shadow:0 6px 16px rgba(15,23,42,.05)}.order-head.data-v-be66263e{display:flex;align-items:center;justify-content:space-between;gap:8px}.order-title.data-v-be66263e{font-size:15px;font-weight:700;color:#1f2937;margin-bottom:6px}.order-desc.data-v-be66263e{font-size:13px;color:#6b7280;margin-bottom:10px;display:flex;align-items:center;gap:6px}.desc-icon.data-v-be66263e{width:18px;height:18px;border-radius:6px;background:#eef2f7;display:inline-flex;align-items:center;justify-content:center}.order-footer.data-v-be66263e{display:flex;justify-content:space-between;align-items:center}.order-time.data-v-be66263e{font-size:12px;color:#94a3b8;display:inline-flex;align-items:center;gap:4px}.action-btns.data-v-be66263e{display:flex;gap:8px;margin-top:10px}
diff --git a/dist/build/mp-weixin/pages/mine/MyReports.js b/dist/build/mp-weixin/pages/mine/MyReports.js
new file mode 100644
index 0000000..679d779
--- /dev/null
+++ b/dist/build/mp-weixin/pages/mine/MyReports.js
@@ -0,0 +1 @@
+"use strict";const e=require("../../common/vendor.js"),t=require("../../utils/globalState.js"),o=require("../../api/index.js"),n=require("../../utils/session.js");Math||a();const a=()=>"../../components/AppIcon.js",r={__name:"MyReports",emits:["change-page"],setup(a,{emit:r}){const s=n.getUserSession(),i=n.getStoreSession(),l=(()=>{var t,o,n,a;const r=(null==(o=(t=e.index).getSystemInfoSync)?void 0:o.call(t).statusBarHeight)||20;let s=r+44;const i=null==(a=(n=e.index).getMenuButtonBoundingClientRect)?void 0:a.call(n);if(i&&i.top&&i.height){s=r+2*Math.max(i.top-r,4)+i.height}return`padding-top:${r}px;height:${s}px;`})(),u=e.ref(!1),c=e.ref([]),p=()=>{t.navigateTo("home")};return e.onMounted(()=>(async()=>{u.value=!0;const e="boss"===s.role?{storeId:i.id}:{userId:s.id},t=await o.getReportList(e);u.value=!1,200===t.code&&(c.value=t.data)})()),(t,n)=>e.e({a:e.p({name:"home",size:16,color:"#ffffff"}),b:e.o(p),c:e.s(e.unref(l)),d:e.t(c.value.length),e:c.value.length>0},c.value.length>0?{f:e.f(c.value,(t,n,a)=>e.e({a:t.beforePhoto},t.beforePhoto?{b:e.unref(o.imgUrl)(t.beforePhoto)}:{c:"7cf97651-1-"+a,d:e.p({name:"camera",size:18,color:"#94a3b8"})},{e:e.t(t.petName),f:e.t(t.serviceType),g:"7cf97651-2-"+a,h:t.id,i:e.o(n=>(t=>{o.API_ORIGIN,t.reportToken,e.index.navigateTo({url:`/pages/report-view/reportView?token=${t.reportToken}`})})(t),t.id)})),g:e.p({name:"report",size:11,color:"#64748b"})}:{},{h:!u.value&&0===c.value.length},(u.value||c.value.length,{}))}},s=e._export_sfc(r,[["__scopeId","data-v-7cf97651"]]);wx.createPage(s);
diff --git a/dist/build/mp-weixin/pages/mine/MyReports.json b/dist/build/mp-weixin/pages/mine/MyReports.json
new file mode 100644
index 0000000..841188a
--- /dev/null
+++ b/dist/build/mp-weixin/pages/mine/MyReports.json
@@ -0,0 +1,5 @@
+{
+ "usingComponents": {
+ "app-icon": "../../components/AppIcon"
+ }
+}
\ No newline at end of file
diff --git a/dist/build/mp-weixin/pages/mine/MyReports.wxml b/dist/build/mp-weixin/pages/mine/MyReports.wxml
new file mode 100644
index 0000000..9190e53
--- /dev/null
+++ b/dist/build/mp-weixin/pages/mine/MyReports.wxml
@@ -0,0 +1 @@
+我的报告服务成果回顾已生成 {{d}} 份报告,点击卡片可查看详情并分享。{{r.e}}{{r.f}}暂无报告
\ No newline at end of file
diff --git a/dist/build/mp-weixin/pages/mine/MyReports.wxss b/dist/build/mp-weixin/pages/mine/MyReports.wxss
new file mode 100644
index 0000000..e6d78ef
--- /dev/null
+++ b/dist/build/mp-weixin/pages/mine/MyReports.wxss
@@ -0,0 +1 @@
+.my-reports-page.data-v-7cf97651{padding:0 0 120rpx}.nav-placeholder.data-v-7cf97651{width:32px}.nav-home-btn.data-v-7cf97651{background:rgba(255,255,255,.2);border:1px solid rgba(255,255,255,.35)}.reports-hero.data-v-7cf97651{margin-top:12px;padding:14px 16px;border:1px solid #dcefe3;border-radius:14px;background:linear-gradient(135deg,#f3fff7,#ecfbf3)}.hero-title.data-v-7cf97651{font-size:16px;font-weight:700;color:#166534}.hero-sub.data-v-7cf97651{margin-top:4px;font-size:12px;color:#4b5563;line-height:1.45}.hero-count.data-v-7cf97651{font-weight:700;color:#16a34a}.placeholder-icon.data-v-7cf97651{width:36px;height:36px;border-radius:10px;background:#e2e8f0;display:inline-flex;align-items:center;justify-content:center}.report-nav.data-v-7cf97651{padding:14px 16px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:10}.nav-back.data-v-7cf97651{font-size:20px;color:#fff}.nav-title.data-v-7cf97651{font-size:18px;font-weight:700;color:#fff}.gallery-grid.data-v-7cf97651{display:grid;grid-template-columns:1fr 1fr;gap:12px;padding-top:14px}.gallery-item.data-v-7cf97651{border-radius:14px;overflow:hidden;cursor:pointer;background:#fff;border:1px solid #e8edf4;box-shadow:0 8px 18px rgba(15,23,42,.06)}.gallery-cover.data-v-7cf97651{position:relative;width:100%;aspect-ratio:1;overflow:hidden}.cover-img.data-v-7cf97651{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.cover-placeholder.data-v-7cf97651{width:100%;height:100%;background:#f0ede8;display:flex;align-items:center;justify-content:center}.gallery-overlay.data-v-7cf97651{position:absolute;bottom:0;left:0;right:0;padding:8px 10px;background:linear-gradient(transparent,rgba(0,0,0,.65));color:#fff}.overlay-name.data-v-7cf97651{font-size:13px;font-weight:600}.overlay-service.data-v-7cf97651{font-size:11px;opacity:.9;margin-top:2px}.gallery-meta.data-v-7cf97651{padding:8px 10px 10px;background:#fff}.meta-chip.data-v-7cf97651{display:inline-flex;align-items:center;gap:4px;height:22px;padding:0 8px;border-radius:999px;background:#f1f5f9;color:#64748b;font-size:11px}
diff --git a/dist/build/mp-weixin/pages/mine/Profile.js b/dist/build/mp-weixin/pages/mine/Profile.js
new file mode 100644
index 0000000..c16d64c
--- /dev/null
+++ b/dist/build/mp-weixin/pages/mine/Profile.js
@@ -0,0 +1 @@
+"use strict";const e=require("../../common/vendor.js"),a=require("../../utils/globalState.js"),o=require("../../api/index.js"),n=require("../../utils/session.js");Math||t();const t=()=>"../../components/AppIcon.js",l={__name:"Profile",emits:["change-page"],setup(t,{emit:l}){const s=(()=>{var a,o,n,t;const l=(null==(o=(a=e.index).getSystemInfoSync)?void 0:o.call(a).statusBarHeight)||20;let s=l+44;const i=null==(t=(n=e.index).getMenuButtonBoundingClientRect)?void 0:t.call(n);if(i&&i.top&&i.height){s=l+2*Math.max(i.top-l,4)+i.height}return`padding-top:${l}px;height:${s}px;`})(),i=e.ref(n.getUserSession()),u=e.ref(!1),v=e.ref(!1),c=e.ref(!1),r=e.ref(!1),d=e.ref(0);let m=null;const h=e.ref({name:"",phone:"",code:""}),p=e.computed(()=>i.value.name?i.value.name.slice(0,1).toUpperCase():"?"),f=["#ff7c43","#07c160","#8b6914","#e06040","#5090d0"],g=e.computed(()=>{var e;const a=((null==(e=i.value.name)?void 0:e.charCodeAt(0))||0)%f.length;return{background:f[a]}}),x=async()=>{const a=h.value.phone;if(!a||11!==a.length)return void e.index.showToast({title:"请输入正确的手机号",icon:"none"});const n=await o.sendSms(a);200===n.code?(e.index.showToast({title:"验证码已发送",icon:"none"}),d.value=60,m=setInterval(()=>{d.value--,d.value<=0&&clearInterval(m)},1e3)):e.index.showToast({title:n.message||"发送失败",icon:"none"})},w=async()=>{if(!h.value.name||!h.value.name.trim())return void e.index.showToast({title:"请输入姓名",icon:"none"});c.value=!0;const a=await o.updateUser({id:i.value.id,name:h.value.name.trim()});c.value=!1,200===a.code?(i.value.name=h.value.name.trim(),n.setUserSession(i.value),e.index.showToast({title:"修改成功",icon:"success"}),u.value=!1):e.index.showToast({title:a.message||"修改失败",icon:"none"})},T=async()=>{const{phone:a,code:t}=h.value;if(!a||11!==a.length)return void e.index.showToast({title:"请输入正确的手机号",icon:"none"});if(!t||6!==t.length)return void e.index.showToast({title:"请输入6位验证码",icon:"none"});r.value=!0;const l=await o.updateUser({id:i.value.id,phone:a,code:t});r.value=!1,200===l.code?(i.value.phone=a,n.setUserSession(i.value),e.index.showToast({title:"修改成功",icon:"success"}),v.value=!1):e.index.showToast({title:l.message||"修改失败",icon:"none"})},U=()=>{e.index.chooseImage({count:1,success:async a=>{const t=a.tempFilePaths[0];e.index.showLoading({title:"上传中..."}),e.index.uploadFile({url:`${o.BASE_URL}/upload/image`,filePath:t,name:"file",success:async a=>{e.index.hideLoading();const t=JSON.parse(a.data);if(200===t.code){const a=o.imgUrl(t.data.url),l=await o.updateUser({id:i.value.id,avatar:t.data.url});200===l.code?(i.value.avatar=a,n.setUserSession(i.value),e.index.showToast({title:"头像已更新",icon:"success"})):e.index.showToast({title:l.message||"更新失败",icon:"none"})}else e.index.showToast({title:t.message||"上传失败",icon:"none"})},fail:()=>{e.index.hideLoading(),e.index.showToast({title:"上传失败",icon:"none"})}})}})};return e.onMounted(()=>{h.value.name=i.value.name||"",h.value.phone=i.value.phone||""}),e.onUnmounted(()=>{m&&clearInterval(m)}),(n,t)=>e.e({a:e.p({name:"back",size:18,color:"#ffffff"}),b:e.o(o=>e.unref(a.navigateTo)("mine")),c:e.s(e.unref(s)),d:i.value.avatar},i.value.avatar?{e:e.unref(o.imgUrl)(i.value.avatar)}:{f:e.t(p.value),g:e.s(g.value)},{h:e.p({name:"camera",size:12,color:"#64748b"}),i:e.o(U),j:e.t(i.value.name||"未设置姓名"),k:e.t(i.value.phone||"未绑定手机号"),l:"boss"===i.value.role},(i.value.role,{}),{m:e.p({name:"profile",size:15}),n:e.t(i.value.name||"未设置"),o:e.o(e=>u.value=!0),p:e.p({name:"orders",size:15}),q:e.t(i.value.phone||"未设置"),r:e.o(e=>v.value=!0),s:e.p({name:"mine",size:15}),t:"boss"===i.value.role},(i.value.role,{}),{v:e.t("boss"===i.value.role?"商家版":"员工版"),w:u.value},u.value?{x:e.p({name:"close",size:18,color:"#94a3b8"}),y:e.o(e=>u.value=!1),z:h.value.name,A:e.o(e=>h.value.name=e.detail.value),B:c.value,C:e.o(w),D:e.o(()=>{}),E:e.o(e=>u.value=!1)}:{},{F:v.value},v.value?{G:e.p({name:"close",size:18,color:"#94a3b8"}),H:e.o(e=>v.value=!1),I:h.value.phone,J:e.o(e=>h.value.phone=e.detail.value),K:h.value.code,L:e.o(e=>h.value.code=e.detail.value),M:e.t(d.value>0?d.value+"s":"获取验证码"),N:d.value>0,O:e.o(x),P:r.value,Q:e.o(T),R:e.o(()=>{}),S:e.o(e=>v.value=!1)}:{})}},s=e._export_sfc(l,[["__scopeId","data-v-2268527d"]]);wx.createPage(s);
diff --git a/dist/build/mp-weixin/pages/mine/Profile.json b/dist/build/mp-weixin/pages/mine/Profile.json
new file mode 100644
index 0000000..841188a
--- /dev/null
+++ b/dist/build/mp-weixin/pages/mine/Profile.json
@@ -0,0 +1,5 @@
+{
+ "usingComponents": {
+ "app-icon": "../../components/AppIcon"
+ }
+}
\ No newline at end of file
diff --git a/dist/build/mp-weixin/pages/mine/Profile.wxml b/dist/build/mp-weixin/pages/mine/Profile.wxml
new file mode 100644
index 0000000..c18cc46
--- /dev/null
+++ b/dist/build/mp-weixin/pages/mine/Profile.wxml
@@ -0,0 +1 @@
+个人信息{{j}}{{k}}点击左侧头像可更换照片
\ No newline at end of file
diff --git a/dist/build/mp-weixin/pages/mine/Profile.wxss b/dist/build/mp-weixin/pages/mine/Profile.wxss
new file mode 100644
index 0000000..9ab6754
--- /dev/null
+++ b/dist/build/mp-weixin/pages/mine/Profile.wxss
@@ -0,0 +1 @@
+.profile-page.data-v-2268527d{padding-bottom:120rpx;background:var(--pet-bg, #f5f7fb);min-height:100vh}.nav-placeholder.data-v-2268527d{width:32px}.profile-nav.data-v-2268527d{padding:14px 16px 12px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:10}.nav-back.data-v-2268527d{font-size:20px;color:#fff}.nav-title.data-v-2268527d{font-size:18px;font-weight:700;color:#fff}.profile-hero.data-v-2268527d{margin:14px 14px 0;padding:18px 16px 14px;background:#fff;border:1px solid #e6ecf4;border-radius:16px;box-shadow:var(--pet-card-shadow, 0 8px 24px rgba(15, 23, 42, .06))}.hero-main-row.data-v-2268527d{display:flex;align-items:center;gap:14px}.avatar-wrap.data-v-2268527d{position:relative;flex-shrink:0;-webkit-tap-highlight-color:transparent}.avatar-img.data-v-2268527d,.avatar-placeholder.data-v-2268527d{width:84px;height:84px;border-radius:50%;border:2px solid #e8edf4;-o-object-fit:cover;object-fit:cover;display:flex;align-items:center;justify-content:center}.avatar-placeholder.data-v-2268527d{background:rgba(226,232,240,.75)}.avatar-initials.data-v-2268527d{font-size:30px;font-weight:700;color:#fff}.avatar-badge.data-v-2268527d{position:absolute;bottom:2px;right:2px;width:28px;height:28px;background:#fff;border-radius:50%;border:1px solid #e2e8f0;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(15,23,42,.08)}.hero-text.data-v-2268527d{flex:1;min-width:0}.hero-name.data-v-2268527d{font-size:19px;line-height:1.25;letter-spacing:.02em}.hero-phone.data-v-2268527d{margin-top:6px;font-size:14px;color:var(--pet-subtext, #6b7280)}.hero-tags.data-v-2268527d{margin-top:10px}.role-pill.data-v-2268527d{display:inline-flex;align-items:center;height:26px;padding:0 12px;border-radius:999px;font-size:12px;font-weight:700;background:#fff7ed;color:#c2410c}.role-pill.hero-role.role-staff.data-v-2268527d,.role-pill.role-staff.data-v-2268527d{background:#ecfdf3;color:#166534}.role-pill-compact.data-v-2268527d{height:24px;padding:0 10px;font-size:12px}.hero-hint.data-v-2268527d{margin-top:12px;padding-top:12px;border-top:1px solid #f1f5f9;font-size:12px;color:#94a3b8;text-align:center}.menu-section.data-v-2268527d{padding:0 14px;margin-top:12px}.menu-card.data-v-2268527d{background:#fff;border:1px solid #e6ecf4;border-radius:16px;box-shadow:0 8px 20px rgba(15,23,42,.05);overflow:hidden}.menu-title.data-v-2268527d{font-size:12px;color:#94a3b8;font-weight:700;padding:12px 14px 8px}.menu-item.data-v-2268527d{min-height:54px;padding:0 14px;display:flex;align-items:center;justify-content:space-between;gap:10px;transition:background .15s ease}.menu-item.data-v-2268527d:active:not(.menu-item-static){background:#f8fafc}.menu-item+.menu-item.data-v-2268527d{border-top:1px solid #eef2f7}.menu-item-static.data-v-2268527d{cursor:default}.menu-left.data-v-2268527d{display:flex;align-items:center;gap:10px;min-width:0}.menu-icon.data-v-2268527d{width:28px;height:28px;border-radius:8px;background:#f1f5f9;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.menu-text.data-v-2268527d{font-size:16px;color:#1f2937;font-weight:600}.menu-right.data-v-2268527d{display:inline-flex;align-items:center;gap:4px;flex-shrink:0;max-width:55%;justify-content:flex-end}.menu-value.data-v-2268527d{font-size:14px;color:#64748b;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:right}.menu-arrow.data-v-2268527d{color:#c4cfdd;font-size:18px;line-height:1}.field-label-gap.data-v-2268527d{margin-top:12px}.profile-popup-mask.data-v-2268527d{z-index:3000;align-items:flex-end}.profile-popup-sheet.data-v-2268527d{width:100%;max-width:100%;max-height:88vh;border-radius:20px 20px 0 0;display:flex;flex-direction:column}.profile-popup-sheet .popup-header.data-v-2268527d{flex-shrink:0;padding:18px 20px 14px;border-bottom:1px solid #f0f0f0}.profile-popup-sheet .popup-title.data-v-2268527d{font-size:17px;font-weight:600;color:#1a1a1a}.profile-popup-sheet .popup-close.data-v-2268527d{width:36px;height:36px;display:flex;align-items:center;justify-content:center;margin:-6px -8px -6px 0;border-radius:10px}.profile-popup-sheet .popup-close.data-v-2268527d:active{background:#f1f5f9}.profile-popup-sheet .popup-body.data-v-2268527d{flex:1;overflow-y:auto;padding:16px 20px}.profile-popup-footer.data-v-2268527d{flex-shrink:0;padding:8px 20px max(env(safe-area-inset-bottom),20px);border-top:1px solid #f1f5f9;background:#fff}.sms-row.data-v-2268527d{display:flex;align-items:center;gap:8px}.sms-input.data-v-2268527d{flex:1;min-width:0}.footer-tip.data-v-2268527d{text-align:center;margin-top:28px;font-size:12px;color:#94a3b8}
diff --git a/dist/build/mp-weixin/pages/mine/ServiceType.js b/dist/build/mp-weixin/pages/mine/ServiceType.js
new file mode 100644
index 0000000..10cbcee
--- /dev/null
+++ b/dist/build/mp-weixin/pages/mine/ServiceType.js
@@ -0,0 +1 @@
+"use strict";const e=require("../../common/vendor.js"),t=require("../../utils/globalState.js"),a=require("../../api/index.js"),o=require("../../utils/session.js");Math||n();const n=()=>"../../components/AppIcon.js",i={__name:"ServiceType",emits:["change-page"],setup(n,{emit:i}){const l=o.getStoreSession(),s=(()=>{var t,a,o,n;const i=(null==(a=(t=e.index).getSystemInfoSync)?void 0:a.call(t).statusBarHeight)||20;let l=i+44;const s=null==(n=(o=e.index).getMenuButtonBoundingClientRect)?void 0:n.call(o);if(s&&s.top&&s.height){l=i+2*Math.max(s.top-i,4)+s.height}return`padding-top:${i}px;height:${l}px;`})(),u=e.ref([]),c=e.ref(!1),d=e.ref(""),r=e.ref(null),v=e.ref(0),h=e.ref(0),g=async()=>{const e=await a.getServiceTypeList(l.id);200===e.code&&(u.value=e.data)},f=async()=>{if(!d.value)return void e.index.showToast({title:"请输入服务类型名称",icon:"none"});const t=await a.createServiceType(l.id,d.value);200===t.code?(e.index.showToast({title:"添加成功",icon:"success"}),d.value="",c.value=!1,g()):e.index.showToast({title:t.message||"添加失败",icon:"none"})},p=e=>{var t,a;return(null==(t=null==e?void 0:e.touches)?void 0:t[0])?e.touches[0].pageX:(null==(a=null==e?void 0:e.changedTouches)?void 0:a[0])?e.changedTouches[0].pageX:0};return e.onMounted(()=>g()),(o,n)=>e.e({a:e.p({name:"back",size:18,color:"#ffffff"}),b:e.o(a=>e.unref(t.navigateTo)("mine")),c:e.s(e.unref(s)),d:e.o(e=>c.value=!0),e:e.f(u.value,(t,o,n)=>e.e({a:"663ba7c1-1-"+n,b:e.t(t.name),c:!t.storeId},(t.storeId,{}),{d:t.storeId},t.storeId?{e:e.o(o=>(async t=>{e.index.showModal({title:"提示",content:"确定删除?",success:async o=>{o.confirm&&200===(await a.deleteServiceType(t)).code&&(r.value=null,e.index.showToast({title:"已删除",icon:"success"}),g())}})})(t.id),t.id)}:{},{f:e.o(e=>((e,t)=>{const a=p(e);v.value=a,h.value=a,r.value&&r.value!==t.id&&(r.value=null)})(e,t),t.id),g:e.o(e=>{return t=e,void(h.value=p(t));var t},t.id),h:e.o(e=>((e,t)=>{if(!t.storeId)return;const a=(p(e)||h.value)-v.value;a<-40?r.value=t.id:a>24&&r.value===t.id&&(r.value=null)})(e,t),t.id),i:t.id,j:r.value===t.id&&t.storeId?1:""})),f:e.p({name:"service",size:14}),g:0===u.value.length},(u.value.length,{}),{h:c.value},c.value?{i:e.o(e=>c.value=!1),j:d.value,k:e.o(e=>d.value=e.detail.value),l:e.o(e=>c.value=!1),m:e.o(f),n:e.o(()=>{}),o:e.o(e=>c.value=!1)}:{})}},l=e._export_sfc(i,[["__scopeId","data-v-663ba7c1"]]);wx.createPage(l);
diff --git a/dist/build/mp-weixin/pages/mine/ServiceType.json b/dist/build/mp-weixin/pages/mine/ServiceType.json
new file mode 100644
index 0000000..841188a
--- /dev/null
+++ b/dist/build/mp-weixin/pages/mine/ServiceType.json
@@ -0,0 +1,5 @@
+{
+ "usingComponents": {
+ "app-icon": "../../components/AppIcon"
+ }
+}
\ No newline at end of file
diff --git a/dist/build/mp-weixin/pages/mine/ServiceType.wxml b/dist/build/mp-weixin/pages/mine/ServiceType.wxml
new file mode 100644
index 0000000..8cfbc6a
--- /dev/null
+++ b/dist/build/mp-weixin/pages/mine/ServiceType.wxml
@@ -0,0 +1 @@
+服务类型{{s.b}}系统默认 删除 暂无服务类型
\ No newline at end of file
diff --git a/dist/build/mp-weixin/pages/mine/ServiceType.wxss b/dist/build/mp-weixin/pages/mine/ServiceType.wxss
new file mode 100644
index 0000000..abe14df
--- /dev/null
+++ b/dist/build/mp-weixin/pages/mine/ServiceType.wxss
@@ -0,0 +1 @@
+.st-page.data-v-663ba7c1{padding-bottom:120rpx}.nav-placeholder.data-v-663ba7c1{width:32px}.add-btn-wrap.data-v-663ba7c1{padding:0}.card-section.data-v-663ba7c1{margin:0}.st-list.data-v-663ba7c1{border-radius:16px;overflow:hidden}.st-cell.data-v-663ba7c1{min-height:52px}.st-name-row.data-v-663ba7c1{display:flex;align-items:center;gap:8px}.st-dot.data-v-663ba7c1{width:24px;height:24px;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;background:#f1f5f9}.st-name.data-v-663ba7c1{font-size:15px;font-weight:600;color:#1f2937}.system-tag.data-v-663ba7c1{margin-left:8px}.st-swipe-wrap.data-v-663ba7c1{overflow:hidden;border-radius:12px}.st-swipe-wrap+.st-swipe-wrap.data-v-663ba7c1{border-top:1px solid #eef2f7}.st-swipe-track.data-v-663ba7c1{display:flex;width:calc(100% + 76px);transform:translate(0);transition:transform .2s ease}.st-swipe-wrap.is-open .st-swipe-track.data-v-663ba7c1{transform:translate(-76px)}.swipe-delete-btn.data-v-663ba7c1{width:76px;background:#ef4444;color:#fff;display:inline-flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;flex-shrink:0}.st-nav.data-v-663ba7c1{padding:14px 16px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:10}.nav-back.data-v-663ba7c1{font-size:20px;color:#fff}.nav-title.data-v-663ba7c1{font-size:18px;font-weight:700;color:#fff}.popup-mask.data-v-663ba7c1{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.5);z-index:100;display:flex;align-items:flex-end;justify-content:center}.popup-content.data-v-663ba7c1{background:#fff;border-radius:16px 16px 0 0;width:430px;max-width:100%;display:flex;flex-direction:column}.popup-header.data-v-663ba7c1{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid #f0f0f0}.popup-title.data-v-663ba7c1{font-size:16px;font-weight:600}.popup-close.data-v-663ba7c1{font-size:18px;color:#999}.popup-body.data-v-663ba7c1{padding:16px 20px}.popup-footer.data-v-663ba7c1{padding:12px 20px 20px}.popup-desc.data-v-663ba7c1{font-size:12px;color:#6b7280;line-height:1.45;margin-bottom:10px}.popup-actions.data-v-663ba7c1{display:flex;align-items:center;gap:10px}.btn-ghost.data-v-663ba7c1{width:96px;border:1px solid #dbe3ee!important;background:#fff!important;color:#64748b!important}.btn-confirm.data-v-663ba7c1{flex:1}
diff --git a/dist/build/mp-weixin/pages/mine/Staff.js b/dist/build/mp-weixin/pages/mine/Staff.js
new file mode 100644
index 0000000..4ad864f
--- /dev/null
+++ b/dist/build/mp-weixin/pages/mine/Staff.js
@@ -0,0 +1 @@
+"use strict";const e=require("../../common/vendor.js"),a=require("../../utils/globalState.js"),n=require("../../api/index.js"),o=require("../../utils/session.js");Math||t();const t=()=>"../../components/AppIcon.js",l={__name:"Staff",emits:["change-page"],setup(t,{emit:l}){const i=o.getStoreSession(),u=(()=>{var a,n,o,t;const l=(null==(n=(a=e.index).getSystemInfoSync)?void 0:n.call(a).statusBarHeight)||20;let i=l+44;const u=null==(t=(o=e.index).getMenuButtonBoundingClientRect)?void 0:t.call(o);if(u&&u.top&&u.height){i=l+2*Math.max(u.top-l,4)+u.height}return`padding-top:${l}px;height:${i}px;`})(),s=e.ref([]),r=e.ref(!1),d=e.ref({name:"",phone:""}),v=e.ref(null),c=e.ref(0),h=e.ref(0),f=["#ff7c43","#07c160","#8b6914","#e06040","#5090d0","#9b59b6"],p=e=>{var a;if(e.avatar)return{background:"transparent"};const n=((null==(a=e.name)?void 0:a.charCodeAt(0))||0)%f.length;return{background:f[n]}},g=async()=>{const e=await n.getStaffList(i.id);200===e.code&&(s.value=e.data)},m=()=>{e.index.setClipboardData({data:i.inviteCode,success:()=>e.index.showToast({title:"邀请码已复制",icon:"none"})})},x=async()=>{if(!d.value.name)return void e.index.showToast({title:"请输入员工姓名",icon:"none"});if(!d.value.phone||11!==d.value.phone.length)return void e.index.showToast({title:"请输入正确的手机号",icon:"none"});const a=await n.createStaff({storeId:i.id,name:d.value.name,phone:d.value.phone});200===a.code?(e.index.showToast({title:`添加成功,密码:${a.data.password}`,icon:"none",duration:3e3}),r.value=!1,d.value={name:"",phone:""},g()):e.index.showToast({title:a.message||"添加失败",icon:"none"})},b=e=>{var a,n;return(null==(a=null==e?void 0:e.touches)?void 0:a[0])?e.touches[0].pageX:(null==(n=null==e?void 0:e.changedTouches)?void 0:n[0])?e.changedTouches[0].pageX:0};return e.onMounted(()=>g()),(o,t)=>e.e({a:e.p({name:"back",size:18,color:"#ffffff"}),b:e.o(n=>e.unref(a.navigateTo)("mine")),c:e.s(e.unref(u)),d:e.t(e.unref(i).inviteCode),e:e.o(m),f:e.o(e=>r.value=!0),g:e.f(s.value,(a,o,t)=>e.e({a:"boss"!==a.role},"boss"!==a.role?{b:e.o(o=>(async a=>{e.index.showModal({title:"提示",content:"确定删除该员工?",success:async o=>{o.confirm&&200===(await n.deleteStaff(a)).code&&(v.value=null,e.index.showToast({title:"已删除",icon:"success"}),g())}})})(a.id),a.id)}:{},{c:a.avatar},a.avatar?{d:a.avatar}:{e:e.t(a.name?a.name[0]:"?")},{f:e.s(p(a)),g:e.t(a.name),h:e.t(a.phone),i:e.t("boss"===a.role?"店长":"员工"),j:e.o(e=>((e,a)=>{const n=b(e);c.value=n,h.value=n,v.value&&v.value!==a.id&&(v.value=null)})(e,a),a.id),k:e.o(e=>{return a=e,void(h.value=b(a));var a},a.id),l:e.o(e=>((e,a)=>{if("boss"===a.role)return;const n=(b(e)||h.value)-c.value;n<-40?v.value=a.id:n>24&&v.value===a.id&&(v.value=null)})(e,a),a.id),m:a.id,n:v.value===a.id&&"boss"!==a.role?1:"",o:e.o(e=>{return n=a,void(v.value&&v.value!==n.id&&(v.value=null));var n},a.id)})),h:0===s.value.length},(s.value.length,{}),{i:r.value},r.value?{j:e.o(e=>r.value=!1),k:d.value.name,l:e.o(e=>d.value.name=e.detail.value),m:d.value.phone,n:e.o(e=>d.value.phone=e.detail.value),o:e.o(e=>r.value=!1),p:e.o(x),q:e.o(()=>{}),r:e.o(e=>r.value=!1)}:{})}},i=e._export_sfc(l,[["__scopeId","data-v-8ecf2675"]]);wx.createPage(i);
diff --git a/dist/build/mp-weixin/pages/mine/Staff.json b/dist/build/mp-weixin/pages/mine/Staff.json
new file mode 100644
index 0000000..841188a
--- /dev/null
+++ b/dist/build/mp-weixin/pages/mine/Staff.json
@@ -0,0 +1,5 @@
+{
+ "usingComponents": {
+ "app-icon": "../../components/AppIcon"
+ }
+}
\ No newline at end of file
diff --git a/dist/build/mp-weixin/pages/mine/Staff.wxml b/dist/build/mp-weixin/pages/mine/Staff.wxml
new file mode 100644
index 0000000..9013119
--- /dev/null
+++ b/dist/build/mp-weixin/pages/mine/Staff.wxml
@@ -0,0 +1 @@
+员工管理员工邀请码{{d}} 删除 {{s.g}}{{s.h}}{{s.i}}暂无员工
\ No newline at end of file
diff --git a/dist/build/mp-weixin/pages/mine/Staff.wxss b/dist/build/mp-weixin/pages/mine/Staff.wxss
new file mode 100644
index 0000000..3787f3f
--- /dev/null
+++ b/dist/build/mp-weixin/pages/mine/Staff.wxss
@@ -0,0 +1 @@
+.staff-page.data-v-8ecf2675{padding-bottom:120rpx}.nav-placeholder.data-v-8ecf2675{width:32px}.add-btn-wrap.data-v-8ecf2675{padding:0}.card-section.data-v-8ecf2675{margin:0}.invite-card.data-v-8ecf2675{overflow:hidden}.staff-cell.data-v-8ecf2675{min-height:58px}.invite-code-cell.data-v-8ecf2675{display:flex;align-items:center;gap:8px}.invite-code.data-v-8ecf2675{font-family:monospace;font-size:15px;color:#16a34a;font-weight:700;letter-spacing:2px}.staff-info-row.data-v-8ecf2675{display:flex;align-items:center;gap:12px;flex:1}.staff-name.data-v-8ecf2675{font-weight:700;font-size:15px;color:#1f2937}.staff-meta.data-v-8ecf2675{font-size:12px;color:#6b7280}.staff-swipe-wrap.data-v-8ecf2675{position:relative;overflow:hidden;border-radius:12px;background:#fff}.staff-swipe-wrap+.staff-swipe-wrap.data-v-8ecf2675{border-top:1px solid #eef2f7}.staff-main.data-v-8ecf2675{position:relative;z-index:2;transform:translate(0);transition:transform .2s ease;background:#fff}.staff-swipe-wrap.is-open .staff-main.data-v-8ecf2675{transform:translate(-76px)}.swipe-delete-btn.data-v-8ecf2675{position:absolute;right:0;top:0;bottom:0;width:76px;background:#ef4444;color:#fff;display:inline-flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;flex-shrink:0}.staff-nav.data-v-8ecf2675{padding:14px 16px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:10}.nav-back.data-v-8ecf2675{font-size:20px;color:#fff}.nav-title.data-v-8ecf2675{font-size:18px;font-weight:700;color:#fff}.avatar.data-v-8ecf2675{width:42px;height:42px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:18px;color:#fff;overflow:hidden;flex-shrink:0;border:1px solid #e8edf4}.avatar-img.data-v-8ecf2675{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.avatar-initials.data-v-8ecf2675{font-weight:600}.popup-mask.data-v-8ecf2675{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.5);z-index:100;display:flex;align-items:flex-end;justify-content:center}.popup-content.data-v-8ecf2675{background:#fff;border-radius:16px 16px 0 0;width:430px;max-width:100%;display:flex;flex-direction:column}.popup-header.data-v-8ecf2675{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid #f0f0f0}.popup-title.data-v-8ecf2675{font-size:16px;font-weight:600}.popup-close.data-v-8ecf2675{font-size:18px;color:#999}.popup-body.data-v-8ecf2675{padding:16px 20px}.popup-footer.data-v-8ecf2675{padding:12px 20px 20px}.popup-desc.data-v-8ecf2675{font-size:12px;color:#6b7280;line-height:1.45;margin-bottom:10px}.popup-actions.data-v-8ecf2675{display:flex;align-items:center;gap:10px}.btn-ghost.data-v-8ecf2675{width:96px;border:1px solid #dbe3ee!important;background:#fff!important;color:#64748b!important}.btn-confirm.data-v-8ecf2675{flex:1}
diff --git a/dist/build/mp-weixin/pages/mine/Store.js b/dist/build/mp-weixin/pages/mine/Store.js
new file mode 100644
index 0000000..2eb5924
--- /dev/null
+++ b/dist/build/mp-weixin/pages/mine/Store.js
@@ -0,0 +1 @@
+"use strict";const e=require("../../common/vendor.js"),t=require("../../utils/globalState.js"),o=require("../../api/index.js"),n=require("../../utils/session.js");Math||a();const a=()=>"../../components/AppIcon.js",l={__name:"Store",emits:["change-page"],setup(a){const l=n.getStoreSession(),s=(()=>{var t,o,n,a;const l=(null==(o=(t=e.index).getSystemInfoSync)?void 0:o.call(t).statusBarHeight)||20;let s=l+44;const i=null==(a=(n=e.index).getMenuButtonBoundingClientRect)?void 0:a.call(n);if(i&&i.top&&i.height){s=l+2*Math.max(i.top-l,4)+i.height}return`padding-top:${l}px;height:${s}px;`})(),i=e.ref(!1),u=e.ref(!1),r=e.ref({name:"",phone:"",address:"",intro:"",latitude:null,longitude:null}),d=e.computed(()=>null!=r.value.latitude&&null!=r.value.longitude),c=e=>{if(null==e||""===e)return null;const t="number"==typeof e?e:parseFloat(e);return Number.isFinite(t)?t:null},v=()=>{u.value=!0,e.index.chooseLocation({success:e=>{const t=e.name||"",o=e.address||"";r.value.address=[t,o].filter(Boolean).join(" · ")||o||t,r.value.latitude=c(e.latitude),r.value.longitude=c(e.longitude)},fail:t=>{const o=t&&t.errMsg||"";/cancel|取消/i.test(o)||e.index.showToast({title:"无法打开选点,请手动填写",icon:"none"})},complete:()=>{u.value=!1}})},p=async()=>{i.value=!0;const t=await o.updateStore({id:l.id,...r.value});if(i.value=!1,200===t.code){e.index.showToast({title:"保存成功",icon:"success"});const o=t.data?{...l,...t.data}:{...l,...r.value};n.setStoreSession(o)}else e.index.showToast({title:t.message||"保存失败",icon:"none"})};return e.onMounted(()=>{r.value={name:l.name||"",phone:l.phone||"",address:l.address||"",intro:l.intro||"",latitude:c(l.latitude),longitude:c(l.longitude)}}),(o,n)=>e.e({a:e.p({name:"back",size:18,color:"#ffffff"}),b:e.o(o=>e.unref(t.navigateTo)("mine")),c:e.s(e.unref(s)),d:e.p({name:"store",size:22,color:"#15803d"}),e:e.p({name:"store",size:15,color:"#475569"}),f:r.value.name,g:e.o(e=>r.value.name=e.detail.value),h:e.p({name:"phone",size:15,color:"#475569"}),i:r.value.phone,j:e.o(e=>r.value.phone=e.detail.value),k:e.p({name:"pin",size:15,color:"#475569"}),l:r.value.address,m:e.o(e=>r.value.address=e.detail.value),n:u.value,o:e.o(v),p:d.value},(d.value,{}),{q:e.p({name:"report",size:15,color:"#475569"}),r:r.value.intro,s:e.o(e=>r.value.intro=e.detail.value),t:i.value,v:e.o(p)})}},s=e._export_sfc(l,[["__scopeId","data-v-eb0ed336"]]);wx.createPage(s);
diff --git a/dist/build/mp-weixin/pages/mine/Store.json b/dist/build/mp-weixin/pages/mine/Store.json
new file mode 100644
index 0000000..841188a
--- /dev/null
+++ b/dist/build/mp-weixin/pages/mine/Store.json
@@ -0,0 +1,5 @@
+{
+ "usingComponents": {
+ "app-icon": "../../components/AppIcon"
+ }
+}
\ No newline at end of file
diff --git a/dist/build/mp-weixin/pages/mine/Store.wxml b/dist/build/mp-weixin/pages/mine/Store.wxml
new file mode 100644
index 0000000..06f99a6
--- /dev/null
+++ b/dist/build/mp-weixin/pages/mine/Store.wxml
@@ -0,0 +1 @@
+店铺设置门店资料以下信息会用于预约展示与客户联系,建议保持准确、易读。店铺名称联系电话地址已选地图位置,可再微调上方文字后保存简介保存后立即生效,并写入本地缓存。
\ No newline at end of file
diff --git a/dist/build/mp-weixin/pages/mine/Store.wxss b/dist/build/mp-weixin/pages/mine/Store.wxss
new file mode 100644
index 0000000..eb8ac64
--- /dev/null
+++ b/dist/build/mp-weixin/pages/mine/Store.wxss
@@ -0,0 +1 @@
+.store-page.data-v-eb0ed336{min-height:100vh;background:var(--pet-bg, #f5f7fb);padding-bottom:120rpx}.nav-placeholder.data-v-eb0ed336{width:32px}.store-nav.data-v-eb0ed336{padding:14px 16px 12px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:10}.nav-back.data-v-eb0ed336{font-size:20px;color:#fff}.nav-title.data-v-eb0ed336{font-size:18px;font-weight:700;color:#fff}.store-body.data-v-eb0ed336{padding:12px 14px 28px}.store-hero.data-v-eb0ed336{display:flex;gap:12px;align-items:flex-start;padding:16px 14px;border-radius:16px;background:linear-gradient(135deg,#fff,#ecfdf3 55%,#f0fdf4);border:1px solid #d8f0e2;box-shadow:var(--pet-card-shadow, 0 8px 24px rgba(15, 23, 42, .06));margin-bottom:14px}.store-hero-icon.data-v-eb0ed336{width:44px;height:44px;border-radius:12px;background:rgba(255,255,255,.9);border:1px solid #bbf7d0;display:flex;align-items:center;justify-content:center;flex-shrink:0}.store-hero-title.data-v-eb0ed336{font-size:17px;font-weight:700;color:#14532d;letter-spacing:.02em}.store-hero-desc.data-v-eb0ed336{margin-top:6px;font-size:13px;line-height:1.55;color:#4b5563}.store-card.data-v-eb0ed336{background:#fff;border:1px solid #e6ecf4;border-radius:16px;box-shadow:0 8px 22px rgba(15,23,42,.06);padding:4px 4px 8px;overflow:hidden}.store-card-head.data-v-eb0ed336{padding:14px 14px 6px}.store-card-kicker.data-v-eb0ed336{font-size:12px;font-weight:700;color:#94a3b8;letter-spacing:.04em}.store-field.data-v-eb0ed336{padding:12px 12px 4px}.store-field+.store-field.data-v-eb0ed336{border-top:1px solid #f1f5f9}.store-field-label.data-v-eb0ed336{display:flex;align-items:center;gap:8px;margin-bottom:8px;font-size:14px;font-weight:600;color:#374151}.store-ico.data-v-eb0ed336{width:28px;height:28px;border-radius:8px;background:#f1f5f9;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.store-input.data-v-eb0ed336{margin-top:0!important}.address-row.data-v-eb0ed336{display:flex;align-items:stretch;gap:10px}.address-input.data-v-eb0ed336{flex:1;min-width:0}.pick-location-btn.data-v-eb0ed336{flex-shrink:0;padding:0 14px;min-height:44px;border-radius:12px;border:1px solid #16a34a;background:#f0fdf4;color:#15803d;font-size:14px;font-weight:600;line-height:44px;-webkit-tap-highlight-color:transparent}.pick-location-btn.data-v-eb0ed336:active:not([disabled]){opacity:.92;transform:translateY(1px)}.pick-location-btn[disabled].data-v-eb0ed336{opacity:.55}.geo-hint.data-v-eb0ed336{margin-top:8px;font-size:12px;color:#16a34a;line-height:1.4}.intro-textarea.data-v-eb0ed336{min-height:112px!important;line-height:1.55!important;padding-top:12px!important;padding-bottom:12px!important;resize:none}.store-field-last.data-v-eb0ed336{padding-bottom:14px}.store-actions.data-v-eb0ed336{margin-top:18px}.store-save-btn.data-v-eb0ed336{margin-top:0!important;box-shadow:0 10px 26px rgba(34,197,94,.35)!important}.store-actions-hint.data-v-eb0ed336{margin-top:10px;text-align:center;font-size:12px;color:#94a3b8;line-height:1.45}.store-footer-tip.data-v-eb0ed336{margin-top:28px;text-align:center;font-size:12px;color:#cbd5e1}
diff --git a/dist/build/mp-weixin/pages/report-view/reportView.js b/dist/build/mp-weixin/pages/report-view/reportView.js
new file mode 100644
index 0000000..73fa174
--- /dev/null
+++ b/dist/build/mp-weixin/pages/report-view/reportView.js
@@ -0,0 +1 @@
+"use strict";const e=require("../../common/vendor.js"),t=require("../../api/index.js"),o=require("../../utils/datetime.js"),a=require("../../utils/session.js");Math||l();const l=()=>"../../components/AppIcon.js",n={__name:"reportView",setup(l){const n=e.ref(!0),u=e.ref(!1),r=e.ref(null);e.ref(null);const i=e.ref(""),v=e.computed(()=>a.isLoggedIn()),s=e.computed(()=>{var e;return(null==(e=r.value)?void 0:e.beforePhoto)?r.value.beforePhoto.split(",").filter(Boolean):[]}),d=e.computed(()=>{var e;return(null==(e=r.value)?void 0:e.afterPhoto)?r.value.afterPhoto.split(",").filter(Boolean):[]}),p=`padding-top:${((null==(f=(m=e.index).getSystemInfoSync)?void 0:f.call(m).statusBarHeight)||20)+10}px;`;var m,f;const c=e=>o.formatDateTimeYMDHM(e),h=()=>{e.index.reLaunch({url:"/pages/home/Home"})},g=()=>{var t,o;const a=null==(o=null==(t=r.value)?void 0:t.store)?void 0:o.phone;if(!a)return e.index.showToast({title:"门店未设置电话",icon:"none"});e.index.makePhoneCall({phoneNumber:a})},x=()=>{var t;const o=null==(t=r.value)?void 0:t.store;if(!o||!o.latitude||!o.longitude)return e.index.showToast({title:"门店未设置导航坐标",icon:"none"});e.index.openLocation({latitude:Number(o.latitude),longitude:Number(o.longitude),name:o.name||"宠伴生活馆",address:o.address||""})};e.onShareAppMessage(()=>{const e=r.value,o=e?`【${e.petName}】的洗护美容报告出炉啦!`:"宠物洗护美容报告",a=d.value.length>0?t.imgUrl(d.value[0]):s.value.length>0?t.imgUrl(s.value[0]):"";return{title:o,path:`/pages/report-view/reportView?token=${i.value}`,imageUrl:a}}),e.onShareTimeline(()=>{const e=r.value;return{title:e?`【${e.petName}】的洗护美容报告出炉啦!`:"宠物洗护美容报告",query:`token=${i.value}`}});const w=()=>{e.index.showToast({title:"请在微信中长按保存海报",icon:"none"})};return e.onLoad(e=>{i.value=(null==e?void 0:e.token)||""}),e.onMounted(()=>(async()=>{let o=i.value;if(!o)return u.value=!0,void(n.value=!1);e.index.showLoading({title:"加载中..."});const a=await t.getReportByToken(o);e.index.hideLoading(),n.value=!1,200===a.code?r.value=a.data:u.value=!0})()),(o,a)=>{var l,i,m,f,b;return e.e({a:n.value},n.value||u.value?{}:r.value?e.e({d:e.p({name:"home",size:15,color:"#ffffff"}),e:e.o(h),f:e.t((null==(l=r.value.store)?void 0:l.name)||"宠伴生活馆"),g:null==(i=r.value.store)?void 0:i.phone},(null==(m=r.value.store)?void 0:m.phone)?{h:e.t(r.value.store.phone)}:{},{i:null==(f=r.value.store)?void 0:f.address},(null==(b=r.value.store)?void 0:b.address)?{j:e.t(r.value.store.address)}:{},{k:e.s(e.unref(p)),l:!v.value},v.value?{}:{m:e.t(r.value.petName)},{n:e.t(c(r.value.appointmentTime)),o:e.t(r.value.petName),p:e.t(r.value.serviceType),q:e.t(c(r.value.appointmentTime)),r:e.t(r.value.staffName||"-"),s:s.value.length>0},s.value.length>0?{t:e.f(s.value,(o,a,l)=>({a:"before-"+a,b:e.unref(t.imgUrl)(o)}))}:{},{v:d.value.length>0},d.value.length>0?{w:e.f(d.value,(o,a,l)=>({a:"after-"+a,b:e.unref(t.imgUrl)(o)}))}:{},{x:e.t(r.value.remark||"暂无备注"),y:v.value},v.value?{z:e.p({name:"profile",size:16,color:"#ffffff"}),A:e.o(w)}:{B:e.o(g),C:e.o(x),D:e.o(h)}):{},{b:u.value,c:r.value})}}},u=e._export_sfc(n,[["__scopeId","data-v-ed21e379"]]);n.__runtimeHooks=6,wx.createPage(u);
diff --git a/dist/build/mp-weixin/pages/report-view/reportView.json b/dist/build/mp-weixin/pages/report-view/reportView.json
new file mode 100644
index 0000000..841188a
--- /dev/null
+++ b/dist/build/mp-weixin/pages/report-view/reportView.json
@@ -0,0 +1,5 @@
+{
+ "usingComponents": {
+ "app-icon": "../../components/AppIcon"
+ }
+}
\ No newline at end of file
diff --git a/dist/build/mp-weixin/pages/report-view/reportView.wxml b/dist/build/mp-weixin/pages/report-view/reportView.wxml
new file mode 100644
index 0000000..f8f7868
--- /dev/null
+++ b/dist/build/mp-weixin/pages/report-view/reportView.wxml
@@ -0,0 +1 @@
+报告不存在或链接已失效{{f}}宠物服务,让爱更专业 亲爱的宠主, 今天的服务已完成,快来看看TA的变美记录吧! 服务报告{{n}}宠物名字{{o}}服务项目{{p}}服务时间{{q}}服务技师{{r}}服务前后对比服务前暂无照片服务后暂无照片
\ No newline at end of file
diff --git a/dist/build/mp-weixin/pages/report-view/reportView.wxss b/dist/build/mp-weixin/pages/report-view/reportView.wxss
new file mode 100644
index 0000000..0fec1c7
--- /dev/null
+++ b/dist/build/mp-weixin/pages/report-view/reportView.wxss
@@ -0,0 +1 @@
+.report-view.data-v-ed21e379{background:#f5f7fb;min-height:100vh}.loading-wrap.data-v-ed21e379{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;gap:16px;color:#999}.loading-spinner.data-v-ed21e379{width:32px;height:32px;border:3px solid #e0e0e0;border-top-color:#07c160;border-radius:50%;animation:spin-ed21e379 .8s linear infinite}@keyframes spin-ed21e379{to{transform:rotate(360deg)}}.not-found.data-v-ed21e379{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh}.report-content.data-v-ed21e379{max-width:430px;margin:0 auto;background:#f8fafc;min-height:100vh;box-shadow:0 10px 30px rgba(15,23,42,.06)}.brand-header.data-v-ed21e379{background:linear-gradient(135deg,#22c55e,#16a34a);padding:20px 20px 18px;text-align:center;color:#fff;border-radius:0 0 16px 16px;box-shadow:0 8px 20px rgba(34,197,94,.24);position:relative}.header-actions.data-v-ed21e379{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.header-btn.data-v-ed21e379{width:30px;height:30px;border-radius:999px;border:1px solid rgba(255,255,255,.45);background:rgba(255,255,255,.2);display:inline-flex;align-items:center;justify-content:center}.header-placeholder.data-v-ed21e379{width:30px;height:30px}.brand-logo.data-v-ed21e379{font-size:20px;font-weight:700;letter-spacing:1px;margin-bottom:4px}.brand-sub.data-v-ed21e379{font-size:12px;opacity:.7;margin-bottom:12px}.brand-contact.data-v-ed21e379{font-size:12px;opacity:.85;display:flex;justify-content:center;gap:16px;flex-wrap:wrap}.report-title-wrap.data-v-ed21e379{text-align:center;padding:20px 20px 14px}.report-title.data-v-ed21e379{font-size:22px;font-weight:700;color:#333}.report-time.data-v-ed21e379{font-size:13px;color:#999;margin-top:6px}.service-info.data-v-ed21e379{margin:0 16px 12px;border-radius:14px!important}.section-card.data-v-ed21e379{margin:0 16px 12px;background:#fff;border:1px solid #e8edf4;border-radius:14px;padding:12px;box-shadow:0 6px 16px rgba(15,23,42,.04)}.section-label.data-v-ed21e379{font-size:15px;font-weight:700;color:#1f2937;margin-bottom:10px}.photo-group-title.data-v-ed21e379{font-size:13px;color:#64748b;margin-bottom:8px}.photo-grid.data-v-ed21e379{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.photo-image.data-v-ed21e379{width:100%;aspect-ratio:1 / 1;border-radius:8px;border:1px solid #e5e7eb}.photo-empty.data-v-ed21e379{width:100%;height:80px;background:#f1f5f9;border:1px dashed #d1d9e6;border-radius:8px;display:flex;align-items:center;justify-content:center;color:#94a3b8;font-size:13px}.remark-content.data-v-ed21e379{background:#f8fafc;border:1px solid #e8edf4;border-radius:12px;padding:14px;font-size:14px;color:#64748b;line-height:1.6;min-height:60px}.action-section.data-v-ed21e379{margin:0 16px 24px;display:flex;flex-direction:column;gap:12px}.share-btn.data-v-ed21e379{margin-top:0!important;box-shadow:0 6px 14px rgba(34,197,94,.2)!important}.btn-ghost.data-v-ed21e379{margin-top:0!important;background:#fff!important;color:#666!important;border:1px solid #e0e0e0!important;box-shadow:none!important}.customer-greeting.data-v-ed21e379{margin:-10px 16px 12px;padding:14px 16px;background:#fff;border-radius:12px;font-size:14px;color:#475569;line-height:1.5;box-shadow:0 4px 12px rgba(0,0,0,.03);position:relative;z-index:2}.customer-greeting .highlight.data-v-ed21e379{color:#16a34a;font-weight:700;margin:0 2px}
diff --git a/dist/build/mp-weixin/pages/report/Report.js b/dist/build/mp-weixin/pages/report/Report.js
new file mode 100644
index 0000000..277a526
--- /dev/null
+++ b/dist/build/mp-weixin/pages/report/Report.js
@@ -0,0 +1 @@
+"use strict";const e=require("../../common/vendor.js"),a=require("../../api/index.js"),t=require("../../utils/session.js"),o=require("../../composables/useNavigator.js");Math||(i+n)();const n=()=>"../../components/TabBar.js",i=()=>"../../components/AppIcon.js",r={__name:"Report",emits:["change-page"],setup(n,{emit:i}){const r=t.getUserSession(),l=t.getStoreSession(),{goPage:s,navigateTo:p}=o.useNavigator(),u=(()=>{var a,t,o,n;const i=(null==(t=(a=e.index).getSystemInfoSync)?void 0:t.call(a).statusBarHeight)||20;let r=i+44;const l=null==(n=(o=e.index).getMenuButtonBoundingClientRect)?void 0:n.call(o);if(l&&l.top&&l.height){r=i+2*Math.max(l.top-i,4)+l.height}return`padding-top:${i}px;height:${r}px;`})(),c=e.ref({petName:"",serviceType:"",appointmentTime:"",before:[],after:[],remark:""}),m=e.ref([]),v=e.ref(null),d=e.ref(!1),f=e.computed(()=>m.value.map(e=>({label:e.name,value:e.name}))),g=t=>{const o=c.value[t].length;if(o>=9)return e.index.showToast({title:"最多上传9张",icon:"none"});e.index.chooseImage({count:9-o,success:o=>{const n=o.tempFilePaths;e.index.showLoading({title:"上传中..."});let i=0;const r=n.map(o=>new Promise(n=>{e.index.uploadFile({url:`${a.BASE_URL}/upload/image`,filePath:o,name:"file",success:e=>{try{const o=JSON.parse(e.data);200===o.code?c.value[t].push(a.imgUrl(o.data.url)):i++}catch(o){i++}n()},fail:()=>{i++,n()}})}));Promise.all(r).then(()=>{e.index.hideLoading(),i>0&&e.index.showToast({title:`${i}张上传失败`,icon:"none"})})}})},h=(e,a)=>{c.value[e].splice(a,1)},T=e=>{const a=e.detail.value;c.value.serviceType=f.value[a].value},x=async()=>{if(!c.value.petName)return e.index.showToast({title:"请输入宠物名字",icon:"none"});if(!c.value.serviceType)return e.index.showToast({title:"请选择服务类型",icon:"none"});d.value=!0;const t={appointmentId:v.value||null,userId:r.id,petName:c.value.petName,serviceType:c.value.serviceType,appointmentTime:c.value.appointmentTime||null,beforePhoto:c.value.before.join(","),afterPhoto:c.value.after.join(","),remark:c.value.remark},o=await a.createReport(t);if(d.value=!1,200===o.code){const a=o.data.reportToken;e.index.showToast({title:"提交成功",icon:"success"}),setTimeout(()=>{c.value={petName:"",serviceType:"",appointmentTime:"",before:[],after:[],remark:""},v.value=null,e.index.navigateTo({url:`/pages/report-view/reportView?token=${a}`})},1e3)}else e.index.showToast({title:o.message||"提交失败",icon:"none"})},y=()=>p("home");return e.onMounted(async()=>{await(async()=>{if(!l.id)return;const e=await a.getServiceTypeList(l.id);200===e.code&&(m.value=e.data)})();const t=JSON.parse(e.index.getStorageSync("petstore_report_prefill")||"null");t&&(v.value=t.appointmentId,c.value.petName=t.petName||"",c.value.serviceType=t.serviceType||"",c.value.appointmentTime=t.appointmentTime?t.appointmentTime.slice(0,16):"",e.index.removeStorageSync("petstore_report_prefill"))}),(a,t)=>e.e({a:e.p({name:"back",size:18,color:"#ffffff"}),b:e.o(y),c:e.s(e.unref(u)),d:e.p({name:"profile",size:12}),e:c.value.petName,f:e.o(e=>c.value.petName=e.detail.value),g:e.t(c.value.serviceType||"请选择"),h:f.value,i:e.o(T),j:c.value.appointmentTime,k:e.o(e=>c.value.appointmentTime=e.detail.value),l:e.p({name:"camera",size:12}),m:e.f(c.value.before,(a,t,o)=>({a:a,b:e.o(e=>h("before",t),t),c:t})),n:c.value.before.length<9},c.value.before.length<9?{o:e.p({name:"camera",size:16,color:"#94a3b8"}),p:e.o(e=>g("before"))}:{},{q:e.f(c.value.after,(a,t,o)=>({a:a,b:e.o(e=>h("after",t),t),c:t})),r:c.value.after.length<9},c.value.after.length<9?{s:e.p({name:"camera",size:16,color:"#94a3b8"}),t:e.o(e=>g("after"))}:{},{v:e.p({name:"orders",size:12}),w:c.value.remark,x:e.o(e=>c.value.remark=e.detail.value),y:e.o(x),z:d.value},(d.value,{}),{A:e.o(e.unref(s)),B:e.p({"current-page":"report"})})}},l=e._export_sfc(r,[["__scopeId","data-v-26a03ae4"]]);wx.createPage(l);
diff --git a/dist/build/mp-weixin/pages/report/Report.json b/dist/build/mp-weixin/pages/report/Report.json
new file mode 100644
index 0000000..41b9197
--- /dev/null
+++ b/dist/build/mp-weixin/pages/report/Report.json
@@ -0,0 +1,6 @@
+{
+ "usingComponents": {
+ "tab-bar": "../../components/TabBar",
+ "app-icon": "../../components/AppIcon"
+ }
+}
\ No newline at end of file
diff --git a/dist/build/mp-weixin/pages/report/Report.wxml b/dist/build/mp-weixin/pages/report/Report.wxml
new file mode 100644
index 0000000..fd522a5
--- /dev/null
+++ b/dist/build/mp-weixin/pages/report/Report.wxml
@@ -0,0 +1 @@
+洗护美容报告填写服务记录完善本次服务细节,提交后可生成分享链接与二维码。基础信息宠物名字服务类型{{g}}服务时间服务照片服务前✕服务后✕服务备注备注提交中...
\ No newline at end of file
diff --git a/dist/build/mp-weixin/pages/report/Report.wxss b/dist/build/mp-weixin/pages/report/Report.wxss
new file mode 100644
index 0000000..b1443b3
--- /dev/null
+++ b/dist/build/mp-weixin/pages/report/Report.wxss
@@ -0,0 +1 @@
+.report-page.data-v-26a03ae4{padding-bottom:calc(140rpx + env(safe-area-inset-bottom))}.report-nav.data-v-26a03ae4{padding:14px 16px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:10}.nav-back.data-v-26a03ae4{font-size:20px;color:#fff}.nav-title.data-v-26a03ae4{font-size:18px;font-weight:700;color:#fff}.nav-placeholder.data-v-26a03ae4{width:32px}.report-url-input.data-v-26a03ae4{margin-top:8px}.btn-ghost.data-v-26a03ae4{background:#fff!important;color:#666!important;border:1px solid #e0e0e0!important;box-shadow:none!important}.notice-bar.data-v-26a03ae4{padding:10px 16px;font-size:13px}.notice-bar.success.data-v-26a03ae4{background:#f8fafc;color:#334155;border-left:3px solid #16a34a}.result-wrap.data-v-26a03ae4,.result-content.data-v-26a03ae4{padding:0}.result-link-row.data-v-26a03ae4{display:flex;justify-content:space-between;align-items:center}.qr-wrap.data-v-26a03ae4{text-align:center;padding:20px;background:#f8fafc;border:1px solid #e8edf4;border-radius:14px;margin:16px 0}.qr-img.data-v-26a03ae4{width:180px;height:180px}.report-hero.data-v-26a03ae4{margin-top:12px;padding:12px 14px;border:1px solid #e5ebf3;border-radius:14px;background:#fff}.hero-title.data-v-26a03ae4{font-size:16px;font-weight:700;color:#1f2937}.hero-sub.data-v-26a03ae4{margin-top:4px;font-size:12px;color:#6b7280;line-height:1.45}.report-form .form-section.data-v-26a03ae4{background:#fff;border:1px solid #e5ebf3;border-radius:16px;box-shadow:0 6px 18px rgba(15,23,42,.04);overflow:hidden}.section-title.data-v-26a03ae4{display:flex;align-items:center;gap:6px;padding:12px 14px 4px;font-size:13px;color:#64748b;font-weight:700}.section-icon.data-v-26a03ae4{width:18px;height:18px;border-radius:6px;background:#f8fafc;display:inline-flex;align-items:center;justify-content:center;border:1px solid #e2e8f0}.section-body.data-v-26a03ae4{padding:0 14px 10px}.form-field-wrap.data-v-26a03ae4{padding:0 0 10px}.field-label.data-v-26a03ae4{margin:0 0 6px;font-size:13px;color:#64748b;font-weight:600}.photo-row.data-v-26a03ae4{display:flex;gap:10px}.photo-col.data-v-26a03ae4{flex:1;min-width:0}.upload-wrap.data-v-26a03ae4{display:flex;align-items:center;flex-wrap:wrap;gap:10px;margin-top:6px;padding-top:6px}.upload-box.data-v-26a03ae4{width:100px;height:100px;border:1px dashed #d8e0ea;border-radius:14px;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#94a3b8;cursor:pointer;background:#fbfdff}.upload-icon.data-v-26a03ae4{width:28px;height:28px;border-radius:8px;background:#f1f5f9;display:inline-flex;align-items:center;justify-content:center;border:1px solid #e2e8f0}.upload-preview.data-v-26a03ae4{position:relative;width:100px;height:100px;margin-top:4px;margin-right:4px}.preview-img.data-v-26a03ae4{width:100%;height:100%;border-radius:14px;-o-object-fit:cover;object-fit:cover;border:1px solid #e8edf4}.preview-remove.data-v-26a03ae4{position:absolute;top:-8px;right:-8px;width:22px;height:22px;background:rgba(0,0,0,.6);color:#fff;border-radius:50%;font-size:12px;display:flex;align-items:center;justify-content:center;z-index:10}.loading-mask.data-v-26a03ae4{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.4);display:flex;align-items:center;justify-content:center;z-index:999}.loading-box.data-v-26a03ae4{background:#fff;padding:20px 40px;border-radius:12px;font-size:15px}.picker-field.data-v-26a03ae4{display:flex;align-items:center;background:#fff;border-radius:12px;padding:8px 12px;color:#333;min-height:44px}.form-section.data-v-26a03ae4{margin:12px 0 0}.form-submit-wrap.data-v-26a03ae4{padding:0 0 16px}.field-label-tight.data-v-26a03ae4{margin-bottom:0}.upload-tip.data-v-26a03ae4{font-size:12px;margin-top:6px;color:#64748b}.remark-textarea.data-v-26a03ae4{min-height:120px;line-height:1.5}.report-submit-btn.data-v-26a03ae4{margin-top:6px!important}.result-content .van-button--primary.data-v-26a03ae4{box-shadow:0 6px 14px rgba(34,197,94,.2)!important}
diff --git a/dist/build/mp-weixin/project.config.json b/dist/build/mp-weixin/project.config.json
new file mode 100644
index 0000000..7986317
--- /dev/null
+++ b/dist/build/mp-weixin/project.config.json
@@ -0,0 +1,36 @@
+{
+ "description": "项目配置文件。",
+ "packOptions": {
+ "ignore": []
+ },
+ "setting": {
+ "urlCheck": false,
+ "es6": true,
+ "postcss": true,
+ "minified": true,
+ "newFeature": true,
+ "bigPackageSizeSupport": true
+ },
+ "compileType": "miniprogram",
+ "libVersion": "3.5.0",
+ "appid": "touristappid",
+ "projectname": "宠伴生活馆",
+ "condition": {
+ "search": {
+ "current": -1,
+ "list": []
+ },
+ "conversation": {
+ "current": -1,
+ "list": []
+ },
+ "game": {
+ "current": -1,
+ "list": []
+ },
+ "miniprogram": {
+ "current": -1,
+ "list": []
+ }
+ }
+}
\ No newline at end of file
diff --git a/dist/build/mp-weixin/static/make-icons.py b/dist/build/mp-weixin/static/make-icons.py
new file mode 100644
index 0000000..ee9e9d3
--- /dev/null
+++ b/dist/build/mp-weixin/static/make-icons.py
@@ -0,0 +1,92 @@
+#!/usr/bin/env python3
+"""Generate simple PNG icons for tabBar using only stdlib"""
+import struct, zlib, math, os
+
+def save_png(img_data, w, h, filepath):
+ """img_data: list of (r,g,b) tuples, row-major"""
+ def chunk(ctype, data):
+ c = ctype + data
+ return struct.pack('>I', len(data)) + c + struct.pack('>I', zlib.crc32(c) & 0xffffffff)
+ sig = b'\x89PNG\r\n\x1a\n'
+ ihdr = chunk(b'IHDR', struct.pack('>IIBBBBB', w, h, 8, 2, 0, 0, 0))
+ raw = b''
+ for row in img_data:
+ raw += b'\x00'
+ for r, g, b in row:
+ raw += bytes([r, g, b])
+ idat = chunk(b'IDAT', zlib.compress(raw, 9))
+ iend = chunk(b'IEND', b'')
+ with open(filepath, 'wb') as f:
+ f.write(sig + ihdr + idat + iend)
+
+def draw_circle(img, w, h, cx, cy, radius, r, g, b, fill=True):
+ for y in range(h):
+ for x in range(w):
+ d = math.sqrt((x-cx)**2 + (y-cy)**2)
+ if fill and d <= radius:
+ img[y][x] = (r, g, b)
+ elif not fill and abs(d - radius) < 1.0:
+ img[y][x] = (r, g, b)
+
+def solid_img(w, h, r, g, b):
+ return [[(r, g, b)] * w for _ in range(h)]
+
+def home_icon(active):
+ img = solid_img(81, 81, 0, 0, 0)
+ base = (180, 180, 180) if not active else (7, 193, 96)
+ accent = (7, 193, 96) if active else (120, 120, 120)
+ # house shape: triangle roof + rectangle body
+ roof = [(40,15),(15,40),(66,40)] # simplified triangle roof points
+ for y in range(81):
+ for x in range(81):
+ # roof triangle
+ if y <= 40 and x >= 15 and x <= 66:
+ in_roof = (y - 15) >= abs(x - 40) * 0.8
+ else:
+ in_roof = False
+ # body rectangle
+ in_body = x >= 22 and x <= 60 and y >= 38 and y <= 66
+ if in_roof or in_body:
+ img[y][x] = accent
+ return img
+
+def report_icon(active):
+ img = solid_img(81, 81, 0, 0, 0)
+ accent = (7, 193, 96) if active else (180, 180, 180)
+ for y in range(81):
+ for x in range(81):
+ # doc rectangle with folded corner
+ in_doc = x >= 20 and x <= 62 and y >= 12 and y <= 70
+ corner = x >= 46 and y <= 28 and (x - 46 + y - 28) <= 6
+ if in_doc and not corner:
+ img[y][x] = accent
+ if 28 <= y <= 50 and x >= 30 and x <= 52 and (y - 28) > abs(x - 41) * 0.7:
+ img[y][x] = (255,255,255) if active else (220,220,220)
+ return img
+
+def mine_icon(active):
+ img = solid_img(81, 81, 0, 0, 0)
+ accent = (7, 193, 96) if active else (180, 180, 180)
+ cx, cy = 40, 36
+ r = 18
+ for y in range(81):
+ for x in range(81):
+ d = math.sqrt((x-cx)**2 + (y-cy)**2)
+ if d <= r:
+ img[y][x] = accent
+ # shoulders
+ for y in range(55, 75):
+ for x in range(15, 66):
+ d = math.sqrt((x-40)**2/900 + (y-62)**2/225)
+ if d <= 1:
+ img[y][x] = accent
+ return img
+
+static = '/Users/wac/Desktop/www/_src/petstore/frontend/src/static'
+save_png(home_icon(False), 81, 81, f'{static}/tab-home.png')
+save_png(home_icon(True), 81, 81, f'{static}/tab-home-active.png')
+save_png(report_icon(False), 81, 81, f'{static}/tab-report.png')
+save_png(report_icon(True), 81, 81, f'{static}/tab-report-active.png')
+save_png(mine_icon(False), 81, 81, f'{static}/tab-mine.png')
+save_png(mine_icon(True), 81, 81, f'{static}/tab-mine-active.png')
+print('done')
diff --git a/dist/build/mp-weixin/static/tab-home-active.png b/dist/build/mp-weixin/static/tab-home-active.png
new file mode 100644
index 0000000..c910ae3
Binary files /dev/null and b/dist/build/mp-weixin/static/tab-home-active.png differ
diff --git a/dist/build/mp-weixin/static/tab-home.png b/dist/build/mp-weixin/static/tab-home.png
new file mode 100644
index 0000000..45cb0b1
Binary files /dev/null and b/dist/build/mp-weixin/static/tab-home.png differ
diff --git a/dist/build/mp-weixin/static/tab-mine-active.png b/dist/build/mp-weixin/static/tab-mine-active.png
new file mode 100644
index 0000000..5fe7d8e
Binary files /dev/null and b/dist/build/mp-weixin/static/tab-mine-active.png differ
diff --git a/dist/build/mp-weixin/static/tab-mine.png b/dist/build/mp-weixin/static/tab-mine.png
new file mode 100644
index 0000000..1231723
Binary files /dev/null and b/dist/build/mp-weixin/static/tab-mine.png differ
diff --git a/dist/build/mp-weixin/static/tab-report-active.png b/dist/build/mp-weixin/static/tab-report-active.png
new file mode 100644
index 0000000..f93146c
Binary files /dev/null and b/dist/build/mp-weixin/static/tab-report-active.png differ
diff --git a/dist/build/mp-weixin/static/tab-report.png b/dist/build/mp-weixin/static/tab-report.png
new file mode 100644
index 0000000..e5f5212
Binary files /dev/null and b/dist/build/mp-weixin/static/tab-report.png differ
diff --git a/dist/build/mp-weixin/utils/appointment.js b/dist/build/mp-weixin/utils/appointment.js
new file mode 100644
index 0000000..248186b
--- /dev/null
+++ b/dist/build/mp-weixin/utils/appointment.js
@@ -0,0 +1 @@
+"use strict";const e={new:"待确认",doing:"服务中",done:"已完成",cancel:"已取消"};exports.getAppointmentStatusText=t=>e[t]||e.new,exports.getAppointmentTagClass=e=>({new:"tag-warning",doing:"tag-primary",done:"tag-success",cancel:"tag-default"}[e]||"tag-default"),exports.getAppointmentTagType=e=>({new:"warning",doing:"primary",done:"success",cancel:"default"}[e]||"default");
diff --git a/dist/build/mp-weixin/utils/datetime.js b/dist/build/mp-weixin/utils/datetime.js
new file mode 100644
index 0000000..545f215
--- /dev/null
+++ b/dist/build/mp-weixin/utils/datetime.js
@@ -0,0 +1 @@
+"use strict";exports.formatDateTimeCN=t=>{if(!t)return"";return new Date(t).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})},exports.formatDateTimeYMDHM=t=>{if(!t)return"";const e=new Date(t);return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")} ${String(e.getHours()).padStart(2,"0")}:${String(e.getMinutes()).padStart(2,"0")}`};
diff --git a/dist/build/mp-weixin/utils/globalState.js b/dist/build/mp-weixin/utils/globalState.js
new file mode 100644
index 0000000..6790865
--- /dev/null
+++ b/dist/build/mp-weixin/utils/globalState.js
@@ -0,0 +1 @@
+"use strict";const e=require("../common/vendor.js"),r={login:"/pages/login/Login",home:"/pages/home/Home",report:"/pages/report/Report",mine:"/pages/mine/Mine"},o={staff:"/pages/mine/Staff",serviceType:"/pages/mine/ServiceType",store:"/pages/mine/Store",profile:"/pages/mine/Profile",myReports:"/pages/mine/MyReports",myOrders:"/pages/mine/MyOrders"};exports.navigateTo=i=>{const s=r[i];if(s)return void e.index.reLaunch({url:s});const n=o[i];n&&e.index.navigateTo({url:n})};
diff --git a/dist/build/mp-weixin/utils/session.js b/dist/build/mp-weixin/utils/session.js
new file mode 100644
index 0000000..9cd8a2f
--- /dev/null
+++ b/dist/build/mp-weixin/utils/session.js
@@ -0,0 +1 @@
+"use strict";const e=require("../common/vendor.js"),t=(e,t={})=>{if(!e)return t;try{return JSON.parse(e)}catch(r){return t}},r=()=>t(e.index.getStorageSync("petstore_user"),{});exports.clearSession=()=>{e.index.removeStorageSync("petstore_user"),e.index.removeStorageSync("petstore_store")},exports.getStoreSession=()=>t(e.index.getStorageSync("petstore_store"),{}),exports.getUserSession=r,exports.isLoggedIn=()=>{const e=r();return!(!e||!e.id)},exports.setStoreSession=t=>{e.index.setStorageSync("petstore_store",JSON.stringify(t||{}))},exports.setUserSession=t=>{e.index.setStorageSync("petstore_user",JSON.stringify(t||{}))};
diff --git a/dist/dev/mp-weixin/api/index.js b/dist/dev/mp-weixin/api/index.js
new file mode 100644
index 0000000..e5575c3
--- /dev/null
+++ b/dist/dev/mp-weixin/api/index.js
@@ -0,0 +1,67 @@
+"use strict";
+const common_vendor = require("../common/vendor.js");
+const API_ORIGIN = "http://localhost:8080".replace(/\/$/, "");
+const BASE_URL = `${API_ORIGIN}/api`;
+const request = (options) => new Promise((resolve, reject) => {
+ common_vendor.index.request({
+ url: BASE_URL + options.url,
+ method: options.method || "GET",
+ data: options.data || {},
+ header: options.header || {},
+ success: (res) => resolve(res.data),
+ fail: (err) => reject(err)
+ });
+});
+const get = (url, params = {}) => {
+ const qs = Object.entries(params).filter(([, v]) => v != null).map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`).join("&");
+ return request({ url: `${url}${qs ? "?" + qs : ""}`, method: "GET" });
+};
+const post = (url, body = {}) => request({ url, method: "POST", data: body, header: { "Content-Type": "application/json" } });
+const put = (url, body = {}) => request({ url, method: "PUT", data: body, header: { "Content-Type": "application/json" } });
+const del = (url) => request({ url, method: "DELETE" });
+const imgUrl = (path) => {
+ if (!path) return "";
+ if (path.startsWith("http")) return path;
+ return `${API_ORIGIN}${path}`;
+};
+const sendSms = (phone) => post("/sms/send", { phone });
+const login = (phone, code) => post("/user/login", { phone, code });
+const registerBoss = (data) => post("/user/register-boss", data);
+const registerStaff = (data) => post("/user/register-staff", data);
+const getAppointmentList = (userId, storeId) => get("/appointment/list", { userId, storeId });
+const createAppointment = (data) => post("/appointment/create", data);
+const startAppointment = (appointmentId, staffUserId) => post("/appointment/start", { appointmentId, staffUserId });
+const cancelAppointment = (id) => put(`/appointment/status?id=${id}&status=cancel`);
+const createReport = (data) => post("/report/create", data);
+const getReportByToken = (token) => get("/report/get", { token });
+const getReportList = (params) => get("/report/list", params);
+const getServiceTypeList = (storeId) => get("/service-type/list", { storeId });
+const createServiceType = (storeId, name) => post("/service-type/create", { storeId, name });
+const deleteServiceType = (id) => del(`/service-type/delete?id=${id}`);
+const getStaffList = (storeId) => get("/user/staff-list", { storeId });
+const createStaff = (data) => post("/user/create-staff", data);
+const deleteStaff = (staffId) => del(`/user/staff?staffId=${staffId}`);
+const updateUser = (data) => put("/user/update", data);
+const updateStore = (data) => put("/store/update", data);
+exports.API_ORIGIN = API_ORIGIN;
+exports.BASE_URL = BASE_URL;
+exports.cancelAppointment = cancelAppointment;
+exports.createAppointment = createAppointment;
+exports.createReport = createReport;
+exports.createServiceType = createServiceType;
+exports.createStaff = createStaff;
+exports.deleteServiceType = deleteServiceType;
+exports.deleteStaff = deleteStaff;
+exports.getAppointmentList = getAppointmentList;
+exports.getReportByToken = getReportByToken;
+exports.getReportList = getReportList;
+exports.getServiceTypeList = getServiceTypeList;
+exports.getStaffList = getStaffList;
+exports.imgUrl = imgUrl;
+exports.login = login;
+exports.registerBoss = registerBoss;
+exports.registerStaff = registerStaff;
+exports.sendSms = sendSms;
+exports.startAppointment = startAppointment;
+exports.updateStore = updateStore;
+exports.updateUser = updateUser;
diff --git a/dist/dev/mp-weixin/app.js b/dist/dev/mp-weixin/app.js
new file mode 100644
index 0000000..13bd3cf
--- /dev/null
+++ b/dist/dev/mp-weixin/app.js
@@ -0,0 +1,53 @@
+"use strict";
+Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
+const common_vendor = require("./common/vendor.js");
+const utils_session = require("./utils/session.js");
+if (!Math) {
+ "./pages/login/Login.js";
+ "./pages/home/Home.js";
+ "./pages/report/Report.js";
+ "./pages/mine/Mine.js";
+ "./pages/mine/Staff.js";
+ "./pages/mine/ServiceType.js";
+ "./pages/mine/Store.js";
+ "./pages/mine/MyReports.js";
+ "./pages/mine/MyOrders.js";
+ "./pages/mine/Profile.js";
+ "./pages/report-view/reportView.js";
+}
+const isPublicRoute = (route) => {
+ if (!route) return false;
+ if (route.includes("pages/login/Login")) return true;
+ if (route.includes("pages/report-view/reportView")) return true;
+ return false;
+};
+function scheduleAuthGuard() {
+ setTimeout(() => {
+ try {
+ if (utils_session.isLoggedIn()) return;
+ const pages = getCurrentPages();
+ const cur = pages[pages.length - 1];
+ const route = cur && cur.route ? cur.route : "";
+ if (isPublicRoute(route)) return;
+ common_vendor.index.reLaunch({ url: "/pages/login/Login" });
+ } catch (_) {
+ common_vendor.index.reLaunch({ url: "/pages/login/Login" });
+ }
+ }, 50);
+}
+const _sfc_main = {
+ onLaunch() {
+ scheduleAuthGuard();
+ },
+ onShow() {
+ scheduleAuthGuard();
+ }
+};
+function createApp() {
+ const app = common_vendor.createSSRApp(_sfc_main);
+ return {
+ app
+ };
+}
+createApp().app.mount("#app");
+exports.createApp = createApp;
diff --git a/dist/dev/mp-weixin/app.json b/dist/dev/mp-weixin/app.json
new file mode 100644
index 0000000..ab03f52
--- /dev/null
+++ b/dist/dev/mp-weixin/app.json
@@ -0,0 +1,32 @@
+{
+ "pages": [
+ "pages/login/Login",
+ "pages/home/Home",
+ "pages/report/Report",
+ "pages/mine/Mine",
+ "pages/mine/Staff",
+ "pages/mine/ServiceType",
+ "pages/mine/Store",
+ "pages/mine/MyReports",
+ "pages/mine/MyOrders",
+ "pages/mine/Profile",
+ "pages/report-view/reportView"
+ ],
+ "window": {
+ "navigationStyle": "custom",
+ "navigationBarTextStyle": "white",
+ "navigationBarTitleText": "宠伴生活馆",
+ "navigationBarBackgroundColor": "#07c160",
+ "backgroundColor": "#F8F8F8"
+ },
+ "lazyCodeLoading": "requiredComponents",
+ "permission": {
+ "scope.userLocation": {
+ "desc": "用于在地图上选择门店位置"
+ }
+ },
+ "requiredPrivateInfos": [
+ "chooseLocation"
+ ],
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/dist/dev/mp-weixin/app.wxss b/dist/dev/mp-weixin/app.wxss
new file mode 100644
index 0000000..d2a2d3c
--- /dev/null
+++ b/dist/dev/mp-weixin/app.wxss
@@ -0,0 +1,355 @@
+/* ============================================================
+ 宠伴生活馆 - 全局样式
+ ============================================================ */
+page {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+ background: linear-gradient(180deg, #f7f9fc 0%, #f3f6fa 100%);
+ font-family: -apple-system, BlinkMacSystemFont, 'PingFang SC', 'Helvetica Neue', Helvetica, Arial, sans-serif;
+ color: #1f2937;
+ font-size: 15px;
+ -webkit-font-smoothing: antialiased;
+}
+
+/* ---- 输入框 ---- */
+.van-field {
+ background: #ffffff !important;
+ border: 1px solid #dfe5ee !important;
+ border-radius: 12px !important;
+ padding: 10px 14px !important;
+ font-size: 15px !important;
+ color: #1f2937 !important;
+ min-height: 44px !important;
+ width: 100% !important;
+ box-sizing: border-box !important;
+ transition: border-color 0.2s, box-shadow 0.2s;
+}
+.van-field:focus {
+ border-color: #22c55e !important;
+ box-shadow: 0 0 0 3px rgba(34, 197, 94, 0.14) !important;
+}
+.van-field::-moz-placeholder { color: #9aa4b2 !important;
+}
+.van-field::placeholder { color: #9aa4b2 !important;
+}
+
+/* ---- 按钮 ---- */
+.van-button {
+ border-radius: 12px !important;
+ font-size: 15px !important;
+ height: 44px !important;
+ line-height: 44px !important;
+ font-weight: 600 !important;
+ display: inline-flex !important;
+ align-items: center !important;
+ justify-content: center !important;
+}
+.van-button--primary {
+ background: linear-gradient(135deg, #22c55e 0%, #16a34a 100%) !important;
+ border: 1px solid #16a34a !important;
+ color: #fff !important;
+ box-shadow: 0 8px 20px rgba(34, 197, 94, 0.28) !important;
+}
+.van-button--primary:active { transform: translateY(1px);
+}
+.van-button--block { width: 100% !important; margin-top: 12px !important;
+}
+.van-button--small {
+ height: 34px !important;
+ line-height: 34px !important;
+ font-size: 13px !important;
+ padding: 0 14px !important;
+ border-radius: 8px !important;
+ background: #07c160 !important;
+ border: 1px solid #07c160 !important;
+ color: #fff !important;
+ flex-shrink: 0;
+}
+.van-button[disabled] {
+ background: #c8e8d8 !important;
+ border-color: #c8e8d8 !important;
+ color: #fff !important;
+ box-shadow: none !important;
+}
+button::after { border: none !important;
+}
+
+/* ---- 单元格组(卡片化) ---- */
+.van-cell-group {
+ background: #fff !important;
+ border-radius: 18px !important;
+ overflow: hidden;
+ margin: 0 !important;
+ border: 1px solid #e7edf5;
+ box-shadow: 0 6px 20px rgba(15, 23, 42, 0.04);
+}
+.van-cell {
+ padding: 14px 16px !important;
+ background: #fff !important;
+ font-size: 15px !important;
+ min-height: 48px !important;
+}
+.van-cell::after {
+ left: 16px !important;
+ right: 16px !important;
+ border-color: #eef2f7 !important;
+}
+.van-cell--link:active { background: #fafafa !important;
+}
+.van-cell__title { color: #111827 !important; font-size: 15px !important;
+}
+.van-cell__value { color: #6b7280 !important; font-size: 14px !important;
+}
+.van-cell__arrow { color: #c3ccd8 !important; font-size: 16px !important; margin-left: 4px;
+}
+.van-cell__icon { margin-right: 10px !important;
+}
+
+/* ---- 标签 ---- */
+.van-tag {
+ border-radius: 6px !important;
+ font-size: 12px !important;
+ padding: 2px 8px !important;
+}
+.van-tag--warning { background: #fff3e8 !important; color: #ff6b35 !important;
+}
+.van-tag--primary { background: #e8f7ef !important; color: #07c160 !important;
+}
+.van-tag--success { background: #f0f0f0 !important; color: #888 !important;
+}
+.van-tag--default { background: #f5f5f5 !important; color: #999 !important;
+}
+
+/* ---- 通用卡片容器 ---- */
+.card-section {
+ background: #fff;
+ border-radius: 16px;
+ overflow: hidden;
+ margin: 0 16px;
+}
+
+/* ---- 通用弹窗 ---- */
+.popup-mask {
+ position: fixed;
+ top: 0; left: 0; right: 0; bottom: 0;
+ background: rgba(0,0,0,0.5);
+ z-index: 200;
+ display: flex;
+ align-items: flex-end;
+ justify-content: center;
+}
+.popup-content {
+ background: #fff;
+ border-radius: 20px 20px 0 0;
+ width: 100%;
+ max-height: 85vh;
+ display: flex;
+ flex-direction: column;
+}
+.popup-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 18px 20px 14px;
+ border-bottom: 1px solid #f0f0f0;
+ flex-shrink: 0;
+}
+.popup-title { font-size: 17px; font-weight: 600; color: #1a1a1a;
+}
+.popup-close { font-size: 20px; color: #bbb;
+}
+.popup-body { padding: 16px 20px; overflow-y: auto; flex: 1;
+}
+.popup-footer { padding: 8px 20px max(env(safe-area-inset-bottom), 20px); flex-shrink: 0;
+}
+
+/* ---- 字段标签 ---- */
+.field-label {
+ font-size: 14px;
+ color: #666;
+ margin-bottom: 8px;
+ margin-top: 14px;
+ font-weight: 500;
+}
+.field-label:first-child { margin-top: 0;
+}
+
+/* ---- 表单卡片(用于登录/注册页) ---- */
+.form-card {
+ background: #fff;
+ border-radius: 22px;
+ padding: 28px 24px;
+ border: 1px solid #e8edf4;
+ box-shadow: 0 14px 40px rgba(15, 23, 42, 0.12);
+}
+
+/* ---- 主色调 ---- */
+:root {
+ --space-8: 8px;
+ --space-12: 12px;
+ --space-16: 16px;
+ --space-24: 24px;
+ --pet-green: #16a34a;
+ --pet-green-light: #e8f7ef;
+ --pet-orange: #f97316;
+ --pet-orange-light: #fff7ed;
+ --pet-bg: #f5f7fb;
+ --pet-text: #111827;
+ --pet-subtext: #6b7280;
+ --pet-border: #e5ebf3;
+ --pet-card-shadow: 0 8px 24px rgba(15, 23, 42, 0.06);
+}
+
+/* Dark mode tokens (预埋,按需启用) */
+@media (prefers-color-scheme: dark) {
+:root {
+ --pet-bg: #0f172a;
+ --pet-text: #e5e7eb;
+ --pet-subtext: #94a3b8;
+ --pet-border: #334155;
+}
+}
+
+/* ---- 通用 TabBar 样式(顶部状态栏) ---- */
+.van-tabs {
+ display: flex;
+ background: #fff;
+ border-bottom: 1px solid #f0f0f0;
+ padding: 0 16px;
+}
+.van-tabs__tab {
+ flex: 1;
+ text-align: center;
+ padding: 12px 0;
+ font-size: 15px;
+ color: #999;
+ cursor: pointer;
+ position: relative;
+}
+.van-tabs__tab.active {
+ color: #07c160;
+ font-weight: 600;
+}
+.van-tabs__tab.active::after {
+ content: '';
+ position: absolute;
+ bottom: 0;
+ left: 50%;
+ transform: translateX(-50%);
+ width: 40px;
+ height: 3px;
+ background: #07c160;
+ border-radius: 2px;
+}
+
+/* ---- 通用页面头部 ---- */
+[class*='-nav'] {
+ border-bottom-left-radius: 16px;
+ border-bottom-right-radius: 16px;
+ box-sizing: border-box;
+}
+.nav-title {
+ letter-spacing: 0.3px;
+}
+.nav-back {
+ font-weight: 700;
+ width: 28px;
+ height: 28px;
+ border-radius: 8px;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ transition: transform 0.16s ease, background-color 0.16s ease, opacity 0.16s ease;
+ -webkit-tap-highlight-color: transparent;
+}
+.nav-back:active {
+ transform: scale(0.94);
+ opacity: 0.9;
+ background: rgba(255, 255, 255, 0.15);
+}
+
+/* ---- 空状态统一 ---- */
+.empty {
+ margin: 24px 16px;
+ padding: 22px 16px;
+ background: #ffffff;
+ border: 1px solid var(--pet-border);
+ border-radius: 14px;
+ color: var(--pet-subtext);
+ text-align: center;
+}
+
+/* ---- 页面布局工具类 ---- */
+.page-shell {
+ min-height: 100vh;
+ background: var(--pet-bg);
+ padding-bottom: 120rpx;
+}
+.page-section {
+ margin: var(--space-16);
+}
+.section-gap {
+ margin-top: var(--space-12);
+}
+
+/* ---- 常用内容间距 ---- */
+.module-title {
+ font-size: 12px;
+ color: #94a3b8;
+ font-weight: 700;
+ margin-bottom: var(--space-8);
+}
+.form-field-wrap {
+ padding: 6px var(--space-16) var(--space-12);
+}
+
+/* ---- 文本层级工具类 ---- */
+.text-title {
+ font-size: 18px;
+ font-weight: 700;
+ color: var(--pet-text);
+}
+.text-body {
+ font-size: 14px;
+ color: var(--pet-text);
+ line-height: 1.5;
+}
+.text-sub {
+ font-size: 12px;
+ color: var(--pet-subtext);
+}
+
+/* ---- 导航头工具类 ---- */
+.nav-gradient {
+ background: linear-gradient(135deg, #22c55e 0%, #16a34a 100%);
+ box-shadow: 0 8px 20px rgba(34, 197, 94, 0.25);
+}
+
+/* ---- 微交互:统一点击反馈 ---- */
+.van-button,
+.order-item,
+.gallery-item,
+.menu-card,
+.card-section,
+.user-card {
+ transition: transform 0.16s ease, box-shadow 0.2s ease, opacity 0.16s ease;
+ -webkit-tap-highlight-color: transparent;
+}
+.van-button:active,
+.order-item:active,
+.gallery-item:active,
+.menu-card:active,
+.card-section:active,
+.user-card:active {
+ transform: translateY(1px) scale(0.995);
+ opacity: 0.97;
+}
+page {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+ background: #f5f5f5;
+ font-family: -apple-system, BlinkMacSystemFont, 'PingFang SC', 'Helvetica Neue', Helvetica, Arial, sans-serif;
+}
+page{--status-bar-height:25px;--top-window-height:0px;--window-top:0px;--window-bottom:0px;--window-left:0px;--window-right:0px;--window-magin:0px}[data-c-h="true"]{display: none !important;}
\ No newline at end of file
diff --git a/dist/dev/mp-weixin/common/vendor.js b/dist/dev/mp-weixin/common/vendor.js
new file mode 100644
index 0000000..ee24bab
--- /dev/null
+++ b/dist/dev/mp-weixin/common/vendor.js
@@ -0,0 +1,7422 @@
+"use strict";
+const _export_sfc = (sfc, props) => {
+ const target = sfc.__vccOpts || sfc;
+ for (const [key, val] of props) {
+ target[key] = val;
+ }
+ return target;
+};
+/**
+* @vue/shared v3.4.21
+* (c) 2018-present Yuxi (Evan) You and Vue contributors
+* @license MIT
+**/
+function makeMap(str, expectsLowerCase) {
+ const set2 = new Set(str.split(","));
+ return (val) => set2.has(val);
+}
+const EMPTY_OBJ = Object.freeze({});
+const EMPTY_ARR = Object.freeze([]);
+const NOOP = () => {
+};
+const NO = () => false;
+const isOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // uppercase letter
+(key.charCodeAt(2) > 122 || key.charCodeAt(2) < 97);
+const isModelListener = (key) => key.startsWith("onUpdate:");
+const extend = Object.assign;
+const remove = (arr, el) => {
+ const i = arr.indexOf(el);
+ if (i > -1) {
+ arr.splice(i, 1);
+ }
+};
+const hasOwnProperty$1 = Object.prototype.hasOwnProperty;
+const hasOwn = (val, key) => hasOwnProperty$1.call(val, key);
+const isArray = Array.isArray;
+const isMap = (val) => toTypeString(val) === "[object Map]";
+const isSet = (val) => toTypeString(val) === "[object Set]";
+const isFunction = (val) => typeof val === "function";
+const isString = (val) => typeof val === "string";
+const isSymbol = (val) => typeof val === "symbol";
+const isObject = (val) => val !== null && typeof val === "object";
+const isPromise = (val) => {
+ return (isObject(val) || isFunction(val)) && isFunction(val.then) && isFunction(val.catch);
+};
+const objectToString = Object.prototype.toString;
+const toTypeString = (value) => objectToString.call(value);
+const toRawType = (value) => {
+ return toTypeString(value).slice(8, -1);
+};
+const isPlainObject = (val) => toTypeString(val) === "[object Object]";
+const isIntegerKey = (key) => isString(key) && key !== "NaN" && key[0] !== "-" && "" + parseInt(key, 10) === key;
+const isReservedProp = /* @__PURE__ */ makeMap(
+ // the leading comma is intentional so empty string "" is also included
+ ",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"
+);
+const isBuiltInDirective = /* @__PURE__ */ makeMap(
+ "bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo"
+);
+const cacheStringFunction = (fn) => {
+ const cache = /* @__PURE__ */ Object.create(null);
+ return (str) => {
+ const hit = cache[str];
+ return hit || (cache[str] = fn(str));
+ };
+};
+const camelizeRE = /-(\w)/g;
+const camelize = cacheStringFunction((str) => {
+ return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : "");
+});
+const hyphenateRE = /\B([A-Z])/g;
+const hyphenate = cacheStringFunction(
+ (str) => str.replace(hyphenateRE, "-$1").toLowerCase()
+);
+const capitalize = cacheStringFunction((str) => {
+ return str.charAt(0).toUpperCase() + str.slice(1);
+});
+const toHandlerKey = cacheStringFunction((str) => {
+ const s2 = str ? `on${capitalize(str)}` : ``;
+ return s2;
+});
+const hasChanged = (value, oldValue) => !Object.is(value, oldValue);
+const invokeArrayFns$1 = (fns, arg) => {
+ for (let i = 0; i < fns.length; i++) {
+ fns[i](arg);
+ }
+};
+const def = (obj, key, value) => {
+ Object.defineProperty(obj, key, {
+ configurable: true,
+ enumerable: false,
+ value
+ });
+};
+const looseToNumber = (val) => {
+ const n2 = parseFloat(val);
+ return isNaN(n2) ? val : n2;
+};
+function normalizeStyle(value) {
+ if (isArray(value)) {
+ const res = {};
+ for (let i = 0; i < value.length; i++) {
+ const item = value[i];
+ const normalized = isString(item) ? parseStringStyle(item) : normalizeStyle(item);
+ if (normalized) {
+ for (const key in normalized) {
+ res[key] = normalized[key];
+ }
+ }
+ }
+ return res;
+ } else if (isString(value) || isObject(value)) {
+ return value;
+ }
+}
+const listDelimiterRE = /;(?![^(]*\))/g;
+const propertyDelimiterRE = /:([^]+)/;
+const styleCommentRE = /\/\*[^]*?\*\//g;
+function parseStringStyle(cssText) {
+ const ret = {};
+ cssText.replace(styleCommentRE, "").split(listDelimiterRE).forEach((item) => {
+ if (item) {
+ const tmp = item.split(propertyDelimiterRE);
+ tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());
+ }
+ });
+ return ret;
+}
+function normalizeClass(value) {
+ let res = "";
+ if (isString(value)) {
+ res = value;
+ } else if (isArray(value)) {
+ for (let i = 0; i < value.length; i++) {
+ const normalized = normalizeClass(value[i]);
+ if (normalized) {
+ res += normalized + " ";
+ }
+ }
+ } else if (isObject(value)) {
+ for (const name in value) {
+ if (value[name]) {
+ res += name + " ";
+ }
+ }
+ }
+ return res.trim();
+}
+const toDisplayString = (val) => {
+ return isString(val) ? val : val == null ? "" : isArray(val) || isObject(val) && (val.toString === objectToString || !isFunction(val.toString)) ? JSON.stringify(val, replacer, 2) : String(val);
+};
+const replacer = (_key, val) => {
+ if (val && val.__v_isRef) {
+ return replacer(_key, val.value);
+ } else if (isMap(val)) {
+ return {
+ [`Map(${val.size})`]: [...val.entries()].reduce(
+ (entries, [key, val2], i) => {
+ entries[stringifySymbol(key, i) + " =>"] = val2;
+ return entries;
+ },
+ {}
+ )
+ };
+ } else if (isSet(val)) {
+ return {
+ [`Set(${val.size})`]: [...val.values()].map((v) => stringifySymbol(v))
+ };
+ } else if (isSymbol(val)) {
+ return stringifySymbol(val);
+ } else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {
+ return String(val);
+ }
+ return val;
+};
+const stringifySymbol = (v, i = "") => {
+ var _a;
+ return isSymbol(v) ? `Symbol(${(_a = v.description) != null ? _a : i})` : v;
+};
+const SLOT_DEFAULT_NAME = "d";
+const ON_SHOW = "onShow";
+const ON_HIDE = "onHide";
+const ON_LAUNCH = "onLaunch";
+const ON_ERROR = "onError";
+const ON_THEME_CHANGE = "onThemeChange";
+const ON_PAGE_NOT_FOUND = "onPageNotFound";
+const ON_UNHANDLE_REJECTION = "onUnhandledRejection";
+const ON_EXIT = "onExit";
+const ON_LOAD = "onLoad";
+const ON_READY = "onReady";
+const ON_UNLOAD = "onUnload";
+const ON_INIT = "onInit";
+const ON_SAVE_EXIT_STATE = "onSaveExitState";
+const ON_RESIZE = "onResize";
+const ON_BACK_PRESS = "onBackPress";
+const ON_PAGE_SCROLL = "onPageScroll";
+const ON_TAB_ITEM_TAP = "onTabItemTap";
+const ON_REACH_BOTTOM = "onReachBottom";
+const ON_PULL_DOWN_REFRESH = "onPullDownRefresh";
+const ON_SHARE_TIMELINE = "onShareTimeline";
+const ON_SHARE_CHAT = "onShareChat";
+const ON_ADD_TO_FAVORITES = "onAddToFavorites";
+const ON_SHARE_APP_MESSAGE = "onShareAppMessage";
+const ON_NAVIGATION_BAR_BUTTON_TAP = "onNavigationBarButtonTap";
+const ON_NAVIGATION_BAR_SEARCH_INPUT_CLICKED = "onNavigationBarSearchInputClicked";
+const ON_NAVIGATION_BAR_SEARCH_INPUT_CHANGED = "onNavigationBarSearchInputChanged";
+const ON_NAVIGATION_BAR_SEARCH_INPUT_CONFIRMED = "onNavigationBarSearchInputConfirmed";
+const ON_NAVIGATION_BAR_SEARCH_INPUT_FOCUS_CHANGED = "onNavigationBarSearchInputFocusChanged";
+const VIRTUAL_HOST_STYLE = "virtualHostStyle";
+const VIRTUAL_HOST_CLASS = "virtualHostClass";
+const VIRTUAL_HOST_HIDDEN = "virtualHostHidden";
+const VIRTUAL_HOST_ID = "virtualHostId";
+function hasLeadingSlash(str) {
+ return str.indexOf("/") === 0;
+}
+function addLeadingSlash(str) {
+ return hasLeadingSlash(str) ? str : "/" + str;
+}
+const invokeArrayFns = (fns, arg) => {
+ let ret;
+ for (let i = 0; i < fns.length; i++) {
+ ret = fns[i](arg);
+ }
+ return ret;
+};
+function once(fn, ctx = null) {
+ let res;
+ return (...args) => {
+ if (fn) {
+ res = fn.apply(ctx, args);
+ fn = null;
+ }
+ return res;
+ };
+}
+function getValueByDataPath(obj, path) {
+ if (!isString(path)) {
+ return;
+ }
+ path = path.replace(/\[(\d+)\]/g, ".$1");
+ const parts = path.split(".");
+ let key = parts[0];
+ if (!obj) {
+ obj = {};
+ }
+ if (parts.length === 1) {
+ return obj[key];
+ }
+ return getValueByDataPath(obj[key], parts.slice(1).join("."));
+}
+function sortObject(obj) {
+ let sortObj = {};
+ if (isPlainObject(obj)) {
+ Object.keys(obj).sort().forEach((key) => {
+ const _key = key;
+ sortObj[_key] = obj[_key];
+ });
+ }
+ return !Object.keys(sortObj) ? obj : sortObj;
+}
+const customizeRE = /:/g;
+function customizeEvent(str) {
+ return camelize(str.replace(customizeRE, "-"));
+}
+const encode = encodeURIComponent;
+function stringifyQuery(obj, encodeStr = encode) {
+ const res = obj ? Object.keys(obj).map((key) => {
+ let val = obj[key];
+ if (typeof val === void 0 || val === null) {
+ val = "";
+ } else if (isPlainObject(val)) {
+ val = JSON.stringify(val);
+ }
+ return encodeStr(key) + "=" + encodeStr(val);
+ }).filter((x) => x.length > 0).join("&") : null;
+ return res ? `?${res}` : "";
+}
+const PAGE_HOOKS = [
+ ON_INIT,
+ ON_LOAD,
+ ON_SHOW,
+ ON_HIDE,
+ ON_UNLOAD,
+ ON_BACK_PRESS,
+ ON_PAGE_SCROLL,
+ ON_TAB_ITEM_TAP,
+ ON_REACH_BOTTOM,
+ ON_PULL_DOWN_REFRESH,
+ ON_SHARE_TIMELINE,
+ ON_SHARE_APP_MESSAGE,
+ ON_SHARE_CHAT,
+ ON_ADD_TO_FAVORITES,
+ ON_SAVE_EXIT_STATE,
+ ON_NAVIGATION_BAR_BUTTON_TAP,
+ ON_NAVIGATION_BAR_SEARCH_INPUT_CLICKED,
+ ON_NAVIGATION_BAR_SEARCH_INPUT_CHANGED,
+ ON_NAVIGATION_BAR_SEARCH_INPUT_CONFIRMED,
+ ON_NAVIGATION_BAR_SEARCH_INPUT_FOCUS_CHANGED
+];
+function isRootHook(name) {
+ return PAGE_HOOKS.indexOf(name) > -1;
+}
+const UniLifecycleHooks = [
+ ON_SHOW,
+ ON_HIDE,
+ ON_LAUNCH,
+ ON_ERROR,
+ ON_THEME_CHANGE,
+ ON_PAGE_NOT_FOUND,
+ ON_UNHANDLE_REJECTION,
+ ON_EXIT,
+ ON_INIT,
+ ON_LOAD,
+ ON_READY,
+ ON_UNLOAD,
+ ON_RESIZE,
+ ON_BACK_PRESS,
+ ON_PAGE_SCROLL,
+ ON_TAB_ITEM_TAP,
+ ON_REACH_BOTTOM,
+ ON_PULL_DOWN_REFRESH,
+ ON_SHARE_TIMELINE,
+ ON_ADD_TO_FAVORITES,
+ ON_SHARE_APP_MESSAGE,
+ ON_SHARE_CHAT,
+ ON_SAVE_EXIT_STATE,
+ ON_NAVIGATION_BAR_BUTTON_TAP,
+ ON_NAVIGATION_BAR_SEARCH_INPUT_CLICKED,
+ ON_NAVIGATION_BAR_SEARCH_INPUT_CHANGED,
+ ON_NAVIGATION_BAR_SEARCH_INPUT_CONFIRMED,
+ ON_NAVIGATION_BAR_SEARCH_INPUT_FOCUS_CHANGED
+];
+const MINI_PROGRAM_PAGE_RUNTIME_HOOKS = /* @__PURE__ */ (() => {
+ return {
+ onPageScroll: 1,
+ onShareAppMessage: 1 << 1,
+ onShareTimeline: 1 << 2
+ };
+})();
+function isUniLifecycleHook(name, value, checkType = true) {
+ if (checkType && !isFunction(value)) {
+ return false;
+ }
+ if (UniLifecycleHooks.indexOf(name) > -1) {
+ return true;
+ } else if (name.indexOf("on") === 0) {
+ return true;
+ }
+ return false;
+}
+let vueApp;
+const createVueAppHooks = [];
+function onCreateVueApp(hook) {
+ if (vueApp) {
+ return hook(vueApp);
+ }
+ createVueAppHooks.push(hook);
+}
+function invokeCreateVueAppHook(app) {
+ vueApp = app;
+ createVueAppHooks.forEach((hook) => hook(app));
+}
+const invokeCreateErrorHandler = once((app, createErrorHandler2) => {
+ return createErrorHandler2(app);
+});
+const E = function() {
+};
+E.prototype = {
+ _id: 1,
+ on: function(name, callback, ctx) {
+ var e2 = this.e || (this.e = {});
+ (e2[name] || (e2[name] = [])).push({
+ fn: callback,
+ ctx,
+ _id: this._id
+ });
+ return this._id++;
+ },
+ once: function(name, callback, ctx) {
+ var self2 = this;
+ function listener() {
+ self2.off(name, listener);
+ callback.apply(ctx, arguments);
+ }
+ listener._ = callback;
+ return this.on(name, listener, ctx);
+ },
+ emit: function(name) {
+ var data = [].slice.call(arguments, 1);
+ var evtArr = ((this.e || (this.e = {}))[name] || []).slice();
+ var i = 0;
+ var len = evtArr.length;
+ for (i; i < len; i++) {
+ evtArr[i].fn.apply(evtArr[i].ctx, data);
+ }
+ return this;
+ },
+ off: function(name, event) {
+ var e2 = this.e || (this.e = {});
+ var evts = e2[name];
+ var liveEvents = [];
+ if (evts && event) {
+ for (var i = evts.length - 1; i >= 0; i--) {
+ if (evts[i].fn === event || evts[i].fn._ === event || evts[i]._id === event) {
+ evts.splice(i, 1);
+ break;
+ }
+ }
+ liveEvents = evts;
+ }
+ liveEvents.length ? e2[name] = liveEvents : delete e2[name];
+ return this;
+ }
+};
+var E$1 = E;
+const LOCALE_ZH_HANS = "zh-Hans";
+const LOCALE_ZH_HANT = "zh-Hant";
+const LOCALE_EN = "en";
+const LOCALE_FR = "fr";
+const LOCALE_ES = "es";
+function include(str, parts) {
+ return !!parts.find((part) => str.indexOf(part) !== -1);
+}
+function startsWith(str, parts) {
+ return parts.find((part) => str.indexOf(part) === 0);
+}
+function normalizeLocale(locale, messages) {
+ if (!locale) {
+ return;
+ }
+ locale = locale.trim().replace(/_/g, "-");
+ locale = locale.toLowerCase();
+ if (locale === "chinese") {
+ return LOCALE_ZH_HANS;
+ }
+ if (locale.indexOf("zh") === 0) {
+ if (locale.indexOf("-hans") > -1) {
+ return LOCALE_ZH_HANS;
+ }
+ if (locale.indexOf("-hant") > -1) {
+ return LOCALE_ZH_HANT;
+ }
+ if (include(locale, ["-tw", "-hk", "-mo", "-cht"])) {
+ return LOCALE_ZH_HANT;
+ }
+ return LOCALE_ZH_HANS;
+ }
+ let locales = [LOCALE_EN, LOCALE_FR, LOCALE_ES];
+ const lang = startsWith(locale, locales);
+ if (lang) {
+ return lang;
+ }
+}
+function getLocaleLanguage$1() {
+ var _a;
+ let localeLanguage = "";
+ {
+ const appBaseInfo = ((_a = wx.getAppBaseInfo) === null || _a === void 0 ? void 0 : _a.call(wx)) || wx.getSystemInfoSync();
+ const language = appBaseInfo && appBaseInfo.language ? appBaseInfo.language : LOCALE_EN;
+ localeLanguage = normalizeLocale(language) || LOCALE_EN;
+ }
+ return localeLanguage;
+}
+function validateProtocolFail(name, msg) {
+ console.warn(`${name}: ${msg}`);
+}
+function validateProtocol(name, data, protocol, onFail) {
+ if (!onFail) {
+ onFail = validateProtocolFail;
+ }
+ for (const key in protocol) {
+ const errMsg = validateProp$1(key, data[key], protocol[key], !hasOwn(data, key));
+ if (isString(errMsg)) {
+ onFail(name, errMsg);
+ }
+ }
+}
+function validateProtocols(name, args, protocol, onFail) {
+ if (!protocol) {
+ return;
+ }
+ if (!isArray(protocol)) {
+ return validateProtocol(name, args[0] || /* @__PURE__ */ Object.create(null), protocol, onFail);
+ }
+ const len = protocol.length;
+ const argsLen = args.length;
+ for (let i = 0; i < len; i++) {
+ const opts = protocol[i];
+ const data = /* @__PURE__ */ Object.create(null);
+ if (argsLen > i) {
+ data[opts.name] = args[i];
+ }
+ validateProtocol(name, data, { [opts.name]: opts }, onFail);
+ }
+}
+function validateProp$1(name, value, prop, isAbsent) {
+ if (!isPlainObject(prop)) {
+ prop = { type: prop };
+ }
+ const { type, required, validator } = prop;
+ if (required && isAbsent) {
+ return 'Missing required args: "' + name + '"';
+ }
+ if (value == null && !required) {
+ return;
+ }
+ if (type != null) {
+ let isValid = false;
+ const types = isArray(type) ? type : [type];
+ const expectedTypes = [];
+ for (let i = 0; i < types.length && !isValid; i++) {
+ const { valid, expectedType } = assertType$1(value, types[i]);
+ expectedTypes.push(expectedType || "");
+ isValid = valid;
+ }
+ if (!isValid) {
+ return getInvalidTypeMessage$1(name, value, expectedTypes);
+ }
+ }
+ if (validator) {
+ return validator(value);
+ }
+}
+const isSimpleType$1 = /* @__PURE__ */ makeMap("String,Number,Boolean,Function,Symbol");
+function assertType$1(value, type) {
+ let valid;
+ const expectedType = getType$1(type);
+ if (isSimpleType$1(expectedType)) {
+ const t2 = typeof value;
+ valid = t2 === expectedType.toLowerCase();
+ if (!valid && t2 === "object") {
+ valid = value instanceof type;
+ }
+ } else if (expectedType === "Object") {
+ valid = isObject(value);
+ } else if (expectedType === "Array") {
+ valid = isArray(value);
+ } else {
+ {
+ valid = value instanceof type;
+ }
+ }
+ return {
+ valid,
+ expectedType
+ };
+}
+function getInvalidTypeMessage$1(name, value, expectedTypes) {
+ let message = `Invalid args: type check failed for args "${name}". Expected ${expectedTypes.map(capitalize).join(", ")}`;
+ const expectedType = expectedTypes[0];
+ const receivedType = toRawType(value);
+ const expectedValue = styleValue$1(value, expectedType);
+ const receivedValue = styleValue$1(value, receivedType);
+ if (expectedTypes.length === 1 && isExplicable$1(expectedType) && !isBoolean$1(expectedType, receivedType)) {
+ message += ` with value ${expectedValue}`;
+ }
+ message += `, got ${receivedType} `;
+ if (isExplicable$1(receivedType)) {
+ message += `with value ${receivedValue}.`;
+ }
+ return message;
+}
+function getType$1(ctor) {
+ const match = ctor && ctor.toString().match(/^\s*function (\w+)/);
+ return match ? match[1] : "";
+}
+function styleValue$1(value, type) {
+ if (type === "String") {
+ return `"${value}"`;
+ } else if (type === "Number") {
+ return `${Number(value)}`;
+ } else {
+ return `${value}`;
+ }
+}
+function isExplicable$1(type) {
+ const explicitTypes = ["string", "number", "boolean"];
+ return explicitTypes.some((elem) => type.toLowerCase() === elem);
+}
+function isBoolean$1(...args) {
+ return args.some((elem) => elem.toLowerCase() === "boolean");
+}
+function tryCatch(fn) {
+ return function() {
+ try {
+ return fn.apply(fn, arguments);
+ } catch (e2) {
+ console.error(e2);
+ }
+ };
+}
+let invokeCallbackId = 1;
+const invokeCallbacks = {};
+function addInvokeCallback(id, name, callback, keepAlive = false) {
+ invokeCallbacks[id] = {
+ name,
+ keepAlive,
+ callback
+ };
+ return id;
+}
+function invokeCallback(id, res, extras) {
+ if (typeof id === "number") {
+ const opts = invokeCallbacks[id];
+ if (opts) {
+ if (!opts.keepAlive) {
+ delete invokeCallbacks[id];
+ }
+ return opts.callback(res, extras);
+ }
+ }
+ return res;
+}
+const API_SUCCESS = "success";
+const API_FAIL = "fail";
+const API_COMPLETE = "complete";
+function getApiCallbacks(args) {
+ const apiCallbacks = {};
+ for (const name in args) {
+ const fn = args[name];
+ if (isFunction(fn)) {
+ apiCallbacks[name] = tryCatch(fn);
+ delete args[name];
+ }
+ }
+ return apiCallbacks;
+}
+function normalizeErrMsg(errMsg, name) {
+ if (!errMsg || errMsg.indexOf(":fail") === -1) {
+ return name + ":ok";
+ }
+ return name + errMsg.substring(errMsg.indexOf(":fail"));
+}
+function createAsyncApiCallback(name, args = {}, { beforeAll, beforeSuccess } = {}) {
+ if (!isPlainObject(args)) {
+ args = {};
+ }
+ const { success, fail, complete } = getApiCallbacks(args);
+ const hasSuccess = isFunction(success);
+ const hasFail = isFunction(fail);
+ const hasComplete = isFunction(complete);
+ const callbackId = invokeCallbackId++;
+ addInvokeCallback(callbackId, name, (res) => {
+ res = res || {};
+ res.errMsg = normalizeErrMsg(res.errMsg, name);
+ isFunction(beforeAll) && beforeAll(res);
+ if (res.errMsg === name + ":ok") {
+ isFunction(beforeSuccess) && beforeSuccess(res, args);
+ hasSuccess && success(res);
+ } else {
+ hasFail && fail(res);
+ }
+ hasComplete && complete(res);
+ });
+ return callbackId;
+}
+const HOOK_SUCCESS = "success";
+const HOOK_FAIL = "fail";
+const HOOK_COMPLETE = "complete";
+const globalInterceptors = {};
+const scopedInterceptors = {};
+function wrapperHook(hook, params) {
+ return function(data) {
+ return hook(data, params) || data;
+ };
+}
+function queue$1(hooks, data, params) {
+ let promise = false;
+ for (let i = 0; i < hooks.length; i++) {
+ const hook = hooks[i];
+ if (promise) {
+ promise = Promise.resolve(wrapperHook(hook, params));
+ } else {
+ const res = hook(data, params);
+ if (isPromise(res)) {
+ promise = Promise.resolve(res);
+ }
+ if (res === false) {
+ return {
+ then() {
+ },
+ catch() {
+ }
+ };
+ }
+ }
+ }
+ return promise || {
+ then(callback) {
+ return callback(data);
+ },
+ catch() {
+ }
+ };
+}
+function wrapperOptions(interceptors2, options = {}) {
+ [HOOK_SUCCESS, HOOK_FAIL, HOOK_COMPLETE].forEach((name) => {
+ const hooks = interceptors2[name];
+ if (!isArray(hooks)) {
+ return;
+ }
+ const oldCallback = options[name];
+ options[name] = function callbackInterceptor(res) {
+ queue$1(hooks, res, options).then((res2) => {
+ return isFunction(oldCallback) && oldCallback(res2) || res2;
+ });
+ };
+ });
+ return options;
+}
+function wrapperReturnValue(method, returnValue) {
+ const returnValueHooks = [];
+ if (isArray(globalInterceptors.returnValue)) {
+ returnValueHooks.push(...globalInterceptors.returnValue);
+ }
+ const interceptor = scopedInterceptors[method];
+ if (interceptor && isArray(interceptor.returnValue)) {
+ returnValueHooks.push(...interceptor.returnValue);
+ }
+ returnValueHooks.forEach((hook) => {
+ returnValue = hook(returnValue) || returnValue;
+ });
+ return returnValue;
+}
+function getApiInterceptorHooks(method) {
+ const interceptor = /* @__PURE__ */ Object.create(null);
+ Object.keys(globalInterceptors).forEach((hook) => {
+ if (hook !== "returnValue") {
+ interceptor[hook] = globalInterceptors[hook].slice();
+ }
+ });
+ const scopedInterceptor = scopedInterceptors[method];
+ if (scopedInterceptor) {
+ Object.keys(scopedInterceptor).forEach((hook) => {
+ if (hook !== "returnValue") {
+ interceptor[hook] = (interceptor[hook] || []).concat(scopedInterceptor[hook]);
+ }
+ });
+ }
+ return interceptor;
+}
+function invokeApi(method, api, options, params) {
+ const interceptor = getApiInterceptorHooks(method);
+ if (interceptor && Object.keys(interceptor).length) {
+ if (isArray(interceptor.invoke)) {
+ const res = queue$1(interceptor.invoke, options);
+ return res.then((options2) => {
+ return api(wrapperOptions(getApiInterceptorHooks(method), options2), ...params);
+ });
+ } else {
+ return api(wrapperOptions(interceptor, options), ...params);
+ }
+ }
+ return api(options, ...params);
+}
+function hasCallback(args) {
+ if (isPlainObject(args) && [API_SUCCESS, API_FAIL, API_COMPLETE].find((cb) => isFunction(args[cb]))) {
+ return true;
+ }
+ return false;
+}
+function handlePromise(promise) {
+ return promise;
+}
+function promisify$1(name, fn) {
+ return (args = {}, ...rest) => {
+ if (hasCallback(args)) {
+ return wrapperReturnValue(name, invokeApi(name, fn, args, rest));
+ }
+ return wrapperReturnValue(name, handlePromise(new Promise((resolve2, reject) => {
+ invokeApi(name, fn, extend(args, { success: resolve2, fail: reject }), rest);
+ })));
+ };
+}
+function formatApiArgs(args, options) {
+ args[0];
+ {
+ return;
+ }
+}
+function invokeSuccess(id, name, res) {
+ const result = {
+ errMsg: name + ":ok"
+ };
+ return invokeCallback(id, extend(res || {}, result));
+}
+function invokeFail(id, name, errMsg, errRes = {}) {
+ const errMsgPrefix = name + ":fail";
+ let apiErrMsg = "";
+ if (!errMsg) {
+ apiErrMsg = errMsgPrefix;
+ } else if (errMsg.indexOf(errMsgPrefix) === 0) {
+ apiErrMsg = errMsg;
+ } else {
+ apiErrMsg = errMsgPrefix + " " + errMsg;
+ }
+ {
+ delete errRes.errCode;
+ }
+ let res = extend({ errMsg: apiErrMsg }, errRes);
+ return invokeCallback(id, res);
+}
+function beforeInvokeApi(name, args, protocol, options) {
+ {
+ validateProtocols(name, args, protocol);
+ }
+ const errMsg = formatApiArgs(args);
+ if (errMsg) {
+ return errMsg;
+ }
+}
+function parseErrMsg(errMsg) {
+ if (!errMsg || isString(errMsg)) {
+ return errMsg;
+ }
+ if (errMsg.stack) {
+ if (typeof globalThis === "undefined" || !globalThis.harmonyChannel) {
+ console.error(errMsg.message + "\n" + errMsg.stack);
+ }
+ return errMsg.message;
+ }
+ return errMsg;
+}
+function wrapperTaskApi(name, fn, protocol, options) {
+ return (args) => {
+ const id = createAsyncApiCallback(name, args, options);
+ const errMsg = beforeInvokeApi(name, [args], protocol);
+ if (errMsg) {
+ return invokeFail(id, name, errMsg);
+ }
+ return fn(args, {
+ resolve: (res) => invokeSuccess(id, name, res),
+ reject: (errMsg2, errRes) => invokeFail(id, name, parseErrMsg(errMsg2), errRes)
+ });
+ };
+}
+function wrapperSyncApi(name, fn, protocol, options) {
+ return (...args) => {
+ const errMsg = beforeInvokeApi(name, args, protocol);
+ if (errMsg) {
+ throw new Error(errMsg);
+ }
+ return fn.apply(null, args);
+ };
+}
+function wrapperAsyncApi(name, fn, protocol, options) {
+ return wrapperTaskApi(name, fn, protocol, options);
+}
+function defineSyncApi(name, fn, protocol, options) {
+ return wrapperSyncApi(name, fn, protocol);
+}
+function defineAsyncApi(name, fn, protocol, options) {
+ return promisify$1(name, wrapperAsyncApi(name, fn, protocol, options));
+}
+const API_UPX2PX = "upx2px";
+const Upx2pxProtocol = [
+ {
+ name: "upx",
+ type: [Number, String],
+ required: true
+ }
+];
+const EPS = 1e-4;
+const BASE_DEVICE_WIDTH = 750;
+let isIOS = false;
+let deviceWidth = 0;
+let deviceDPR = 0;
+function checkDeviceWidth() {
+ var _a, _b;
+ let windowWidth, pixelRatio, platform;
+ {
+ const windowInfo = ((_a = wx.getWindowInfo) === null || _a === void 0 ? void 0 : _a.call(wx)) || wx.getSystemInfoSync();
+ const deviceInfo = ((_b = wx.getDeviceInfo) === null || _b === void 0 ? void 0 : _b.call(wx)) || wx.getSystemInfoSync();
+ windowWidth = windowInfo.windowWidth;
+ pixelRatio = windowInfo.pixelRatio;
+ platform = deviceInfo.platform;
+ }
+ deviceWidth = windowWidth;
+ deviceDPR = pixelRatio;
+ isIOS = platform === "ios";
+}
+const upx2px = defineSyncApi(API_UPX2PX, (number, newDeviceWidth) => {
+ if (deviceWidth === 0) {
+ checkDeviceWidth();
+ }
+ number = Number(number);
+ if (number === 0) {
+ return 0;
+ }
+ let width = newDeviceWidth || deviceWidth;
+ let result = number / BASE_DEVICE_WIDTH * width;
+ if (result < 0) {
+ result = -result;
+ }
+ result = Math.floor(result + EPS);
+ if (result === 0) {
+ if (deviceDPR === 1 || !isIOS) {
+ result = 1;
+ } else {
+ result = 0.5;
+ }
+ }
+ return number < 0 ? -result : result;
+}, Upx2pxProtocol);
+function __f__(type, filename, ...args) {
+ if (filename) {
+ args.push(filename);
+ }
+ console[type].apply(console, args);
+}
+const API_ADD_INTERCEPTOR = "addInterceptor";
+const API_REMOVE_INTERCEPTOR = "removeInterceptor";
+const AddInterceptorProtocol = [
+ {
+ name: "method",
+ type: [String, Object],
+ required: true
+ }
+];
+const RemoveInterceptorProtocol = AddInterceptorProtocol;
+function mergeInterceptorHook(interceptors2, interceptor) {
+ Object.keys(interceptor).forEach((hook) => {
+ if (isFunction(interceptor[hook])) {
+ interceptors2[hook] = mergeHook(interceptors2[hook], interceptor[hook]);
+ }
+ });
+}
+function removeInterceptorHook(interceptors2, interceptor) {
+ if (!interceptors2 || !interceptor) {
+ return;
+ }
+ Object.keys(interceptor).forEach((name) => {
+ const hooks = interceptors2[name];
+ const hook = interceptor[name];
+ if (isArray(hooks) && isFunction(hook)) {
+ remove(hooks, hook);
+ }
+ });
+}
+function mergeHook(parentVal, childVal) {
+ const res = childVal ? parentVal ? parentVal.concat(childVal) : isArray(childVal) ? childVal : [childVal] : parentVal;
+ return res ? dedupeHooks(res) : res;
+}
+function dedupeHooks(hooks) {
+ const res = [];
+ for (let i = 0; i < hooks.length; i++) {
+ if (res.indexOf(hooks[i]) === -1) {
+ res.push(hooks[i]);
+ }
+ }
+ return res;
+}
+const addInterceptor = defineSyncApi(API_ADD_INTERCEPTOR, (method, interceptor) => {
+ if (isString(method) && isPlainObject(interceptor)) {
+ mergeInterceptorHook(scopedInterceptors[method] || (scopedInterceptors[method] = {}), interceptor);
+ } else if (isPlainObject(method)) {
+ mergeInterceptorHook(globalInterceptors, method);
+ }
+}, AddInterceptorProtocol);
+const removeInterceptor = defineSyncApi(API_REMOVE_INTERCEPTOR, (method, interceptor) => {
+ if (isString(method)) {
+ if (isPlainObject(interceptor)) {
+ removeInterceptorHook(scopedInterceptors[method], interceptor);
+ } else {
+ delete scopedInterceptors[method];
+ }
+ } else if (isPlainObject(method)) {
+ removeInterceptorHook(globalInterceptors, method);
+ }
+}, RemoveInterceptorProtocol);
+const interceptors = {};
+const API_ON = "$on";
+const OnProtocol = [
+ {
+ name: "event",
+ type: String,
+ required: true
+ },
+ {
+ name: "callback",
+ type: Function,
+ required: true
+ }
+];
+const API_ONCE = "$once";
+const OnceProtocol = OnProtocol;
+const API_OFF = "$off";
+const OffProtocol = [
+ {
+ name: "event",
+ type: [String, Array]
+ },
+ {
+ name: "callback",
+ type: [Function, Number]
+ }
+];
+const API_EMIT = "$emit";
+const EmitProtocol = [
+ {
+ name: "event",
+ type: String,
+ required: true
+ }
+];
+class EventBus {
+ constructor() {
+ this.$emitter = new E$1();
+ }
+ on(name, callback) {
+ return this.$emitter.on(name, callback);
+ }
+ once(name, callback) {
+ return this.$emitter.once(name, callback);
+ }
+ off(name, callback) {
+ if (!name) {
+ this.$emitter.e = {};
+ return;
+ }
+ this.$emitter.off(name, callback);
+ }
+ emit(name, ...args) {
+ this.$emitter.emit(name, ...args);
+ }
+}
+const eventBus = new EventBus();
+const $on = defineSyncApi(API_ON, (name, callback) => {
+ eventBus.on(name, callback);
+ return () => eventBus.off(name, callback);
+}, OnProtocol);
+const $once = defineSyncApi(API_ONCE, (name, callback) => {
+ eventBus.once(name, callback);
+ return () => eventBus.off(name, callback);
+}, OnceProtocol);
+const $off = defineSyncApi(API_OFF, (name, callback) => {
+ if (!isArray(name))
+ name = name ? [name] : [];
+ name.forEach((n2) => {
+ eventBus.off(n2, callback);
+ });
+}, OffProtocol);
+const $emit = defineSyncApi(API_EMIT, (name, ...args) => {
+ eventBus.emit(name, ...args);
+}, EmitProtocol);
+let cid;
+let cidErrMsg;
+let enabled;
+function normalizePushMessage(message) {
+ try {
+ return JSON.parse(message);
+ } catch (e2) {
+ }
+ return message;
+}
+function invokePushCallback(args) {
+ if (args.type === "enabled") {
+ enabled = true;
+ } else if (args.type === "clientId") {
+ cid = args.cid;
+ cidErrMsg = args.errMsg;
+ invokeGetPushCidCallbacks(cid, args.errMsg);
+ } else if (args.type === "pushMsg") {
+ const message = {
+ type: "receive",
+ data: normalizePushMessage(args.message)
+ };
+ for (let i = 0; i < onPushMessageCallbacks.length; i++) {
+ const callback = onPushMessageCallbacks[i];
+ callback(message);
+ if (message.stopped) {
+ break;
+ }
+ }
+ } else if (args.type === "click") {
+ onPushMessageCallbacks.forEach((callback) => {
+ callback({
+ type: "click",
+ data: normalizePushMessage(args.message)
+ });
+ });
+ }
+}
+const getPushCidCallbacks = [];
+function invokeGetPushCidCallbacks(cid2, errMsg) {
+ getPushCidCallbacks.forEach((callback) => {
+ callback(cid2, errMsg);
+ });
+ getPushCidCallbacks.length = 0;
+}
+const API_GET_PUSH_CLIENT_ID = "getPushClientId";
+const getPushClientId = defineAsyncApi(API_GET_PUSH_CLIENT_ID, (_, { resolve: resolve2, reject }) => {
+ Promise.resolve().then(() => {
+ if (typeof enabled === "undefined") {
+ enabled = false;
+ cid = "";
+ cidErrMsg = "uniPush is not enabled";
+ }
+ getPushCidCallbacks.push((cid2, errMsg) => {
+ if (cid2) {
+ resolve2({ cid: cid2 });
+ } else {
+ reject(errMsg);
+ }
+ });
+ if (typeof cid !== "undefined") {
+ invokeGetPushCidCallbacks(cid, cidErrMsg);
+ }
+ });
+});
+const onPushMessageCallbacks = [];
+const onPushMessage = (fn) => {
+ if (onPushMessageCallbacks.indexOf(fn) === -1) {
+ onPushMessageCallbacks.push(fn);
+ }
+};
+const offPushMessage = (fn) => {
+ if (!fn) {
+ onPushMessageCallbacks.length = 0;
+ } else {
+ const index2 = onPushMessageCallbacks.indexOf(fn);
+ if (index2 > -1) {
+ onPushMessageCallbacks.splice(index2, 1);
+ }
+ }
+};
+const SYNC_API_RE = /^\$|__f__|getLocale|setLocale|sendNativeEvent|restoreGlobal|requireGlobal|getCurrentSubNVue|getMenuButtonBoundingClientRect|^report|interceptors|Interceptor$|getSubNVueById|requireNativePlugin|upx2px|rpx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64|getDeviceInfo|getAppBaseInfo|getWindowInfo|getSystemSetting|getAppAuthorizeSetting/;
+const CONTEXT_API_RE = /^create|Manager$/;
+const CONTEXT_API_RE_EXC = ["createBLEConnection"];
+const TASK_APIS = ["request", "downloadFile", "uploadFile", "connectSocket"];
+const ASYNC_API = ["createBLEConnection"];
+const CALLBACK_API_RE = /^on|^off/;
+function isContextApi(name) {
+ return CONTEXT_API_RE.test(name) && CONTEXT_API_RE_EXC.indexOf(name) === -1;
+}
+function isSyncApi(name) {
+ return SYNC_API_RE.test(name) && ASYNC_API.indexOf(name) === -1;
+}
+function isCallbackApi(name) {
+ return CALLBACK_API_RE.test(name) && name !== "onPush";
+}
+function isTaskApi(name) {
+ return TASK_APIS.indexOf(name) !== -1;
+}
+function shouldPromise(name) {
+ if (isContextApi(name) || isSyncApi(name) || isCallbackApi(name)) {
+ return false;
+ }
+ return true;
+}
+if (!Promise.prototype.finally) {
+ Promise.prototype.finally = function(onfinally) {
+ const promise = this.constructor;
+ return this.then((value) => promise.resolve(onfinally && onfinally()).then(() => value), (reason) => promise.resolve(onfinally && onfinally()).then(() => {
+ throw reason;
+ }));
+ };
+}
+function promisify(name, api) {
+ if (!shouldPromise(name)) {
+ return api;
+ }
+ if (!isFunction(api)) {
+ return api;
+ }
+ return function promiseApi(options = {}, ...rest) {
+ if (isFunction(options.success) || isFunction(options.fail) || isFunction(options.complete)) {
+ return wrapperReturnValue(name, invokeApi(name, api, options, rest));
+ }
+ return wrapperReturnValue(name, handlePromise(new Promise((resolve2, reject) => {
+ invokeApi(name, api, extend({}, options, {
+ success: resolve2,
+ fail: reject
+ }), rest);
+ })));
+ };
+}
+const CALLBACKS = ["success", "fail", "cancel", "complete"];
+function initWrapper(protocols2) {
+ function processCallback(methodName, method, returnValue) {
+ return function(res) {
+ return method(processReturnValue(methodName, res, returnValue));
+ };
+ }
+ function processArgs(methodName, fromArgs, argsOption = {}, returnValue = {}, keepFromArgs = false) {
+ if (isPlainObject(fromArgs)) {
+ const toArgs = keepFromArgs === true ? fromArgs : {};
+ if (isFunction(argsOption)) {
+ argsOption = argsOption(fromArgs, toArgs) || {};
+ }
+ for (const key in fromArgs) {
+ if (hasOwn(argsOption, key)) {
+ let keyOption = argsOption[key];
+ if (isFunction(keyOption)) {
+ keyOption = keyOption(fromArgs[key], fromArgs, toArgs);
+ }
+ if (!keyOption) {
+ console.warn(`微信小程序 ${methodName} 暂不支持 ${key}`);
+ } else if (isString(keyOption)) {
+ toArgs[keyOption] = fromArgs[key];
+ } else if (isPlainObject(keyOption)) {
+ toArgs[keyOption.name ? keyOption.name : key] = keyOption.value;
+ }
+ } else if (CALLBACKS.indexOf(key) !== -1) {
+ const callback = fromArgs[key];
+ if (isFunction(callback)) {
+ toArgs[key] = processCallback(methodName, callback, returnValue);
+ }
+ } else {
+ if (!keepFromArgs && !hasOwn(toArgs, key)) {
+ toArgs[key] = fromArgs[key];
+ }
+ }
+ }
+ return toArgs;
+ } else if (isFunction(fromArgs)) {
+ if (isFunction(argsOption)) {
+ argsOption(fromArgs, {});
+ }
+ fromArgs = processCallback(methodName, fromArgs, returnValue);
+ }
+ return fromArgs;
+ }
+ function processReturnValue(methodName, res, returnValue, keepReturnValue = false) {
+ if (isFunction(protocols2.returnValue)) {
+ res = protocols2.returnValue(methodName, res);
+ }
+ const realKeepReturnValue = keepReturnValue || false;
+ return processArgs(methodName, res, returnValue, {}, realKeepReturnValue);
+ }
+ return function wrapper(methodName, method) {
+ const hasProtocol = hasOwn(protocols2, methodName);
+ if (!hasProtocol && typeof wx[methodName] !== "function") {
+ return method;
+ }
+ const needWrapper = hasProtocol || isFunction(protocols2.returnValue) || isContextApi(methodName) || isTaskApi(methodName);
+ const hasMethod = hasProtocol || isFunction(method);
+ if (!hasProtocol && !method) {
+ return function() {
+ console.error(`微信小程序 暂不支持${methodName}`);
+ };
+ }
+ if (!needWrapper || !hasMethod) {
+ return method;
+ }
+ const protocol = protocols2[methodName];
+ return function(arg1, arg2) {
+ let options = protocol || {};
+ if (isFunction(protocol)) {
+ options = protocol(arg1);
+ }
+ arg1 = processArgs(methodName, arg1, options.args, options.returnValue);
+ const args = [arg1];
+ if (typeof arg2 !== "undefined") {
+ args.push(arg2);
+ }
+ const returnValue = wx[options.name || methodName].apply(wx, args);
+ if (isContextApi(methodName) || isTaskApi(methodName)) {
+ if (returnValue && !returnValue.__v_skip) {
+ returnValue.__v_skip = true;
+ }
+ }
+ if (isSyncApi(methodName)) {
+ return processReturnValue(methodName, returnValue, options.returnValue, isContextApi(methodName));
+ }
+ return returnValue;
+ };
+ };
+}
+const getLocale = () => {
+ const app = isFunction(getApp) && getApp({ allowDefault: true });
+ if (app && app.$vm) {
+ return app.$vm.$locale;
+ }
+ return getLocaleLanguage$1();
+};
+const setLocale = (locale) => {
+ const app = isFunction(getApp) && getApp();
+ if (!app) {
+ return false;
+ }
+ const oldLocale = app.$vm.$locale;
+ if (oldLocale !== locale) {
+ app.$vm.$locale = locale;
+ onLocaleChangeCallbacks.forEach((fn) => fn({ locale }));
+ return true;
+ }
+ return false;
+};
+const onLocaleChangeCallbacks = [];
+const onLocaleChange = (fn) => {
+ if (onLocaleChangeCallbacks.indexOf(fn) === -1) {
+ onLocaleChangeCallbacks.push(fn);
+ }
+};
+if (typeof global !== "undefined") {
+ global.getLocale = getLocale;
+}
+const UUID_KEY = "__DC_STAT_UUID";
+let deviceId;
+function useDeviceId(global2 = wx) {
+ return function addDeviceId(_, toRes) {
+ deviceId = deviceId || global2.getStorageSync(UUID_KEY);
+ if (!deviceId) {
+ deviceId = Date.now() + "" + Math.floor(Math.random() * 1e7);
+ wx.setStorage({
+ key: UUID_KEY,
+ data: deviceId
+ });
+ }
+ toRes.deviceId = deviceId;
+ };
+}
+function addSafeAreaInsets(fromRes, toRes) {
+ if (fromRes.safeArea) {
+ const safeArea = fromRes.safeArea;
+ toRes.safeAreaInsets = {
+ top: safeArea.top,
+ left: safeArea.left,
+ right: fromRes.windowWidth - safeArea.right,
+ bottom: fromRes.screenHeight - safeArea.bottom
+ };
+ }
+}
+function getOSInfo(system, platform) {
+ let osName = "";
+ let osVersion = "";
+ if (platform && false) {
+ osName = platform;
+ osVersion = system;
+ } else {
+ osName = system.split(" ")[0] || platform;
+ osVersion = system.split(" ")[1] || "";
+ }
+ osName = osName.toLocaleLowerCase();
+ switch (osName) {
+ case "harmony":
+ case "ohos":
+ case "openharmony":
+ osName = "harmonyos";
+ break;
+ case "iphone os":
+ osName = "ios";
+ break;
+ case "mac":
+ case "darwin":
+ osName = "macos";
+ break;
+ case "windows_nt":
+ osName = "windows";
+ break;
+ }
+ return {
+ osName,
+ osVersion
+ };
+}
+function populateParameters(fromRes, toRes) {
+ const { brand = "", model = "", system = "", language = "", theme, version: version2, platform, fontSizeSetting, SDKVersion, pixelRatio, deviceOrientation } = fromRes;
+ const { osName, osVersion } = getOSInfo(system, platform);
+ let hostVersion = version2;
+ let deviceType = getGetDeviceType(fromRes, model);
+ let deviceBrand = getDeviceBrand(brand);
+ let _hostName = getHostName(fromRes);
+ let _deviceOrientation = deviceOrientation;
+ let _devicePixelRatio = pixelRatio;
+ let _SDKVersion = SDKVersion;
+ const hostLanguage = (language || "").replace(/_/g, "-");
+ const parameters = {
+ appId: "",
+ appName: "宠伴生活馆",
+ appVersion: "1.0.0",
+ appVersionCode: "100",
+ appLanguage: getAppLanguage(hostLanguage),
+ uniCompileVersion: "4.66",
+ uniCompilerVersion: "4.66",
+ uniRuntimeVersion: "4.66",
+ uniPlatform: "mp-weixin",
+ deviceBrand,
+ deviceModel: model,
+ deviceType,
+ devicePixelRatio: _devicePixelRatio,
+ deviceOrientation: _deviceOrientation,
+ osName,
+ osVersion,
+ hostTheme: theme,
+ hostVersion,
+ hostLanguage,
+ hostName: _hostName,
+ hostSDKVersion: _SDKVersion,
+ hostFontSizeSetting: fontSizeSetting,
+ windowTop: 0,
+ windowBottom: 0,
+ // TODO
+ osLanguage: void 0,
+ osTheme: void 0,
+ ua: void 0,
+ hostPackageName: void 0,
+ browserName: void 0,
+ browserVersion: void 0,
+ isUniAppX: false
+ };
+ extend(toRes, parameters);
+}
+function getGetDeviceType(fromRes, model) {
+ let deviceType = fromRes.deviceType || "phone";
+ {
+ const deviceTypeMaps = {
+ ipad: "pad",
+ windows: "pc",
+ mac: "pc"
+ };
+ const deviceTypeMapsKeys = Object.keys(deviceTypeMaps);
+ const _model = model.toLocaleLowerCase();
+ for (let index2 = 0; index2 < deviceTypeMapsKeys.length; index2++) {
+ const _m = deviceTypeMapsKeys[index2];
+ if (_model.indexOf(_m) !== -1) {
+ deviceType = deviceTypeMaps[_m];
+ break;
+ }
+ }
+ }
+ return deviceType;
+}
+function getDeviceBrand(brand) {
+ let deviceBrand = brand;
+ if (deviceBrand) {
+ deviceBrand = deviceBrand.toLocaleLowerCase();
+ }
+ return deviceBrand;
+}
+function getAppLanguage(defaultLanguage) {
+ return getLocale ? getLocale() : defaultLanguage;
+}
+function getHostName(fromRes) {
+ const _platform = "WeChat";
+ let _hostName = fromRes.hostName || _platform;
+ {
+ if (fromRes.environment) {
+ _hostName = fromRes.environment;
+ } else if (fromRes.host && fromRes.host.env) {
+ _hostName = fromRes.host.env;
+ }
+ }
+ return _hostName;
+}
+const getSystemInfo = {
+ returnValue: (fromRes, toRes) => {
+ addSafeAreaInsets(fromRes, toRes);
+ useDeviceId()(fromRes, toRes);
+ populateParameters(fromRes, toRes);
+ }
+};
+const getSystemInfoSync = getSystemInfo;
+const redirectTo = {};
+const previewImage = {
+ args(fromArgs, toArgs) {
+ let currentIndex = parseInt(fromArgs.current);
+ if (isNaN(currentIndex)) {
+ return;
+ }
+ const urls = fromArgs.urls;
+ if (!isArray(urls)) {
+ return;
+ }
+ const len = urls.length;
+ if (!len) {
+ return;
+ }
+ if (currentIndex < 0) {
+ currentIndex = 0;
+ } else if (currentIndex >= len) {
+ currentIndex = len - 1;
+ }
+ if (currentIndex > 0) {
+ toArgs.current = urls[currentIndex];
+ toArgs.urls = urls.filter((item, index2) => index2 < currentIndex ? item !== urls[currentIndex] : true);
+ } else {
+ toArgs.current = urls[0];
+ }
+ return {
+ indicator: false,
+ loop: false
+ };
+ }
+};
+const showActionSheet = {
+ args(fromArgs, toArgs) {
+ toArgs.alertText = fromArgs.title;
+ }
+};
+const getDeviceInfo = {
+ returnValue: (fromRes, toRes) => {
+ const { brand, model, system = "", platform = "" } = fromRes;
+ let deviceType = getGetDeviceType(fromRes, model);
+ let deviceBrand = getDeviceBrand(brand);
+ useDeviceId()(fromRes, toRes);
+ const { osName, osVersion } = getOSInfo(system, platform);
+ toRes = sortObject(extend(toRes, {
+ deviceType,
+ deviceBrand,
+ deviceModel: model,
+ osName,
+ osVersion
+ }));
+ }
+};
+const getAppBaseInfo = {
+ returnValue: (fromRes, toRes) => {
+ const { version: version2, language, SDKVersion, theme } = fromRes;
+ let _hostName = getHostName(fromRes);
+ let hostLanguage = (language || "").replace(/_/g, "-");
+ const parameters = {
+ hostVersion: version2,
+ hostLanguage,
+ hostName: _hostName,
+ hostSDKVersion: SDKVersion,
+ hostTheme: theme,
+ appId: "",
+ appName: "宠伴生活馆",
+ appVersion: "1.0.0",
+ appVersionCode: "100",
+ appLanguage: getAppLanguage(hostLanguage),
+ isUniAppX: false,
+ uniPlatform: "mp-weixin",
+ uniCompileVersion: "4.66",
+ uniCompilerVersion: "4.66",
+ uniRuntimeVersion: "4.66"
+ };
+ extend(toRes, parameters);
+ }
+};
+const getWindowInfo = {
+ returnValue: (fromRes, toRes) => {
+ addSafeAreaInsets(fromRes, toRes);
+ toRes = sortObject(extend(toRes, {
+ windowTop: 0,
+ windowBottom: 0
+ }));
+ }
+};
+const getAppAuthorizeSetting = {
+ returnValue: function(fromRes, toRes) {
+ const { locationReducedAccuracy } = fromRes;
+ toRes.locationAccuracy = "unsupported";
+ if (locationReducedAccuracy === true) {
+ toRes.locationAccuracy = "reduced";
+ } else if (locationReducedAccuracy === false) {
+ toRes.locationAccuracy = "full";
+ }
+ }
+};
+const onError = {
+ args(fromArgs) {
+ const app = getApp({ allowDefault: true }) || {};
+ if (!app.$vm) {
+ if (!wx.$onErrorHandlers) {
+ wx.$onErrorHandlers = [];
+ }
+ wx.$onErrorHandlers.push(fromArgs);
+ } else {
+ injectHook(ON_ERROR, fromArgs, app.$vm.$);
+ }
+ }
+};
+const offError = {
+ args(fromArgs) {
+ const app = getApp({ allowDefault: true }) || {};
+ if (!app.$vm) {
+ if (!wx.$onErrorHandlers) {
+ return;
+ }
+ const index2 = wx.$onErrorHandlers.findIndex((fn) => fn === fromArgs);
+ if (index2 !== -1) {
+ wx.$onErrorHandlers.splice(index2, 1);
+ }
+ } else if (fromArgs.__weh) {
+ const onErrors = app.$vm.$[ON_ERROR];
+ if (onErrors) {
+ const index2 = onErrors.indexOf(fromArgs.__weh);
+ if (index2 > -1) {
+ onErrors.splice(index2, 1);
+ }
+ }
+ }
+ }
+};
+const onSocketOpen = {
+ args() {
+ if (wx.__uni_console__) {
+ if (wx.__uni_console_warned__) {
+ return;
+ }
+ wx.__uni_console_warned__ = true;
+ console.warn(`开发模式下小程序日志回显会使用 socket 连接,为了避免冲突,建议使用 SocketTask 的方式去管理 WebSocket 或手动关闭日志回显功能。[详情](https://uniapp.dcloud.net.cn/tutorial/run/mp-log.html)`);
+ }
+ }
+};
+const onSocketMessage = onSocketOpen;
+const baseApis = {
+ $on,
+ $off,
+ $once,
+ $emit,
+ upx2px,
+ rpx2px: upx2px,
+ interceptors,
+ addInterceptor,
+ removeInterceptor,
+ onCreateVueApp,
+ invokeCreateVueAppHook,
+ getLocale,
+ setLocale,
+ onLocaleChange,
+ getPushClientId,
+ onPushMessage,
+ offPushMessage,
+ invokePushCallback,
+ __f__
+};
+function initUni(api, protocols2, platform = wx) {
+ const wrapper = initWrapper(protocols2);
+ const UniProxyHandlers = {
+ get(target, key) {
+ if (hasOwn(target, key)) {
+ return target[key];
+ }
+ if (hasOwn(api, key)) {
+ return promisify(key, api[key]);
+ }
+ if (hasOwn(baseApis, key)) {
+ return promisify(key, baseApis[key]);
+ }
+ return promisify(key, wrapper(key, platform[key]));
+ }
+ };
+ return new Proxy({}, UniProxyHandlers);
+}
+function initGetProvider(providers) {
+ return function getProvider2({ service, success, fail, complete }) {
+ let res;
+ if (providers[service]) {
+ res = {
+ errMsg: "getProvider:ok",
+ service,
+ provider: providers[service]
+ };
+ isFunction(success) && success(res);
+ } else {
+ res = {
+ errMsg: "getProvider:fail:服务[" + service + "]不存在"
+ };
+ isFunction(fail) && fail(res);
+ }
+ isFunction(complete) && complete(res);
+ };
+}
+const objectKeys = [
+ "qy",
+ "env",
+ "error",
+ "version",
+ "lanDebug",
+ "cloud",
+ "serviceMarket",
+ "router",
+ "worklet",
+ "__webpack_require_UNI_MP_PLUGIN__"
+];
+const singlePageDisableKey = ["lanDebug", "router", "worklet"];
+const launchOption = wx.getLaunchOptionsSync ? wx.getLaunchOptionsSync() : null;
+function isWxKey(key) {
+ if (launchOption && launchOption.scene === 1154 && singlePageDisableKey.includes(key)) {
+ return false;
+ }
+ return objectKeys.indexOf(key) > -1 || typeof wx[key] === "function";
+}
+function initWx() {
+ const newWx = {};
+ for (const key in wx) {
+ if (isWxKey(key)) {
+ newWx[key] = wx[key];
+ }
+ }
+ if (typeof globalThis !== "undefined" && typeof requireMiniProgram === "undefined") {
+ globalThis.wx = newWx;
+ }
+ return newWx;
+}
+const mocks$1 = ["__route__", "__wxExparserNodeId__", "__wxWebviewId__"];
+const getProvider = initGetProvider({
+ oauth: ["weixin"],
+ share: ["weixin"],
+ payment: ["wxpay"],
+ push: ["weixin"]
+});
+function initComponentMocks(component) {
+ const res = /* @__PURE__ */ Object.create(null);
+ mocks$1.forEach((name) => {
+ res[name] = component[name];
+ });
+ return res;
+}
+function createSelectorQuery() {
+ const query = wx$2.createSelectorQuery();
+ const oldIn = query.in;
+ query.in = function newIn(component) {
+ if (component.$scope) {
+ return oldIn.call(this, component.$scope);
+ }
+ return oldIn.call(this, initComponentMocks(component));
+ };
+ return query;
+}
+const wx$2 = initWx();
+if (!wx$2.canIUse("getAppBaseInfo")) {
+ wx$2.getAppBaseInfo = wx$2.getSystemInfoSync;
+}
+if (!wx$2.canIUse("getWindowInfo")) {
+ wx$2.getWindowInfo = wx$2.getSystemInfoSync;
+}
+if (!wx$2.canIUse("getDeviceInfo")) {
+ wx$2.getDeviceInfo = wx$2.getSystemInfoSync;
+}
+let baseInfo = wx$2.getAppBaseInfo && wx$2.getAppBaseInfo();
+if (!baseInfo) {
+ baseInfo = wx$2.getSystemInfoSync();
+}
+const host = baseInfo ? baseInfo.host : null;
+const shareVideoMessage = host && host.env === "SAAASDK" ? wx$2.miniapp.shareVideoMessage : wx$2.shareVideoMessage;
+var shims = /* @__PURE__ */ Object.freeze({
+ __proto__: null,
+ createSelectorQuery,
+ getProvider,
+ shareVideoMessage
+});
+const compressImage = {
+ args(fromArgs, toArgs) {
+ if (fromArgs.compressedHeight && !toArgs.compressHeight) {
+ toArgs.compressHeight = fromArgs.compressedHeight;
+ }
+ if (fromArgs.compressedWidth && !toArgs.compressWidth) {
+ toArgs.compressWidth = fromArgs.compressedWidth;
+ }
+ }
+};
+var protocols = /* @__PURE__ */ Object.freeze({
+ __proto__: null,
+ compressImage,
+ getAppAuthorizeSetting,
+ getAppBaseInfo,
+ getDeviceInfo,
+ getSystemInfo,
+ getSystemInfoSync,
+ getWindowInfo,
+ offError,
+ onError,
+ onSocketMessage,
+ onSocketOpen,
+ previewImage,
+ redirectTo,
+ showActionSheet
+});
+const wx$1 = initWx();
+var index = initUni(shims, protocols, wx$1);
+/**
+* @dcloudio/uni-mp-vue v3.4.21
+* (c) 2018-present Yuxi (Evan) You and Vue contributors
+* @license MIT
+**/
+function warn$2(msg, ...args) {
+ console.warn(`[Vue warn] ${msg}`, ...args);
+}
+let activeEffectScope;
+class EffectScope {
+ constructor(detached = false) {
+ this.detached = detached;
+ this._active = true;
+ this.effects = [];
+ this.cleanups = [];
+ this.parent = activeEffectScope;
+ if (!detached && activeEffectScope) {
+ this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(
+ this
+ ) - 1;
+ }
+ }
+ get active() {
+ return this._active;
+ }
+ run(fn) {
+ if (this._active) {
+ const currentEffectScope = activeEffectScope;
+ try {
+ activeEffectScope = this;
+ return fn();
+ } finally {
+ activeEffectScope = currentEffectScope;
+ }
+ } else {
+ warn$2(`cannot run an inactive effect scope.`);
+ }
+ }
+ /**
+ * This should only be called on non-detached scopes
+ * @internal
+ */
+ on() {
+ activeEffectScope = this;
+ }
+ /**
+ * This should only be called on non-detached scopes
+ * @internal
+ */
+ off() {
+ activeEffectScope = this.parent;
+ }
+ stop(fromParent) {
+ if (this._active) {
+ let i, l;
+ for (i = 0, l = this.effects.length; i < l; i++) {
+ this.effects[i].stop();
+ }
+ for (i = 0, l = this.cleanups.length; i < l; i++) {
+ this.cleanups[i]();
+ }
+ if (this.scopes) {
+ for (i = 0, l = this.scopes.length; i < l; i++) {
+ this.scopes[i].stop(true);
+ }
+ }
+ if (!this.detached && this.parent && !fromParent) {
+ const last = this.parent.scopes.pop();
+ if (last && last !== this) {
+ this.parent.scopes[this.index] = last;
+ last.index = this.index;
+ }
+ }
+ this.parent = void 0;
+ this._active = false;
+ }
+ }
+}
+function recordEffectScope(effect2, scope = activeEffectScope) {
+ if (scope && scope.active) {
+ scope.effects.push(effect2);
+ }
+}
+function getCurrentScope() {
+ return activeEffectScope;
+}
+let activeEffect;
+class ReactiveEffect {
+ constructor(fn, trigger2, scheduler, scope) {
+ this.fn = fn;
+ this.trigger = trigger2;
+ this.scheduler = scheduler;
+ this.active = true;
+ this.deps = [];
+ this._dirtyLevel = 4;
+ this._trackId = 0;
+ this._runnings = 0;
+ this._shouldSchedule = false;
+ this._depsLength = 0;
+ recordEffectScope(this, scope);
+ }
+ get dirty() {
+ if (this._dirtyLevel === 2 || this._dirtyLevel === 3) {
+ this._dirtyLevel = 1;
+ pauseTracking();
+ for (let i = 0; i < this._depsLength; i++) {
+ const dep = this.deps[i];
+ if (dep.computed) {
+ triggerComputed(dep.computed);
+ if (this._dirtyLevel >= 4) {
+ break;
+ }
+ }
+ }
+ if (this._dirtyLevel === 1) {
+ this._dirtyLevel = 0;
+ }
+ resetTracking();
+ }
+ return this._dirtyLevel >= 4;
+ }
+ set dirty(v) {
+ this._dirtyLevel = v ? 4 : 0;
+ }
+ run() {
+ this._dirtyLevel = 0;
+ if (!this.active) {
+ return this.fn();
+ }
+ let lastShouldTrack = shouldTrack;
+ let lastEffect = activeEffect;
+ try {
+ shouldTrack = true;
+ activeEffect = this;
+ this._runnings++;
+ preCleanupEffect(this);
+ return this.fn();
+ } finally {
+ postCleanupEffect(this);
+ this._runnings--;
+ activeEffect = lastEffect;
+ shouldTrack = lastShouldTrack;
+ }
+ }
+ stop() {
+ var _a;
+ if (this.active) {
+ preCleanupEffect(this);
+ postCleanupEffect(this);
+ (_a = this.onStop) == null ? void 0 : _a.call(this);
+ this.active = false;
+ }
+ }
+}
+function triggerComputed(computed2) {
+ return computed2.value;
+}
+function preCleanupEffect(effect2) {
+ effect2._trackId++;
+ effect2._depsLength = 0;
+}
+function postCleanupEffect(effect2) {
+ if (effect2.deps.length > effect2._depsLength) {
+ for (let i = effect2._depsLength; i < effect2.deps.length; i++) {
+ cleanupDepEffect(effect2.deps[i], effect2);
+ }
+ effect2.deps.length = effect2._depsLength;
+ }
+}
+function cleanupDepEffect(dep, effect2) {
+ const trackId = dep.get(effect2);
+ if (trackId !== void 0 && effect2._trackId !== trackId) {
+ dep.delete(effect2);
+ if (dep.size === 0) {
+ dep.cleanup();
+ }
+ }
+}
+let shouldTrack = true;
+let pauseScheduleStack = 0;
+const trackStack = [];
+function pauseTracking() {
+ trackStack.push(shouldTrack);
+ shouldTrack = false;
+}
+function resetTracking() {
+ const last = trackStack.pop();
+ shouldTrack = last === void 0 ? true : last;
+}
+function pauseScheduling() {
+ pauseScheduleStack++;
+}
+function resetScheduling() {
+ pauseScheduleStack--;
+ while (!pauseScheduleStack && queueEffectSchedulers.length) {
+ queueEffectSchedulers.shift()();
+ }
+}
+function trackEffect(effect2, dep, debuggerEventExtraInfo) {
+ var _a;
+ if (dep.get(effect2) !== effect2._trackId) {
+ dep.set(effect2, effect2._trackId);
+ const oldDep = effect2.deps[effect2._depsLength];
+ if (oldDep !== dep) {
+ if (oldDep) {
+ cleanupDepEffect(oldDep, effect2);
+ }
+ effect2.deps[effect2._depsLength++] = dep;
+ } else {
+ effect2._depsLength++;
+ }
+ {
+ (_a = effect2.onTrack) == null ? void 0 : _a.call(effect2, extend({ effect: effect2 }, debuggerEventExtraInfo));
+ }
+ }
+}
+const queueEffectSchedulers = [];
+function triggerEffects(dep, dirtyLevel, debuggerEventExtraInfo) {
+ var _a;
+ pauseScheduling();
+ for (const effect2 of dep.keys()) {
+ let tracking;
+ if (effect2._dirtyLevel < dirtyLevel && (tracking != null ? tracking : tracking = dep.get(effect2) === effect2._trackId)) {
+ effect2._shouldSchedule || (effect2._shouldSchedule = effect2._dirtyLevel === 0);
+ effect2._dirtyLevel = dirtyLevel;
+ }
+ if (effect2._shouldSchedule && (tracking != null ? tracking : tracking = dep.get(effect2) === effect2._trackId)) {
+ {
+ (_a = effect2.onTrigger) == null ? void 0 : _a.call(effect2, extend({ effect: effect2 }, debuggerEventExtraInfo));
+ }
+ effect2.trigger();
+ if ((!effect2._runnings || effect2.allowRecurse) && effect2._dirtyLevel !== 2) {
+ effect2._shouldSchedule = false;
+ if (effect2.scheduler) {
+ queueEffectSchedulers.push(effect2.scheduler);
+ }
+ }
+ }
+ }
+ resetScheduling();
+}
+const createDep = (cleanup, computed2) => {
+ const dep = /* @__PURE__ */ new Map();
+ dep.cleanup = cleanup;
+ dep.computed = computed2;
+ return dep;
+};
+const targetMap = /* @__PURE__ */ new WeakMap();
+const ITERATE_KEY = Symbol("iterate");
+const MAP_KEY_ITERATE_KEY = Symbol("Map key iterate");
+function track(target, type, key) {
+ if (shouldTrack && activeEffect) {
+ let depsMap = targetMap.get(target);
+ if (!depsMap) {
+ targetMap.set(target, depsMap = /* @__PURE__ */ new Map());
+ }
+ let dep = depsMap.get(key);
+ if (!dep) {
+ depsMap.set(key, dep = createDep(() => depsMap.delete(key)));
+ }
+ trackEffect(
+ activeEffect,
+ dep,
+ {
+ target,
+ type,
+ key
+ }
+ );
+ }
+}
+function trigger(target, type, key, newValue, oldValue, oldTarget) {
+ const depsMap = targetMap.get(target);
+ if (!depsMap) {
+ return;
+ }
+ let deps = [];
+ if (type === "clear") {
+ deps = [...depsMap.values()];
+ } else if (key === "length" && isArray(target)) {
+ const newLength = Number(newValue);
+ depsMap.forEach((dep, key2) => {
+ if (key2 === "length" || !isSymbol(key2) && key2 >= newLength) {
+ deps.push(dep);
+ }
+ });
+ } else {
+ if (key !== void 0) {
+ deps.push(depsMap.get(key));
+ }
+ switch (type) {
+ case "add":
+ if (!isArray(target)) {
+ deps.push(depsMap.get(ITERATE_KEY));
+ if (isMap(target)) {
+ deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));
+ }
+ } else if (isIntegerKey(key)) {
+ deps.push(depsMap.get("length"));
+ }
+ break;
+ case "delete":
+ if (!isArray(target)) {
+ deps.push(depsMap.get(ITERATE_KEY));
+ if (isMap(target)) {
+ deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));
+ }
+ }
+ break;
+ case "set":
+ if (isMap(target)) {
+ deps.push(depsMap.get(ITERATE_KEY));
+ }
+ break;
+ }
+ }
+ pauseScheduling();
+ for (const dep of deps) {
+ if (dep) {
+ triggerEffects(
+ dep,
+ 4,
+ {
+ target,
+ type,
+ key,
+ newValue,
+ oldValue,
+ oldTarget
+ }
+ );
+ }
+ }
+ resetScheduling();
+}
+const isNonTrackableKeys = /* @__PURE__ */ makeMap(`__proto__,__v_isRef,__isVue`);
+const builtInSymbols = new Set(
+ /* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((key) => key !== "arguments" && key !== "caller").map((key) => Symbol[key]).filter(isSymbol)
+);
+const arrayInstrumentations = /* @__PURE__ */ createArrayInstrumentations();
+function createArrayInstrumentations() {
+ const instrumentations = {};
+ ["includes", "indexOf", "lastIndexOf"].forEach((key) => {
+ instrumentations[key] = function(...args) {
+ const arr = toRaw(this);
+ for (let i = 0, l = this.length; i < l; i++) {
+ track(arr, "get", i + "");
+ }
+ const res = arr[key](...args);
+ if (res === -1 || res === false) {
+ return arr[key](...args.map(toRaw));
+ } else {
+ return res;
+ }
+ };
+ });
+ ["push", "pop", "shift", "unshift", "splice"].forEach((key) => {
+ instrumentations[key] = function(...args) {
+ pauseTracking();
+ pauseScheduling();
+ const res = toRaw(this)[key].apply(this, args);
+ resetScheduling();
+ resetTracking();
+ return res;
+ };
+ });
+ return instrumentations;
+}
+function hasOwnProperty(key) {
+ const obj = toRaw(this);
+ track(obj, "has", key);
+ return obj.hasOwnProperty(key);
+}
+class BaseReactiveHandler {
+ constructor(_isReadonly = false, _isShallow = false) {
+ this._isReadonly = _isReadonly;
+ this._isShallow = _isShallow;
+ }
+ get(target, key, receiver) {
+ const isReadonly2 = this._isReadonly, isShallow2 = this._isShallow;
+ if (key === "__v_isReactive") {
+ return !isReadonly2;
+ } else if (key === "__v_isReadonly") {
+ return isReadonly2;
+ } else if (key === "__v_isShallow") {
+ return isShallow2;
+ } else if (key === "__v_raw") {
+ if (receiver === (isReadonly2 ? isShallow2 ? shallowReadonlyMap : readonlyMap : isShallow2 ? shallowReactiveMap : reactiveMap).get(target) || // receiver is not the reactive proxy, but has the same prototype
+ // this means the reciever is a user proxy of the reactive proxy
+ Object.getPrototypeOf(target) === Object.getPrototypeOf(receiver)) {
+ return target;
+ }
+ return;
+ }
+ const targetIsArray = isArray(target);
+ if (!isReadonly2) {
+ if (targetIsArray && hasOwn(arrayInstrumentations, key)) {
+ return Reflect.get(arrayInstrumentations, key, receiver);
+ }
+ if (key === "hasOwnProperty") {
+ return hasOwnProperty;
+ }
+ }
+ const res = Reflect.get(target, key, receiver);
+ if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {
+ return res;
+ }
+ if (!isReadonly2) {
+ track(target, "get", key);
+ }
+ if (isShallow2) {
+ return res;
+ }
+ if (isRef(res)) {
+ return targetIsArray && isIntegerKey(key) ? res : res.value;
+ }
+ if (isObject(res)) {
+ return isReadonly2 ? readonly(res) : reactive(res);
+ }
+ return res;
+ }
+}
+class MutableReactiveHandler extends BaseReactiveHandler {
+ constructor(isShallow2 = false) {
+ super(false, isShallow2);
+ }
+ set(target, key, value, receiver) {
+ let oldValue = target[key];
+ if (!this._isShallow) {
+ const isOldValueReadonly = isReadonly(oldValue);
+ if (!isShallow(value) && !isReadonly(value)) {
+ oldValue = toRaw(oldValue);
+ value = toRaw(value);
+ }
+ if (!isArray(target) && isRef(oldValue) && !isRef(value)) {
+ if (isOldValueReadonly) {
+ return false;
+ } else {
+ oldValue.value = value;
+ return true;
+ }
+ }
+ }
+ const hadKey = isArray(target) && isIntegerKey(key) ? Number(key) < target.length : hasOwn(target, key);
+ const result = Reflect.set(target, key, value, receiver);
+ if (target === toRaw(receiver)) {
+ if (!hadKey) {
+ trigger(target, "add", key, value);
+ } else if (hasChanged(value, oldValue)) {
+ trigger(target, "set", key, value, oldValue);
+ }
+ }
+ return result;
+ }
+ deleteProperty(target, key) {
+ const hadKey = hasOwn(target, key);
+ const oldValue = target[key];
+ const result = Reflect.deleteProperty(target, key);
+ if (result && hadKey) {
+ trigger(target, "delete", key, void 0, oldValue);
+ }
+ return result;
+ }
+ has(target, key) {
+ const result = Reflect.has(target, key);
+ if (!isSymbol(key) || !builtInSymbols.has(key)) {
+ track(target, "has", key);
+ }
+ return result;
+ }
+ ownKeys(target) {
+ track(
+ target,
+ "iterate",
+ isArray(target) ? "length" : ITERATE_KEY
+ );
+ return Reflect.ownKeys(target);
+ }
+}
+class ReadonlyReactiveHandler extends BaseReactiveHandler {
+ constructor(isShallow2 = false) {
+ super(true, isShallow2);
+ }
+ set(target, key) {
+ {
+ warn$2(
+ `Set operation on key "${String(key)}" failed: target is readonly.`,
+ target
+ );
+ }
+ return true;
+ }
+ deleteProperty(target, key) {
+ {
+ warn$2(
+ `Delete operation on key "${String(key)}" failed: target is readonly.`,
+ target
+ );
+ }
+ return true;
+ }
+}
+const mutableHandlers = /* @__PURE__ */ new MutableReactiveHandler();
+const readonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler();
+const shallowReactiveHandlers = /* @__PURE__ */ new MutableReactiveHandler(
+ true
+);
+const shallowReadonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler(true);
+const toShallow = (value) => value;
+const getProto = (v) => Reflect.getPrototypeOf(v);
+function get(target, key, isReadonly2 = false, isShallow2 = false) {
+ target = target["__v_raw"];
+ const rawTarget = toRaw(target);
+ const rawKey = toRaw(key);
+ if (!isReadonly2) {
+ if (hasChanged(key, rawKey)) {
+ track(rawTarget, "get", key);
+ }
+ track(rawTarget, "get", rawKey);
+ }
+ const { has: has2 } = getProto(rawTarget);
+ const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive;
+ if (has2.call(rawTarget, key)) {
+ return wrap(target.get(key));
+ } else if (has2.call(rawTarget, rawKey)) {
+ return wrap(target.get(rawKey));
+ } else if (target !== rawTarget) {
+ target.get(key);
+ }
+}
+function has(key, isReadonly2 = false) {
+ const target = this["__v_raw"];
+ const rawTarget = toRaw(target);
+ const rawKey = toRaw(key);
+ if (!isReadonly2) {
+ if (hasChanged(key, rawKey)) {
+ track(rawTarget, "has", key);
+ }
+ track(rawTarget, "has", rawKey);
+ }
+ return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey);
+}
+function size(target, isReadonly2 = false) {
+ target = target["__v_raw"];
+ !isReadonly2 && track(toRaw(target), "iterate", ITERATE_KEY);
+ return Reflect.get(target, "size", target);
+}
+function add(value) {
+ value = toRaw(value);
+ const target = toRaw(this);
+ const proto = getProto(target);
+ const hadKey = proto.has.call(target, value);
+ if (!hadKey) {
+ target.add(value);
+ trigger(target, "add", value, value);
+ }
+ return this;
+}
+function set$1(key, value) {
+ value = toRaw(value);
+ const target = toRaw(this);
+ const { has: has2, get: get2 } = getProto(target);
+ let hadKey = has2.call(target, key);
+ if (!hadKey) {
+ key = toRaw(key);
+ hadKey = has2.call(target, key);
+ } else {
+ checkIdentityKeys(target, has2, key);
+ }
+ const oldValue = get2.call(target, key);
+ target.set(key, value);
+ if (!hadKey) {
+ trigger(target, "add", key, value);
+ } else if (hasChanged(value, oldValue)) {
+ trigger(target, "set", key, value, oldValue);
+ }
+ return this;
+}
+function deleteEntry(key) {
+ const target = toRaw(this);
+ const { has: has2, get: get2 } = getProto(target);
+ let hadKey = has2.call(target, key);
+ if (!hadKey) {
+ key = toRaw(key);
+ hadKey = has2.call(target, key);
+ } else {
+ checkIdentityKeys(target, has2, key);
+ }
+ const oldValue = get2 ? get2.call(target, key) : void 0;
+ const result = target.delete(key);
+ if (hadKey) {
+ trigger(target, "delete", key, void 0, oldValue);
+ }
+ return result;
+}
+function clear() {
+ const target = toRaw(this);
+ const hadItems = target.size !== 0;
+ const oldTarget = isMap(target) ? new Map(target) : new Set(target);
+ const result = target.clear();
+ if (hadItems) {
+ trigger(target, "clear", void 0, void 0, oldTarget);
+ }
+ return result;
+}
+function createForEach(isReadonly2, isShallow2) {
+ return function forEach(callback, thisArg) {
+ const observed = this;
+ const target = observed["__v_raw"];
+ const rawTarget = toRaw(target);
+ const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive;
+ !isReadonly2 && track(rawTarget, "iterate", ITERATE_KEY);
+ return target.forEach((value, key) => {
+ return callback.call(thisArg, wrap(value), wrap(key), observed);
+ });
+ };
+}
+function createIterableMethod(method, isReadonly2, isShallow2) {
+ return function(...args) {
+ const target = this["__v_raw"];
+ const rawTarget = toRaw(target);
+ const targetIsMap = isMap(rawTarget);
+ const isPair = method === "entries" || method === Symbol.iterator && targetIsMap;
+ const isKeyOnly = method === "keys" && targetIsMap;
+ const innerIterator = target[method](...args);
+ const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive;
+ !isReadonly2 && track(
+ rawTarget,
+ "iterate",
+ isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY
+ );
+ return {
+ // iterator protocol
+ next() {
+ const { value, done } = innerIterator.next();
+ return done ? { value, done } : {
+ value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),
+ done
+ };
+ },
+ // iterable protocol
+ [Symbol.iterator]() {
+ return this;
+ }
+ };
+ };
+}
+function createReadonlyMethod(type) {
+ return function(...args) {
+ {
+ const key = args[0] ? `on key "${args[0]}" ` : ``;
+ warn$2(
+ `${capitalize(type)} operation ${key}failed: target is readonly.`,
+ toRaw(this)
+ );
+ }
+ return type === "delete" ? false : type === "clear" ? void 0 : this;
+ };
+}
+function createInstrumentations() {
+ const mutableInstrumentations2 = {
+ get(key) {
+ return get(this, key);
+ },
+ get size() {
+ return size(this);
+ },
+ has,
+ add,
+ set: set$1,
+ delete: deleteEntry,
+ clear,
+ forEach: createForEach(false, false)
+ };
+ const shallowInstrumentations2 = {
+ get(key) {
+ return get(this, key, false, true);
+ },
+ get size() {
+ return size(this);
+ },
+ has,
+ add,
+ set: set$1,
+ delete: deleteEntry,
+ clear,
+ forEach: createForEach(false, true)
+ };
+ const readonlyInstrumentations2 = {
+ get(key) {
+ return get(this, key, true);
+ },
+ get size() {
+ return size(this, true);
+ },
+ has(key) {
+ return has.call(this, key, true);
+ },
+ add: createReadonlyMethod("add"),
+ set: createReadonlyMethod("set"),
+ delete: createReadonlyMethod("delete"),
+ clear: createReadonlyMethod("clear"),
+ forEach: createForEach(true, false)
+ };
+ const shallowReadonlyInstrumentations2 = {
+ get(key) {
+ return get(this, key, true, true);
+ },
+ get size() {
+ return size(this, true);
+ },
+ has(key) {
+ return has.call(this, key, true);
+ },
+ add: createReadonlyMethod("add"),
+ set: createReadonlyMethod("set"),
+ delete: createReadonlyMethod("delete"),
+ clear: createReadonlyMethod("clear"),
+ forEach: createForEach(true, true)
+ };
+ const iteratorMethods = [
+ "keys",
+ "values",
+ "entries",
+ Symbol.iterator
+ ];
+ iteratorMethods.forEach((method) => {
+ mutableInstrumentations2[method] = createIterableMethod(method, false, false);
+ readonlyInstrumentations2[method] = createIterableMethod(method, true, false);
+ shallowInstrumentations2[method] = createIterableMethod(method, false, true);
+ shallowReadonlyInstrumentations2[method] = createIterableMethod(
+ method,
+ true,
+ true
+ );
+ });
+ return [
+ mutableInstrumentations2,
+ readonlyInstrumentations2,
+ shallowInstrumentations2,
+ shallowReadonlyInstrumentations2
+ ];
+}
+const [
+ mutableInstrumentations,
+ readonlyInstrumentations,
+ shallowInstrumentations,
+ shallowReadonlyInstrumentations
+] = /* @__PURE__ */ createInstrumentations();
+function createInstrumentationGetter(isReadonly2, shallow) {
+ const instrumentations = shallow ? isReadonly2 ? shallowReadonlyInstrumentations : shallowInstrumentations : isReadonly2 ? readonlyInstrumentations : mutableInstrumentations;
+ return (target, key, receiver) => {
+ if (key === "__v_isReactive") {
+ return !isReadonly2;
+ } else if (key === "__v_isReadonly") {
+ return isReadonly2;
+ } else if (key === "__v_raw") {
+ return target;
+ }
+ return Reflect.get(
+ hasOwn(instrumentations, key) && key in target ? instrumentations : target,
+ key,
+ receiver
+ );
+ };
+}
+const mutableCollectionHandlers = {
+ get: /* @__PURE__ */ createInstrumentationGetter(false, false)
+};
+const shallowCollectionHandlers = {
+ get: /* @__PURE__ */ createInstrumentationGetter(false, true)
+};
+const readonlyCollectionHandlers = {
+ get: /* @__PURE__ */ createInstrumentationGetter(true, false)
+};
+const shallowReadonlyCollectionHandlers = {
+ get: /* @__PURE__ */ createInstrumentationGetter(true, true)
+};
+function checkIdentityKeys(target, has2, key) {
+ const rawKey = toRaw(key);
+ if (rawKey !== key && has2.call(target, rawKey)) {
+ const type = toRawType(target);
+ warn$2(
+ `Reactive ${type} contains both the raw and reactive versions of the same object${type === `Map` ? ` as keys` : ``}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`
+ );
+ }
+}
+const reactiveMap = /* @__PURE__ */ new WeakMap();
+const shallowReactiveMap = /* @__PURE__ */ new WeakMap();
+const readonlyMap = /* @__PURE__ */ new WeakMap();
+const shallowReadonlyMap = /* @__PURE__ */ new WeakMap();
+function targetTypeMap(rawType) {
+ switch (rawType) {
+ case "Object":
+ case "Array":
+ return 1;
+ case "Map":
+ case "Set":
+ case "WeakMap":
+ case "WeakSet":
+ return 2;
+ default:
+ return 0;
+ }
+}
+function getTargetType(value) {
+ return value["__v_skip"] || !Object.isExtensible(value) ? 0 : targetTypeMap(toRawType(value));
+}
+function reactive(target) {
+ if (isReadonly(target)) {
+ return target;
+ }
+ return createReactiveObject(
+ target,
+ false,
+ mutableHandlers,
+ mutableCollectionHandlers,
+ reactiveMap
+ );
+}
+function shallowReactive(target) {
+ return createReactiveObject(
+ target,
+ false,
+ shallowReactiveHandlers,
+ shallowCollectionHandlers,
+ shallowReactiveMap
+ );
+}
+function readonly(target) {
+ return createReactiveObject(
+ target,
+ true,
+ readonlyHandlers,
+ readonlyCollectionHandlers,
+ readonlyMap
+ );
+}
+function shallowReadonly(target) {
+ return createReactiveObject(
+ target,
+ true,
+ shallowReadonlyHandlers,
+ shallowReadonlyCollectionHandlers,
+ shallowReadonlyMap
+ );
+}
+function createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) {
+ if (!isObject(target)) {
+ {
+ warn$2(`value cannot be made reactive: ${String(target)}`);
+ }
+ return target;
+ }
+ if (target["__v_raw"] && !(isReadonly2 && target["__v_isReactive"])) {
+ return target;
+ }
+ const existingProxy = proxyMap.get(target);
+ if (existingProxy) {
+ return existingProxy;
+ }
+ const targetType = getTargetType(target);
+ if (targetType === 0) {
+ return target;
+ }
+ const proxy = new Proxy(
+ target,
+ targetType === 2 ? collectionHandlers : baseHandlers
+ );
+ proxyMap.set(target, proxy);
+ return proxy;
+}
+function isReactive(value) {
+ if (isReadonly(value)) {
+ return isReactive(value["__v_raw"]);
+ }
+ return !!(value && value["__v_isReactive"]);
+}
+function isReadonly(value) {
+ return !!(value && value["__v_isReadonly"]);
+}
+function isShallow(value) {
+ return !!(value && value["__v_isShallow"]);
+}
+function isProxy(value) {
+ return isReactive(value) || isReadonly(value);
+}
+function toRaw(observed) {
+ const raw = observed && observed["__v_raw"];
+ return raw ? toRaw(raw) : observed;
+}
+function markRaw(value) {
+ if (Object.isExtensible(value)) {
+ def(value, "__v_skip", true);
+ }
+ return value;
+}
+const toReactive = (value) => isObject(value) ? reactive(value) : value;
+const toReadonly = (value) => isObject(value) ? readonly(value) : value;
+const COMPUTED_SIDE_EFFECT_WARN = `Computed is still dirty after getter evaluation, likely because a computed is mutating its own dependency in its getter. State mutations in computed getters should be avoided. Check the docs for more details: https://vuejs.org/guide/essentials/computed.html#getters-should-be-side-effect-free`;
+class ComputedRefImpl {
+ constructor(getter, _setter, isReadonly2, isSSR) {
+ this.getter = getter;
+ this._setter = _setter;
+ this.dep = void 0;
+ this.__v_isRef = true;
+ this["__v_isReadonly"] = false;
+ this.effect = new ReactiveEffect(
+ () => getter(this._value),
+ () => triggerRefValue(
+ this,
+ this.effect._dirtyLevel === 2 ? 2 : 3
+ )
+ );
+ this.effect.computed = this;
+ this.effect.active = this._cacheable = !isSSR;
+ this["__v_isReadonly"] = isReadonly2;
+ }
+ get value() {
+ const self = toRaw(this);
+ if ((!self._cacheable || self.effect.dirty) && hasChanged(self._value, self._value = self.effect.run())) {
+ triggerRefValue(self, 4);
+ }
+ trackRefValue(self);
+ if (self.effect._dirtyLevel >= 2) {
+ if (this._warnRecursive) {
+ warn$2(COMPUTED_SIDE_EFFECT_WARN, `
+
+getter: `, this.getter);
+ }
+ triggerRefValue(self, 2);
+ }
+ return self._value;
+ }
+ set value(newValue) {
+ this._setter(newValue);
+ }
+ // #region polyfill _dirty for backward compatibility third party code for Vue <= 3.3.x
+ get _dirty() {
+ return this.effect.dirty;
+ }
+ set _dirty(v) {
+ this.effect.dirty = v;
+ }
+ // #endregion
+}
+function computed$1(getterOrOptions, debugOptions, isSSR = false) {
+ let getter;
+ let setter;
+ const onlyGetter = isFunction(getterOrOptions);
+ if (onlyGetter) {
+ getter = getterOrOptions;
+ setter = () => {
+ warn$2("Write operation failed: computed value is readonly");
+ };
+ } else {
+ getter = getterOrOptions.get;
+ setter = getterOrOptions.set;
+ }
+ const cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter, isSSR);
+ return cRef;
+}
+function trackRefValue(ref2) {
+ var _a;
+ if (shouldTrack && activeEffect) {
+ ref2 = toRaw(ref2);
+ trackEffect(
+ activeEffect,
+ (_a = ref2.dep) != null ? _a : ref2.dep = createDep(
+ () => ref2.dep = void 0,
+ ref2 instanceof ComputedRefImpl ? ref2 : void 0
+ ),
+ {
+ target: ref2,
+ type: "get",
+ key: "value"
+ }
+ );
+ }
+}
+function triggerRefValue(ref2, dirtyLevel = 4, newVal) {
+ ref2 = toRaw(ref2);
+ const dep = ref2.dep;
+ if (dep) {
+ triggerEffects(
+ dep,
+ dirtyLevel,
+ {
+ target: ref2,
+ type: "set",
+ key: "value",
+ newValue: newVal
+ }
+ );
+ }
+}
+function isRef(r2) {
+ return !!(r2 && r2.__v_isRef === true);
+}
+function ref(value) {
+ return createRef(value, false);
+}
+function createRef(rawValue, shallow) {
+ if (isRef(rawValue)) {
+ return rawValue;
+ }
+ return new RefImpl(rawValue, shallow);
+}
+class RefImpl {
+ constructor(value, __v_isShallow) {
+ this.__v_isShallow = __v_isShallow;
+ this.dep = void 0;
+ this.__v_isRef = true;
+ this._rawValue = __v_isShallow ? value : toRaw(value);
+ this._value = __v_isShallow ? value : toReactive(value);
+ }
+ get value() {
+ trackRefValue(this);
+ return this._value;
+ }
+ set value(newVal) {
+ const useDirectValue = this.__v_isShallow || isShallow(newVal) || isReadonly(newVal);
+ newVal = useDirectValue ? newVal : toRaw(newVal);
+ if (hasChanged(newVal, this._rawValue)) {
+ this._rawValue = newVal;
+ this._value = useDirectValue ? newVal : toReactive(newVal);
+ triggerRefValue(this, 4, newVal);
+ }
+ }
+}
+function unref(ref2) {
+ return isRef(ref2) ? ref2.value : ref2;
+}
+const shallowUnwrapHandlers = {
+ get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)),
+ set: (target, key, value, receiver) => {
+ const oldValue = target[key];
+ if (isRef(oldValue) && !isRef(value)) {
+ oldValue.value = value;
+ return true;
+ } else {
+ return Reflect.set(target, key, value, receiver);
+ }
+ }
+};
+function proxyRefs(objectWithRefs) {
+ return isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers);
+}
+const stack = [];
+function pushWarningContext(vnode) {
+ stack.push(vnode);
+}
+function popWarningContext() {
+ stack.pop();
+}
+function warn$1(msg, ...args) {
+ pauseTracking();
+ const instance = stack.length ? stack[stack.length - 1].component : null;
+ const appWarnHandler = instance && instance.appContext.config.warnHandler;
+ const trace = getComponentTrace();
+ if (appWarnHandler) {
+ callWithErrorHandling(
+ appWarnHandler,
+ instance,
+ 11,
+ [
+ msg + args.map((a) => {
+ var _a, _b;
+ return (_b = (_a = a.toString) == null ? void 0 : _a.call(a)) != null ? _b : JSON.stringify(a);
+ }).join(""),
+ instance && instance.proxy,
+ trace.map(
+ ({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>`
+ ).join("\n"),
+ trace
+ ]
+ );
+ } else {
+ const warnArgs = [`[Vue warn]: ${msg}`, ...args];
+ if (trace.length && // avoid spamming console during tests
+ true) {
+ warnArgs.push(`
+`, ...formatTrace(trace));
+ }
+ console.warn(...warnArgs);
+ }
+ resetTracking();
+}
+function getComponentTrace() {
+ let currentVNode = stack[stack.length - 1];
+ if (!currentVNode) {
+ return [];
+ }
+ const normalizedStack = [];
+ while (currentVNode) {
+ const last = normalizedStack[0];
+ if (last && last.vnode === currentVNode) {
+ last.recurseCount++;
+ } else {
+ normalizedStack.push({
+ vnode: currentVNode,
+ recurseCount: 0
+ });
+ }
+ const parentInstance = currentVNode.component && currentVNode.component.parent;
+ currentVNode = parentInstance && parentInstance.vnode;
+ }
+ return normalizedStack;
+}
+function formatTrace(trace) {
+ const logs = [];
+ trace.forEach((entry, i) => {
+ logs.push(...i === 0 ? [] : [`
+`], ...formatTraceEntry(entry));
+ });
+ return logs;
+}
+function formatTraceEntry({ vnode, recurseCount }) {
+ const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``;
+ const isRoot = vnode.component ? vnode.component.parent == null : false;
+ const open = ` at <${formatComponentName(
+ vnode.component,
+ vnode.type,
+ isRoot
+ )}`;
+ const close = `>` + postfix;
+ return vnode.props ? [open, ...formatProps(vnode.props), close] : [open + close];
+}
+function formatProps(props) {
+ const res = [];
+ const keys = Object.keys(props);
+ keys.slice(0, 3).forEach((key) => {
+ res.push(...formatProp(key, props[key]));
+ });
+ if (keys.length > 3) {
+ res.push(` ...`);
+ }
+ return res;
+}
+function formatProp(key, value, raw) {
+ if (isString(value)) {
+ value = JSON.stringify(value);
+ return raw ? value : [`${key}=${value}`];
+ } else if (typeof value === "number" || typeof value === "boolean" || value == null) {
+ return raw ? value : [`${key}=${value}`];
+ } else if (isRef(value)) {
+ value = formatProp(key, toRaw(value.value), true);
+ return raw ? value : [`${key}=Ref<`, value, `>`];
+ } else if (isFunction(value)) {
+ return [`${key}=fn${value.name ? `<${value.name}>` : ``}`];
+ } else {
+ value = toRaw(value);
+ return raw ? value : [`${key}=`, value];
+ }
+}
+const ErrorTypeStrings = {
+ ["sp"]: "serverPrefetch hook",
+ ["bc"]: "beforeCreate hook",
+ ["c"]: "created hook",
+ ["bm"]: "beforeMount hook",
+ ["m"]: "mounted hook",
+ ["bu"]: "beforeUpdate hook",
+ ["u"]: "updated",
+ ["bum"]: "beforeUnmount hook",
+ ["um"]: "unmounted hook",
+ ["a"]: "activated hook",
+ ["da"]: "deactivated hook",
+ ["ec"]: "errorCaptured hook",
+ ["rtc"]: "renderTracked hook",
+ ["rtg"]: "renderTriggered hook",
+ [0]: "setup function",
+ [1]: "render function",
+ [2]: "watcher getter",
+ [3]: "watcher callback",
+ [4]: "watcher cleanup function",
+ [5]: "native event handler",
+ [6]: "component event handler",
+ [7]: "vnode hook",
+ [8]: "directive hook",
+ [9]: "transition hook",
+ [10]: "app errorHandler",
+ [11]: "app warnHandler",
+ [12]: "ref function",
+ [13]: "async component loader",
+ [14]: "scheduler flush. This is likely a Vue internals bug. Please open an issue at https://github.com/vuejs/core ."
+};
+function callWithErrorHandling(fn, instance, type, args) {
+ try {
+ return args ? fn(...args) : fn();
+ } catch (err) {
+ handleError(err, instance, type);
+ }
+}
+function callWithAsyncErrorHandling(fn, instance, type, args) {
+ if (isFunction(fn)) {
+ const res = callWithErrorHandling(fn, instance, type, args);
+ if (res && isPromise(res)) {
+ res.catch((err) => {
+ handleError(err, instance, type);
+ });
+ }
+ return res;
+ }
+ const values = [];
+ for (let i = 0; i < fn.length; i++) {
+ values.push(callWithAsyncErrorHandling(fn[i], instance, type, args));
+ }
+ return values;
+}
+function handleError(err, instance, type, throwInDev = true) {
+ const contextVNode = instance ? instance.vnode : null;
+ if (instance) {
+ let cur = instance.parent;
+ const exposedInstance = instance.proxy;
+ const errorInfo = ErrorTypeStrings[type] || type;
+ while (cur) {
+ const errorCapturedHooks = cur.ec;
+ if (errorCapturedHooks) {
+ for (let i = 0; i < errorCapturedHooks.length; i++) {
+ if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) {
+ return;
+ }
+ }
+ }
+ cur = cur.parent;
+ }
+ const appErrorHandler = instance.appContext.config.errorHandler;
+ if (appErrorHandler) {
+ callWithErrorHandling(
+ appErrorHandler,
+ null,
+ 10,
+ [err, exposedInstance, errorInfo]
+ );
+ return;
+ }
+ }
+ logError(err, type, contextVNode, throwInDev);
+}
+function logError(err, type, contextVNode, throwInDev = true) {
+ {
+ const info = ErrorTypeStrings[type] || type;
+ if (contextVNode) {
+ pushWarningContext(contextVNode);
+ }
+ warn$1(`Unhandled error${info ? ` during execution of ${info}` : ``}`);
+ if (contextVNode) {
+ popWarningContext();
+ }
+ if (throwInDev) {
+ console.error(err);
+ } else {
+ console.error(err);
+ }
+ }
+}
+let isFlushing = false;
+let isFlushPending = false;
+const queue = [];
+let flushIndex = 0;
+const pendingPostFlushCbs = [];
+let activePostFlushCbs = null;
+let postFlushIndex = 0;
+const resolvedPromise = /* @__PURE__ */ Promise.resolve();
+let currentFlushPromise = null;
+const RECURSION_LIMIT = 100;
+function nextTick$1(fn) {
+ const p2 = currentFlushPromise || resolvedPromise;
+ return fn ? p2.then(this ? fn.bind(this) : fn) : p2;
+}
+function findInsertionIndex(id) {
+ let start = flushIndex + 1;
+ let end = queue.length;
+ while (start < end) {
+ const middle = start + end >>> 1;
+ const middleJob = queue[middle];
+ const middleJobId = getId(middleJob);
+ if (middleJobId < id || middleJobId === id && middleJob.pre) {
+ start = middle + 1;
+ } else {
+ end = middle;
+ }
+ }
+ return start;
+}
+function queueJob(job) {
+ if (!queue.length || !queue.includes(
+ job,
+ isFlushing && job.allowRecurse ? flushIndex + 1 : flushIndex
+ )) {
+ if (job.id == null) {
+ queue.push(job);
+ } else {
+ queue.splice(findInsertionIndex(job.id), 0, job);
+ }
+ queueFlush();
+ }
+}
+function queueFlush() {
+ if (!isFlushing && !isFlushPending) {
+ isFlushPending = true;
+ currentFlushPromise = resolvedPromise.then(flushJobs);
+ }
+}
+function hasQueueJob(job) {
+ return queue.indexOf(job) > -1;
+}
+function invalidateJob(job) {
+ const i = queue.indexOf(job);
+ if (i > flushIndex) {
+ queue.splice(i, 1);
+ }
+}
+function queuePostFlushCb(cb) {
+ if (!isArray(cb)) {
+ if (!activePostFlushCbs || !activePostFlushCbs.includes(
+ cb,
+ cb.allowRecurse ? postFlushIndex + 1 : postFlushIndex
+ )) {
+ pendingPostFlushCbs.push(cb);
+ }
+ } else {
+ pendingPostFlushCbs.push(...cb);
+ }
+ queueFlush();
+}
+function flushPreFlushCbs(instance, seen, i = isFlushing ? flushIndex + 1 : 0) {
+ {
+ seen = seen || /* @__PURE__ */ new Map();
+ }
+ for (; i < queue.length; i++) {
+ const cb = queue[i];
+ if (cb && cb.pre) {
+ if (checkRecursiveUpdates(seen, cb)) {
+ continue;
+ }
+ queue.splice(i, 1);
+ i--;
+ cb();
+ }
+ }
+}
+function flushPostFlushCbs(seen) {
+ if (pendingPostFlushCbs.length) {
+ const deduped = [...new Set(pendingPostFlushCbs)].sort(
+ (a, b) => getId(a) - getId(b)
+ );
+ pendingPostFlushCbs.length = 0;
+ if (activePostFlushCbs) {
+ activePostFlushCbs.push(...deduped);
+ return;
+ }
+ activePostFlushCbs = deduped;
+ {
+ seen = seen || /* @__PURE__ */ new Map();
+ }
+ for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) {
+ if (checkRecursiveUpdates(seen, activePostFlushCbs[postFlushIndex])) {
+ continue;
+ }
+ activePostFlushCbs[postFlushIndex]();
+ }
+ activePostFlushCbs = null;
+ postFlushIndex = 0;
+ }
+}
+const getId = (job) => job.id == null ? Infinity : job.id;
+const comparator = (a, b) => {
+ const diff2 = getId(a) - getId(b);
+ if (diff2 === 0) {
+ if (a.pre && !b.pre)
+ return -1;
+ if (b.pre && !a.pre)
+ return 1;
+ }
+ return diff2;
+};
+function flushJobs(seen) {
+ isFlushPending = false;
+ isFlushing = true;
+ {
+ seen = seen || /* @__PURE__ */ new Map();
+ }
+ queue.sort(comparator);
+ const check = (job) => checkRecursiveUpdates(seen, job);
+ try {
+ for (flushIndex = 0; flushIndex < queue.length; flushIndex++) {
+ const job = queue[flushIndex];
+ if (job && job.active !== false) {
+ if (check(job)) {
+ continue;
+ }
+ callWithErrorHandling(job, null, 14);
+ }
+ }
+ } finally {
+ flushIndex = 0;
+ queue.length = 0;
+ flushPostFlushCbs(seen);
+ isFlushing = false;
+ currentFlushPromise = null;
+ if (queue.length || pendingPostFlushCbs.length) {
+ flushJobs(seen);
+ }
+ }
+}
+function checkRecursiveUpdates(seen, fn) {
+ if (!seen.has(fn)) {
+ seen.set(fn, 1);
+ } else {
+ const count = seen.get(fn);
+ if (count > RECURSION_LIMIT) {
+ const instance = fn.ownerInstance;
+ const componentName = instance && getComponentName(instance.type);
+ handleError(
+ `Maximum recursive updates exceeded${componentName ? ` in component <${componentName}>` : ``}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.`,
+ null,
+ 10
+ );
+ return true;
+ } else {
+ seen.set(fn, count + 1);
+ }
+ }
+}
+let devtools;
+let buffer = [];
+let devtoolsNotInstalled = false;
+function emit$1(event, ...args) {
+ if (devtools) {
+ devtools.emit(event, ...args);
+ } else if (!devtoolsNotInstalled) {
+ buffer.push({ event, args });
+ }
+}
+function setDevtoolsHook(hook, target) {
+ var _a, _b;
+ devtools = hook;
+ if (devtools) {
+ devtools.enabled = true;
+ buffer.forEach(({ event, args }) => devtools.emit(event, ...args));
+ buffer = [];
+ } else if (
+ // handle late devtools injection - only do this if we are in an actual
+ // browser environment to avoid the timer handle stalling test runner exit
+ // (#4815)
+ typeof window !== "undefined" && // some envs mock window but not fully
+ window.HTMLElement && // also exclude jsdom
+ !((_b = (_a = window.navigator) == null ? void 0 : _a.userAgent) == null ? void 0 : _b.includes("jsdom"))
+ ) {
+ const replay = target.__VUE_DEVTOOLS_HOOK_REPLAY__ = target.__VUE_DEVTOOLS_HOOK_REPLAY__ || [];
+ replay.push((newHook) => {
+ setDevtoolsHook(newHook, target);
+ });
+ setTimeout(() => {
+ if (!devtools) {
+ target.__VUE_DEVTOOLS_HOOK_REPLAY__ = null;
+ devtoolsNotInstalled = true;
+ buffer = [];
+ }
+ }, 3e3);
+ } else {
+ devtoolsNotInstalled = true;
+ buffer = [];
+ }
+}
+function devtoolsInitApp(app, version2) {
+ emit$1("app:init", app, version2, {
+ Fragment,
+ Text,
+ Comment,
+ Static
+ });
+}
+const devtoolsComponentAdded = /* @__PURE__ */ createDevtoolsComponentHook(
+ "component:added"
+ /* COMPONENT_ADDED */
+);
+const devtoolsComponentUpdated = /* @__PURE__ */ createDevtoolsComponentHook(
+ "component:updated"
+ /* COMPONENT_UPDATED */
+);
+const _devtoolsComponentRemoved = /* @__PURE__ */ createDevtoolsComponentHook(
+ "component:removed"
+ /* COMPONENT_REMOVED */
+);
+const devtoolsComponentRemoved = (component) => {
+ if (devtools && typeof devtools.cleanupBuffer === "function" && // remove the component if it wasn't buffered
+ !devtools.cleanupBuffer(component)) {
+ _devtoolsComponentRemoved(component);
+ }
+};
+/*! #__NO_SIDE_EFFECTS__ */
+// @__NO_SIDE_EFFECTS__
+function createDevtoolsComponentHook(hook) {
+ return (component) => {
+ emit$1(
+ hook,
+ component.appContext.app,
+ component.uid,
+ // fixed by xxxxxx
+ // 为 0 是 App,无 parent 是 Page 指向 App
+ component.uid === 0 ? void 0 : component.parent ? component.parent.uid : 0,
+ component
+ );
+ };
+}
+const devtoolsPerfStart = /* @__PURE__ */ createDevtoolsPerformanceHook(
+ "perf:start"
+ /* PERFORMANCE_START */
+);
+const devtoolsPerfEnd = /* @__PURE__ */ createDevtoolsPerformanceHook(
+ "perf:end"
+ /* PERFORMANCE_END */
+);
+function createDevtoolsPerformanceHook(hook) {
+ return (component, type, time) => {
+ emit$1(hook, component.appContext.app, component.uid, component, type, time);
+ };
+}
+function devtoolsComponentEmit(component, event, params) {
+ emit$1(
+ "component:emit",
+ component.appContext.app,
+ component,
+ event,
+ params
+ );
+}
+function emit(instance, event, ...rawArgs) {
+ if (instance.isUnmounted)
+ return;
+ const props = instance.vnode.props || EMPTY_OBJ;
+ {
+ const {
+ emitsOptions,
+ propsOptions: [propsOptions]
+ } = instance;
+ if (emitsOptions) {
+ if (!(event in emitsOptions) && true) {
+ if (!propsOptions || !(toHandlerKey(event) in propsOptions)) {
+ warn$1(
+ `Component emitted event "${event}" but it is neither declared in the emits option nor as an "${toHandlerKey(event)}" prop.`
+ );
+ }
+ } else {
+ const validator = emitsOptions[event];
+ if (isFunction(validator)) {
+ const isValid = validator(...rawArgs);
+ if (!isValid) {
+ warn$1(
+ `Invalid event arguments: event validation failed for event "${event}".`
+ );
+ }
+ }
+ }
+ }
+ }
+ let args = rawArgs;
+ const isModelListener2 = event.startsWith("update:");
+ const modelArg = isModelListener2 && event.slice(7);
+ if (modelArg && modelArg in props) {
+ const modifiersKey = `${modelArg === "modelValue" ? "model" : modelArg}Modifiers`;
+ const { number, trim } = props[modifiersKey] || EMPTY_OBJ;
+ if (trim) {
+ args = rawArgs.map((a) => isString(a) ? a.trim() : a);
+ }
+ if (number) {
+ args = rawArgs.map(looseToNumber);
+ }
+ }
+ {
+ devtoolsComponentEmit(instance, event, args);
+ }
+ {
+ const lowerCaseEvent = event.toLowerCase();
+ if (lowerCaseEvent !== event && props[toHandlerKey(lowerCaseEvent)]) {
+ warn$1(
+ `Event "${lowerCaseEvent}" is emitted in component ${formatComponentName(
+ instance,
+ instance.type
+ )} but the handler is registered for "${event}". Note that HTML attributes are case-insensitive and you cannot use v-on to listen to camelCase events when using in-DOM templates. You should probably use "${hyphenate(
+ event
+ )}" instead of "${event}".`
+ );
+ }
+ }
+ let handlerName;
+ let handler = props[handlerName = toHandlerKey(event)] || // also try camelCase event handler (#2249)
+ props[handlerName = toHandlerKey(camelize(event))];
+ if (!handler && isModelListener2) {
+ handler = props[handlerName = toHandlerKey(hyphenate(event))];
+ }
+ if (handler) {
+ callWithAsyncErrorHandling(
+ handler,
+ instance,
+ 6,
+ args
+ );
+ }
+ const onceHandler = props[handlerName + `Once`];
+ if (onceHandler) {
+ if (!instance.emitted) {
+ instance.emitted = {};
+ } else if (instance.emitted[handlerName]) {
+ return;
+ }
+ instance.emitted[handlerName] = true;
+ callWithAsyncErrorHandling(
+ onceHandler,
+ instance,
+ 6,
+ args
+ );
+ }
+}
+function normalizeEmitsOptions(comp, appContext, asMixin = false) {
+ const cache = appContext.emitsCache;
+ const cached = cache.get(comp);
+ if (cached !== void 0) {
+ return cached;
+ }
+ const raw = comp.emits;
+ let normalized = {};
+ let hasExtends = false;
+ if (!isFunction(comp)) {
+ const extendEmits = (raw2) => {
+ const normalizedFromExtend = normalizeEmitsOptions(raw2, appContext, true);
+ if (normalizedFromExtend) {
+ hasExtends = true;
+ extend(normalized, normalizedFromExtend);
+ }
+ };
+ if (!asMixin && appContext.mixins.length) {
+ appContext.mixins.forEach(extendEmits);
+ }
+ if (comp.extends) {
+ extendEmits(comp.extends);
+ }
+ if (comp.mixins) {
+ comp.mixins.forEach(extendEmits);
+ }
+ }
+ if (!raw && !hasExtends) {
+ if (isObject(comp)) {
+ cache.set(comp, null);
+ }
+ return null;
+ }
+ if (isArray(raw)) {
+ raw.forEach((key) => normalized[key] = null);
+ } else {
+ extend(normalized, raw);
+ }
+ if (isObject(comp)) {
+ cache.set(comp, normalized);
+ }
+ return normalized;
+}
+function isEmitListener(options, key) {
+ if (!options || !isOn(key)) {
+ return false;
+ }
+ key = key.slice(2).replace(/Once$/, "");
+ return hasOwn(options, key[0].toLowerCase() + key.slice(1)) || hasOwn(options, hyphenate(key)) || hasOwn(options, key);
+}
+let currentRenderingInstance = null;
+function setCurrentRenderingInstance(instance) {
+ const prev = currentRenderingInstance;
+ currentRenderingInstance = instance;
+ instance && instance.type.__scopeId || null;
+ return prev;
+}
+const COMPONENTS = "components";
+function resolveComponent(name, maybeSelfReference) {
+ return resolveAsset(COMPONENTS, name, true, maybeSelfReference) || name;
+}
+function resolveAsset(type, name, warnMissing = true, maybeSelfReference = false) {
+ const instance = currentRenderingInstance || currentInstance;
+ if (instance) {
+ const Component2 = instance.type;
+ {
+ const selfName = getComponentName(
+ Component2,
+ false
+ );
+ if (selfName && (selfName === name || selfName === camelize(name) || selfName === capitalize(camelize(name)))) {
+ return Component2;
+ }
+ }
+ const res = (
+ // local registration
+ // check instance[type] first which is resolved for options API
+ resolve(instance[type] || Component2[type], name) || // global registration
+ resolve(instance.appContext[type], name)
+ );
+ if (!res && maybeSelfReference) {
+ return Component2;
+ }
+ if (warnMissing && !res) {
+ const extra = `
+If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.`;
+ warn$1(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`);
+ }
+ return res;
+ } else {
+ warn$1(
+ `resolve${capitalize(type.slice(0, -1))} can only be used in render() or setup().`
+ );
+ }
+}
+function resolve(registry, name) {
+ return registry && (registry[name] || registry[camelize(name)] || registry[capitalize(camelize(name))]);
+}
+const INITIAL_WATCHER_VALUE = {};
+function watch(source, cb, options) {
+ if (!isFunction(cb)) {
+ warn$1(
+ `\`watch(fn, options?)\` signature has been moved to a separate API. Use \`watchEffect(fn, options?)\` instead. \`watch\` now only supports \`watch(source, cb, options?) signature.`
+ );
+ }
+ return doWatch(source, cb, options);
+}
+function doWatch(source, cb, {
+ immediate,
+ deep,
+ flush,
+ once: once2,
+ onTrack,
+ onTrigger
+} = EMPTY_OBJ) {
+ if (cb && once2) {
+ const _cb = cb;
+ cb = (...args) => {
+ _cb(...args);
+ unwatch();
+ };
+ }
+ if (deep !== void 0 && typeof deep === "number") {
+ warn$1(
+ `watch() "deep" option with number value will be used as watch depth in future versions. Please use a boolean instead to avoid potential breakage.`
+ );
+ }
+ if (!cb) {
+ if (immediate !== void 0) {
+ warn$1(
+ `watch() "immediate" option is only respected when using the watch(source, callback, options?) signature.`
+ );
+ }
+ if (deep !== void 0) {
+ warn$1(
+ `watch() "deep" option is only respected when using the watch(source, callback, options?) signature.`
+ );
+ }
+ if (once2 !== void 0) {
+ warn$1(
+ `watch() "once" option is only respected when using the watch(source, callback, options?) signature.`
+ );
+ }
+ }
+ const warnInvalidSource = (s2) => {
+ warn$1(
+ `Invalid watch source: `,
+ s2,
+ `A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.`
+ );
+ };
+ const instance = currentInstance;
+ const reactiveGetter = (source2) => deep === true ? source2 : (
+ // for deep: false, only traverse root-level properties
+ traverse(source2, deep === false ? 1 : void 0)
+ );
+ let getter;
+ let forceTrigger = false;
+ let isMultiSource = false;
+ if (isRef(source)) {
+ getter = () => source.value;
+ forceTrigger = isShallow(source);
+ } else if (isReactive(source)) {
+ getter = () => reactiveGetter(source);
+ forceTrigger = true;
+ } else if (isArray(source)) {
+ isMultiSource = true;
+ forceTrigger = source.some((s2) => isReactive(s2) || isShallow(s2));
+ getter = () => source.map((s2) => {
+ if (isRef(s2)) {
+ return s2.value;
+ } else if (isReactive(s2)) {
+ return reactiveGetter(s2);
+ } else if (isFunction(s2)) {
+ return callWithErrorHandling(s2, instance, 2);
+ } else {
+ warnInvalidSource(s2);
+ }
+ });
+ } else if (isFunction(source)) {
+ if (cb) {
+ getter = () => callWithErrorHandling(source, instance, 2);
+ } else {
+ getter = () => {
+ if (cleanup) {
+ cleanup();
+ }
+ return callWithAsyncErrorHandling(
+ source,
+ instance,
+ 3,
+ [onCleanup]
+ );
+ };
+ }
+ } else {
+ getter = NOOP;
+ warnInvalidSource(source);
+ }
+ if (cb && deep) {
+ const baseGetter = getter;
+ getter = () => traverse(baseGetter());
+ }
+ let cleanup;
+ let onCleanup = (fn) => {
+ cleanup = effect2.onStop = () => {
+ callWithErrorHandling(fn, instance, 4);
+ cleanup = effect2.onStop = void 0;
+ };
+ };
+ let oldValue = isMultiSource ? new Array(source.length).fill(INITIAL_WATCHER_VALUE) : INITIAL_WATCHER_VALUE;
+ const job = () => {
+ if (!effect2.active || !effect2.dirty) {
+ return;
+ }
+ if (cb) {
+ const newValue = effect2.run();
+ if (deep || forceTrigger || (isMultiSource ? newValue.some((v, i) => hasChanged(v, oldValue[i])) : hasChanged(newValue, oldValue)) || false) {
+ if (cleanup) {
+ cleanup();
+ }
+ callWithAsyncErrorHandling(cb, instance, 3, [
+ newValue,
+ // pass undefined as the old value when it's changed for the first time
+ oldValue === INITIAL_WATCHER_VALUE ? void 0 : isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE ? [] : oldValue,
+ onCleanup
+ ]);
+ oldValue = newValue;
+ }
+ } else {
+ effect2.run();
+ }
+ };
+ job.allowRecurse = !!cb;
+ let scheduler;
+ if (flush === "sync") {
+ scheduler = job;
+ } else if (flush === "post") {
+ scheduler = () => queuePostRenderEffect$1(job, instance && instance.suspense);
+ } else {
+ job.pre = true;
+ if (instance)
+ job.id = instance.uid;
+ scheduler = () => queueJob(job);
+ }
+ const effect2 = new ReactiveEffect(getter, NOOP, scheduler);
+ const scope = getCurrentScope();
+ const unwatch = () => {
+ effect2.stop();
+ if (scope) {
+ remove(scope.effects, effect2);
+ }
+ };
+ {
+ effect2.onTrack = onTrack;
+ effect2.onTrigger = onTrigger;
+ }
+ if (cb) {
+ if (immediate) {
+ job();
+ } else {
+ oldValue = effect2.run();
+ }
+ } else if (flush === "post") {
+ queuePostRenderEffect$1(
+ effect2.run.bind(effect2),
+ instance && instance.suspense
+ );
+ } else {
+ effect2.run();
+ }
+ return unwatch;
+}
+function instanceWatch(source, value, options) {
+ const publicThis = this.proxy;
+ const getter = isString(source) ? source.includes(".") ? createPathGetter(publicThis, source) : () => publicThis[source] : source.bind(publicThis, publicThis);
+ let cb;
+ if (isFunction(value)) {
+ cb = value;
+ } else {
+ cb = value.handler;
+ options = value;
+ }
+ const reset = setCurrentInstance(this);
+ const res = doWatch(getter, cb.bind(publicThis), options);
+ reset();
+ return res;
+}
+function createPathGetter(ctx, path) {
+ const segments = path.split(".");
+ return () => {
+ let cur = ctx;
+ for (let i = 0; i < segments.length && cur; i++) {
+ cur = cur[segments[i]];
+ }
+ return cur;
+ };
+}
+function traverse(value, depth, currentDepth = 0, seen) {
+ if (!isObject(value) || value["__v_skip"]) {
+ return value;
+ }
+ if (depth && depth > 0) {
+ if (currentDepth >= depth) {
+ return value;
+ }
+ currentDepth++;
+ }
+ seen = seen || /* @__PURE__ */ new Set();
+ if (seen.has(value)) {
+ return value;
+ }
+ seen.add(value);
+ if (isRef(value)) {
+ traverse(value.value, depth, currentDepth, seen);
+ } else if (isArray(value)) {
+ for (let i = 0; i < value.length; i++) {
+ traverse(value[i], depth, currentDepth, seen);
+ }
+ } else if (isSet(value) || isMap(value)) {
+ value.forEach((v) => {
+ traverse(v, depth, currentDepth, seen);
+ });
+ } else if (isPlainObject(value)) {
+ for (const key in value) {
+ traverse(value[key], depth, currentDepth, seen);
+ }
+ }
+ return value;
+}
+function validateDirectiveName(name) {
+ if (isBuiltInDirective(name)) {
+ warn$1("Do not use built-in directive ids as custom directive id: " + name);
+ }
+}
+function createAppContext() {
+ return {
+ app: null,
+ config: {
+ isNativeTag: NO,
+ performance: false,
+ globalProperties: {},
+ optionMergeStrategies: {},
+ errorHandler: void 0,
+ warnHandler: void 0,
+ compilerOptions: {}
+ },
+ mixins: [],
+ components: {},
+ directives: {},
+ provides: /* @__PURE__ */ Object.create(null),
+ optionsCache: /* @__PURE__ */ new WeakMap(),
+ propsCache: /* @__PURE__ */ new WeakMap(),
+ emitsCache: /* @__PURE__ */ new WeakMap()
+ };
+}
+let uid$1 = 0;
+function createAppAPI(render, hydrate) {
+ return function createApp2(rootComponent, rootProps = null) {
+ if (!isFunction(rootComponent)) {
+ rootComponent = extend({}, rootComponent);
+ }
+ if (rootProps != null && !isObject(rootProps)) {
+ warn$1(`root props passed to app.mount() must be an object.`);
+ rootProps = null;
+ }
+ const context = createAppContext();
+ const installedPlugins = /* @__PURE__ */ new WeakSet();
+ const app = context.app = {
+ _uid: uid$1++,
+ _component: rootComponent,
+ _props: rootProps,
+ _container: null,
+ _context: context,
+ _instance: null,
+ version,
+ get config() {
+ return context.config;
+ },
+ set config(v) {
+ {
+ warn$1(
+ `app.config cannot be replaced. Modify individual options instead.`
+ );
+ }
+ },
+ use(plugin2, ...options) {
+ if (installedPlugins.has(plugin2)) {
+ warn$1(`Plugin has already been applied to target app.`);
+ } else if (plugin2 && isFunction(plugin2.install)) {
+ installedPlugins.add(plugin2);
+ plugin2.install(app, ...options);
+ } else if (isFunction(plugin2)) {
+ installedPlugins.add(plugin2);
+ plugin2(app, ...options);
+ } else {
+ warn$1(
+ `A plugin must either be a function or an object with an "install" function.`
+ );
+ }
+ return app;
+ },
+ mixin(mixin) {
+ {
+ if (!context.mixins.includes(mixin)) {
+ context.mixins.push(mixin);
+ } else {
+ warn$1(
+ "Mixin has already been applied to target app" + (mixin.name ? `: ${mixin.name}` : "")
+ );
+ }
+ }
+ return app;
+ },
+ component(name, component) {
+ {
+ validateComponentName(name, context.config);
+ }
+ if (!component) {
+ return context.components[name];
+ }
+ if (context.components[name]) {
+ warn$1(`Component "${name}" has already been registered in target app.`);
+ }
+ context.components[name] = component;
+ return app;
+ },
+ directive(name, directive) {
+ {
+ validateDirectiveName(name);
+ }
+ if (!directive) {
+ return context.directives[name];
+ }
+ if (context.directives[name]) {
+ warn$1(`Directive "${name}" has already been registered in target app.`);
+ }
+ context.directives[name] = directive;
+ return app;
+ },
+ // fixed by xxxxxx
+ mount() {
+ },
+ // fixed by xxxxxx
+ unmount() {
+ },
+ provide(key, value) {
+ if (key in context.provides) {
+ warn$1(
+ `App already provides property with key "${String(key)}". It will be overwritten with the new value.`
+ );
+ }
+ context.provides[key] = value;
+ return app;
+ },
+ runWithContext(fn) {
+ const lastApp = currentApp;
+ currentApp = app;
+ try {
+ return fn();
+ } finally {
+ currentApp = lastApp;
+ }
+ }
+ };
+ return app;
+ };
+}
+let currentApp = null;
+function provide(key, value) {
+ if (!currentInstance) {
+ {
+ warn$1(`provide() can only be used inside setup().`);
+ }
+ } else {
+ let provides = currentInstance.provides;
+ const parentProvides = currentInstance.parent && currentInstance.parent.provides;
+ if (parentProvides === provides) {
+ provides = currentInstance.provides = Object.create(parentProvides);
+ }
+ provides[key] = value;
+ if (currentInstance.type.mpType === "app") {
+ currentInstance.appContext.app.provide(key, value);
+ }
+ }
+}
+function inject(key, defaultValue, treatDefaultAsFactory = false) {
+ const instance = currentInstance || currentRenderingInstance;
+ if (instance || currentApp) {
+ const provides = instance ? instance.parent == null ? instance.vnode.appContext && instance.vnode.appContext.provides : instance.parent.provides : currentApp._context.provides;
+ if (provides && key in provides) {
+ return provides[key];
+ } else if (arguments.length > 1) {
+ return treatDefaultAsFactory && isFunction(defaultValue) ? defaultValue.call(instance && instance.proxy) : defaultValue;
+ } else {
+ warn$1(`injection "${String(key)}" not found.`);
+ }
+ } else {
+ warn$1(`inject() can only be used inside setup() or functional components.`);
+ }
+}
+const isKeepAlive = (vnode) => vnode.type.__isKeepAlive;
+function onActivated(hook, target) {
+ registerKeepAliveHook(hook, "a", target);
+}
+function onDeactivated(hook, target) {
+ registerKeepAliveHook(hook, "da", target);
+}
+function registerKeepAliveHook(hook, type, target = currentInstance) {
+ const wrappedHook = hook.__wdc || (hook.__wdc = () => {
+ let current = target;
+ while (current) {
+ if (current.isDeactivated) {
+ return;
+ }
+ current = current.parent;
+ }
+ return hook();
+ });
+ injectHook(type, wrappedHook, target);
+ if (target) {
+ let current = target.parent;
+ while (current && current.parent) {
+ if (isKeepAlive(current.parent.vnode)) {
+ injectToKeepAliveRoot(wrappedHook, type, target, current);
+ }
+ current = current.parent;
+ }
+ }
+}
+function injectToKeepAliveRoot(hook, type, target, keepAliveRoot) {
+ const injected = injectHook(
+ type,
+ hook,
+ keepAliveRoot,
+ true
+ /* prepend */
+ );
+ onUnmounted(() => {
+ remove(keepAliveRoot[type], injected);
+ }, target);
+}
+function injectHook(type, hook, target = currentInstance, prepend = false) {
+ if (target) {
+ if (isRootHook(type)) {
+ target = target.root;
+ }
+ const hooks = target[type] || (target[type] = []);
+ const wrappedHook = hook.__weh || (hook.__weh = (...args) => {
+ if (target.isUnmounted) {
+ return;
+ }
+ pauseTracking();
+ const reset = setCurrentInstance(target);
+ const res = callWithAsyncErrorHandling(hook, target, type, args);
+ reset();
+ resetTracking();
+ return res;
+ });
+ if (prepend) {
+ hooks.unshift(wrappedHook);
+ } else {
+ hooks.push(wrappedHook);
+ }
+ return wrappedHook;
+ } else {
+ const apiName = toHandlerKey(
+ (ErrorTypeStrings[type] || type.replace(/^on/, "")).replace(/ hook$/, "")
+ );
+ warn$1(
+ `${apiName} is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup().`
+ );
+ }
+}
+const createHook$1 = (lifecycle) => (hook, target = currentInstance) => (
+ // post-create lifecycle registrations are noops during SSR (except for serverPrefetch)
+ (!isInSSRComponentSetup || lifecycle === "sp") && injectHook(lifecycle, (...args) => hook(...args), target)
+);
+const onBeforeMount = createHook$1("bm");
+const onMounted = createHook$1("m");
+const onBeforeUpdate = createHook$1("bu");
+const onUpdated = createHook$1("u");
+const onBeforeUnmount = createHook$1("bum");
+const onUnmounted = createHook$1("um");
+const onServerPrefetch = createHook$1("sp");
+const onRenderTriggered = createHook$1(
+ "rtg"
+);
+const onRenderTracked = createHook$1(
+ "rtc"
+);
+function onErrorCaptured(hook, target = currentInstance) {
+ injectHook("ec", hook, target);
+}
+const getPublicInstance = (i) => {
+ if (!i)
+ return null;
+ if (isStatefulComponent(i))
+ return getExposeProxy(i) || i.proxy;
+ return getPublicInstance(i.parent);
+};
+const publicPropertiesMap = (
+ // Move PURE marker to new line to workaround compiler discarding it
+ // due to type annotation
+ /* @__PURE__ */ extend(/* @__PURE__ */ Object.create(null), {
+ $: (i) => i,
+ // fixed by xxxxxx vue-i18n 在 dev 模式,访问了 $el,故模拟一个假的
+ // $el: i => i.vnode.el,
+ $el: (i) => i.__$el || (i.__$el = {}),
+ $data: (i) => i.data,
+ $props: (i) => shallowReadonly(i.props),
+ $attrs: (i) => shallowReadonly(i.attrs),
+ $slots: (i) => shallowReadonly(i.slots),
+ $refs: (i) => shallowReadonly(i.refs),
+ $parent: (i) => getPublicInstance(i.parent),
+ $root: (i) => getPublicInstance(i.root),
+ $emit: (i) => i.emit,
+ $options: (i) => resolveMergedOptions(i),
+ $forceUpdate: (i) => i.f || (i.f = () => {
+ i.effect.dirty = true;
+ queueJob(i.update);
+ }),
+ // $nextTick: i => i.n || (i.n = nextTick.bind(i.proxy!)),// fixed by xxxxxx
+ $watch: (i) => instanceWatch.bind(i)
+ })
+);
+const isReservedPrefix = (key) => key === "_" || key === "$";
+const hasSetupBinding = (state, key) => state !== EMPTY_OBJ && !state.__isScriptSetup && hasOwn(state, key);
+const PublicInstanceProxyHandlers = {
+ get({ _: instance }, key) {
+ const { ctx, setupState, data, props, accessCache, type, appContext } = instance;
+ if (key === "__isVue") {
+ return true;
+ }
+ let normalizedProps;
+ if (key[0] !== "$") {
+ const n2 = accessCache[key];
+ if (n2 !== void 0) {
+ switch (n2) {
+ case 1:
+ return setupState[key];
+ case 2:
+ return data[key];
+ case 4:
+ return ctx[key];
+ case 3:
+ return props[key];
+ }
+ } else if (hasSetupBinding(setupState, key)) {
+ accessCache[key] = 1;
+ return setupState[key];
+ } else if (data !== EMPTY_OBJ && hasOwn(data, key)) {
+ accessCache[key] = 2;
+ return data[key];
+ } else if (
+ // only cache other properties when instance has declared (thus stable)
+ // props
+ (normalizedProps = instance.propsOptions[0]) && hasOwn(normalizedProps, key)
+ ) {
+ accessCache[key] = 3;
+ return props[key];
+ } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {
+ accessCache[key] = 4;
+ return ctx[key];
+ } else if (shouldCacheAccess) {
+ accessCache[key] = 0;
+ }
+ }
+ const publicGetter = publicPropertiesMap[key];
+ let cssModule, globalProperties;
+ if (publicGetter) {
+ if (key === "$attrs") {
+ track(instance, "get", key);
+ } else if (key === "$slots") {
+ track(instance, "get", key);
+ }
+ return publicGetter(instance);
+ } else if (
+ // css module (injected by vue-loader)
+ (cssModule = type.__cssModules) && (cssModule = cssModule[key])
+ ) {
+ return cssModule;
+ } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {
+ accessCache[key] = 4;
+ return ctx[key];
+ } else if (
+ // global properties
+ globalProperties = appContext.config.globalProperties, hasOwn(globalProperties, key)
+ ) {
+ {
+ return globalProperties[key];
+ }
+ } else if (currentRenderingInstance && (!isString(key) || // #1091 avoid internal isRef/isVNode checks on component instance leading
+ // to infinite warning loop
+ key.indexOf("__v") !== 0)) {
+ if (data !== EMPTY_OBJ && isReservedPrefix(key[0]) && hasOwn(data, key)) {
+ warn$1(
+ `Property ${JSON.stringify(
+ key
+ )} must be accessed via $data because it starts with a reserved character ("$" or "_") and is not proxied on the render context.`
+ );
+ } else if (instance === currentRenderingInstance) {
+ warn$1(
+ `Property ${JSON.stringify(key)} was accessed during render but is not defined on instance.`
+ );
+ }
+ }
+ },
+ set({ _: instance }, key, value) {
+ const { data, setupState, ctx } = instance;
+ if (hasSetupBinding(setupState, key)) {
+ setupState[key] = value;
+ return true;
+ } else if (setupState.__isScriptSetup && hasOwn(setupState, key)) {
+ warn$1(`Cannot mutate
+
+
+
+
+
+
+
+