Commit f63c6e01 authored by 罗超's avatar 罗超

Merge branch 'master' of http://gitlab.oytour.com/viitto/million

# Conflicts:
#	src/pages/login.vue
parents 3ee08a3c 7cca63b9
...@@ -39,7 +39,7 @@ body { ...@@ -39,7 +39,7 @@ body {
background-color: #f6f6f6; background-color: #f6f6f6;
} }
.rounded-borders{ .rounded-borders{
border-radius: 6px !important; border-radius: 8px !important;
} }
.section-block { .section-block {
width: 100%; width: 100%;
...@@ -118,7 +118,7 @@ body.desktop .q-tree__node .q-focus-helper:after{ ...@@ -118,7 +118,7 @@ body.desktop .q-tree__node .q-focus-helper:after{
background: none !important; background: none !important;
} }
.q-tree__node-header:hover{ .q-tree__node-header:hover{
background: #f1416c1a; background: #E3F2FD;
} }
.q-tree__arrow{ .q-tree__arrow{
position: absolute; position: absolute;
......
...@@ -325,6 +325,7 @@ export default { ...@@ -325,6 +325,7 @@ export default {
setTimeout(()=>{ setTimeout(()=>{
this.p = {}; this.p = {};
this.initModel() this.initModel()
this.getCarPriceData2()
},100) },100)
this.$emit("reset"); this.$emit("reset");
}, },
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
:class="{'max-width':$q.platform.is.mobile?'100vw':'auto'}"> :class="{'max-width':$q.platform.is.mobile?'100vw':'auto'}">
<div class="non-selectable row"> <div class="non-selectable row">
<div class="q-pr-md cursor-pointer" @click="showImageHandler(item.roomImageURL,item.images)" <div class="q-pr-md cursor-pointer" @click="showImageHandler(item.roomImageURL,item.images)"
:class="{'col-2':$q.platform.is.desktop,'col-6':$q.platform.is.mobile}" :class="{'col-2':$q.platform.is.desktop,'col-5':$q.platform.is.mobile}"
style="border-right: 1px solid #F5F5F5;"> style="border-right: 1px solid #F5F5F5;">
<div class="relative rounded-borders overflow-hidden column bg-grey-1" <div class="relative rounded-borders overflow-hidden column bg-grey-1"
style="border: 1px solid #eee"> style="border: 1px solid #eee">
...@@ -43,24 +43,26 @@ ...@@ -43,24 +43,26 @@
</div> </div>
</div> </div>
<div class="col" :class="{'column':$q.platform.is.desktop,'row no-wrap scroll':$q.platform.is.mobile}"> <div class="col" :class="{'column':$q.platform.is.desktop,'column':$q.platform.is.mobile}">
<div class="relative q-pt-lg q-pb-sm q-pl-md" v-for="(subItem,indexs) in item.roomOptions" <div class="relative q-pt-lg q-pb-sm q-pl-md" v-for="(subItem,indexs) in item.roomOptions"
:style="{'border-bottom': indexs+1!=item.roomOptions.length?'1px solid #F5F5F5':'', :style="{'border-bottom': indexs+1!=item.roomOptions.length?'1px solid #F5F5F5':'',
'min-width':$q.platform.is.mobile?'150px':'auto'}"> 'min-width':$q.platform.is.mobile?'150px':'auto'}">
<div class="q-pt-sm" <div class="q-pt-sm"
:class="{'row no-wrap justify-between':$q.platform.is.desktop,'column':$q.platform.is.mobile}"> :class="{'row no-wrap justify-between':$q.platform.is.desktop,'column':$q.platform.is.mobile}">
<template v-if="$q.platform.is.desktop"> <template v-if="$q.platform.is.desktop">
<div class="col-2 text-grey-6 q-pr-sm"> <div class="col-3 text-grey-6 q-pr-sm">
{{subItem.bookingDeadline}} {{subItem.bookingDeadline}}
</div> </div>
<div class="col">{{subItem.childRates}}</div> <div class="col-4 q-px-sm">{{subItem.childRates}}</div>
<div class="col-2 text-red"> <div class="col text-red">
<div>入住时间 {{subItem['check-inStartTime']}}</div> <div>入住时间 {{subItem['check-inStartTime']}}</div>
<div>最迟入住时间 {{subItem['finalCheck-inTime']}}</div> <div>最迟入住时间 {{subItem['finalCheck-inTime']}}</div>
<div>最迟退房时间 {{subItem['finalCheck-outTime']}}</div> <div>最迟退房时间 {{subItem['finalCheck-outTime']}}</div>
</div> </div>
</template> </template>
<div class="col" v-if="getPrice2(subItem.chargeableRateInfoPerPersonForANightBySetCurrency)"> <div class="col text-center"
:class="{'row justify-end q-pb-sm':$q.platform.is.mobile}"
v-if="getPrice2(subItem.chargeableRateInfoPerPersonForANightBySetCurrency)">
<span class="fz13">CNY</span> <span class="fz13">CNY</span>
<span class="text-red text-weight-bold q-px-sm" <span class="text-red text-weight-bold q-px-sm"
:class="{'fz28':$q.platform.is.desktop}">{{getPrice2(subItem.chargeableRateInfoPerPersonForANightBySetCurrency)}} :class="{'fz28':$q.platform.is.desktop}">{{getPrice2(subItem.chargeableRateInfoPerPersonForANightBySetCurrency)}}
...@@ -68,8 +70,9 @@ ...@@ -68,8 +70,9 @@
</span> </span>
<!-- <span>{{getPrice(subItem.chargeableRateInfoPerPersonForANightBySetCurrency)}}</span> --> <!-- <span>{{getPrice(subItem.chargeableRateInfoPerPersonForANightBySetCurrency)}}</span> -->
</div> </div>
<div> <div :class="{'row justify-end':$q.platform.is.mobile}">
<q-btn color="primary" label="立即預訂" unelevated :class="{'q-px-lg':$q.platform.is.desktop}" <q-btn color="primary" :size="$q.platform.is.desktop?'md':'sm'" label="立即預訂" unelevated
:class="{'q-px-xs':$q.platform.is.desktop}"
@click="goOrderHandler(subItem.roomOptionCd)"/> @click="goOrderHandler(subItem.roomOptionCd)"/>
</div> </div>
</div> </div>
...@@ -161,6 +164,15 @@ ...@@ -161,6 +164,15 @@
}, },
showImageHandler(url,img) { showImageHandler(url,img) {
this.images = img this.images = img
let index = 0
let images = this.images
this.$viewerApi({
options: {
initialViewIndex: index,
},
images,
});
return
this.currentImage = url this.currentImage = url
this.showImagePriview = true this.showImagePriview = true
}, },
......
...@@ -251,3 +251,6 @@ a { ...@@ -251,3 +251,6 @@ a {
} }
} }
</style> </style>
<style lang="scss" scoped>
::v-deep .q-img__content {background: linear-gradient(0deg, rgba(0,0,0,0.56), rgba(0,0,0,0));}
</style>
\ No newline at end of file
...@@ -255,3 +255,6 @@ a { ...@@ -255,3 +255,6 @@ a {
} }
} }
</style> </style>
<style lang="scss" scoped>
::v-deep .q-img__content {background: linear-gradient(0deg, rgba(0,0,0,0.56), rgba(0,0,0,0));}
</style>
\ No newline at end of file
<style scoped> <style lang="scss" scoped>
.header-box { .header-box {
max-width: 1200px; max-width: 1200px;
margin: 0 auto; margin: 0 auto;
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
} }
.select { .select {
color: #fff; color: #fff;
background-color: #ee4454; background-color: var(--q-color-primary);
} }
.menu-title { .menu-title {
font-weight: bold; font-weight: bold;
...@@ -101,6 +101,12 @@ ...@@ -101,6 +101,12 @@
border-radius: 10px; border-radius: 10px;
} }
.address-btn { .address-btn {
text-align: center;
width: 140px;
height: 36px;
line-height: 36px;
padding-left: 20px;
background: #fff;
margin: 0 10px 0 44px; margin: 0 10px 0 44px;
} }
.address-btn:hover { .address-btn:hover {
...@@ -160,7 +166,14 @@ ...@@ -160,7 +166,14 @@
font-weight: bold; font-weight: bold;
} }
.category-btn { .category-btn {
text-align: center;
width: 100px; width: 100px;
height: 36px;
line-height: 36px;
background: #fff;
}
.category-btn:hover {
background: #F5F5F5;
} }
.category-icon { .category-icon {
width: 16px; width: 16px;
...@@ -172,8 +185,8 @@ ...@@ -172,8 +185,8 @@
<q-separator color="grey-2" v-if="isHome" /> <q-separator color="grey-2" v-if="isHome" />
<div class="header-box flex q-py-sm" v-if="isHome"> <div class="header-box flex q-py-sm" v-if="isHome">
<q-tabs align="center" shrink> <q-tabs align="center" shrink>
<q-btn <div
flat flat unelevated
class="address-btn" class="address-btn"
@mouseenter="mouseenterAddress" @mouseenter="mouseenterAddress"
@mouseleave="mouseeleaveAddress" @mouseleave="mouseeleaveAddress"
...@@ -269,15 +282,14 @@ ...@@ -269,15 +282,14 @@
</div> </div>
</div> </div>
</q-menu> </q-menu>
</q-btn> </div>
<q-separator style="height: 16px; margin: auto 0" vertical /> <q-separator style="height: 16px; margin: auto 0" vertical />
<q-btn <div
class="all-type category-btn" class="all-type category-btn"
flat flat unelevated
label="全部分類"
@mouseenter="typeHoverAll(true)" @mouseenter="typeHoverAll(true)"
@mouseleave="typeHoverAll(false)" @mouseleave="typeHoverAll(false)"
> >全部分類
<q-menu <q-menu
ref="menu0" ref="menu0"
@mouseenter="menuFocusAll = 2" @mouseenter="menuFocusAll = 2"
...@@ -329,17 +341,17 @@ ...@@ -329,17 +341,17 @@
</div> </div>
</div> </div>
</q-menu> </q-menu>
</q-btn> </div>
<template v-for="(x, i) in dataList.CategoryList"> <template v-for="(x, i) in dataList.CategoryList">
<q-btn <div
class="category-btn" class="category-btn"
:key="i" :key="i"
:label="x.CategoryName" :label="x.CategoryName"
flat flat unelevated
:content-style="{ hover: '#ff0000' }" :content-style="{ hover: '#ff0000' }"
@mouseenter="typeHover(i, true)" @mouseenter="typeHover(i, true)"
@mouseleave="typeHover(i, false)" @mouseleave="typeHover(i, false)"
> >{{x.CategoryName}}
<q-menu <q-menu
ref="menu" ref="menu"
:key="i" :key="i"
...@@ -373,7 +385,7 @@ ...@@ -373,7 +385,7 @@
</div> </div>
</div> </div>
</q-menu> </q-menu>
</q-btn> </div>
</template> </template>
</q-tabs> </q-tabs>
</div></div> </div></div>
......
<style scoped> <style lang="scss" scoped>
.header-box { .header-box {
max-width: 1200px; max-width: 1200px;
margin: 0 auto; margin: 0 auto;
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
} }
.select { .select {
color: #fff; color: #fff;
background-color: #ee4454; background-color: var(--q-color-primary);
} }
.menu-title { .menu-title {
font-weight: bold; font-weight: bold;
...@@ -133,7 +133,7 @@ ...@@ -133,7 +133,7 @@
background-color: #eee; background-color: #eee;
} }
.category-l2-select { .category-l2-select {
background: #ee4454; background: var(--q-color-primary);
color: #fff; color: #fff;
} }
.category-l3 { .category-l3 {
...@@ -179,10 +179,10 @@ ...@@ -179,10 +179,10 @@
<img <img
:src="baseData.logo" :src="baseData.logo"
style=" style="
height: 35px;
cursor: pointer; cursor: pointer;
filter: drop-shadow(0px 0px var(--q-color-primary)); filter: drop-shadow(0px 0px var(--q-color-primary));
" "
:style="{'height':$q.platform.is.desktop?'35px':'30px'}"
class="q-mr-lg q-ml-sm" class="q-mr-lg q-ml-sm"
@click="CommonJump('/index', {})" @click="CommonJump('/index', {})"
/></div> /></div>
......
<style scoped> <style scoped>
.fill { .fill {
background-image: url('../../assets/subscriber-bg.png'); background-image: url('../../assets/subscriber-bg.png');
width: 100%;
height: 301px; height: 301px;
background-size: cover
} }
.box { .box {
max-width: 1200px; max-width: 1200px;
...@@ -48,6 +50,9 @@ border-radius: 28px; ...@@ -48,6 +50,9 @@ border-radius: 28px;
height: 46px; height: 46px;
border-radius: 23px; border-radius: 23px;
} }
::v-deep .q-field__control-container {
padding-left: 30px;
}
</style>> </style>>
<template> <template>
<div class="fill"> <div class="fill">
...@@ -59,7 +64,7 @@ border-radius: 23px; ...@@ -59,7 +64,7 @@ border-radius: 23px;
最高可省60%,只有订阅用户才能享受到隐藏优惠,点击“订阅”,即表示你同意我们的《訂閱條款》 最高可省60%,只有订阅用户才能享受到隐藏优惠,点击“订阅”,即表示你同意我们的《訂閱條款》
</div> </div>
<div class="email-box" :class="{'mobile':$q.platform.is.mobile}"> <div class="email-box" :class="{'mobile':$q.platform.is.mobile}">
<q-input class="input" :class="{'mobile':$q.platform.is.mobile}" rounded outlined placeholder="請輸入您在使用的電子郵件"></q-input><q-btn color="primary" class="btn" label="提交"></q-btn> <q-input class="input" :class="{'mobile':$q.platform.is.mobile}" rounded outlined placeholder="請輸入您在使用的電子郵件"></q-input><q-btn unelevated color="primary" class="btn" label="提交"></q-btn>
</div> </div>
</div> </div>
</div> </div>
......
...@@ -139,21 +139,25 @@ ...@@ -139,21 +139,25 @@
square square
id="search_key" id="search_key"
v-model="searchKey" v-model="searchKey"
class="bg-grey-1 col" class="bg-white col"
clearable clearable
label="搜尋目的地、景點、行程觀光或酒店名稱..." label="搜尋目的地、景點、行程觀光或酒店名稱..."
@focus="searchFocusHandler" @focus="searchFocusHandler"
@blur="searchBlurHandler" @blur="searchBlurHandler"
@keyup="searchChangeHandler" @keyup="searchChangeHandler"
@keypress.enter.native="goSearchHandler" @keypress.enter.native="goSearchHandler"
/> >
<template v-slot:prepend>
<q-icon name="search" />
</template>
</q-input>
<q-btn <q-btn
dark-percentage dark-percentage
color="primary" color="primary"
style="border-radius: 0" style="border-radius: 0"
class="col-2" class="col-2"
unelevated unelevated
icon="search" label="搜索"
@click="goSearchHandler" @click="goSearchHandler"
/> />
</div> </div>
...@@ -178,7 +182,7 @@ ...@@ -178,7 +182,7 @@
</q-btn> </q-btn>
</div> </div>
</div> </div>
<div class="text-weight-bold q-pa-sm">熱門目的地</div> <div class="text-weight-bold q-py-sm q-pl-md">熱門目的地</div>
<q-separator /> <q-separator />
<div class="flex flex-wrap"> <div class="flex flex-wrap">
<div class="hot-tag" @click="handleHotTagClick(item)" :class="{'hot-tag-select': setectHotTag === item.Id}" :key="item.Id" v-for="item in hotList">{{item.Name}}</div> <div class="hot-tag" @click="handleHotTagClick(item)" :class="{'hot-tag-select': setectHotTag === item.Id}" :key="item.Id" v-for="item in hotList">{{item.Name}}</div>
......
...@@ -181,7 +181,7 @@ ...@@ -181,7 +181,7 @@
:options="optionsFn" :options="optionsFn"
range range
@range-end="dateRangeHandler" @range-end="dateRangeHandler"
mask="YYYY-MM-DD" mask="YYYY/MM/DD"
></q-date> ></q-date>
</div> </div>
</q-popup-proxy> </q-popup-proxy>
...@@ -507,6 +507,8 @@ export default { ...@@ -507,6 +507,8 @@ export default {
this.dayArray.forEach((x) => { this.dayArray.forEach((x) => {
x.checked = false; x.checked = false;
}); });
this.msg.startDate = date.formatDate(new Date(this.qMsg.startDate), "YYYY/MM/DD")
this.msg.endDate = date.formatDate(new Date(this.qMsg.endDate), "YYYY/MM/DD")
this.dateRange = { from: this.msg.startDate, to: this.msg.endDate }; this.dateRange = { from: this.msg.startDate, to: this.msg.endDate };
this.goSearchHandler(); this.goSearchHandler();
}, },
...@@ -935,7 +937,7 @@ export default { ...@@ -935,7 +937,7 @@ export default {
<style> <style>
.addr-list:hover { .addr-list:hover {
background: #f1416c1a; background: #E3F2FD;
} }
</style> </style>
<style lang="scss" scoped> <style lang="scss" scoped>
......
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
.fee_line { .fee_line {
width: 32px; width: 32px;
height: 2px; height: 2px;
background: #ee4454; background: var(--q-color-primary);
display: inline-block; display: inline-block;
} }
......
...@@ -730,12 +730,7 @@ export default { ...@@ -730,12 +730,7 @@ export default {
this.productType = 12 this.productType = 12
} }
} else { } else {
this.$q.notify({ this.$message.error(r.data.message)
type: "negative",
message: r.data.message,
position: "top",
timeout: 2000, // 以毫秒为单位; 0意味着没有超时
});
} }
this.$q.loading.hide(); this.$q.loading.hide();
}, },
......
...@@ -878,11 +878,7 @@ export default { ...@@ -878,11 +878,7 @@ export default {
}); });
} else { } else {
this.$q.notify({ this.$message.error(r.data.message)
type: "negative",
message: r.data.message,
position: "top",
});
} }
this.$q.loading.hide(); this.$q.loading.hide();
}, },
...@@ -912,13 +908,14 @@ export default { ...@@ -912,13 +908,14 @@ export default {
let MailingMoneyList = x.PriceList.sort((a,b)=>{return b.MailingMoney-a.MailingMoney}) let MailingMoneyList = x.PriceList.sort((a,b)=>{return b.MailingMoney-a.MailingMoney})
let dataObj = { let dataObj = {
startDate: x.Date, startDate: x.Date,
originalB2CPrice: x.PriceList[0].Price, originalB2CPrice: x.PriceList[0].Price>0?x.PriceList[0].Price:'',
remainNum: 1, remainNum: 1,
Count: 1, Count: 1,
safeMoney: 0, safeMoney: 0,
MailingMoney: MailingMoneyList[0].MailingMoney, MailingMoney: MailingMoneyList[0].MailingMoney,
PriceList: x.PriceList, PriceList: x.PriceList,
} }
x.Date = date.formatDate(new Date(x.Date), 'YYYY/MM/DD')
if(date.formatDate(Date.now(), 'YYYY/MM/DD')!=x.Date&&x.Date>date.formatDate(Date.now(), 'YYYY/MM/DD')){ if(date.formatDate(Date.now(), 'YYYY/MM/DD')!=x.Date&&x.Date>date.formatDate(Date.now(), 'YYYY/MM/DD')){
arr.push(dataObj) arr.push(dataObj)
} }
......
...@@ -465,12 +465,7 @@ ...@@ -465,12 +465,7 @@
this.parameters.SelffetchAddress = '' this.parameters.SelffetchAddress = ''
} }
} else { } else {
this.$q.notify({ this.$message.error(r.data.message)
type: "negative",
message: r.data.message,
position: "top",
timeout: 2000, // 以毫秒为单位; 0意味着没有超时
});
} }
this.$q.loading.hide(); this.$q.loading.hide();
}, },
......
This diff is collapsed.
...@@ -951,12 +951,7 @@ export default { ...@@ -951,12 +951,7 @@ export default {
}); });
} else { } else {
this.$q.notify({ this.$message.error(r.data.message)
type: "negative",
message: r.data.message,
position: "top",
timeout: 2000, // 以毫秒为单位; 0意味着没有超时
});
} }
this.$q.loading.hide(); this.$q.loading.hide();
}, },
......
...@@ -1219,12 +1219,7 @@ export default { ...@@ -1219,12 +1219,7 @@ export default {
} }
}); });
} else { } else {
this.$q.notify({ this.$message.error(r.data.message)
type: "negative",
message: r.data.message,
position: "top",
timeout: 2000, // 以毫秒为单位; 0意味着没有超时
});
} }
this.$q.loading.hide(); this.$q.loading.hide();
}, },
......
...@@ -145,12 +145,24 @@ export default { ...@@ -145,12 +145,24 @@ export default {
null null
); );
}, },
isWeChat() {
//window.navigator.userAgent属性包含了浏览器类型、版本、操作系统类型、浏览器引擎类型等信息,这个属性可以用来判断浏览器类型
var ua = window.navigator.userAgent.toLowerCase();
//通过正则表达式匹配ua中是否含有MicroMessenger字符串
return ua.match(/MicroMessenger/i) == "micromessenger";
},
changeWechat() { changeWechat() {
const { AppID, State, OpenRedirectUri } = this.openInfo; const { AppID, State, OpenRedirectUri } = this.openInfo;
let redirect_uri = OpenRedirectUri; let redirect_uri = OpenRedirectUri;
console.log('${redirect_uri}/#/loginInfo',`${redirect_uri}/#/loginInfo`) console.log('${redirect_uri}/#/loginInfo',`${redirect_uri}/#/loginInfo`)
const url = `https://open.weixin.qq.com/connect/qrconnect?appid=${AppID}&redirect_uri=${encodeURIComponent(`http://www.oytour.com/#/loginInfo`)}&response_type=code&scope=snsapi_login&state=${State}&wechat_redirect=${redirect_uri}`; let url = `https://open.weixin.qq.com/connect/qrconnect?appid=${AppID}&redirect_uri=${encodeURIComponent(`http://www.oytour.com/#/loginInfo`)}&response_type=code&scope=snsapi_login&state=${State}&wechat_redirect=${redirect_uri}`;
if (this.$q.platform.is.mobile && this.isWeChat()) {
// 移动端微信环境
url = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${AppID}&redirect_uri=${encodeURIComponent(
"http://www.oytour.com/#/loginInfo"
)}&response_type=code&scope=snsapi_userinfo&state=${State}&wechat_redirect=${redirect_uri}`;
}
alert('url::' + url)
console.log('${redirect_uri}/#/loginInfo',`${redirect_uri}/#/loginInfo`, url) console.log('${redirect_uri}/#/loginInfo',`${redirect_uri}/#/loginInfo`, url)
window.location.href = url; window.location.href = url;
}, },
...@@ -168,6 +180,7 @@ export default { ...@@ -168,6 +180,7 @@ export default {
(r) => { (r) => {
if (r.data.resultCode == 1) { if (r.data.resultCode == 1) {
this.getUserInfo() this.getUserInfo()
this.$router.replace('/loginInfo')
this.$q.notify({ this.$q.notify({
type: "positive", type: "positive",
message: r.data.message, message: r.data.message,
......
...@@ -130,6 +130,7 @@ ...@@ -130,6 +130,7 @@
@input="changeCountry" @input="changeCountry"
emit-value emit-value
map-options map-options
options-dense
ref="CountryId" ref="CountryId"
square square
outlined outlined
......
...@@ -142,13 +142,13 @@ ...@@ -142,13 +142,13 @@
/> />
</div> --> </div> -->
<div class="col"> <div class="col">
<div class="title">電話(首次需驗證)</div> <div class="title">電話</div>
<q-input <q-input
ref="Moblie" ref="Moblie"
class="form-item" class="form-item"
v-model="form.Moblie" v-model="form.Moblie"
outlined outlined
:rules="[(val) => !!val || '请输入電話(首次需驗證)']" :rules="[(val) => !!val || '请输入電話']"
> >
<template v-slot:prepend> <template v-slot:prepend>
<div class="text-subtitle2"> <div class="text-subtitle2">
......
...@@ -191,6 +191,7 @@ ...@@ -191,6 +191,7 @@
<div class="col"> <div class="col">
<div class="title">國家/地區代碼</div> <div class="title">國家/地區代碼</div>
<q-select <q-select
options-dense
emit-value emit-value
map-options map-options
ref="AreaCode" ref="AreaCode"
...@@ -233,6 +234,7 @@ ...@@ -233,6 +234,7 @@
<q-select <q-select
emit-value emit-value
map-options map-options
options-dense
ref="card" ref="card"
square square
outlined outlined
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment