/g,"").replace(/\//g,""),typeof clickList=="object"){let time=calculateVisitTime();event.isTrusted?clickList.push({lastClickDom,time,type:"User manual click"}):clickList.push({lastClickDom,time,type:"Program click"}),clickList=clickList?JSON.stringify(clickList).substring(0,2e3):[]}},!0),window.addEventListener("error",function(e){if(isBlocked)return!1;stringToLower(e.target.tagName)==="img"&&e.target.src&&holderFile(e.target.src)?loadFailed.filter(item=>item.src===e.target.src).length===0&&loadFailed.push({type:"img_load_error",src:e.target.src}):stringToLower(e.target.tagName)==="script"&&e.target.src&&holderFile(e.target.src)?loadFailed.filter(item=>item.src===e.target.src).length===0&&loadFailed.push({type:"js_load_error",src:e.target.src}):stringToLower(e.target.tagName)==="link"&&e.target.href&&holderFile(e.target.href)&&loadFailed.filter(item=>item.src===e.target.href).length===0&&loadFailed.push({type:"css_load_error",src:e.target.href})},!0),window.onerror=function(errorMessage,scriptURI,lineNumber,columnNumber,errorObj){if(!scriptURI&&!errorObj||scriptURI&&scriptURI.indexOf("chrome-extension")!==-1||isBlocked)return;if(errorObj){const securityError=/SecurityError/i.test(errorObj),getItemError=/getItem/i.test(errorObj),setItemError=/setItem/i.test(errorObj),serviceWorkerError=/evaluating 'navigator.serviceWorker.register'/i.test(errorObj);if(securityError||setItemError||getItemError||serviceWorkerError)return}const hasSignificanceError=errorSignificanceMessageInfo.some(sign=>errorMessage.includes("Unexpected token "+sign)||errorMessage.includes("unexpected token"+sign)||errorMessage.includes("Unterminated string")||errorMessage.includes("Expected property name")||errorMessage.includes("Cannot convert undefined or null to object"));let networkSendStatus=!1;["4g","5g","wifi"].some(item=>navigatorConnection?.effectiveType.includes(item))&&!navigatorConnection?.saveData&&(networkSendStatus=!0),hasSignificanceError&&isChromeNeedCall&&networkSendStatus&&(console.log("%c"+`dom=${lastClickDom}
message=${errorMessage}`,"background: rgba(130,189,174,0.8); color: #fff; font-size: 18px; padding: 2px 10px;"),errorSignificanceMessageArr.push({errorMessage,errorType:"significance",pageType:"",scriptURI:scriptURI?scriptURI.replace(/[?#].*$/,""):"",domMessage:lastClickDom,errorObj:errorObj.toString(),lineNumber,columnNumber,...otherInfo()}),lastClickDom=""),isChromeNeedCall&&(console.log("%c"+`dom=${lastClickDom}
message=${errorMessage}`,"background: rgba(130,189,174,0.8); color: #fff; font-size: 14px; padding: 2px 10px;"),errorMessageArr.push({errorMessage,scriptURI:scriptURI?scriptURI.replace(/[?#].*$/,""):"",lineNumber,columnNumber,errorObj:errorObj.toString(),...otherInfo()}),errorMessageArr=errorMessageArr.filter(obj=>typeof obj.errorObj=="string"&&!obj.errorObj.includes("ReferenceError: Vue is not defined")&&!obj.errorObj.includes("SyntaxError: Unexpected end of JSON input")))},window.addEventListener("load",function(){let mergeErrorMessage=errorMessageArr.concat(errorSignificanceMessageArr);fileLoadFailedFun(),jsExceptionFun(mergeErrorMessage),setPageLoadTimestamp(),checkPageUrl()});function setPageLoadTimestamp(){document.body.setAttribute("data-load-time",(new Date).toLocaleString())}function abuttingJointFramework(c){if(c&&c.textStatus&&c.textStatus==="error"){let r={};r.handler=c.context.handler,r.errorObj=JSON.stringify(c.context.options),r.errorMessage=c.dataOrXhr.responseText,r.errorType="request error",r.pageType="",c.errorMessage&&monitorFrontError(r)}}function calculateVisitTime(){let endTime=new Date;return(endTime-startTime)/1e3+"s"}function checkPageUrl(){location.pathname.includes(location.protocol)&&typeof monitorFrontError=="function"&&monitorFrontError({errorMessage:"The current page pathname contains the protocol",pageUrl:window.location.href,warning_message_code:"dingtalk_front_pageurl_error"})}function fileLoadFailedFun(){loadFailed.length>0&&monitorFrontFilesFailed({filesInfo:loadFailed,...otherInfo()}).then(result=>{result&&fileLoadFailedRequestFun(result)}).catch(error=>{console.error(error)})}function fileLoadFailedRequestFun(loadFailedRes){let jqueryFailed=!1,loadFailedFileArray=[];if(loadFailedRes=loadFailedRes?JSON.parse(loadFailedRes):[],loadFailedRes.length>0){for(const k of loadFailedRes)k.src.includes("jquery-")&&k.type==="js_load_error"&&(jqueryFailed=!0),loadFailedFileArray.push(k.src);loadFailedFileArray=loadFailedFileArray.filter((item,index,self)=>self.indexOf(item)===index);let errorMessage=jqueryFailed?"The current page jQuery file does not exist":"Some resource files do not exist";monitorFrontError({errorMessage,pageUrl:window.location.href,pageType:jqueryFailed?"":"",files:loadFailedFileArray,...otherInfo()})}}function jsExceptionFun(errorMessageArr){for(const k of errorMessageArr)k.scriptURI.indexOf(location.origin)>=0&&getErrorSendTo("",k.lineNumber,k,!0)}function handleResourceError(errorMessage,resourceSrc){monitorFrontError({errorMessage,pageUrl:window.location.href,src:resourceSrc,...otherInfo()})}function getWebPageSource(url){return new Promise(function(resolve,reject){let xhr=new XMLHttpRequest;xhr.open("GET",url),xhr.onload=function(){xhr.status===200?resolve(xhr.responseText):reject("HTTP request failed with status code "+xhr.status)},xhr.onerror=function(){reject("Error fetching web page")},xhr.send()})}function processHtmlSourceCode(htmlSourceCode,targetLineNumber,pageTextType,info){if(pageTextType==="html"){const parser=new DOMParser,doc=parser.parseFromString(htmlSourceCode,"text/html"),lines=doc.documentElement.innerHTML.split(`
`);getErrorSendTo(lines,targetLineNumber,info)}if(pageTextType==="js"){const lines=htmlSourceCode.split(`
`);getErrorSendTo(lines,targetLineNumber,info)}}function getErrorSendTo(lines="",targetLineNumber=0,dataJson,notChecked=!1){let signNum=30,maxCodeLength=2e3;if(!notChecked){if(lines===""||targetLineNumber===0)return!1;if(lines!==""){let code="";for(let k=0;k{xhrRequestError({method:"POST",url:window.location.href,headers:{"Content-Type":"application/json","X-October-Request-Handler":"onGetFrontInfo","X-Requested-With":"XMLHttpRequest"},data:dataJson}).then(function(response){resolve(response)}).catch(function(error){console.error(error),reject(error)})})}function monitorFrontError(dataJson,isShow=1){xhrRequestError({method:"POST",url:window.location.href,headers:{"Content-Type":"application/json","X-October-Request-Handler":"onMonitorFrontError","X-Requested-With":"XMLHttpRequest"},data:dataJson}).then(function(){isShow&&showErrorNotification(dataJson.errorType||"JsError",dataJson.errorMessage)}).catch(function(error){console.error(error)})}function monitorFrontFilesFailed(dataJson){return new Promise((resolve,reject)=>{xhrRequestError({method:"POST",url:window.location.href,headers:{"Content-Type":"application/json","X-October-Request-Handler":"onMonitorFrontFilesFailed","X-Requested-With":"XMLHttpRequest"},data:dataJson}).then(function(response){let res=JSON.parse(response);for(const k in res)showErrorNotification("Some resource files do not exist",res[k].src);resolve(response)}).catch(function(error){reject(error)})})}function xhrRequestError(options){return new Promise(function(resolve,reject){var xhr=new XMLHttpRequest,header;if(xhr.open(options.method,options.url,!0),xhr.onload=function(){xhr.status>=200&&xhr.status<300?resolve(xhr.responseText):reject(xhr.statusText)},xhr.onerror=function(){reject(xhr.statusText)},options.headers)for(header in options.headers)xhr.setRequestHeader(header,options.headers[header]);options.data?xhr.send(JSON.stringify(options.data)):xhr.send()})}function holderFile(url=""){let isHolderArray=["dist/","assets/","files/"],isDomain=verifyAddressIsDomain({src:url});return isHolderArray.some(item=>url.includes(item))&&isDomain}function getCookieValError(name){var prefix=name+"=",end,value,start=document.cookie.indexOf(prefix);return start==-1?"":(end=document.cookie.indexOf(";",start+prefix.length),end==-1&&(end=document.cookie.length),value=document.cookie.substring(start+prefix.length,end),unescape(value))}function verifyAddressIsDomain(obj){if(obj?.src){let src=obj.src.toString(),origin=location.origin;return src.indexOf(origin)>=0}}function stringToLower(str){if(str)return str.toString().toLowerCase()}}catch(e){console.error(e)}上衣|女性時尚 - vivi-look 台灣|流行時尚女裝
已加入購物車
軟糯舒適圓領條紋拼色針織衫
NT$1,295
(8)
紅色馬海新款溫柔小個子超好看拼接針織上衣
NT$765
(4)
【全5色】軟糯半高領韓系百搭針織衫
NT$817
(4)
高級感小香風職業長袖襯衫
NT$900
(6)
浪漫女人復古印花假兩件拼接長袖襯衫
NT$1,141
(410)
百搭款繫帶低領鏤空針織衫
NT$675
(3)
【全12色】洋氣寬鬆純色高領套頭針織衫
NT$810
(10)
爆款小衆設計感拼接套頭長袖衛衣
NT$875
(8)
韓版高級感螺紋木耳邊半高領長袖打底衫
NT$635
(6)
【5色】復古優雅提花翻領顯瘦五分袖襯衫
NT$788
(6)
新款時尚百搭慵懶拼接圓領修身針織衫
NT$1,064
(10)
假兩件長袖條紋休閑裝色針織衫
NT$1,204
(7)
新款圓領套頭假兩件寬鬆拼接衛衣
NT$1,173
(21)
韓系復古格紋撞色燈籠袖襯衫
NT$899
(11)
新款流行拼色菱格冷淡係針織衫
NT$810
(9)
寒風簡約新款袖口破洞小個子超級友好衛衣
NT$617
(4)
【全5色】韓版慵懶風時尚連帽長袖針織衫
NT$893
(10)
舒服軟糯好感圓領加厚長袖内搭針織衫
NT$702
(8)
韓系甜美時尚 純色 繫帶 寬鬆 百搭 長袖 襯衫
NT$727
(7)
【全7色】新款加厚V領無袖打底背心
NT$810
(9)
人氣熱銷
溫柔好感新款V領設計感燈籠袖套頭針織衫
NT$1,100
(100)
【13色】寬鬆時尚印花百搭圓領短袖T恤
NT$594
(3)
韓系高級感蝴蝶印花針織衫
NT$900
(7)
法式復古短款立領針織開衫
NT$968
(4)
千鳥格雪紡紗蝴蝶結長袖襯衫
NT$675
(12)
時尚洋氣娃娃領内搭針織衫
NT$878
(10)
新款寬鬆顯瘦百搭娃娃領時尚針織衫
NT$833
(7)
復古軟糯加厚針織短款毛衣
NT$833
(6)
新款軟糯針織套頭長袖毛衣
NT$855
(12)
時尚寬鬆設計感加厚連帽衛衣
NT$1,046
(9)
新中式國風圓領盤口針織曡穿坎肩馬甲
NT$990
(8)
洋氣蕾絲鏤空時尚長袖雙層内搭T恤
NT$554
(3)
復古加厚圓領高級感毛衣
NT$1,103
(4)
半高領條紋加厚針織打底T恤
NT$920
(7)
慵懶長袖拼接荷葉邊設計感露肩衛衣
NT$765
(8)
重工高領亮片復古針織衫
NT$1,295
(9)
【全4色】慵懶風氣質針織打底衫
NT$702
(4)
【全9色】經典款套頭針織扣子長袖緊身針織衫
NT$783
(9)
率性休閒寬鬆立領半拉鍊套頭衛衣帽T
NT$883
(6)
居家時尚寬鬆休閑百搭戴帽針織衫
NT$1,356
(9)
【全5色】假兩件韓系慵懶風套頭針織衫
NT$997
(5)
時尚洋氣荷葉邊羊羔毛圓領衛衣
NT$810
(12)
知性亮眼半高領寬鬆針織打底衫
NT$878
(4)
氣質微奢修身顯瘦鑲鑽半高領針織打底衫
NT$743
(3)
洋氣翻領雪紡紗條紋襯衫
NT$1,125
(5)
【全5色】經典款半高領加厚針織打底衫
NT$788
(8)
清新韓系薄款提花印花長袖衛衣
NT$878
(11)
時尚休閑拼色條紋長袖寬鬆針織毛衣
NT$900
(4)
新款寬鬆加厚高齡針織毛衣
NT$855
(6)
新款設計感V領拼色長袖針織毛衣
NT$1,055
(9)
文藝優雅蕾絲拼接襯衫
NT$810
(10)
撞色夾邊氣質翻領長袖襯衫
NT$900
(4)
寬鬆減齡花邊圓領針織毛衣
NT$1,018
(7)
【全3色】新款半高領加厚針織内搭
NT$945
(5)
【全3色】假兩件套頭寬鬆圓領時尚百搭針織衫
NT$996
(8)
韓版寬鬆慵懶風撞色拼接連帽衛衣外套
NT$769
(5)
軟糯舒適好感撞色套頭圓領寬鬆顯瘦針織毛衣
NT$1,103
(124)
【4色】寬鬆慵懶風素面連帽衛衣針織
NT$855
(4)
軟糯燈籠袖圓領麻花套頭慵懶風針織毛衣
NT$851
(9)
韓版撞色拼接圓領減齡字母印花套頭衛衣
NT$540
(10)