Merge branch 'main' of ssh://18.167.251.121:10002/aidlab/Aida_Purchaser_Front
This commit is contained in:
|
Before Width: | Height: | Size: 1.3 MiB After Width: | Height: | Size: 1.3 MiB |
@@ -1,6 +1,8 @@
|
|||||||
export default {
|
export default {
|
||||||
Login: {
|
Login: {
|
||||||
|
signup: 'Sign up',
|
||||||
login: 'Log in',
|
login: 'Log in',
|
||||||
|
logoff: 'Log off',
|
||||||
register: 'Register',
|
register: 'Register',
|
||||||
loginTip: 'Platform integrated with AiDA.<br />AiDA account login required.',
|
loginTip: 'Platform integrated with AiDA.<br />AiDA account login required.',
|
||||||
name: 'Name',
|
name: 'Name',
|
||||||
@@ -11,6 +13,7 @@ export default {
|
|||||||
enterEmail: 'Enter your email',
|
enterEmail: 'Enter your email',
|
||||||
enterPassword: 'Enter your password',
|
enterPassword: 'Enter your password',
|
||||||
enterPasswordAgain: 'Enter your password again',
|
enterPasswordAgain: 'Enter your password again',
|
||||||
|
passwordTip: 'You must satisfy ALL password conditions to register.',
|
||||||
forgotPassword: 'Forget password?',
|
forgotPassword: 'Forget password?',
|
||||||
pleaseInputName: 'Please input the name',
|
pleaseInputName: 'Please input the name',
|
||||||
nameLengthError: 'Name length must be between {min} and {max} characters',
|
nameLengthError: 'Name length must be between {min} and {max} characters',
|
||||||
@@ -37,7 +40,24 @@ export default {
|
|||||||
wechatLogin: 'Sign in with Wechat',
|
wechatLogin: 'Sign in with Wechat',
|
||||||
indexTip: 'A multi-agent canvas for rapid, trend driven design iteration.',
|
indexTip: 'A multi-agent canvas for rapid, trend driven design iteration.',
|
||||||
sendCodeError: 'Send code error',
|
sendCodeError: 'Send code error',
|
||||||
retrievePassword: 'Retrieve password'
|
retrievePassword: 'Retrieve password',
|
||||||
|
emailVerification: 'Email Verification',
|
||||||
|
retrievePasswordTitle: 'Please enter your email address below to verify your identity.',
|
||||||
|
submit: 'Submit',
|
||||||
|
enterNewPassword: 'Enter a new password for<br/><span>{email}</span>',
|
||||||
|
passwordsDoNotMatch: 'Passwords do not match',
|
||||||
|
logOffTip: 'Are you sure to log off?',
|
||||||
|
},
|
||||||
|
RegisterSuccess: {
|
||||||
|
title1: 'Welcome to Stylish Parade!',
|
||||||
|
title2: 'Please switch to the Login tab to log in.',
|
||||||
|
title3: 'What awaits you in Stylish Parade',
|
||||||
|
item1title: 'Behind the design',
|
||||||
|
item1tip: 'Discover how designers bring ideas to life with AiDA — from first sketch to final look.',
|
||||||
|
item2title: 'Creative digital works',
|
||||||
|
item2tip: 'Unlock a growing library of inspiring digital works to refresh your creative mind.',
|
||||||
|
item3title: 'A fashion community',
|
||||||
|
item3tip: 'Join a space where fashion speaks — exchange ideas and connect with creators worldwide.',
|
||||||
},
|
},
|
||||||
Settings: {
|
Settings: {
|
||||||
title: 'Settings',
|
title: 'Settings',
|
||||||
@@ -235,6 +255,8 @@ export default {
|
|||||||
digitalItem:{
|
digitalItem:{
|
||||||
BestSelling: 'Best Selling',
|
BestSelling: 'Best Selling',
|
||||||
Price: 'Price: Low to High',
|
Price: 'Price: Low to High',
|
||||||
|
SelectedFirst: 'Selected First',
|
||||||
|
DateAdded: 'Date Added',
|
||||||
NewestFirst: 'Newest First',
|
NewestFirst: 'Newest First',
|
||||||
title: 'Digital Item',
|
title: 'Digital Item',
|
||||||
info: 'Virtual fashion creations collected in your personal archive',
|
info: 'Virtual fashion creations collected in your personal archive',
|
||||||
@@ -250,5 +272,52 @@ export default {
|
|||||||
},
|
},
|
||||||
checked: {
|
checked: {
|
||||||
All: 'All',
|
All: 'All',
|
||||||
|
},
|
||||||
|
MainHeader: {
|
||||||
|
Home: 'Home',
|
||||||
|
CollectionStory: 'Collection Story',
|
||||||
|
Brand: 'Brand',
|
||||||
|
DigitalItem: 'Digital Item',
|
||||||
|
HiName: 'Hi, {name}',
|
||||||
|
MyWardrobe: 'My Wardrobe',
|
||||||
|
Notifications: 'Notifications',
|
||||||
|
Settings: 'Settings',
|
||||||
|
},
|
||||||
|
ShoppingCart: {
|
||||||
|
title: 'Shopping Cart',
|
||||||
|
listNullTitle: 'Your Cart is empty',
|
||||||
|
listNullTip: 'Discover new fashion assets and add them to your cart.',
|
||||||
|
dateTimeFormat: 'SM D, YYYY, h:mm A',
|
||||||
|
noLongerAvailable: 'No Longer Available',
|
||||||
|
delistedFromMarketplace: 'Delisted from marketplace',
|
||||||
|
remove: 'Remove',
|
||||||
|
removeTip: 'Are you sure to remove this item?',
|
||||||
|
total: 'Total',
|
||||||
|
digitalAssets: 'Digital assets. Creator retains copyright.',
|
||||||
|
checkout: 'Checkout',
|
||||||
|
exploreDigitalItems: 'Explore Digital Items',
|
||||||
|
orderSummary: 'Order Summary',
|
||||||
|
selected: 'Selected',
|
||||||
|
brands: 'Brands',
|
||||||
|
item: 'item',
|
||||||
|
checkoutSelected: 'Checkout Selected',
|
||||||
|
},
|
||||||
|
digitalDetail:{
|
||||||
|
Sketch: 'Sketch',
|
||||||
|
Illustration: 'Illustration',
|
||||||
|
Product: 'Product',
|
||||||
|
EditorialVisual: 'Editorial Visual',
|
||||||
|
Back: 'Back',
|
||||||
|
ReleaseIn: 'Release in',
|
||||||
|
CopyrightLicenseNotice: 'Copyright & License Notice',
|
||||||
|
LicenseIncludedInAsset: 'License Included in Asset',
|
||||||
|
LicenseIncludedInAssetInfo: 'All products on this platform are digital assets, not physical goods. Purchase grants a usage license only; copyright and intellectual property rights remain with the original creator, unless otherwise stated.',
|
||||||
|
BuyNow: 'Buy Now',
|
||||||
|
AddToCart: 'Add to Cart',
|
||||||
|
},
|
||||||
|
addShoppingCart:{
|
||||||
|
title: 'Added to your Shopping Cart',
|
||||||
|
statement: 'Digital Assets Only. No physical product included.',
|
||||||
|
button: 'Set Shopping Cart',
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
export default {
|
export default {
|
||||||
Login: {
|
Login: {
|
||||||
|
signup: '注册',
|
||||||
login: '登录',
|
login: '登录',
|
||||||
|
logoff: '退出登录',
|
||||||
register: '注册',
|
register: '注册',
|
||||||
loginTip: '与 AiDA 集成的平台。<br />需要登录 AiDA 账户。',
|
loginTip: '与 AiDA 集成的平台。<br />需要登录 AiDA 账户。',
|
||||||
name: '姓名',
|
name: '姓名',
|
||||||
@@ -11,6 +13,7 @@ export default {
|
|||||||
enterEmail: '请输入邮箱',
|
enterEmail: '请输入邮箱',
|
||||||
enterPassword: '请输入密码',
|
enterPassword: '请输入密码',
|
||||||
enterPasswordAgain: '请输入密码确认',
|
enterPasswordAgain: '请输入密码确认',
|
||||||
|
passwordTip: '你必须满足所有密码条件才能注册。',
|
||||||
forgotPassword: '忘记密码?',
|
forgotPassword: '忘记密码?',
|
||||||
pleaseInputName: '请输入姓名',
|
pleaseInputName: '请输入姓名',
|
||||||
nameLengthError: '姓名长度必须在 {min} 到 {max} 个字符之间',
|
nameLengthError: '姓名长度必须在 {min} 到 {max} 个字符之间',
|
||||||
@@ -37,7 +40,24 @@ export default {
|
|||||||
wechatLogin: '使用微信登录',
|
wechatLogin: '使用微信登录',
|
||||||
indexTip: '一个多智能体画布,用于快速、趋势驱动的设计迭代。',
|
indexTip: '一个多智能体画布,用于快速、趋势驱动的设计迭代。',
|
||||||
sendCodeError: '发送验证码失败',
|
sendCodeError: '发送验证码失败',
|
||||||
retrievePassword: '找回密码'
|
retrievePassword: '找回密码',
|
||||||
|
emailVerification: '邮箱验证',
|
||||||
|
retrievePasswordTitle: '请输入您的邮箱地址以验证您的身份。',
|
||||||
|
submit: '提交',
|
||||||
|
enterNewPassword: '请输入新密码<br/><span>{email}</span>',
|
||||||
|
passwordsDoNotMatch: '两次输入密码不一致',
|
||||||
|
logOffTip: '确定退出登录吗?',
|
||||||
|
},
|
||||||
|
RegisterSuccess: {
|
||||||
|
title1: '欢迎来到 Stylish Parade!',
|
||||||
|
title2: '请切换到登录选项卡以登录。',
|
||||||
|
title3: '在 Stylish Parade 中等待你的发现',
|
||||||
|
item1title: '设计灵感',
|
||||||
|
item1tip: '了解设计师是如何借助 AiDA 将创意变为现实的——从最初的草图到最终的成品。',
|
||||||
|
item2title: '创意数字作品',
|
||||||
|
item2tip: '解锁一个增长的数字作品库,刷新你的创意。',
|
||||||
|
item3title: '时尚社区',
|
||||||
|
item3tip: '加入一个全球的时尚社区,与设计师分享创意。',
|
||||||
},
|
},
|
||||||
Settings: {
|
Settings: {
|
||||||
title: '设置',
|
title: '设置',
|
||||||
@@ -235,6 +255,8 @@ export default {
|
|||||||
digitalItem: {
|
digitalItem: {
|
||||||
BestSelling: "畅销优先",
|
BestSelling: "畅销优先",
|
||||||
Price: "价格:从低到高",
|
Price: "价格:从低到高",
|
||||||
|
SelectedFirst: "已选优先",
|
||||||
|
DateAdded: "添加日期",
|
||||||
NewestFirst: "最新优先",
|
NewestFirst: "最新优先",
|
||||||
title: "数字藏品",
|
title: "数字藏品",
|
||||||
info: "收藏于个人档案中的虚拟时装作品",
|
info: "收藏于个人档案中的虚拟时装作品",
|
||||||
@@ -250,5 +272,52 @@ export default {
|
|||||||
},
|
},
|
||||||
checked: {
|
checked: {
|
||||||
All: "全部"
|
All: "全部"
|
||||||
|
},
|
||||||
|
MainHeader: {
|
||||||
|
Home: '首页',
|
||||||
|
CollectionStory: '系列故事',
|
||||||
|
Brand: '品牌',
|
||||||
|
DigitalItem: '数字藏品',
|
||||||
|
HiName: '你好,{name}',
|
||||||
|
MyWardrobe: '我的衣橱',
|
||||||
|
Notifications: '通知',
|
||||||
|
Settings: '设置',
|
||||||
|
},
|
||||||
|
ShoppingCart: {
|
||||||
|
title: '购物车',
|
||||||
|
listNullTitle: '你的购物车为空',
|
||||||
|
listNullTip: '发现新的时尚资产并将其添加到你的购物车。',
|
||||||
|
dateTimeFormat: 'YYYY-MM-DD HH:mm',
|
||||||
|
noLongerAvailable: '已下架',
|
||||||
|
delistedFromMarketplace: '已从市场移除',
|
||||||
|
remove: '删除',
|
||||||
|
removeTip: '确认删除吗?',
|
||||||
|
total: '总金额',
|
||||||
|
digitalAssets: '数字资产。创作者保留版权。',
|
||||||
|
checkout: '结账',
|
||||||
|
exploreDigitalItems: '探索数字单品',
|
||||||
|
orderSummary: '订单信息',
|
||||||
|
selected: '已选',
|
||||||
|
brands: '品牌',
|
||||||
|
item: '数字藏品',
|
||||||
|
checkoutSelected: '结账已选',
|
||||||
|
},
|
||||||
|
digitalDetail:{
|
||||||
|
Sketch: "草图",
|
||||||
|
Illustration: "插画",
|
||||||
|
Product: "产品",
|
||||||
|
EditorialVisual: "编辑视觉",
|
||||||
|
Back: "返回",
|
||||||
|
ReleaseIn: "发布于",
|
||||||
|
CopyrightLicenseNotice: "版权与许可声明",
|
||||||
|
LicenseIncludedInAsset: "资产包含许可",
|
||||||
|
LicenseIncludedInAssetInfo: "本平台所有产品均为数字资产,非实物商品。购买仅授予使用许可;版权及知识产权仍归原作者所有,除非另有说明。",
|
||||||
|
BuyNow: "立即购买",
|
||||||
|
AddToCart: "加入购物车"
|
||||||
|
},
|
||||||
|
addShoppingCart:{
|
||||||
|
title: "已添加到您的购物车",
|
||||||
|
statement: "仅限数字资产。不包含实体产品。",
|
||||||
|
button: "去购物车"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -211,3 +211,7 @@ export function FormatBytes(bytes, options: { decimals?: number, unitBig?: boole
|
|||||||
const value = bytes / Math.pow(k, i);
|
const value = bytes / Math.pow(k, i);
|
||||||
return `${Number(value.toFixed(decimals))} ${sizes[i]}`;
|
return `${Number(value.toFixed(decimals))} ${sizes[i]}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const openAida = () => {
|
||||||
|
window.open('https://www.aida.com.hk/', '_blank')
|
||||||
|
}
|
||||||
@@ -28,14 +28,19 @@ const searchHistory = ref([
|
|||||||
])
|
])
|
||||||
|
|
||||||
let changeSearchBrandTime = null
|
let changeSearchBrandTime = null
|
||||||
|
|
||||||
const changeSearchBrand = () => {
|
const changeSearchBrand = () => {
|
||||||
merchantList.value = []
|
if(!searchBrand.value)return
|
||||||
clearTimeout(changeSearchBrandTime)
|
clearTimeout(changeSearchBrandTime)
|
||||||
getDesignerList({
|
changeSearchBrandTime = setTimeout(()=>{
|
||||||
keyword: searchBrand.value,
|
merchantList.value = []
|
||||||
}).then((res)=>{
|
getDesignerList({
|
||||||
merchantList.value.push(...res)
|
keyword: searchBrand.value,
|
||||||
})
|
}).then((res)=>{
|
||||||
|
merchantList.value.push(...res)
|
||||||
|
})
|
||||||
|
},500)
|
||||||
|
|
||||||
// changeSearchBrandTime = setTimeout(()=>{
|
// changeSearchBrandTime = setTimeout(()=>{
|
||||||
// getMerchantData.pageNum = 1
|
// getMerchantData.pageNum = 1
|
||||||
// getMerchantData.isShowMark = false
|
// getMerchantData.isShowMark = false
|
||||||
@@ -129,7 +134,7 @@ const {} = toRefs(data);
|
|||||||
<div class="content">
|
<div class="content">
|
||||||
<div class="input">
|
<div class="input">
|
||||||
<input type="text" v-model="searchBrand" @input="changeSearchBrand" :placeholder="$t('brand.search')">
|
<input type="text" v-model="searchBrand" @input="changeSearchBrand" :placeholder="$t('brand.search')">
|
||||||
<div class="icon">
|
<div class="icon" @click="changeSearchBrand">
|
||||||
<SvgIcon name="brand-search" size="32" />
|
<SvgIcon name="brand-search" size="32" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -97,8 +97,8 @@ defineExpose({})
|
|||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
.header{
|
.header{
|
||||||
position: sticky;
|
// position: sticky;
|
||||||
top: 0;
|
// top: 0;
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
.title{
|
.title{
|
||||||
|
|||||||
@@ -6,6 +6,9 @@ import myEvent from '@/utils/myEvent'
|
|||||||
import { getListingDetailApi } from '@/api/listing'
|
import { getListingDetailApi } from '@/api/listing'
|
||||||
import { useRoute } from 'vue-router'
|
import { useRoute } from 'vue-router'
|
||||||
import { ElMessage } from 'element-plus'
|
import { ElMessage } from 'element-plus'
|
||||||
|
import { useI18n } from 'vue-i18n'
|
||||||
|
import { AddShoppingCart } from '@/api/shoppingCart'
|
||||||
|
import { CreateOrder } from '@/api/shoppingCart'
|
||||||
|
|
||||||
|
|
||||||
//const props = defineProps({
|
//const props = defineProps({
|
||||||
@@ -13,6 +16,7 @@ import { ElMessage } from 'element-plus'
|
|||||||
//const emit = defineEmits([
|
//const emit = defineEmits([
|
||||||
//])
|
//])
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
|
const { t } = useI18n()
|
||||||
|
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
let detail:any = ref({
|
let detail:any = ref({
|
||||||
@@ -22,30 +26,40 @@ let detail:any = ref({
|
|||||||
shopName: '',
|
shopName: '',
|
||||||
updateTime: '',
|
updateTime: '',
|
||||||
gender: '',
|
gender: '',
|
||||||
|
sellerId: '',
|
||||||
})
|
})
|
||||||
const sketchList = ref([])
|
const sketchList = ref([])
|
||||||
const illustrationList = ref([])
|
const illustrationList = ref([])
|
||||||
const productList = ref([])
|
const productList = ref([])
|
||||||
const editorialVisualList = ref([])
|
const editorialVisualList = ref([])
|
||||||
const addShopping = () => {
|
const addShopping = () => {
|
||||||
console.log(detail.value)
|
if(!detail.value.price) return ElMessage.warning(t('brandDetail.addShoppingTip'))
|
||||||
if(!detail.value.price) return ElMessage.warning('Please log in first.')
|
|
||||||
let data = {
|
let data = {
|
||||||
cover: detail.value.images.cover[0],
|
cover: detail.value.images.cover[0],
|
||||||
price: detail.value.price,
|
price: detail.value.price,
|
||||||
shopName: detail.value.shopName,
|
shopName: detail.value.shopName,
|
||||||
title: detail.value.title,
|
title: detail.value.title,
|
||||||
|
id: detail.value.id,
|
||||||
}
|
}
|
||||||
myEvent.emit('addShopping', data)
|
AddShoppingCart({listingIds:[detail.value.id]}).then((res)=>{
|
||||||
|
myEvent.emit('addShopping', data)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const goShopping = () => {
|
const goShopping = () => {
|
||||||
if(!detail.value.price) return ElMessage.warning('Please log in first.')
|
if(!detail.value.price) return ElMessage.warning(t('brandDetail.addShoppingTip'))
|
||||||
router.push({path: '/shoppingCart'})
|
CreateOrder(
|
||||||
|
[detail.value.id],true
|
||||||
|
).then((res)=>{
|
||||||
|
// if(res)router.push({path: '/shoppingCart')
|
||||||
|
})
|
||||||
|
// router.push({path: '/shoppingCart'})
|
||||||
}
|
}
|
||||||
const setImgList = (list)=>{
|
const setImgList = (list)=>{
|
||||||
sketchList.value = list.apparel.map((item:any) => {return {imgUrl:item}})
|
sketchList.value = list?.apparel?.map((item:any) => {return {imgUrl:item}})
|
||||||
illustrationList.value = list.sketch.map((item:any) => {return {imgUrl:item}})
|
illustrationList.value = list?.sketch?.map((item:any) => {return {imgUrl:item}})
|
||||||
productList.value = list.main_product.map((item:any) => {return {imgUrl:item}})
|
productList.value = list?.main_product?.map((item:any) => {return {imgUrl:item}})
|
||||||
|
|
||||||
editorialVisualList.value = list.product.map((item:any) => {return {imgUrl:item}})
|
editorialVisualList.value = list.product.map((item:any) => {return {imgUrl:item}})
|
||||||
if(list.firstFrame){
|
if(list.firstFrame){
|
||||||
@@ -62,11 +76,14 @@ const getListingDetail = ()=>{
|
|||||||
getListingDetailApi({
|
getListingDetailApi({
|
||||||
id:route.params.id + '',
|
id:route.params.id + '',
|
||||||
}).then((res)=>{
|
}).then((res)=>{
|
||||||
console.log(res)
|
|
||||||
if(res)detail.value = res
|
if(res)detail.value = res
|
||||||
setImgList(res.images)
|
setImgList(res.images)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
const gobrand = () => {
|
||||||
|
if(!detail.value.sellerId)return
|
||||||
|
router.push({path: `/brand/${detail.value.sellerId}`})
|
||||||
|
}
|
||||||
// const vObserve = {
|
// const vObserve = {
|
||||||
// mounted (el,binding) {
|
// mounted (el,binding) {
|
||||||
// },
|
// },
|
||||||
@@ -85,7 +102,7 @@ defineExpose({})
|
|||||||
<div class="center">
|
<div class="center">
|
||||||
<div class="img-list">
|
<div class="img-list">
|
||||||
<div class="left">
|
<div class="left">
|
||||||
<div class="title">Sketch</div>
|
<div class="title">{{ $t('digitalDetail.Sketch') }}</div>
|
||||||
<div class="box sketch">
|
<div class="box sketch">
|
||||||
<div class="imgBox">
|
<div class="imgBox">
|
||||||
<img :src="item?.imgUrl" v-for="item in sketchList" :key="item" alt="">
|
<img :src="item?.imgUrl" v-for="item in sketchList" :key="item" alt="">
|
||||||
@@ -95,13 +112,13 @@ defineExpose({})
|
|||||||
<div class="right">
|
<div class="right">
|
||||||
<div class="top">
|
<div class="top">
|
||||||
<div class="box">
|
<div class="box">
|
||||||
<div class="title">Illustration</div>
|
<div class="title">{{ $t('digitalDetail.Illustration') }}</div>
|
||||||
<div class="imgBox">
|
<div class="imgBox">
|
||||||
<img :src="item?.imgUrl" v-for="item in illustrationList" :key="item" alt="">
|
<img :src="item?.imgUrl" v-for="item in illustrationList" :key="item" alt="">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="box">
|
<div class="box">
|
||||||
<div class="title">Product</div>
|
<div class="title">{{ $t('digitalDetail.Product') }}</div>
|
||||||
<div class="imgBox">
|
<div class="imgBox">
|
||||||
<img :src="item?.imgUrl" v-for="item in productList" :key="item" alt="">
|
<img :src="item?.imgUrl" v-for="item in productList" :key="item" alt="">
|
||||||
</div>
|
</div>
|
||||||
@@ -109,7 +126,7 @@ defineExpose({})
|
|||||||
</div>
|
</div>
|
||||||
<div class="bottom">
|
<div class="bottom">
|
||||||
<div class="box aa">
|
<div class="box aa">
|
||||||
<div class="title">Editorial Visual</div>
|
<div class="title">{{ $t('digitalDetail.EditorialVisual') }}</div>
|
||||||
<div class="imgBox">
|
<div class="imgBox">
|
||||||
<img :src="item?.gif||item?.imgUrl" v-for="item in editorialVisualList" :key="item" alt="">
|
<img :src="item?.gif||item?.imgUrl" v-for="item in editorialVisualList" :key="item" alt="">
|
||||||
</div>
|
</div>
|
||||||
@@ -122,7 +139,7 @@ defineExpose({})
|
|||||||
<div class="icon">
|
<div class="icon">
|
||||||
<svg-icon name="digital-back" size="28"></svg-icon>
|
<svg-icon name="digital-back" size="28"></svg-icon>
|
||||||
</div>
|
</div>
|
||||||
<span>Back</span>
|
<span>{{ $t('digitalDetail.Back') }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="img-info">
|
<div class="img-info">
|
||||||
<div class="img-type">{{ detail.designFor?.toUpperCase() || ''}} / {{ detail.productCategory?.join(',')?.toUpperCase() || '' }}</div>
|
<div class="img-type">{{ detail.designFor?.toUpperCase() || ''}} / {{ detail.productCategory?.join(',')?.toUpperCase() || '' }}</div>
|
||||||
@@ -133,9 +150,9 @@ defineExpose({})
|
|||||||
<div class="info">
|
<div class="info">
|
||||||
<img class="profile" v-avatarLoad="detail.avatar" alt="">
|
<img class="profile" v-avatarLoad="detail.avatar" alt="">
|
||||||
<div class="detail">
|
<div class="detail">
|
||||||
<div class="name">{{ detail.shopName }}</div>
|
<div class="name" @click="gobrand">{{ detail.shopName }}</div>
|
||||||
<div class="release-time">
|
<div class="release-time">
|
||||||
<span>Release in {{ detail.updateTime }}</span>
|
<span>{{ $t('digitalDetail.ReleaseIn') }} {{ detail.updateTime }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -144,26 +161,26 @@ defineExpose({})
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="notice">
|
<div class="notice">
|
||||||
<div class="title">Copyright & License Notice</div>
|
<div class="title">{{ $t('digitalDetail.CopyrightLicenseNotice') }}</div>
|
||||||
<div class="conter">
|
<div class="conter">
|
||||||
<div class="contet-title">
|
<div class="contet-title">
|
||||||
<div class="icon">
|
<div class="icon">
|
||||||
<svg-icon name="digital-Info" size="24"></svg-icon>
|
<svg-icon name="digital-Info" size="24"></svg-icon>
|
||||||
</div>
|
</div>
|
||||||
<span>License Included in Asset</span>
|
<span>{{ $t('digitalDetail.LicenseIncludedInAsset') }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="info">
|
<div class="info">
|
||||||
All products on this platform are digital assets, not physical goods. Purchase grants a usage license only; copyright and intellectual property rights remain with the original creator, unless otherwise stated.
|
{{ $t('digitalDetail.LicenseIncludedInAssetInfo') }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="button">
|
<div class="button">
|
||||||
<div class="buy-now" @click="goShopping">Buy Now</div>
|
<div class="buy-now" @click="goShopping">{{ $t('digitalDetail.BuyNow') }}</div>
|
||||||
<div class="add-cart" @click="addShopping()">
|
<div class="add-cart" @click="addShopping()">
|
||||||
<div class="icon">
|
<div class="icon">
|
||||||
<svg-icon name="cart_0" size="24"></svg-icon>
|
<svg-icon name="cart_0" size="24"></svg-icon>
|
||||||
</div>
|
</div>
|
||||||
Add to Cart
|
{{ $t('digitalDetail.AddToCart') }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -320,6 +337,7 @@ defineExpose({})
|
|||||||
font-size: 1.8rem;
|
font-size: 1.8rem;
|
||||||
line-height: 100%;
|
line-height: 100%;
|
||||||
margin-bottom: .8rem;
|
margin-bottom: .8rem;
|
||||||
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
.release-time{
|
.release-time{
|
||||||
font-family: KaiseiOpti-Regular;
|
font-family: KaiseiOpti-Regular;
|
||||||
|
|||||||
@@ -5,6 +5,10 @@ import MerchantInfo from "./merchant-info.vue";
|
|||||||
import { useRouter } from "vue-router";
|
import { useRouter } from "vue-router";
|
||||||
import scListNull from '@/views/shoppingCart/sc-list-null.vue'
|
import scListNull from '@/views/shoppingCart/sc-list-null.vue'
|
||||||
import { useI18n } from 'vue-i18n'
|
import { useI18n } from 'vue-i18n'
|
||||||
|
import { AddShoppingCart } from '@/api/shoppingCart'
|
||||||
|
import { ElMessage } from 'element-plus'
|
||||||
|
import myEvent from '@/utils/myEvent'
|
||||||
|
|
||||||
|
|
||||||
// 定义组件名称
|
// 定义组件名称
|
||||||
defineOptions({
|
defineOptions({
|
||||||
@@ -36,7 +40,13 @@ const searechTypeList = ref([
|
|||||||
])
|
])
|
||||||
|
|
||||||
const searechType = ref('updateTime')
|
const searechType = ref('updateTime')
|
||||||
const addShopping = (item) => {}
|
const addShopping = (item) => {
|
||||||
|
console.log(item)
|
||||||
|
if(!item.price) return ElMessage.warning(t('brandDetail.addShoppingTip'))
|
||||||
|
AddShoppingCart({listingIds:[item.id]}).then((res)=>{
|
||||||
|
myEvent.emit('addShopping', item)
|
||||||
|
})
|
||||||
|
}
|
||||||
const openDetail = (item) => {
|
const openDetail = (item) => {
|
||||||
scrollTop.value = digitalItemRef.value.scrollTop
|
scrollTop.value = digitalItemRef.value.scrollTop
|
||||||
router.push({
|
router.push({
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<div class="home-index">
|
<div class="home-index">
|
||||||
<section-index />
|
<section-index />
|
||||||
<section-designer />
|
<section-designer />
|
||||||
<section-design />
|
<section-aida />
|
||||||
<section-digital-items1 />
|
<section-digital-items1 />
|
||||||
<section-digital-items2 />
|
<section-digital-items2 />
|
||||||
<section-footer />
|
<section-footer />
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
import { computed } from 'vue'
|
import { computed } from 'vue'
|
||||||
import SectionIndex from './section-index.vue'
|
import SectionIndex from './section-index.vue'
|
||||||
import SectionDesigner from './section-designer.vue'
|
import SectionDesigner from './section-designer.vue'
|
||||||
import SectionDesign from './section-design.vue'
|
import SectionAida from './section-aida.vue'
|
||||||
import SectionDigitalItems1 from './section-digital-items1.vue'
|
import SectionDigitalItems1 from './section-digital-items1.vue'
|
||||||
import SectionDigitalItems2 from './section-digital-items2.vue'
|
import SectionDigitalItems2 from './section-digital-items2.vue'
|
||||||
import SectionFooter from './section-footer.vue'
|
import SectionFooter from './section-footer.vue'
|
||||||
|
|||||||
@@ -1,24 +1,25 @@
|
|||||||
<template>
|
<template>
|
||||||
<section class="section-design bgw">
|
<section class="section-aida bgw">
|
||||||
<img src="@/assets/images/home/design-bg.jpg" class="bg" />
|
<img src="@/assets/images/home/aida-bg.jpg" class="bg" />
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<div class="aida-logo"><img src="@/assets/images/logos/aida.png" /></div>
|
<div class="aida-logo"><img src="@/assets/images/logos/aida.png" /></div>
|
||||||
<div class="title">Design with AiDA</div>
|
<div class="title">Design with AiDA</div>
|
||||||
<div class="tip">
|
<div class="tip">
|
||||||
Each garment on this platform is where designer vision blooms through AiDA. A tool that
|
Each garment on this platform is where designer vision blooms through AiDA. A tool
|
||||||
nurtures your creativity, never overshadows it. Let your ideas flourish.
|
that nurtures your creativity, never overshadows it. Let your ideas flourish.
|
||||||
</div>
|
</div>
|
||||||
<button custom>Try Now</button>
|
<button custom @click="openAida">Try Now</button>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { computed, ref } from 'vue'
|
import { computed, ref } from 'vue'
|
||||||
|
import { openAida } from '@/utils/tools'
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="less">
|
<style lang="less">
|
||||||
.section-design {
|
.section-aida {
|
||||||
> .content {
|
> .content {
|
||||||
width: 55rem;
|
width: 55rem;
|
||||||
top: 12rem;
|
top: 12rem;
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
<br />
|
<br />
|
||||||
digital visions—a virtual realm where creativity collides and evolves.
|
digital visions—a virtual realm where creativity collides and evolves.
|
||||||
</div>
|
</div>
|
||||||
<button custom="black">Shop All</button>
|
<button custom="black" @click="onShopAll">Shop All</button>
|
||||||
<div class="list">
|
<div class="list">
|
||||||
<div v-for="v in list" :key="v.url">
|
<div v-for="v in list" :key="v.url">
|
||||||
<img :src="v.url" alt="" />
|
<img :src="v.url" alt="" />
|
||||||
@@ -22,6 +22,9 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { computed, ref } from 'vue'
|
import { computed, ref } from 'vue'
|
||||||
|
import { useRouter } from 'vue-router'
|
||||||
|
const router = useRouter()
|
||||||
|
|
||||||
const list = ref([
|
const list = ref([
|
||||||
{
|
{
|
||||||
title: 'Women’s Itemk',
|
title: 'Women’s Itemk',
|
||||||
@@ -44,6 +47,9 @@
|
|||||||
url: 'http://118.31.39.42:3000/falls/digital-items-4.png'
|
url: 'http://118.31.39.42:3000/falls/digital-items-4.png'
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
|
const onShopAll = () => {
|
||||||
|
router.push({ name: 'digitalItem' })
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="less">
|
<style lang="less">
|
||||||
|
|||||||
@@ -8,11 +8,11 @@
|
|||||||
<img src="@/assets/images/logos/aida-black.png" />
|
<img src="@/assets/images/logos/aida-black.png" />
|
||||||
</div>
|
</div>
|
||||||
<div class="tip">
|
<div class="tip">
|
||||||
Stylish Parade is a commerce platform for designers, serving as AiDA's commercial
|
Stylish Parade is a commerce platform for designers, serving as AiDA's
|
||||||
extension.
|
commercial extension.
|
||||||
</div>
|
</div>
|
||||||
<div class="link">
|
<div class="link">
|
||||||
<span class="text">Bloom your Creativity with AiDA!</span>
|
<span class="text" @click="openAida">Bloom your Creativity with AiDA!</span>
|
||||||
<span class="icon"><svg-icon name="arrow_right" size="12" /></span>
|
<span class="icon"><svg-icon name="arrow_right" size="12" /></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -54,6 +54,9 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { computed, ref } from 'vue'
|
import { computed, ref } from 'vue'
|
||||||
|
import { openAida } from '@/utils/tools'
|
||||||
|
import { useRouter } from 'vue-router'
|
||||||
|
const router = useRouter()
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="less">
|
<style lang="less">
|
||||||
|
|||||||
@@ -14,26 +14,28 @@
|
|||||||
<div class="close" @click="show = false"><svg-icon name="close" /></div>
|
<div class="close" @click="show = false"><svg-icon name="close" /></div>
|
||||||
<div class="content" v-if="curentTabInfo">
|
<div class="content" v-if="curentTabInfo">
|
||||||
<div class="header">
|
<div class="header">
|
||||||
<div class="title" v-show="curentTabInfo.title">
|
<div class="title" v-if="curentTabInfo.title">
|
||||||
<div class="icon" @click="onBack"><svg-icon name="back" size="17" /></div>
|
<div class="icon" @click="onBack"><svg-icon name="back" size="17" /></div>
|
||||||
<div class="label">{{ curentTabInfo.title }}</div>
|
<div class="label">{{ $t(curentTabInfo.title) }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="nav" v-show="!curentTabInfo.title">
|
<div class="nav" v-show="!curentTabInfo.title">
|
||||||
<div
|
<div
|
||||||
class="item"
|
class="item"
|
||||||
:class="{
|
:class="{
|
||||||
active: [TabNames.register, TabNames.register_success].includes(currentTab)
|
active: [TabNames.register, TabNames.register_success].includes(
|
||||||
|
currentTab
|
||||||
|
)
|
||||||
}"
|
}"
|
||||||
@click="currentTab = TabNames.register"
|
@click="currentTab = TabNames.register"
|
||||||
>
|
>
|
||||||
SIGN UP
|
{{ $t('Login.signup') }}
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="item"
|
class="item"
|
||||||
:class="{ active: currentTab === TabNames.login }"
|
:class="{ active: currentTab === TabNames.login }"
|
||||||
@click="currentTab = TabNames.login"
|
@click="currentTab = TabNames.login"
|
||||||
>
|
>
|
||||||
LOG IN
|
{{ $t('Login.login') }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -70,6 +72,8 @@
|
|||||||
import retrievePassword from './retrieve-password.vue'
|
import retrievePassword from './retrieve-password.vue'
|
||||||
import myEvent from '@/utils/myEvent'
|
import myEvent from '@/utils/myEvent'
|
||||||
import { useUserInfoStore } from '@/stores/userInfo'
|
import { useUserInfoStore } from '@/stores/userInfo'
|
||||||
|
import { useRouter } from 'vue-router'
|
||||||
|
const router = useRouter()
|
||||||
const userStore = useUserInfoStore()
|
const userStore = useUserInfoStore()
|
||||||
const data = ref({
|
const data = ref({
|
||||||
name: '',
|
name: '',
|
||||||
@@ -95,12 +99,12 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: TabNames.email_verify,
|
name: TabNames.email_verify,
|
||||||
title: 'EMAIL VERIFICATION',
|
title: 'Login.emailVerification',
|
||||||
component: emailVerify
|
component: emailVerify
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: TabNames.retrieve_password,
|
name: TabNames.retrieve_password,
|
||||||
title: 'RETRIEVE PASSWORD',
|
title: 'Login.retrievePassword',
|
||||||
component: retrievePassword
|
component: retrievePassword
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -157,6 +161,9 @@
|
|||||||
AccountLogin(value).then((v) => {
|
AccountLogin(value).then((v) => {
|
||||||
userStore.setUserInfo(v)
|
userStore.setUserInfo(v)
|
||||||
show.value = false
|
show.value = false
|
||||||
|
setTimeout(() => {
|
||||||
|
router.go(0)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
value['username'] = data.value.name
|
value['username'] = data.value.name
|
||||||
@@ -244,6 +251,7 @@
|
|||||||
font-size: 2rem;
|
font-size: 2rem;
|
||||||
font-family: KaiseiOpti-Regular;
|
font-family: KaiseiOpti-Regular;
|
||||||
color: #9f9f9f;
|
color: #9f9f9f;
|
||||||
|
text-transform: uppercase;
|
||||||
&.active {
|
&.active {
|
||||||
font-family: KaiseiOpti-Bold;
|
font-family: KaiseiOpti-Bold;
|
||||||
color: #232323;
|
color: #232323;
|
||||||
@@ -273,6 +281,7 @@
|
|||||||
font-family: KaiseiOpti-Bold;
|
font-family: KaiseiOpti-Bold;
|
||||||
font-size: 2rem;
|
font-size: 2rem;
|
||||||
color: #232323;
|
color: #232323;
|
||||||
|
text-transform: uppercase;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,31 +1,25 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="register-success">
|
<div class="register-success">
|
||||||
<div class="icon"><svg-icon name="dui" size="20" /></div>
|
<div class="icon"><svg-icon name="dui" size="20" /></div>
|
||||||
<div class="title">Welcome to Stylish Parade!</div>
|
<div class="title">{{ t('RegisterSuccess.title1') }}</div>
|
||||||
<div class="title">Please switch to the Login tab to log in.</div>
|
<div class="title">{{ t('RegisterSuccess.title2') }}</div>
|
||||||
<div class="footer">
|
<div class="footer">
|
||||||
<div class="title">
|
<div class="title">
|
||||||
<span class="text">What awaits you in Stylish Parade</span>
|
<span class="text">{{ t('RegisterSuccess.title3') }}</span>
|
||||||
<span class="icon"><svg-icon name="arrow_right" size="11" /></span>
|
<span class="icon"><svg-icon name="arrow_right" size="11" /></span>
|
||||||
</div>
|
</div>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<div>
|
<div>
|
||||||
<div class="title">Behind the design</div>
|
<div class="title">{{ t('RegisterSuccess.item1title') }}</div>
|
||||||
<div class="tip">
|
<div class="tip">{{ t('RegisterSuccess.item1tip') }}</div>
|
||||||
Discover how designers bring ideas to life with AiDA — from first sketch to final look.
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<div class="title">Creative digital works</div>
|
<div class="title">{{ t('RegisterSuccess.item2title') }}</div>
|
||||||
<div class="tip">
|
<div class="tip">{{ t('RegisterSuccess.item2tip') }}</div>
|
||||||
Unlock a growing library of inspiring digital works to refresh your creative mind.
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<div class="title">A fashion community</div>
|
<div class="title">{{ t('RegisterSuccess.item3title') }}</div>
|
||||||
<div class="tip">
|
<div class="tip">{{ t('RegisterSuccess.item3tip') }}</div>
|
||||||
Join a space where fashion speaks — exchange ideas and connect with creators worldwide.
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
|
|
||||||
<div class="password-warning">
|
<div class="password-warning">
|
||||||
<span class="icon"><svg-icon name="warning" size="12" /></span>
|
<span class="icon"><svg-icon name="warning" size="12" /></span>
|
||||||
<span class="label">You must satisfy ALL password conditions to register.</span>
|
<span class="label">{{ $t('Login.passwordTip') }}</span>
|
||||||
</div>
|
</div>
|
||||||
<el-form-item :label="$t('Login.email')" prop="email">
|
<el-form-item :label="$t('Login.email')" prop="email">
|
||||||
<el-input name="email" v-model="formData.email" :placeholder="$t('Login.enterEmail')" />
|
<el-input name="email" v-model="formData.email" :placeholder="$t('Login.enterEmail')" />
|
||||||
|
|||||||
@@ -7,13 +7,17 @@
|
|||||||
ref="form1Ref"
|
ref="form1Ref"
|
||||||
v-show="index === 0"
|
v-show="index === 0"
|
||||||
>
|
>
|
||||||
<div class="title">Please enter your email address below to verify your identity.</div>
|
<div class="title">{{ $t('Login.retrievePasswordTitle') }}</div>
|
||||||
<el-form-item :label="$t('Login.email')" prop="email">
|
<el-form-item :label="$t('Login.email')" prop="email">
|
||||||
<el-input v-model="formData.email" :placeholder="$t('Login.enterEmail')" name="email" />
|
<el-input
|
||||||
|
v-model="formData.email"
|
||||||
|
:placeholder="$t('Login.enterEmail')"
|
||||||
|
name="email"
|
||||||
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item class="submit-item">
|
<el-form-item class="submit-item">
|
||||||
<button class="submit" type="submit" custom="black" @click.prevent="onSubmit1">
|
<button class="submit" type="submit" custom="black" @click.prevent="onSubmit1">
|
||||||
SUBMIT
|
{{ $t('Login.submit') }}
|
||||||
</button>
|
</button>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
@@ -32,10 +36,10 @@
|
|||||||
ref="form2Ref"
|
ref="form2Ref"
|
||||||
v-show="index === 2"
|
v-show="index === 2"
|
||||||
>
|
>
|
||||||
<div class="title">
|
<div
|
||||||
Enter a new password for <br />
|
class="title"
|
||||||
<span>{{ formData.email }}</span>
|
v-html="$t('Login.enterNewPassword', { email: formData.email })"
|
||||||
</div>
|
></div>
|
||||||
<el-form-item :label="$t('Login.password')" prop="password">
|
<el-form-item :label="$t('Login.password')" prop="password">
|
||||||
<password-tip :value="formData.password" v-show="showPasswordTip" />
|
<password-tip :value="formData.password" v-show="showPasswordTip" />
|
||||||
<el-input
|
<el-input
|
||||||
@@ -50,7 +54,7 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
<div class="password-warning">
|
<div class="password-warning">
|
||||||
<span class="icon"><svg-icon name="warning" size="12" /></span>
|
<span class="icon"><svg-icon name="warning" size="12" /></span>
|
||||||
<span class="label">You must satisfy ALL password conditions to register.</span>
|
<span class="label">{{ $t('Login.passwordTip') }}</span>
|
||||||
</div>
|
</div>
|
||||||
<el-form-item :label="$t('Login.passwordConfirmation')" prop="confirmPassword">
|
<el-form-item :label="$t('Login.passwordConfirmation')" prop="confirmPassword">
|
||||||
<el-input
|
<el-input
|
||||||
@@ -63,7 +67,7 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item class="submit-item">
|
<el-form-item class="submit-item">
|
||||||
<button class="submit" type="submit" custom="black" @click.prevent="onSubmit2">
|
<button class="submit" type="submit" custom="black" @click.prevent="onSubmit2">
|
||||||
SUBMIT
|
{{ $t('Login.submit') }}
|
||||||
</button>
|
</button>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
@@ -77,10 +81,12 @@
|
|||||||
import { validateEmail, validatePass } from './tools'
|
import { validateEmail, validatePass } from './tools'
|
||||||
import PasswordTip from './password-tip.vue'
|
import PasswordTip from './password-tip.vue'
|
||||||
import EmailVerify from './email-verify.vue'
|
import EmailVerify from './email-verify.vue'
|
||||||
|
import { useI18n } from 'vue-i18n'
|
||||||
|
const { t } = useI18n()
|
||||||
const emit = defineEmits(['back'])
|
const emit = defineEmits(['back'])
|
||||||
const validateConfirmPassword = (rule: any, value: string, callback: any) => {
|
const validateConfirmPassword = (rule: any, value: string, callback: any) => {
|
||||||
if (value !== formData.password) {
|
if (value !== formData.password) {
|
||||||
callback(new Error('Passwords do not match'))
|
callback(new Error(t('Login.passwordsDoNotMatch')))
|
||||||
} else {
|
} else {
|
||||||
callback()
|
callback()
|
||||||
}
|
}
|
||||||
@@ -158,6 +164,9 @@
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
.el-form-item.submit-item {
|
.el-form-item.submit-item {
|
||||||
margin-top: auto;
|
margin-top: auto;
|
||||||
|
.submit {
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.el-input {
|
.el-input {
|
||||||
--el-input-height: 4.8rem;
|
--el-input-height: 4.8rem;
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
}"
|
}"
|
||||||
@click="onNavItemClick(v.path)"
|
@click="onNavItemClick(v.path)"
|
||||||
>
|
>
|
||||||
<span>{{ v.name }}</span>
|
<span>{{ $t(v.name) }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="right">
|
<div class="right">
|
||||||
@@ -46,30 +46,32 @@
|
|||||||
<img src="@/assets/images/profile-content-bg.jpg" alt="" />
|
<img src="@/assets/images/profile-content-bg.jpg" alt="" />
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<div class="profile"></div>
|
<div class="profile"></div>
|
||||||
<div class="name">Hi, {{ userInfo.username }}</div>
|
<div class="name">
|
||||||
|
{{ $t('MainHeader.HiName', { name: userInfo.username }) }}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="nav-item" @click="onMyWardrobe">
|
<div class="nav-item" @click="onMyWardrobe">
|
||||||
<div class="icon"><svg-icon name="my_wardrobe" size="18" /></div>
|
<div class="icon"><svg-icon name="my_wardrobe" size="18" /></div>
|
||||||
<div class="label">My Wardrobe</div>
|
<div class="label">{{ $t('MainHeader.MyWardrobe') }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="nav-item" @click="onNotifications">
|
<div class="nav-item" @click="onNotifications">
|
||||||
<div class="icon"><svg-icon name="notifications" size="14" /></div>
|
<div class="icon"><svg-icon name="notifications" size="14" /></div>
|
||||||
<div class="label">Notifications</div>
|
<div class="label">{{ $t('MainHeader.Notifications') }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="nav-item" @click="onSettings">
|
<div class="nav-item" @click="onSettings">
|
||||||
<div class="icon"><svg-icon name="settings" size="16" /></div>
|
<div class="icon"><svg-icon name="settings" size="16" /></div>
|
||||||
<div class="label">Settings</div>
|
<div class="label">{{ $t('MainHeader.Settings') }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="hr"></div>
|
<div class="hr"></div>
|
||||||
<div class="nav-item logout" @click="onLogout">
|
<div class="nav-item logout" @click="onLogout">
|
||||||
<div class="icon"><svg-icon name="logout" size="20" /></div>
|
<div class="icon"><svg-icon name="logout" size="20" /></div>
|
||||||
<div class="label">Log off</div>
|
<div class="label">{{ $t('Login.logoff') }}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-popover>
|
</el-popover>
|
||||||
<div class="login" @click="onLogin" v-else>Login</div>
|
<div class="login" @click="onLogin" v-else>{{ $t('Login.login') }}</div>
|
||||||
<div class="language" @click="onLanguageClick">
|
<div class="language" @click="onLanguageClick">
|
||||||
<span :class="{ active: locale === 'CHINESE_SIMPLIFIED' }">中</span> /
|
<span :class="{ active: locale === 'CHINESE_SIMPLIFIED' }">中</span> /
|
||||||
<span :class="{ active: locale === 'ENGLISH' }">ENG</span>
|
<span :class="{ active: locale === 'ENGLISH' }">ENG</span>
|
||||||
@@ -93,19 +95,19 @@
|
|||||||
const activePath = computed(() => route.path)
|
const activePath = computed(() => route.path)
|
||||||
const navList1 = ref([
|
const navList1 = ref([
|
||||||
{
|
{
|
||||||
name: 'Home',
|
name: 'MainHeader.Home',
|
||||||
path: '/'
|
path: '/'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Collection Story',
|
name: 'MainHeader.CollectionStory',
|
||||||
path: '/collectionStory'
|
path: '/collectionStory'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Brand',
|
name: 'MainHeader.Brand',
|
||||||
path: '/brand'
|
path: '/brand'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Digital Item',
|
name: 'MainHeader.DigitalItem',
|
||||||
path: '/digitalItem'
|
path: '/digitalItem'
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
@@ -142,7 +144,7 @@
|
|||||||
}
|
}
|
||||||
const onLogout = () => {
|
const onLogout = () => {
|
||||||
hideProfilePopover()
|
hideProfilePopover()
|
||||||
ElMessageBox.confirm('Are you sure to log off?')
|
ElMessageBox.confirm(t('Login.logOffTip'))
|
||||||
.then(() => {
|
.then(() => {
|
||||||
userInfoStore.logout(true)
|
userInfoStore.logout(true)
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ const {} = toRefs(data);
|
|||||||
<el-drawer v-model="isShoppingShow" width="50rem" class="addShoppingDrawer" :close-on-click-modal="false" title="I am the title" :with-header="false">
|
<el-drawer v-model="isShoppingShow" width="50rem" class="addShoppingDrawer" :close-on-click-modal="false" title="I am the title" :with-header="false">
|
||||||
<div class="addShoppingInfo">
|
<div class="addShoppingInfo">
|
||||||
<div class="header">
|
<div class="header">
|
||||||
<div class="title">Added to your Shopping Cart</div>
|
<div class="title">{{ $t('addShoppingCart.title') }}</div>
|
||||||
<span class="close" @click="shoppingClose"
|
<span class="close" @click="shoppingClose"
|
||||||
><svg-icon name="close" size="13"
|
><svg-icon name="close" size="13"
|
||||||
/></span>
|
/></span>
|
||||||
@@ -76,11 +76,11 @@ const {} = toRefs(data);
|
|||||||
<div class="icon">
|
<div class="icon">
|
||||||
<SvgIcon name="statement" size="16.6" />
|
<SvgIcon name="statement" size="16.6" />
|
||||||
</div>
|
</div>
|
||||||
Digital Assets Only. No physical product included.
|
{{ $t('addShoppingCart.statement') }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="button" @click="goShopping">
|
<div class="button" @click="goShopping">
|
||||||
SeE Shopping Cart
|
{{ $t('addShoppingCart.button') }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- <sc-list is-mini style="flex: 0.6;" @close="shoppingClose"/> -->
|
<!-- <sc-list is-mini style="flex: 0.6;" @close="shoppingClose"/> -->
|
||||||
|
|||||||
@@ -1,33 +1,35 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="order-summary">
|
<div class="order-summary">
|
||||||
<div class="title">Order Summary</div>
|
<div class="title">{{ $t('ShoppingCart.orderSummary') }}</div>
|
||||||
<div class="count">
|
<div class="count">
|
||||||
<span class="label">Selected</span>
|
<span class="label">{{ $t('ShoppingCart.selected') }}</span>
|
||||||
<span class="value">{{ brandsList.length }}</span>
|
<span class="value">{{ brandsList.length }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="hr"></div>
|
<div class="hr"></div>
|
||||||
<div class="brands-header">
|
<div class="brands-header">
|
||||||
<span class="icon"><svg-icon name="order-shop" size="24" /></span>
|
<span class="icon"><svg-icon name="order-shop" size="24" /></span>
|
||||||
<span class="text">Brands</span>
|
<span class="text">{{ $t('ShoppingCart.brands') }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="brands-item" v-for="v in brandsList" :key="v.brand">
|
<div class="brands-item" v-for="v in brandsList" :key="v.brand">
|
||||||
<span class="label">{{ v.brand }}</span>
|
<span class="label">{{ v.brand }}</span>
|
||||||
<span class="value"
|
<span class="value"
|
||||||
><span>{{ v.children.length }}</span
|
><span>{{ v.children.length }}</span
|
||||||
>item</span
|
>{{ $t('ShoppingCart.item') }}</span
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
<br />
|
<br />
|
||||||
<br />
|
<br />
|
||||||
<div class="total">
|
<div class="total">
|
||||||
<span class="label">Total</span>
|
<span class="label">{{ $t('ShoppingCart.total') }}</span>
|
||||||
<span class="value"
|
<span class="value"
|
||||||
><span>${{ totalAmount }}</span> HKD</span
|
><span>${{ totalAmount }}</span> HKD</span
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
<div class="hr"></div>
|
<div class="hr"></div>
|
||||||
<button class="checkout-btn" custom="black" @click="handleCheckout">CHECKOUT SELECTED</button>
|
<button class="checkout-btn" custom="black" @click="handleCheckout">
|
||||||
<div class="tip">Digital assets. Creator retains copyright.</div>
|
{{ $t('ShoppingCart.checkoutSelected') }}
|
||||||
|
</button>
|
||||||
|
<div class="tip">{{ $t('ShoppingCart.digitalAssets') }}</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -162,6 +164,7 @@
|
|||||||
> .checkout-btn {
|
> .checkout-btn {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
margin-top: 3rem;
|
margin-top: 3rem;
|
||||||
|
text-transform: uppercase;
|
||||||
}
|
}
|
||||||
> .tip {
|
> .tip {
|
||||||
margin-top: 1rem;
|
margin-top: 1rem;
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
<img :src="info.cover" />
|
<img :src="info.cover" />
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<div class="title">{{ info.title }}</div>
|
<div class="title">{{ info.title }}</div>
|
||||||
<div class="brand" v-if="showBrand">
|
<div class="brand" v-if="showBrand" @click="handleBrandClick">
|
||||||
<span class="icon"><svg-icon name="order-shop" size="24" /></span>
|
<span class="icon"><svg-icon name="order-shop" size="24" /></span>
|
||||||
<span class="text">{{ info.brand }}</span>
|
<span class="text">{{ info.brand }}</span>
|
||||||
</div>
|
</div>
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="date" v-if="showDate">
|
<div class="date" v-if="showDate">
|
||||||
<div class="text">
|
<div class="text">
|
||||||
{{ FormatDate(info.date, 'SM D, YYYY, h:mm A') }}
|
{{ FormatDate(info.date, $t('ShoppingCart.dateTimeFormat')) }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -27,9 +27,9 @@
|
|||||||
<div class="unshelve" v-show="disabled">
|
<div class="unshelve" v-show="disabled">
|
||||||
<div class="title">
|
<div class="title">
|
||||||
<span><svg-icon name="order-warning" size="20" /></span>
|
<span><svg-icon name="order-warning" size="20" /></span>
|
||||||
No Longer Available
|
{{ $t('ShoppingCart.noLongerAvailable') }}
|
||||||
</div>
|
</div>
|
||||||
<div class="tip">Delisted from marketplace</div>
|
<div class="tip">{{ $t('ShoppingCart.delistedFromMarketplace') }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="amount" v-show="!disabled">${{ info.amount }}<span> HKD</span></div>
|
<div class="amount" v-show="!disabled">${{ info.amount }}<span> HKD</span></div>
|
||||||
<SvgIcon
|
<SvgIcon
|
||||||
@@ -41,7 +41,7 @@
|
|||||||
/>
|
/>
|
||||||
<div class="remove" v-if="showRemove" @click="onRemove">
|
<div class="remove" v-if="showRemove" @click="onRemove">
|
||||||
<span class="icon"><svg-icon name="order-delete" size="18" /></span>
|
<span class="icon"><svg-icon name="order-delete" size="18" /></span>
|
||||||
<span class="text">Remove</span>
|
<span class="text">{{ $t('ShoppingCart.remove') }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -49,7 +49,9 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { computed, ref, onMounted } from 'vue'
|
import { computed, ref, onMounted } from 'vue'
|
||||||
import { FormatBytes, FormatDate } from '@/utils/tools'
|
import { FormatDate } from '@/utils/tools'
|
||||||
|
import { useRouter } from 'vue-router'
|
||||||
|
const router = useRouter()
|
||||||
const emit = defineEmits(['remove'])
|
const emit = defineEmits(['remove'])
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
showTags: { type: Boolean, default: true },
|
showTags: { type: Boolean, default: true },
|
||||||
@@ -67,6 +69,7 @@
|
|||||||
date: string
|
date: string
|
||||||
amount: number
|
amount: number
|
||||||
cover: string
|
cover: string
|
||||||
|
sellerId: string
|
||||||
},
|
},
|
||||||
default: () => {}
|
default: () => {}
|
||||||
},
|
},
|
||||||
@@ -79,6 +82,12 @@
|
|||||||
const showDownload = computed(() => {
|
const showDownload = computed(() => {
|
||||||
return props.isOrder ? props.info.status === 1 : props.orderActionsLayout
|
return props.isOrder ? props.info.status === 1 : props.orderActionsLayout
|
||||||
})
|
})
|
||||||
|
const handleBrandClick = () => {
|
||||||
|
router.push({
|
||||||
|
name: 'brand',
|
||||||
|
params: { id: props.info.sellerId }
|
||||||
|
})
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="less" scoped>
|
<style lang="less" scoped>
|
||||||
@@ -111,6 +120,7 @@
|
|||||||
> .brand {
|
> .brand {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
cursor: pointer;
|
||||||
> .icon {
|
> .icon {
|
||||||
width: 2.4rem;
|
width: 2.4rem;
|
||||||
height: 2.4rem;
|
height: 2.4rem;
|
||||||
|
|||||||
@@ -4,7 +4,9 @@
|
|||||||
<img v-else-if="nullImage === 'brand'" src="@/assets/images/brand-null.png" />
|
<img v-else-if="nullImage === 'brand'" src="@/assets/images/brand-null.png" />
|
||||||
<div class="title">{{ title }}</div>
|
<div class="title">{{ title }}</div>
|
||||||
<div class="tip">{{ tip }}</div>
|
<div class="tip">{{ tip }}</div>
|
||||||
<button custom v-show="showButton" @click="handleClick">{{ buttonText }}</button>
|
<button custom v-show="showButton" @click="handleClick">
|
||||||
|
{{ buttonText || $t('ShoppingCart.exploreDigitalItems') }}
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -15,11 +17,10 @@
|
|||||||
title: { type: String, default: '' },
|
title: { type: String, default: '' },
|
||||||
tip: { type: String, default: '' },
|
tip: { type: String, default: '' },
|
||||||
showButton: { type: Boolean, default: true },
|
showButton: { type: Boolean, default: true },
|
||||||
buttonText: { type: String, default: 'EXPLORE DIGITAL ITEMS' }
|
buttonText: { type: String, default: '' }
|
||||||
})
|
})
|
||||||
const emit = defineEmits(['explore'])
|
const emit = defineEmits(['explore'])
|
||||||
const handleClick = () => {
|
const handleClick = () => {
|
||||||
console.log('emit("explore")')
|
|
||||||
emit('explore')
|
emit('explore')
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
@@ -59,6 +60,7 @@
|
|||||||
font-size: 1.6rem;
|
font-size: 1.6rem;
|
||||||
color: #979797;
|
color: #979797;
|
||||||
margin-top: 3rem;
|
margin-top: 3rem;
|
||||||
|
text-transform: uppercase;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
<div class="sc-list" :class="{ mini: isMini, view: isView }">
|
<div class="sc-list" :class="{ mini: isMini, view: isView }">
|
||||||
<div class="header">
|
<div class="header">
|
||||||
<div class="title">
|
<div class="title">
|
||||||
<span class="text">{{ title || 'Shopping Cart' }}</span>
|
<span class="text">{{ title || $t('ShoppingCart.title') }}</span>
|
||||||
<span class="close" v-if="isMini && !isView" @click="onClose"
|
<span class="close" v-if="isMini && !isView" @click="onClose"
|
||||||
><svg-icon name="close" size="13"
|
><svg-icon name="close" size="13"
|
||||||
/></span>
|
/></span>
|
||||||
@@ -15,22 +15,32 @@
|
|||||||
:indeterminate="selectedCount === 0 ? false : selectedCount < maxLength"
|
:indeterminate="selectedCount === 0 ? false : selectedCount < maxLength"
|
||||||
@click="handleAllAllClick"
|
@click="handleAllAllClick"
|
||||||
/>
|
/>
|
||||||
<span class="count">{{ selectedCount }} Selected</span>
|
<span class="count">{{
|
||||||
|
$t('Wardrobe.assets.selectedCount', { count: selectedCount })
|
||||||
|
}}</span>
|
||||||
<div class="hr"></div>
|
<div class="hr"></div>
|
||||||
<div class="btn" @click="handleAllAllClick(true)">Select All</div>
|
<div class="btn" @click="handleAllAllClick(true)">
|
||||||
<div class="btn" @click="handleAllAllClick(false)">Deselect All</div>
|
{{ $t('Wardrobe.assets.selectAll') }}
|
||||||
|
</div>
|
||||||
|
<div class="btn" @click="handleAllAllClick(false)">
|
||||||
|
{{ $t('Wardrobe.assets.deselectAll') }}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="right">
|
<div class="right">
|
||||||
<el-select v-model="sortBy" placeholder="Sort By" :teleported="false">
|
<el-select
|
||||||
|
v-model="sortBy"
|
||||||
|
:placeholder="$t('Wardrobe.sort.label')"
|
||||||
|
:teleported="false"
|
||||||
|
>
|
||||||
<template #label="{ label }">
|
<template #label="{ label }">
|
||||||
<span class="header-label">Sort By</span>
|
<span class="header-label">{{ $t('Wardrobe.sort.label') }}</span>
|
||||||
<span class="header-value">{{ label }}</span>
|
<span class="header-value">{{ $t(label) }}</span>
|
||||||
</template>
|
</template>
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in sortByOptions"
|
v-for="item in sortByOptions"
|
||||||
:key="item.label"
|
:key="item.label"
|
||||||
:value="item.value"
|
:value="item.value"
|
||||||
:label="item.label"
|
:label="$t(item.label)"
|
||||||
/>
|
/>
|
||||||
</el-select>
|
</el-select>
|
||||||
</div>
|
</div>
|
||||||
@@ -40,8 +50,9 @@
|
|||||||
<sc-list-null
|
<sc-list-null
|
||||||
v-show="list.length === 0"
|
v-show="list.length === 0"
|
||||||
:show-button="!isMini"
|
:show-button="!isMini"
|
||||||
title="Your Cart is empty"
|
:title="$t('ShoppingCart.listNullTitle')"
|
||||||
tip="Discover new fashion assets and add them to your cart."
|
:tip="$t('ShoppingCart.listNullTip')"
|
||||||
|
@explore="handleExplore"
|
||||||
/>
|
/>
|
||||||
<sc-item
|
<sc-item
|
||||||
v-for="v in list"
|
v-for="v in list"
|
||||||
@@ -65,12 +76,12 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="footer" v-if="isMini">
|
<div class="footer" v-if="isMini">
|
||||||
<div class="total" v-show="list.length > 0 || isView">
|
<div class="total" v-show="list.length > 0 || isView">
|
||||||
<span class="label">Total</span>
|
<span class="label">{{ $t('ShoppingCart.total') }}</span>
|
||||||
<span class="value">${{ allAmount }}<span> HKD</span></span>
|
<span class="value">${{ allAmount }}<span> HKD</span></span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="tip" v-if="isView">Digital assets. Creator retains copyright.</div>
|
<div class="tip" v-if="isView">{{ $t('ShoppingCart.digitalAssets') }}</div>
|
||||||
<button custom="black" v-if="!isView">CHECKOUT</button>
|
<button custom="black" v-if="!isView">{{ $t('ShoppingCart.checkout') }}</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -83,6 +94,10 @@
|
|||||||
import { FormatBytes, FormatDate } from '@/utils/tools'
|
import { FormatBytes, FormatDate } from '@/utils/tools'
|
||||||
import scItem from './sc-item.vue'
|
import scItem from './sc-item.vue'
|
||||||
import scListNull from './sc-list-null.vue'
|
import scListNull from './sc-list-null.vue'
|
||||||
|
import { useRouter } from 'vue-router'
|
||||||
|
import { useI18n } from 'vue-i18n'
|
||||||
|
const { t } = useI18n()
|
||||||
|
const router = useRouter()
|
||||||
const emit = defineEmits(['close', 'selected-change'])
|
const emit = defineEmits(['close', 'selected-change'])
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
title: { type: String, default: '' },
|
title: { type: String, default: '' },
|
||||||
@@ -100,19 +115,19 @@
|
|||||||
const sortBy = ref('DateAdded')
|
const sortBy = ref('DateAdded')
|
||||||
const sortByOptions = ref([
|
const sortByOptions = ref([
|
||||||
{
|
{
|
||||||
label: 'Best Selling',
|
label: 'digitalItem.BestSelling',
|
||||||
value: 'BestSelling'
|
value: 'BestSelling'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Price: Low to High',
|
label: 'digitalItem.Price',
|
||||||
value: 'PriceLowToHigh'
|
value: 'PriceLowToHigh'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Selected First',
|
label: 'digitalItem.SelectedFirst',
|
||||||
value: 'SelectedFirst'
|
value: 'SelectedFirst'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Date Added',
|
label: 'digitalItem.DateAdded',
|
||||||
value: 'DateAdded'
|
value: 'DateAdded'
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
@@ -126,7 +141,9 @@
|
|||||||
return list_.value.filter(() => true).sort((a, b) => a.amount - b.amount)
|
return list_.value.filter(() => true).sort((a, b) => a.amount - b.amount)
|
||||||
}
|
}
|
||||||
if (sortBy.value === 'SelectedFirst') {
|
if (sortBy.value === 'SelectedFirst') {
|
||||||
return list_.value.filter(() => true).sort((a, b) => (b.checked ? 1 : 0) - (a.checked ? 1 : 0))
|
return list_.value
|
||||||
|
.filter(() => true)
|
||||||
|
.sort((a, b) => (b.checked ? 1 : 0) - (a.checked ? 1 : 0))
|
||||||
}
|
}
|
||||||
if (sortBy.value === 'DateAdded') {
|
if (sortBy.value === 'DateAdded') {
|
||||||
return list_.value.filter(() => true).sort((a, b) => b.date - a.date)
|
return list_.value.filter(() => true).sort((a, b) => b.date - a.date)
|
||||||
@@ -142,6 +159,7 @@
|
|||||||
listingId: v.listingId, //资产ID
|
listingId: v.listingId, //资产ID
|
||||||
title: v.title, //标题
|
title: v.title, //标题
|
||||||
brand: v.shopName, //店铺名称
|
brand: v.shopName, //店铺名称
|
||||||
|
sellerId: v.sellerId, //店铺ID
|
||||||
cover: v.cover, //封面
|
cover: v.cover, //封面
|
||||||
amount: v.price, //价格
|
amount: v.price, //价格
|
||||||
status: v.status, //状态
|
status: v.status, //状态
|
||||||
@@ -172,7 +190,7 @@
|
|||||||
handleSelectedChange()
|
handleSelectedChange()
|
||||||
})
|
})
|
||||||
const handleRemoveClick = (value: any) => {
|
const handleRemoveClick = (value: any) => {
|
||||||
ElMessageBox.confirm('Are you sure to remove this item?')
|
ElMessageBox.confirm(t('ShoppingCart.removeTip'))
|
||||||
.then(() => {
|
.then(() => {
|
||||||
RemoveShoppingCartItem({ listingId: value.listingId }).then(() => {
|
RemoveShoppingCartItem({ listingId: value.listingId }).then(() => {
|
||||||
GetList()
|
GetList()
|
||||||
@@ -180,8 +198,8 @@
|
|||||||
})
|
})
|
||||||
.catch(() => {})
|
.catch(() => {})
|
||||||
}
|
}
|
||||||
const handleExploreClick = () => {
|
const handleExplore = () => {
|
||||||
console.log('探索')
|
router.push({ name: 'brand' })
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@@ -360,6 +378,7 @@
|
|||||||
height: 4.6rem;
|
height: 4.6rem;
|
||||||
--button-font-size: 1.4rem;
|
--button-font-size: 1.4rem;
|
||||||
margin-top: 2rem;
|
margin-top: 2rem;
|
||||||
|
text-transform: uppercase;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user