/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內衣內褲居家服/睡衣配件飾品包包墨鏡冰袖皮帶雨具/雨衣襪子圍巾/手套帽/披肩後跟貼 上衣類最新上架價格由低到高價格由高到低最高人氣提高時髦感優雅撞色蝙蝠袖V領背心短袖針織NT$799 (331)吸睛注目時尚名媛高檔風素色泡泡袖蕾絲半高領襯衫NT$1,273 (117)【全4色】韓系蕩領扭褶斜領V領長袖短款針織衫NT$765 (6)【全4色】優雅知性寬鬆中長款披肩外套NT$855 (10)法式交叉設計純欲蕾絲邊露鎖骨修身針織衫女NT$729 (9)【5色】韓版時尚簡約鏤空v領針織毛衣NT$537 (8)【全8色】高級感純色圓領套頭不規則曡穿針織馬甲NT$527 (10)經典款純棉韓版百搭V領寬鬆打底衫NT$540 (27)浪漫女人溫柔風素色V領修身假兩件針織NT$765 (3)慵懶感寬鬆圓領印花針織長袖毛衣NT$1,429 (10)時尚設計感韓國版蝙蝠袖針織衫女寬鬆顯瘦遮肉打底上衣NT$621 (6)溫柔系慵懶風軟糯寬鬆長袖針織毛衣NT$702 (9)人氣熱銷百搭時髦韓系減齡拼接藍色長袖襯衫NT$878 (23)韓國風尚優雅素色圓領長袖保暖上衣針織NT$1,103 (87)復古慵懶風寬鬆設計感條紋拼接荷葉邊連帽衛衣NT$765 (5)溫柔風時尚百搭橫條紋套頭圓領寬鬆長袖針織毛衣NT$702 (75)簡約好搭寬鬆休閒貼布款五分袖T恤NT$621 (337)限時活動中洋氣顯瘦中長款假兩件長袖衛衣NT$765 (37)純色雪紡衫設計感小眾V領襯衣長袖女士襯衫NT$881 (10)美拉德高端氣質軟糯花朵毛衣NT$720 (5)復古時尚洋氣撞色韓版百搭軟糯打底毛衣NT$923 (6)經典款舒適柔軟 百搭顯瘦套頭長袖針織衫上衣NT$786 (3)高級感時尚設計感拉鏈印花連帽燈籠袖衛衣NT$798 (21)OOTD設計感開叉超級顯瘦遮肚腩 拉鍊短版毛衣針織衫女NT$702 (9)【全9色】韓版V領針織打底衫NT$510 (4)【10色】韓版慵懶風高領中長款開叉針織毛衣NT$1,103 (6)超柔親膚百搭寬鬆高齡打底針織毛衣NT$1,396 (11)韓系慵懶風蝴蝶印花連帽衛衣NT$699 (9)時尚洋氣新款針織開衫NT$789 (6)【全5色】中式復古盤口顯瘦針織開衫NT$1,234 (10)氛圍感新款拼色針織套頭毛衣NT$1,152 (7)日系純色設計感假兩件針織衫NT$878 (6)復古假兩件設計感獨特別致長袖襯衫NT$647 (3)都市風百搭休閑寬鬆小V領收腰顯瘦設計感衛衣NT$1,153 (7)韓系小衆寬鬆慵懶高級感V領針織上衣NT$810 (9)條紋拼接假兩件顯瘦百搭休閑衛衣NT$1,275 (10)波西米亞風印花V領時髦針織毛衣NT$992 (10)設計感時尚百搭寬鬆連帽中長款衛衣NT$855 (9)【全3色】設計感提花圓領套頭針織衫NT$743 (4)時髦簡約顯瘦設計感拼接假兩件衛衣NT$1,275 (8)時髦別致印花針織長袖毛衣NT$932 (8)韓系小清新印花V領針織毛衣開衫NT$1,275 (7)【全13色】溫柔好感新款軟糯圓領針織衫NT$939 (12)簡約好搭圓領蝙蝠袖寬鬆套頭毛衣NT$878 (7)【全5色】新款薄長袖polo翻領法式針織衫NT$1,125 (9)白色愛心印花毛衣慵懶風高級感超好看內搭打底針織NT$810 (5)出遊必備波西米亞風鏤空針織薄款V領針織開衫NT$675 (10)清新韓系小衆設計感魔哥魚寬鬆假兩件連帽衛衣NT$1,013 (6)法式復古設計感清新圓點拼接長袖雪紡襯衫NT$788 (108)【全3色】時尚洋氣中長款遮屁股假兩件針織衫NT$1,376 (8)超柔親膚百搭薄款冰絲顯瘦短款拼接針織衫NT$1,173 (9)【7色】氣質優雅復古簡約半高領五分袖素面針織短袖T恤NT$833 (9)【全5色】新款内搭洋氣時髦套頭流蘇拼接圓領針織毛衣NT$788 (6)顯瘦長袖寬鬆休閒純色洋氣百搭圓領打底上衣NT$529 (6)新品來襲優雅V領輕薄絲巾撞色寬鬆襯衫NT$1,055 (340)軟軟糯糯 設計感復古慵懶風條紋高級感針織衫NT$608 (28)時髦扎染露肩條紋長袖顯瘦疊穿針織背心兩件套NT$1,080 (5)【全10色】V領套頭保暖針織長袖毛衣NT$810 (4)新款爆款 小眾洋氣 寬鬆超好看 藍色印花長袖連帽衛衣NT$898 (7)【全6色】慵懶風半高領寬鬆針織長袖毛衣NT$878 (7)«12...6789101112...4849»
已加入購物車
上衣類
提高時髦感優雅撞色蝙蝠袖V領背心短袖針織
NT$799
(331)
吸睛注目時尚名媛高檔風素色泡泡袖蕾絲半高領襯衫
NT$1,273
(117)
【全4色】韓系蕩領扭褶斜領V領長袖短款針織衫
NT$765
(6)
【全4色】優雅知性寬鬆中長款披肩外套
NT$855
(10)
法式交叉設計純欲蕾絲邊露鎖骨修身針織衫女
NT$729
(9)
【5色】韓版時尚簡約鏤空v領針織毛衣
NT$537
(8)
【全8色】高級感純色圓領套頭不規則曡穿針織馬甲
NT$527
經典款純棉韓版百搭V領寬鬆打底衫
NT$540
(27)
浪漫女人溫柔風素色V領修身假兩件針織
(3)
慵懶感寬鬆圓領印花針織長袖毛衣
NT$1,429
時尚設計感韓國版蝙蝠袖針織衫女寬鬆顯瘦遮肉打底上衣
NT$621
溫柔系慵懶風軟糯寬鬆長袖針織毛衣
NT$702
百搭時髦韓系減齡拼接藍色長袖襯衫
NT$878
(23)
韓國風尚優雅素色圓領長袖保暖上衣針織
NT$1,103
(87)
復古慵懶風寬鬆設計感條紋拼接荷葉邊連帽衛衣
(5)
溫柔風時尚百搭橫條紋套頭圓領寬鬆長袖針織毛衣
(75)
簡約好搭寬鬆休閒貼布款五分袖T恤
(337)
限時活動中洋氣顯瘦中長款假兩件長袖衛衣
(37)
純色雪紡衫設計感小眾V領襯衣長袖女士襯衫
NT$881
美拉德高端氣質軟糯花朵毛衣
NT$720
復古時尚洋氣撞色韓版百搭軟糯打底毛衣
NT$923
經典款舒適柔軟 百搭顯瘦套頭長袖針織衫上衣
NT$786
高級感時尚設計感拉鏈印花連帽燈籠袖衛衣
NT$798
(21)
OOTD設計感開叉超級顯瘦遮肚腩 拉鍊短版毛衣針織衫女
【全9色】韓版V領針織打底衫
NT$510
(4)
【10色】韓版慵懶風高領中長款開叉針織毛衣
超柔親膚百搭寬鬆高齡打底針織毛衣
NT$1,396
(11)
韓系慵懶風蝴蝶印花連帽衛衣
NT$699
時尚洋氣新款針織開衫
NT$789
【全5色】中式復古盤口顯瘦針織開衫
NT$1,234
氛圍感新款拼色針織套頭毛衣
NT$1,152
(7)
日系純色設計感假兩件針織衫
復古假兩件設計感獨特別致長袖襯衫
NT$647
都市風百搭休閑寬鬆小V領收腰顯瘦設計感衛衣
NT$1,153
韓系小衆寬鬆慵懶高級感V領針織上衣
NT$810
條紋拼接假兩件顯瘦百搭休閑衛衣
NT$1,275
波西米亞風印花V領時髦針織毛衣
NT$992
設計感時尚百搭寬鬆連帽中長款衛衣
【全3色】設計感提花圓領套頭針織衫
NT$743
時髦簡約顯瘦設計感拼接假兩件衛衣
時髦別致印花針織長袖毛衣
NT$932
韓系小清新印花V領針織毛衣開衫
【全13色】溫柔好感新款軟糯圓領針織衫
NT$939
(12)
簡約好搭圓領蝙蝠袖寬鬆套頭毛衣
【全5色】新款薄長袖polo翻領法式針織衫
NT$1,125
白色愛心印花毛衣慵懶風高級感超好看內搭打底針織
出遊必備波西米亞風鏤空針織薄款V領針織開衫
NT$675
清新韓系小衆設計感魔哥魚寬鬆假兩件連帽衛衣
NT$1,013
法式復古設計感清新圓點拼接長袖雪紡襯衫
NT$788
(108)
【全3色】時尚洋氣中長款遮屁股假兩件針織衫
NT$1,376
超柔親膚百搭薄款冰絲顯瘦短款拼接針織衫
NT$1,173
【7色】氣質優雅復古簡約半高領五分袖素面針織短袖T恤
NT$833
【全5色】新款内搭洋氣時髦套頭流蘇拼接圓領針織毛衣
顯瘦長袖寬鬆休閒純色洋氣百搭圓領打底上衣
NT$529
新品來襲優雅V領輕薄絲巾撞色寬鬆襯衫
NT$1,055
(340)
軟軟糯糯 設計感復古慵懶風條紋高級感針織衫
NT$608
(28)
時髦扎染露肩條紋長袖顯瘦疊穿針織背心兩件套
NT$1,080
【全10色】V領套頭保暖針織長袖毛衣
新款爆款 小眾洋氣 寬鬆超好看 藍色印花長袖連帽衛衣
NT$898
【全6色】慵懶風半高領寬鬆針織長袖毛衣