/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)}T恤|女性時尚 - vivi-look 台灣|流行時尚女裝 已加入購物車 會員登入收藏購物車所有商品新品上市人氣熱銷限時折扣特別企劃加一元 多一件上衣類T恤襯衫衛衣針織/毛衣細肩帶/背心風格支線清新學院風韓版優雅風可愛漫畫風百變休閒風洋裝類長洋裝短洋裝印花洋裝牛仔洋裝蕾絲洋裝針織洋裝吊帶褲套裝下著類寬褲長褲牛仔褲裙類內搭褲短褲外套類休閒夾克西裝外套罩衫風衣外套羽絨外套鞋子休閒鞋平底鞋高跟鞋靴子涼鞋內衣泳衣情趣內衣bra內衣內褲居家服/睡衣配件飾品包包墨鏡冰袖皮帶雨具/雨衣襪子圍巾/手套帽/披肩後跟貼 T恤最新上架價格由低到高價格由高到低最高人氣設計感微性感抽繩收腰v領顯瘦長袖T恤NT$513 (10)【7色】大尺碼寬鬆休閒字母印花圓領中長款短袖T恤NT$513 (34)寬鬆顯瘦假兩件大尺碼遮肚子印花正肩短袖鏤空T卹上衣NT$513 (311)慵懶百搭韓版垂感紐扣素面長袖T恤NT$517 (10)夢寐以求經典百搭寬鬆韓版圓領素面短袖T恤NT$524 (26)【7色】人氣復古設計感網紗針織拼接飛袖T恤NT$525 (118)M-5XL 減齡洋氣高質感設計感小眾V領POLO衫T恤NT$525 (397)新品 半價本季必備笑臉刺繡發熱衣高領長袖T恤NT$447 NT$893 (10)【M-4XL】韓版簡約設計感方領顯瘦短袖T恤NT$526 (142)【6色】休閒簡約百搭v領素面短袖T恤NT$527 (8)【10色】寬鬆慵懶風百搭印花圓領中長款短袖T恤NT$527 (7)【6色】休閒簡約時尚羽毛印花圓領短袖T恤NT$528 (159)顯瘦長袖寬鬆休閒純色洋氣百搭圓領打底上衣NT$529 (6)【9色】簡約百搭半高領修身內搭針織NT$535 (77)【7色】寬鬆慵懶風印花中長款圓領短袖T恤NT$535 (33)韓國chic氣質小性感一字領露肩修身顯瘦條紋短袖針織T恤NT$535 (154)【9色】簡約百搭寬鬆休閒中長款大尺碼短袖T恤NT$537 (9)【5色】寬鬆簡約可愛印花圓領中長款短袖T恤NT$537 (32)超好搭簡約休閑素色V領套頭長袖T恤NT$537 (529)【13色】休閒時尚百搭寬鬆印花圓領短袖T恤NT$537 (114)韓版簡約寬鬆素面v領針織鏤空罩衫T恤NT$537 (28)【6色】簡約時尚休閒寬鬆字母印花圓領中長款T恤NT$537 (38)【5色】率性時尚韓版愛心印花圓領短袖T恤NT$538 (7)超值好康韓版簡約撞色假兩件短袖T恤NT$540 (78)時髦率性設計感小眾圓領露肩顯瘦短袖T恤NT$540 (88)設計感小眾鏤空馬甲針織衫v領網紅薄款百搭上衣NT$540 (31)【M-4XL】簡約百搭v領印花顯瘦竹節棉短袖T恤NT$540 (391)新品【全4色】韓系不規則寬鬆長袖半高領T恤NT$473 NT$675 (8)寬鬆休閒簡約復古撞色印花設計感短袖T恤NT$540 (96)【S-3XL】韓版休閒時尚設計感假兩件長袖T恤NT$540 (8)【12色】必備百搭款簡約寬鬆圓領素面短袖T恤NT$540 (83)韓版休閒時尚愛心印花v領純棉短袖T恤NT$540 (102)中長款大T卹短袖夏季多巴胺寬鬆顯瘦大尺碼上衣NT$540 (40)百搭時髦簡約韓版寬鬆笑臉刺繡撞色T恤NT$540 (11)韓版港風味復古襯衣女新款純色西裝領襯衫女長袖上衣NT$540 (4)寬鬆慵懶風印花中長款短袖T恤NT$540 (95)【7色】簡約百搭休閒寬鬆印花圓領短袖T恤NT$540 (36)百搭時髦寬鬆慵懶風愛心/笑臉印花中長款T恤NT$540 (41)半價大尺寸設計感 好感女孩 寬鬆顯瘦打底衫NT$459 NT$918 (10)【M-3XL】寬鬆慵懶風百搭印花圓領短袖T恤NT$540 (4)【單/兩件裝】簡約百搭立體刺繡寬鬆顯瘦T恤NT$540 (29)【單/兩件】簡約必備百搭款木耳邊半高領內搭保暖螺紋T恤NT$540 (27)清新韓系顯瘦V領設計感彩色紐扣短袖T恤NT$540 (446)【6色】休閒簡約百搭設計感假兩件紐扣印花T恤NT$540 (6)【單/兩件裝】百搭溫柔純色高領休閒內搭長袖T恤NT$540 (103)必備百搭款韓版字母印花中長款長袖T恤NT$540 (140)【M-4XL】簡約百搭v領印花撞色顯瘦竹節棉短袖T恤NT$540 (78)【17色】韓版簡約休閒百搭圓領短袖針織T恤NT$540 (117)經典款純棉韓版百搭V領寬鬆打底衫NT$540 (27)【M-4XL】設計感假兩件撞色長袖T恤NT$540 (40)簡約好搭休閑V領鏤空套頭T恤NT$542 (382)韓系寬鬆百搭慵懶風v領紐扣針織T恤NT$543 (136)洋氣蕾絲鏤空時尚長袖雙層内搭T恤NT$554 (3)【6色】韓系簡約百搭紐扣v領針織短袖T恤NT$559 (95)【M-4XL】設計感寬鬆顯瘦鏤空短袖T恤NT$559 (38)全場精選優雅素色綢緞圓領連肩袖T恤NT$561 (382)韓國新款字母刺繡修身簡約短袖T恤NT$565 (6)百搭時髦經典款素面圓領針織短袖T恤NT$567 (116)【4色】Korea正韓簡約百搭不規則v領短袖T恤NT$567 (103)【4色】優雅氣質簡約鏤空七分袖寬鬆針織T恤NT$567 (97)«12345678...1516»
已加入購物車
T恤
設計感微性感抽繩收腰v領顯瘦長袖T恤
NT$513
(10)
【7色】大尺碼寬鬆休閒字母印花圓領中長款短袖T恤
(34)
寬鬆顯瘦假兩件大尺碼遮肚子印花正肩短袖鏤空T卹上衣
(311)
慵懶百搭韓版垂感紐扣素面長袖T恤
NT$517
夢寐以求經典百搭寬鬆韓版圓領素面短袖T恤
NT$524
(26)
【7色】人氣復古設計感網紗針織拼接飛袖T恤
NT$525
(118)
M-5XL 減齡洋氣高質感設計感小眾V領POLO衫T恤
(397)
本季必備笑臉刺繡發熱衣高領長袖T恤
NT$447 NT$893
【M-4XL】韓版簡約設計感方領顯瘦短袖T恤
NT$526
(142)
【6色】休閒簡約百搭v領素面短袖T恤
NT$527
(8)
【10色】寬鬆慵懶風百搭印花圓領中長款短袖T恤
(7)
【6色】休閒簡約時尚羽毛印花圓領短袖T恤
NT$528
(159)
顯瘦長袖寬鬆休閒純色洋氣百搭圓領打底上衣
NT$529
(6)
【9色】簡約百搭半高領修身內搭針織
NT$535
(77)
【7色】寬鬆慵懶風印花中長款圓領短袖T恤
(33)
韓國chic氣質小性感一字領露肩修身顯瘦條紋短袖針織T恤
(154)
【9色】簡約百搭寬鬆休閒中長款大尺碼短袖T恤
NT$537
(9)
【5色】寬鬆簡約可愛印花圓領中長款短袖T恤
(32)
超好搭簡約休閑素色V領套頭長袖T恤
(529)
【13色】休閒時尚百搭寬鬆印花圓領短袖T恤
(114)
韓版簡約寬鬆素面v領針織鏤空罩衫T恤
(28)
【6色】簡約時尚休閒寬鬆字母印花圓領中長款T恤
(38)
【5色】率性時尚韓版愛心印花圓領短袖T恤
NT$538
超值好康韓版簡約撞色假兩件短袖T恤
NT$540
(78)
時髦率性設計感小眾圓領露肩顯瘦短袖T恤
(88)
設計感小眾鏤空馬甲針織衫v領網紅薄款百搭上衣
(31)
【M-4XL】簡約百搭v領印花顯瘦竹節棉短袖T恤
(391)
【全4色】韓系不規則寬鬆長袖半高領T恤
NT$473 NT$675
寬鬆休閒簡約復古撞色印花設計感短袖T恤
(96)
【S-3XL】韓版休閒時尚設計感假兩件長袖T恤
【12色】必備百搭款簡約寬鬆圓領素面短袖T恤
(83)
韓版休閒時尚愛心印花v領純棉短袖T恤
(102)
中長款大T卹短袖夏季多巴胺寬鬆顯瘦大尺碼上衣
(40)
百搭時髦簡約韓版寬鬆笑臉刺繡撞色T恤
(11)
韓版港風味復古襯衣女新款純色西裝領襯衫女長袖上衣
(4)
寬鬆慵懶風印花中長款短袖T恤
(95)
【7色】簡約百搭休閒寬鬆印花圓領短袖T恤
(36)
百搭時髦寬鬆慵懶風愛心/笑臉印花中長款T恤
(41)
大尺寸設計感 好感女孩 寬鬆顯瘦打底衫
NT$459 NT$918
【M-3XL】寬鬆慵懶風百搭印花圓領短袖T恤
【單/兩件裝】簡約百搭立體刺繡寬鬆顯瘦T恤
(29)
【單/兩件】簡約必備百搭款木耳邊半高領內搭保暖螺紋T恤
(27)
清新韓系顯瘦V領設計感彩色紐扣短袖T恤
(446)
【6色】休閒簡約百搭設計感假兩件紐扣印花T恤
【單/兩件裝】百搭溫柔純色高領休閒內搭長袖T恤
(103)
必備百搭款韓版字母印花中長款長袖T恤
(140)
【M-4XL】簡約百搭v領印花撞色顯瘦竹節棉短袖T恤
【17色】韓版簡約休閒百搭圓領短袖針織T恤
(117)
經典款純棉韓版百搭V領寬鬆打底衫
【M-4XL】設計感假兩件撞色長袖T恤
簡約好搭休閑V領鏤空套頭T恤
NT$542
(382)
韓系寬鬆百搭慵懶風v領紐扣針織T恤
NT$543
(136)
洋氣蕾絲鏤空時尚長袖雙層内搭T恤
NT$554
(3)
【6色】韓系簡約百搭紐扣v領針織短袖T恤
NT$559
【M-4XL】設計感寬鬆顯瘦鏤空短袖T恤
全場精選優雅素色綢緞圓領連肩袖T恤
NT$561
韓國新款字母刺繡修身簡約短袖T恤
NT$565
百搭時髦經典款素面圓領針織短袖T恤
NT$567
(116)
【4色】Korea正韓簡約百搭不規則v領短袖T恤
【4色】優雅氣質簡約鏤空七分袖寬鬆針織T恤
(97)