|
@@ -4,58 +4,80 @@
|
|
|
<div class="content">
|
|
|
<div class="l">
|
|
|
<div class="name">Preview</div>
|
|
|
- <div class="show">
|
|
|
- <div class="card">
|
|
|
- <div class="absolute">
|
|
|
- <div class="logo"></div>
|
|
|
- <div class="member">LegalDAO Members</div>
|
|
|
- <div class="number">0001</div>
|
|
|
+ <template v-if="configList.length">
|
|
|
+ <div class="show">
|
|
|
+ <div class="card" :class="selectItem.modelName">
|
|
|
+ <div class="logo">
|
|
|
+ <img v-if="tempUrl" :src="tempUrl" alt="">
|
|
|
+ </div>
|
|
|
+ <div class="member">{{ projectName === '' ? 'xxxx' : projectName }}</div>
|
|
|
+ <div class="number">{{ projectNo === '' ? '0000' : projectNo }}</div>
|
|
|
</div>
|
|
|
- <img class="bg" src="" alt="" />
|
|
|
+ <img class="bg" :src="selectItem.mainImagePath" />
|
|
|
</div>
|
|
|
- </div>
|
|
|
- <div class="list">
|
|
|
- <div class="item on"></div>
|
|
|
- <div class="item"></div>
|
|
|
- <div class="item"></div>
|
|
|
- <div class="item"></div>
|
|
|
+ <div class="list">
|
|
|
+ <div
|
|
|
+ class="item"
|
|
|
+ :class="{ on: item.modelName === selectItem.modelName }"
|
|
|
+ @click="select(item, index)"
|
|
|
+ v-for="(item, index) in configList"
|
|
|
+ :key="index">
|
|
|
+ <img :src="item.mainImagePath" alt="" />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ <div class="wait" v-else>
|
|
|
+ <img width="30" src="../../static/img/icon-loading-gray.png" alt="" />
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="r">
|
|
|
<div class="name">Card face</div>
|
|
|
<div class="face">
|
|
|
- <div class="off" v-if="false">
|
|
|
- <img src="../../static/img/icon-add-cover-off.svg" alt="" />
|
|
|
- </div>
|
|
|
- <div class="on" v-else>
|
|
|
+ <input type="file" class="file" @change="uploadImg" accept="image/png,image/jpg,image/jpeg" />
|
|
|
+ <div class="on" v-if="tempUrl">
|
|
|
<img src="../../static/img/icon-add-cover-on.svg" alt="" />
|
|
|
- <img class="img" src="" alt="" />
|
|
|
+ <img class="img" :src="tempUrl" alt="" />
|
|
|
+ </div>
|
|
|
+ <div class="off" v-else>
|
|
|
+ <img src="../../static/img/icon-add-cover-off.svg" alt="" />
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="desc">Recommended size 500*500 or more</div>
|
|
|
<div class="name">Project Name</div>
|
|
|
- <div class="input"><input type="text" /></div>
|
|
|
+ <div class="input"><input type="text" maxlength="30" v-model="projectName" placeholder="Your NFT Project Name" /></div>
|
|
|
|
|
|
<div class="name">Project Description</div>
|
|
|
- <div class="input"><input type="text" /></div>
|
|
|
+ <div class="textarea"><textarea placeholder="Your NFT Project Description" maxlength="250" v-model="projectDesc"></textarea></div>
|
|
|
|
|
|
<div class="name">Collection Size</div>
|
|
|
- <div class="input"><input type="text" /></div>
|
|
|
+ <div class="input"><input type="text" v-model="projectSize" placeholder="0" /></div>
|
|
|
+ <div class="showNo" v-if="showNoStr">No.{{ projectNo === '' ? '0000' : projectNo }}~{{projectSize}}</div>
|
|
|
|
|
|
<div class="name">NFTs Price</div>
|
|
|
<div class="price">
|
|
|
- <div class="currency">
|
|
|
- <img class="head" src="" alt="" />
|
|
|
- <div class="font">SHBI</div>
|
|
|
+ <div class="currency" @click="showCurrencyDialog" v-if="currencyItem">
|
|
|
+ <img class="head" :src="currencyItem.iconPath" alt="" />
|
|
|
+ <div class="font">{{currencyItem.tokenSymbol}}</div>
|
|
|
<img class="arrow" src="../../static/img/icon-add-arrow.svg" alt="" />
|
|
|
</div>
|
|
|
- <div class="input"><input type="text" /></div>
|
|
|
+ <div class="no-select" @click="showCurrencyDialog" v-else>
|
|
|
+ <div class="font">Select a reward</div>
|
|
|
+ <img class="arrow" src="../../static/img/icon-add-arrow-white.svg" alt="" />
|
|
|
+ </div>
|
|
|
+ <div class="input">
|
|
|
+ <div class="tips" v-if="showMinPrice">the price of each NFT must be above $0.1 USD</div>
|
|
|
+ <input type="text" v-model="projectPrice" @input="changePrice" placeholder="0" />
|
|
|
+ </div>
|
|
|
+ <!-- 货币列表 -->
|
|
|
+ <div class="currency-pop" v-if="currencyDialog">
|
|
|
+ <currency-list @selectCurrencyItem="selectCurrencyItem"></currency-list>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
|
|
|
<div class="explain">
|
|
|
<ul>
|
|
|
+ <li class="special">The NFT colection is minted on BNB Smart Chain (BEP20)</li>
|
|
|
<li>NFT will be released in blind box mode</li>
|
|
|
- <li>Users can buy 5 NFTs in one go, there will be a 20% discount</li>
|
|
|
<li>Users need to pay service fees when transferring NFTs</li>
|
|
|
</ul>
|
|
|
</div>
|
|
@@ -63,15 +85,18 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="create">
|
|
|
- <button>Create</button>
|
|
|
+ <button class="on" v-if="isNext" @click="next">Create</button>
|
|
|
+ <button class="off" v-else>Create</button>
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
- <div class="feedBack">
|
|
|
- <div class="mail">
|
|
|
- <img src="../../static/img/icon-feedback.svg" alt="" />
|
|
|
- </div>
|
|
|
- <div class="font">Feedback</div>
|
|
|
+ <div class="feedBack" @click="feedback">
|
|
|
+ <a href="mailto:service@cybertogether.net">
|
|
|
+ <div class="mail">
|
|
|
+ <img src="../../static/img/icon-feedback.svg" alt="" />
|
|
|
+ </div>
|
|
|
+ <div class="font">Feedback</div>
|
|
|
+ </a>
|
|
|
</div>
|
|
|
|
|
|
<div class="loading" v-if="showLoading">
|
|
@@ -80,17 +105,284 @@
|
|
|
|
|
|
<div class="succ" v-if="showSuccess">
|
|
|
<img class="icon" src="../../static/img/icon-notice-succ.svg" alt="" />
|
|
|
- <div class="notic">Your NFTs are Created</div>
|
|
|
- <button class="btn">Done</button>
|
|
|
+ <div class="notic">We have created your NFT collection</div>
|
|
|
+ <button class="btn" @click="jumpList">Done</button>
|
|
|
</div>
|
|
|
<div class="succ-bg" v-if="showSuccess"></div>
|
|
|
+
|
|
|
+ <div class="mask-bg" v-if="currencyDialog" @click="hideCurrencyDialog"></div>
|
|
|
</template>
|
|
|
|
|
|
<script lang="ts" setup>
|
|
|
-import { ref } from 'vue';
|
|
|
+import { ref, onMounted, watchEffect } from 'vue';
|
|
|
+import Api from '../../static/http/api';
|
|
|
+import { postRequest } from '../../static/http';
|
|
|
+import { uploadFile } from '../../static/utils/upload'
|
|
|
+import { Report } from '../../static/report'
|
|
|
+import { debounce } from '../../static/utils'
|
|
|
+import { businessType, pageSource, objectType } from '../../static/report/enum'
|
|
|
+import currencyList from '../../components/currency-list.vue';
|
|
|
|
|
|
+const isNext = ref(false);
|
|
|
const showLoading = ref(false);
|
|
|
-const showSuccess = ref(false)
|
|
|
+const showSuccess = ref(false);
|
|
|
+const maxSize = ref(100000);
|
|
|
+const minUsdAmount = ref(0)
|
|
|
+const configList = ref([]);
|
|
|
+const selectItem = ref(null);
|
|
|
+const uploadItem = ref({});
|
|
|
+const currencyDialog = ref(false);
|
|
|
+const currencyItem = ref(null);
|
|
|
+const projectName = ref('');
|
|
|
+const projectDesc = ref('');
|
|
|
+const projectSize = ref('');
|
|
|
+const projectNo = ref('');
|
|
|
+const projectPrice = ref('');
|
|
|
+const showNoStr = ref(false);
|
|
|
+const showMinPrice = ref(false);
|
|
|
+const tempFile = ref('');
|
|
|
+const tempUrl = ref('');
|
|
|
+const buttonType = {
|
|
|
+ feedback: 'feedback-button',
|
|
|
+ create: 'create-button',
|
|
|
+}
|
|
|
+
|
|
|
+const getConfig = () => {
|
|
|
+ postRequest(Api.createConfig).then(res => {
|
|
|
+ let { code, data } = res;
|
|
|
+ if ( code === 0 ) {
|
|
|
+ configList.value = data.itemModels;
|
|
|
+ maxSize.value = data.maxCollectionSize;
|
|
|
+ selectItem.value = data.itemModels[0];
|
|
|
+ minUsdAmount.value = data.sellMinUsdAmount;
|
|
|
+
|
|
|
+ // 预加载图片
|
|
|
+ if (data.itemModels) {
|
|
|
+ data.itemModels.forEach(item => {
|
|
|
+ let img = new Image()
|
|
|
+ img.src = item.previewImagePath;
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+const next = () => {
|
|
|
+ // show loading
|
|
|
+ showLoading.value = true;
|
|
|
+ uploadFile(tempFile.value).then(res => {
|
|
|
+ // @ts-ignore
|
|
|
+ uploadItem.value = res;
|
|
|
+ // post
|
|
|
+ postRequest(Api.userNftAdd, {
|
|
|
+ params: {
|
|
|
+ // 项目图标
|
|
|
+ cardFaceImagePath: uploadItem.value && uploadItem.value.objectKey || '',
|
|
|
+ // 发行数量
|
|
|
+ nftCollectionSize: projectSize.value || '',
|
|
|
+ // 选中的模版id
|
|
|
+ nftItemImageModel: selectItem.value && selectItem.value.modelName || '',
|
|
|
+ // 项目描述
|
|
|
+ nftProjectDescription: projectDesc.value.trim() || '',
|
|
|
+ // 项目名称
|
|
|
+ nftProjectName: projectName.value.trim() || '',
|
|
|
+ // 销售价格
|
|
|
+ saleCurrencyAmount: projectPrice.value || '',
|
|
|
+ // 销售的货币code
|
|
|
+ saleCurrencyCode: currencyItem.value && currencyItem.value.currencyCode || '',
|
|
|
+ }
|
|
|
+ }).then(res => {
|
|
|
+ if (res.code === 0) {
|
|
|
+ showSuccess.value = true;
|
|
|
+ }
|
|
|
+ }).finally(() => {
|
|
|
+ showLoading.value = false;
|
|
|
+ })
|
|
|
+
|
|
|
+ // Report
|
|
|
+ Report({
|
|
|
+ baseInfo: {
|
|
|
+ pageSource: pageSource.creatorPage,
|
|
|
+ },
|
|
|
+ params: {
|
|
|
+ eventData: {
|
|
|
+ businessType: businessType.buttonClick,
|
|
|
+ objectType: buttonType.create,
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }).catch(() => {
|
|
|
+ showLoading.value = false;
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+const select = (item: any, index: number) => {
|
|
|
+ selectItem.value = item;
|
|
|
+ let objectType;
|
|
|
+ switch(index) {
|
|
|
+ case 0:
|
|
|
+ objectType = `first-NFT-selection-button`;
|
|
|
+ break;
|
|
|
+ case 1:
|
|
|
+ objectType = `second-NFT-selection-button`;
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ objectType = `third-NFT-selection-button`;
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ objectType = `forth-NFT-selection-button`;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ // Report
|
|
|
+ Report({
|
|
|
+ baseInfo: {
|
|
|
+ pageSource: pageSource.creatorPage,
|
|
|
+ },
|
|
|
+ params: {
|
|
|
+ eventData: {
|
|
|
+ businessType: businessType.buttonClick,
|
|
|
+ objectType: objectType,
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+const showCurrencyDialog = () => {
|
|
|
+ currencyDialog.value = true;
|
|
|
+}
|
|
|
+
|
|
|
+const hideCurrencyDialog = () => {
|
|
|
+ currencyDialog.value = false;
|
|
|
+}
|
|
|
+
|
|
|
+const selectCurrencyItem = (data: any) => {
|
|
|
+ currencyItem.value = data;
|
|
|
+ hideCurrencyDialog();
|
|
|
+}
|
|
|
+
|
|
|
+const uploadImg = (e: any) => {
|
|
|
+ let file = e.target.files[0];
|
|
|
+ // 清空file
|
|
|
+ e.target.value = '';
|
|
|
+ // 预览
|
|
|
+ tempFile.value = file;
|
|
|
+ tempUrl.value = URL.createObjectURL(file);
|
|
|
+}
|
|
|
+
|
|
|
+const hideSuccess = () => {
|
|
|
+ showSuccess.value = false;
|
|
|
+}
|
|
|
+
|
|
|
+const jumpList = () => {
|
|
|
+ location.href = `/nft/list`
|
|
|
+}
|
|
|
+
|
|
|
+const changePrice = (e: any) => {
|
|
|
+ let val = projectPrice.value;
|
|
|
+
|
|
|
+ val = val.replace(/^\D*(\d*(?:\.\d{0,18})?).*$/g, '$1');
|
|
|
+
|
|
|
+ if (val == '00') {
|
|
|
+ val = '0'
|
|
|
+ }
|
|
|
+
|
|
|
+ if (val.indexOf('.') > -1){
|
|
|
+ let arr = val.split('.');
|
|
|
+ if(arr[0].startsWith('0')) {
|
|
|
+ let num = +arr[0];
|
|
|
+ val = num + '.' + arr[1];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (val !== '') {
|
|
|
+ projectPrice.value = val
|
|
|
+ } else {
|
|
|
+ projectPrice.value = ''
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+const feedback = () => {
|
|
|
+ // Report
|
|
|
+ Report({
|
|
|
+ baseInfo: {
|
|
|
+ pageSource: pageSource.creatorPage,
|
|
|
+ },
|
|
|
+ params: {
|
|
|
+ eventData: {
|
|
|
+ businessType: businessType.buttonClick,
|
|
|
+ objectType: buttonType.feedback,
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+let timer = ref(0);
|
|
|
+
|
|
|
+watchEffect(() => {
|
|
|
+ let emojiReg = /[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF][\u200D|\uFE0F]|[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF]|[0-9|*|#]\uFE0F\u20E3|[0-9|#]\u20E3|[\u203C-\u3299]\uFE0F\u200D|[\u203C-\u3299]\uFE0F|[\u2122-\u2B55]|\u303D|[\A9|\AE]\u3030|\uA9|\uAE|\u3030/gi;
|
|
|
+
|
|
|
+ // 数量
|
|
|
+ let num = projectSize.value;
|
|
|
+ num = num.replace(/\D/g, '');
|
|
|
+ if (Number(num) > maxSize.value) {
|
|
|
+ num = String(maxSize.value);
|
|
|
+ }
|
|
|
+ if (num) {
|
|
|
+ projectSize.value = String(Number(num));
|
|
|
+ } else {
|
|
|
+ projectSize.value = '';
|
|
|
+ }
|
|
|
+
|
|
|
+ // 编号
|
|
|
+ if (projectSize.value !== '') {
|
|
|
+ projectNo.value = String(1).padStart(String(projectSize.value).length, '0')
|
|
|
+ } else {
|
|
|
+ projectNo.value = ''
|
|
|
+ }
|
|
|
+ showNoStr.value = projectNo.value != '' && Number(projectSize.value) > 0;
|
|
|
+
|
|
|
+ // 是否可以创建
|
|
|
+ let ifUpload = tempUrl.value != '' || false;
|
|
|
+ let ifName = projectName.value !== '';
|
|
|
+ let ifDesc = projectDesc.value !== '';
|
|
|
+ let ifSize = projectSize.value !== '' && Number(projectSize.value) > 0;
|
|
|
+ let ifCurrency = currencyItem.value && currencyItem.value.currencyCode;
|
|
|
+ let ifPrice = projectPrice.value && projectPrice.value !== '' && Number(projectPrice.value) > 0;
|
|
|
+
|
|
|
+ // setTimeout
|
|
|
+ clearTimeout(timer.value);
|
|
|
+ timer.value = setTimeout(() => {
|
|
|
+ projectName.value = projectName.value.replace(emojiReg, '');
|
|
|
+ // 最低金额
|
|
|
+ if (ifCurrency && ifPrice) {
|
|
|
+ let usdPrice = currencyItem.value && currencyItem.value.usdPrice;
|
|
|
+ if (Number(usdPrice) * Number(projectPrice.value) < Number(minUsdAmount.value)) {
|
|
|
+ showMinPrice.value = true;
|
|
|
+ } else {
|
|
|
+ showMinPrice.value = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // show next
|
|
|
+ isNext.value = ifUpload && ifName && ifDesc && ifSize && ifCurrency && ifPrice && !showMinPrice.value;
|
|
|
+ }, 400)
|
|
|
+})
|
|
|
+
|
|
|
+onMounted(() => {
|
|
|
+ // config
|
|
|
+ getConfig()
|
|
|
+ // Report
|
|
|
+ Report({
|
|
|
+ baseInfo: {
|
|
|
+ pageSource: pageSource.creatorPage,
|
|
|
+ },
|
|
|
+ params: {
|
|
|
+ eventData: {
|
|
|
+ businessType: businessType.pageView,
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+})
|
|
|
</script>
|
|
|
|
|
|
|
|
@@ -98,12 +390,15 @@ const showSuccess = ref(false)
|
|
|
.center {
|
|
|
overflow-y: auto;
|
|
|
padding: 0 50px;
|
|
|
- max-width: 1100px;
|
|
|
+ width: 1100px;
|
|
|
margin: 10px auto 0;
|
|
|
box-sizing: border-box;
|
|
|
height: calc(100% - 10px);
|
|
|
background-color: #fff;
|
|
|
border-radius: 20px 20px 0 0;
|
|
|
+ &::-webkit-scrollbar {
|
|
|
+ width: 0 !important;
|
|
|
+ }
|
|
|
.title {
|
|
|
padding: 22px 0;
|
|
|
font-size: 20px;
|
|
@@ -117,82 +412,127 @@ const showSuccess = ref(false)
|
|
|
justify-content: space-between;
|
|
|
.name {
|
|
|
height: 24px;
|
|
|
+ font-size: 12px;
|
|
|
+ color: #939393;
|
|
|
+ }
|
|
|
+ .showNo {
|
|
|
color: #939393;
|
|
|
+ font-size: 12px;
|
|
|
+ margin-top: -10px;
|
|
|
+ margin-bottom: 24px;
|
|
|
}
|
|
|
.l {
|
|
|
width: 400px;
|
|
|
+ .wait {
|
|
|
+ padding: 200px 0;
|
|
|
+ text-align: center;
|
|
|
+ img {
|
|
|
+ opacity: .6;
|
|
|
+ animation: rotate 1s infinite linear;
|
|
|
+ }
|
|
|
+ }
|
|
|
.show {
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- justify-content: center;
|
|
|
+ position: relative;
|
|
|
+ overflow: hidden;
|
|
|
+ width: 400px;
|
|
|
height: 400px;
|
|
|
- border-radius: 5px;
|
|
|
- background: #F2F2F2;
|
|
|
- border: 1px solid #F0F0F0;
|
|
|
+ border-radius: 10px;
|
|
|
.card {
|
|
|
- position: relative;
|
|
|
- overflow: hidden;
|
|
|
- width: 336px;
|
|
|
- height: 189px;
|
|
|
- border-radius: 12px;
|
|
|
- background: #353535;
|
|
|
- .absolute {
|
|
|
+ position: absolute;
|
|
|
+ left: 53px;
|
|
|
+ top: 103px;
|
|
|
+ width: 294px;
|
|
|
+ height: 186px;
|
|
|
+ .logo {
|
|
|
position: absolute;
|
|
|
- top: 0;
|
|
|
- left: 0;
|
|
|
- width: 100%;
|
|
|
- height: 100%;
|
|
|
- text-align: center;
|
|
|
- .logo {
|
|
|
- margin: auto;
|
|
|
- width: 80px;
|
|
|
- height: 80px;
|
|
|
- margin-top: 20px;
|
|
|
- margin-bottom: 12px;
|
|
|
+ top: 50%;
|
|
|
+ left: 50%;
|
|
|
+ transform: translate(-50%, -50%);
|
|
|
+ width: 100px;
|
|
|
+ height: 100px;
|
|
|
+ border-radius: 50%;
|
|
|
+ background-color: #fff;
|
|
|
+ img {
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
border-radius: 50%;
|
|
|
- background-color: #225dab;
|
|
|
+ object-fit: cover;
|
|
|
}
|
|
|
- .member {
|
|
|
- color: #fff;
|
|
|
- font-size: 28px;
|
|
|
- font-weight: 800;
|
|
|
- line-height: 33px;
|
|
|
+ }
|
|
|
+ .member {
|
|
|
+ position: absolute;
|
|
|
+ top: 11px;
|
|
|
+ left: 11px;
|
|
|
+ width: 228px;
|
|
|
+ font-size: 12px;
|
|
|
+ text-align: left;
|
|
|
+ font-weight: 800;
|
|
|
+ line-height: 13px;
|
|
|
+ }
|
|
|
+ .number {
|
|
|
+ position: absolute;
|
|
|
+ top: 11px;
|
|
|
+ right: 10px;
|
|
|
+ font-size: 12px;
|
|
|
+ font-weight: 800;
|
|
|
+ line-height: 13px;
|
|
|
+ letter-spacing: 1px;
|
|
|
+ }
|
|
|
+ &.s1 {
|
|
|
+ .member, .number {
|
|
|
+ color: #ffffff;
|
|
|
}
|
|
|
- .number {
|
|
|
- margin-top: 4px;
|
|
|
- font-size: 24px;
|
|
|
- font-weight: 800;
|
|
|
- letter-spacing: 0.12px;
|
|
|
- color: rgba(255, 255, 255, .4);
|
|
|
+ }
|
|
|
+ &.s2 {
|
|
|
+ .member, .number {
|
|
|
+ color: #4AC3E1;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- .bg {
|
|
|
- width: 100%;
|
|
|
- height: 100%;
|
|
|
+ &.s3 {
|
|
|
+ .member, .number {
|
|
|
+ color: #606C94;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ &.s4 {
|
|
|
+ .member, .number {
|
|
|
+ color: #504215;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
+ .bg {
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ }
|
|
|
}
|
|
|
.list {
|
|
|
margin-top: 20px;
|
|
|
display: flex;
|
|
|
.item {
|
|
|
width: calc(100% / 4);
|
|
|
- height: 90px;
|
|
|
cursor: pointer;
|
|
|
+ overflow: hidden;
|
|
|
margin-right: 13px;
|
|
|
border-radius: 5px;
|
|
|
- background: #F2F2F2;
|
|
|
- border: 1px solid rgba(0, 0, 0, 0.1);
|
|
|
+ img {
|
|
|
+ width: 100%;
|
|
|
+ border-radius: 5px;
|
|
|
+ }
|
|
|
&:last-child {
|
|
|
margin: 0;
|
|
|
}
|
|
|
&.on {
|
|
|
- border: 1px solid rgba(0, 0, 0, 0.1);
|
|
|
- background-color: #D2D2D2;
|
|
|
- background-repeat: no-repeat;
|
|
|
- background-position: right top;
|
|
|
- background-image: url('../../static/img/icon-add-select.svg');
|
|
|
+ position: relative;
|
|
|
+ &::before {
|
|
|
+ position: absolute;
|
|
|
+ display: block;
|
|
|
+ top: 0;
|
|
|
+ right: 0;
|
|
|
+ content: '';
|
|
|
+ width: 44px;
|
|
|
+ height: 44px;
|
|
|
+ background-size: 100%;
|
|
|
+ background-image: url('../../static/img/icon-add-select.svg');
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -200,7 +540,17 @@ const showSuccess = ref(false)
|
|
|
.r {
|
|
|
width: 520px;
|
|
|
.face {
|
|
|
+ position: relative;
|
|
|
+ width: 80px;
|
|
|
margin-bottom: 10px;
|
|
|
+ .file {
|
|
|
+ position: absolute;
|
|
|
+ z-index: 2;
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ opacity: 0;
|
|
|
+ cursor: pointer;
|
|
|
+ }
|
|
|
.off {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
@@ -240,6 +590,7 @@ const showSuccess = ref(false)
|
|
|
margin-bottom: 22px;
|
|
|
}
|
|
|
.input {
|
|
|
+ position: relative;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
@@ -252,13 +603,50 @@ const showSuccess = ref(false)
|
|
|
border: 0;
|
|
|
outline: none;
|
|
|
padding: 3px 0;
|
|
|
+ color: #777;
|
|
|
font-size: 16px;
|
|
|
font-weight: 500;
|
|
|
letter-spacing: 0.3px;
|
|
|
width: calc(100% - 24px);
|
|
|
+ &::placeholder {
|
|
|
+ color: rgba(0, 0, 0, .3);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .tips {
|
|
|
+ position: absolute;
|
|
|
+ left: 0;
|
|
|
+ top: -22px;
|
|
|
+ font-size: 12px;
|
|
|
+ color: #E29015;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .textarea {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ height: 72px;
|
|
|
+ margin-bottom: 22px;
|
|
|
+ border-radius: 5px;
|
|
|
+ background: #FFFFFF;
|
|
|
+ border: 1px solid #E0E0E0;
|
|
|
+ textarea {
|
|
|
+ resize: none;
|
|
|
+ border: 0;
|
|
|
+ height: 52px;
|
|
|
+ outline: none;
|
|
|
+ color: #777;
|
|
|
+ font-size: 16px;
|
|
|
+ font-weight: 500;
|
|
|
+ letter-spacing: 0.3px;
|
|
|
+ width: calc(100% - 24px);
|
|
|
+ font-family: "Segoe UI", Helvetica, Arial, sans-serif;
|
|
|
+ &::placeholder {
|
|
|
+ color: rgba(0, 0, 0, .3);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
.price {
|
|
|
+ position: relative;
|
|
|
display: flex;
|
|
|
justify-content: space-between;
|
|
|
.currency {
|
|
@@ -292,10 +680,47 @@ const showSuccess = ref(false)
|
|
|
margin-left: 8px
|
|
|
}
|
|
|
}
|
|
|
+ .no-select {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ flex-direction: row;
|
|
|
+ cursor: pointer;
|
|
|
+ height: 43px;
|
|
|
+ padding: 0 14px;
|
|
|
+ margin-right: 13px;
|
|
|
+ border-radius: 25px;
|
|
|
+ background: #1d9bf0;
|
|
|
+ .font {
|
|
|
+ max-width: 250px;
|
|
|
+ color: #fff;
|
|
|
+ font-size: 15px;
|
|
|
+ font-weight: 500;
|
|
|
+ white-space: nowrap;
|
|
|
+ overflow: hidden;
|
|
|
+ text-overflow: ellipsis;
|
|
|
+ }
|
|
|
+ .arrow {
|
|
|
+ margin-left: 8px
|
|
|
+ }
|
|
|
+ }
|
|
|
.input {
|
|
|
flex: 1;
|
|
|
margin-bottom: 0;
|
|
|
}
|
|
|
+
|
|
|
+ .currency-pop {
|
|
|
+ position: absolute;
|
|
|
+ overflow: hidden;
|
|
|
+ z-index: 3;
|
|
|
+ left: 0;
|
|
|
+ bottom: 50px;
|
|
|
+ width: 375px;
|
|
|
+ max-height: 420px;
|
|
|
+ border-radius: 20px;
|
|
|
+ background-color: #fff;
|
|
|
+ box-shadow: 0px 4px 20px rgba(0, 0, 0, 0.25);
|
|
|
+ }
|
|
|
}
|
|
|
.explain {
|
|
|
color: #B4B4B4;
|
|
@@ -306,6 +731,9 @@ const showSuccess = ref(false)
|
|
|
padding: 0;
|
|
|
margin-left: 14px;
|
|
|
}
|
|
|
+ .special {
|
|
|
+ color: #E29015;
|
|
|
+ }
|
|
|
}
|
|
|
.footer {
|
|
|
height: 80px;
|
|
@@ -323,7 +751,7 @@ const showSuccess = ref(false)
|
|
|
box-sizing: border-box;
|
|
|
background-color: #fff;
|
|
|
border-top: solid 1px #ECECEC;
|
|
|
- button {
|
|
|
+ .on {
|
|
|
border: 0;
|
|
|
height: 50px;
|
|
|
color: #FFFFFF;
|
|
@@ -335,6 +763,18 @@ const showSuccess = ref(false)
|
|
|
border-radius: 25px;
|
|
|
background: #1D9BF0;
|
|
|
}
|
|
|
+ .off {
|
|
|
+ border: 0;
|
|
|
+ height: 50px;
|
|
|
+ color: #FFFFFF;
|
|
|
+ cursor: pointer;
|
|
|
+ padding: 0 50px;
|
|
|
+ font-size: 18px;
|
|
|
+ font-weight: 700;
|
|
|
+ letter-spacing: 0.3px;
|
|
|
+ border-radius: 25px;
|
|
|
+ background: #E4E4E4;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -343,7 +783,12 @@ const showSuccess = ref(false)
|
|
|
right: 44px;
|
|
|
bottom: 88px;
|
|
|
cursor: pointer;
|
|
|
+ font-size: 12px;
|
|
|
text-align: center;
|
|
|
+ a:link, a:visited {
|
|
|
+ color: #A8A8A8;
|
|
|
+ text-decoration: none;
|
|
|
+ }
|
|
|
.mail {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
@@ -432,4 +877,12 @@ const showSuccess = ref(false)
|
|
|
height: 100%;
|
|
|
background: rgba(0, 0, 0, .8);
|
|
|
}
|
|
|
+.mask-bg {
|
|
|
+ position: absolute;
|
|
|
+ top: 0;
|
|
|
+ left: 0;
|
|
|
+ z-index: 2;
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+}
|
|
|
</style>
|