/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,244
(100)
超好搭配提升氣質純色v領泡泡袖襯衫
NT$1,080
(134)
絕對時尚人气爆棚純色翻領長袖牛仔襯衫
NT$1,356
(126)
提升氣質提高時髦感純色飄帶長袖襯衫
NT$1,622
(25)
溫柔的感覺優雅藍色印花絲巾撞色減齡襯衫
NT$1,153
(144)
高端時尚優雅素色落肩燈籠袖長袖襯衫
NT$904
(36)
提升氣質通勤風白色長袖寬鬆顯瘦襯衫
NT$1,114
(4)
絕對便宜優雅壓褶素面圓領長袖襯衫
NT$1,170
(25)
引人注目時尚假兩件撞色翻領套頭襯衫
NT$1,058
(31)
本季亮點寬松顯瘦大尺碼七分袖假兩件印花襯衫
NT$1,103
(99)
獨特設計休閒寬鬆假兩件拼接長袖襯衫
NT$1,055
(118)
吸引視線人气新品撞色v領套頭長袖襯衫
NT$1,014
(32)
超流行新品優雅格紋翻領燈籠袖氣質襯衫
NT$1,058
(111)
人气新品清爽幹練假兩件撞色紐扣長袖襯衫
NT$1,184
(90)
韓系優雅氣質素色V領燈籠袖長款襯衫
NT$855
(31)
簡約質感韓版設計感素色v領長袖襯衫
NT$898
(118)
全網最紅簡約時尚假兩件撞色木耳邊立領針織襯衫
NT$1,275
(126)
強檔驚喜韓版簡約素色壓褶長袖襯衫
NT$716
(36)
初秋新品復古寬鬆條紋拼接雪紡襯衫
NT$1,127
(6)
吸睛注目港風印花長袖寬鬆單排扣襯衫
NT$855
(26)
視覺顯瘦優雅條紋娃娃領綁帶長袖寬鬆襯衫
NT$833
(64)
韓系優雅新發售撞色拼接蝴蝶結長袖襯衫
NT$1,071
(33)
新品來襲韓版寬鬆燈籠袖七分袖大碼襯衫
NT$963
(87)
时髦率性百變休閒撞色條紋翻領長袖襯衫
NT$720
(33)
視覺顯瘦優雅立領木耳邊波點鏤空長袖襯衫
NT$1,275
(184)
百變休閒優雅拼接不對稱字母印花單排釦長袖襯衫
NT$1,013
(167)
HOT必敗韓版圓領蝙蝠袖橫條紋七分袖襯衫
NT$1,497
(36)
強檔驚喜日系薄款燈籠袖立領多色襯衫
NT$855
(35)
簡約質感優雅緞面荷葉領杏色長袖襯衫
NT$1,437
(33)
OL穿搭優雅法式素面翻領長袖拼接紐扣春秋襯衫
NT$982
(28)
新品來襲時尚輕熟簡約質感超百搭通勤襯衫
NT$1,153
(114)
时髦率性法式風格印花長袖單排釦紐扣春秋襯衫
NT$1,144
(100)
視覺顯瘦法式雪紡幾何印花V領長袖襯衫
NT$1,275
(93)
視覺顯瘦優雅素色單排釦立領長袖防曬襯衫
NT$945
(41)
視覺顯瘦優雅豎條紋翻領氣質顯瘦長袖襯衫
NT$1,128
(33)
韓系優雅韓版輕熟亮片v領綁帶七分袖襯衫
NT$1,497
(30)
韓系優雅氣質素色圓領泡泡袖長款襯衫
NT$833
(145)
时髦率性優雅素色復古薄款紐扣口袋單排釦長袖襯衫
NT$1,518
(73)
韓系優雅氣質黑色翻領拼接大擺襯衫
NT$1,240
(36)
強檔驚喜氣質印花V領長袖寬鬆襯衫
NT$945
(28)
韓系優雅質感豎條紋綁帶圓領長袖襯衫
NT$1,793
(129)
新品來襲簡約撞色假兩件拼接圓領長袖襯衫
NT$1,151
(129)
視覺顯瘦優雅素色高級感氣質套頭拼接抽褶襯衫
NT$990
(30)
TOP推薦時尚雪紡立領木耳邊格子襯衫
NT$1,331
(89)
时髦率性輕熟荷葉袖圓領套頭春夏襯衫
NT$1,080
(29)
本週新品休閑不對稱條紋拼接圓領紐扣襯衫
NT$945
(101)
全場精選復古印花七分袖套頭圓領襯衫
NT$1,499
(29)
設計感優雅素色荷葉邊鏤空蕾絲V領法式長袖襯衫
NT$1,497
(30)
吸睛注目優雅蕾絲露肩顯瘦一字領五分袖襯衫
NT$997
(91)
韓系優雅清新印花圓領燈籠袖寬鬆綁帶襯衫
NT$1,102
(101)
超值好康時尚撞色假兩件雪紡拼接襯衫
NT$1,013
(248)
視覺顯瘦氣質黑白色立領網紗拼接單排釦襯衫
NT$1,181
(33)
時尚好搭簡約壓褶連肩袖翻領紐扣襯衫
NT$1,013
(136)
吸睛注目復古印花蝙蝠袖印花圓領襯衫
NT$930
(99)
韓系優雅日系套頭拼接親膚涼感襯衫
NT$1,133
(37)
時尚好搭日系素面無袖圓領春夏襯衫
NT$984
(40)
吸睛注目時尚印花撞色飄帶雪纺襯衫
NT$1,496
(85)
吸睛注目韓版不規則蕾絲泡泡袖襯衫
NT$1,080
(37)
韓系優雅休閒愛心印花翻領顯瘦襯衫
NT$1,194
(85)
當季流行優雅素色真絲花邊泡泡袖襯衫
NT$1,314
(27)