747 lines
32 KiB
HTML
747 lines
32 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||
<meta name="description" content="PYXEL || Ultimate Gaming HTML Template">
|
||
|
||
<title>Samsara DAO</title>
|
||
<script src="https://cdn.jsdelivr.net/npm/web3@latest/dist/web3.min.js"></script>
|
||
<!-- All CSS files -->
|
||
<link rel="stylesheet" href="static/css/font-awesome.css">
|
||
<link rel="stylesheet" href="static/css/bootstrap.min.css">
|
||
<link rel="stylesheet" href="static/css/app.css">
|
||
<link rel="stylesheet" href="static/js/element-ui-min.css">
|
||
</head>
|
||
|
||
<body class="tt-smooth-scroll">
|
||
<!-- Main Wrapper Start -->
|
||
<div id="app">
|
||
|
||
<!-- HEADER MENU START -->
|
||
<div id="publickHeader"></div>
|
||
<!-- HEADER MENU END -->
|
||
|
||
<!-- BG-GAME PAGE # 1 START -->
|
||
<div class="order-h5-page" v-loading="tableLoading" element-loading-background="rgba(0, 0, 0, 0.8)" element-loading-spinner="el-icon-loading">
|
||
<!-- 订单状态标签 -->
|
||
<div class="order-tabs">
|
||
<div class="tab-item" :class="{active: activeTab === ''}" @click="changeTab('')">{{ currentLanguage == 'zh' ? '全部訂單' : 'All orders' }}</div>
|
||
<div class="tab-item" :class="{active: activeTab === 'waitpay'}" @click="changeTab('waitpay')">{{ currentLanguage == 'zh' ? '待支付' : 'Payment to be made' }}</div>
|
||
<div class="tab-item" :class="{active: activeTab === 'paying'}" @click="changeTab('paying')">{{ currentLanguage == 'zh' ? '交易中' : 'Trading' }}</div>
|
||
<div class="tab-item" :class="{active: activeTab === 'finish'}" @click="changeTab('finish')">{{ currentLanguage == 'zh' ? '已完成' : 'Completed' }}</div>
|
||
</div>
|
||
|
||
<!-- 时间筛选 -->
|
||
<div class="filter-section">
|
||
<el-select v-model="timeFilter" :placeholder="currentLanguage == 'zh' ? '請選擇':'Please select'" style="width: 120px">
|
||
<el-option :label="currentLanguage == 'zh' ? '買入 | 租賃':'Buy | Lease'" value="buyer"></el-option>
|
||
<el-option :label="currentLanguage == 'zh' ? '求購賣出':'Buy Sell'" value="seller"></el-option>
|
||
</el-select>
|
||
</div>
|
||
|
||
<!-- 订单列表 -->
|
||
<div class="order-list">
|
||
<div class="order-item" v-for="order in orderListObj.data" :key="order.id">
|
||
<!-- 订单头部 -->
|
||
<div class="order-header">
|
||
<div class="order-info">
|
||
<span class="order-time">{{ expirationTimeOp(order.createtime * 1000) }}</span>
|
||
<span class="order-no">{{ currentLanguage == 'zh' ? '訂單編號:' : 'Order Number:' }}{{order.order_no}}</span>
|
||
</div>
|
||
<div class="order-status">
|
||
<span v-if="order.status == '等待支付上架费'">{{ currentLanguage == 'zh' ? '等待支付上架費' : 'Waiting for payment of listing fee' }}</span>
|
||
<span v-if="order.status == '待支付'" style="color: blue;">{{ currentLanguage == 'zh' ? '待支付' : 'Payment to be made' }}</span>
|
||
<span v-if="order.status == '已支付'" style="color: green;">{{ currentLanguage == 'zh' ? '已支付' : 'Paid' }}</span>
|
||
<span v-if="order.status == '已完成'" style="color: green;">{{ currentLanguage == 'zh' ? '已完成' : 'Completed' }}</span>
|
||
<span v-if="order.status == '支付失败'">{{ currentLanguage == 'zh' ? '支付失敗' : 'Payment failed' }}</span>
|
||
<span v-if="order.status == '已取消'">{{ currentLanguage == 'zh' ? '已取消' : 'Cancelled' }}</span>
|
||
<span v-if="order.status == '求购中'" style="color: orange;">{{ currentLanguage == 'zh' ? '求購中' : 'Buying' }}</span>
|
||
<span v-if="order.status == '交易中'" style="color: orange;">{{ currentLanguage == 'zh' ? '交易中' : 'Trading' }}</span>
|
||
<span v-if="order.status == '成功'" style="color: green;">{{ currentLanguage == 'zh' ? '成功' : 'success' }}</span>
|
||
<span v-if="order.status == '失败'">{{ currentLanguage == 'zh' ? '失敗' : 'fail' }}</span>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 订单商品列表 -->
|
||
<div class="product-list">
|
||
<div class="product-item" v-for="(product, index) in order.items" :key="product.id">
|
||
<div class="product-info">
|
||
<img :src="baseUrl + product.tplinfo.img" class="product-thumb">
|
||
<div class="product-detail">
|
||
<div class="product-name">{{ currentLanguage == 'zh' ? product.tplinfo.name_cn : product.tplinfo.name_en }}</div>
|
||
<div class="product-spec">{{ currentLanguage == 'zh' ? product.tplinfo.desc_cn : product.tplinfo.desc_en }}</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 订单底部 -->
|
||
<div class="order-footer">
|
||
<div class="order-amount">
|
||
<span>{{ currentLanguage == 'zh' ? `共 ${order.items.length} 件商品` : `Total ${order.items.length} item`}}</span>
|
||
<span class="total-price">{{ currentLanguage == 'zh' ? `合計:${order.bnb} BNB`: `Total: ${order.bnb} BNB` }}</span>
|
||
</div>
|
||
<div class="order-actions">
|
||
<template v-if="order.status === '待支付'">
|
||
<el-button type="primary" size="small" @click="goToPay(order)">{{ currentLanguage == 'zh' ? '去付款' : 'Go to payment' }}</el-button>
|
||
<el-button type="primary" size="small" @click="goToPaid(order)">{{ currentLanguage == 'zh' ? '我已支付' : 'I have paid' }}</el-button>
|
||
</template>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 分页 -->
|
||
<div style="height: 60px;display: flex;justify-content: flex-end;align-items: center;">
|
||
<el-pagination
|
||
background
|
||
layout="prev, pager, next"
|
||
@current-change="handleCurrentChange"
|
||
:total="orderListObj.total"
|
||
:current-page.sync="orderSearchObj.page"
|
||
>
|
||
</el-pagination>
|
||
</div>
|
||
</div>
|
||
<!-- BG-GAME PAGE # 1 END -->
|
||
|
||
<!-- FOOTER START -->
|
||
<div id="publciFooter"></div>
|
||
<!-- FOOTER END -->
|
||
<!-- 錢包選擇彈窗 -->
|
||
<el-dialog :visible.sync="moneyDialogVisible" width="40%" custom-class="wallet-dialog">
|
||
<div class="wallet-container">
|
||
<i class="el-icon-close" @click="moneyDialogVisible = false"></i>
|
||
<div class="wallet-left">
|
||
<h6 style="font-weight: 700;margin-bottom: 4vh;">{{currentLanguage == 'zh' ? '連接錢包' : 'Connect wallet'}}</h6>
|
||
<p class="wallet-tip">
|
||
{{ currentLanguage == 'zh' ? '首先,連接以下其中一個錢包。 請務必安全地儲存您的私密金鑰或助記詞,永遠不要與任何人分享它們。' : 'Firstly, connect one of the following wallets. Please make sure to securely store your private keys or mnemonics and never share them with anyone.' }}
|
||
</p>
|
||
|
||
<div class="wallet-grid">
|
||
<div v-for="(wallet,index) in wallets" :key="index" class="wallet-item"
|
||
@click="selectWallet(wallet)">
|
||
<img :src="wallet.icon" :alt="wallet.name">
|
||
<span>{{ wallet.name }}</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="wallet-right" v-if="selectMoney.icon">
|
||
<div class="connecting-status">
|
||
<img :src="selectMoney.icon" class="tp-logo">
|
||
<p class="status-text">{{ currentLanguage == 'zh' ? '正在打開' : 'Opening' }} {{selectMoney.name}}</p>
|
||
<p class="confirm-text">
|
||
{{ currentLanguage == 'zh' ? '請在' : 'Please in' }}
|
||
{{selectMoney.name}}
|
||
{{ currentLanguage == 'zh' ? '中確認' : 'Confirm in the middle' }}</p>
|
||
</div>
|
||
</div>
|
||
<div v-else style="display: flex;justify-content: center;align-items: center;width: 50%;">{{ moneyTip(moneyTipMessage) }}</div>
|
||
</div>
|
||
</el-dialog>
|
||
<!-- 錢包地址彈窗 -->
|
||
<el-dialog :visible.sync="showMoneyAdress" width="30%" :close-on-click-modal="false">
|
||
<div style="color: #000;">
|
||
{{ currentLanguage == 'zh' ? '錢包地址:' : 'Wallet address:' }}
|
||
{{ userMoneyAdressAll }}
|
||
<img src="static/image/fuzhi.png" @click="copyText(userMoneyAdressAll)" style="margin-left: 5px;vertical-align: middle;cursor: pointer;">
|
||
</div>
|
||
</el-dialog>
|
||
<!-- 已支付但未完成订单 -->
|
||
<el-dialog :title="currentLanguage == 'zh' ? '提示' : 'hint'" :visible.sync="paymentDialogVisible" width="25%" custom-class="bid-dialog" :show-close="true"
|
||
center>
|
||
<div class="price-section">
|
||
<el-input v-model="paymentTxId" :placeholder="currentLanguage == 'zh' ? '請輸入支付訂單hash':'Please enter the payment order hash'" class="price-input"></el-input>
|
||
</div>
|
||
<div slot="footer" class="dialog-footer" style="display: flex;justify-content: flex-end;">
|
||
<el-button type="danger" @click="paymentDialogVisible = false" class="confirm-btn">{{ currentLanguage == 'zh' ? '取消' : 'Cancel'}}</el-button>
|
||
<el-button type="primary" @click="submitPaymentHash" class="confirm-btn">{{ currentLanguage == 'zh' ? '確定' : 'Sure'}}</el-button>
|
||
</div>
|
||
</el-dialog>
|
||
</div>
|
||
<!-- Main Wrapper End -->
|
||
|
||
<!-- Back To Top Start -->
|
||
<button class="scrollToTopBtn"><i class="fa fa-arrow-up"></i></button>
|
||
<!-- Mobile Menu Start -->
|
||
<div class="mobile-nav__wrapper">
|
||
<div class="mobile-nav__overlay mobile-nav__toggler"></div>
|
||
<div class="mobile-nav__content">
|
||
<span class="mobile-nav__close mobile-nav__toggler"><i class="fa fa-times"></i></span>
|
||
<div class="logo-box">
|
||
<a href="index.html" aria-label="logo image"><img src="static/picture/logo.png" alt=""></a>
|
||
</div>
|
||
<div class="mobile-nav__container"></div>
|
||
</div>
|
||
</div>
|
||
<!-- Mobile Menu End -->
|
||
<!-- Jquery Js -->
|
||
<script src="static/js/bootstrap.min.js"></script>
|
||
<script src="static/js/jquery-3.6.3.min.js"></script>
|
||
<script src="static/js/publickDOM.js"></script>
|
||
<!-- 引入翻譯文件 -->
|
||
<script src="static/js/translation.js"></script>
|
||
<script src="static/js/i18n.js"></script>
|
||
<!-- 獲取用戶信息 -->
|
||
<script src="static/js/getIsUser.js"></script>
|
||
<!-- 引入 Vue.js -->
|
||
<script src="static/js/vue.js" ></script>
|
||
<!-- 引入 axios -->
|
||
<script src="static/js/axios.min.js"></script>
|
||
<!-- 引入 Element UI JS -->
|
||
<script src="static/js/element-ui.js"></script>
|
||
<script>
|
||
// 創建一個增強版的 localStorage
|
||
const enhancedStorage = {
|
||
setItem: function (key, value) {
|
||
localStorage.setItem(key, value);
|
||
// 觸發自定義事件
|
||
window.dispatchEvent(new CustomEvent('localStorageChange', {
|
||
detail: { key, value }
|
||
}));
|
||
},
|
||
getItem: function (key) {
|
||
return localStorage.getItem(key);
|
||
}
|
||
};
|
||
|
||
// 替換原始的 setItem 方法
|
||
const originalSetItem = localStorage.setItem;
|
||
localStorage.setItem = function (key, value) {
|
||
originalSetItem.call(localStorage, key, value);
|
||
window.dispatchEvent(new CustomEvent('localStorageChange', {
|
||
detail: { key, value }
|
||
}));
|
||
};
|
||
new Vue({
|
||
el: "#app",
|
||
data() {
|
||
return {
|
||
userInfoObj:{},
|
||
// 錢包登錄開始
|
||
userMoneyAdressAll: "",
|
||
showGoodClass: false,
|
||
showMoneyAdress: false,
|
||
hasAdress: false,
|
||
moneyTipMessage: "",
|
||
selectMoney: {},
|
||
wallets: [
|
||
{
|
||
name: 'MetaMask',
|
||
icon: 'static/metamask.png'
|
||
},
|
||
{
|
||
name: 'TokenPocket',
|
||
icon: 'static/tokenpocket.png'
|
||
},
|
||
{
|
||
name: 'OKX Wallet',
|
||
icon: 'static/okx-wallet.png'
|
||
}
|
||
],
|
||
moneyDialogVisible: false,
|
||
userIsLogin: false,
|
||
userMoneyAdress: "",
|
||
// 錢包登錄結尾
|
||
currentLanguage: localStorage.getItem('languageNow') || 'en',
|
||
baseUrl,
|
||
activeTab: '',
|
||
timeFilter: 'buyer',
|
||
orderSearchObj:{
|
||
page:1,
|
||
listrow:5
|
||
},
|
||
orderListObj: {},
|
||
tableLoading: false,
|
||
paymentDialogVisible:false,
|
||
paymentTxId:"",
|
||
nowPaidOrderObj:{},//已支付但订单未完成信息
|
||
}
|
||
},
|
||
async created(){
|
||
const user = window.localStorage.getItem("userInfo");
|
||
this.userInfoObj = JSON.parse(user);
|
||
if (user) {
|
||
this.userIsLogin = true;
|
||
}
|
||
// 錢包登錄開始
|
||
const provider = window.web3?.currentProvider;
|
||
let accounts1 = [];
|
||
let accounts2 = [];
|
||
let accounts3 = [];
|
||
if(provider){
|
||
accounts1 = await provider.request({method: 'eth_accounts'});
|
||
}
|
||
if(window.tokenpocket?.ethereum){
|
||
accounts2 = await window.tokenpocket.ethereum.request({method: 'eth_accounts'});
|
||
}
|
||
if(window.okxwallet || (window.ethereum && window.ethereum?.isOKExWallet)){
|
||
accounts3 = await window.okxwallet.request({method: 'eth_accounts'});
|
||
}
|
||
console.log(accounts1,accounts2,accounts3,'see');
|
||
let _adressM = accounts1[0] || accounts2[0] || accounts3[0];
|
||
if(_adressM){
|
||
this.userMoneyAdressAll = _adressM;
|
||
this.userMoneyAdress = _adressM.slice(0,4) + "...." + _adressM.slice(-4);
|
||
}
|
||
if(accounts1[0]?.length > 0){
|
||
this.connectWalletType = "MetaMask";
|
||
}
|
||
if(accounts2[0]?.length > 0){
|
||
this.connectWalletType = "TokenPocket";
|
||
}
|
||
if(accounts3[0]?.length > 0){
|
||
this.connectWalletType = "OKX Wallet";
|
||
}
|
||
// 錢包登錄結尾
|
||
},
|
||
watch:{
|
||
timeFilter:{
|
||
handler(val){
|
||
this.orderSearchObj.page = 1;
|
||
this.orderListObj = {};
|
||
this.getallorderList();
|
||
}
|
||
},
|
||
deep:true
|
||
},
|
||
mounted() {
|
||
window.addEventListener('localStorageChange', (event) => {
|
||
if (event.detail.key === 'languageNow') {
|
||
this.currentLanguage = event.detail.value;
|
||
}
|
||
});
|
||
this.getallorderList();
|
||
},
|
||
methods: {
|
||
expirationTimeOp(timestamp){
|
||
const date = new Date(timestamp); // 创建 Date 对象
|
||
const year = date.getFullYear(); // 获取年份
|
||
const month = String(date.getMonth() + 1).padStart(2, '0'); // 获取月份,注意月份从0开始
|
||
const day = String(date.getDate()).padStart(2, '0'); // 获取日期
|
||
const hours = String(date.getHours()).padStart(2, '0'); // 获取小时
|
||
const minutes = String(date.getMinutes()).padStart(2, '0'); // 获取分钟
|
||
const seconds = String(date.getSeconds()).padStart(2, '0'); // 获取秒钟
|
||
|
||
// 返回格式化后的日期字符串
|
||
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
|
||
},
|
||
getallorderList(){
|
||
this.tableLoading = true;
|
||
let _that = this;
|
||
$.ajax({
|
||
url: `${baseUrl}api/project/getorderlist`,
|
||
type: "get",
|
||
data: {
|
||
..._that.orderSearchObj,
|
||
trade: _that.timeFilter,
|
||
state: _that.activeTab
|
||
},
|
||
headers: {
|
||
token: _that.userInfoObj.token
|
||
},
|
||
success(res){
|
||
if (res.code === 1) {
|
||
_that.orderListObj = res.data;
|
||
_that.tableLoading = false;
|
||
} else {
|
||
_that.$message.error(res.msg)
|
||
}
|
||
},
|
||
error(error) {
|
||
_that.$message.error(error)
|
||
}
|
||
})
|
||
},
|
||
changeTab(tab) {
|
||
this.activeTab = tab;
|
||
this.orderSearchObj.page = 1;
|
||
this.getallorderList();
|
||
},
|
||
submitPaymentHash(){
|
||
let message = "";
|
||
this.currentLanguage == 'zh' ? message = '請輸入支付訂單hash' : message = 'Please enter the payment order hash'
|
||
if(!this.paymentTxId){
|
||
this.$message.error(message);
|
||
return
|
||
}
|
||
this.paymentDialogVisible = false;
|
||
let tipMessage = this.currentLanguage == 'zh' ? '查詢中,請勿刷新頁面...' : 'Querying, please do not refresh the page';
|
||
this.orderLoading = this.$loading({ lock: true, text: tipMessage, spinner: 'el-icon-loading', background: 'rgba(0, 0, 0, 0.7)' });
|
||
this.submitOrderHash(this.nowPaidOrderObj.id,this.paymentTxId);
|
||
},
|
||
goToPaid(order){
|
||
this.nowPaidOrderObj = {...order};
|
||
this.paymentDialogVisible = true;
|
||
},
|
||
goToPay(order) {
|
||
let _that = this;
|
||
let message1 = this.currentLanguage == 'zh' ? '請連接錢包' : 'Please connect the wallet';
|
||
let tip = this.currentLanguage == 'zh' ? '提示' : 'tips';
|
||
let confirm = this.currentLanguage == 'zh' ? '確定' : 'confirm';
|
||
let cancel = this.currentLanguage == 'zh' ? '取消' : 'cancel';
|
||
if(!this.userMoneyAdressAll){
|
||
this.$message.error(message1);
|
||
setTimeout(()=>{
|
||
this.moneyDialogVisible = true;
|
||
},1000)
|
||
return
|
||
}
|
||
|
||
let tipmessage = _that.currentLanguage == 'zh' ? `是否前往支付訂單費用?` : `Do you want to pay for the order?`;
|
||
if(_that.timeFilter == 'seller'){
|
||
tipmessage = _that.currentLanguage == 'zh' ? `是否前往支付版權費?` : `Do you want to pay the copyright fee?`;
|
||
}
|
||
_that.$confirm(tipmessage, tip, {
|
||
confirmButtonText: confirm,
|
||
cancelButtonText: cancel,
|
||
type: 'warning'
|
||
}).then(() => {
|
||
let tipMessage = _that.currentLanguage == 'zh' ? '交易中,請勿刷新頁面...' : 'During the transaction, please do not refresh the page';
|
||
_that.orderLoading = _that.$loading({ lock: true, text: tipMessage, spinner: 'el-icon-loading', background: 'rgba(0, 0, 0, 0.7)' });
|
||
_that.payOrderFee(order);
|
||
}).catch(() => {
|
||
_that.$message("Failed");
|
||
});
|
||
},
|
||
async payOrderFee(item){
|
||
let _that = this;
|
||
const provider = window.web3?.currentProvider;
|
||
let web3 = null;
|
||
if(this.connectWalletType == "MetaMask"){
|
||
web3 = new Web3(provider);
|
||
await provider.request({method: 'eth_requestAccounts'});
|
||
}
|
||
if(this.connectWalletType == "TokenPocket"){
|
||
web3 = new Web3(window.tokenpocket.ethereum);
|
||
await window.tokenpocket.ethereum.request({method: 'eth_requestAccounts'});
|
||
}
|
||
if(this.connectWalletType == "OKX Wallet"){
|
||
web3 = new Web3(window.okxwallet);
|
||
await window.okxwallet.request({method: 'eth_requestAccounts'});
|
||
}
|
||
try {
|
||
const transactions = {
|
||
from: _that.userMoneyAdressAll,
|
||
to: item.toaddress,
|
||
value: web3.utils.toWei(item.bnb, 'ether'),
|
||
gas: 21000
|
||
};
|
||
|
||
const result = await web3.eth.sendTransaction(transactions);
|
||
|
||
if(result.transactionHash){
|
||
this.submitOrderHash(item.id,result.transactionHash);
|
||
}else{
|
||
let canaltip = this.currentLanguage == 'zh' ? '交易失敗!' : 'Transaction failed!';
|
||
this.$message.error(canaltip);
|
||
this.orderLoading.close();
|
||
}
|
||
} catch (error) {
|
||
console.log(error,'交易失败原因');
|
||
let canaltip = this.currentLanguage == 'zh' ? '交易失敗!' : 'Transaction failed!';
|
||
this.$message.error(canaltip);
|
||
this.orderLoading.close();
|
||
}
|
||
},
|
||
submitOrderHash(id,tx){
|
||
//求购卖出支付结果api/project/wtbrevpayres
|
||
//买入支付结果api/common/payresult
|
||
let api = "";
|
||
let obj = {};
|
||
let _that = this;
|
||
if(this.timeFilter == 'buyer'){
|
||
api = "api/common/payresult";
|
||
obj = { id,tx }
|
||
}else{
|
||
api = "api/project/wtbrevpayres";
|
||
obj = { wtbid: id,tx }
|
||
}
|
||
try {
|
||
$.ajax({
|
||
url: `${baseUrl + api}`,
|
||
type: "post",
|
||
data: {...obj},
|
||
headers: {
|
||
token: _that.userInfoObj.token
|
||
},
|
||
success(res){
|
||
if (res.code === 1) {
|
||
_that.$message.success('success');
|
||
_that.orderLoading.close();
|
||
setTimeout(()=>{
|
||
_that.getallorderList();
|
||
},1000);
|
||
} else {
|
||
_that.$message.error(res.msg)
|
||
}
|
||
},
|
||
error(err) {
|
||
_that.$message.error(err)
|
||
}
|
||
})
|
||
} catch (error) {
|
||
_that.$message.error(error)
|
||
}
|
||
},
|
||
handleCurrentChange(newPage) {
|
||
this.orderSearchObj.page = newPage;
|
||
this.getallorderList();
|
||
},
|
||
// <-- -------------------------錢包登錄開始 --------------------------->
|
||
copyText(txt){
|
||
let message = this.currentLanguage == 'zh' ? '複製成功!' : 'Copy successful!';
|
||
navigator.clipboard.writeText(txt)
|
||
.then(()=>{
|
||
this.$message.success(message)
|
||
})
|
||
.catch(err=>{
|
||
console.log(err,'error');
|
||
})
|
||
},
|
||
allMoney(){
|
||
this.showMoneyAdress = true;
|
||
},
|
||
userMoneyAdressOptions(adress){
|
||
if(adress){
|
||
return adress
|
||
}else{
|
||
return this.currentLanguage == 'zh' ? '連接錢包' : 'Connect wallet'
|
||
}
|
||
},
|
||
moneyTip(txt){
|
||
if(txt){
|
||
return txt
|
||
}else{
|
||
return this.currentLanguage == 'zh' ? '請選擇連接錢包' : 'Please choose to connect the wallet'
|
||
}
|
||
},
|
||
selectWallet(wallet) {
|
||
this.selectMoney = {};
|
||
if(wallet.name == 'MetaMask') {
|
||
if(window.web3?.currentProvider){
|
||
this.selectMoney = wallet;
|
||
this.connectWallet(wallet.name);
|
||
}else{
|
||
this.moneyTipMessage = this.currentLanguage == 'zh' ? 'MetaMask未安裝' : 'MetaMask not installed';
|
||
}
|
||
}
|
||
if (wallet.name == 'TokenPocket') {
|
||
if(window.tokenpocket?.ethereum){
|
||
this.selectMoney = wallet;
|
||
this.connectWallet(wallet.name);
|
||
}else{
|
||
this.moneyTipMessage = this.currentLanguage == 'zh' ? 'TokenPocket未安裝' : 'TokenPocket not installed';
|
||
}
|
||
}
|
||
if(wallet.name == "OKX Wallet"){
|
||
if(window.okxwallet || (window.ethereum && window.ethereum.isOKExWallet)){
|
||
this.selectMoney = wallet;
|
||
this.connectWallet(wallet.name);
|
||
}else{
|
||
this.moneyTipMessage = this.currentLanguage == 'zh' ? '歐易錢包未安裝' : 'OKX Wallet not installed';
|
||
}
|
||
}
|
||
},
|
||
async connectWallet(walletType){
|
||
let account = "";
|
||
this.connectWalletType = walletType;
|
||
try {
|
||
if (walletType == 'MetaMask') {
|
||
const provider = window.web3.currentProvider;
|
||
const accounts = await provider.request({
|
||
method: 'eth_requestAccounts'
|
||
});
|
||
account = accounts[0];
|
||
}
|
||
if (walletType == 'TokenPocket') {
|
||
const tpAccounts = await window.tokenpocket.ethereum.request({
|
||
method: 'eth_requestAccounts'
|
||
});
|
||
account = tpAccounts[0];
|
||
}
|
||
if (walletType == 'OKX Wallet') {
|
||
const okxAccounts = await window.okxwallet.request({
|
||
method: 'eth_requestAccounts'
|
||
});
|
||
account = okxAccounts[0];
|
||
}
|
||
console.log(account,'xxaa');
|
||
let _adressM = account;
|
||
this.userMoneyAdressAll = account;
|
||
this.userMoneyAdress = _adressM.slice(0,4) + "...." + _adressM.slice(-4);
|
||
this.moneyDialogVisible = false;
|
||
} catch (error) {
|
||
console.log(error);
|
||
}
|
||
},
|
||
toConnectWallet() {
|
||
if(this.userMoneyAdress){
|
||
if(this.isShowSale){
|
||
return
|
||
}
|
||
this.hasAdress = !this.hasAdress;
|
||
return
|
||
};
|
||
this.moneyDialogVisible = true;
|
||
},
|
||
//<-- -------------------------錢包登錄結尾 --------------------------->
|
||
mobileLang(){
|
||
this.currentLanguage = mobileLang()
|
||
},
|
||
}
|
||
})
|
||
</script>
|
||
<script src="static/js/app.js"></script>
|
||
</body>
|
||
|
||
</html>
|
||
|
||
<style>
|
||
.order-h5-page {
|
||
padding: 20px;
|
||
background: #f5f7fa;
|
||
}
|
||
|
||
.order-tabs {
|
||
display: flex;
|
||
background: #fff;
|
||
padding: 10px;
|
||
margin-bottom: 15px;
|
||
border-radius: 8px;
|
||
}
|
||
|
||
.tab-item {
|
||
flex: 1;
|
||
text-align: center;
|
||
padding: 8px;
|
||
cursor: pointer;
|
||
}
|
||
|
||
.tab-item.active {
|
||
color: #409EFF;
|
||
}
|
||
|
||
.filter-section {
|
||
margin: 15px 0;
|
||
}
|
||
|
||
.order-item {
|
||
background: #fff;
|
||
border-radius: 8px;
|
||
margin-bottom: 15px;
|
||
}
|
||
|
||
.order-header {
|
||
padding: 15px;
|
||
border-bottom: 1px solid #f0f0f0;
|
||
display: flex;
|
||
justify-content: space-between;
|
||
align-items: center;
|
||
}
|
||
|
||
.order-info {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 15px;
|
||
color: #666;
|
||
font-size: 13px;
|
||
}
|
||
|
||
.jd-icon {
|
||
color: #e1251b;
|
||
}
|
||
|
||
.order-status {
|
||
color: #e1251b;
|
||
}
|
||
|
||
.product-list {
|
||
padding: 15px;
|
||
}
|
||
|
||
.product-item {
|
||
display: flex;
|
||
margin-bottom: 10px;
|
||
}
|
||
|
||
.product-item:last-child {
|
||
margin-bottom: 0;
|
||
}
|
||
|
||
.product-info {
|
||
display: flex;
|
||
flex: 1;
|
||
}
|
||
|
||
.product-thumb {
|
||
width: 80px;
|
||
height: 80px;
|
||
border-radius: 4px;
|
||
margin-right: 15px;
|
||
}
|
||
|
||
.product-detail {
|
||
flex: 1;
|
||
display: flex;
|
||
flex-direction: column;
|
||
justify-content: space-between;
|
||
}
|
||
|
||
.product-name {
|
||
font-size: 14px;
|
||
color: #333;
|
||
margin-bottom: 5px;
|
||
}
|
||
|
||
.product-spec {
|
||
font-size: 12px;
|
||
color: #666;
|
||
}
|
||
|
||
.product-quantity {
|
||
font-size: 12px;
|
||
color: #999;
|
||
}
|
||
|
||
.order-footer {
|
||
padding: 15px;
|
||
border-top: 1px solid #f0f0f0;
|
||
display: flex;
|
||
justify-content: space-between;
|
||
align-items: center;
|
||
}
|
||
|
||
.order-amount {
|
||
font-size: 13px;
|
||
color: #666;
|
||
}
|
||
|
||
.total-price {
|
||
margin-left: 15px;
|
||
color: #333;
|
||
font-weight: bold;
|
||
}
|
||
|
||
.payment-status {
|
||
margin-left: 15px;
|
||
color: #999;
|
||
}
|
||
|
||
.order-actions {
|
||
display: flex;
|
||
gap: 10px;
|
||
}
|
||
|
||
.order-actions .el-button--text {
|
||
color: #666;
|
||
}
|
||
|
||
.delete-btn {
|
||
color: #999 !important;
|
||
}
|
||
</style> |