/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 台灣|流行時尚女裝 已加入購物車 會員登入收藏購物車所有商品新品上市人氣熱銷限時折扣特別企劃加一元 多一件上衣類T恤襯衫衛衣針織/毛衣細肩帶/背心風格支線清新學院風韓版優雅風可愛漫畫風百變休閒風洋裝類長洋裝短洋裝印花洋裝牛仔洋裝蕾絲洋裝針織洋裝吊帶褲套裝下著類寬褲長褲牛仔褲裙類內搭褲短褲外套類休閒夾克西裝外套罩衫風衣外套羽絨外套鞋子休閒鞋平底鞋高跟鞋靴子涼鞋內衣泳衣情趣內衣bra內衣內褲居家服/睡衣配件飾品包包墨鏡冰袖皮帶雨具/雨衣襪子圍巾/手套帽/披肩後跟貼 上衣類最新上架價格由低到高價格由高到低最高人氣出遊必備韓版雪紡打底多色可調節背心NT$405 (38)半價當季流行休閑簡約素色圓領套頭長袖T恤NT$352 NT$704 (144)4色可選韓版寬鬆字母圓領短袖短袖T恤NT$414 (33)【10色】簡約百搭純色修身莫代爾五分袖半高領內搭T恤NT$416 (38)必備百搭款基礎款素色V領短袖顯瘦T恤NT$416 (33)超值百搭簡約字母印花圓領短袖T恤NT$424 (100)輕甜女孩韓版V領針織鏤空透氣設計感T恤NT$432 (107)韓版寬鬆下擺兩邊開叉印花圓領短袖T恤NT$432 (161)必備百搭款簡約韓版顯瘦冰絲針織背心NT$432 (120)百搭時髦簡約寬鬆顯瘦素面套頭圓領坑條長袖T恤NT$432 (135)簡約好搭簡約寬鬆笑臉印花圓領短袖T恤NT$432 (43)美式復古polo領條紋寬鬆百搭長袖針織NT$432 (36)半價半高領修身打底衫內搭純色加厚毛衣NT$368 NT$735 (157)半價【多款印花】簡約好搭簡約v領印花寬鬆短袖T恤NT$368 NT$735 (334)【4色】韓版時尚休閒顯瘦方領撞色短袖T恤NT$432 (101)【8色】M-3XL大尺碼內搭德絨發熱雙面加厚高領T恤NT$432 (111)溫柔好感韓版蕾絲鏤空圓領針織T恤NT$432 (35)半價【多款印花】休閒簡約印花竹節棉短袖T恤NT$368 NT$735 (133)限時下殺150公斤可穿素色短袖V領寬鬆顯瘦遮肉百搭T恤NT$432 (26)【10色】寬鬆慵懶風字母印花中長款短袖T恤NT$441 (41)吸睛注目港風素色無袖內搭針織背心NT$445 (79)【8色】簡約百搭顯瘦設計感無袖針織背心T恤NT$446 (99)【單/兩件裝】必備百搭款顯瘦v領素面純棉短袖T恤NT$450 (381)簡約百搭不規則修身顯瘦圓領短袖T恤NT$450 (93)【7色】寬鬆慵懶風大尺碼顯瘦愛心印花短袖T恤NT$454 (111)【M-4XL】好感女孩簡約百搭顯瘦素面背心NT$456 (7)【10色】休閒百搭開鬆印花撞色圓領短袖T恤NT$456 (42)【100公斤可穿】大尺碼純棉V領寬鬆油彩熊設計感短袖T恤NT$457 (660)【10色】韓版簡約百搭方領素面針織短袖T恤NT$458 (6)設計感小眾短袖寬鬆無袖飛飛袖t卹NT$458 (379)韓版寬鬆簡約顯瘦慵懶風印花v領短袖T恤NT$459 (33)【5色】韓版簡約百搭v領鏤空印花短袖T恤NT$459 (38)新品洋氣蕾絲鏤空時尚長袖雙層内搭T恤NT$402 NT$574 (5)【5色】簡約百搭時尚愛心印花v領短袖T恤NT$459 (11)日韓慵懶風簡約側邊剪拼接設計寬鬆圓領短袖T恤NT$459 (28)韓版復古V領顯瘦撞色短款針織T恤NT$459 (34)簡約好搭輕熟居家V領無袖吊帶NT$459 (145)【7色】簡約素色三朵花印花圓領寬鬆短袖T恤NT$465 (3)【6色】簡約時尚氣質圓領菱格鏤空短袖針織T恤NT$466 (10)知性美型簡約圓領波點遮肉顯瘦襯衫NT$474 (31)【10色】時髦百搭慵懶風貓咪印花圓領寬鬆T恤NT$478 (330)韓版氣質簡約u領針織鏤空短袖T恤NT$478 (103)半價時髦率性簡約百搭條紋撞色圓領短袖T恤NT$407 NT$813 (275)舒服軟糯好感休閑素面套頭顯瘦T恤NT$482 (102)【單/兩件裝】全6色簡約百搭修身顯瘦堆堆領純色T恤NT$482 (71)超百搭簡約卡通短袖印花圓領T恤NT$482 (1009)獨特設計韓版交叉領鏤空素面短袖T恤NT$483 (27)視覺顯瘦經典款v領竹節棉字母印花短袖T恤NT$486 (909)設計感小眾獨特露鎖骨一字肩斜肩短袖T恤NT$486 (11)復古優雅刺繡盤扣立領長袖T恤NT$486 (71)簡約好搭經典款素面冰絲無袖針織T恤NT$486 (117)半價【S-5XL】簡約清新通勤荷葉邊紐扣短袖雪紡襯衫NT$414 NT$827 (430)【15色】基本款簡約百搭v領素面針織短袖T恤NT$486 (31)簡約好搭寬鬆慵懶風v領開叉顯瘦T恤NT$486 (4)【9色】韓版慵懶風寬鬆字母百搭短袖T恤NT$486 (34)舒適度高休閒素面多色無袖寬鬆背心NT$486 (35)韓版時尚V領露肩純棉純色短袖T恤NT$486 (268)新品限時大特價V領針織勾花罩衫T恤NT$486 (4)【9色】簡約百搭v領素面短袖T恤NT$486 (38)時尚圓領修身氣質素面純棉短袖T恤NT$486 (10)«12345678...4647»
已加入購物車
上衣類
出遊必備韓版雪紡打底多色可調節背心
NT$405
(38)
當季流行休閑簡約素色圓領套頭長袖T恤
NT$352 NT$704
(144)
4色可選韓版寬鬆字母圓領短袖短袖T恤
NT$414
(33)
【10色】簡約百搭純色修身莫代爾五分袖半高領內搭T恤
NT$416
必備百搭款基礎款素色V領短袖顯瘦T恤
超值百搭簡約字母印花圓領短袖T恤
NT$424
(100)
輕甜女孩韓版V領針織鏤空透氣設計感T恤
NT$432
(107)
韓版寬鬆下擺兩邊開叉印花圓領短袖T恤
(161)
必備百搭款簡約韓版顯瘦冰絲針織背心
(120)
百搭時髦簡約寬鬆顯瘦素面套頭圓領坑條長袖T恤
(135)
簡約好搭簡約寬鬆笑臉印花圓領短袖T恤
(43)
美式復古polo領條紋寬鬆百搭長袖針織
(36)
半高領修身打底衫內搭純色加厚毛衣
NT$368 NT$735
(157)
【多款印花】簡約好搭簡約v領印花寬鬆短袖T恤
(334)
【4色】韓版時尚休閒顯瘦方領撞色短袖T恤
(101)
【8色】M-3XL大尺碼內搭德絨發熱雙面加厚高領T恤
(111)
溫柔好感韓版蕾絲鏤空圓領針織T恤
(35)
【多款印花】休閒簡約印花竹節棉短袖T恤
(133)
限時下殺150公斤可穿素色短袖V領寬鬆顯瘦遮肉百搭T恤
(26)
【10色】寬鬆慵懶風字母印花中長款短袖T恤
NT$441
(41)
吸睛注目港風素色無袖內搭針織背心
NT$445
(79)
【8色】簡約百搭顯瘦設計感無袖針織背心T恤
NT$446
(99)
【單/兩件裝】必備百搭款顯瘦v領素面純棉短袖T恤
NT$450
(381)
簡約百搭不規則修身顯瘦圓領短袖T恤
(93)
【7色】寬鬆慵懶風大尺碼顯瘦愛心印花短袖T恤
NT$454
【M-4XL】好感女孩簡約百搭顯瘦素面背心
NT$456
(7)
【10色】休閒百搭開鬆印花撞色圓領短袖T恤
(42)
【100公斤可穿】大尺碼純棉V領寬鬆油彩熊設計感短袖T恤
NT$457
(660)
【10色】韓版簡約百搭方領素面針織短袖T恤
NT$458
(6)
設計感小眾短袖寬鬆無袖飛飛袖t卹
(379)
韓版寬鬆簡約顯瘦慵懶風印花v領短袖T恤
NT$459
【5色】韓版簡約百搭v領鏤空印花短袖T恤
洋氣蕾絲鏤空時尚長袖雙層内搭T恤
NT$402 NT$574
(5)
【5色】簡約百搭時尚愛心印花v領短袖T恤
(11)
日韓慵懶風簡約側邊剪拼接設計寬鬆圓領短袖T恤
(28)
韓版復古V領顯瘦撞色短款針織T恤
(34)
簡約好搭輕熟居家V領無袖吊帶
(145)
【7色】簡約素色三朵花印花圓領寬鬆短袖T恤
NT$465
(3)
【6色】簡約時尚氣質圓領菱格鏤空短袖針織T恤
NT$466
(10)
知性美型簡約圓領波點遮肉顯瘦襯衫
NT$474
(31)
【10色】時髦百搭慵懶風貓咪印花圓領寬鬆T恤
NT$478
(330)
韓版氣質簡約u領針織鏤空短袖T恤
(103)
時髦率性簡約百搭條紋撞色圓領短袖T恤
NT$407 NT$813
(275)
舒服軟糯好感休閑素面套頭顯瘦T恤
NT$482
(102)
【單/兩件裝】全6色簡約百搭修身顯瘦堆堆領純色T恤
(71)
超百搭簡約卡通短袖印花圓領T恤
(1009)
獨特設計韓版交叉領鏤空素面短袖T恤
NT$483
(27)
視覺顯瘦經典款v領竹節棉字母印花短袖T恤
NT$486
(909)
設計感小眾獨特露鎖骨一字肩斜肩短袖T恤
復古優雅刺繡盤扣立領長袖T恤
簡約好搭經典款素面冰絲無袖針織T恤
(117)
【S-5XL】簡約清新通勤荷葉邊紐扣短袖雪紡襯衫
NT$414 NT$827
(430)
【15色】基本款簡約百搭v領素面針織短袖T恤
簡約好搭寬鬆慵懶風v領開叉顯瘦T恤
(4)
【9色】韓版慵懶風寬鬆字母百搭短袖T恤
舒適度高休閒素面多色無袖寬鬆背心
韓版時尚V領露肩純棉純色短袖T恤
(268)
新品限時大特價V領針織勾花罩衫T恤
【9色】簡約百搭v領素面短袖T恤
時尚圓領修身氣質素面純棉短袖T恤