Commit bef5e2f5 by haojie

1

parent bf439380
This source diff could not be displayed because it is too large. You can view the blob instead.
<svg width="39" height="39" viewBox="0 0 39 39" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<rect width="39" height="39" rx="19.5" fill="#AF62A3" fill-opacity="0.08"/>
<rect x="5" y="5" width="29" height="29" rx="14.5" fill="url(#pattern0)"/>
<rect x="0.5" y="0.5" width="38" height="38" rx="19" stroke="#AF62A3" stroke-opacity="0.5"/>
<defs>
<pattern id="pattern0" patternContentUnits="objectBoundingBox" width="1" height="1">
<use xlink:href="#image0_1033_6033" transform="translate(-0.157895 -0.157895) scale(0.0263158)"/>
</pattern>
<image id="image0_1033_6033" width="50" height="50" xlink:href="data:image/png;base64,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"/>
</defs>
</svg>
\ No newline at end of file
import{_ as s}from"./index-d523fc41.js";import{A as r,K as o}from"./vue-b57be6e6.js";import"./Tdesign-378b352a.js";const t={class:""};const e=s({},[["render",function(s,e){return r(),o("div",t,"lp")}]]);export{e as default};
import{U as a,A as t,K as e,L as l,d as s,a as i}from"./vue-b57be6e6.js";const n=()=>{let a=window.navigator.userAgent;if(a)return!!/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(a)},r=()=>{try{let a=document.documentElement.clientWidth;return a||0}catch(a){return 0}},o=a("FoxDialog",{state:()=>({dialog:!1})}),d=a("FoxWallet",{state:()=>({address:"",MaskAddress:"",to:""})}),u={xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",fill:"none"},c=[l("g",{"clip-path":"url(#a)"},[l("path",{fill:"#544FA1",d:"m7.286 6 4.457-4.457a.932.932 0 0 0 0-1.286.932.932 0 0 0-1.286 0L6 4.714 1.543.257a.932.932 0 0 0-1.286 0 .932.932 0 0 0 0 1.286L4.714 6 .257 10.457a.932.932 0 0 0 0 1.286.932.932 0 0 0 1.286 0L6 7.286l4.457 4.457a.932.932 0 0 0 1.286 0 .932.932 0 0 0 0-1.286L7.286 6Z"})],-1),l("defs",null,[l("clipPath",{id:"a"},[l("path",{fill:"#fff",d:"M0 0h12v12H0z"})])],-1)];const p={render:function(a,l){return t(),e("svg",u,c)}},g=s({props:{value:{type:String,default:""}},setup:a=>()=>i("div",{class:"custom-global-loading"},[i("div",{class:"loader"},null),i("span",null,[a.value])])});export{p as C,g as L,d as a,n as b,r as g,o as u};
import{_ as s}from"./index-d523fc41.js";import{A as r,K as o}from"./vue-b57be6e6.js";import"./Tdesign-378b352a.js";const t={class:""};const e=s({},[["render",function(s,e){return r(),o("div",t,"HOME")}]]);export{e as default};
This source diff could not be displayed because it is too large. You can view the blob instead.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/logo.png" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>RESDAO</title>
<script type="module" crossorigin src="/assets/index-d523fc41.js"></script>
<link rel="modulepreload" crossorigin href="/assets/vue-b57be6e6.js">
<link rel="modulepreload" crossorigin href="/assets/Tdesign-378b352a.js">
<link rel="stylesheet" href="/assets/style-98572a0b.css">
</head>
<body>
<div id="app"></div>
</body>
</html>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="37.07" height="36" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 198"><path fill="#41B883" d="M204.8 0H256L128 220.8L0 0h97.92L128 51.2L157.44 0h47.36Z"></path><path fill="#41B883" d="m0 0l128 220.8L256 0h-51.2L128 132.48L50.56 0H0Z"></path><path fill="#35495E" d="M50.56 0L128 133.12L204.8 0h-47.36L128 51.2L97.92 0H50.56Z"></path></svg>
\ No newline at end of file
......@@ -7,11 +7,13 @@ import detectEthereumProvider from '@metamask/detect-provider';
import { MessagePlugin } from 'tdesign-vue-next';
import Loading from '../Loading';
import { useFoxWallet } from '@/store/FoxWallet';
import { useI18n } from 'vue-i18n';
export default defineComponent({
setup(props) {
const { $state: foxDialog } = useFoxDialog();
// 钱包地址
const { $state: userAddress } = useFoxWallet();
const { t } = useI18n();
const loading = ref(false);
// 钱包列表
const WalletList = reactive({
......@@ -24,7 +26,7 @@ export default defineComponent({
],
});
const dialogHead = () => {
return <div>连接钱包</div>;
return <div>{t('header.connectWallet')}</div>;
};
const closeIcon = () => {
return <CloseSvg></CloseSvg>;
......@@ -49,17 +51,17 @@ export default defineComponent({
}
if (tooltip) {
MessagePlugin.closeAll();
MessagePlugin.success('连接成功');
MessagePlugin.success(t('header.connectSuccess'));
}
} catch (e: any) {
if (tooltip) {
if (e.code == -32002) {
MessagePlugin.closeAll();
MessagePlugin.warning('连接请求已存在');
MessagePlugin.warning(t('header.Connectionexists'));
return;
}
MessagePlugin.closeAll();
MessagePlugin.warning('连接失败');
MessagePlugin.warning('header.connectError');
}
console.log(e);
}
......@@ -71,7 +73,7 @@ export default defineComponent({
let provider = await detectEthereumProvider();
loading.value = false;
if (!provider) {
MessagePlugin.warning('请先下载MetaMask插件');
MessagePlugin.warning(t('header.downLoad'));
return;
}
// 连接钱包--主动连接--需要提示文字
......
import { defineComponent } from 'vue';
import './index.less';
import EmptySvg from '@/assets/svg/empty/empty.svg';
import { useI18n } from 'vue-i18n';
export default defineComponent({
setup() {
const { t } = useI18n();
return () => (
<div class="custom-empty">
<EmptySvg></EmptySvg>
<span>空空如也</span>
<span>{t('empty.empty')}</span>
</div>
);
},
......
......@@ -12,11 +12,11 @@ export default function () {
toClipboard(keyword)
.then(() => {
MessagePlugin.closeAll();
MessagePlugin.success('复制成功');
MessagePlugin.success(t('header.copySuccess'));
})
.catch((e) => {
MessagePlugin.closeAll();
MessagePlugin.error('复制失败');
MessagePlugin.error(t('header.copyerror'));
});
};
return {
......
......@@ -7,9 +7,24 @@ const cn = {
tips: {
invite: '邀请朋友参与,可提高成功概率',
},
empty: {
empty: '空空如也',
},
request: {
error: '请求错误',
},
header: {
connect: '连接',
connectWallet: '连接钱包',
connectSuccess: '连接成功',
Connectionexists: '连接请求已存在',
connectError: '连接失败',
downLoad: '请先下载MetaMask插件',
copySuccess: '复制成功',
copyerror: '复制失败',
plconnect: '请先连接钱包',
copy: '复制',
UnconnectedWallet: '未连接钱包',
},
raffle: {
MyBlindBox: '我的盲盒',
......@@ -29,9 +44,25 @@ const cn = {
NumberBuyers: '购买人数',
success: '成功',
Failed: '失败',
PurchaseSuccess: '购买成功',
ChargingRecord: '充值记录检测中...',
Missingpayment: '缺少收款账号,请刷新重试',
hasEnded: '活动已结束',
Unableto: '无法再购买',
Numbercurrent: '当前购买人数',
Youwillspend: '你将花费',
Winprize: '中奖可得',
BuyNow: '立即购买',
onepurchase: '提示:每个盲盒只能购买一次',
rule: '规则',
},
button: {
back: '返回',
},
invite: {
yourCode: '你的邀请码',
Currentblind: '当前盲盒邀请',
probability: '提高成功概率',
},
};
export default cn;
......@@ -8,9 +8,24 @@ const en = {
invite:
'Invite friends to participate to increase the probability of success',
},
request: {
error: 'Request Error',
},
empty: {
empty: 'Empty',
},
header: {
connect: 'Connect',
connectWallet: 'Connect',
connectSuccess: 'Connection success',
Connectionexists: 'Connection request already exists',
connectError: 'Connection failed',
downLoad: 'Please download MetaMask plugin first',
copySuccess: 'Copy Success',
copyerror: 'Copy failure',
plconnect: 'Please connect your wallet first',
copy: 'Copy',
UnconnectedWallet: 'Unconnected Wallet',
},
raffle: {
MyBlindBox: 'My Blind Box',
......@@ -30,9 +45,25 @@ const en = {
NumberBuyers: 'Number of buyers',
success: 'Success',
Failed: 'Failed',
PurchaseSuccess: 'Purchase Success',
ChargingRecord: 'Charging record detection in progress...',
Missingpayment: 'Missing payment account, please refresh and try again',
hasEnded: 'The event has ended',
Unableto: 'Unable to purchase again',
Numbercurrent: 'Number of current purchasers',
Youwillspend: 'You will spend',
Winprize: 'Win a prize and get',
BuyNow: 'Buy Now',
onepurchase: 'Tip: Each blind box can only be purchased once',
rule: 'Rules',
},
button: {
back: 'Back',
},
invite: {
yourCode: 'Your invitation code',
Currentblind: 'Current blind box invitation',
probability: 'Improving the probability of success',
},
};
export default en;
......@@ -45,7 +45,7 @@ export default defineComponent({
});
if (res.data == true) {
closeInterval();
MessagePlugin.success('购买成功');
MessagePlugin.success(t('raffle.PurchaseSuccess'));
}
} catch (e) {
console.log(e);
......@@ -82,7 +82,7 @@ export default defineComponent({
let res: any = await buy_blindBox(params);
if (res.code == 0) {
// 开启轮询
MessagePlugin.success('充值记录检测中...');
MessagePlugin.info(t('raffle.ChargingRecord'));
if (UserHash.value) {
openCheckInterval();
}
......@@ -91,7 +91,7 @@ export default defineComponent({
// 支付
const Payment = () => {
if (!FoxWallet.to) {
MessagePlugin.warning('缺少收款账号,请刷新重试');
MessagePlugin.warning(t('raffle.Missingpayment'));
return;
}
let eth: any = window;
......@@ -159,11 +159,11 @@ export default defineComponent({
const { info } = props;
// 地址
if (!FoxWallet.address) {
MessagePlugin.warning('请先连接钱包');
MessagePlugin.warning(t('header.plconnect'));
return;
}
if (info.countdown <= 0) {
MessagePlugin.warning('活动已结束');
MessagePlugin.warning(t('raffle.hasEnded'));
return;
}
// 能否购买
......@@ -172,7 +172,7 @@ export default defineComponent({
Payment();
} else {
MessagePlugin.closeAll();
MessagePlugin.warning('无法再购买');
MessagePlugin.warning(t('raffle.Unableto'));
}
};
return () => (
......@@ -184,18 +184,18 @@ export default defineComponent({
<div class="detail-head-content">
<div class="title">{props.info.projectName}</div>
<div class="count-down-box">
<div class="label">购买倒计时</div>
<div class="label">{t('raffle.PurchaseCountdown')}</div>
<div class="value">
<CustomCountDown time={props.info.countdown}></CustomCountDown>
</div>
</div>
<div class="price-and-buynum">
<div class="price-box">
<div class="label">价格</div>
<div class="label">{t('raffle.price')}</div>
<div class="value">{props.info.price} RESDAO</div>
</div>
<div class="price-box margin">
<div class="label">当前购买人数</div>
<div class="label">{t('raffle.Numbercurrent')}</div>
<div class="value">
{props.info.buy_num}/{props.info.max_participants_num}
</div>
......@@ -204,25 +204,25 @@ export default defineComponent({
<div class="line"></div>
<div class="price-and-prize">
<div>
<span>你将花费:</span>
<span>{t('raffle.Youwillspend')}</span>
{props.info.price} RESDAO
</div>
<div>
<span class="text2">中奖可获得:</span>
<span class="text2">{t('raffle.Winprize')}</span>
{props.info.price * 3} RESDAO
</div>
</div>
<div class="content-wallet-tooltip">
{FoxWallet.address ? (
<button class="connect-wallet" onClick={Buy_now}>
立即购买
{t('raffle.BuyNow')}
</button>
) : (
<button class="connect-wallet" onClick={openDialog}>
连接钱包
{t('header.connectWallet')}
</button>
)}
<span class="text">提示:一次只能购买一次</span>
<span class="text">{t('raffle.onepurchase')}</span>
<div class="open-link">
<t-tooltip content={t('tips.invite')}>
<span onClick={openInviteDialog}>
......@@ -235,7 +235,7 @@ export default defineComponent({
</div>
<div class="content-line"></div>
<div class="custom-Rules">
<div class="title">规则</div>
<div class="title">{t('raffle.rule')}</div>
<div class="value" innerHTML={props.info.rules}></div>
</div>
<InviteDialog
......
......@@ -4,6 +4,7 @@ import './index.less';
import { getUserInfo } from '@/utils/api/BlindBox';
import { useFoxWallet } from '@/store/FoxWallet';
import useCopy from '@/hook/useCopy';
import { useI18n } from 'vue-i18n';
export default defineComponent({
props: {
modelValue: Boolean,
......@@ -12,6 +13,7 @@ export default defineComponent({
emits: ['update:modelValue'],
setup(props, { emit }) {
const { doCopy } = useCopy();
const { t } = useI18n();
const visible = ref(props.modelValue);
const resObj = ref<any>({});
const { $state: FoxWallet } = useFoxWallet();
......@@ -56,18 +58,18 @@ export default defineComponent({
closeBtn={closeIcon}
>
<div class="invite-dialog-body">
<div class="title">你的邀请码</div>
<div class="title">{t('invite.yourCode')}</div>
<div class="invite-box">
<div class="url">{resObj.value.invitation_link}</div>
<div
class="copy-button"
onClick={doCopy.bind(this, resObj.value.invitation_link ?? '')}
>
复制
{t('header.copy')}
</div>
</div>
<div class="current-invite-address">
<div class="label">当前盲盒邀请</div>
<div class="label">{t('invite.Currentblind')}</div>
<div class="value">
{resObj.value.invite_list
? resObj.value.invite_list.map((item: any) => (
......@@ -77,7 +79,7 @@ export default defineComponent({
</div>
</div>
<div class="current-invite-address margin">
<div class="label">提高成功概率:</div>
<div class="label">{t('invite.probability')}</div>
<div class="value">{resObj.value.rate}%</div>
</div>
</div>
......
......@@ -133,7 +133,7 @@ export default defineComponent({
</div>
</div>
<div class="price end" v-show={props.showEnd}>
<div class="label">中奖可得</div>
<div class="label">{t('raffle.Winprize')}</div>
<div class="value">{props.info.price * 3}$</div>
</div>
</div>
......
......@@ -77,7 +77,7 @@ export default defineComponent({
const getList = async () => {
try {
if (!FoxWallet.address) {
MessagePlugin.warning('未连接钱包');
MessagePlugin.warning(t('header.UnconnectedWallet'));
return;
}
loading.value = true;
......
......@@ -4,7 +4,7 @@
width: 100% !important;
box-sizing: border-box;
padding: 0 12px !important;
margin: 20px auto 0 auto !important;
padding: 20px 12px 0 12px !important;
.header {
border-bottom: none;
.custom-right-button {
......
import axios from 'axios';
import { MessagePlugin } from 'tdesign-vue-next';
import i18n from '@/language';
const instance = axios.create({
timeout: 1000,
withCredentials: true,
......@@ -14,18 +14,14 @@ instance.defaults.timeout = 60000;
instance.interceptors.response.use(
(response) => {
const { data, headers, status } = response;
const { data } = response;
if (data.code === 200) {
return data.data;
} else if (data.code === 0) {
return data;
} else if (data.code === 2) {
MessagePlugin.closeAll();
MessagePlugin.warning('登录信息已过期');
return;
} else {
MessagePlugin.closeAll();
MessagePlugin.error(data.msg || '请求错误,请稍后重试');
MessagePlugin.error(data.msg || i18n.global.t('request.error'));
return Promise.reject(data.msg);
}
},
......@@ -33,7 +29,7 @@ instance.interceptors.response.use(
const { config } = err;
if ('response' in err) {
const { message: msg } = err.response.data;
MessagePlugin.error(msg || '请求错误,请稍后重试');
MessagePlugin.error(msg || i18n.global.t('request.error'));
}
if (!config || !config.retry) return Promise.reject(err);
}
......
......@@ -12,7 +12,7 @@ export default defineConfig(({ command, mode }) => {
let newDate = `${date.getFullYear()}-${
date.getMonth() + 1
}-${date.getDate()}--${date.getHours()}.${date.getMinutes()}`;
let api = 0 ? 'http://mxcus.net' : 'http://127.0.0.1:8000';
let api = 1 ? 'http://147.161.32.43:8001' : 'http://127.0.0.1:8000';
return {
base: '/',
resolve: {
......
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