diff --git a/power_leasing/src/main.js b/power_leasing/src/main.js index 641604d..de11259 100644 --- a/power_leasing/src/main.js +++ b/power_leasing/src/main.js @@ -9,7 +9,7 @@ import './utils/loginInfo.js'; // 全局输入防表情守卫(极简、无侵入) import { initNoEmojiGuard } from './utils/noEmojiGuard.js'; -console.log = ()=>{} //全局关闭打印 +// console.log = ()=>{} //全局关闭打印 Vue.config.productionTip = false diff --git a/power_leasing/src/views/account/OrderList.vue b/power_leasing/src/views/account/OrderList.vue index ddeb15e..e5f22f4 100644 --- a/power_leasing/src/views/account/OrderList.vue +++ b/power_leasing/src/views/account/OrderList.vue @@ -204,7 +204,16 @@ export default { }); return } - try { this.$router.push(`/account/order-detail/${id}`) } catch (e) { + try { + const curPath = (this.$route && this.$route.path) || '' + const from = curPath.indexOf('/account/orders') === 0 ? 'buyer' : (curPath.indexOf('/account/seller-orders') === 0 ? 'seller' : '') + try { if (from) sessionStorage.setItem('orderDetailFrom', from) } catch (e) {} + if (from) { + this.$router.push({ path: `/account/order-detail/${id}`, query: { from } }) + } else { + this.$router.push(`/account/order-detail/${id}`) + } + } catch (e) { this.$message({ message: '无法跳转到详情页', type: 'error', diff --git a/power_leasing/src/views/account/index.vue b/power_leasing/src/views/account/index.vue index 319cb68..1a52df7 100644 --- a/power_leasing/src/views/account/index.vue +++ b/power_leasing/src/views/account/index.vue @@ -139,6 +139,20 @@ export default { */ setActiveRoleByRoute() { const path = (this.$route && this.$route.path) || '' + // 详情页:根据来源 from=buyer/seller 判定(优先 query,其次 sessionStorage) + if (path.indexOf('/account/order-detail') === 0) { + const qFrom = (this.$route && this.$route.query && this.$route.query.from) || '' + let from = qFrom + if (!from) { + try { from = sessionStorage.getItem('orderDetailFrom') || '' } catch (e) { from = '' } + } + const role = from === 'buyer' ? 'buyer' : (from === 'seller' ? 'seller' : this.activeRole) + if (this.activeRole !== role) { + this.activeRole = role + try { localStorage.setItem('accountActiveRole', JSON.stringify(role)) } catch (e) {} + } + return + } // 买家前缀优先匹配,确保“已购详情”等页面归属买家侧 const buyerPrefixes = [ '/account/wallet', @@ -155,7 +169,6 @@ export default { '/account/product-detail', '/account/product-machine-add', '/account/seller-orders', - '/account/order-detail', '/account/receipt-record', '/account/shop-config' ] @@ -175,9 +188,21 @@ export default { isActiveLink(pathLike) { const current = (this.$route && this.$route.path) || '' if (!pathLike) return false + // 详情页:根据来源决定高亮哪个分组的列表 + if (current.indexOf('/account/order-detail') === 0) { + const qFrom = (this.$route && this.$route.query && this.$route.query.from) || '' + let from = qFrom + if (!from) { + try { from = sessionStorage.getItem('orderDetailFrom') || '' } catch (e) { from = '' } + } + if (from === 'buyer' && pathLike === '/account/orders') return true + if (from === 'seller' && pathLike === '/account/seller-orders') return true + // 兜底:不匹配 + return false + } // 列表-详情联动高亮映射 const map = { - '/account/seller-orders': ['/account/seller-orders', '/account/order-detail'], + '/account/seller-orders': ['/account/seller-orders'], '/account/products': ['/account/products', '/account/product-detail'], '/account/purchased': ['/account/purchased', '/account/purchased-detail'] } diff --git a/power_leasing/src/views/account/wallet.vue b/power_leasing/src/views/account/wallet.vue index 2d45cc5..73e2770 100644 --- a/power_leasing/src/views/account/wallet.vue +++ b/power_leasing/src/views/account/wallet.vue @@ -650,12 +650,17 @@ export default { const first = data[0] || {} this.walletBalance = first.walletBalance || first.balance || 0 this.blockedBalance = first.blockedBalance || 0 - this.WalletData = first + // 充值弹窗打开期间,避免覆盖正在展示的 WalletData(会导致“充值币种”显示错误) + if (!this.rechargeDialogVisible) { + this.WalletData = first + } } else if (data && typeof data === 'object') { this.walletList = [data] this.walletBalance = data.walletBalance || data.balance || 0 this.blockedBalance = data.blockedBalance || 0 - this.WalletData = data + if (!this.rechargeDialogVisible) { + this.WalletData = data + } } else { this.walletList = [] this.walletBalance = 0 @@ -926,6 +931,8 @@ export default { */ resetRechargeForm() { this.qrCodeGenerated = false + // 关闭后刷新一次,恢复 WalletData 与列表一致 + this.fetchWalletInfo() }, /** @@ -965,10 +972,11 @@ export default { const feeInt = this.toScaledInt(this.withdrawForm.fee) const totalRequired = amountInt + feeInt - // 钱包余额转分 - const balanceInt = this.toScaledInt(this.walletBalance) + // 钱包余额转分(使用当前选中钱包的可用余额) + const availableBalance = this.WalletData && (this.WalletData.walletBalance || this.WalletData.balance) || 0 + const balanceInt = this.toScaledInt(availableBalance) if (totalRequired > balanceInt) { - const totalText = this.scaledIntToString(totalRequired) + const totalText = this.formatDec6FromInt(totalRequired) callback(new Error(`提现金额加上手续费(${totalText} USDT)不能超过钱包余额`)) return } diff --git a/power_leasing/src/views/cart/index.vue b/power_leasing/src/views/cart/index.vue index db0d07b..9b4dbde 100644 --- a/power_leasing/src/views/cart/index.vue +++ b/power_leasing/src/views/cart/index.vue @@ -1017,11 +1017,21 @@ export default { const items = [] list.forEach(m => { if (selectedIds.has(m.id) && this.isOnShelf(m)) { - // 单价(同币种显示,若非USDT按实时价换算) + // 单价(同币种显示,若非USDT按实时价换算 用现在的价格除以后端返回的this.selectedPrice) const baseUnit = Number(m.price || 0) const leaseDays = Math.max(1, Math.floor(Number(m.leaseTime || 1))) const isUSDT = String(this.selectedCoin).toUpperCase() === 'USDT' + console.log('baseUnit', baseUnit) + console.log('selectedPrice', this.selectedPrice) const unitPrice = !isUSDT && this.selectedPrice > 0 ? (baseUnit / this.selectedPrice) : baseUnit + + console.log('baseUnit / this.selectedPrice', baseUnit / this.selectedPrice); + + console.log('unitPrice', unitPrice ,'leaseDays', leaseDays) + console.log(`unitPrice * leaseDays`,unitPrice * leaseDays); + console.log(unitPrice*this.selectedPrice,"客服付款"); + + const subtotal = unitPrice * leaseDays items.push({ product: shop.name || '', diff --git a/power_leasing/src/views/productDetail/index.vue b/power_leasing/src/views/productDetail/index.vue index e78fcad..6d932e6 100644 --- a/power_leasing/src/views/productDetail/index.vue +++ b/power_leasing/src/views/productDetail/index.vue @@ -135,7 +135,9 @@
- + + + diff --git a/power_leasing/test.zip b/power_leasing/test.zip index d90c848..8fd3e2b 100644 Binary files a/power_leasing/test.zip and b/power_leasing/test.zip differ diff --git a/power_leasing/test/css/app.4475c0cd.css b/power_leasing/test/css/app.4475c0cd.css new file mode 100644 index 0000000..99a1936 --- /dev/null +++ b/power_leasing/test/css/app.4475c0cd.css @@ -0,0 +1 @@ +#app,body{margin:0;padding:0;box-sizing:border-box}#app{font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:#2c3e50}nav{padding:6px}nav a{font-weight:700;color:#2c3e50}nav a.router-link-exact-active{color:#42b983}.product-list[data-v-3376dbce]{background:#f5f5f5;padding:24px}.container[data-v-3376dbce]{width:80%;margin:0 auto;text-align:left}.container h1[data-v-3376dbce]{font-size:24px;font-weight:700;margin-bottom:20px}.filter-section[data-v-3376dbce]{display:flex;flex-direction:column;margin-bottom:20px;width:80%;margin-top:18px}.filter-row[data-v-3376dbce]{display:flex;gap:12px;align-items:center}.product-list-grid[data-v-3376dbce]{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:30px;margin-top:100px;display:flex;flex-wrap:wrap}.product-item[data-v-3376dbce]{width:400px;border:1px solid #eee;border-radius:8px;padding:18px;background:#fff;display:flex;flex-direction:column;align-items:center;height:40vh}.product-image[data-v-3376dbce]{width:68%;height:65%;-o-object-fit:cover;object-fit:cover;margin-bottom:12px}.product-info[data-v-3376dbce]{width:100%}.product-footer[data-v-3376dbce]{display:flex;justify-content:space-between;align-items:center;margin-top:8px}.product-price[data-v-3376dbce]{color:#e53e3e;font-weight:700;max-width:90%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.price-wrap[data-v-3376dbce]{display:inline-flex;align-items:baseline;gap:6px}.unit[data-v-3376dbce]{color:#999;font-size:12px}.product-sold[data-v-3376dbce]{color:#64748b;font-size:12px}.add-cart-btn[data-v-3376dbce]{background:#42b983;color:#fff;border:none;border-radius:4px;padding:6px 12px;cursor:pointer;transition:background .2s}.add-cart-btn[data-v-3376dbce]:hover{background:#369870}.empty-state[data-v-3376dbce]{grid-column:1/-1;text-align:center;padding:60px 20px;color:#999}.empty-state i[data-v-3376dbce]{font-size:48px;margin-bottom:16px;color:#ddd}.empty-state p[data-v-3376dbce]{margin:8px 0;font-size:16px}.product-detail[data-v-2d97afb4]{width:100%;margin:0 auto}[data-v-2d97afb4] .in-cart-row{background:#fafafa}[data-v-2d97afb4] .in-cart-row .el-checkbox.is-disabled .el-checkbox__inner{background-color:#f5f7fa;border-color:#dcdfe6}[data-v-2d97afb4] .sold-row{background:#fff5f5}.loading[data-v-2d97afb4]{text-align:center;padding:60px 20px;color:#666}.back-section[data-v-2d97afb4]{margin-bottom:24px;text-align:left;margin:8px}.back-btn[data-v-2d97afb4]{background:#6c757d;color:#fff;border:none;padding:10px 20px;border-radius:6px;cursor:pointer;font-size:14px;transition:background .3s ease}.back-btn[data-v-2d97afb4]:hover{background:#5a6268}.detail-container[data-v-2d97afb4]{width:100%;background:#fff;border-radius:12px;box-shadow:0 4px 12px rgba(0,0,0,.1);overflow:hidden}.product-content[data-v-2d97afb4]{display:grid;grid-template-columns:1fr 1fr;gap:40px;padding:40px}.product-image-section[data-v-2d97afb4]{display:flex;justify-content:center;align-items:center}.product-image[data-v-2d97afb4]{max-width:100%;height:auto;border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,.1)}.product-info-section[data-v-2d97afb4]{display:flex;flex-direction:column;gap:24px}.product-title[data-v-2d97afb4]{font-size:28px;font-weight:700;color:#2c3e50;margin:0;line-height:1.3}.product-description[data-v-2d97afb4]{font-size:16px;color:#666;line-height:1.6;margin:0}.product-price-section[data-v-2d97afb4]{display:flex;align-items:center;gap:12px}.price-label[data-v-2d97afb4]{font-size:16px;color:#666}.product-price[data-v-2d97afb4]{font-size:32px;font-weight:700;color:#e74c3c}.price-strong[data-v-2d97afb4]{font-weight:700;color:#e74c3c}.pay-methods[data-v-2d97afb4]{display:flex;align-items:center;gap:12px;padding:12px 16px;margin:8px 10px 16px 10px;background:#f8fafc;border:1px solid #eef2f7;border-radius:8px}.pay-label[data-v-2d97afb4]{color:#34495e;font-size:14px;font-weight:600;white-space:nowrap}.pay-list[data-v-2d97afb4]{display:flex;align-items:center;flex-wrap:wrap;gap:10px 12px;margin:0;padding:0;list-style:none}.pay-item[data-v-2d97afb4]{display:inline-flex;align-items:center}.pay-icon[data-v-2d97afb4]{width:24px;height:24px;display:block;border-radius:4px;transition:transform .15s ease,box-shadow .15s ease}.pay-icon[data-v-2d97afb4]:hover{transform:translateY(-1px)}.pay-icon[data-v-2d97afb4]:focus{outline:none;box-shadow:0 0 0 3px rgba(25,118,210,.2)}[data-v-2d97afb4] .series-clickable-row{cursor:pointer}[data-v-2d97afb4] .series-clickable-row>td{background:#f9fbff;padding-top:14px;padding-bottom:14px;border-bottom:1px solid #eef2f7}[data-v-2d97afb4] .series-clickable-row:hover>td{background:#f0f6ff}[data-v-2d97afb4] .el-table__expanded-cell{background:#fff}[data-v-2d97afb4] .el-table__expanded-cell .el-table{background:#fff;border:1px solid #eef2f7;border-radius:8px;width:100%}.series-table[data-v-2d97afb4] .el-table__header th{background:#f9fbff;color:#34495e;font-weight:600}.quantity-section[data-v-2d97afb4]{display:flex;align-items:center;gap:16px}.quantity-label[data-v-2d97afb4]{font-size:16px;color:#666;min-width:60px}.quantity-controls[data-v-2d97afb4]{display:flex;align-items:center;border:1px solid #ddd;border-radius:6px;overflow:hidden}.quantity-btn[data-v-2d97afb4]{background:#f8f9fa;border:none;padding:12px 16px;cursor:pointer;font-size:18px;font-weight:600;color:#495057;transition:background .3s ease}.quantity-btn[data-v-2d97afb4]:hover:not(:disabled){background:#e9ecef}.quantity-btn[data-v-2d97afb4]:disabled{opacity:.5;cursor:not-allowed}.quantity-input[data-v-2d97afb4]{width:80px;padding:12px;border:none;text-align:center;font-size:16px;outline:none}.quantity-input[data-v-2d97afb4]::-webkit-inner-spin-button,.quantity-input[data-v-2d97afb4]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.quantity-input[type=number][data-v-2d97afb4]{appearance:textfield;-webkit-appearance:none;-moz-appearance:textfield}.quantity-input[data-v-2d97afb4]:focus{background:#f8f9fa}@media (max-width:768px){.product-content[data-v-2d97afb4]{grid-template-columns:1fr;gap:24px;padding:24px}.product-detail[data-v-2d97afb4]{padding:16px}.product-title[data-v-2d97afb4]{font-size:24px}.product-price[data-v-2d97afb4]{font-size:28px}.quantity-selector[data-v-2d97afb4]{width:100px;height:32px}.quantity-btn[data-v-2d97afb4]{width:32px;height:32px}.quantity-input[data-v-2d97afb4]{height:32px;font-size:13px}.btn-icon[data-v-2d97afb4]{font-size:16px}}.cart-page[data-v-2fdab8e8]{max-width:90vw;margin:0 auto;padding:20px;min-height:80vh}.page-title[data-v-2fdab8e8]{text-align:center;color:#2c3e50;margin-bottom:30px;font-size:28px;font-weight:600}.loading[data-v-2fdab8e8]{text-align:center;padding:60px 20px;color:#666}.empty-cart[data-v-2fdab8e8]{text-align:center;padding:80px 20px;background:#fff;border-radius:12px;box-shadow:0 4px 12px rgba(0,0,0,.1)}.empty-icon[data-v-2fdab8e8]{font-size:64px;margin-bottom:20px}.empty-cart h2[data-v-2fdab8e8]{color:#2c3e50;margin-bottom:12px;font-size:24px}.empty-cart p[data-v-2fdab8e8]{color:#666;margin-bottom:24px;font-size:16px}.shop-now-btn[data-v-2fdab8e8]{display:inline-block;background:#42b983;color:#fff;text-decoration:none;padding:12px 24px;border-radius:8px;font-size:16px;font-weight:600;transition:background .3s ease}.shop-now-btn[data-v-2fdab8e8]:hover{background:#3aa876}.cart-content[data-v-2fdab8e8]{margin-top:12px}.cart-items[data-v-2fdab8e8]{background:#fff;border-radius:12px;box-shadow:0 4px 12px rgba(0,0,0,.1);overflow:hidden}.cart-item[data-v-2fdab8e8]{display:grid;grid-template-columns:auto 1fr auto auto auto;gap:20px;align-items:center;padding:20px;border-bottom:1px solid #eee}.cart-item[data-v-2fdab8e8]:last-child{border-bottom:none}.item-image img[data-v-2fdab8e8]{width:80px;height:80px;-o-object-fit:cover;object-fit:cover;border-radius:8px}.item-info[data-v-2fdab8e8]{display:flex;flex-direction:column;gap:8px}.item-title[data-v-2fdab8e8]{font-size:16px;font-weight:600;color:#2c3e50;margin:0}.item-price[data-v-2fdab8e8]{font-size:18px;font-weight:700;color:#e74c3c}.item-quantity[data-v-2fdab8e8]{display:flex;flex-direction:column;gap:8px;align-items:center}.quantity-label[data-v-2fdab8e8]{font-size:14px;color:#666}.quantity-controls[data-v-2fdab8e8]{display:flex;align-items:center;border:1px solid #ddd;border-radius:6px;overflow:hidden}.quantity-btn[data-v-2fdab8e8]{background:#f8f9fa;border:none;padding:8px 12px;cursor:pointer;font-size:16px;font-weight:600;color:#495057;transition:background .3s ease}.quantity-btn[data-v-2fdab8e8]:hover:not(:disabled){background:#e9ecef}.quantity-btn[data-v-2fdab8e8]:disabled{opacity:.5;cursor:not-allowed}.quantity-input[data-v-2fdab8e8]{width:60px;padding:8px;border:none;text-align:center;font-size:14px;outline:none}.item-total[data-v-2fdab8e8]{text-align:center}.total-label[data-v-2fdab8e8]{font-size:14px;color:#666}.total-price[data-v-2fdab8e8]{font-size:18px;font-weight:700;color:#e74c3c}.item-actions[data-v-2fdab8e8]{text-align:center}.remove-btn[data-v-2fdab8e8]{background:#ff4757;color:#fff;border:none;padding:8px 16px;border-radius:6px;cursor:pointer;font-size:14px;transition:background .3s ease}.remove-btn[data-v-2fdab8e8]:hover{background:#ff3742}.cart-summary[data-v-2fdab8e8]{background:#fff;border-radius:12px;box-shadow:0 4px 12px rgba(0,0,0,.1);padding:24px;height:-moz-fit-content;height:fit-content;position:sticky;top:20px}.summary-title[data-v-2fdab8e8]{font-size:20px;font-weight:600;color:#2c3e50;margin:0 0 20px 0;text-align:center}.summary-row[data-v-2fdab8e8]{display:flex;justify-content:space-between;align-items:center;padding:12px 0;border-bottom:1px solid #eee;font-size:16px;color:#666}.summary-row[data-v-2fdab8e8]:last-of-type{border-bottom:none}.total-row[data-v-2fdab8e8]{font-size:18px;font-weight:600;color:#2c3e50;border-top:2px solid #eee;padding-top:16px;margin-top:16px}.total-amount[data-v-2fdab8e8]{color:#e74c3c;font-size:24px}.summary-actions[data-v-2fdab8e8]{display:flex;flex-direction:column;gap:12px;margin-top:24px}.clear-cart-btn[data-v-2fdab8e8]{background:#6c757d;color:#fff;border:none;padding:12px 20px;border-radius:8px;cursor:pointer;font-size:16px;transition:background .3s ease}.clear-cart-btn[data-v-2fdab8e8]:hover{background:#5a6268}.checkout-btn[data-v-2fdab8e8]{background:#42b983;color:#fff;text-decoration:none;padding:16px 24px;border-radius:8px;text-align:center;font-size:18px;font-weight:600;transition:all .3s ease}.checkout-btn[data-v-2fdab8e8]:hover:not(.disabled){background:#3aa876;transform:translateY(-2px)}.checkout-btn.disabled[data-v-2fdab8e8]{background:#ccc;cursor:not-allowed;transform:none}.summary-inline[data-v-2fdab8e8]{text-align:left}.price-strong[data-v-2fdab8e8]{font-weight:700;color:#e74c3c}@media (max-width:768px){.cart-page[data-v-2fdab8e8]{padding:16px}.page-title[data-v-2fdab8e8]{font-size:24px;margin-bottom:24px}}.notice-content[data-v-2fdab8e8]{text-align:left;color:#333}.notice-title[data-v-2fdab8e8]{font-size:15px;font-weight:600;color:#333;margin:0;margin-top:18px}.notice-list[data-v-2fdab8e8]{padding-left:18px;line-height:1.8;margin-top:10px}.notice-list li[data-v-2fdab8e8]{margin-bottom:10px}.notice-ack[data-v-2fdab8e8]{margin-top:12px;color:#e74c3c}.google-code-content[data-v-2fdab8e8]{text-align:center;padding:20px 0}.verification-icon[data-v-2fdab8e8]{margin-bottom:20px}.verification-title h3[data-v-2fdab8e8]{color:#333;font-size:20px;font-weight:600;margin:0 0 8px 0}.verification-desc[data-v-2fdab8e8]{color:#666;font-size:14px;line-height:1.5;margin:0 0 24px 0}.code-input-wrapper[data-v-2fdab8e8]{margin-bottom:16px}.code-input[data-v-2fdab8e8]{width:280px}.code-input[data-v-2fdab8e8] .el-input__inner{font-size:18px;font-weight:600;letter-spacing:2px;text-align:center}.code-error[data-v-2fdab8e8]{color:#f56c6c;font-size:14px;display:flex;align-items:center;justify-content:center;gap:4px}.dialog-footer[data-v-2fdab8e8]{text-align:center}.checkout-page[data-v-c3bf12ce]{max-width:1200px;margin:0 auto;padding:20px}.page-title[data-v-c3bf12ce]{text-align:center;color:#2c3e50;margin-bottom:30px;font-size:28px;font-weight:600}.loading[data-v-c3bf12ce]{text-align:center;padding:60px 20px;color:#666}.empty-cart[data-v-c3bf12ce]{text-align:center;padding:80px 20px;background:#fff;border-radius:12px;box-shadow:0 4px 12px rgba(0,0,0,.1)}.empty-icon[data-v-c3bf12ce]{font-size:64px;margin-bottom:20px}.empty-cart h2[data-v-c3bf12ce]{color:#2c3e50;margin-bottom:12px;font-size:24px}.empty-cart p[data-v-c3bf12ce]{color:#666;margin-bottom:24px;font-size:16px}.shop-now-btn[data-v-c3bf12ce]{display:inline-block;background:#42b983;color:#fff;text-decoration:none;padding:12px 24px;border-radius:8px;font-size:16px;font-weight:600;transition:background .3s ease}.shop-now-btn[data-v-c3bf12ce]:hover{background:#3aa876}.checkout-content[data-v-c3bf12ce]{display:grid;grid-template-columns:1fr 1fr;gap:30px}.section-title[data-v-c3bf12ce]{font-size:20px;font-weight:600;color:#2c3e50;margin:0 0 20px 0;padding-bottom:12px;border-bottom:2px solid #eee}.order-summary[data-v-c3bf12ce]{background:#fff;border-radius:12px;box-shadow:0 4px 12px rgba(0,0,0,.1);padding:24px;height:-moz-fit-content;height:fit-content}.order-items[data-v-c3bf12ce]{margin-bottom:24px}.order-item[data-v-c3bf12ce]{display:grid;grid-template-columns:auto 1fr auto auto;gap:16px;align-items:center;padding:16px 0;border-bottom:1px solid #eee}.order-item[data-v-c3bf12ce]:last-child{border-bottom:none}.item-image img[data-v-c3bf12ce]{width:60px;height:60px;-o-object-fit:cover;object-fit:cover;border-radius:6px}.item-title[data-v-c3bf12ce]{font-size:14px;font-weight:600;color:#2c3e50;margin:0 0 4px 0}.item-price[data-v-c3bf12ce]{font-size:16px;font-weight:700;color:#e74c3c}.item-quantity[data-v-c3bf12ce]{text-align:center}.quantity-label[data-v-c3bf12ce]{font-size:12px;color:#666}.quantity-value[data-v-c3bf12ce]{font-size:14px;font-weight:600;color:#2c3e50}.item-total[data-v-c3bf12ce]{text-align:right}.total-label[data-v-c3bf12ce]{font-size:12px;color:#666}.total-price[data-v-c3bf12ce]{font-size:16px;font-weight:700;color:#e74c3c}.order-total[data-v-c3bf12ce]{border-top:2px solid #eee;padding-top:20px}.total-row[data-v-c3bf12ce]{display:flex;justify-content:space-between;align-items:center;padding:8px 0;font-size:14px;color:#666}.final-total[data-v-c3bf12ce]{font-size:18px;font-weight:600;color:#2c3e50;border-top:1px solid #eee;padding-top:16px;margin-top:16px}.final-amount[data-v-c3bf12ce]{color:#e74c3c;font-size:24px}.checkout-form[data-v-c3bf12ce]{background:#fff;border-radius:12px;box-shadow:0 4px 12px rgba(0,0,0,.1);padding:24px}.form[data-v-c3bf12ce]{display:flex;flex-direction:column;gap:20px}.form-row[data-v-c3bf12ce]{display:grid;grid-template-columns:1fr 1fr;gap:20px}.form-group[data-v-c3bf12ce]{display:flex;flex-direction:column;gap:8px}.form-label[data-v-c3bf12ce]{font-size:14px;font-weight:600;color:#2c3e50}.form-input[data-v-c3bf12ce],.form-textarea[data-v-c3bf12ce]{padding:12px;border:1px solid #ddd;border-radius:6px;font-size:14px;transition:border-color .3s ease}.form-input[data-v-c3bf12ce]:focus,.form-textarea[data-v-c3bf12ce]:focus{outline:none;border-color:#42b983;box-shadow:0 0 0 3px rgba(66,185,131,.1)}.form-textarea[data-v-c3bf12ce]{resize:vertical;min-height:80px}.error-message[data-v-c3bf12ce]{color:#e74c3c;font-size:12px;margin-top:4px}.form-actions[data-v-c3bf12ce]{display:flex;gap:16px;margin-top:20px}.back-btn[data-v-c3bf12ce]{background:#6c757d;color:#fff;text-decoration:none;padding:14px 24px;border-radius:8px;font-size:16px;font-weight:600;transition:background .3s ease;text-align:center;flex:1}.back-btn[data-v-c3bf12ce]:hover{background:#5a6268}.submit-btn[data-v-c3bf12ce]{background:#42b983;color:#fff;border:none;padding:14px 24px;border-radius:8px;font-size:16px;font-weight:600;cursor:pointer;transition:all .3s ease;flex:2}.submit-btn[data-v-c3bf12ce]:hover:not(:disabled){background:#3aa876;transform:translateY(-2px)}.submit-btn[data-v-c3bf12ce]:disabled{background:#ccc;cursor:not-allowed;transform:none}@media (max-width:768px){.checkout-content[data-v-c3bf12ce]{grid-template-columns:1fr;gap:20px}.form-row[data-v-c3bf12ce]{grid-template-columns:1fr;gap:16px}.form-actions[data-v-c3bf12ce]{flex-direction:column}.checkout-page[data-v-c3bf12ce]{padding:16px}.page-title[data-v-c3bf12ce]{font-size:24px;margin-bottom:24px}.order-item[data-v-c3bf12ce]{grid-template-columns:1fr;gap:12px;text-align:center}.item-image img[data-v-c3bf12ce]{width:80px;height:80px}}.account-page[data-v-59d86c16]{padding:20px}.account-header[data-v-59d86c16]{background:#fff;border-radius:8px;padding:16px 20px;margin-bottom:16px;text-align:left;padding-left:3vw}.title[data-v-59d86c16]{margin:0;font-size:20px;font-weight:700;color:#2c3e50}.account-layout[data-v-59d86c16]{display:grid;grid-template-columns:220px 1fr;gap:16px}.sidebar[data-v-59d86c16]{background:#fff;border:1px solid #eee;border-radius:8px;padding:12px;min-height:80vh}.side-nav[data-v-59d86c16]{display:flex;flex-direction:column;gap:8px}.user-role[data-v-59d86c16]{display:flex;gap:8px;margin-bottom:8px;margin-top:18px}.role-button[data-v-59d86c16]{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:#f6f8fa;border:1px solid #e5e7eb;border-radius:6px;padding:6px 10px;color:#2c3e50;cursor:pointer}.role-button.active[data-v-59d86c16]{background:#42b983;border-color:#42b983;color:#fff}.role-button[data-v-59d86c16]:focus{outline:2px solid #42b98333;outline-offset:2px}.user-info-card[data-v-59d86c16]{display:flex;align-items:center;justify-content:center;box-sizing:border-box;gap:10px;padding:12px;background:#f8fafc;border:1px solid #eee;border-radius:8px;margin-bottom:4px}.avatar[data-v-59d86c16]{width:36px;height:36px;border-radius:50%;background:linear-gradient(135deg,#42b983,#67c23a);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:14px}.user-email[data-v-59d86c16]{font-size:14px;color:#2c3e50;font-weight:600}.side-link[data-v-59d86c16]{display:block;padding:10px 12px;color:#2c3e50;text-decoration:none;border-radius:6px;transition:background .2s}.side-link[data-v-59d86c16]:hover{background:#f6f8fa}.side-link.active[data-v-59d86c16]{background:#42b983;color:#fff}.content[data-v-59d86c16]{background:#fff;border:1px solid #eee;border-radius:8px;padding:16px;min-height:420px}@media (max-width:768px){.account-layout[data-v-59d86c16]{grid-template-columns:1fr}}.wallet-container[data-v-75ddb61b]{max-width:800px;margin:0 auto;padding:20px}.wallet-toolbar[data-v-75ddb61b]{display:flex;justify-content:flex-end;margin-bottom:12px}.create-wallet-btn[data-v-75ddb61b]{background:linear-gradient(135deg,#409eff,#36cfc9);border:none;color:#fff;font-weight:600;border-radius:8px;box-shadow:0 6px 18px rgba(64,158,255,.25)}.create-wallet-btn[data-v-75ddb61b]:hover{filter:brightness(1.05)}.wallet-card-section[data-v-75ddb61b]{max-height:600px;overflow-y:auto;padding:8px}.wallet-card[data-v-75ddb61b]{background:linear-gradient(135deg,#667eea,#764ba2);border-radius:12px;padding:16px;margin-bottom:12px;color:#fff;box-shadow:0 8px 32px rgba(102,126,234,.3)}.wallet-header[data-v-75ddb61b]{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.wallet-title[data-v-75ddb61b]{font-size:18px;font-weight:700;margin:0}.wallet-balance[data-v-75ddb61b]{text-align:right;display:flex;flex-direction:row;align-items:center;gap:16px}.balance-item[data-v-75ddb61b]{display:flex;flex-direction:row;align-items:center;gap:8px}.balance-label[data-v-75ddb61b]{display:inline-block;font-size:16px;opacity:.85;margin:0}.balance-amount[data-v-75ddb61b]{font-size:20px;font-weight:700;font-family:Monaco,Menlo,monospace}.balance-amount.frozen[data-v-75ddb61b]{font-size:20px;opacity:.9;color:#ffa940}.wallet-actions[data-v-75ddb61b]{display:flex;gap:16px;justify-content:right}.action-btn[data-v-75ddb61b]{width:100px;height:30px;font-size:13px;font-weight:600;border-radius:8px;border:none;transition:all .3s ease;display:flex;align-items:center;justify-content:center}.recharge-btn[data-v-75ddb61b]{background:hsla(0,0%,100%,.2);color:#fff;border:2px solid hsla(0,0%,100%,.3)}.recharge-btn[data-v-75ddb61b]:hover{background:hsla(0,0%,100%,.3);transform:translateY(-2px)}.withdraw-btn[data-v-75ddb61b]{background:hsla(0,0%,100%,.2);color:#fff;border:2px solid hsla(0,0%,100%,.3)}.withdraw-btn[data-v-75ddb61b]:hover{background:hsla(0,0%,100%,.3);transform:translateY(-2px)}.withdraw-inline-btn[data-v-75ddb61b]{background:hsla(0,0%,100%,.2);color:#fff;border:2px solid hsla(0,0%,100%,.3)}.withdraw-inline-btn[data-v-75ddb61b]:hover{background:hsla(0,0%,100%,.3);transform:translateY(-1px)}.transaction-section[data-v-75ddb61b]{background:#fff;border-radius:12px;padding:20px;box-shadow:0 2px 12px rgba(0,0,0,.1)}.section-title[data-v-75ddb61b]{font-size:18px;margin:0 0 16px 0;text-align:left}.transaction-list[data-v-75ddb61b]{max-height:none;overflow-y:visible;display:flex;flex-direction:column;gap:6px;padding-top:4px;padding-bottom:4px}.transaction-item[data-v-75ddb61b]{display:flex;justify-content:space-between;align-items:center;padding:8px 0;border-bottom:1px solid #f0f0f0;transition:background-color .2s ease}.transaction-item[data-v-75ddb61b]:hover{background-color:#f8f9fa;border-radius:6px;padding-left:6px;padding-right:6px}.transaction-item[data-v-75ddb61b]:last-child{border-bottom:none}.transaction-info[data-v-75ddb61b]{display:flex;flex-direction:column;gap:4px}.transaction-status[data-v-75ddb61b]{align-self:flex-start}.transaction-type[data-v-75ddb61b]{font-weight:500;color:#333;font-size:14px}.transaction-time[data-v-75ddb61b]{font-size:12px;color:#999}.transaction-amount[data-v-75ddb61b]{font-weight:600;font-size:16px;font-family:Monaco,Menlo,monospace}.transaction-amount.positive[data-v-75ddb61b]{color:#52c41a}.transaction-amount.negative[data-v-75ddb61b]{color:#ff4d4f}.empty-state[data-v-75ddb61b]{text-align:center;color:#999;padding:40px 0;font-size:14px}.dialog-footer[data-v-75ddb61b]{text-align:right}.dialog-footer .el-button[data-v-75ddb61b]{margin-left:8px}@media (max-width:768px){.wallet-container[data-v-75ddb61b]{padding:16px}.wallet-card[data-v-75ddb61b]{padding:20px}.wallet-header[data-v-75ddb61b]{flex-direction:column;align-items:flex-start;gap:16px}.wallet-balance[data-v-75ddb61b]{text-align:left;align-items:flex-start}.balance-item[data-v-75ddb61b]{align-items:flex-start}.balance-amount[data-v-75ddb61b]{font-size:28px}.wallet-actions[data-v-75ddb61b]{flex-direction:column}.action-btn[data-v-75ddb61b]{width:100%}}.recharge-content[data-v-75ddb61b]{padding:0}.qr-code-section[data-v-75ddb61b],.recharge-notice[data-v-75ddb61b],.wallet-address-section[data-v-75ddb61b]{margin-bottom:24px}.section-title[data-v-75ddb61b]{font-size:16px;font-weight:600;color:#333;margin:0 0 12px 0}.address-container[data-v-75ddb61b]{display:flex;gap:8px;margin-bottom:8px}.address-input[data-v-75ddb61b]{flex:1}.address-input .el-input__inner[data-v-75ddb61b]{font-family:Monaco,Menlo,monospace;font-size:12px;background-color:#f8f9fa}.charge-meta[data-v-75ddb61b]{display:flex;gap:8px;align-items:center;margin-bottom:10px;flex-wrap:wrap}.meta-tag[data-v-75ddb61b]{border-radius:14px}.meta-title[data-v-75ddb61b]{margin-left:4px;opacity:.9}.meta-val[data-v-75ddb61b]{margin-left:2px;font-weight:700;letter-spacing:.3px}.copy-btn[data-v-75ddb61b]{flex-shrink:0}.address-tip[data-v-75ddb61b]{color:#666;margin:0}.qr-code-container[data-v-75ddb61b]{text-align:center}.qr-code[data-v-75ddb61b]{display:inline-block;padding:16px;background:#fff;border:1px solid #e0e0e0;border-radius:8px;margin-bottom:8px;box-shadow:0 2px 8px rgba(0,0,0,.1)}.qr-code canvas[data-v-75ddb61b]{display:block;border-radius:4px}.qr-tip[data-v-75ddb61b]{font-size:12px;color:#666;margin:0}.recharge-notice[data-v-75ddb61b]{background:#f8f9fa;padding:16px;border-radius:8px;border-left:4px solid #409eff}.notice-list[data-v-75ddb61b]{margin:0;padding-left:16px;font-size:13px;color:#666;line-height:1.6}.notice-list li[data-v-75ddb61b]{margin-bottom:4px;text-align:left}.notice-list li[data-v-75ddb61b]:last-child{margin-bottom:0}.balance-info[data-v-75ddb61b]{font-size:12px;color:#666;margin-top:4px;text-align:left}.balance-total[data-v-75ddb61b]{margin-bottom:4px;font-weight:600}.balance-row[data-v-75ddb61b]{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.divider[data-v-75ddb61b]{color:#ccc}.frozen-info[data-v-75ddb61b]{color:#e6a23c}.balance-tip-icon[data-v-75ddb61b],.frozen-tip-icon[data-v-75ddb61b]{margin-right:4px;color:#ffd666;cursor:pointer}.frozen-tip[data-v-75ddb61b]{font-size:11px;color:#999;margin-left:4px}.fee-info[data-v-75ddb61b]{font-size:12px;color:#e6a23c;margin-top:4px;text-align:left}.actual-amount-info[data-v-75ddb61b]{font-size:12px;color:#67c23a;margin-top:4px;text-align:left;font-weight:500}.address-tip[data-v-75ddb61b]{font-size:12px;color:#f56c6c;margin-top:4px;line-height:1.4;text-align:left}.google-code-tip[data-v-75ddb61b]{font-size:12px;color:#409eff;margin-top:4px;line-height:1.4;text-align:left}.el-form-item[data-v-75ddb61b]{margin-bottom:20px}.el-form-item__label[data-v-75ddb61b]{font-weight:500;color:#333}.el-textarea__inner[data-v-75ddb61b]{font-family:Monaco,Menlo,monospace;font-size:12px;line-height:1.4}.el-input-group__append[data-v-75ddb61b]{background:#f8f9fa;color:#666;font-weight:500}.transaction-list[data-v-75ddb61b]::-webkit-scrollbar{width:6px}.transaction-list[data-v-75ddb61b]::-webkit-scrollbar-track{background:#f1f1f1;border-radius:3px}.transaction-list[data-v-75ddb61b]::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:3px}.transaction-list[data-v-75ddb61b]::-webkit-scrollbar-thumb:hover{background:#a8a8a8}[data-v-75ddb61b] .el-input.is-disabled .el-input__inner{color:rgba(0,0,0,.65)}.recharge-record-container[data-v-5cf693fa]{max-width:1200px;margin:0 auto;padding:20px}.page-header[data-v-5cf693fa]{margin-bottom:24px}.page-title[data-v-5cf693fa]{font-size:28px;font-weight:700;color:#333;margin:0 0 8px 0}.page-subtitle[data-v-5cf693fa]{font-size:14px;color:#666;margin:0}.tab-container[data-v-5cf693fa]{background:#fff;border-radius:12px;box-shadow:0 2px 12px rgba(0,0,0,.1);overflow:hidden;padding:18px;height:70vh}.tab-content[data-v-5cf693fa]{padding:20px}.list-header[data-v-5cf693fa]{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid #f0f0f0}.list-title[data-v-5cf693fa]{font-size:16px;font-weight:600;color:#333}.recharge-list[data-v-5cf693fa]{display:flex;flex-direction:column;gap:12px;overflow-y:auto;height:400px}.recharge-item[data-v-5cf693fa]{background:#f8f9fa;border-radius:8px;padding:16px;cursor:pointer;transition:all .3s ease;border:1px solid transparent}.recharge-item[data-v-5cf693fa]:hover{background:#e9ecef;border-color:#409eff;transform:translateY(-2px);box-shadow:0 4px 12px rgba(64,158,255,.15)}.recharge-item.pending[data-v-5cf693fa]{border-left:4px solid #e6a23c}.recharge-item.success[data-v-5cf693fa]{border-left:4px solid #67c23a}.recharge-item.failed[data-v-5cf693fa]{border-left:4px solid #f56c6c}.item-main[data-v-5cf693fa]{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.item-left .amount[data-v-5cf693fa]{font-size:18px;font-weight:600;color:#333;margin-bottom:4px}.item-left .chain[data-v-5cf693fa]{font-size:12px;color:#666}.item-right[data-v-5cf693fa]{text-align:right}.status[data-v-5cf693fa]{display:flex;align-items:center;gap:4px;font-size:14px;font-weight:500;margin-bottom:4px}.pending-status[data-v-5cf693fa]{color:#e6a23c}.success-status[data-v-5cf693fa]{color:#67c23a}.failed-status[data-v-5cf693fa]{color:#f56c6c}.time[data-v-5cf693fa]{font-size:12px;color:#999}.item-footer[data-v-5cf693fa]{display:flex;justify-content:space-between;align-items:center}.footer-left[data-v-5cf693fa]{display:flex;flex-direction:column;gap:4px;flex:1}.address[data-v-5cf693fa]{font-family:Monaco,Menlo,monospace;font-size:12px;color:#666;text-align:left}.tx-hash[data-v-5cf693fa]{display:flex;align-items:center;gap:4px;font-family:Monaco,Menlo,monospace;font-size:11px;color:#409eff;background:rgba(64,158,255,.1);padding:2px 6px;border-radius:4px;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tx-hash i[data-v-5cf693fa]{font-size:10px}.empty-state[data-v-5cf693fa]{text-align:center;padding:40px 20px;color:#999}.empty-state i[data-v-5cf693fa]{font-size:48px;margin-bottom:16px;display:block}.empty-state p[data-v-5cf693fa]{margin:0;font-size:14px}.detail-content[data-v-5cf693fa]{max-height:500px;overflow-y:auto}.detail-section[data-v-5cf693fa]{margin-bottom:24px}.section-title[data-v-5cf693fa]{font-size:16px;font-weight:600;color:#333;margin:0 0 12px 0;padding-bottom:8px;border-bottom:1px solid #f0f0f0}.detail-list[data-v-5cf693fa]{display:flex;flex-direction:column;gap:16px}.detail-row[data-v-5cf693fa]{display:flex;align-items:center;gap:16px;padding:12px 0;border-bottom:1px solid #f5f5f5}.detail-row[data-v-5cf693fa]:last-child{border-bottom:none}.detail-label[data-v-5cf693fa]{font-size:14px;color:#666;font-weight:500;min-width:80px;flex-shrink:0;text-align:right}.detail-value[data-v-5cf693fa]{font-size:14px;color:#333;flex:1;word-break:break-all;text-align:left}.detail-value.amount[data-v-5cf693fa]{font-weight:600;font-family:Monaco,Menlo,monospace;color:#e74c3c}.detail-value.address[data-v-5cf693fa]{font-family:Monaco,Menlo,monospace;word-break:break-all}.address-container[data-v-5cf693fa]{display:flex;align-items:center;gap:8px;flex:1}.address-container .detail-value[data-v-5cf693fa]{flex:1;word-break:break-all}@media (max-width:768px){.recharge-record-container[data-v-5cf693fa]{padding:16px}.page-title[data-v-5cf693fa]{font-size:24px}.detail-row[data-v-5cf693fa]{flex-direction:column;align-items:flex-start;gap:8px}.detail-label[data-v-5cf693fa]{min-width:auto}.item-main[data-v-5cf693fa]{flex-direction:column;align-items:flex-start;gap:8px}.item-right[data-v-5cf693fa]{text-align:left}}.detail-content[data-v-5cf693fa]::-webkit-scrollbar{width:6px}.detail-content[data-v-5cf693fa]::-webkit-scrollbar-track{background:#f1f1f1;border-radius:3px}.detail-content[data-v-5cf693fa]::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:3px}.detail-content[data-v-5cf693fa]::-webkit-scrollbar-thumb:hover{background:#a8a8a8}.withdrawal-history-container[data-v-37492658]{max-width:1200px;margin:0 auto;padding:20px}.page-header[data-v-37492658]{margin-bottom:24px}.page-title[data-v-37492658]{font-size:28px;font-weight:700;color:#333;margin:0 0 8px 0}.page-subtitle[data-v-37492658]{font-size:14px;color:#666;margin:0}.tab-container[data-v-37492658]{background:#fff;border-radius:12px;box-shadow:0 2px 12px rgba(0,0,0,.1);overflow:hidden;padding:18px}.tab-content[data-v-37492658]{padding:20px}.list-header[data-v-37492658]{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid #f0f0f0}.list-title[data-v-37492658]{font-size:16px;font-weight:600;color:#333}.withdrawal-list[data-v-37492658]{display:flex;flex-direction:column;gap:12px;height:400px;overflow-y:auto}.withdrawal-item[data-v-37492658]{background:#f8f9fa;border-radius:8px;padding:16px;cursor:pointer;transition:all .3s ease;border:1px solid transparent}.withdrawal-item[data-v-37492658]:hover{background:#e9ecef;border-color:#409eff;transform:translateY(-2px);box-shadow:0 4px 12px rgba(64,158,255,.15)}.withdrawal-item.pending[data-v-37492658]{border-left:4px solid #e6a23c}.withdrawal-item.success[data-v-37492658]{border-left:4px solid #67c23a}.withdrawal-item.failed[data-v-37492658]{border-left:4px solid #f56c6c}.item-main[data-v-37492658]{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.item-left .amount[data-v-37492658]{font-size:18px;font-weight:600;color:#333;margin-bottom:4px}.item-left .chain[data-v-37492658]{font-size:12px;color:#666}.item-right[data-v-37492658]{text-align:right}.status[data-v-37492658]{display:flex;align-items:center;gap:4px;font-size:14px;font-weight:500;margin-bottom:4px}.pending-status[data-v-37492658]{color:#e6a23c}.success-status[data-v-37492658]{color:#67c23a}.failed-status[data-v-37492658]{color:#f56c6c}.time[data-v-37492658]{font-size:12px;color:#999}.item-footer[data-v-37492658]{display:flex;justify-content:space-between;align-items:center}.footer-left[data-v-37492658]{display:flex;flex-direction:column;gap:4px;flex:1}.address[data-v-37492658]{font-family:Monaco,Menlo,monospace;font-size:12px;color:#666;text-align:left}.tx-hash[data-v-37492658]{display:flex;align-items:center;gap:4px;font-family:Monaco,Menlo,monospace;font-size:11px;color:#409eff;background:rgba(64,158,255,.1);padding:2px 6px;border-radius:4px;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tx-hash i[data-v-37492658]{font-size:10px}.empty-state[data-v-37492658]{text-align:center;padding:40px 20px;color:#999}.empty-state i[data-v-37492658]{font-size:48px;margin-bottom:16px;display:block}.empty-state p[data-v-37492658]{margin:0;font-size:14px}.detail-content[data-v-37492658]{max-height:500px;overflow-y:auto}.detail-section[data-v-37492658]{margin-bottom:24px}.section-title[data-v-37492658]{font-size:16px;font-weight:600;color:#333;margin:0 0 12px 0;padding-bottom:8px;border-bottom:1px solid #f0f0f0}.detail-list[data-v-37492658]{display:flex;flex-direction:column;gap:16px}.detail-row[data-v-37492658]{display:flex;align-items:center;gap:16px;padding:12px 0;border-bottom:1px solid #f5f5f5}.detail-row[data-v-37492658]:last-child{border-bottom:none}.detail-label[data-v-37492658]{font-size:14px;color:#666;font-weight:500;min-width:80px;flex-shrink:0;text-align:right}.detail-value[data-v-37492658]{font-size:14px;color:#333;flex:1;word-break:break-all;text-align:left}.detail-value.amount[data-v-37492658]{font-weight:600;font-family:Monaco,Menlo,monospace;color:#e74c3c}.detail-value.address[data-v-37492658]{font-family:Monaco,Menlo,monospace;word-break:break-all}.address-container[data-v-37492658]{display:flex;align-items:center;gap:8px}.address-container .detail-value[data-v-37492658]{flex:1;word-break:break-all}@media (max-width:768px){.withdrawal-history-container[data-v-37492658]{padding:16px}.page-title[data-v-37492658]{font-size:24px}.detail-row[data-v-37492658]{flex-direction:column;align-items:flex-start;gap:8px}.detail-label[data-v-37492658]{min-width:auto}.item-main[data-v-37492658]{flex-direction:column;align-items:flex-start;gap:8px}.item-right[data-v-37492658]{text-align:left}}.detail-content[data-v-37492658]::-webkit-scrollbar{width:6px}.detail-content[data-v-37492658]::-webkit-scrollbar-track{background:#f1f1f1;border-radius:3px}.detail-content[data-v-37492658]::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:3px}.detail-content[data-v-37492658]::-webkit-scrollbar-thumb:hover{background:#a8a8a8}.receipt-page[data-v-cabadc3c]{margin:0;box-sizing:border-box;overflow-x:hidden}.card[data-v-cabadc3c]{background:#fff;border:1px solid #eee;border-radius:10px;padding:12px;box-shadow:0 4px 18px rgba(0,0,0,.04);overflow-x:auto}.card-header[data-v-cabadc3c]{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.card-title[data-v-cabadc3c]{margin:0;font-size:18px;font-weight:700;color:#2c3e50}.card-actions[data-v-cabadc3c]{display:flex;align-items:center;gap:8px}.search-input[data-v-cabadc3c]{width:220px}.loading[data-v-cabadc3c]{text-align:center;color:#666;padding:40px 0}.empty[data-v-cabadc3c]{text-align:center;color:#999;padding:40px 0}.empty-icon[data-v-cabadc3c]{font-size:48px;margin-bottom:8px}.amount-green[data-v-cabadc3c]{color:#16a34a;font-weight:700}.amount-red[data-v-cabadc3c]{color:#ef4444;font-weight:700}.type-green[data-v-cabadc3c]{color:#16a34a}.type-red[data-v-cabadc3c]{color:#ef4444}.pagination[data-v-cabadc3c]{display:flex;justify-content:flex-end;margin-top:8px}.detail-grid[data-v-cabadc3c]{display:grid;grid-template-columns:1fr 1fr;gap:12px 24px;padding:8px 4px}.detail-item[data-v-cabadc3c]{display:grid;grid-template-columns:90px 1fr;align-items:center;gap:8px}.detail-item-full[data-v-cabadc3c]{grid-column:1/-1}.detail-label[data-v-cabadc3c]{color:#666;font-size:13px;text-align:right}.detail-value[data-v-cabadc3c]{color:#333;font-size:13px;text-align:left}.detail-value.address[data-v-cabadc3c]{font-family:Monaco,Menlo,monospace;word-break:break-all}.mono-ellipsis[data-v-cabadc3c]{font-family:Monaco,Menlo,monospace;max-width:360px;display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}.clickable-row:hover>td[data-v-cabadc3c]{background:#f8fafc!important;cursor:pointer}.detail-panel[data-v-cabadc3c]{background:#f9fafb;border:1px dashed #e5e7eb;border-radius:8px;padding:12px}.mono[data-v-cabadc3c]{font-family:Monaco,Menlo,monospace}.badge[data-v-cabadc3c]{display:inline-block;padding:2px 8px;border-radius:12px;background:#eef2ff;color:#3b82f6;font-size:12px;line-height:18px}.badge-blue[data-v-cabadc3c]{background:#eff6ff;color:#2563eb}.panel-title[data-v-7f00bb86]{margin:0 0 12px 0;font-size:18px;font-weight:700}.row[data-v-7f00bb86]{display:grid;grid-template-columns:100px 1fr;gap:12px;align-items:center;margin-bottom:12px}.label[data-v-7f00bb86]{color:#666;text-align:right}.textarea-wrapper[data-v-7f00bb86]{position:relative}.char-count[data-v-7f00bb86]{position:absolute;bottom:8px;right:12px;font-size:12px;color:#999;background:hsla(0,0%,100%,.8);padding:2px 6px;border-radius:4px;pointer-events:none}.char-count.char-limit[data-v-7f00bb86]{color:#f56c6c;font-weight:600}.page-title[data-v-dc8bb7de]{text-align:left;margin-bottom:16px;font-size:20px;padding-left:4px}.config-form[data-v-dc8bb7de]{max-width:720px;margin:0;background:#fff;padding:8px 12px}.config-form .el-form-item[data-v-dc8bb7de]{margin-bottom:18px}.config-form .el-input[data-v-dc8bb7de],.config-form .el-select[data-v-dc8bb7de]{width:420px}.radio-group[data-v-dc8bb7de]{display:inline-flex;align-items:center;gap:24px;width:420px;height:40px;padding-left:12px;box-sizing:border-box}.tip[data-v-dc8bb7de]{color:#999;font-size:12px;margin-top:6px}.custom-node[data-v-dc8bb7de]{display:inline-flex;align-items:center;gap:8px}.leaf-checked[data-v-dc8bb7de]{color:#409eff;font-weight:700}.node-label[data-v-dc8bb7de]{line-height:20px}.selected-coins[data-v-dc8bb7de]{display:flex;flex-wrap:wrap;gap:8px;min-height:32px;align-items:center;margin-left:79px}.selected-coins .el-tag[data-v-dc8bb7de]{border-radius:4px}.selected-coins .placeholder[data-v-dc8bb7de]{color:#c0c4cc}.panel-title[data-v-031e6e83]{margin:0 0 12px 0;font-size:18px;font-weight:700}.shop-card[data-v-031e6e83]{border-radius:8px}.shop-row[data-v-031e6e83]{display:grid;grid-template-columns:120px 1fr;gap:16px;align-items:center}.shop-cover img[data-v-031e6e83]{width:120px;height:120px;-o-object-fit:cover;object-fit:cover;border-radius:8px;border:1px solid #eee}.shop-info[data-v-031e6e83]{display:flex;flex-direction:column;gap:8px}.shop-title[data-v-031e6e83]{display:flex;align-items:center;gap:8px;font-weight:700;font-size:16px}.desc[data-v-031e6e83]{color:#666}.meta[data-v-031e6e83]{color:#999;display:flex;gap:16px;font-size:12px}.actions[data-v-031e6e83]{margin-top:8px;display:flex;gap:8px}.guide-card[data-v-031e6e83]{border:1px solid #eef2f7;border-radius:10px}.guide-header[data-v-031e6e83]{text-align:center;font-weight:700;color:#2c3e50;background:#f9fafb;border-bottom:1px solid #eef2f7;padding:10px 12px;border-radius:10px 10px 0 0}.guide-content[data-v-031e6e83]{padding:4px 6px;text-align:left}.guide-card .hierarchy[data-v-031e6e83]{margin:0 0 8px 0;color:#111827;font-weight:700;font-size:14px}.guide-steps[data-v-031e6e83]{margin:0;padding-left:18px;color:#374151}.guide-steps li[data-v-031e6e83]{line-height:1.9;margin:6px 0}.guide-steps b[data-v-031e6e83]{color:#111827}.guide-note[data-v-031e6e83]{margin-top:10px;color:#6b7280;font-size:13px;background:#f9fafb;border:1px dashed #e5e7eb;padding:8px 10px;border-radius:8px}.coin-list[data-v-031e6e83]{display:flex;align-items:center;gap:8px}.coin-img[data-v-031e6e83]{width:20px;height:20px;border-radius:4px;display:inline-block}.el-dialog__body .row{margin-bottom:12px;display:grid;grid-template-columns:96px 1fr;-moz-column-gap:12px;column-gap:12px;align-items:center}.el-dialog__body .row .el-radio-group{display:inline-flex;align-items:center;gap:24px;padding-left:0;margin-left:0}.el-dialog__body .label{text-align:right;color:#666;font-weight:500}.el-dialog__footer{padding-top:4px}.selected-coin-list{display:flex;flex-wrap:wrap;gap:6px;justify-content:flex-start}.selected-coin-list .el-tag{margin-right:0}.product-new[data-v-538996de]{padding:20px;max-width:60vw;margin:0 auto}.product-form-card[data-v-538996de]{box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.card-header[data-v-538996de]{text-align:center}.card-header h2[data-v-538996de]{margin:0 0 8px 0;color:#303133;font-size:24px;font-weight:600}.subtitle[data-v-538996de]{margin:0;color:#909399;font-size:14px}.product-form[data-v-538996de]{margin-top:20px}.product-form .el-form-item .el-radio-group[data-v-538996de]{display:inline-flex;align-items:center;gap:24px;padding-left:0;margin-left:0}.product-form .align-like-input .el-form-item__content[data-v-538996de]{padding-left:15px}.unit-text[data-v-538996de]{margin-left:10px;color:#909399;font-size:14px}.actions-row .el-form-item__content[data-v-538996de]{text-align:center}.form-actions[data-v-538996de]{grid-auto-flow:column;text-align:center}.form-actions .el-button[data-v-538996de]{min-width:auto;white-space:nowrap;padding:8px 20px!important;min-width:160px}[data-v-538996de] input[type=number]::-webkit-inner-spin-button,[data-v-538996de] input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;appearance:none;margin:0}[data-v-538996de] input[type=number]{-moz-appearance:textfield;-webkit-appearance:textfield;appearance:textfield}@media (max-width:768px){.product-new[data-v-538996de]{padding:15px}.product-form-card[data-v-538996de]{margin:0 10px}.el-form-item[data-v-538996de]{margin-bottom:18px}}[data-v-538996de] .el-form-item__content{text-align:left}.account-products[data-v-1152902e]{padding:4px}.toolbar[data-v-1152902e]{justify-content:space-between;margin-bottom:12px}.left-area[data-v-1152902e],.right-area[data-v-1152902e],.toolbar[data-v-1152902e]{display:flex;align-items:center}.page-title[data-v-1152902e]{margin:0;font-size:18px;font-weight:600}.mr-12[data-v-1152902e]{margin-right:12px}.ml-8[data-v-1152902e]{margin-left:8px}.pagination[data-v-1152902e]{display:flex;justify-content:flex-end;margin-top:12px}.edit-form .align-like-input .el-form-item__content[data-v-1152902e]{padding-left:12px}[data-v-1152902e] .el-form-item__content{text-align:left}.account-purchased[data-v-3f914c01]{padding:4px}.toolbar[data-v-3f914c01]{justify-content:space-between;margin-bottom:12px}.left-area[data-v-3f914c01],.right-area[data-v-3f914c01],.toolbar[data-v-3f914c01]{display:flex;align-items:center}.page-title[data-v-3f914c01]{margin:0;font-size:18px;font-weight:600}.mr-12[data-v-3f914c01]{margin-right:12px}.ml-8[data-v-3f914c01]{margin-left:8px}.thumb[data-v-3f914c01]{width:72px;height:48px;-o-object-fit:cover;object-fit:cover;border-radius:4px}.pagination[data-v-3f914c01]{display:flex;justify-content:flex-end;margin-top:12px}.funds-page[data-v-fa8ab438]{padding:8px}.tabs-card[data-v-fa8ab438]{background:#fff;border:1px solid #eee;border-radius:10px;padding:12px}.list-wrap[data-v-fa8ab438]{padding:6px 0}.list-header[data-v-fa8ab438]{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;padding-bottom:8px;border-bottom:1px solid #f0f0f0}.list-title[data-v-fa8ab438]{font-size:14px;font-weight:600;color:#333}.record-list[data-v-fa8ab438]{display:flex;flex-direction:column;gap:10px;max-height:62vh;overflow-y:auto}.record-item[data-v-fa8ab438]{background:#f8f9fa;border-radius:8px;padding:12px;border:1px solid transparent;transition:all .15s ease}.record-item[data-v-fa8ab438]:hover{background:#eef2f7;border-color:#409eff;box-shadow:0 4px 12px rgba(64,158,255,.12);transform:translateY(-1px)}.record-item.pending[data-v-fa8ab438]{border-left:4px solid #e6a23c}.record-item.success[data-v-fa8ab438]{border-left:4px solid #67c23a}.record-item.failed[data-v-fa8ab438]{border-left:4px solid #f56c6c}.item-main[data-v-fa8ab438]{display:flex;justify-content:space-between;align-items:center}.item-left .amount[data-v-fa8ab438]{font-size:16px;font-weight:700;color:#111;margin-bottom:2px}.item-left .chain[data-v-fa8ab438]{font-size:12px;color:#666}.item-right[data-v-fa8ab438]{text-align:right}.status[data-v-fa8ab438]{margin-bottom:2px}.time[data-v-fa8ab438]{font-size:12px;color:#999}.expand-panel[data-v-fa8ab438]{background:#fff;border:1px dashed #e5e7eb;border-radius:8px;padding:10px;margin-top:8px}.expand-grid[data-v-fa8ab438]{display:grid;grid-template-columns:1fr 1fr;gap:10px 24px}.expand-item[data-v-fa8ab438]{display:grid;grid-template-columns:80px 1fr;gap:6px;align-items:center}.label[data-v-fa8ab438]{color:#666;font-size:13px;text-align:right}.value[data-v-fa8ab438]{color:#333;font-size:13px;text-align:left}.value-row[data-v-fa8ab438]{display:inline-flex;align-items:center;gap:6px}.mono-ellipsis[data-v-fa8ab438],.mono[data-v-fa8ab438]{font-family:Monaco,Menlo,monospace}.mono-ellipsis[data-v-fa8ab438]{max-width:480px;display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.empty[data-v-fa8ab438]{text-align:center;color:#999;padding:20px 0}.purchased-detail-page[data-v-592f2fb3]{padding:12px}.title[data-v-592f2fb3]{margin:0 0 12px 0;font-weight:600;color:#2c3e50}.sub-title[data-v-592f2fb3]{font-weight:600;margin-bottom:12px;color:#333;font-size:16px}.section[data-v-592f2fb3]{margin-bottom:12px}.row[data-v-592f2fb3]{display:flex;gap:8px;line-height:1.8;margin-bottom:8px}.label[data-v-592f2fb3]{color:#666;min-width:170px;font-weight:500;text-align:right}.value[data-v-592f2fb3]{color:#333;flex:1;text-align:left;margin-left:18px}.value.mono[data-v-592f2fb3]{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;word-break:break-all}.value.strong[data-v-592f2fb3]{font-weight:700;color:#e74c3c}.actions[data-v-592f2fb3]{margin-top:20px;text-align:center}.loading[data-v-592f2fb3]{text-align:center;padding:40px;color:#666}.empty[data-v-1572342c]{color:#888;padding:24px;text-align:center}.value.mono[data-v-1572342c]{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;word-break:break-all}.value.strong[data-v-1572342c]{font-weight:700;color:#e74c3c}.orders-page[data-v-2ad2c7c3]{padding:12px}.title[data-v-2ad2c7c3]{margin:0 0 12px 0;font-weight:600;color:#2c3e50}.empty[data-v-2ad2c7c3]{color:#888;padding:24px;text-align:center}.order-list[data-v-2ad2c7c3]{display:grid;grid-template-columns:1fr 1fr;gap:12px}.order-card[data-v-2ad2c7c3]{border:1px solid #eee;border-radius:8px;padding:0;background:#fff;overflow:hidden}.order-header[data-v-2ad2c7c3]{display:grid;grid-template-columns:1fr 1fr;gap:8px 12px;padding:12px;cursor:pointer;position:relative}.order-header[data-v-2ad2c7c3]:focus{outline:2px solid #409eff;outline-offset:-2px}.order-header.is-open[data-v-2ad2c7c3]{background:#fafafa}.header-row[data-v-2ad2c7c3]{display:flex;gap:8px;line-height:1.8;align-items:center}.chevron[data-v-2ad2c7c3]{position:absolute;right:12px;top:12px;width:10px;height:10px;border-right:2px solid #666;border-bottom:2px solid #666;transform:rotate(-45deg);transition:transform .2s ease}.chevron.chevron-open[data-v-2ad2c7c3]{transform:rotate(45deg)}.order-details[data-v-2ad2c7c3]{border-top:1px solid #eee;padding:12px}.machine-list[data-v-2ad2c7c3]{display:grid;grid-template-columns:1fr 1fr;gap:12px}.machine-card[data-v-2ad2c7c3]{border:1px dashed #e2e2e2;border-radius:6px;padding:10px;background:#fff}.row[data-v-2ad2c7c3]{display:flex;gap:8px;line-height:1.8}.label[data-v-2ad2c7c3]{color:#666}.value[data-v-2ad2c7c3]{color:#333}.value.mono[data-v-2ad2c7c3]{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;word-break:break-all}.value.strong[data-v-2ad2c7c3]{font-weight:700;color:#e74c3c}@media (max-width:960px){.machine-list[data-v-2ad2c7c3],.order-header[data-v-2ad2c7c3],.order-list[data-v-2ad2c7c3]{grid-template-columns:1fr}}.orders-page[data-v-c4d1af58]{padding:12px}.title[data-v-c4d1af58]{margin:0 0 12px 0;font-weight:600;color:#2c3e50}.empty[data-v-c4d1af58]{color:#888;padding:24px;text-align:center}.order-list[data-v-c4d1af58]{display:grid;grid-template-columns:1fr 1fr;gap:12px}.order-card[data-v-c4d1af58]{border:1px solid #eee;border-radius:8px;padding:0;background:#fff;overflow:hidden}.order-header[data-v-c4d1af58]{display:grid;grid-template-columns:1fr 1fr;gap:8px 12px;padding:12px;cursor:pointer;position:relative}.order-header[data-v-c4d1af58]:focus{outline:2px solid #409eff;outline-offset:-2px}.order-header.is-open[data-v-c4d1af58]{background:#fafafa}.header-row[data-v-c4d1af58]{display:flex;gap:8px;line-height:1.8;align-items:center}.chevron[data-v-c4d1af58]{position:absolute;right:12px;top:12px;width:10px;height:10px;border-right:2px solid #666;border-bottom:2px solid #666;transform:rotate(-45deg);transition:transform .2s ease}.chevron.chevron-open[data-v-c4d1af58]{transform:rotate(45deg)}.order-details[data-v-c4d1af58]{border-top:1px solid #eee;padding:12px}.machine-list[data-v-c4d1af58]{display:grid;grid-template-columns:1fr 1fr;gap:12px}.machine-card[data-v-c4d1af58]{border:1px dashed #e2e2e2;border-radius:6px;padding:10px;background:#fff}.row[data-v-c4d1af58]{display:flex;gap:8px;line-height:1.8}.label[data-v-c4d1af58]{color:#666}.value[data-v-c4d1af58]{color:#333}.value.mono[data-v-c4d1af58]{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;word-break:break-all}.value.strong[data-v-c4d1af58]{font-weight:700;color:#e74c3c}@media (max-width:960px){.machine-list[data-v-c4d1af58],.order-header[data-v-c4d1af58],.order-list[data-v-c4d1af58]{grid-template-columns:1fr}}.order-detail-page[data-v-613e4d6c]{padding:12px}.title[data-v-613e4d6c]{margin:0 0 12px 0;font-weight:600;color:#2c3e50}.sub-title[data-v-613e4d6c]{font-weight:600;margin-bottom:8px}.section[data-v-613e4d6c]{margin-bottom:12px}.row[data-v-613e4d6c]{display:flex;gap:8px;line-height:1.8}.label[data-v-613e4d6c]{color:#666}.value[data-v-613e4d6c]{color:#333}.value.mono[data-v-613e4d6c]{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;word-break:break-all}.value.strong[data-v-613e4d6c]{font-weight:700;color:#e74c3c}.actions[data-v-613e4d6c]{margin-top:12px}.account-product-detail[data-v-dd9b9f4e]{padding:8px}.header[data-v-dd9b9f4e]{display:flex;align-items:center;gap:12px;margin-bottom:8px}.title[data-v-dd9b9f4e]{margin:0;font-size:18px;font-weight:600}.detail-card[data-v-dd9b9f4e]{margin-bottom:12px}.detail-form[data-v-dd9b9f4e]{padding:4px 8px}.image-row[data-v-dd9b9f4e]{display:flex;align-items:center;min-height:120px}.cover[data-v-dd9b9f4e]{width:200px;height:120px;-o-object-fit:cover;object-fit:cover;border-radius:4px;background:#f5f5f5;border:1px solid #eee}.placeholder[data-v-dd9b9f4e]{color:#999}.section-title[data-v-dd9b9f4e]{font-weight:600}.ranges-wrapper[data-v-dd9b9f4e]{display:grid;gap:12px}.range-block[data-v-dd9b9f4e]{border:1px solid #f0f0f0;background:#fcfcfc;border-radius:6px;padding:10px}.item[data-v-dd9b9f4e]{color:#444;line-height:24px}.machines-box[data-v-dd9b9f4e]{margin-top:8px;border-top:1px dashed #e5e5e5;padding-top:8px}.machine-row[data-v-dd9b9f4e]{display:flex;flex-wrap:wrap;gap:8px;color:#555;line-height:22px}.split[data-v-dd9b9f4e]{width:8px}.empty-text[data-v-dd9b9f4e]{color:#909399;text-align:center;padding:12px 0}.label-help[data-v-dd9b9f4e]{margin-left:4px;color:#909399;cursor:help}.el-input-group__append,.el-input-group__prepend{padding:0 5px!important}.changed-input .el-input__inner,.changed-input input.el-input__inner{border-color:#f56c6c!important}.el-input.is-disabled .el-input__inner,.el-textarea.is-disabled .el-textarea__inner{color:#000!important}.product-machine-add[data-v-a32ba9b4]{padding:8px}.header[data-v-a32ba9b4]{display:flex;align-items:center;gap:12px;margin-bottom:8px}.title[data-v-a32ba9b4]{margin:0;font-size:18px;font-weight:600}.notice-alert[data-v-a32ba9b4]{margin-bottom:12px}.notice-alert[data-v-a32ba9b4] .el-alert__content,.notice-alert[data-v-a32ba9b4] .el-alert__description,.notice-alert[data-v-a32ba9b4] .el-alert__title{text-align:left}.label-help[data-v-a32ba9b4]{margin-left:4px;color:#909399;cursor:help}.form-card[data-v-a32ba9b4]{margin-bottom:12px}.actions[data-v-a32ba9b4]{text-align:right}.product-machine-add[data-v-a32ba9b4] .el-form-item__content{justify-content:flex-start}.product-machine-add[data-v-a32ba9b4] .el-input-group__append{background:#f5f7fa;color:#606266;border-left:1px solid #dcdfe6}[data-v-a32ba9b4] .el-form-item__content{text-align:left;padding-left:18px!important}.header-container[data-v-20c969ee]{width:100%}.navbar[data-v-20c969ee]{display:flex;justify-content:center;gap:24px;background:#fff;border-bottom:1px solid #eee;padding:16px 0;margin-bottom:16px}.nav-btn[data-v-20c969ee]{display:flex;align-items:center;gap:8px;background:none;border:none;font-size:16px;color:#2c3e50;cursor:pointer;padding:12px 20px;border-radius:8px;transition:all .3s ease;text-decoration:none;outline:none;position:relative}.nav-btn[data-v-20c969ee]:hover{background:#f8f9fa;transform:translateY(-2px)}.nav-btn.active[data-v-20c969ee]{background:#42b983;color:#fff}.nav-icon[data-v-20c969ee]{font-size:18px}.nav-text[data-v-20c969ee]{font-weight:600}.cart-count[data-v-20c969ee]{background:#e74c3c;color:#fff;padding:2px 8px;border-radius:12px;font-size:12px;font-weight:700;min-width:20px;text-align:center}.breadcrumb[data-v-20c969ee]{display:flex;align-items:center;gap:8px;padding:12px 20px;background:#f8f9fa;border-radius:8px;margin:0 20px 20px 20px;font-size:14px}.breadcrumb-item[data-v-20c969ee]{color:#666;text-decoration:none;transition:color .3s ease}.breadcrumb-item[data-v-20c969ee]:hover{color:#42b983}.breadcrumb-item.active[data-v-20c969ee]{color:#2c3e50;font-weight:600}.breadcrumb-item[data-v-20c969ee]:not(:last-child):after{content:">";margin-left:8px;color:#ccc}@media (max-width:768px){.navbar[data-v-20c969ee]{flex-direction:column;gap:12px;padding:12px 0}.nav-btn[data-v-20c969ee]{width:100%;justify-content:center;padding:16px 20px}.breadcrumb[data-v-20c969ee]{margin:0 12px 16px 12px;padding:8px 16px;font-size:12px}}.content-container[data-v-9935370e]{padding:20px;min-height:calc(100vh - 120px)}*,body,html{margin:0}*,.el-main,body,html{padding:0;box-sizing:border-box} \ No newline at end of file diff --git a/power_leasing/test/img/commodity.0dddb787.png b/power_leasing/test/img/commodity.0dddb787.png new file mode 100644 index 0000000..bc54006 Binary files /dev/null and b/power_leasing/test/img/commodity.0dddb787.png differ diff --git a/power_leasing/test/index.html b/power_leasing/test/index.html index 7bb90b3..0262a73 100644 --- a/power_leasing/test/index.html +++ b/power_leasing/test/index.html @@ -1 +1 @@ -power_leasing
\ No newline at end of file +power_leasing
\ No newline at end of file diff --git a/power_leasing/test/js/app.c7605e06.js b/power_leasing/test/js/app.c7605e06.js new file mode 100644 index 0000000..4b6e82c --- /dev/null +++ b/power_leasing/test/js/app.c7605e06.js @@ -0,0 +1,2 @@ +(function(){var t={115:function(t,e,a){"use strict";a.r(e),a.d(e,{__esModule:function(){return i.B},default:function(){return l}});var s=a(5825),i=a(3466),o=i.A,r=a(845),n=(0,r.A)(o,s.XX,s.Yp,!1,null,"a32ba9b4",null),l=n.exports},346:function(t,e,a){"use strict";Object.defineProperty(e,"B",{value:!0}),e.A=void 0,a(4114);var s=a(9252),i=a(9662);e.A={name:"AccountProductNew",data(){const t=(t,e,a)=>{"string"!==typeof e||0!==e.trim().length?a():a(new Error("内容不能全是空格"))},e=t=>{if("string"!==typeof t||0===t.length)return!1;const e=/[\u{1F300}-\u{1FAFF}]|[\u{1F1E6}-\u{1F1FF}]|[\u{2600}-\u{26FF}]|[\u{2700}-\u{27BF}]|[\u{FE0F}]|[\u{200D}]|[\u{20E3}]/u;return e.test(t)},a=(t,a,s)=>{"string"===typeof a&&e(a)?s(new Error("商品名称不能包含表情符号")):s()};return{submitting:!1,form:{name:"",type:0,coin:"",description:"",image:"",state:0,shopId:null},rules:{name:[{required:!0,message:"请输入商品名称",trigger:"blur"},{validator:t,trigger:"blur"},{validator:a,trigger:"blur"},{min:1,max:30,message:"商品名称长度在 2 到 30 个字符",trigger:"blur"}],type:[{required:!0,message:"请选择商品类型",trigger:"change"}],coin:[{required:!0,message:"请选择挖矿币种",trigger:"change"}],description:[{required:!0,message:"请输入商品描述",trigger:"blur"},{validator:t,trigger:"blur"},{min:1,max:100,message:"商品描述长度在 1 到 100 个字符",trigger:"blur"}],image:[],state:[{required:!0,message:"请选择商品状态",trigger:"change"}]}}},computed:{coinOptions(){return s.coinList||[{value:"nexa",label:"NEXA"},{value:"rxd",label:"RXD"},{value:"dgbo",label:"DGBO"},{value:"dgbq",label:"DGBQ"},{value:"dgbs",label:"DGBS"},{value:"alph",label:"ALPH"},{value:"enx",label:"ENX"},{value:"grs",label:"GRS"},{value:"mona",label:"MONA"}]}},created(){const t=this.$route.query.shopId;t&&(this.form.shopId=Number(t))},methods:{async fetchAddProduct(t){const e=await(0,i.createProduct)(t);!e||0!==e.code&&200!==e.code?this.$message({message:e&&e.msg?e.msg:"创建失败",type:"error",showClose:!0}):(this.$message({message:"商品创建成功",type:"success",showClose:!0}),this.$router.push("/account/products"))},async handleSubmit(){try{const t=await this.$refs.productForm.validate();if(!t)return;if(!this.form.shopId)return void this.$message({message:"缺少店铺ID,请从我的店铺页面进入",type:"error",showClose:!0});this.submitting=!0,this.fetchAddProduct(this.form)}catch(t){console.error("创建商品失败:",t)}finally{this.submitting=!1}},handleReset(){this.$refs.productForm.resetFields();const t=this.$route.query.shopId;t&&(this.form.shopId=Number(t))},handleCancel(){this.$router.push("/account/shops")}}}},460:function(t,e,a){"use strict";var s=a(3999)["default"];Object.defineProperty(e,"B",{value:!0}),e.A=void 0;var i=a(4180),o=s(a(8213));e.A={name:"AccountOrders",components:{OrderList:o.default},data(){return{active:"7",orders:{7:[],8:[],9:[]},loading:!1}},created(){const t=this.$route&&this.$route.query&&this.$route.query.status?String(this.$route.query.status):null,e=localStorage.getItem("orderListActiveTab"),a=t||e||"7";this.active=a,this.fetchOrders(a)},methods:{async fetchCancelOrder(t){const e=await(0,i.cancelOrder)(t);e&&200===Number(e.code)?(this.$message({message:"取消订单成功",type:"success",showClose:!0}),this.fetchOrders(this.active)):this.$message({message:e&&e.msg||"取消失败",type:"error",showClose:!0})},handleCancelOrder({orderId:t}){t&&this.fetchCancelOrder({orderId:t})},handleTabClick(t){const e=t&&t.name?String(t.name):this.active;try{localStorage.setItem("orderListActiveTab",e)}catch(a){console.warn("保存标签页状态失败:",a)}this.fetchOrders(e)},async fetchOrders(t){const e=String(t);try{this.loading=!0;const a=await(0,i.getOrdersByStatus)({status:Number(t)}),s=null!=(a&&a.data)?a.data:a,o=Array.isArray(s)?s:Array.isArray(s&&s.rows)?s.rows:[];this.$set(this.orders,e,o)}catch(a){console.log(a,"获取订单失败")}finally{this.loading=!1}}}}},465:function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.initNoEmojiGuard=void 0;const a=()=>{if("undefined"===typeof window)return;if(window.__noEmojiGuardInitialized)return;window.__noEmojiGuardInitialized=!0;const t=/[\u{1F300}-\u{1FAFF}]|[\u{1F1E6}-\u{1F1FF}]|[\u{2600}-\u{26FF}]|[\u{2700}-\u{27BF}]|[\u{FE0F}]|[\u{200D}]|[\u{20E3}]/gu,e=t=>{if(!t||!(t instanceof Element))return!1;if(t.getAttribute&&"true"===t.getAttribute("data-allow-emoji"))return!1;const e=t.tagName;if("INPUT"===e){const e=(t.getAttribute("type")||"text").toLowerCase(),a=["checkbox","radio","file","hidden","button","submit","reset","range","color","date","datetime-local","month","time","week"];return-1===a.indexOf(e)}return"TEXTAREA"===e},a=(t,e)=>{try{t.__noEmojiComposing=e}catch(a){}},s=t=>!(!t||!t.__noEmojiComposing);function i(e){const a=String(e.value??"");if(!a)return;if(!t.test(a))return;const s=e.selectionStart,i=e.selectionEnd,o=a.replace(t,"");if(o===a)return;e.value=o;try{if("number"===typeof s&&"number"===typeof i){const t=a.length-o.length,i=Math.max(0,s-t);e.setSelectionRange(i,i)}}catch(n){}const r=new Event("input",{bubbles:!0});e.dispatchEvent(r)}document.addEventListener("compositionstart",t=>{e(t.target)&&a(t.target,!0)},!0),document.addEventListener("compositionend",t=>{e(t.target)&&(a(t.target,!1),i(t.target))},!0),document.addEventListener("input",t=>{const a=t.target;e(a)&&(s(a)||i(a))},!0)};e.initNoEmojiGuard=a},772:function(t,e,a){"use strict";a.r(e),a.d(e,{__esModule:function(){return i.B},default:function(){return l}});var s=a(9741),i=a(8732),o=i.A,r=a(845),n=(0,r.A)(o,s.XX,s.Yp,!1,null,"2fdab8e8",null),l=n.exports},1029:function(t,e,a){"use strict";Object.defineProperty(e,"B",{value:!0}),e.A=void 0,a(8111),a(1701);var s=a(9662),i=a(1193);e.A={name:"AccountProductDetail",data(){return{loading:!1,product:null,ranges:[],machineList:[],productId:null,confirmVisible:!1,stateSnapshot:{},fieldSnapshot:{},updateLoading:!1}},created(){this.productId=Number(this.$route.params.id),this.productId&&(this.fetchDetail({id:this.productId}),this.fetchMachineList({id:this.productId}))},methods:{isRowDisabled(t){return!!t&&1===Number(t.saleState)},handleOpenConfirm(){this.machineList&&this.machineList.length?this.confirmVisible=!0:this.$message.warning("没有可提交的数据")},async fetchDetail(t){this.loading=!0;try{const e=await(0,s.getMachineInfoById)(t),a=e?.data||{};this.product=a,this.ranges=Array.isArray(a.productMachineRangeList)?a.productMachineRangeList:[]}catch(e){console.error("获取商品详情失败",e),console.log("获取商品详情失败")}finally{this.loading=!1}},async fetchMachineList(t){const e=await(0,i.getMachineListForUpdate)(t);e&&200===e.code&&(this.machineList=e.rows,this.refreshStateSnapshot(),this.refreshFieldSnapshot())},refreshStateSnapshot(){const t={},e=Array.isArray(this.machineList)?this.machineList:[];for(let a=0;a6&&(r=r.slice(0,6)),n&&(n=n.slice(0,4)),a=n.length?`${r}.${n}`:i?`${r}.`:r,this.$set(this.machineList,t,{...this.machineList[t],theoryPower:a})},handleNumericCell(t,e){const a=this.machineList&&this.machineList[t];if(!a||this.isRowDisabled(a))return;let s=String(this.machineList[t][e]??"");s=s.replace(/[^0-9.]/g,"");const i=s.indexOf(".");if(-1!==i&&(s=s.slice(0,i+1)+s.slice(i+1).replace(/\./g,"")),"powerDissipation"===e){const t=s.endsWith("."),e=s.split(".");let a=e[0]||"",i=e[1]||"";a.length>6&&(a=a.slice(0,6)),i&&(i=i.slice(0,4)),s=i.length?`${a}.${i}`:t?`${a}.`:a}else if("price"===e){const t=s.endsWith("."),e=s.split(".");let a=e[0]||"",i=e[1]||"";a.length>12&&(a=a.slice(0,12)),i&&(i=i.slice(0,2)),s=i.length?`${a}.${i}`:t?`${a}.`:a}else if(-1!==i){const[t,e]=s.split(".");s=t+"."+(e?e.slice(0,6):"")}const o={...this.machineList[t],[e]:s};this.$set(this.machineList,t,o)},handlePriceBlur(t){const e=String(this.machineList[t].price??""),a=/^\d{1,12}(\.\d{1,2})?$/;if(!e||Number(e)<=0||!a.test(e)){this.$message.warning("单价必须大于0,整数最多12位,小数最多2位");const e={...this.machineList[t],price:""};this.$set(this.machineList,t,e)}},handleMaxLeaseDaysInput(t){const e=this.machineList&&this.machineList[t];if(!e||this.isRowDisabled(e))return;let a=String(this.machineList[t].maxLeaseDays??"");a=a.replace(/\D/g,""),a.length>3&&(a=a.slice(0,3));const s={...this.machineList[t],maxLeaseDays:a};this.$set(this.machineList,t,s)},handleMaxLeaseDaysBlur(t){const e=String(this.machineList[t].maxLeaseDays??"");if(!/^\d{1,3}$/.test(e)){this.$message.warning("最大租赁天数需为 1-365 的整数");const e={...this.machineList[t],maxLeaseDays:""};return void this.$set(this.machineList,t,e)}const a=Number(e);if(!Number.isInteger(a)||a<1||a>365){this.$message.warning("最大租赁天数需为 1-365 的整数");const e={...this.machineList[t],maxLeaseDays:""};this.$set(this.machineList,t,e)}},handleTheoryPowerBlur(t){const e=String(this.machineList[t].theoryPower??""),a=/^\d{1,6}(\.\d{1,4})?$/;if(!e||Number(e)<=0||!a.test(e)){this.$message.warning("理论算力必须大于0");const e={...this.machineList[t],theoryPower:""};this.$set(this.machineList,t,e)}},handlePowerDissipationBlur(t){const e=String(this.machineList[t].powerDissipation??""),a=/^\d{1,6}(\.\d{1,4})?$/;if(!e||Number(e)<=0||!a.test(e)){this.$message.warning("功耗必须大于0");const e={...this.machineList[t],powerDissipation:""};this.$set(this.machineList,t,e)}},handleTypeCell(t){const e=this.machineList&&this.machineList[t];if(!e||this.isRowDisabled(e))return;const a={...this.machineList[t],type:this.machineList[t].type};this.$set(this.machineList,t,a)},handleStateChange(t){const e=this.machineList&&this.machineList[t];if(!e||this.isRowDisabled(e))return;const a={...this.machineList[t],state:this.machineList[t].state};this.$set(this.machineList,t,a)},async handleDeleteMachine(t){if(t&&t.id)if(this.isRowDisabled(t))this.$message.warning("该矿机已售出,无法删除");else try{await this.$confirm("确定删除该矿机吗?删除后不可恢复","提示",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"});const e=await(0,i.deleteMachine)({id:t.id});e&&200===e.code&&(this.$message.success("删除成功"),this.fetchMachineList({id:this.productId}))}catch(e){}},async handleSubmitMachines(){if(this.machineList&&this.machineList.length)try{const t=/^\d{1,6}(\.\d{1,4})?$/,e=/^\d{1,12}(\.\d{1,2})?$/,a=t=>"string"===typeof t&&0===t.trim().length&&t.length>0;for(let i=0;i365)return void this.$message.warning(`第${i+1}行(机器:${o}) 最大租赁天数需为 1-365 的整数`);if(l&&a(l))return void this.$message.warning(`第${i+1}行(机器:${o}) 型号不能全是空格`)}const s=this.machineList.map(t=>({id:t.id,powerDissipation:Number(t.powerDissipation??0),price:Number(t.price??0),state:Number(t.state??0),theoryPower:Number(t.theoryPower??0),type:t.type||"",maxLeaseDays:Number(t.maxLeaseDays??0),unit:t.unit||""}));this.confirmVisible=!1,console.log(s,"payload"),await this.updateMachineList(s)}catch(t){}else this.$message.warning("没有可提交的数据")},handleBack(){this.$router.back()}}}},1182:function(t,e,a){"use strict";a.r(e),a.d(e,{__esModule:function(){return i.B},default:function(){return l}});var s=a(2038),i=a(7570),o=i.A,r=a(845),n=(0,r.A)(o,s.XX,s.Yp,!1,null,null,null),l=n.exports},1193:function(t,e,a){"use strict";var s=a(3999)["default"];Object.defineProperty(e,"__esModule",{value:!0}),e.addSingleOrBatchMachine=o,e.deleteMachine=r,e.getMachineListForUpdate=d,e.getUserMachineList=n,e.getUserMinersList=l,e.updateMachine=c;var i=s(a(5720));function o(t){return(0,i.default)({url:"/lease/product/machine/addSingleOrBatchMachine",method:"post",data:t})}function r(t){return(0,i.default)({url:"/lease/product/machine/delete",method:"post",data:t})}function n(t){return(0,i.default)({url:"/lease/product/machine/getUserMachineList",method:"post",data:t})}function l(t){return(0,i.default)({url:"/lease/product/machine/getUserMinersList",method:"post",data:t})}function c(t){return(0,i.default)({url:"/lease/product/machine/updateMachine",method:"post",data:t})}function d(t){return(0,i.default)({url:"/lease/product/machine/getMachineListForUpdate",method:"post",data:t})}},1220:function(t,e,a){"use strict";a.r(e),a.d(e,{__esModule:function(){return i.B},default:function(){return l}});var s=a(5508),i=a(1872),o=i.A,r=a(845),n=(0,r.A)(o,s.XX,s.Yp,!1,null,"9935370e",null),l=n.exports},1259:function(t,e,a){"use strict";Object.defineProperty(e,"B",{value:!0}),e.A=void 0,a(4114),a(8111),a(3579);e.A={name:"AccountPage",data(){return{activeIndex:"1",userEmail:"",activeRole:"seller",buyerLinks:[{label:"我的钱包",to:"/account/wallet"},{label:"已购商品",to:"/account/purchased"},{label:"订单列表",to:"/account/orders"},{label:"资金流水",to:"/account/funds-flow"}],sellerLinks:[{label:"我的店铺",to:"/account/shops"},{label:"商品列表",to:"/account/products"},{label:"已售出订单",to:"/account/seller-orders"},{label:"收款记录",to:"/account/receipt-record"}]}},computed:{userInitial(){const t=(this.userEmail||"").trim();return t?t[0].toUpperCase():"?"},displayedLinks(){return"buyer"===this.activeRole?this.buyerLinks:this.sellerLinks}},mounted(){const t=t=>{const e=localStorage.getItem(t);if(null==e)return null;try{return JSON.parse(e)}catch(a){return e}},e=t("leasEmail")||"";this.userEmail="string"===typeof e?e:String(e);const a=t("accountActiveRole");"buyer"!==a&&"seller"!==a||(this.activeRole=a),this.setActiveRoleByRoute()},methods:{handleClickRole(t){if("buyer"===t||"seller"===t){this.activeRole=t;try{localStorage.setItem("accountActiveRole",JSON.stringify(t))}catch(e){}try{const e="buyer"===t?this.buyerLinks&&this.buyerLinks[0]&&this.buyerLinks[0].to:this.sellerLinks&&this.sellerLinks[0]&&this.sellerLinks[0].to;e&&this.$route&&this.$route.path!==e&&this.$router.push(e)}catch(e){}}},setActiveRoleByRoute(){const t=this.$route&&this.$route.path||"";if(0===t.indexOf("/account/order-detail")){const t=this.$route&&this.$route.query&&this.$route.query.from||"";let e=t;if(!e)try{e=sessionStorage.getItem("orderDetailFrom")||""}catch(r){e=""}const a="buyer"===e?"buyer":"seller"===e?"seller":this.activeRole;if(this.activeRole!==a){this.activeRole=a;try{localStorage.setItem("accountActiveRole",JSON.stringify(a))}catch(r){}}return}const e=["/account/wallet","/account/purchased","/account/purchased-detail","/account/orders","/account/funds-flow"],a=["/account/shops","/account/shop-new","/account/product-new","/account/products","/account/product-detail","/account/product-machine-add","/account/seller-orders","/account/receipt-record","/account/shop-config"],s=e.some(e=>0===t.indexOf(e)),i=a.some(e=>0===t.indexOf(e)),o=s?"buyer":i?"seller":this.activeRole;if(this.activeRole!==o){this.activeRole=o;try{localStorage.setItem("accountActiveRole",JSON.stringify(o))}catch(r){}}},isActiveLink(t){const e=this.$route&&this.$route.path||"";if(!t)return!1;if(0===e.indexOf("/account/order-detail")){const e=this.$route&&this.$route.query&&this.$route.query.from||"";let a=e;if(!a)try{a=sessionStorage.getItem("orderDetailFrom")||""}catch(i){a=""}return"buyer"===a&&"/account/orders"===t||"seller"===a&&"/account/seller-orders"===t}const a={"/account/seller-orders":["/account/seller-orders"],"/account/products":["/account/products","/account/product-detail"],"/account/purchased":["/account/purchased","/account/purchased-detail"]},s=a[t];return Array.isArray(s)?s.some(t=>0===e.indexOf(t)):0===e.indexOf(t)}},watch:{"$route.path":{immediate:!0,handler(){this.setActiveRoleByRoute()}}}}},1341:function(t,e){"use strict";e.Yp=e.XX=void 0;e.XX=function(){var t=this,e=t._self._c;return e("div",{staticClass:"account-products"},[e("div",{staticClass:"toolbar"},[t._m(0),e("div",{staticClass:"right-area"},[e("el-input",{staticClass:"mr-12",staticStyle:{width:"280px"},attrs:{placeholder:"输入币种或算法关键字后回车/搜索",size:"small",clearable:""},on:{clear:t.handleClear},nativeOn:{keyup:function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:t.handleSearch.apply(null,arguments)}},model:{value:t.searchKeyword,callback:function(e){t.searchKeyword=e},expression:"searchKeyword"}}),e("el-button",{attrs:{type:"primary",size:"small"},on:{click:t.handleSearch}},[t._v("搜索")]),e("el-button",{staticClass:"ml-8",attrs:{size:"small"},on:{click:t.handleReset}},[t._v("重置")])],1)]),e("el-table",{directives:[{name:"loading",rawName:"v-loading",value:t.loading,expression:"loading"}],staticStyle:{width:"100%"},attrs:{data:t.tableData,border:"",stripe:""}},[e("el-table-column",{attrs:{prop:"name",label:"名称","min-width":"100"}}),e("el-table-column",{attrs:{prop:"coin",label:"币种",width:"100"}}),e("el-table-column",{attrs:{prop:"priceRange",label:"价格范围",width:"150"}}),e("el-table-column",{attrs:{prop:"algorithm",label:"算法","min-width":"120"}}),e("el-table-column",{attrs:{prop:"type",label:"商品类型",width:"130"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("el-tag",{attrs:{type:1===a.row.type?"success":"warning"}},[t._v(" "+t._s(1===a.row.type?"算力套餐":"挖矿机器")+" ")])]}}])}),e("el-table-column",{attrs:{prop:"saleNumber",label:"已售数量","min-width":"60"}}),e("el-table-column",{attrs:{prop:"totalMachineNumber",label:"该商品总机器数量","min-width":"60"}}),e("el-table-column",{attrs:{prop:"state",label:"状态",width:"100"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("el-tag",{attrs:{type:1===a.row.state?"info":"success"}},[t._v(" "+t._s(1===a.row.state?"下架":"上架")+" ")])]}}])}),e("el-table-column",{attrs:{label:"操作",fixed:"right",width:"220"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("el-button",{attrs:{type:"text",size:"small"},on:{click:function(e){return t.handleView(a.row)}}},[t._v("详情")]),e("el-button",{attrs:{type:"text",size:"small"},on:{click:function(e){return t.handleEdit(a.row)}}},[t._v("修改")]),e("el-button",{staticStyle:{color:"#f56c6c"},attrs:{type:"text",size:"small"},on:{click:function(e){return t.handleDelete(a.row)}}},[t._v("删除")]),e("el-button",{attrs:{type:"text",size:"small"},on:{click:function(e){return t.handleAddMachine(a.row)}}},[t._v("添加出售机器")])]}}])})],1),e("div",{staticClass:"pagination"},[e("el-pagination",{attrs:{background:"",layout:"total, sizes, prev, pager, next, jumper",total:t.total,"current-page":t.pagination.pageNum,"page-sizes":[10,20,50,100],"page-size":t.pagination.pageSize},on:{"update:currentPage":function(e){return t.$set(t.pagination,"pageNum",e)},"update:current-page":function(e){return t.$set(t.pagination,"pageNum",e)},"update:pageSize":function(e){return t.$set(t.pagination,"pageSize",e)},"update:page-size":function(e){return t.$set(t.pagination,"pageSize",e)},"size-change":t.handleSizeChange,"current-change":t.handleCurrentChange}})],1),e("el-dialog",{attrs:{visible:t.editDialog.visible,"close-on-click-modal":!1,width:"620px",title:"编辑商品 - "+(t.editDialog.form&&t.editDialog.form.name?t.editDialog.form.name:"")},on:{"update:visible":function(e){return t.$set(t.editDialog,"visible",e)}},scopedSlots:t._u([{key:"footer",fn:function(){return[e("el-button",{on:{click:function(e){t.editDialog.visible=!1}}},[t._v("取消")]),e("el-button",{attrs:{type:"primary",loading:t.editDialog.saving},on:{click:t.handleSaveEdit}},[t._v("保存")])]},proxy:!0}])},[t.editDialog.form?e("el-form",{ref:"editForm",staticClass:"edit-form",attrs:{model:t.editDialog.form,"label-width":"100px"}},[e("el-form-item",{attrs:{label:"名称"}},[e("el-input",{attrs:{maxlength:"30","show-word-limit":""},model:{value:t.editDialog.form.name,callback:function(e){t.$set(t.editDialog.form,"name",e)},expression:"editDialog.form.name"}})],1),e("el-form-item",{staticClass:"align-like-input",attrs:{label:"状态"}},[e("el-radio-group",{model:{value:t.editDialog.form.state,callback:function(e){t.$set(t.editDialog.form,"state",e)},expression:"editDialog.form.state"}},[e("el-radio",{attrs:{label:0}},[t._v("上架")]),e("el-radio",{attrs:{label:1}},[t._v("下架")])],1)],1),e("el-form-item",{attrs:{label:"描述"}},[e("el-input",{attrs:{type:"textarea",rows:4,maxlength:"100","show-word-limit":""},model:{value:t.editDialog.form.description,callback:function(e){t.$set(t.editDialog.form,"description",e)},expression:"editDialog.form.description"}})],1)],1):t._e()],1)],1)},e.Yp=[function(){var t=this,e=t._self._c;return e("div",{staticClass:"left-area"},[e("h2",{staticClass:"page-title"},[t._v("商品列表")])])}]},1394:function(t,e,a){"use strict";a.r(e),a.d(e,{__esModule:function(){return i.B},default:function(){return l}});var s=a(8475),i=a(8284),o=i.A,r=a(845),n=(0,r.A)(o,s.XX,s.Yp,!1,null,"37492658",null),l=n.exports},1406:function(t,e,a){"use strict";var s=a(3999)["default"],i=s(a(5471)),o=s(a(9197)),r=s(a(9325)),n=s(a(5129)),l=s(a(1052));a(1475),a(6804);var c=a(465);console.log=()=>{},i.default.config.productionTip=!1,i.default.use(l.default),(0,c.initNoEmojiGuard)(),new i.default({router:r.default,store:n.default,render:t=>t(o.default)}).$mount("#app")},1507:function(t,e,a){"use strict";var s=a(3999)["default"];Object.defineProperty(e,"B",{value:!0}),e.A=void 0;a(7723);var i=a(5952),o=s(a(9146));e.A={mixins:[o.default],name:"ProductList",mounted(){},methods:{handleAddToCart(t){try{(0,i.addToCart)({id:t.id,title:t.title,price:t.price,image:t.image,quantity:1}),this.$message({message:"已添加到购物车",type:"success",showClose:!0})}catch(e){console.error("添加到购物车失败:",e),console.log("添加到购物车失败,请稍后重试")}}}}},1561:function(t,e,a){"use strict";Object.defineProperty(e,"B",{value:!0}),e.A=void 0,a(4114);var s=a(5705);e.A={data(){return{form:{name:"",description:"",image:""}}},mounted(){},methods:{hasEmoji(t){if(!t||"string"!==typeof t)return!1;const e=/[\u{1F300}-\u{1F6FF}\u{1F900}-\u{1F9FF}\u{1FA70}-\u{1FAFF}\u2600-\u27BF]/u;return e.test(t)},async fetchAddShop(){const t=await(0,s.getAddShop)(this.form);t&&200==t.code&&(this.$message({message:"店铺创建成功",type:"success",showClose:!0}),this.$router.push("/account/shops"))},handleDescriptionInput(t){t&&t.length>300&&(this.form.description=t.substring(0,300),this.$message({message:"店铺描述不能超过300个字符",type:"warning",showClose:!0}))},handleCreate(){const t=t=>"string"===typeof t&&t.length>0&&0===t.trim().length;if(this.form.name&&!t(this.form.name))if(this.hasEmoji(this.form.name))this.$message({message:"店铺名称不能包含表情符号",type:"warning",showClose:!0});else if(this.form.name&&this.form.name.length>30)this.$message({message:"店铺名称不能超过30个字符",type:"warning",showClose:!0});else if(t(this.form.description))this.$message({message:"店铺描述不能全是空格",type:"warning",showClose:!0});else{if(!(this.form.description&&this.form.description.length>300))return this.$route.query&&"1"===this.$route.query.hasShop?(this.$message({message:"每个用户仅允许一个店铺,无法新建",type:"warning",showClose:!0}),void this.$router.replace("/account/shops")):void(this.form.name?this.fetchAddShop(this.form):this.$message.error("店铺名称不能为空"));this.$message({message:"店铺描述不能超过300个字符",type:"warning",showClose:!0})}else this.$message({message:"店铺名称不能为空或全是空格",type:"warning",showClose:!0})}}}},1749:function(t,e,a){"use strict";a.r(e),a.d(e,{__esModule:function(){return i.B},default:function(){return l}});var s=a(5059),i=a(1561),o=i.A,r=a(845),n=(0,r.A)(o,s.XX,s.Yp,!1,null,"7f00bb86",null),l=n.exports},1867:function(t,e,a){"use strict";Object.defineProperty(e,"B",{value:!0}),e.A=void 0;var s=a(9662);e.A={name:"PurchasedDetail",data(){return{loading:!1,detail:{}}},created(){this.load()},methods:{async load(){const t=this.$route.params.id;if(t)try{this.loading=!0;const e=await(0,s.getOwnedById)({id:t});!e||0!==e.code&&200!==e.code||(this.detail=e.data)}catch(e){console.error("获取已购商品详情失败",e)}finally{this.loading=!1}else this.$message({message:"订单项ID缺失,请重新进入",type:"error",showClose:!0})},formatDateTime(t){if(!t)return"—";try{const e=String(t);return e.includes("T")?e.replace("T"," "):e}catch(e){return String(t)}}}}},1872:function(t,e){"use strict";Object.defineProperty(e,"B",{value:!0}),e.A=void 0;e.A={name:"Content"}},1910:function(t,e){"use strict";e.Yp=e.XX=void 0;e.XX=function(){var t=this,e=t._self._c;return e("div",{staticClass:"account-page"},[e("div",{staticClass:"account-layout"},[e("aside",{staticClass:"sidebar"},[e("nav",{staticClass:"side-nav"},[e("div",{directives:[{name:"show",rawName:"v-show",value:t.userEmail,expression:"userEmail"}],staticClass:"user-info-card",attrs:{role:"region","aria-label":"用户信息",tabindex:"0"}},[e("div",{staticClass:"user-meta"},[e("div",{staticClass:"user-email",attrs:{title:t.userEmail||"未登录"}},[t._v(t._s(t.userEmail||"未登录"))])])]),e("div",{staticClass:"user-role",attrs:{role:"group","aria-label":"导航分组切换"}},[e("button",{staticClass:"role-button",class:{active:"buyer"===t.activeRole},attrs:{"aria-pressed":"buyer"===t.activeRole,tabindex:"0"},on:{click:function(e){return t.handleClickRole("buyer")},keydown:[function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:(e.preventDefault(),t.handleClickRole("buyer"))},function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"space",32,e.key,[" ","Spacebar"])?null:(e.preventDefault(),t.handleClickRole("buyer"))}]}},[t._v("买家相关")]),e("button",{staticClass:"role-button",class:{active:"seller"===t.activeRole},attrs:{"aria-pressed":"seller"===t.activeRole,tabindex:"0"},on:{click:function(e){return t.handleClickRole("seller")},keydown:[function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:(e.preventDefault(),t.handleClickRole("seller"))},function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"space",32,e.key,[" ","Spacebar"])?null:(e.preventDefault(),t.handleClickRole("seller"))}]}},[t._v("卖家相关")])]),t._l(t.displayedLinks,function(a){return e("router-link",{key:a.to,class:["side-link",t.isActiveLink(a.to)?"active":""],attrs:{to:a.to}},[t._v(t._s(a.label))])})],2)]),e("section",{staticClass:"content"},[e("router-view")],1)])])},e.Yp=[]},1968:function(t,e){"use strict";e.Yp=e.XX=void 0;e.XX=function(){var t=this,e=t._self._c;return e("div",{attrs:{id:"app"}},[e("router-view")],1)},e.Yp=[]},1977:function(t,e,a){"use strict";var s=a(3999)["default"];Object.defineProperty(e,"B",{value:!0}),e.A=void 0;var i=a(4180),o=s(a(8213));e.A={name:"AccountSellerOrders",components:{OrderList:o.default},data(){return{active:"7",orders:{7:[],8:[]},loading:!1}},created(){const t=this.$route&&this.$route.query&&this.$route.query.status?String(this.$route.query.status):null,e=localStorage.getItem("sellerOrderListActiveTab"),a=t||e||"7";this.active=a,this.fetchOrders(a)},methods:{handleTabClick(t){const e=t&&t.name?String(t.name):this.active;try{localStorage.setItem("sellerOrderListActiveTab",e)}catch(a){}this.fetchOrders(e)},async fetchOrders(t){const e=String(t);try{this.loading=!0;const a=await(0,i.getOrdersByStatusForSeller)({status:Number(t)}),s=null!=(a&&a.data)?a.data:a,o=Array.isArray(s)?s:Array.isArray(s&&s.rows)?s.rows:[];this.$set(this.orders,e,o)}catch(a){console.error("获取卖家订单失败",a)}finally{this.loading=!1}}}}},2038:function(t,e){"use strict";e.Yp=e.XX=void 0;e.XX=function(){var t=this,e=t._self._c;return e("el-container",{staticClass:"containerApp",staticStyle:{width:"100vw",height:"100vh"}},[e("el-header",{staticClass:"el-header"},[e("comHeard")],1),e("el-main",{staticClass:"el-main"},[e("appMain")],1)],1)},e.Yp=[]},2150:function(t,e,a){"use strict";a.r(e),a.d(e,{__esModule:function(){return i.B},default:function(){return l}});var s=a(7441),i=a(4300),o=i.A,r=a(845),n=(0,r.A)(o,s.XX,s.Yp,!1,null,"cabadc3c",null),l=n.exports},2172:function(t,e){"use strict";e.Yp=e.XX=void 0;e.XX=function(){var t=this,e=t._self._c;return e("div",{staticClass:"wallet-container"},[e("div",{staticClass:"wallet-toolbar",attrs:{role:"region","aria-label":"钱包操作"}},[e("el-button",{staticClass:"create-wallet-btn",attrs:{type:"primary"},on:{click:t.openCreateWallet}},[e("i",{staticClass:"el-icon-plus",staticStyle:{"margin-right":"6px"}}),t._v("充值 ")])],1),e("section",{staticClass:"wallet-card-section"},t._l(t.walletList,function(a){return e("div",{key:a.id,staticClass:"wallet-card"},[e("div",{staticClass:"wallet-header"},[e("h2",{staticClass:"wallet-title"},[e("i",{staticClass:"el-icon-wallet"}),t._v(" 我的钱包 "),e("el-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"mini",effect:"dark"}},[t._v(" "+t._s((a.fromChain||a.chain||"").toUpperCase())+" "+t._s((a.fromSymbol||a.coin||"").toUpperCase())+" ")])],1),e("div",{staticClass:"wallet-balance"},[e("div",{staticClass:"balance-item"},[e("span",{staticClass:"balance-label"},[t._v("可用余额")]),e("span",{staticClass:"balance-amount"},[t._v(t._s(a.walletBalance||a.balance||0)+" "+t._s(t.displaySymbol(a)))])]),e("div",{staticClass:"balance-item"},[e("el-tooltip",{attrs:{placement:"top",effect:"dark"}},[e("div",{attrs:{slot:"content"},slot:"content"},[t._v(" 冻结金额不能使用或提现,以下情况会冻结钱包余额:"),e("br"),t._v(" 1. 下单机器后会冻结订单对应金额"),e("br"),t._v(" 2. 提交提现后,金额正在提现中 ")]),e("i",{staticClass:"el-icon-question balance-tip-icon"})]),e("span",{staticClass:"balance-label"},[t._v("冻结余额")]),e("span",{staticClass:"balance-amount frozen"},[t._v(t._s(a.blockedBalance||0)+" "+t._s(t.displaySymbol(a)))])],1),e("el-button",{staticClass:"withdraw-inline-btn",attrs:{type:"success",size:"mini"},on:{click:function(e){return t.handleWithdraw(a)}}},[t._v(" 提现 ")])],1)])])}),0),e("div",{staticClass:"transaction-section"},[e("h3",{staticClass:"section-title"},[t._v("最近交易")]),e("div",{staticClass:"transaction-list"},[t._l(t.recentTransactions,function(a){return e("div",{key:a.id,staticClass:"transaction-item"},[e("div",{staticClass:"transaction-info"},[e("span",{staticClass:"transaction-type"},[t._v(t._s(a.type))]),e("span",{staticClass:"transaction-time"},[t._v(t._s(a.time))]),e("el-tag",{staticClass:"transaction-status",attrs:{size:"mini",type:a.statusTagType||"info"}},[t._v(" "+t._s(a.statusText||"-")+" ")])],1),e("div",{staticClass:"transaction-amount",class:a.amount>0?"positive":"negative"},[t._v(" "+t._s(a.amount>0?"+":"")+t._s(a.amountText)+" USDT ")])])}),0===t.recentTransactions.length?e("div",{staticClass:"empty-state"},[t._v(" 暂无交易记录 ")]):t._e()],2)]),e("el-dialog",{attrs:{title:"钱包余额充值",visible:t.rechargeDialogVisible,width:"660px"},on:{"update:visible":function(e){t.rechargeDialogVisible=e},close:t.resetRechargeForm}},[e("div",{staticClass:"recharge-content"},[e("div",{staticClass:"wallet-address-section"},[e("h4",{staticClass:"section-title"},[t._v("钱包地址")]),e("div",{staticClass:"charge-meta"},[e("el-tag",{staticClass:"meta-tag",attrs:{size:"small",effect:"dark",type:"warning"}},[e("i",{staticClass:"el-icon-link"}),e("span",{staticClass:"meta-title"},[t._v("充值链:")]),e("span",{staticClass:"meta-val"},[t._v(t._s((t.WalletData.fromChain||t.WalletData.chain||"").toString().toUpperCase()))])]),e("el-tag",{staticClass:"meta-tag",attrs:{size:"small",effect:"dark",type:"warning"}},[e("i",{staticClass:"el-icon-coin"}),e("span",{staticClass:"meta-title"},[t._v("充值币种:")]),e("span",{staticClass:"meta-val"},[t._v(t._s((t.WalletData.fromSymbol||t.WalletData.coin||"").toString().toUpperCase()))])])],1),e("div",{staticClass:"address-container"},[e("el-input",{staticClass:"address-input",attrs:{readonly:"",disabled:!0},model:{value:t.WalletData.fromAddress,callback:function(e){t.$set(t.WalletData,"fromAddress",e)},expression:"WalletData.fromAddress"}}),e("el-button",{staticClass:"copy-btn",attrs:{type:"primary",size:"small"},on:{click:function(e){return t.copyAddress(t.WalletData.fromAddress)}}},[t._v(" 复制 ")])],1),e("p",{staticClass:"address-tip"},[t._v("请向此地址转账非"+t._s(t.displaySymbol(t.WalletData))+"资产,否则资产将无法找回.")])]),e("div",{staticClass:"qr-code-section"},[e("h4",{staticClass:"section-title"},[t._v("扫码充值")]),e("div",{staticClass:"qr-code-container"},[e("div",{ref:"qrCodeRef",staticClass:"qr-code"}),e("p",{staticClass:"qr-tip"},[t._v("使用支持"+t._s(t.displaySymbol(t.WalletData))+"的钱包扫描二维码")])])]),e("div",{staticClass:"recharge-notice"},[e("h4",{staticClass:"section-title"},[t._v("充值说明")]),e("ul",{staticClass:"notice-list"},[e("li",[t._v("充值后请耐心等待余额更新或在资金流水页面查看最新充值记录")]),e("li",[t._v("最小充值金额:10 "+t._s(t.displaySymbol(t.WalletData)))])])])]),e("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[e("el-button",{on:{click:function(e){t.rechargeDialogVisible=!1}}},[t._v("关闭")])],1)]),e("el-dialog",{attrs:{title:"USDT提现",visible:t.withdrawDialogVisible,width:"720px","close-on-click-modal":!1,"close-on-press-escape":!1},on:{"update:visible":function(e){t.withdrawDialogVisible=e},close:t.resetWithdrawForm}},[e("el-form",{ref:"withdrawForm",attrs:{model:t.withdrawForm,rules:t.withdrawRules,"label-width":"120px"}},[e("el-form-item",{attrs:{label:"提现链"}},[e("el-input",{staticStyle:{width:"100%"},attrs:{value:(t.WalletData.fromChain||t.WalletData.chain||t.withdrawForm.toChain||"").toString().toUpperCase(),disabled:!0}})],1),e("el-form-item",{attrs:{label:"提现币种"}},[e("el-input",{staticStyle:{width:"100%"},attrs:{value:t.displayWithdrawSymbol,disabled:!0}})],1),e("el-form-item",{attrs:{label:"提现金额",prop:"amount"}},[e("el-input",{staticStyle:{width:"100%"},attrs:{placeholder:"请输入提现金额",inputmode:"decimal"},on:{input:t.handleAmountInput},model:{value:t.withdrawForm.amount,callback:function(e){t.$set(t.withdrawForm,"amount",e)},expression:"withdrawForm.amount"}},[e("template",{slot:"append"},[t._v(t._s(t.displayWithdrawSymbol))])],2),e("div",{staticClass:"balance-info"},[e("div",{staticClass:"balance-total"},[t._v("钱包总余额:"+t._s(t.totalBalance)+" "+t._s(t.displayWithdrawSymbol))]),e("div",{staticClass:"balance-row"},[e("span",[t._v("可用余额:"+t._s(t.availableWithdrawBalance)+" "+t._s(t.displayWithdrawSymbol))]),e("span",{staticClass:"divider"},[t._v("|")]),e("span",{staticClass:"frozen-info"},[e("el-tooltip",{attrs:{placement:"top",effect:"dark"}},[e("div",{attrs:{slot:"content"},slot:"content"},[t._v(" 冻结金额不能使用或提现,以下情况会冻结钱包余额:"),e("br"),t._v(" 1. 下单机器后会冻结订单对应金额"),e("br"),t._v(" 2. 提交提现后,金额正在提现中 ")]),e("i",{staticClass:"el-icon-question frozen-tip-icon"})]),t._v(" 冻结余额:"+t._s(t.WalletData.blockedBalance||0)+" "+t._s(t.displayWithdrawSymbol)+" "),e("span",{staticClass:"frozen-tip"},[t._v("(购买机器下单后冻结,不可提现)")])],1)])])],1),e("el-form-item",{attrs:{label:"手续费"}},[e("el-input",{staticStyle:{width:"100%"},attrs:{placeholder:"手续费",disabled:!0},model:{value:t.withdrawForm.fee,callback:function(e){t.$set(t.withdrawForm,"fee",e)},expression:"withdrawForm.fee"}},[e("template",{slot:"append"},[t._v(t._s(t.displayWithdrawSymbol))])],2),e("div",{staticClass:"fee-info"},[t._v(" 网络手续费:"+t._s(t.withdrawForm.fee||"0.00")+" "+t._s(t.displayWithdrawSymbol)+" ")])],1),e("el-form-item",{attrs:{label:"实际到账"}},[e("el-input",{staticStyle:{width:"100%"},attrs:{placeholder:"实际到账金额",disabled:!0},model:{value:t.actualAmount,callback:function(e){t.actualAmount=e},expression:"actualAmount"}},[e("template",{slot:"append"},[t._v(t._s(t.displayWithdrawSymbol))])],2),e("div",{staticClass:"actual-amount-info"},[t._v(" 实际到账:"+t._s(t.actualAmount)+" "+t._s(t.displayWithdrawSymbol)+" ")])],1),e("el-form-item",{attrs:{label:"收款地址",prop:"toAddress"}},[e("el-input",{staticStyle:{width:"100%"},attrs:{type:"textarea",rows:3,placeholder:"请输入收款钱包地址"},model:{value:t.withdrawForm.toAddress,callback:function(e){t.$set(t.withdrawForm,"toAddress",e)},expression:"withdrawForm.toAddress"}}),e("div",{staticClass:"address-tip"},[t._v(" 请确保地址正确,错误地址将导致资产丢失 ")])],1),e("el-form-item",{attrs:{label:"谷歌验证码",prop:"googleCode"}},[e("el-input",{ref:"googleCodeInput",staticStyle:{width:"100%"},attrs:{placeholder:"请输入6位谷歌验证码",maxlength:"6"},on:{input:t.handleGoogleCodeInput},model:{value:t.withdrawForm.googleCode,callback:function(e){t.$set(t.withdrawForm,"googleCode",e)},expression:"withdrawForm.googleCode"}},[e("template",{slot:"prepend"},[e("i",{staticClass:"el-icon-key"})])],2),e("div",{staticClass:"google-code-tip"},[t._v(" 为了保障您的账户安全,请输入您的谷歌验证器中的6位验证码 ")])],1)],1),e("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[e("el-button",{on:{click:function(e){t.withdrawDialogVisible=!1}}},[t._v("取消")]),e("el-button",{attrs:{type:"primary",loading:t.withdrawLoading},on:{click:t.confirmWithdraw}},[t._v("确认提现")])],1)],1),e("el-dialog",{attrs:{title:"链上充值",visible:t.createDialogVisible,"close-on-click-modal":!1,"close-on-press-escape":!1,width:"520px"},on:{"update:visible":function(e){t.createDialogVisible=e}}},[e("el-form",{attrs:{"label-width":"120px"}},[e("el-form-item",{attrs:{label:"选择充值链/币种"}},[e("el-cascader",{staticStyle:{width:"100%"},attrs:{options:t.options},model:{value:t.createValue,callback:function(e){t.createValue=e},expression:"createValue"}})],1)],1),e("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[e("el-button",{on:{click:function(e){t.createDialogVisible=!1}}},[t._v("取消")]),e("el-button",{attrs:{type:"primary",loading:t.createLoading},on:{click:t.confirmCreateWallet}},[t._v("确定")])],1)],1)],1)},e.Yp=[]},2389:function(t,e){"use strict";e.Yp=e.XX=void 0;e.XX=function(){var t=this,e=t._self._c;return e("div",{staticClass:"order-detail-page"},[e("h2",{staticClass:"title"},[t._v("订单详情")]),t.loading?e("div",{staticClass:"loading"},[t._v("加载中...")]):e("div",[e("el-card",{staticClass:"section"},[e("div",{staticClass:"row"},[e("span",{staticClass:"label"},[t._v("订单ID:")]),e("span",{staticClass:"value mono"},[t._v(t._s(t.order.id||"—"))])]),e("div",{staticClass:"row"},[e("span",{staticClass:"label"},[t._v("订单号:")]),e("span",{staticClass:"value mono"},[t._v(t._s(t.order.orderNumber||"—"))])]),e("div",{staticClass:"row"},[e("span",{staticClass:"label"},[t._v("状态:")]),e("span",{staticClass:"value"},[t._v(t._s(t.getOrderStatusText(t.order.status)))])]),e("div",{staticClass:"row"},[e("span",{staticClass:"label"},[t._v("金额(USDT):")]),e("span",{staticClass:"value strong"},[t._v(t._s(t.order.totalPrice))])]),e("div",{staticClass:"row"},[e("span",{staticClass:"label"},[t._v("创建时间:")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatDateTime(t.order.createTime)))])])]),e("el-card",{staticClass:"section",staticStyle:{"margin-top":"12px"}},[e("div",{staticClass:"sub-title"},[t._v("机器列表")]),e("el-table",{staticStyle:{width:"100%"},attrs:{data:t.items,border:"",size:"small","header-cell-style":{textAlign:"left"},"cell-style":{textAlign:"left"}}},[e("el-table-column",{attrs:{prop:"productMachineId",label:"机器ID","min-width":"120"}}),e("el-table-column",{attrs:{prop:"name",label:"名称","min-width":"160"}}),e("el-table-column",{attrs:{prop:"payCoin",label:"币种","min-width":"100"}}),e("el-table-column",{attrs:{prop:"leaseTime",label:"租赁天数","min-width":"100"}}),e("el-table-column",{attrs:{prop:"price",label:"单价(USDT)","min-width":"120"}}),e("el-table-column",{attrs:{prop:"address",label:"收款地址","min-width":"240"}})],1)],1),e("div",{staticClass:"actions"},[e("el-button",{on:{click:function(e){return t.$router.back()}}},[t._v("返回")])],1)],1)])},e.Yp=[]},2515:function(t,e,a){"use strict";Object.defineProperty(e,"B",{value:!0}),e.A=void 0,a(8111),a(1701),a(7642),a(8004),a(3853),a(5876),a(2475),a(5024),a(1698);var s=a(6299);e.A={name:"AccountFundsFlow",data(){return{active:"recharge",loading:{recharge:!1,withdraw:!1,consume:!1},rechargeRows:[],withdrawRows:[],consumeRows:[],expandedKeys:new Set,total:0,pageSizes:[10,20,50],currentPage:1,pagination:{pageNum:1,pageSize:10,status:2}}},mounted(){const t=this.$route&&this.$route.query&&this.$route.query.tab||"recharge";["recharge","withdraw","consume"].includes(t)&&(this.active=t),this.pagination.status=this.getStatusByTab(this.active),this.loadList()},methods:{handleTab(t,e){this.expandedKeys.clear(),this.expandedKeys=new Set(this.expandedKeys);const a=t&&t.name||this.active;this.pagination.status=this.getStatusByTab(a),this.pagination.pageNum=1,this.currentPage=1,this.loadList()},getRowKey(t,e){const a=null!=e?`#${e}`:"";if(!t)return String(null!=e?e:"");const s=t.__key||t.id||t.txHash||t.orderId||`${t.createTime||""}-${t.updateTime||""}`;return null==s||""===s?String(null!=e?e:""):`${String(s)}${a}`},isExpanded(t,e,a){const s=`${t}-${this.getRowKey(e,a)}`;return this.expandedKeys.has(s)},toggleExpand(t,e,a){const s=`${t}-${this.getRowKey(e,a)}`;this.expandedKeys.has(s)?this.expandedKeys.clear():(this.expandedKeys.clear(),this.expandedKeys.add(s)),this.expandedKeys=new Set(this.expandedKeys)},async loadList(){const t=Number(this.pagination.status),e=this.getTypeKeyByStatus(t);if(e){this.loading[e]=!0;try{const e=await(0,s.transactionRecord)({pageNum:this.pagination.pageNum,pageSize:this.pagination.pageSize,status:t}),a=e?.rows||e?.data?.rows||[];this.total=e?.total||e?.data?.total||(Array.isArray(a)?a.length:0);const i=(Array.isArray(a)?a:[]).map((t,e)=>({...t,__key:t.id||t.txHash||t.orderId||`${e}`}));2===t?this.rechargeRows=i:1===t?this.withdrawRows=i:this.consumeRows=i,this.expandedKeys.clear(),this.expandedKeys=new Set(this.expandedKeys)}finally{this.loading[e]=!1}}},loadByStatus(t){return this.pagination.status=t,this.active=this.getTabByStatus(t),this.pagination.pageNum=1,this.currentPage=1,this.loadList()},loadRecharge(){return this.loadByStatus(2)},loadWithdraw(){return this.loadByStatus(1)},loadConsume(){return this.loadByStatus(0)},statusClass(t){return{0:"failed",1:"success",2:"pending"}[t]||"neutral"},getRechargeStatusType(t){return{0:"danger",1:"success",2:"warning"}[t]||"info"},getRechargeStatusText(t){return{0:"充值失败",1:"充值成功",2:"充值中",3:"证书校验失败"}[t]||"未知"},getWithdrawStatusType(t){return{0:"danger",1:"success",2:"warning"}[t]||"info"},getWithdrawStatusText(t){return{0:"提现失败",1:"提现成功",2:"提现中",3:"证书校验失败"}[t]||"未知"},getPayStatusType(t){return{0:"danger",1:"success",2:"warning",3:"danger"}[t]||"info"},getPayStatusText(t){return{0:"支付失败",1:"支付成功",2:"待校验",3:"证书校验失败"}[t]||"未知"},formatChain(t){if(!t)return"";const e=String(t).toLowerCase(),a={tron:"TRON",trx:"TRON",eth:"ETH",ethereum:"ETH",bsc:"BSC",polygon:"POLYGON",matic:"POLYGON"};return(a[e]||String(t)).toUpperCase()},formatFullTime(t){if(!t)return"";try{return new Date(t).toLocaleString("zh-CN")}catch(e){return String(t)}},formatTime(t){return this.formatFullTime(t)},formatTrunc(t,e=2){const a=Number(t);if(!Number.isFinite(a))return"0";const s=Math.max(0,Number(e)||0),i=Math.pow(10,s),o=Math.trunc(a*i)/i,r=String(o);if(0===s)return r;const[n,l=""]=r.split("."),c=l.padEnd(s,"0");return`${n}.${c}`},formatDec6(t){if(null===t||void 0===t||""===t)return"0";let e=String(t);if(/e/i.test(e)){const a=Number(t);if(!Number.isFinite(a))return"0";e=a.toFixed(20).replace(/\.0+$/,"").replace(/(\.\d*?)0+$/,"$1")}const a=e.match(/^(-?)(\d+)(?:\.(\d+))?$/);if(!a)return e;let s=a[2],i=a[3]||"";return i.length>6&&(i=i.slice(0,6)),i?`${s}.${i}`:s},handleSizeChange(t){console.log(`每页 ${t} 条`),this.pagination.pageSize=t,this.pagination.pageNum=1,this.currentPage=1,this.loadList()},handleCurrentChange(t){console.log(`当前页: ${t}`),this.pagination.pageNum=t,this.loadList()},async handleCopy(t,e="内容"){try{const a=String(t||"");if(navigator&&navigator.clipboard&&navigator.clipboard.writeText)await navigator.clipboard.writeText(a);else{const t=document.createElement("textarea");t.value=a,t.style.position="fixed",t.style.left="-9999px",document.body.appendChild(t),t.focus(),t.select(),document.execCommand("copy"),document.body.removeChild(t)}this.$message.success(`${e}已复制`)}catch(a){this.$message.error("复制失败,请手动选择复制")}},getStatusByTab(t){return"recharge"===t?2:"withdraw"===t?1:0},getTabByStatus(t){return 2===Number(t)?"recharge":1===Number(t)?"withdraw":"consume"},getTypeKeyByStatus(t){return 2===Number(t)?"recharge":1===Number(t)?"withdraw":0===Number(t)?"consume":""}}}},2553:function(t,e){"use strict";e.Yp=e.XX=void 0;e.XX=function(){var t=this,e=t._self._c;return e("div",{staticClass:"recharge-record-container"},[t._m(0),e("div",{staticClass:"tab-container"},[e("el-tabs",{on:{"tab-click":t.handleTabClick},model:{value:t.activeTab,callback:function(e){t.activeTab=e},expression:"activeTab"}},[e("el-tab-pane",{attrs:{label:"充值中",name:"pending"}},[e("div",{staticClass:"tab-content"},[e("div",{staticClass:"list-header"},[e("span",{staticClass:"list-title"},[t._v("充值中 ("+t._s(t.pendingRecharges.length)+")")]),e("el-button",{attrs:{type:"primary",size:"small"},on:{click:t.refreshData}},[e("i",{staticClass:"el-icon-refresh"}),t._v(" 刷新 ")])],1),e("div",{directives:[{name:"loading",rawName:"v-loading",value:t.loading,expression:"loading"}],staticClass:"recharge-list"},[t._l(t.pendingRecharges,function(a){return e("div",{key:a.id,staticClass:"recharge-item pending",on:{click:function(e){return t.showDetail(a)}}},[e("div",{staticClass:"item-main"},[e("div",{staticClass:"item-left"},[e("div",{staticClass:"amount"},[t._v(" "+t._s(a.amount)+" "+t._s(a.fromSymbol||"USDT")+" ")]),e("div",{staticClass:"chain"},[t._v(t._s(t.getChainName(a.fromChain)))])]),e("div",{staticClass:"item-right"},[e("div",{staticClass:"status pending-status"},[e("i",{staticClass:"el-icon-loading"}),t._v(" "+t._s(t.getStatusText(a.status))+" ")]),e("div",{staticClass:"time"},[t._v(t._s(t.formatTime(a.createTime)))])])]),e("div",{staticClass:"item-footer"},[e("div",{staticClass:"footer-left"},[e("span",{staticClass:"address"},[t._v(t._s(t.formatAddress(a.address)))]),a.txHash?e("span",{staticClass:"tx-hash"},[e("i",{staticClass:"el-icon-link"}),t._v(" "+t._s(t.formatAddress(a.txHash))+" ")]):t._e()]),e("i",{staticClass:"el-icon-arrow-right"})])])}),0===t.pendingRecharges.length?e("div",{staticClass:"empty-state"},[e("i",{staticClass:"el-icon-document"}),e("p",[t._v("暂无充值中的记录")])]):t._e()],2)])]),e("el-tab-pane",{attrs:{label:"充值成功",name:"success"}},[e("div",{staticClass:"tab-content"},[e("div",{staticClass:"list-header"},[e("span",{staticClass:"list-title"},[t._v("充值成功 ("+t._s(t.successRecharges.length)+")")]),e("el-button",{attrs:{type:"primary",size:"small"},on:{click:t.refreshData}},[e("i",{staticClass:"el-icon-refresh"}),t._v(" 刷新 ")])],1),e("div",{directives:[{name:"loading",rawName:"v-loading",value:t.loading,expression:"loading"}],staticClass:"recharge-list"},[t._l(t.successRecharges,function(a){return e("div",{key:a.id,staticClass:"recharge-item success",on:{click:function(e){return t.showDetail(a)}}},[e("div",{staticClass:"item-main"},[e("div",{staticClass:"item-left"},[e("div",{staticClass:"amount"},[t._v(" "+t._s(a.amount)+" "+t._s(a.fromSymbol||"USDT")+" ")]),e("div",{staticClass:"chain"},[t._v(t._s(t.getChainName(a.fromChain)))])]),e("div",{staticClass:"item-right"},[e("div",{staticClass:"status success-status"},[e("i",{staticClass:"el-icon-check"}),t._v(" "+t._s(t.getStatusText(a.status))+" ")]),e("div",{staticClass:"time"},[t._v(t._s(t.formatTime(a.createTime)))])])]),e("div",{staticClass:"item-footer"},[e("div",{staticClass:"footer-left"},[e("span",{staticClass:"address"},[t._v(t._s(t.formatAddress(a.address)))]),a.txHash?e("span",{staticClass:"tx-hash"},[e("i",{staticClass:"el-icon-link"}),t._v(" "+t._s(t.formatAddress(a.txHash))+" ")]):t._e()]),e("i",{staticClass:"el-icon-arrow-right"})])])}),0===t.successRecharges.length?e("div",{staticClass:"empty-state"},[e("i",{staticClass:"el-icon-document"}),e("p",[t._v("暂无充值成功的记录")])]):t._e()],2)])]),e("el-tab-pane",{attrs:{label:"充值失败",name:"failed"}},[e("div",{staticClass:"tab-content"},[e("div",{staticClass:"list-header"},[e("span",{staticClass:"list-title"},[t._v("充值失败 ("+t._s(t.failedRecharges.length)+")")]),e("el-button",{attrs:{type:"primary",size:"small"},on:{click:t.refreshData}},[e("i",{staticClass:"el-icon-refresh"}),t._v(" 刷新 ")])],1),e("div",{directives:[{name:"loading",rawName:"v-loading",value:t.loading,expression:"loading"}],staticClass:"recharge-list"},[t._l(t.failedRecharges,function(a){return e("div",{key:a.id,staticClass:"recharge-item failed",on:{click:function(e){return t.showDetail(a)}}},[e("div",{staticClass:"item-main"},[e("div",{staticClass:"item-left"},[e("div",{staticClass:"amount"},[t._v(" "+t._s(a.amount)+" "+t._s(a.fromSymbol||"USDT")+" ")]),e("div",{staticClass:"chain"},[t._v(t._s(t.getChainName(a.fromChain)))])]),e("div",{staticClass:"item-right"},[e("div",{staticClass:"status failed-status"},[e("i",{staticClass:"el-icon-close"}),t._v(" "+t._s(t.getStatusText(a.status))+" ")]),e("div",{staticClass:"time"},[t._v(t._s(t.formatTime(a.createTime)))])])]),e("div",{staticClass:"item-footer"},[e("div",{staticClass:"footer-left"},[e("span",{staticClass:"address"},[t._v(t._s(t.formatAddress(a.address)))]),a.txHash?e("span",{staticClass:"tx-hash"},[e("i",{staticClass:"el-icon-link"}),t._v(" "+t._s(t.formatAddress(a.txHash))+" ")]):t._e()]),e("i",{staticClass:"el-icon-arrow-right"})])])}),0===t.failedRecharges.length?e("div",{staticClass:"empty-state"},[e("i",{staticClass:"el-icon-document"}),e("p",[t._v("暂无充值失败的记录")])]):t._e()],2)])])],1),e("el-row",[e("el-col",{staticStyle:{display:"flex","justify-content":"center"},attrs:{span:24}},[e("el-pagination",{staticStyle:{margin:"0 auto","margin-top":"10px"},attrs:{"current-page":t.currentPage,"page-sizes":t.pageSizes,"page-size":t.pagination.pageSize,layout:"total, sizes, prev, pager, next, jumper",total:t.total},on:{"size-change":t.handleSizeChange,"current-change":t.handleCurrentChange,"update:currentPage":function(e){t.currentPage=e},"update:current-page":function(e){t.currentPage=e}}})],1)],1)],1),e("el-dialog",{attrs:{title:"充值详情",visible:t.detailDialogVisible,width:"600px"},on:{"update:visible":function(e){t.detailDialogVisible=e},close:t.closeDetail}},[t.selectedItem?e("div",{staticClass:"detail-content"},[e("div",{staticClass:"detail-section"},[e("h3",{staticClass:"section-title"},[t._v("基本信息")]),e("div",{staticClass:"detail-list"},[e("div",{staticClass:"detail-row"},[e("span",{staticClass:"detail-label"},[t._v("充值ID")]),e("span",{staticClass:"detail-value"},[t._v(t._s(t.selectedItem.id))])]),e("div",{staticClass:"detail-row"},[e("span",{staticClass:"detail-label"},[t._v("充值金额")]),e("span",{staticClass:"detail-value amount"},[t._v(t._s(t.selectedItem.amount)+" "+t._s(t.selectedItem.fromSymbol||"USDT"))])]),e("div",{staticClass:"detail-row"},[e("span",{staticClass:"detail-label"},[t._v("区块链网络")]),e("span",{staticClass:"detail-value"},[t._v(t._s(t.getChainName(t.selectedItem.fromChain)))])]),e("div",{staticClass:"detail-row"},[e("span",{staticClass:"detail-label"},[t._v("充值状态")]),e("span",{staticClass:"detail-value"},[e("el-tag",{attrs:{type:t.getStatusType(t.selectedItem.status)}},[t._v(" "+t._s(t.getStatusText(t.selectedItem.status))+" ")])],1)])])]),e("div",{staticClass:"detail-section"},[e("h3",{staticClass:"section-title"},[t._v("地址信息")]),e("div",{staticClass:"detail-list"},[e("div",{staticClass:"detail-row"},[e("span",{staticClass:"detail-label"},[t._v("充值地址")]),e("div",{staticClass:"address-container"},[e("span",{staticClass:"detail-value address"},[t._v(t._s(t.selectedItem.address))]),e("el-button",{attrs:{type:"text",size:"small"},on:{click:function(e){return t.copyAddress(t.selectedItem.address)}}},[t._v(" 复制 ")])],1)]),t.selectedItem.txHash?e("div",{staticClass:"detail-row"},[e("span",{staticClass:"detail-label"},[t._v("交易哈希")]),e("div",{staticClass:"address-container"},[e("span",{staticClass:"detail-value address"},[t._v(t._s(t.selectedItem.txHash))]),e("el-button",{attrs:{type:"text",size:"small"},on:{click:function(e){return t.copyAddress(t.selectedItem.txHash)}}},[t._v(" 复制 ")])],1)]):t._e()])]),e("div",{staticClass:"detail-section"},[e("h3",{staticClass:"section-title"},[t._v("时间信息")]),e("div",{staticClass:"detail-list"},[e("div",{staticClass:"detail-row"},[e("span",{staticClass:"detail-label"},[t._v("充值时间")]),e("span",{staticClass:"detail-value"},[t._v(t._s(t.formatFullTime(t.selectedItem.createTime)))])])])])]):t._e(),e("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[e("el-button",{on:{click:t.closeDetail}},[t._v("关闭")])],1)])],1)},e.Yp=[function(){var t=this,e=t._self._c;return e("div",{staticClass:"page-header"},[e("h1",{staticClass:"page-title"},[t._v("充值记录")]),e("p",{staticClass:"page-subtitle"},[t._v("查看您的充值申请和到账状态")])])}]},2570:function(t,e,a){"use strict";Object.defineProperty(e,"B",{value:!0}),e.A=void 0,a(4114),a(8111),a(2489),a(1701);var s=a(5705),i=a(9252),o=a(6299);e.A={name:"AccountMyShops",data(){return{loaded:!1,defaultCover:"https://dummyimage.com/120x120/eee/999.png&text=Shop",shop:{id:0,name:"",image:"",description:"",del:!0,state:0},visibleEdit:!1,editForm:{id:"",name:"",image:"",description:""},shopConfigs:[],visibleConfigEdit:!1,configForm:{id:"",chainLabel:"",chainValue:"",payAddress:"",payCoins:[],payCoin:""},productOptions:[],coinOptions:i.coinList||[],editCoinOptionsApi:[],chainOptions:[{label:"Tron (TRC20)",value:"tron"},{label:"Ethereum (ERC20)",value:"ethereum"},{label:"BSC (BEP20)",value:"bsc"},{label:"Nexa",value:"nexa"}],shopLoading:!1}},computed:{shopStateText(){return 0===this.shop.state?"待审核":1===this.shop.state?"店铺开启":2===this.shop.state?"店铺关闭":"未知状态"},shopStateTagType(){return 0===this.shop.state?"warning":1===this.shop.state?"success":(this.shop.state,"info")},hasShop(){return!!(this.shop&&Number(this.shop.id)>0)},canCreateShop(){return!this.hasShop},editCoinOptions(){return Array.isArray(this.editCoinOptionsApi)&&this.editCoinOptionsApi.length?this.editCoinOptionsApi:this.coinOptions},selectedCoinLabels(){const t=new Map((this.editCoinOptions||[]).map(t=>[String(t.value),String(t.label).toUpperCase()]));return(this.configForm.payCoins||[]).map(e=>t.get(String(e))||String(e).toUpperCase())}},created(){this.fetchMyShop()},methods:{hasEmoji(t){if(!t||"string"!==typeof t)return!1;const e=/[\u{1F300}-\u{1F6FF}\u{1F900}-\u{1F9FF}\u{1FA70}-\u{1FAFF}\u2600-\u27BF]/u;return e.test(t)},resetShopState(){this.shop={id:0,name:"",image:"",description:"",del:!0,state:0},this.shopConfigs=[]},async fetchMyShop(){try{const t=await(0,s.getMyShop)();t&&(0===t.code||200===t.code)&&t.data?(this.shop={id:t.data.id,name:t.data.name,image:t.data.image,description:t.data.description,del:!!t.data.del,state:Number(t.data.state||0)},this.fetchShopConfigs(t.data.id)):(this.resetShopState(),t&&t.msg&&console.warn("获取店铺数据失败:",t.msg))}catch(t){console.error("获取店铺信息失败:",t),this.resetShopState()}finally{this.loaded=!0}},async fetchShopConfigs(t){if(!t||t<=0)this.shopConfigs=[];else try{const e=await(0,o.getShopConfig)({id:t});e&&(0===e.code||200===e.code)&&Array.isArray(e.data)?this.shopConfigs=e.data:this.shopConfigs=[]}catch(e){console.warn("获取店铺配置失败:",e),this.shopConfigs=[]}},async updateShopConfig(t){const e=await(0,s.updateShopConfig)(t);!e||0!==e.code&&200!==e.code||(this.$message.success("保存成功"),this.visibleConfigEdit=!1,this.fetchShopConfigs(this.shop.id))},async deleteShopConfig(t){const e=await(0,s.deleteShopConfig)(t);!e||0!==e.code&&200!==e.code||(this.$message.success("删除成功"),this.fetchShopConfigs(this.shop.id))},async handleEditConfig(t){try{const e=await(0,s.getChainAndCoin)({id:t.id});if(e&&(0===e.code||200===e.code)&&e.data){const a=e.data||{},s=Array.isArray(a.children)?a.children:[];this.editCoinOptionsApi=s.map(t=>({label:t.label,value:t.value}));const i=s.filter(t=>1===Number(t.hasBind)).map(t=>t.value);this.configForm={id:t.id,chainLabel:a.label||"",chainValue:a.value||"",payAddress:a.address||"",payCoins:i,payCoin:i.join(",")}}else{this.editCoinOptionsApi=[];const e=t.chain||"",a=String(t.payCoin||""),s=a?a.split(","):[];this.configForm={id:t.id,chainLabel:e,chainValue:t.chain||"",payAddress:t.payAddress||"",payCoins:s,payCoin:s.join(",")}}this.visibleConfigEdit=!0}catch(e){this.visibleConfigEdit=!0}},async handleDeleteConfig(t){this.deleteShopConfig({id:t.id})},submitConfigEdit(){if(!this.configForm.chainLabel&&!this.configForm.chainValue)return void this.$message.warning("请选择支付链");if(!this.configForm.payCoins||0===this.configForm.payCoins.length)return void this.$message.warning("请选择支付币种");const t=(this.configForm.payAddress||"").trim();if(!t)return void this.$message.warning("请输入钱包地址");const e={id:this.configForm.id,chain:this.configForm.chainValue||this.configForm.chainLabel,payCoin:(this.configForm.payCoins||[]).join(","),payAddress:this.configForm.payAddress};this.updateShopConfig(e)},removeSelectedCoin(t){const e=String(t||"").toLowerCase(),a=new Map((this.editCoinOptions||[]).map(t=>[String(t.label).toLowerCase(),String(t.value)])),s=a.get(e);s&&(this.configForm.payCoins=(this.configForm.payCoins||[]).filter(t=>String(t)!==String(s)))},async handleOpenEdit(){try{this.visibleEdit=!0;const t=await(0,s.queryShop)({id:this.shop.id});t&&(0===t.code||200===t.code)&&t.data?this.editForm={id:t.data.id,name:t.data.name,image:t.data.image,description:t.data.description}:(this.editForm={id:this.shop.id,name:this.shop.name,image:this.shop.image,description:this.shop.description},this.$message.warning(t&&t.msg?t.msg:"未获取到店铺详情"))}catch(t){this.editForm={id:this.shop.id,name:this.shop.name,image:this.shop.image,description:this.shop.description},console.error("查询店铺详情失败:",t)}},async submitEdit(){try{const{name:t,image:e,description:a}=this.editForm,i=t=>"string"===typeof t&&t.length>0&&0===t.trim().length;if(i(t))return void this.$message.error("店铺名称不能全是空格");if(!t)return void this.$message.error("店铺名称不能为空");if(this.hasEmoji(t))return void this.$message.warning("店铺名称不能包含表情符号");if(i(e))return void this.$message.error("店铺封面不能全是空格");if(i(a))return void this.$message.error("店铺描述不能全是空格");if(t&&t.length>30)return void this.$message.warning("店铺名称不能超过30个字符");if(a&&a.length>300)return void this.$message.warning("店铺描述不能超过300个字符");const o={...this.editForm},r=await(0,s.updateShop)(o);!r||0!==r.code&&200!==r.code?this.$message({message:r.msg||"保存失败",type:"error",showClose:!0}):(this.$message({message:"已保存",type:"success",showClose:!0}),this.visibleEdit=!1,this.fetchMyShop())}catch(t){console.error("更新店铺失败:",t),console.log("更新店铺失败,请稍后重试")}},async handleDelete(){try{await this.$confirm("确定删除该店铺吗?此操作不可恢复","提示",{type:"warning"});const t=await(0,s.deleteShop)(this.shop.id);!t||0!==t.code&&200!==t.code||(this.$message({message:"删除成功",type:"success",showClose:!0}),this.resetShopState(),this.loaded=!1,setTimeout(()=>{this.fetchMyShop()},500))}catch(t){}},async handleToggleShop(){try{const t=2===this.shop.state,e=t?"确定开启店铺吗?":"确定关闭该店铺吗?关闭后用户将无法访问";await this.$confirm(e,"提示",{type:"warning"});const a=await(0,s.closeShop)(this.shop.id);!a||0!==a.code&&200!==a.code?console.log("操作失败"):(this.$message({message:t?"店铺已开启":"店铺已关闭",type:"success",showClose:!0}),this.fetchMyShop())}catch(t){}},handleGoNew(){this.canCreateShop?this.$router.push("/account/shop-new"):this.$message({message:"每个用户仅允许一个店铺,无法新建",type:"warning",showClose:!0})},handleAddProduct(){this.hasShop?this.$router.push({path:"/account/product-new",query:{shopId:this.shop.id}}):this.$message({message:"请先创建店铺",type:"warning",showClose:!0})},handleWalletBind(){this.hasShop?this.$router.push("/account/shop-config"):this.$message({message:"请先创建店铺",type:"warning",showClose:!0})}}}},2871:function(t,e,a){"use strict";a.r(e),a.d(e,{__esModule:function(){return i.B},default:function(){return l}});var s=a(6285),i=a(4601),o=i.A,r=a(845),n=(0,r.A)(o,s.XX,s.Yp,!1,null,"dc8bb7de",null),l=n.exports},2935:function(t,e,a){"use strict";Object.defineProperty(e,"B",{value:!0}),e.A=void 0,a(4114);a(4180),e.A={name:"OrderList",props:{items:{type:Array,default:()=>[]},emptyText:{type:String,default:"暂无数据"},showCheckout:{type:Boolean,default:!1},onCancel:{type:Function,default:null}},data(){return{payLoading:!1,orderDialog:{visible:!1,qrContent:"",coin:"",amount:"",address:""},dialogVisible:!1,paymentDialog:{totalPrice:"",payAmount:"",noPayAmount:"",img:""}}},computed:{safeItems(){return Array.isArray(this.items)?this.items:[]}},methods:{buildQrSrc(t){if(!t)return"";try{const e=String(t).trim();return e.startsWith("data:")?e:`data:image/png;base64,${e}`}catch(e){return""}},formatDateTime(t){if(!t)return"—";try{const e=String(t);return e.includes("T")?e.replace("T"," "):e}catch(e){return String(t)}},async handleCheckout(t){if(t)try{this.payLoading=!0,this.paymentDialog={totalPrice:t.totalPrice,payAmount:t.payAmount,noPayAmount:t.noPayAmount,img:t.img},this.paymentDialog.img?(this.paymentDialog.img=this.buildQrSrc(this.paymentDialog.img),this.dialogVisible=!0):this.$message({message:"未返回支付二维码",type:"error",showClose:!0})}catch(e){console.log(e,"创建支付订单失败")}finally{this.payLoading=!1}},handleGoDetail(t){const e=t&&(null!=t.id?t.id:t.orderId);if(null!=e)try{const t=this.$route&&this.$route.path||"",s=0===t.indexOf("/account/orders")?"buyer":0===t.indexOf("/account/seller-orders")?"seller":"";try{s&&sessionStorage.setItem("orderDetailFrom",s)}catch(a){}s?this.$router.push({path:`/account/order-detail/${e}`,query:{from:s}}):this.$router.push(`/account/order-detail/${e}`)}catch(a){this.$message({message:"无法跳转到详情页",type:"error",showClose:!0})}else this.$message({message:"订单ID缺失",type:"error",showClose:!0})},handleCancel(t){if(!t||!this.onCancel)return;const e=t.id;null!=e?this.$confirm("确认取消该订单吗?","提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then(()=>{try{this.onCancel({orderId:e})}catch(t){}}).catch(()=>null):this.$message({message:"订单ID缺失",type:"error",showClose:!0})},shouldShowActions(t){if(console.log(t,"飞机飞机覅附件s"),!this.showCheckout)return!1;const e=Number(t&&t.status);return console.log(e,"飞机飞机覅附件s"),0===e||6===e||10===e}}}},3002:function(t,e,a){"use strict";a.r(e),a.d(e,{__esModule:function(){return i.B},default:function(){return l}});var s=a(8875),i=a(1507),o=i.A,r=a(845),n=(0,r.A)(o,s.XX,s.Yp,!1,null,"3376dbce",null),l=n.exports},3466:function(t,e,a){"use strict";Object.defineProperty(e,"B",{value:!0}),e.A=void 0,a(4114),a(8111),a(2489),a(116),a(7588),a(1701);var s=a(1193);e.A={name:"AccountProductMachineAdd",data(){return{form:{productId:Number(this.$route.query.productId)||null,coin:this.$route.query.coin||"",productName:this.$route.query.name||"",powerDissipation:null,theoryPower:null,type:"",unit:"TH/S",cost:"",maxLeaseDays:""},confirmVisible:!1,rules:{productName:[{required:!0,message:"商品名称不能为空",trigger:"change"}],coin:[{required:!0,message:"币种不能为空",trigger:"change"}],powerDissipation:[{required:!0,message:"功耗不能为空",trigger:"blur"},{validator:(t,e,a)=>{const s=String(e||"");if(!s)return void a(new Error("功耗不能为空"));const i=/^\d{1,6}(\.\d{1,4})?$/;i.test(s)?Number(s)<=0?a(new Error("功耗必须大于0")):a():a(new Error("功耗整数最多6位,小数最多4位"))},trigger:"blur"}],theoryPower:[{required:!0,message:"理论算力不能为空",trigger:"blur"},{validator:(t,e,a)=>{const s=String(e||"");if(!s)return void a(new Error("理论算力不能为空"));const i=/^\d{1,6}(\.\d{1,4})?$/;i.test(s)?Number(s)<=0?a(new Error("理论算力必须大于0")):a():a(new Error("理论算力整数最多6位,小数最多4位"))},trigger:"blur"}],unit:[{required:!0,message:"请选择算力单位",trigger:"change"}],cost:[{required:!0,message:"请填写机器成本(USDT)",trigger:"blur"},{validator:(t,e,a)=>{const s=String(e||"");if(!s)return void a(new Error("请填写机器成本(USDT)"));const i=/^\d{1,12}(\.\d{1,2})?$/;i.test(s)?Number(s)<=0?a(new Error("成本必须大于 0")):a():a(new Error("成本整数最多12位,小数最多2位"))},trigger:"blur"}],maxLeaseDays:[{required:!0,message:"请填写最大租赁天数",trigger:"blur"},{validator:(t,e,a)=>{const s=String(e??"");if(!s)return void a(new Error("请填写最大租赁天数"));if(!/^\d{1,3}$/.test(s))return void a(new Error("仅允许整数,范围 1-365"));const i=Number(s);!Number.isInteger(i)||i<1||i>365?a(new Error("范围需在 1-365 天")):a()},trigger:"blur"}]},miners:[],minersLoading:!1,selectedMiner:"",machineOptions:[],machinesLoading:!1,selectedMachines:[],selectedMachineRows:[],saving:!1,lastCostBaseline:0,lastTypeBaseline:"",lastMaxLeaseDaysBaseline:0,lastPowerDissipationBaseline:0,lastTheoryPowerBaseline:0,lastUnitBaseline:"TH/S",params:{cost:353400,powerDissipation:.01,theoryPower:1e3,type:"",unit:"TH/S",productId:1,productMachineURDVos:[{user:"lx_888",miner:"iusfhufhu",price:353400,type:"",state:0},{user:"lx_888",miner:"iusfhufhu2",price:353400,type:"",state:0}]}}},created(){this.fetchMiners(),this.lastTypeBaseline=this.form.type},methods:{handleBack(){this.$router.back()},handleNumeric(t){let e=String(this.form[t]??"");e=e.replace(/[^0-9.]/g,"");const a=e.indexOf(".");-1!==a&&(e=e.slice(0,a+1)+e.slice(a+1).replace(/\./g,""));const s=e.endsWith(".");if("cost"===t){const t=e.split(".");let a=t[0]||"",i=t[1]||"";a.length>12&&(a=a.slice(0,12)),i&&(i=i.slice(0,2)),e=i.length?`${a}.${i}`:s?`${a}.`:a}else if("powerDissipation"===t||"theoryPower"===t){const t=e.split(".");let a=t[0]||"",i=t[1]||"";a.length>6&&(a=a.slice(0,6)),i&&(i=i.slice(0,4)),e=i.length?`${a}.${i}`:s?`${a}.`:a}else{if("maxLeaseDays"===t)return e=e.replace(/\D/g,""),e.length>3&&(e=e.slice(0,3)),this.form[t]=e,void this.syncMaxLeaseDaysToRows();if(-1!==a){const[t,a]=e.split(".");e=t+"."+(a?a.slice(0,6):"")}}this.form[t]=e,"cost"===t&&this.syncCostToRows()},handleTypeInput(){"string"===typeof this.form.type&&this.form.type.length>20&&(this.form.type=this.form.type.slice(0,20))},syncCostToRows(){const t=Number(this.form.cost);if(!Number.isFinite(t))return;const e=this.lastCostBaseline;this.selectedMachineRows=this.selectedMachineRows.map(a=>{const s=Number(a.price);return Number.isFinite(s)&&s!==e?a:{...a,price:t}}),this.lastCostBaseline=t},updateMachineType(){this.selectedMachineRows=this.selectedMachineRows.map(t=>t.type&&t.type!==this.lastTypeBaseline?t:{...t,type:this.form.type}),this.lastTypeBaseline=this.form.type},updateSelectedMachineRows(){const t=new Map;this.machineOptions.forEach(e=>{t.set(e.miner,e)});const e=[];this.selectedMachines.forEach(a=>{const s=t.get(a);if(s){const t=this.selectedMachineRows.find(t=>t.miner===a);e.push({user:s.user,coin:s.coin,miner:s.miner,realPower:s.realPower,price:t?t.price:this.form.cost,powerDissipation:t&&void 0!==t.powerDissipation?t.powerDissipation:this.form.powerDissipation,theoryPower:t&&void 0!==t.theoryPower?t.theoryPower:this.form.theoryPower,unit:t&&t.unit?t.unit:this.form.unit,type:t?t.type:this.form.type,state:t?t.state:0,maxLeaseDays:t&&void 0!==t.maxLeaseDays?t.maxLeaseDays:this.form.maxLeaseDays})}}),this.selectedMachineRows=e},syncPowerDissipationToRows(){const t=Number(this.form.powerDissipation);if(!Number.isFinite(t))return;const e=this.lastPowerDissipationBaseline;this.selectedMachineRows=this.selectedMachineRows.map(a=>{const s=Number(a.powerDissipation);return Number.isFinite(s)&&s!==e?a:{...a,powerDissipation:t}}),this.lastPowerDissipationBaseline=t},syncTheoryPowerToRows(){const t=Number(this.form.theoryPower);if(!Number.isFinite(t))return;const e=this.lastTheoryPowerBaseline;this.selectedMachineRows=this.selectedMachineRows.map(a=>{const s=Number(a.theoryPower);return Number.isFinite(s)&&s!==e?a:{...a,theoryPower:t}}),this.lastTheoryPowerBaseline=t},syncUnitToRows(){const t=this.form.unit;if(!t)return;const e=this.lastUnitBaseline;this.selectedMachineRows=this.selectedMachineRows.map(a=>{const s=a.unit;return s&&s!==e?a:{...a,unit:t}}),this.lastUnitBaseline=t},handleRowPowerDissipationInput(t){let e=String(this.selectedMachineRows[t].powerDissipation??"");e=e.replace(/[^0-9.]/g,"");const a=e.indexOf(".");-1!==a&&(e=e.slice(0,a+1)+e.slice(a+1).replace(/\./g,""));const s=e.split(".");let i=s[0]||"",o=s[1]||"";i.length>6&&(i=i.slice(0,6)),o&&(o=o.slice(0,4)),e=o.length?`${i}.${o}`:i,this.$set(this.selectedMachineRows[t],"powerDissipation",e)},handleRowPowerDissipationBlur(t){const e=String(this.selectedMachineRows[t].powerDissipation??""),a=/^\d{1,6}(\.\d{1,4})?$/;(!e||Number(e)<=0||!a.test(e))&&(this.$message.warning("功耗需大于0,整数最多6位,小数最多4位"),this.$set(this.selectedMachineRows[t],"powerDissipation",""))},handleRowTheoryPowerInput(t){let e=String(this.selectedMachineRows[t].theoryPower??"");e=e.replace(/[^0-9.]/g,"");const a=e.indexOf(".");-1!==a&&(e=e.slice(0,a+1)+e.slice(a+1).replace(/\./g,""));const s=e.split(".");let i=s[0]||"",o=s[1]||"";i.length>6&&(i=i.slice(0,6)),o&&(o=o.slice(0,4)),e=o.length?`${i}.${o}`:i,this.$set(this.selectedMachineRows[t],"theoryPower",e)},handleRowTheoryPowerBlur(t){const e=String(this.selectedMachineRows[t].theoryPower??""),a=/^\d{1,6}(\.\d{1,4})?$/;(!e||Number(e)<=0||!a.test(e))&&(this.$message.warning("理论算力需大于0,整数最多6位,小数最多4位"),this.$set(this.selectedMachineRows[t],"theoryPower",""))},handleRowUnitChange(t,e){this.$set(this.selectedMachineRows[t],"unit",e)},syncMaxLeaseDaysToRows(){const t=this.form.maxLeaseDays,e=Number(t);if(!Number.isInteger(e))return;const a=this.lastMaxLeaseDaysBaseline;this.selectedMachineRows=this.selectedMachineRows.map(t=>{const s=Number(t.maxLeaseDays);return Number.isInteger(s)&&s!==a?t:{...t,maxLeaseDays:e}}),this.lastMaxLeaseDaysBaseline=e},handleRowMaxLeaseDaysInput(t){let e=String(this.selectedMachineRows[t].maxLeaseDays??"");e=e.replace(/\D/g,""),e.length>3&&(e=e.slice(0,3)),this.$set(this.selectedMachineRows[t],"maxLeaseDays",e)},handleRowMaxLeaseDaysBlur(t){const e=String(this.selectedMachineRows[t].maxLeaseDays??"");if(!/^\d{1,3}$/.test(e))return this.$message.warning("最大租赁天数需为 1-365 的整数"),void this.$set(this.selectedMachineRows[t],"maxLeaseDays","");const a=Number(e);(!Number.isInteger(a)||a<1||a>365)&&(this.$message.warning("最大租赁天数需为 1-365 的整数"),this.$set(this.selectedMachineRows[t],"maxLeaseDays",""))},handleRowPriceInput(t){let e=String(this.selectedMachineRows[t].price??"");e=e.replace(/[^0-9.]/g,"");const a=e.indexOf(".");-1!==a&&(e=e.slice(0,a+1)+e.slice(a+1).replace(/\./g,""));const s=e.endsWith("."),i=e.split(".");let o=i[0]||"",r=i[1]||"";o.length>12&&(o=o.slice(0,12)),r&&(r=r.slice(0,2)),e=r.length?`${o}.${r}`:s?`${o}.`:o,this.$set(this.selectedMachineRows[t],"price",e)},handleRowPriceBlur(t){const e=String(this.selectedMachineRows[t].price??""),a=/^\d{1,12}(\.\d{1,2})?$/;(!e||Number(e)<=0||!a.test(e))&&(this.$message.warning("价格必须大于0,整数最多12位,小数最多2位"),this.$set(this.selectedMachineRows[t],"price",""))},handleRowTypeInput(t){const e=String(this.selectedMachineRows[t].type||""),a=e.length>20?e.slice(0,20):e;this.$set(this.selectedMachineRows[t],"type",a)},handleRowTypeBlur(t){const e=this.selectedMachineRows[t].type,a=t=>"string"===typeof t&&t.length>0&&0===t.trim().length;a(e)&&(this.$message.warning("矿机型号不能全是空格"),this.$set(this.selectedMachineRows[t],"type",""))},handleToggleState(t){const e=this.selectedMachineRows[t].state;this.$set(this.selectedMachineRows[t],"state",0===e?1:0)},async fetchMiners(){this.minersLoading=!0;try{const t=await(0,s.getUserMinersList)({coin:this.form.coin||""}),e=t?.data;let a=[];Array.isArray(e)?a=e:e&&"object"===typeof e?Object.keys(e).forEach(t=>{const s=Array.isArray(e[t])?e[t]:[];s.forEach(t=>{t&&t.user&&t.coin&&a.push({user:t.user,coin:t.coin,miner:t.miner||null})})}):e&&e.additionalProperties1&&(a=[e.additionalProperties1]),this.form.coin&&(a=a.filter(t=>t.coin===this.form.coin)),this.miners=a}catch(t){console.error("获取挖矿账户失败",t)}finally{this.minersLoading=!1}},async handleMinerChange(t){if(this.selectedMachines=[],!t)return void(this.machineOptions=[]);const[e,a]=t.split("|");this.machinesLoading=!0;try{const t={coin:a,user:e},i=await(0,s.getUserMachineList)(t),o=i?.data||[];this.machineOptions=Array.isArray(o)?o:[],console.log("选择挖矿账户:",{user:e,coin:a}),console.log("获取机器列表响应:",i),console.log("机器列表数据:",this.machineOptions)}catch(i){console.error("获取机器列表失败",i)}finally{this.machinesLoading=!1}},async handleSave(){try{const t=await this.$refs.machineForm.validate();if(!t)return}catch(a){return}if(!this.form.productId)return void this.$message.warning("缺少商品ID");if(!this.selectedMiner)return void this.$message.warning("请先选择挖矿账户");if(!this.selectedMachines.length)return void this.$message.warning("请至少选择一台机器");const t=t=>"string"===typeof t&&t.length>0&&0===t.trim().length;if(t(this.form.type))return void this.$message.warning("矿机型号不能全是空格");const e=this.selectedMachineRows.findIndex(e=>t(e.type));if(-1===e){for(let t=0;t365){const a=e&&(e.miner||e.user)||t+1;return void this.$message.warning(`第${t+1}行(机器:${a}) 最大租赁天数需为 1-365 的整数`)}}this.confirmVisible=!0}else this.$message.warning("存在行的矿机型号全是空格,请修正后再试")},async doSubmit(){const[t,e]=this.selectedMiner.split("|");this.saving=!0;try{const t={productId:this.form.productId,powerDissipation:this.form.powerDissipation,theoryPower:this.form.theoryPower,type:this.form.type,unit:this.form.unit,cost:this.form.cost,maxLeaseDays:this.form.maxLeaseDays,productMachineURDVos:this.selectedMachineRows.map(t=>({miner:t.miner,price:Number(t.price)||0,state:t.state||0,type:t.type||this.form.type,user:t.user,maxLeaseDays:Number(t.maxLeaseDays)||Number(this.form.maxLeaseDays)||0,powerDissipation:Number(t.powerDissipation)||Number(this.form.powerDissipation)||0,theoryPower:Number(t.theoryPower)||Number(this.form.theoryPower)||0,unit:t.unit||this.form.unit}))};console.log(t,"请求参数");const e=await(0,s.addSingleOrBatchMachine)(t);!e||0!==e.code&&200!==e.code||(this.$message({message:"添加成功",duration:3e3,showClose:!0,type:"success"}),this.confirmVisible=!1,this.$router.back())}catch(a){console.error("添加出售机器失败",a),console.log("添加失败")}finally{this.saving=!1}}},watch:{"form.cost":function(){this.syncCostToRows()},"form.type":function(){this.updateMachineType()},"form.maxLeaseDays":function(){this.syncMaxLeaseDaysToRows()},"form.powerDissipation":function(){this.syncPowerDissipationToRows()},"form.theoryPower":function(){this.syncTheoryPowerToRows()},"form.unit":function(){this.syncUnitToRows()},selectedMachines(){this.updateSelectedMachineRows()}}}},3574:function(t,e){"use strict";e.Yp=e.XX=void 0;e.XX=function(){var t=this,e=t._self._c;return e("div",{staticClass:"product-new"},[e("el-card",{staticClass:"product-form-card"},[e("div",{staticClass:"card-header",attrs:{slot:"header"},slot:"header"},[e("h2",[t._v("新增商品")]),e("p",{staticClass:"subtitle"},[t._v("创建新的商品信息")])]),e("el-form",{ref:"productForm",staticClass:"product-form",attrs:{model:t.form,rules:t.rules,"label-width":"120px"}},[e("el-form-item",{attrs:{label:"商品名称",prop:"name"}},[e("el-input",{attrs:{placeholder:"请输入商品名称,如:Nexa-M2-Miner",maxlength:"30","show-word-limit":""},model:{value:t.form.name,callback:function(e){t.$set(t.form,"name",e)},expression:"form.name"}})],1),e("el-form-item",{staticClass:"align-like-input",attrs:{label:"商品类型",prop:"type"}},[e("el-radio-group",{model:{value:t.form.type,callback:function(e){t.$set(t.form,"type",e)},expression:"form.type"}},[e("el-radio",{attrs:{label:0}},[t._v("矿机")])],1)],1),e("el-form-item",{attrs:{label:"挖矿币种",prop:"coin"}},[e("el-select",{staticStyle:{width:"100%"},attrs:{placeholder:"请选择挖矿币种"},model:{value:t.form.coin,callback:function(e){t.$set(t.form,"coin",e)},expression:"form.coin"}},t._l(t.coinOptions,function(t){return e("el-option",{key:t.value,attrs:{label:t.label,value:t.value}})}),1)],1),e("el-form-item",{attrs:{label:"商品描述",prop:"description"}},[e("el-input",{attrs:{type:"textarea",rows:4,placeholder:"请输入商品描述",maxlength:"100","show-word-limit":""},model:{value:t.form.description,callback:function(e){t.$set(t.form,"description",e)},expression:"form.description"}})],1),e("el-form-item",{staticClass:"align-like-input",attrs:{label:"商品状态",prop:"state"}},[e("el-radio-group",{model:{value:t.form.state,callback:function(e){t.$set(t.form,"state",e)},expression:"form.state"}},[e("el-radio",{attrs:{label:0}},[t._v("上架")]),e("el-radio",{attrs:{label:1}},[t._v("下架")])],1)],1),e("el-form-item",{staticClass:"actions-row"},[e("div",{staticClass:"form-actions"},[e("el-button",{attrs:{type:"primary",size:"medium",loading:t.submitting},on:{click:t.handleSubmit}},[t._v("创建商品")]),e("el-button",{attrs:{size:"medium"},on:{click:t.handleReset}},[t._v("重置")]),e("el-button",{attrs:{size:"medium"},on:{click:t.handleCancel}},[t._v("取消")])],1)])],1)],1)],1)},e.Yp=[]},3723:function(t,e,a){"use strict";var s=a(3999)["default"];Object.defineProperty(e,"__esModule",{value:!0}),e.productRoutes=e.mainRoutes=e["default"]=e.childrenRoutes=e.checkoutRoutes=e.cartRoutes=e.accountRoutes=void 0;var i=s(a(1774));const o=e.productRoutes=[{path:"/productList",name:"productList",component:()=>Promise.resolve().then(()=>(0,i.default)(a(3002))),meta:{title:"商品列表",description:"浏览所有可用商品",allAuthority:["all"]}},{path:"/product/:id",name:"productDetail",component:()=>Promise.resolve().then(()=>(0,i.default)(a(4021))),meta:{title:"商品详情",description:"查看商品详细信息",allAuthority:["all"]}}],r=e.cartRoutes=[{path:"/cart",name:"cart",component:()=>Promise.resolve().then(()=>(0,i.default)(a(772))),meta:{title:"购物车",description:"管理购物车商品",allAuthority:["all"]}}],n=e.checkoutRoutes=[{path:"/checkout",name:"checkout",component:()=>Promise.resolve().then(()=>(0,i.default)(a(5638))),meta:{title:"订单结算",description:"完成订单结算",allAuthority:["all"]}}],l=e.accountRoutes=[{path:"/account",name:"account",component:()=>Promise.resolve().then(()=>(0,i.default)(a(3834))),redirect:"/account/shops",meta:{title:"个人中心",description:"管理个人资料和店铺",allAuthority:["all"]},children:[{path:"wallet",name:"Wallet",component:()=>Promise.resolve().then(()=>(0,i.default)(a(9072))),meta:{title:"我的钱包",description:"查看钱包余额、充值和提现",allAuthority:["all"]}},{path:"rechargeRecord",name:"RechargeRecord",component:()=>Promise.resolve().then(()=>(0,i.default)(a(6851))),meta:{title:"充值记录",description:"查看充值记录",allAuthority:["all"]}},{path:"withdrawalHistory",name:"WithdrawalHistory",component:()=>Promise.resolve().then(()=>(0,i.default)(a(1394))),meta:{title:"提现记录",description:"查看提现记录",allAuthority:["all"]}},{path:"receipt-record",name:"accountReceiptRecord",component:()=>Promise.resolve().then(()=>(0,i.default)(a(2150))),meta:{title:"收款记录",description:"卖家收款流水记录",allAuthority:["all"]}},{path:"shop-new",name:"accountShopNew",component:()=>Promise.resolve().then(()=>(0,i.default)(a(1749))),meta:{title:"新增店铺",description:"创建新的店铺",allAuthority:["all"]}},{path:"shop-config",name:"accountShopConfig",component:()=>Promise.resolve().then(()=>(0,i.default)(a(2871))),meta:{title:"钱包绑定",description:"绑定店铺收款钱包",allAuthority:["all"]}},{path:"shops",name:"accountMyShops",component:()=>Promise.resolve().then(()=>(0,i.default)(a(7802))),meta:{title:"我的店铺",description:"查看我的店铺信息",allAuthority:["all"]}},{path:"product-new",name:"accountProductNew",component:()=>Promise.resolve().then(()=>(0,i.default)(a(9266))),meta:{title:"新增商品",description:"创建新的商品",allAuthority:["all"]}},{path:"products",name:"accountProducts",component:()=>Promise.resolve().then(()=>(0,i.default)(a(5498))),meta:{title:"商品列表",description:"管理店铺下的商品列表",allAuthority:["all"]}},{path:"purchased",name:"accountPurchased",component:()=>Promise.resolve().then(()=>(0,i.default)(a(8549))),meta:{title:"已购商品",description:"查看已购买的商品列表",allAuthority:["all"]}},{path:"funds-flow",name:"accountFundsFlow",component:()=>Promise.resolve().then(()=>(0,i.default)(a(6629))),meta:{title:"资金流水",description:"充值/提现/消费记录切换查看",allAuthority:["all"]}},{path:"purchased-detail/:id",name:"PurchasedDetail",component:()=>Promise.resolve().then(()=>(0,i.default)(a(8874))),meta:{title:"已购商品详情",description:"查看已购商品详细信息",allAuthority:["all"]}},{path:"orders",name:"accountOrders",component:()=>Promise.resolve().then(()=>(0,i.default)(a(8401))),meta:{title:"订单列表",description:"查看与管理订单(按状态筛选)",allAuthority:["all"]}},{path:"seller-orders",name:"accountSellerOrders",component:()=>Promise.resolve().then(()=>(0,i.default)(a(4051))),meta:{title:"已售出订单",description:"卖家侧订单列表",allAuthority:["all"]}},{path:"order-detail/:id",name:"accountOrderDetail",component:()=>Promise.resolve().then(()=>(0,i.default)(a(4458))),meta:{title:"订单详情",description:"查看订单详细信息",allAuthority:["all"]}},{path:"product-detail/:id",name:"accountProductDetail",component:()=>Promise.resolve().then(()=>(0,i.default)(a(8104))),meta:{title:"商品详情",description:"个人中心 - 商品详情",allAuthority:["all"]}},{path:"product-machine-add",name:"accountProductMachineAdd",component:()=>Promise.resolve().then(()=>(0,i.default)(a(115))),meta:{title:"添加出售机器",description:"为商品添加出售机器",allAuthority:["all"]}}]}],c=e.childrenRoutes=[...o,...r,...n,...l],d=e.mainRoutes=[{path:"/",name:"Home",component:()=>Promise.resolve().then(()=>(0,i.default)(a(1182))),redirect:"/productList",children:c},{path:"*",redirect:"/productList"}];e["default"]=d},3834:function(t,e,a){"use strict";a.r(e),a.d(e,{__esModule:function(){return i.B},default:function(){return l}});var s=a(1910),i=a(1259),o=i.A,r=a(845),n=(0,r.A)(o,s.XX,s.Yp,!1,null,"59d86c16",null),l=n.exports},4021:function(t,e,a){"use strict";a.r(e),a.d(e,{__esModule:function(){return i.B},default:function(){return l}});var s=a(8418),i=a(7692),o=i.A,r=a(845),n=(0,r.A)(o,s.XX,s.Yp,!1,null,"2d97afb4",null),l=n.exports},4051:function(t,e,a){"use strict";a.r(e),a.d(e,{__esModule:function(){return i.B},default:function(){return l}});var s=a(9690),i=a(1977),o=i.A,r=a(845),n=(0,r.A)(o,s.XX,s.Yp,!1,null,"c4d1af58",null),l=n.exports},4180:function(t,e,a){"use strict";var s=a(3999)["default"];Object.defineProperty(e,"__esModule",{value:!0}),e.addOrders=o,e.cancelOrder=r,e.getChainAndListForSeller=d,e.getCoinPrice=u,e.getOrdersByIds=n,e.getOrdersByStatus=l,e.getOrdersByStatusForSeller=c;var i=s(a(5720));function o(t){return(0,i.default)({url:"/lease/order/info/addOrders",method:"post",data:t})}function r(t){return(0,i.default)({url:"/lease/order/info/cancelOrder",method:"post",data:t})}function n(t){return(0,i.default)({url:"/lease/order/info/getOrdersByIds",method:"post",data:t})}function l(t){return(0,i.default)({url:"/lease/order/info/getOrdersByStatus",method:"post",data:t})}function c(t){return(0,i.default)({url:"/lease/order/info/getOrdersByStatusForSeller",method:"post",data:t})}function d(t){return(0,i.default)({url:"/lease/shop/getChainAndListForSeller",method:"post",data:t})}function u(t){return(0,i.default)({url:"/lease/order/info/getCoinPrice",method:"post",data:t})}},4300:function(t,e,a){"use strict";Object.defineProperty(e,"B",{value:!0}),e.A=void 0,a(8111),a(1701);var s=a(6299);e.A={name:"AccountReceiptRecord",data(){return{loading:!1,rows:[{orderId:"1234567890",fromChain:"tron",fromSymbol:"USDT",fromAddress:"TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",toChain:"tron",coin:"USDT",toAddress:"TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",txHash:"TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",status:2,updateTime:"2024-01-15 14:30:25",realAmount:100},{orderId:"1234567890",fromChain:"tron",fromSymbol:"USDT",fromAddress:"TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",toChain:"tron",coin:"USDT",toAddress:"TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",txHash:"TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",status:1,updateTime:"2024-01-15 14:30:25",realAmount:106}],page:1,pageSize:10,total:0,range:[],keyword:"",expandedRowKeys:[]}},mounted(){this.fetchList(),this.rows=this.withKeys(this.rows)},methods:{withKeys(t){const e=Array.isArray(t)?t:[];return e.map((t,e)=>({...t,__rowKey:t&&t.__rowKey?t.__rowKey:`${t&&(t.txHash||t.orderId||t.updateTime||"")}_${e}`}))},getRowKey(t){return t&&t.__rowKey},handleRowClick(t){const e=this.getRowKey(t),a=this.expandedRowKeys.includes(e);this.expandedRowKeys=a?[]:[e]},handleExpandChange(t,e){Array.isArray(e)?this.expandedRowKeys=e.length?[this.getRowKey(e[e.length-1])]:[]:this.expandedRowKeys=[]},getRowClassName(){return"clickable-row"},formatTrunc(t,e=2){const a=Number(t);if(!Number.isFinite(a))return"0";const s=Math.max(0,Number(e)||0),i=Math.pow(10,s),o=Math.trunc(a*i)/i,r=String(o);if(0===s)return r;const[n,l=""]=r.split("."),c=l.padEnd(s,"0");return`${n}.${c}`},formatFullTime(t){if(!t)return"";try{return`${t.split("T")[0]} ${t.split("T")[1].split(".")[0]}`}catch(e){return console.log(e,"时间"),t}},formatChain(t){const e={tron:"Tron (TRC20)",ethereum:"Ethereum (ERC20)",bsc:"BSC (BEP20)",polygon:"Polygon"};return e[t]||t||"-"},getStatusType(t){const e={0:"danger",1:"success",2:"warning",3:"danger"};return e[t]||"info"},getStatusText(t){const e={0:"支付失败",1:"支付成功",2:"待校验",3:"证书校验失败"};return e[t]||"未知"},copy(t){if(!t)return;try{if(navigator.clipboard&&navigator.clipboard.writeText)return navigator.clipboard.writeText(t),void this.$message.success("已复制")}catch(a){}const e=document.createElement("textarea");e.value=t,document.body.appendChild(e),e.select();try{document.execCommand("copy"),this.$message.success("已复制")}catch(a){}document.body.removeChild(e)},handleRangeChange(){this.page=1},async fetchList(){this.loading=!0;try{const t={page:this.page,pageSize:this.pageSize},e=await(0,s.sellerReceiptList)(t),a=e&&(e.data||e),i=Array.isArray(a&&a.rows)?a.rows:Array.isArray(a)?a:[];this.rows=this.withKeys(i),this.total=e.total}catch(t){this.rows=[],this.total=0}finally{this.loading=!1}}}}},4458:function(t,e,a){"use strict";a.r(e),a.d(e,{__esModule:function(){return i.B},default:function(){return l}});var s=a(2389),i=a(9660),o=i.A,r=a(845),n=(0,r.A)(o,s.XX,s.Yp,!1,null,"613e4d6c",null),l=n.exports},4487:function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e["default"]=void 0,a(4114),a(8111),a(2489),a(116),a(2912),a(7588),a(1701),a(8237),a(7642),a(8004),a(3853),a(5876),a(2475),a(5024),a(1698);var s=a(7723),i=a(5952),o=a(9662),r=a(5844);e["default"]={name:"ProductDetail",data(){return{product:null,loading:!1,expandedRowKeys:[],selectedMap:{},params:{id:""},confirmAddDialog:{visible:!1,items:[]},cartMachineIdSet:new Set,cartCompositeKeySet:new Set,cartLoaded:!1,machinesLoaded:!1,productListData:[],tableData:[],productDetailLoading:!1}},mounted(){console.log(this.$route.params.id,"i叫哦附加费"),this.$route.params.id?(this.params.id=this.$route.params.id,this.product=!0,this.productListData&&this.productListData.length&&(this.expandedRowKeys=[this.productListData[0].id]),this.fetchGetMachineInfo(this.params)):(this.$message.error("商品不存在"),this.product=!1),this.fetchGetGoodsList()},methods:{async fetchGetMachineInfo(t){this.productDetailLoading=!0;const e=await(0,o.getMachineInfo)(t);if(console.log(e),e&&200===e.code){console.log(e.data,"res.rows"),this.paymentMethodList=e.data.payConfigList||[];const t=e.data.machineRangeInfoList||[],a=t.map((t,e)=>{const a=`grp-${e}`,s=t.id||t.onlyKey||t.productMachineRangeGroupDto&&t.productMachineRangeGroupDto.id,i=Array.isArray(t.productMachines)&&t.productMachines.length>0?t.productMachines[0].id:void 0,o=Array.isArray(t.productMachines)?t.productMachines.map(t=>({...t,leaseTime:t&&t.leaseTime&&Number(t.leaseTime)>0?Number(t.leaseTime):1,_selected:!1})):[];return{...t,id:s||(i?`m-${i}`:a),productMachines:o}});this.productListData=a,!this.productListData.length||this.expandedRowKeys&&this.expandedRowKeys.length||(this.expandedRowKeys=[this.productListData[0].id]),this.$nextTick(()=>{this.machinesLoaded=!0})}this.productDetailLoading=!1},async loadProduct(){try{this.loading=!0;const t=this.$route.params.id;this.product=await(0,s.getProductById)(t),this.product||this.$message({message:"商品不存在",type:"error",showClose:!0})}catch(t){console.error("加载商品详情失败:",t),this.$message({message:"加载商品详情失败,请稍后重试",type:"error",showClose:!0})}finally{this.loading=!1}},async fetchAddCart(t){const e=await(0,r.addCart)(t);return e},async fetchGetGoodsList(t){const e=await(0,r.getGoodsList)(t);try{const t=this.params&&this.params.id?Number(this.params.id):Number(this.$route.params.id),s=Array.isArray(e&&e.rows)?e.rows:Array.isArray(e&&e.data&&e.data.rows)?e.data.rows:Array.isArray(e&&e.data)?e.data:[],i=s.length&&s[0]&&Array.isArray(s[0].shoppingCartInfoDtoList)?s.flatMap(t=>Array.isArray(t.shoppingCartInfoDtoList)?t.shoppingCartInfoDtoList:[]):s,o=i.filter(e=>Number(e.productId)===t),r=new Set,n=new Set;o.forEach(t=>{const e=Array.isArray(t.productMachineDtoList)?t.productMachineDtoList:[];e.forEach(t=>{t&&(void 0!==t.id&&null!==t.id&&r.add(String(t.id)),t.user&&t.miner&&n.add(`${String(t.user)}|${String(t.miner)}`))})}),this.cartMachineIdSet=r,this.cartCompositeKeySet=n;try{const t=i.reduce((t,e)=>t+(Array.isArray(e&&e.productMachineDtoList)?e.productMachineDtoList.length:0),0);Number.isFinite(t)&&window.dispatchEvent(new CustomEvent("cart-updated",{detail:{count:t}}))}catch(a){}this.$nextTick(()=>{this.cartLoaded=!0,this.autoSelectAndDisable()})}catch(a){console.warn("解析购物车数据失败",a)}},handleBack(){this.$router.push("/productList")},handleSeriesRowClick(t){const e=t.id,a=Object.keys(this.selectedMap).filter(t=>(this.selectedMap[t]||[]).length>0),s=this.expandedRowKeys.includes(e);this.expandedRowKeys=s?a:Array.from(new Set([e,...a]))},handleGetSeriesRowClassName(){return"series-clickable-row"},handleInnerSelectionChange(t,e){const a=t.id;this.$set(this.selectedMap,a,e);const s=Object.keys(this.selectedMap).filter(t=>(this.selectedMap[t]||[]).length>0),i=new Set(this.expandedRowKeys);s.forEach(t=>i.add(t)),this.expandedRowKeys=Array.from(i).filter(t=>s.includes(t)||t===a||this.expandedRowKeys.includes(t))},handleExpandChange(t,e){},autoSelectAndDisable(){},isSelectable(t,e){return!0},isSelectedByParent(t,e){const a=t&&t.id,s=a&&this.selectedMap[a]||[];return!!s.find(t=>t&&t.id===e.id)},handleManualSelect(t,e,a){if(e&&(1===e.saleState||2===e.saleState))return this.$message.warning("该机器已售出或售出中,无法选择"),void this.$set(e,"_selected",!1);const s=t.id,i=this.selectedMap[s]&&[...this.selectedMap[s]]||[],o=i.findIndex(t=>t&&t.id===e.id);a&&-1===o&&i.push(e),!a&&o>-1&&i.splice(o,1),this.$set(this.selectedMap,s,i),this.$set(e,"_selected",!!a)},handleGetInnerRowClass({row:t}){return t&&(1===t.saleState||2===t.saleState)?"sold-row":""},handleDecreaseVariantQuantity(t,e){const a=this.productListData[t].variants[e];a.quantity>1&&a.quantity--},handleIncreaseVariantQuantity(t,e){const a=this.productListData[t].variants[e];a.quantity<99&&a.quantity++},handleVariantQuantityInput(t,e){const a=this.productListData[t].variants[e],s=Number(a.quantity);(!s||s<1)&&(a.quantity=1),s>99&&(a.quantity=99)},handleAddVariantToCart(t){if(t&&t.onlyKey)try{(0,i.addToCart)({id:t.onlyKey,title:t.model,price:t.price,quantity:t.quantity}),this.$message.success(`已添加 ${t.quantity} 件 ${t.model} 到购物车`),t.quantity=1}catch(e){console.error("添加到购物车失败:",e)}},handleAddSelectedToCart(){const t=Object.values(this.selectedMap).flat().filter(Boolean);if(t.length)try{t.forEach(t=>{(0,i.addToCart)({id:t.onlyKey||t.id,title:t.type||t.model||"矿机",price:t.price,quantity:1,leaseTime:Number(t.leaseTime||1)})}),this.$message.success(`已加入 ${t.length} 台矿机到购物车`),this.selectedMap={}}catch(e){console.error("统一加入购物车失败",e)}else this.$message.warning("请先勾选至少一台矿机")},handleOpenAddToCartDialog(){const t=Array.isArray(this.productListData)?this.productListData:[],e=t.flatMap(t=>Array.isArray(t.productMachines)?t.productMachines.filter(t=>!!t&&!!t._selected):[]),a=e.filter(t=>t&&(0===t.saleState||void 0===t.saleState||null===t.saleState));a.length?(a.length{try{this.clearAllSelections()}catch(t){}})):this.$message.warning("请先勾选至少一台矿机")},async handleConfirmAddSelectedToCart(){const t=Array.isArray(this.confirmAddDialog.items)?this.confirmAddDialog.items.filter(Boolean):[];if(!t.length)return void this.$message.warning("请先勾选至少一台矿机");const e=this.params&&this.params.id?this.params.id:this.$route&&this.$route.params&&this.$route.params.id;if(!e)return void this.$message.error("商品ID缺失,无法加入购物车");const a=t.map(t=>({productId:e,productMachineId:t.id,leaseTime:Number(t.leaseTime||1)}));try{const e=await this.fetchAddCart(a);if(!e||e.code&&200!==Number(e.code))return void this.$message.error(e&&e.msg?e.msg:"加入购物车失败,请稍后重试");try{t.forEach(t=>{t&&t.id&&this.cartMachineIdSet.add(t.id),this.$set(t,"_selected",!1),this.$set(t,"_inCart",!0),(!t.leaseTime||Number(t.leaseTime)<=0)&&this.$set(t,"leaseTime",1)}),this.$nextTick(()=>this.autoSelectAndDisable())}catch(s){}this.$message({message:`已加入 ${t.length} 台矿机到购物车`,type:"success",duration:3e3,showClose:!0}),this.confirmAddDialog.visible=!1,this.selectedMap={},this.fetchGetMachineInfo(this.params),this.fetchGetGoodsList();try{window.dispatchEvent(new CustomEvent("cart-updated"))}catch(s){}}catch(s){console.error("加入购物车失败: ",s),this.$message.error("加入购物车失败,请稍后重试")}},clearAllSelections(){try{this.selectedMap={};const t=Array.isArray(this.productListData)?this.productListData:[];t.forEach(t=>{const e=Array.isArray(t.productMachines)?t.productMachines:[];e.forEach(t=>{t&&this.$set(t,"_selected",!1)})})}catch(t){}},handleDecreaseQuantity(t){this.tableData[t].quantity>1&&this.tableData[t].quantity--},handleIncreaseQuantity(t){this.tableData[t].quantity<99&&this.tableData[t].quantity++},handleQuantityInput(t){const e=this.tableData[t].quantity;e<1?this.tableData[t].quantity=1:e>99&&(this.tableData[t].quantity=99)},handleQuantityBlur(t){const e=this.tableData[t].quantity;!e||e<1?this.tableData[t].quantity=1:e>99&&(this.tableData[t].quantity=99)},handleAddToCart(t){if(!t||t.quantity<1)this.$message.warning("请选择有效的数量");else try{(0,i.addToCart)({id:t.date,title:t.date,price:t.price,quantity:t.quantity,leaseTime:Number(t.leaseTime||1)}),this.$message.success(`已添加 ${t.quantity} 件 ${t.date} 到购物车`),t.quantity=1}catch(e){console.error("添加到购物车失败:",e),this.$message.error("添加到购物车失败,请稍后重试")}}}}},4571:function(t,e){"use strict";e.Yp=e.XX=void 0;e.XX=function(){var t=this,e=t._self._c;return e("div",{staticClass:"purchased-detail-page"},[e("h2",{staticClass:"title"},[t._v("已购商品详情")]),t.loading?e("div",{staticClass:"loading"},[t._v("加载中...")]):e("div",[e("el-card",{staticClass:"section"},[e("div",{staticClass:"sub-title"},[t._v("基本信息")]),e("div",{staticClass:"row"},[e("span",{staticClass:"label"},[t._v("用户:")]),e("span",{staticClass:"value mono"},[t._v(t._s(t.detail.userId||"—"))])]),e("div",{staticClass:"row"},[e("span",{staticClass:"label"},[t._v("订单项ID:")]),e("span",{staticClass:"value mono"},[t._v(t._s(t.detail.orderItemId||"—"))])]),e("div",{staticClass:"row"},[e("span",{staticClass:"label"},[t._v("机器ID:")]),e("span",{staticClass:"value mono"},[t._v(t._s(t.detail.productMachineId||"—"))])]),e("div",{staticClass:"row"},[e("span",{staticClass:"label"},[t._v("商品类型:")]),e("span",{staticClass:"value"},[e("el-tag",{attrs:{type:1===t.detail.type?"success":"info"}},[t._v(" "+t._s(1===t.detail.type?"算力套餐":"挖矿机器")+" ")])],1)]),e("div",{staticClass:"row"},[e("span",{staticClass:"label"},[t._v("状态:")]),e("span",{staticClass:"value"},[e("el-tag",{attrs:{type:0===t.detail.status?"success":"info"}},[t._v(" "+t._s(0===t.detail.status?"运行中":"已过期")+" ")])],1)]),e("div",{directives:[{name:"show",rawName:"v-show",value:1===t.detail.type,expression:"detail.type === 1"}],staticClass:"row"},[e("span",{staticClass:"label"},[t._v("购买算力:")]),e("span",{staticClass:"value strong"},[t._v(t._s(t.detail.purchasedComputingPower))])]),e("div",{staticClass:"row"},[e("span",{staticClass:"label"},[t._v("购买时间:")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatDateTime(t.detail.createTime)))])]),e("div",{staticClass:"row"},[e("span",{staticClass:"label"},[t._v("开始时间:")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatDateTime(t.detail.startTime)))])]),e("div",{staticClass:"row"},[e("span",{staticClass:"label"},[t._v("结束时间:")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatDateTime(t.detail.endTime)))])])]),e("el-card",{staticClass:"section",staticStyle:{"margin-top":"12px"}},[e("div",{staticClass:"sub-title"},[t._v("收益信息")]),e("div",{staticClass:"row"},[e("span",{staticClass:"label"},[t._v("当前实际算力:")]),e("span",{staticClass:"value strong"},[t._v(t._s(t.detail.currentComputingPower||"0"))])]),e("div",{staticClass:"row"},[e("span",{staticClass:"label"},[t._v("币种收益:")]),e("span",{staticClass:"value strong"},[t._v(t._s(t.detail.currentIncome||"0"))])]),e("div",{staticClass:"row"},[e("span",{staticClass:"label"},[t._v("当前USDT收益:")]),e("span",{staticClass:"value strong"},[t._v(t._s(t.detail.currentUsdtIncome||"0")+" USDT")])]),e("div",{staticClass:"row"},[e("span",{staticClass:"label"},[t._v("预估结束总收益:")]),e("span",{staticClass:"value strong"},[t._v(t._s(t.detail.estimatedEndIncome||"0"))])]),e("div",{staticClass:"row"},[e("span",{staticClass:"label"},[t._v("预估结束USDT总收益:")]),e("span",{staticClass:"value strong"},[t._v(t._s(t.detail.estimatedEndUsdtIncome||"0")+" USDT")])])]),e("div",{staticClass:"actions"},[e("el-button",{on:{click:function(e){return t.$router.back()}}},[t._v("返回")])],1)],1)])},e.Yp=[]},4601:function(t,e,a){"use strict";Object.defineProperty(e,"B",{value:!0}),e.A=void 0,a(4114),a(8111),a(2489),a(1701);a(5705);var s=a(6299);e.A={name:"AccountShopConfig",data(){return{productOptions:[],form:{chain:"",payAddress:"",payCoin:""},shop:{id:0,name:"",image:"",description:"",del:!0,state:0},value:[],currentChain:"",cascaderProps:{multiple:!0,checkStrictly:!1,emitPath:!0,value:"value",label:"label",children:"children"},options:[],loading:!1}},mounted(){this.getChainAndList()},methods:{handleRemoveSelectedCoin(t){const e=String(t||"").toLowerCase(),a=(this.value||[]).filter(t=>Array.isArray(t)&&String(t[1]).toLowerCase()!==e);this.handleChange(a)},handleItemClick(t,e){if(t)if(t.isLeaf){const e=t.path.map(t=>t.value),a=e[0],s=e[1];this.currentChain=String(a||"");let i=Array.isArray(this.value)?this.value.slice():[];const o=i.length?i[i.length-1]:null,r=Array.isArray(o)?o[0]:null;r&&r!==a&&(i=[]);const n=i.findIndex(t=>Array.isArray(t)&&t[0]===a&&t[1]===s);n>=0?i.splice(n,1):i.push([a,s]),this.handleChange(i)}else{const a=e&&e.value;t.expanded||t.expand(),a&&(this.currentChain=String(a),this.value=[],this.form.chain=String(a),this.form.payCoin="")}},handleExpandChange(t){const e=Array.isArray(t)&&t[0]||"";e&&(this.currentChain=String(e))},validateAddressByChain(t,e){const a=String(t||"").toLowerCase(),s=String(e||"").trim();if(!s)return{ok:!1,message:"请输入收款地址"};if(a.includes("tron")||"tron"===a){const t=/^T[A-Za-z1-9]{33}$/.test(s);return t?{ok:!0}:{ok:!1,message:"请输入正确的 TRON 地址:以 T 开头的 34 位字符"}}if(a.includes("ethereum")||"ethereum"===a||a.includes("eth")||a.includes("bsc")||"bsc"===a||a.includes("polygon")||"polygon"===a||a.includes("erc")||a.includes("bep")){const t=/^0x[a-fA-F0-9]{40}$/.test(s);return t?{ok:!0}:{ok:!1,message:"请输入正确的以太坊/EVM 兼容链地址:以 0x 开头 + 40 位十六进制"}}return s.length<=10?{ok:!1,message:"请输入正确的收款地址格式"}:{ok:!0}},async getChainAndList(){this.loading=!0;const t=await(0,s.getChainAndList)();t&&(0===t.code||200===t.code)&&t.data&&(this.options=this.toUpperOptions(t.data)),this.loading=!1},toUpperOptions(t){const e=Array.isArray(t)?t:[];return e.map(t=>{const e={...t},a=t&&(null!=t.label?t.label:t.value)||"";return e.label=String(a).toUpperCase(),Array.isArray(t&&t.children)&&(e.children=this.toUpperOptions(t.children)),e})},async FetchAddWalletShopConfig(t){this.loading=!0;const e=await(0,s.addWalletShopConfig)(t);!e||0!==e.code&&200!==e.code||(this.$message.success("绑定成功"),this.$router.push("/account/shops")),this.loading=!1},handleChange(t){const e=Array.isArray(t)?t:[];if(0===e.length)return this.form.chain="",this.form.payCoin="",void(this.value=[]);const a=e[e.length-1],s=Array.isArray(a)?a[0]:"",i=this.currentChain||s,o=e.filter(t=>Array.isArray(t)&&t[0]===i);this.value=o,this.form.chain=i||"",this.form.payCoin=o.map(t=>t[1]).filter(Boolean).join(",")},handleSave(){const t=Array.isArray(this.value)?this.value:[];if(this.form.chain=t.length?t[0]&&t[0][0]:"",this.form.payCoin=t.map(t=>t&&t[1]).filter(Boolean).join(","),!this.form.chain)return void this.$message.warning("请选择链");if(!this.form.payCoin)return void this.$message.warning("请选择币种");if(!this.form.payAddress)return void this.$message.warning("请输入钱包地址");const{ok:e,message:a}=this.validateAddressByChain(this.form.chain,this.form.payAddress);e?this.FetchAddWalletShopConfig(this.form):this.$message.warning(a||"钱包地址格式不正确")},handleReset(){this.form={chain:"",payAddress:"",payCoin:""},this.value=[]}},computed:{selectedCoinsDisplay(){const t=Array.isArray(this.value)?this.value:[],e=t.map(t=>t&&t[1]).filter(Boolean).map(t=>String(t).toUpperCase());return e.join("、")},selectedCoins(){const t=Array.isArray(this.value)?this.value:[];return t.map(t=>t&&t[1]).filter(Boolean).map(t=>String(t).toUpperCase())}}}},4994:function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e["default"]=void 0,a(4114),a(8111),a(7588);class s{constructor(){this.loadingStates=new Map,this.setupListeners()}setupListeners(){window.addEventListener("network-retry-complete",()=>{this.resetAllLoadingStates()})}setLoading(t,e,a){const s=`${t}:${e}`;this.loadingStates.set(s,{value:a,timestamp:Date.now()})}getLoading(t,e){const a=`${t}:${e}`,s=this.loadingStates.get(a);return!!s&&s.value}resetAllLoadingStates(){const t=[];this.loadingStates.forEach((e,a)=>{if(!0===e.value){const[e,s]=a.split(":");t.push({componentId:e,stateKey:s}),this.loadingStates.set(a,{value:!1,timestamp:Date.now()})}}),window.dispatchEvent(new CustomEvent("reset-loading-states",{detail:{componentsToUpdate:t}}))}resetComponentLoadingStates(t){const e=[];return this.loadingStates.forEach((a,s)=>{if(s.startsWith(`${t}:`)&&!0===a.value){const a=s.split(":")[1];e.push({componentId:t,stateKey:a}),this.loadingStates.set(s,{value:!1,timestamp:Date.now()})}}),e}}const i=new s;e["default"]=i},5059:function(t,e){"use strict";e.Yp=e.XX=void 0;e.XX=function(){var t=this,e=t._self._c;return e("div",{staticClass:"panel"},[e("h2",{staticClass:"panel-title"},[t._v("新增店铺")]),e("div",{staticClass:"panel-body"},[e("div",{staticClass:"row"},[e("label",{staticClass:"label"},[t._v("店铺名称")]),e("el-input",{attrs:{placeholder:"请输入店铺名称",maxlength:30,"show-word-limit":""},model:{value:t.form.name,callback:function(e){t.$set(t.form,"name",e)},expression:"form.name"}})],1),e("div",{staticClass:"row"},[e("label",{staticClass:"label"},[t._v("店铺描述")]),e("div",{staticClass:"textarea-wrapper"},[e("el-input",{attrs:{type:"textarea",rows:4,maxlength:300,placeholder:"请输入店铺描述","show-word-limit":""},on:{input:t.handleDescriptionInput},model:{value:t.form.description,callback:function(e){t.$set(t.form,"description",e)},expression:"form.description"}})],1)]),e("div",{staticClass:"row"},[e("el-button",{attrs:{type:"primary"},on:{click:t.handleCreate}},[t._v("创建店铺")])],1)])])},e.Yp=[]},5129:function(t,e,a){"use strict";var s=a(3999)["default"];Object.defineProperty(e,"__esModule",{value:!0}),e["default"]=void 0;var i=s(a(5471)),o=s(a(5353));i.default.use(o.default);e["default"]=new o.default.Store({state:{},getters:{},mutations:{},actions:{},modules:{}})},5141:function(t,e){"use strict";e.Yp=e.XX=void 0;e.XX=function(){var t=this,e=t._self._c;return e("div",{staticClass:"funds-page"},[e("h3",{staticClass:"title",staticStyle:{"margin-bottom":"18px","text-align":"left"}},[t._v("资金流水")]),e("div",{staticClass:"tabs-card"},[e("el-tabs",{on:{"tab-click":t.handleTab},model:{value:t.active,callback:function(e){t.active=e},expression:"active"}},[e("el-tab-pane",{attrs:{label:"充值记录",name:"recharge"}},[e("div",{staticClass:"list-wrap"},[e("div",{staticClass:"list-header"},[e("span",{staticClass:"list-title"},[t._v("全部充值 ("+t._s(t.rechargeRows.length)+")")]),e("el-button",{attrs:{type:"primary",size:"small"},on:{click:t.loadRecharge}},[t._v("刷新")])],1),e("div",{directives:[{name:"loading",rawName:"v-loading",value:t.loading.recharge,expression:"loading.recharge"}],staticClass:"record-list"},[t._l(t.rechargeRows,function(a,s){return e("div",{key:t.getRowKey(a,s),staticClass:"record-item",class:t.statusClass(a.status),on:{click:function(e){return t.toggleExpand("recharge",a,s)}}},[e("div",{staticClass:"item-main"},[e("div",{staticClass:"item-left"},[e("div",{staticClass:"amount"},[t._v("+ "+t._s(t.formatDec6(a.amount))+" "+t._s((a.fromSymbol||"USDT").toUpperCase()))]),e("div",{staticClass:"chain"},[t._v(t._s(t.formatChain(a.fromChain)))])]),e("div",{staticClass:"item-right"},[e("div",{staticClass:"status"},[e("el-tag",{attrs:{type:t.getRechargeStatusType(a.status),size:"small"}},[t._v(t._s(t.getRechargeStatusText(a.status)))])],1),e("div",{staticClass:"time"},[t._v(t._s(t.formatFullTime(a.createTime)))])])]),e("div",{directives:[{name:"show",rawName:"v-show",value:t.isExpanded("recharge",a,s),expression:"isExpanded('recharge', row, idx)"}],staticClass:"expand-panel"},[e("div",{staticClass:"expand-grid"},[e("div",{staticClass:"expand-item"},[e("span",{staticClass:"label"},[t._v("充值地址")]),e("div",{staticClass:"value value-row"},[e("span",{staticClass:"mono-ellipsis",attrs:{title:a.fromAddress}},[t._v(t._s(a.fromAddress))]),e("el-button",{attrs:{type:"text",size:"mini",icon:"el-icon-document-copy"},on:{click:function(e){return e.stopPropagation(),t.handleCopy(a.fromAddress,"充值地址")}}},[t._v("复制")])],1)]),a.txHash?e("div",{staticClass:"expand-item"},[e("span",{staticClass:"label"},[t._v("交易哈希")]),e("div",{staticClass:"value value-row"},[e("span",{staticClass:"mono-ellipsis",attrs:{title:a.txHash}},[t._v(t._s(a.txHash))]),e("el-button",{attrs:{type:"text",size:"mini",icon:"el-icon-document-copy"},on:{click:function(e){return e.stopPropagation(),t.handleCopy(a.txHash,"交易哈希")}}},[t._v("复制")])],1)]):t._e()])])])}),t.rechargeRows.length?t._e():e("div",{staticClass:"empty"},[t._v("暂无充值记录")])],2)])]),e("el-tab-pane",{attrs:{label:"提现记录",name:"withdraw"}},[e("div",{staticClass:"list-wrap"},[e("div",{staticClass:"list-header"},[e("span",{staticClass:"list-title"},[t._v("全部提现 ("+t._s(t.withdrawRows.length)+")")]),e("el-button",{attrs:{type:"primary",size:"small"},on:{click:t.loadWithdraw}},[t._v("刷新")])],1),e("div",{directives:[{name:"loading",rawName:"v-loading",value:t.loading.withdraw,expression:"loading.withdraw"}],staticClass:"record-list"},[t._l(t.withdrawRows,function(a,s){return e("div",{key:t.getRowKey(a,s),staticClass:"record-item",class:t.statusClass(a.status),on:{click:function(e){return t.toggleExpand("withdraw",a,s)}}},[e("div",{staticClass:"item-main"},[e("div",{staticClass:"item-left"},[e("div",{staticClass:"amount"},[t._v("- "+t._s(t.formatDec6(a.amount))+" "+t._s((a.toSymbol||"USDT").toUpperCase()))]),e("div",{staticClass:"chain"},[t._v(t._s(t.formatChain(a.toChain)))])]),e("div",{staticClass:"item-right"},[e("div",{staticClass:"status"},[e("el-tag",{attrs:{type:t.getWithdrawStatusType(a.status),size:"small"}},[t._v(t._s(t.getWithdrawStatusText(a.status)))])],1),e("div",{staticClass:"time"},[t._v(t._s(t.formatFullTime(a.createTime)))])])]),e("div",{directives:[{name:"show",rawName:"v-show",value:t.isExpanded("withdraw",a,s),expression:"isExpanded('withdraw', row, idx)"}],staticClass:"expand-panel"},[e("div",{staticClass:"expand-grid"},[e("div",{staticClass:"expand-item"},[e("span",{staticClass:"label"},[t._v("收款地址")]),e("div",{staticClass:"value value-row"},[e("span",{staticClass:"mono-ellipsis",attrs:{title:a.toAddress}},[t._v(t._s(a.toAddress))]),e("el-button",{attrs:{type:"text",size:"mini",icon:"el-icon-document-copy"},on:{click:function(e){return e.stopPropagation(),t.handleCopy(a.toAddress,"收款地址")}}},[t._v("复制")])],1)]),a.txHash?e("div",{staticClass:"expand-item"},[e("span",{staticClass:"label"},[t._v("交易哈希")]),e("div",{staticClass:"value value-row"},[e("span",{staticClass:"mono-ellipsis",attrs:{title:a.txHash}},[t._v(t._s(a.txHash))]),e("el-button",{attrs:{type:"text",size:"mini",icon:"el-icon-document-copy"},on:{click:function(e){return e.stopPropagation(),t.handleCopy(a.txHash,"交易哈希")}}},[t._v("复制")])],1)]):t._e()])])])}),t.withdrawRows.length?t._e():e("div",{staticClass:"empty"},[t._v("暂无提现记录")])],2)])]),e("el-tab-pane",{attrs:{label:"消费记录",name:"consume"}},[e("div",{staticClass:"list-wrap"},[e("div",{staticClass:"list-header"},[e("span",{staticClass:"list-title"},[t._v("全部消费 ("+t._s(t.consumeRows.length)+")")]),e("el-button",{attrs:{type:"primary",size:"small"},on:{click:t.loadConsume}},[t._v("刷新")])],1),e("div",{directives:[{name:"loading",rawName:"v-loading",value:t.loading.consume,expression:"loading.consume"}],staticClass:"record-list"},[t._l(t.consumeRows,function(a,s){return e("div",{key:t.getRowKey(a,s),staticClass:"record-item",class:t.statusClass(a.status),on:{click:function(e){return t.toggleExpand("consume",a,s)}}},[e("div",{staticClass:"item-main"},[e("div",{staticClass:"item-left"},[e("div",{staticClass:"amount"},[t._v("- "+t._s(t.formatDec6(a.realAmount))+" "+t._s((a.fromSymbol||"USDT").toUpperCase()))]),e("div",{staticClass:"chain"},[t._v(t._s(t.formatChain(a.fromChain)))])]),e("div",{staticClass:"item-right"},[e("div",{staticClass:"status"},[e("el-tag",{attrs:{type:t.getPayStatusType(a.status),size:"small"}},[t._v(t._s(t.getPayStatusText(a.status)))])],1),e("div",{staticClass:"time"},[t._v(t._s(t.formatFullTime(a.createTime||a.time)))])])]),e("div",{directives:[{name:"show",rawName:"v-show",value:t.isExpanded("consume",a,s),expression:"isExpanded('consume', row, idx)"}],staticClass:"expand-panel"},[e("div",{staticClass:"expand-grid"},[e("div",{staticClass:"expand-item"},[e("span",{staticClass:"label"},[t._v("订单号")]),e("span",{staticClass:"value mono"},[t._v(t._s(a.orderId||""))])]),e("div",{staticClass:"expand-item"},[e("span",{staticClass:"label"},[t._v("支付地址")]),e("span",{staticClass:"value mono-ellipsis",attrs:{title:a.fromAddress}},[t._v(t._s(a.fromAddress||""))])]),e("div",{staticClass:"expand-item"},[e("span",{staticClass:"label"},[t._v("收款地址")]),e("span",{staticClass:"value mono-ellipsis",attrs:{title:a.toAddress}},[t._v(t._s(a.toAddress||""))])]),a.txHash?e("div",{staticClass:"expand-item"},[e("span",{staticClass:"label"},[t._v("交易哈希")]),e("span",{staticClass:"value mono-ellipsis",attrs:{title:a.txHash}},[t._v(t._s(a.txHash))])]):t._e()])])])}),t.consumeRows.length?t._e():e("div",{staticClass:"empty"},[t._v("暂无消费记录")])],2)])])],1),e("el-row",[e("el-col",{staticStyle:{display:"flex","justify-content":"center"},attrs:{span:24}},[e("el-pagination",{staticStyle:{margin:"0 auto","margin-top":"10px"},attrs:{"current-page":t.currentPage,"page-sizes":t.pageSizes,"page-size":t.pagination.pageSize,layout:"total, sizes, prev, pager, next, jumper",total:t.total},on:{"size-change":t.handleSizeChange,"current-change":t.handleCurrentChange,"update:currentPage":function(e){t.currentPage=e},"update:current-page":function(e){t.currentPage=e}}})],1)],1)],1)])},e.Yp=[]},5498:function(t,e,a){"use strict";a.r(e),a.d(e,{__esModule:function(){return i.B},default:function(){return l}});var s=a(1341),i=a(6163),o=i.A,r=a(845),n=(0,r.A)(o,s.XX,s.Yp,!1,null,"1152902e",null),l=n.exports},5508:function(t,e){"use strict";e.Yp=e.XX=void 0;e.XX=function(){var t=this,e=t._self._c;return e("div",{staticClass:"content-container"},[e("router-view")],1)},e.Yp=[]},5638:function(t,e,a){"use strict";a.r(e),a.d(e,{__esModule:function(){return i.B},default:function(){return l}});var s=a(9628),i=a(7370),o=i.A,r=a(845),n=(0,r.A)(o,s.XX,s.Yp,!1,null,"c3bf12ce",null),l=n.exports},5656:function(t,e){"use strict";e.Yp=e.XX=void 0;e.XX=function(){var t=this,e=t._self._c;return e("div",{staticClass:"orders-page"},[e("h2",{staticClass:"title"},[t._v("订单列表")]),e("el-tabs",{on:{"tab-click":t.handleTabClick},model:{value:t.active,callback:function(e){t.active=e},expression:"active"}},[e("el-tab-pane",{attrs:{label:"订单进行中",name:"7"}},[e("order-list",{attrs:{items:t.orders[7],"show-checkout":!0,"on-cancel":t.handleCancelOrder,"empty-text":"暂无进行中的订单"}})],1),e("el-tab-pane",{attrs:{label:"订单已完成",name:"8"}},[e("order-list",{attrs:{items:t.orders[8],"show-checkout":!1,"empty-text":"暂无已完成的订单"}})],1)],1)],1)},e.Yp=[]},5705:function(t,e,a){"use strict";var s=a(3999)["default"];Object.defineProperty(e,"__esModule",{value:!0}),e.addShopConfig=h,e.closeShop=d,e.deleteShop=l,e.deleteShopConfig=m,e.getAddShop=o,e.getChainAndCoin=g,e.getMyShop=r,e.getShopConfig=u,e.queryShop=c,e.updateShop=n,e.updateShopConfig=p;var i=s(a(5720));function o(t){return(0,i.default)({url:"/lease/shop/addShop",method:"post",data:t})}function r(t){return(0,i.default)({url:"/lease/shop/getShopByUserEmail",method:"get",params:t})}function n(t){return(0,i.default)({url:"/lease/shop/updateShop",method:"post",data:t})}function l(t){return(0,i.default)({url:"/lease/shop/deleteShop",method:"post",data:{id:t}})}function c(t){return(0,i.default)({url:"/lease/shop/getShopById",method:"post",data:t})}function d(t){return(0,i.default)({url:"/lease/shop/closeShop",method:"post",data:{id:t}})}function u(t){return(0,i.default)({url:"/lease/shop/getShopConfig",method:"post",data:{id:t}})}function h(t){return(0,i.default)({url:"/lease/shop/addShopConfig",method:"post",data:t})}function p(t){return(0,i.default)({url:"/lease/shop/updateShopConfig",method:"post",data:t})}function m(t){return(0,i.default)({url:"/lease/shop/deleteShopConfig",method:"post",data:t})}function g(t){return(0,i.default)({url:"/lease/shop/getChainAndCoin",method:"post",data:t})}},5720:function(t,e,a){"use strict";var s=a(3999)["default"];Object.defineProperty(e,"__esModule",{value:!0}),e["default"]=void 0,a(4114),a(8111),a(7588);var i=s(a(6425)),o=s(a(9526)),r=a(1052),n=s(a(4994)),l=s(a(7465));const c=new Map;function d(t){const{url:e,method:a,params:s,data:i}=t;return[e,a,JSON.stringify(s),JSON.stringify(i)].join("&")}const u=i.default.create({baseURL:"http://10.168.2.220:8888",timeout:1e4}),h=6e4;let p=new Map,m={online:0,offline:0},g=!1;window.addEventListener("online",()=>{const t=Date.now();if(g)return void console.log("[网络] 网络恢复处理已在进行中,忽略重复事件");if(g=!0,t-m.online>3e4){m.online=t;try{window.vm&&window.vm.$message&&(window.vm.$message({message:window.vm.$i18n.t("home.networkReconnected")||"网络已重新连接,正在恢复数据...",type:"success",duration:5e3,showClose:!0}),console.log("[网络] 显示网络恢复提示, 时间:",(new Date).toLocaleTimeString()))}catch(a){console.error("[网络] 显示网络恢复提示失败:",a)}}else console.log("[网络] 抑制重复的网络恢复提示, 间隔过短:",t-m.online+"ms");const e=[];p.forEach(async(a,s)=>{if(t-a.timestamp<=h)try{const t=await u(a.config);e.push(t),a.callback&&"function"===typeof a.callback&&a.callback(t),window.vm&&(a.config.url.includes("getPoolPower")&&t&&t.data?window.dispatchEvent(new CustomEvent("chart-data-updated",{detail:{type:"poolPower",data:t.data}})):a.config.url.includes("getNetPower")&&t&&t.data?window.dispatchEvent(new CustomEvent("chart-data-updated",{detail:{type:"netPower",data:t.data}})):a.config.url.includes("getBlockInfo")&&t&&t.rows&&window.dispatchEvent(new CustomEvent("chart-data-updated",{detail:{type:"blockInfo",data:t.rows}}))),p.delete(s)}catch(i){console.error("重试请求失败:",i),p.delete(s)}else p.delete(s)}),Promise.allSettled(e).then(()=>{if(n.default&&n.default.resetAllLoadingStates(),window.vm){const t=["minerChartLoading","reportBlockLoading","apiPageLoading","MiningLoading","miniLoading","bthLoading","editLoading"];t.forEach(t=>{"undefined"!==typeof window.vm[t]&&(window.vm[t]=!1)}),Object.keys(window.vm).forEach(t=>{t.endsWith("Loading")&&(window.vm[t]=!1)})}window.dispatchEvent(new CustomEvent("network-retry-complete")),setTimeout(()=>{g=!1},5e3)})}),window.addEventListener("offline",()=>{window.vm&&window.vm.$message&&l.default.canShowError("networkOffline")&&window.vm.$message({message:window.vm.$i18n.t("home.networkOffline")||"网络连接已断开,系统将在恢复连接后自动重试",type:"error",duration:5e3,showClose:!0})}),u.defaults.retry=2,u.defaults.retryDelay=2e3,u.defaults.shouldRetry=t=>"Network Error"===t.message||t.message.includes("timeout"),localStorage.setItem("superReportError","");let f=localStorage.getItem("superReportError");window.addEventListener("setItem",()=>{f=localStorage.getItem("superReportError")}),u.interceptors.request.use(t=>{let e;f="",localStorage.setItem("superReportError","");try{e=JSON.parse(localStorage.getItem("token"))}catch(o){console.log(o)}if(e&&(t.headers["Authorization"]=e),console.log(e,"if就覅飞机飞机"),"get"==t.method&&t.data&&(t.params=t.data),"get"===t.method&&t.params){let e=t.url+"?";for(const s of Object.keys(t.params)){const i=t.params[s];var a=encodeURIComponent(s)+"=";if(null!==i&&"undefined"!==typeof i)if("object"===typeof i){for(const t of Object.keys(i))if(null!==i[t]&&"undefined"!==typeof i[t]){let a=s+"["+t+"]",o=encodeURIComponent(a)+"=";e+=o+encodeURIComponent(i[t])+"&"}}else e+=a+encodeURIComponent(i)+"&"}e=e.slice(0,-1),t.params={},t.url=e}const s=d(t);if(c.has(s)){const t=c.get(s);t(),c.delete(s)}return t.cancelToken=new i.default.CancelToken(t=>{c.set(s,t)}),t},t=>{Promise.reject(t)}),u.interceptors.response.use(t=>{const e=d(t.config);c.delete(e);const a=t.data.code||200,s=o.default[a]||t.data.msg||o.default["default"];return 421===a?(localStorage.setItem("cs_disconnect_all",Date.now().toString()),localStorage.removeItem("token"),f=localStorage.getItem("superReportError"),f||(f=421,localStorage.setItem("superReportError",f),r.MessageBox.confirm(window.vm.$i18n.t("user.loginExpired"),window.vm.$i18n.t("user.overduePrompt"),{distinguishCancelAndClose:!0,confirmButtonText:window.vm.$i18n.t("user.login"),cancelButtonText:window.vm.$i18n.t("user.Home"),closeOnClickModal:!1,showClose:!1,type:"warning"}).then(()=>{window.vm.$router.push(`/${window.vm.$i18n.locale}/login`),localStorage.removeItem("token")}).catch(()=>{window.vm.$router.push(`/${window.vm.$i18n.locale}/`),localStorage.removeItem("token")})),Promise.reject("登录状态已过期")):a>=500&&!f?(f=500,localStorage.setItem("superReportError",f),void(0,r.Message)({dangerouslyUseHTMLString:!0,message:s,type:"error",showClose:!0})):200!==a?(r.Notification.error({title:s}),Promise.reject("error")):t.data},t=>{if("ERR_CANCELED"===t.code||t.message&&t.message.includes("canceled")||t.message?.includes("Request aborted"))return new Promise(()=>{});if(t.config){const e=d(t.config);c.delete(e)}let{message:e}=t;if("Network Error"==e||e.includes("timeout"))if(navigator.onLine){if(t.config.__retryCount=t.config.__retryCount||0,t.config.__retryCount{setTimeout(()=>{e(u(t.config))},u.defaults.retryDelay)});console.log(`[请求失败] ${t.config.url} - 已达到最大重试次数`)}else{const e=JSON.stringify({url:t.config.url,method:t.config.method,params:t.config.params,data:t.config.data});let a=null;t.config.url.includes("getPoolPower")?a=t=>{window.vm&&(window.vm.minerChartLoading=!1)}:t.config.url.includes("getBlockInfo")&&(a=t=>{window.vm&&(window.vm.reportBlockLoading=!1)}),p.has(e)||(p.set(e,{config:t.config,timestamp:Date.now(),retryCount:0,callback:a}),console.log("请求已加入断网重连队列:",t.config.url))}return f||(f="error",localStorage.setItem("superReportError",f),l.default.canShowError(e)?"Network Error"==e?(0,r.Message)({message:window.vm.$i18n.t("home.NetworkError"),type:"error",duration:4e3,showClose:!0}):e.includes("timeout")?(0,r.Message)({message:window.vm.$i18n.t("home.requestTimeout"),type:"error",duration:5e3,showClose:!0}):e.includes("Request failed with status code")?(0,r.Message)({message:"系统接口"+e.substr(e.length-3)+"异常",type:"error",duration:5e3,showClose:!0}):(0,r.Message)({message:e,type:"error",duration:5e3,showClose:!0}):console.log("[错误提示] 已抑制重复错误:",e)),Promise.reject(t)});e["default"]=u},5787:function(t,e,a){"use strict";Object.defineProperty(e,"B",{value:!0}),e.A=void 0,a(8111),a(2489);var s=a(6299);e.A={name:"RechargeRecord",data(){return{activeTab:"pending",detailDialogVisible:!1,selectedItem:null,rechargeRecords:[{address:"TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",amount:100,fromSymbol:"USDT",fromChain:"tron",status:2,createTime:"2024-01-15 14:30:25",id:1,txHash:"TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE"},{address:"TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",amount:100,fromSymbol:"USDT",fromChain:"tron",status:2,createTime:"2024-01-15 14:30:25",id:2,txHash:"TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE"},{address:"TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",amount:100,fromSymbol:"USDT",fromChain:"tron",status:2,createTime:"2024-01-15 14:30:25",id:3,txHash:"TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE"}],pagination:{pageNum:1,pageSize:1,total:0,totalPage:0},loading:!1,statusFilter:"",total:0,pageSizes:[10,20,50],currentPage:1}},computed:{pendingRecharges(){return this.rechargeRecords.filter(t=>2===t.status)},successRecharges(){return this.rechargeRecords.filter(t=>1===t.status)},failedRecharges(){return this.rechargeRecords.filter(t=>0===t.status)}},mounted(){this.activeTab="pending",this.statusFilter=2},methods:{async loadRechargeRecords(){this.loading=!0;try{const t={pageNum:this.pagination.pageNum,pageSize:this.pagination.pageSize};""!==this.statusFilter&&(t.status=this.statusFilter);const e=await(0,s.balanceRechargeList)(t);!e||0!==e.code&&200!==e.code||(this.rechargeRecords=e.rows||[],this.pagination.total=e.total||0,this.pagination.totalPage=e.totalPage||0,this.total=e.total||0,console.log("充值记录加载成功:",{records:this.rechargeRecords,pagination:this.pagination}))}catch(t){console.error("加载充值记录失败:",t)}finally{this.loading=!1}},handleTabClick(t){this.activeTab=t.name,"pending"===t.name?this.statusFilter=2:"success"===t.name?this.statusFilter=1:"failed"===t.name&&(this.statusFilter=0),this.pagination.pageNum=1,this.currentPage=1,this.pagination.pageSize=10,this.loadRechargeRecords()},showDetail(t){this.selectedItem=t,this.detailDialogVisible=!0},closeDetail(){this.detailDialogVisible=!1,this.selectedItem=null},getChainName(t){const e={tron:"Tron (TRC20)",ethereum:"Ethereum (ERC20)",bsc:"BSC (BEP20)",polygon:"Polygon (MATIC)"};return e[t]||t},getStatusType(t){const e={0:"danger",1:"success",2:"warning"};return e[t]||"info"},formatAddress(t){return t?t.length>20?`${t.slice(0,10)}...${t.slice(-10)}`:t:""},formatTime(t){if(!t)return"";const e=new Date(t),a=new Date,s=a-e;return s<6e4?"刚刚":s<36e5?`${Math.floor(s/6e4)}分钟前`:s<864e5?`${Math.floor(s/36e5)}小时前`:e.toLocaleDateString()},formatFullTime(t){return t?new Date(t).toLocaleString("zh-CN"):""},copyAddress(t){navigator.clipboard?navigator.clipboard.writeText(t).then(()=>{this.$message({message:"地址已复制到剪贴板",type:"success",showClose:!0})}).catch(()=>{this.fallbackCopyAddress(t)}):this.fallbackCopyAddress(t)},fallbackCopyAddress(t){const e=document.createElement("textarea");e.value=t,document.body.appendChild(e),e.select();try{document.execCommand("copy"),this.$message({message:"地址已复制到剪贴板",type:"success",showClose:!0})}catch(a){console.log("复制失败,请手动复制")}document.body.removeChild(e)},refreshData(){this.loadRechargeRecords()},viewOnExplorer(t,e){const a={tron:`https://tronscan.org/#/transaction/${t}`,ethereum:`https://etherscan.io/tx/${t}`,bsc:`https://bscscan.com/tx/${t}`,polygon:`https://polygonscan.com/tx/${t}`},s=a[e];s?window.open(s,"_blank"):this.$message.error("不支持的区块链网络")},getStatusText(t){const e={0:"充值失败",1:"充值成功",2:"充值中"};return e[t]||"未知状态"},handleSizeChange(t){console.log(`每页 ${t} 条`),this.pagination.pageSize=t,this.pagination.pageNum=1,this.currentPage=1,this.loadRechargeRecords()},handleCurrentChange(t){console.log(`当前页: ${t}`),this.pagination.pageNum=t,this.loadRechargeRecords()}}}},5825:function(t,e){"use strict";e.Yp=e.XX=void 0;e.XX=function(){var t=this,e=t._self._c;return e("div",{staticClass:"product-machine-add"},[e("div",{staticClass:"header"},[e("el-button",{attrs:{type:"text"},on:{click:t.handleBack}},[t._v("返回")]),e("h2",{staticClass:"title"},[t._v("添加出售机器")])],1),e("el-alert",{staticClass:"notice-alert",attrs:{type:"warning","show-icon":"",closable:!1,title:"新增出售机器必须在 M2pool 有挖矿算力记录才能添加出租",description:"建议稳定在 M2pool 矿池挖矿 24 小时之后,再添加出售该机器"}}),e("el-card",{staticClass:"form-card",attrs:{shadow:"never"}},[e("el-form",{ref:"machineForm",attrs:{model:t.form,rules:t.rules,"label-width":"160px",size:"small"}},[e("el-form-item",{attrs:{label:"商品名称"}},[e("el-input",{staticStyle:{width:"50%"},attrs:{disabled:""},model:{value:t.form.productName,callback:function(e){t.$set(t.form,"productName",e)},expression:"form.productName"}})],1),e("el-form-item",{attrs:{label:"矿机型号"}},[e("el-input",{staticStyle:{width:"50%"},attrs:{placeholder:"示例:龍珠",maxlength:20},on:{input:t.handleTypeInput},model:{value:t.form.type,callback:function(e){t.$set(t.form,"type",e)},expression:"form.type"}})],1),e("el-form-item",{attrs:{label:"理论算力",prop:"theoryPower"}},[e("el-input",{staticStyle:{width:"50%"},attrs:{placeholder:"请输入单机理论算力",inputmode:"decimal"},on:{input:function(e){return t.handleNumeric("theoryPower")}},model:{value:t.form.theoryPower,callback:function(e){t.$set(t.form,"theoryPower",e)},expression:"form.theoryPower"}})],1),e("el-form-item",{attrs:{label:"算力单位",prop:"unit"}},[e("el-select",{attrs:{placeholder:"请选择算力单位"},model:{value:t.form.unit,callback:function(e){t.$set(t.form,"unit",e)},expression:"form.unit"}},[e("el-option",{attrs:{label:"KH/S",value:"KH/S"}}),e("el-option",{attrs:{label:"MH/S",value:"MH/S"}}),e("el-option",{attrs:{label:"GH/S",value:"GH/S"}}),e("el-option",{attrs:{label:"TH/S",value:"TH/S"}}),e("el-option",{attrs:{label:"PH/S",value:"PH/S"}})],1)],1),e("el-form-item",{attrs:{label:"最大租赁天数",prop:"maxLeaseDays"}},[e("el-input",{staticStyle:{width:"50%"},attrs:{placeholder:"1-365",inputmode:"numeric"},on:{input:function(e){return t.handleNumeric("maxLeaseDays")}},model:{value:t.form.maxLeaseDays,callback:function(e){t.$set(t.form,"maxLeaseDays",e)},expression:"form.maxLeaseDays"}},[e("template",{slot:"append"},[t._v("天")])],2)],1),e("el-form-item",{attrs:{label:"功耗",prop:"powerDissipation"}},[e("el-input",{staticStyle:{width:"50%"},attrs:{placeholder:"示例:0.01",inputmode:"decimal"},on:{input:function(e){return t.handleNumeric("powerDissipation")}},model:{value:t.form.powerDissipation,callback:function(e){t.$set(t.form,"powerDissipation",e)},expression:"form.powerDissipation"}},[e("template",{slot:"append"},[t._v("kw/h")])],2)],1),e("el-form-item",{attrs:{label:"统一售价",prop:"cost"}},[e("span",{attrs:{slot:"label"},slot:"label"},[t._v(" 统一售价 "),e("el-tooltip",{attrs:{effect:"dark",placement:"top"}},[e("div",{attrs:{slot:"content"},slot:"content"},[t._v(" 卖家最终收款金额 = 机器售价 × 波动率"),e("br"),t._v(" 波动率规则:"),e("br"),t._v(" 1)0% - 5%(包含5%):波动率 = 1(按售价结算)"),e("br"),t._v(" 2)5%以上:波动率 = 实际算力 / 理论算力,且不会超过 1,即最终结算时不会超过机器售价 ")]),e("i",{staticClass:"el-icon-question label-help",attrs:{"aria-label":"帮助",tabindex:"0"}})])],1),e("el-input",{staticStyle:{width:"50%"},attrs:{placeholder:"请输入成本(USDT)",inputmode:"decimal"},on:{input:function(e){return t.handleNumeric("cost")}},model:{value:t.form.cost,callback:function(e){t.$set(t.form,"cost",e)},expression:"form.cost"}},[e("template",{slot:"append"},[t._v("USDT")])],2)],1),e("el-form-item",{attrs:{label:"选择挖矿账户"}},[e("el-select",{attrs:{filterable:"",clearable:"",placeholder:"请选择挖矿账户",loading:t.minersLoading},on:{change:t.handleMinerChange},model:{value:t.selectedMiner,callback:function(e){t.selectedMiner=e},expression:"selectedMiner"}},t._l(t.miners,function(t){return e("el-option",{key:t.user+"_"+t.coin,attrs:{label:t.user+"("+t.coin+")",value:t.user+"|"+t.coin}})}),1)],1),e("el-form-item",{attrs:{label:"选择机器(可多选)"}},[e("el-select",{attrs:{multiple:"",filterable:"","collapse-tags":"",placeholder:"请选择机器",loading:t.machinesLoading,disabled:!t.selectedMiner},model:{value:t.selectedMachines,callback:function(e){t.selectedMachines=e},expression:"selectedMachines"}},t._l(t.machineOptions,function(t){return e("el-option",{key:t.user+"_"+t.miner,attrs:{label:t.miner+"("+t.user+")",value:t.miner}})}),1)],1)],1)],1),t.selectedMachineRows.length?e("el-card",{staticClass:"form-card",attrs:{shadow:"never"}},[e("div",{staticClass:"section-title",attrs:{slot:"header"},slot:"header"},[t._v("已选择机器")]),e("el-table",{staticStyle:{width:"100%"},attrs:{data:t.selectedMachineRows,border:"",stripe:""}},[e("el-table-column",{attrs:{prop:"user",label:"挖矿账户"}}),e("el-table-column",{attrs:{prop:"miner",label:"机器编号"}}),e("el-table-column",{attrs:{prop:"realPower",label:"实际算力(MH/S)"}},[e("template",{slot:"header"},[e("el-tooltip",{attrs:{content:"实际算力为该机器在本矿池过去24H的平均算力",effect:"dark",placement:"top"}},[e("i",{staticClass:"el-icon-question",staticStyle:{"margin-right":"4px",color:"#909399"},attrs:{"aria-label":"帮助",tabindex:"0"}})]),e("span",[t._v("实际算力(MH/S)")])],1)],2),e("el-table-column",{attrs:{label:"功耗(kw/h)","min-width":"120"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("el-input",{staticStyle:{width:"100%"},attrs:{placeholder:"示例:0.01",inputmode:"decimal"},on:{input:function(e){return t.handleRowPowerDissipationInput(a.$index)},blur:function(e){return t.handleRowPowerDissipationBlur(a.$index)}},model:{value:a.row.powerDissipation,callback:function(e){t.$set(a.row,"powerDissipation",e)},expression:"scope.row.powerDissipation"}},[e("template",{slot:"append"},[t._v("kw/h")])],2)]}}],null,!1,2461731706)}),e("el-table-column",{attrs:{label:"理论算力","min-width":"160"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("div",{staticStyle:{display:"flex","align-items":"center",gap:"8px"}},[e("el-input",{staticStyle:{width:"100%"},attrs:{placeholder:"理论算力",inputmode:"decimal"},on:{input:function(e){return t.handleRowTheoryPowerInput(a.$index)},blur:function(e){return t.handleRowTheoryPowerBlur(a.$index)}},model:{value:a.row.theoryPower,callback:function(e){t.$set(a.row,"theoryPower",e)},expression:"scope.row.theoryPower"}}),e("el-select",{staticStyle:{width:"150px"},attrs:{placeholder:"单位"},on:{change:e=>t.handleRowUnitChange(a.$index,e)},model:{value:a.row.unit,callback:function(e){t.$set(a.row,"unit",e)},expression:"scope.row.unit"}},[e("el-option",{attrs:{label:"KH/S",value:"KH/S"}}),e("el-option",{attrs:{label:"MH/S",value:"MH/S"}}),e("el-option",{attrs:{label:"GH/S",value:"GH/S"}}),e("el-option",{attrs:{label:"TH/S",value:"TH/S"}}),e("el-option",{attrs:{label:"PH/S",value:"PH/S"}})],1)],1)]}}],null,!1,2316701192)}),e("el-table-column",{attrs:{label:"售价(USDT)","min-width":"160"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("el-input",{staticStyle:{width:"100%"},attrs:{placeholder:"价格",inputmode:"decimal"},on:{input:function(e){return t.handleRowPriceInput(a.$index)},blur:function(e){return t.handleRowPriceBlur(a.$index)}},model:{value:a.row.price,callback:function(e){t.$set(a.row,"price",e)},expression:"scope.row.price"}},[e("template",{slot:"append"},[t._v("USDT")])],2)]}}],null,!1,3549540243)},[e("template",{slot:"header"},[e("el-tooltip",{attrs:{effect:"dark",placement:"top"}},[e("div",{attrs:{slot:"content"},slot:"content"},[t._v(" 卖家最终收款金额 = 机器售价 × 波动率"),e("br"),t._v(" 波动率规则:"),e("br"),t._v(" 1)0% - 5%(包含5%):波动率 = 1(按售价结算)"),e("br"),t._v(" 2)5%以上:波动率 = 实际算力 / 理论算力,且不会超过 1,即最终结算时不会超过机器售价 ")]),e("i",{staticClass:"el-icon-question label-help",attrs:{"aria-label":"帮助",tabindex:"0"}})]),e("span",[t._v("售价(USDT)")])],1)],2),e("el-table-column",{attrs:{label:"最大租赁天数(天)","min-width":"120"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("el-input",{staticStyle:{width:"100%"},attrs:{placeholder:"1-365",inputmode:"numeric"},on:{input:function(e){return t.handleRowMaxLeaseDaysInput(a.$index)},blur:function(e){return t.handleRowMaxLeaseDaysBlur(a.$index)}},model:{value:a.row.maxLeaseDays,callback:function(e){t.$set(a.row,"maxLeaseDays",e)},expression:"scope.row.maxLeaseDays"}},[e("template",{slot:"append"},[t._v("天")])],2)]}}],null,!1,309661603)}),e("el-table-column",{attrs:{label:"矿机型号"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("el-input",{staticStyle:{width:"100%"},attrs:{placeholder:"矿机型号",maxlength:20},on:{input:function(e){return t.handleRowTypeInput(a.$index)},blur:function(e){return t.handleRowTypeBlur(a.$index)}},model:{value:a.row.type,callback:function(e){t.$set(a.row,"type",e)},expression:"scope.row.type"}})]}}],null,!1,1752667191)}),e("el-table-column",{attrs:{label:"上下架状态",width:"100"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("el-button",{attrs:{type:0===a.row.state?"success":"info",size:"mini"},on:{click:function(e){return t.handleToggleState(a.$index)}}},[t._v(" "+t._s(0===a.row.state?"上架":"下架")+" ")])]}}],null,!1,875649026)})],1)],1):t._e(),e("div",{staticClass:"actions"},[e("el-button",{on:{click:t.handleBack}},[t._v("取消")]),e("el-button",{attrs:{type:"primary",loading:t.saving},on:{click:t.handleSave}},[t._v("确认添加")])],1),e("el-dialog",{attrs:{title:"请确认上架信息",visible:t.confirmVisible,width:"400px"},on:{"update:visible":function(e){t.confirmVisible=e}}},[e("div",[e("p",[t._v("请仔细确认已选择机器列表、价格及相关参数定义。")]),e("p",{staticStyle:{"text-align":"left"}},[t._v("机器上架后,一经售出,在机器出售期间不能修改价格及机器参数。")])]),e("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[e("el-button",{on:{click:function(e){t.confirmVisible=!1}}},[t._v("取消")]),e("el-button",{attrs:{type:"primary",loading:t.saving},on:{click:t.doSubmit}},[t._v("确认上架已选择机器")])],1)])],1)},e.Yp=[]},5844:function(t,e,a){"use strict";var s=a(3999)["default"];Object.defineProperty(e,"__esModule",{value:!0}),e.addCart=o,e.deleteBatchGoods=n,e.deleteBatchGoodsForIsDelete=l,e.getGoodsList=r;var i=s(a(5720));function o(t){return(0,i.default)({url:"/lease/shopping/cart/addGoods",method:"post",data:t})}function r(t){return(0,i.default)({url:"/lease/shopping/cart/getGoodsList",method:"post",data:t})}function n(t){return(0,i.default)({url:"/lease/shopping/cart/deleteBatchGoods",method:"post",data:t})}function l(t){return(0,i.default)({url:"/lease/shopping/cart/deleteBatchGoodsForIsDelete",method:"post",data:t})}},5912:function(t,e){"use strict";e.Yp=e.XX=void 0;e.XX=function(){var t=this,e=t._self._c;return e("div",{staticClass:"panel"},[e("h2",{staticClass:"panel-title"},[t._v("我的店铺")]),e("div",{staticClass:"panel-body"},[e("el-card",{staticClass:"guide-card",staticStyle:{"margin-bottom":"16px"},attrs:{shadow:"never"}},[e("div",{staticClass:"guide-header",attrs:{slot:"header"},slot:"header"},[t._v("店铺层级说明")]),e("div",{staticClass:"guide-content"},[e("p",{staticClass:"hierarchy"},[t._v("层级结构:店铺 → 商品 → 出售机器")]),e("ol",{staticClass:"guide-steps"},[e("li",[e("b",[t._v("店铺(唯一)")]),t._v(":每个用户在平台"),e("strong",[t._v("仅能创建一个店铺")]),t._v("。创建成功后, 请在本页点击 "),e("b",[t._v("钱包绑定")]),t._v(",配置自己的收款地址(支持不同链与币种)。 ")]),e("li",[e("b",[t._v("商品")]),t._v(":完成钱包绑定后,即可在“我的店铺”页面 "),e("b",[t._v("创建商品")]),t._v("。 商品可按 "),e("b",[t._v("币种")]),t._v(" 进行分类管理,创建的商品会在商城对买家展示。 商品可理解为“不同算法、币种的机器集合分类”。 ")]),e("li",[e("b",[t._v("出售机器")]),t._v(":创建商品后,请进入 "),e("b",[t._v("商品列表")]),t._v(" 为该商品 "),e("b",[t._v("添加出售机器明细")]),t._v("。 必须添加出售机器,否则买家无法下单。买家点击某个商品后,会看到该商品下的机器明细并进行选购。 ")])]),e("div",{staticClass:"guide-note"},[t._v("提示:建议先创建店铺 → 完成钱包绑定 → 创建商品 → 添加出售机器的顺序,避免漏配导致无法收款或无法下单。")])])]),t.loaded&&t.hasShop?e("el-card",{staticClass:"shop-card",attrs:{shadow:"hover"}},[e("div",{staticClass:"shop-row"},[e("div",{staticClass:"shop-cover"},[e("img",{attrs:{src:t.shop.image||t.defaultCover,alt:"店铺封面"}})]),e("div",{staticClass:"shop-info"},[e("div",{staticClass:"shop-title"},[e("span",{staticClass:"name"},[t._v(t._s(t.shop.name||"未命名店铺"))]),e("el-tag",{attrs:{size:"small",type:t.shopStateTagType}},[t._v(" "+t._s(t.shopStateText)+" ")])],1),e("div",{staticClass:"desc"},[t._v(t._s(t.shop.description||"这家店还没有描述~"))]),e("div",{staticClass:"actions"},[e("el-button",{attrs:{size:"small",type:"primary"},on:{click:t.handleOpenEdit}},[t._v("修改店铺")]),e("el-button",{attrs:{size:"small",type:"warning"},on:{click:t.handleToggleShop}},[t._v(" "+t._s(2===t.shop.state?"开启店铺":"关闭店铺")+" ")]),e("el-button",{attrs:{size:"small",type:"danger"},on:{click:t.handleDelete}},[t._v("删除店铺")]),e("el-button",{attrs:{size:"small",type:"success"},on:{click:t.handleAddProduct}},[t._v("新增商品")]),e("el-button",{attrs:{size:"small",type:"success"},on:{click:t.handleWalletBind}},[t._v("钱包绑定")])],1)])])]):t._e(),t.loaded&&t.hasShop?e("el-card",{staticClass:"shop-config-card",staticStyle:{"margin-top":"16px"},attrs:{shadow:"never"}},[e("div",{staticClass:"clearfix",attrs:{slot:"header"},slot:"header"},[e("span",[t._v("已绑定钱包")])]),e("el-table",{staticStyle:{width:"100%"},attrs:{data:t.shopConfigs,border:""}},[e("el-table-column",{attrs:{prop:"chain",label:"链",width:"140"}}),e("el-table-column",{attrs:{label:"支付币种"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("div",{staticClass:"coin-list"},[Array.isArray(a.row.children)&&a.row.children.length?t._l(a.row.children,function(a,s){return e("el-tooltip",{key:s,attrs:{content:String(a&&a.payCoin?a.payCoin:"").toUpperCase(),placement:"top"}},[a&&a.image?e("img",{staticClass:"coin-img",attrs:{src:a.image,alt:(a.payCoin||"").toUpperCase()}}):t._e()])}):[t._v(" "+t._s(String(a.row.payCoin||"").toUpperCase())+" ")]],2)]}}],null,!1,569036476)}),e("el-table-column",{attrs:{prop:"payAddress",label:"收款钱包地址","show-overflow-tooltip":""}}),e("el-table-column",{attrs:{label:"操作",width:"180",fixed:"right"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("el-button",{attrs:{type:"text"},on:{click:function(e){return t.handleEditConfig(a.row)}}},[t._v("修改")]),e("el-divider",{attrs:{direction:"vertical"}}),e("el-button",{staticStyle:{color:"#e74c3c"},attrs:{type:"text"},on:{click:function(e){return t.handleDeleteConfig(a.row)}}},[t._v("删除")])]}}],null,!1,2146652355)})],1)],1):t.loaded&&!t.hasShop?e("div",{staticClass:"no-shop"},[e("el-empty",{attrs:{description:"暂无店铺"}},[e("el-button",{attrs:{type:"primary"},on:{click:t.handleGoNew}},[t._v("新建店铺")])],1)],1):e("el-empty",{attrs:{description:"正在加载店铺信息..."}}),e("el-dialog",{attrs:{title:"修改店铺",visible:t.visibleEdit,width:"520px"},on:{"update:visible":function(e){t.visibleEdit=e}}},[e("div",{staticClass:"row"},[e("label",{staticClass:"label"},[t._v("店铺名称")]),e("el-input",{attrs:{placeholder:"请输入店铺名称",maxlength:30,"show-word-limit":""},model:{value:t.editForm.name,callback:function(e){t.$set(t.editForm,"name",e)},expression:"editForm.name"}})],1),e("div",{staticClass:"row"},[e("label",{staticClass:"label"},[t._v("店铺描述")]),e("el-input",{attrs:{type:"textarea",rows:3,placeholder:"请输入描述",maxlength:300,"show-word-limit":""},model:{value:t.editForm.description,callback:function(e){t.$set(t.editForm,"description",e)},expression:"editForm.description"}})],1),e("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[e("el-button",{on:{click:function(e){t.visibleEdit=!1}}},[t._v("取消")]),e("el-button",{attrs:{type:"primary"},on:{click:t.submitEdit}},[t._v("保存")])],1)]),e("el-dialog",{attrs:{title:"修改配置",visible:t.visibleConfigEdit,width:"560px"},on:{"update:visible":function(e){t.visibleConfigEdit=e}}},[e("div",{staticClass:"row"},[e("label",{staticClass:"label"},[t._v("支付链")]),e("el-input",{attrs:{placeholder:"-",disabled:""},model:{value:t.configForm.chainLabel,callback:function(e){t.$set(t.configForm,"chainLabel",e)},expression:"configForm.chainLabel"}})],1),e("div",{staticClass:"row"},[e("label",{staticClass:"label"},[t._v("支付币种")]),e("el-select",{staticClass:"input",attrs:{size:"middle",multiple:"","collapse-tags":"",filterable:"",placeholder:"请选择币种"},model:{value:t.configForm.payCoins,callback:function(e){t.$set(t.configForm,"payCoins",e)},expression:"configForm.payCoins"}},t._l(t.editCoinOptions,function(t){return e("el-option",{key:t.value,attrs:{label:t.label,value:t.value}})}),1)],1),e("div",{staticClass:"row"},[e("label",{staticClass:"label"},[t._v("已选择币种")]),e("div",{staticClass:"selected-coin-list"},[t._l(t.selectedCoinLabels,function(a){return e("el-tag",{key:a,attrs:{type:"warning",effect:"light",closable:""},on:{close:function(e){return t.removeSelectedCoin(a)}}},[t._v(t._s(a))])}),t.selectedCoinLabels.length?t._e():e("span",{staticStyle:{color:"#c0c4cc"}},[t._v("未选择")])],2)]),e("div",{staticClass:"row"},[e("label",{staticClass:"label"},[t._v("钱包地址")]),e("el-input",{attrs:{placeholder:"请输入钱包地址"},model:{value:t.configForm.payAddress,callback:function(e){t.$set(t.configForm,"payAddress",e)},expression:"configForm.payAddress"}})],1),e("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[e("el-button",{on:{click:function(e){t.visibleConfigEdit=!1}}},[t._v("取消")]),e("el-button",{attrs:{type:"primary"},on:{click:t.submitConfigEdit}},[t._v("确认修改")])],1)])],1)])},e.Yp=[]},5952:function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.updateQuantity=e.removeFromCart=e.readCart=e["default"]=e.computeSummary=e.clearCart=e.addToCart=void 0,a(8111),a(2489),a(1701),a(8237);const s="power_leasing_cart_v1",i=()=>{try{const t=window.localStorage.getItem(s);if(!t)return[];const e=JSON.parse(t);return Array.isArray(e)?e.filter(Boolean):[]}catch(t){return console.error("[cartManager] readCart error:",t),[]}};e.readCart=i;const o=t=>{try{window.localStorage.setItem(s,JSON.stringify(t));try{const e=t.reduce((t,e)=>t+Number(e.quantity||0),0);window.dispatchEvent(new CustomEvent("cart-updated",{detail:{count:e}}))}catch(e){}}catch(a){console.error("[cartManager] writeCart error:",a)}},r=t=>{if(!t||!t.id)return i();const e=i(),a=e.findIndex(e=>e.id===t.id);if(a>=0){const s=[...e];return s[a]={...s[a],quantity:Math.max(1,Number(s[a].quantity||0)+Number(t.quantity||1))},o(s),s}const s=[...e,{...t,quantity:Math.max(1,Number(t.quantity||1))}];return o(s),s};e.addToCart=r;const n=(t,e)=>{const a=i(),s=a.map(a=>a.id===t?{...a,quantity:Math.max(1,Number(e)||1)}:a);return o(s),s};e.updateQuantity=n;const l=t=>{const e=i(),a=e.filter(e=>e.id!==t);return o(a),a};e.removeFromCart=l;const c=()=>(o([]),[]);e.clearCart=c;const d=()=>{const t=i(),e=t.reduce((t,e)=>t+Number(e.quantity||0),0),a=t.reduce((t,e)=>t+Number(e.quantity||0)*Number(e.price||0),0);return{totalQuantity:e,totalPrice:a}};e.computeSummary=d;e["default"]={readCart:i,addToCart:r,updateQuantity:n,removeFromCart:l,clearCart:c,computeSummary:d}},6067:function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.mainNavigation=e.getPageTitle=e.getPageDescription=e.getBreadcrumb=e["default"]=e.checkRoutePermission=e.breadcrumbConfig=void 0,a(8111),a(3579);const s=e.mainNavigation=[{path:"/productList",name:"商城",icon:"🛍️",description:"浏览所有商品"},{path:"/cart",name:"购物车",icon:"🛒",description:"管理购物车商品"},{path:"/account",name:"个人中心",icon:"👤",description:"管理个人资料和店铺"}],i=e.breadcrumbConfig={"/productList":["首页","商品列表"],"/product":["首页","商品列表","商品详情"],"/cart":["首页","购物车"],"/checkout":["首页","购物车","订单结算"],"/account":["首页","个人中心"],"/account/wallet":["首页","个人中心","我的钱包"],"/account/shop-new":["首页","个人中心","新增店铺"],"/account/shop-config":["首页","个人中心","店铺配置"],"/account/shops":["首页","个人中心","我的店铺"],"/account/product-new":["首页","个人中心","新增商品"],"/account/products":["首页","个人中心","商品列表"]},o=t=>t.startsWith("/product/")?i["/product"]:i[t]||["首页"];e.getBreadcrumb=o;const r=(t,e=[])=>{if(!t.meta||!t.meta.allAuthority)return!0;const a=t.meta.allAuthority;return!!a.includes("all")||a.some(t=>e.includes(t))};e.checkRoutePermission=r;const n=t=>t.meta&&t.meta.title?`${t.meta.title} - Power Leasing`:"Power Leasing - 电商系统";e.getPageTitle=n;const l=t=>t.meta&&t.meta.description?t.meta.description:"Power Leasing 电商系统 - 专业的电力设备租赁平台";e.getPageDescription=l;e["default"]={mainNavigation:s,breadcrumbConfig:i,getBreadcrumb:o,checkRoutePermission:r,getPageTitle:n,getPageDescription:l}},6163:function(t,e,a){"use strict";Object.defineProperty(e,"B",{value:!0}),e.A=void 0,a(4114),a(8111),a(3579);var s=a(9662);e.A={name:"AccountProducts",data(){return{loading:!1,searchKeyword:"",tableData:[],pagination:{pageNum:1,pageSize:10,total:0},coinOptions:[],editDialog:{visible:!1,saving:!1,form:null},total:0,userEmail:""}},created(){this.initOptions(),this.fetchTableData()},methods:{initOptions(){try{const{coinList:t}=a(9252);this.coinOptions=Array.isArray(t)?t:[]}catch(t){this.coinOptions=[]}},async fetchMachineInfo(t){const e=await(0,s.getMachineInfo)(t);!e||0!==e.code&&200!==e.code||(this.editDialog.form=e.data,console.log(e.data,"res.data"))},async fetchTableData(){this.loading=!0;try{const e=(this.searchKeyword||"").trim();let a,i;if(e){const t=e.toLowerCase(),s=(this.coinOptions||[]).some(e=>e.value&&String(e.value).toLowerCase()===t||e.label&&String(e.label).toLowerCase()===t);s?a=e:i=e}try{this.userEmail=JSON.parse(localStorage.getItem("leasEmail"))}catch(t){console.log(t)}if(!this.userEmail)return void this.$alert("登录信息异常,请重新返回 m2poll 矿池进入该系统","提示",{confirmButtonText:"确认",center:!0,closeOnClickModal:!1,closeOnPressEscape:!1,showClose:!1,callback:()=>{window.location.href="https://m2pool.com"}});const o={pageNum:this.pagination.pageNum,pageSize:this.pagination.pageSize,coin:a||void 0,algorithm:i||void 0,userEmail:this.userEmail},r=await(0,s.getProductList)(o),n=r?.data?.records||r?.data?.list||r?.rows||r?.list||r?.data||[];this.tableData=Array.isArray(n)?n:[],this.total=r.total,console.log(this.tableData)}catch(t){console.error("获取商品列表失败",t),console.log("获取商品列表失败")}finally{this.loading=!1}},handleSearch(){this.pagination.pageNum=1,this.fetchTableData()},handleReset(){this.searchKeyword="",this.pagination.pageNum=1,this.pagination.pageSize=10,this.fetchTableData()},handleView(t){t&&t.id?this.$router.push(`/account/product-detail/${t.id}`):this.$message({message:"缺少商品ID",type:"warning",showClose:!0})},handleEdit(t){this.editDialog.form={...t},this.editDialog.visible=!0},async handleSaveEdit(){if(this.editDialog.form){this.editDialog.saving=!0;try{const t=t=>"string"===typeof t&&t.trim().length>0,e=String(this.editDialog.form.name||""),a=String(this.editDialog.form.description||"");if(!t(e))return this.$message.warning("名称不能为空或全是空格"),void(this.editDialog.saving=!1);if(!t(a))return this.$message.warning("描述不能为空或全是空格"),void(this.editDialog.saving=!1);this.editDialog.form.name=e.trim(),this.editDialog.form.description=a.trim();const i={id:this.editDialog.form.id,shopId:this.editDialog.form.shopId,name:this.editDialog.form.name,image:this.editDialog.form.image,coin:this.editDialog.form.coin,description:this.editDialog.form.description,state:this.editDialog.form.state},o=await(0,s.updateProduct)(i);!o||0!==o.code&&200!==o.code?this.$message({message:o?.msg||"保存失败",type:"error",showClose:!0}):(this.$message({message:"保存成功",type:"success",showClose:!0}),this.editDialog.visible=!1,this.fetchTableData())}catch(t){console.error("保存商品失败",t),console.log("保存失败")}finally{this.editDialog.saving=!1}}},handleDelete(t){t&&t.id&&this.$confirm("确认删除该商品吗?删除后不可恢复","提示",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"}).then(async()=>{try{const e=await(0,s.deleteProduct)(t.id);!e||0!==e.code&&200!==e.code||(this.$message.success("删除成功"),1===this.tableData.length&&this.pagination.pageNum>1&&(this.pagination.pageNum-=1),this.fetchTableData())}catch(e){console.error("删除商品失败",e),console.log("删除失败")}}).catch(()=>{})},handleSizeChange(t){this.pagination.pageSize=t,this.pagination.pageNum=1,this.fetchTableData()},handleCurrentChange(t){this.pagination.pageNum=t,this.fetchTableData()},handleClear(){this.searchKeyword="",this.pagination.pageNum=1,this.fetchTableData()},handleAddMachine(t){t&&t.id?this.$router.push({path:"/account/product-machine-add",query:{productId:t.id,coin:t.coin,name:t.name}}):this.$message.warning("缺少商品ID")}}}},6278:function(t,e,a){"use strict";t.exports=a.p+"img/commodity.0dddb787.png"},6285:function(t,e){"use strict";e.Yp=e.XX=void 0;e.XX=function(){var t=this,e=t._self._c;return e("div",{staticClass:"panel"},[e("h2",{staticClass:"panel-title page-title"},[t._v("钱包绑定")]),e("div",{directives:[{name:"loading",rawName:"v-loading",value:t.loading,expression:"loading"}],staticClass:"panel-body"},[e("el-form",{staticClass:"config-form",attrs:{model:t.form,"label-width":"120px"}},[e("el-form-item",{attrs:{label:"选择链/币种"}},[e("el-cascader",{staticStyle:{width:"420px"},attrs:{options:t.options,props:t.cascaderProps,"show-all-levels":!1,clearable:"",filterable:""},on:{change:t.handleChange,"expand-change":t.handleExpandChange},scopedSlots:t._u([{key:"default",fn:function({node:a,data:s}){return[e("span",{staticClass:"custom-node",attrs:{"aria-label":"cascader-item",tabindex:"0"},on:{click:function(e){return e.stopPropagation(),t.handleItemClick(a,s)}}},[e("span",{staticClass:"node-label"},[t._v(t._s(s.label))]),a.isLeaf&&a.checked?e("span",{staticClass:"leaf-checked",attrs:{"aria-hidden":"true"}},[t._v("✓")]):t._e()])]}}]),model:{value:t.value,callback:function(e){t.value=e},expression:"value"}})],1),e("el-form-item",{attrs:{label:"已选择币种"}},[e("div",{staticClass:"selected-coins",attrs:{"aria-label":"selected-coins",tabindex:"0"}},[t._l(t.selectedCoins,function(a){return e("el-tag",{key:a,attrs:{type:"warning",effect:"light",closable:"","disable-transitions":""},on:{close:function(e){return t.handleRemoveSelectedCoin(a)}}},[t._v(" "+t._s(a)+" ")])}),0===t.selectedCoins.length?e("span",{staticClass:"placeholder"},[t._v("未选择")]):t._e()],2)]),e("el-form-item",{attrs:{label:"收款钱包地址"}},[e("el-input",{attrs:{placeholder:"请输入"},model:{value:t.form.payAddress,callback:function(e){t.$set(t.form,"payAddress",e)},expression:"form.payAddress"}})],1),e("el-form-item",[e("el-button",{staticStyle:{width:"200px"},attrs:{type:"primary"},on:{click:t.handleSave}},[t._v("确认绑定")])],1)],1)],1)])},e.Yp=[]},6299:function(t,e,a){"use strict";var s=a(3999)["default"];Object.defineProperty(e,"__esModule",{value:!0}),e.addWalletShopConfig=d,e.balanceRechargeList=n,e.balanceWithdrawList=l,e.bindWallet=p,e.getChainAndList=u,e.getRecentlyTransaction=g,e.getShopConfig=h,e.getWalletInfo=o,e.sellerReceiptList=c,e.transactionRecord=m,e.withdrawBalance=r;var i=s(a(5720));function o(t){return(0,i.default)({url:"/lease/user/getWalletInfo",method:"post",data:t})}function r(t){return(0,i.default)({url:"/lease/user/withdrawBalance",method:"post",data:t})}function n(t){return(0,i.default)({url:"/lease/user/balanceRechargeList",method:"post",data:t})}function l(t){return(0,i.default)({url:"/lease/user/balanceWithdrawList",method:"post",data:t})}function c(t){return(0,i.default)({url:"/lease/user/balancePayList",method:"post",data:t})}function d(t){return(0,i.default)({url:"/lease/shop/addShopConfig",method:"post",data:t})}function u(t){return(0,i.default)({url:"/lease/shop/getChainAndList",method:"post",data:t})}function h(t){return(0,i.default)({url:"/lease/shop/getShopConfig",method:"post",data:t})}function p(t){return(0,i.default)({url:"/lease/user/bindWallet",method:"post",data:t})}function m(t){return(0,i.default)({url:"/lease/user/transactionRecord",method:"post",data:t})}function g(t){return(0,i.default)({url:"/lease/user/getRecentlyTransaction",method:"post",data:t})}},6616:function(t,e,a){"use strict";Object.defineProperty(e,"B",{value:!0}),e.A=void 0,a(8111),a(1701),a(3579);var s=a(6299),i=a(6299);e.A={name:"WalletPage",data(){return{walletBalance:0,blockedBalance:0,walletList:[],WalletData:{},rechargeDialogVisible:!1,qrCodeGenerated:!1,withdrawDialogVisible:!1,withdrawLoading:!1,withdrawForm:{toChain:"tron",toSymbol:"USDT",amount:"",toAddress:"",fee:"1.00",googleCode:""},withdrawRules:{toChain:[{required:!0,message:"请选择区块链网络",trigger:"change"}],toSymbol:[{required:!0,message:"请选择提现币种",trigger:"change"}],amount:[{required:!0,message:"请输入提现金额",trigger:"blur"},{validator:this.validateWithdrawAmount,trigger:"blur"}],toAddress:[{required:!0,message:"请输入收款地址",trigger:"blur"},{validator:this.validateAddress,trigger:"blur"}],googleCode:[{required:!0,message:"请输入谷歌验证码",trigger:"blur"},{validator:this.validateGoogleCode,trigger:"blur"}]},chainOptions:[{label:"Tron (TRC20)",value:"tron"}],options:[],loading:!1,createDialogVisible:!1,createLoading:!1,createValue:[],tokenOptions:{tron:[{label:"USDT (TRC20)",value:"USDT"}]},recentTransactions:[]}},computed:{availableTokens(){return this.tokenOptions[this.withdrawForm.toChain]||[]},actualAmount(){const t=this.toScaledInt(this.withdrawForm.amount),e=this.toScaledInt(this.withdrawForm.fee);if(!Number.isFinite(t)||!Number.isFinite(e))return"0";const a=t-e;return a<=0?"0":this.formatDec6FromInt(a)},totalBalance(){const t=parseFloat(this.WalletData.walletBalance||this.WalletData.balance||this.walletBalance||0)||0,e=parseFloat(this.WalletData.blockedBalance||this.blockedBalance||0)||0;return(t+e).toFixed(2)},availableWithdrawBalance(){return this.WalletData.walletBalance||this.WalletData.balance||0},displayWithdrawSymbol(){const t=this.WalletData&&(this.WalletData.fromSymbol||this.WalletData.coin||this.withdrawForm.toSymbol)||"";return String(t).toUpperCase()}},mounted(){this.fetchWalletInfo(),this.updateFeeByChain(),this.getChainAndList(),this.fetchRecentlyTransaction()},methods:{displaySymbol(t){const e=t&&(t.fromSymbol||t.toSymbol||t.coin)||"";return String(e).toUpperCase()},openCreateWallet(){this.createDialogVisible=!0,Array.isArray(this.options)&&0!==this.options.length||this.getChainAndList()},async confirmCreateWallet(){const t=this.createValue||[];if(!Array.isArray(t)||t.length<2)return void this.$message.warning("请先选择链与币种");const[e,a]=t;if(e&&a)try{this.createLoading=!0;const t=await(0,i.bindWallet)({chain:e,coin:a});if(t&&(0===t.code||200===t.code)){const e=t.data;if(e){const t=Array.isArray(e)?e[0]||{}:e;this.WalletData=t,this.rechargeDialogVisible=!0,this.qrCodeGenerated=!1,this.$nextTick(()=>{this.generateQRCode()})}this.fetchWalletInfo(),this.createDialogVisible=!1,this.createValue=[]}}catch(s){console.error("获取充值信息失败",s)}finally{this.createLoading=!1}else this.$message.warning("请选择完整的链与币种")},async getChainAndList(){this.loading=!0;const t=await(0,i.getChainAndList)();t&&(0===t.code||200===t.code)&&t.data&&(this.options=t.data),this.loading=!1},async fetchRecentlyTransaction(){try{const t=await(0,s.getRecentlyTransaction)();if(t&&(0===t.code||200===t.code)){const e=Array.isArray(t.data)?t.data:[],a=e.map((t,e)=>{const a=Number(t&&t.amount),s=Number.isFinite(a)?a:0,i=Number(t&&t.type),o=1===i?Math.abs(s):-Math.abs(s),r=1===i?"充值":2===i?"提现":"支付",n=Number(t&&t.status),l={0:"失败",1:"成功",2:"处理中",3:"校验失败"},c={0:"danger",1:"success",2:"warning",3:"danger"};return{id:`${t&&t.updateTime||""}-${e}`,type:r,amount:o,amountText:this.formatDec6(Math.abs(o)),time:this.formatApiTime(t&&t.updateTime),status:n,statusText:l[n]||"-",statusTagType:c[n]||"info"}});this.recentTransactions=a}}catch(t){}},formatApiTime(t){const e=String(t||"");return e?e.replace("T"," ").replace("Z",""):""},formatDec6(t){if(null===t||void 0===t||""===t)return"0";let e=String(t);if(/e/i.test(e)){const a=Number(t);if(!Number.isFinite(a))return"0";e=a.toFixed(20).replace(/\.0+$/,"").replace(/(\.\d*?)0+$/,"$1")}const a=e.match(/^(-?)(\d+)(?:\.(\d+))?$/);if(!a)return e;let s=a[2],i=a[3]||"";return i.length>6&&(i=i.slice(0,6)),i?`${s}.${i}`:s},toScaledInt(t,e=6){if(null===t||void 0===t)return 0;const a=String(t).trim();if(""===a)return 0;const s=new RegExp(`^\\d+(?:\\.(\\d{0,${e}}))?$`),i=a.match(s);if(!i){const t=Number(a);if(!Number.isFinite(t))return 0;const s=Math.pow(10,e);return Math.round(t*s)}const[o,r]=a.split("."),n=(r||"").padEnd(e,"0").slice(0,e),l=Math.pow(10,e);return Number(o)*l+Number(n)},scaledIntToString(t,e=6){const a=t<0?"-":"",s=Math.abs(t),i=Math.pow(10,e),o=Math.floor(s/i),r=String(s%i).padStart(e,"0");return`${a}${o}.${r}`},formatDec6FromInt(t){const e=this.scaledIntToString(t,6);return e.replace(/\.0+$/,"").replace(/(\.\d*?)0+$/,"$1")},async fetchWalletInfo(t){try{const e=await(0,s.getWalletInfo)(t);if(e&&(0===e.code||200===e.code)){const t=e.data;if(Array.isArray(t)){this.walletList=t;const e=t[0]||{};this.walletBalance=e.walletBalance||e.balance||0,this.blockedBalance=e.blockedBalance||0,this.rechargeDialogVisible||(this.WalletData=e)}else t&&"object"===typeof t?(this.walletList=[t],this.walletBalance=t.walletBalance||t.balance||0,this.blockedBalance=t.blockedBalance||0,this.rechargeDialogVisible||(this.WalletData=t)):(this.walletList=[],this.walletBalance=0,this.blockedBalance=0,this.WalletData={})}}catch(e){console.error("获取钱包信息失败:",e)}},async fetchBalanceRechargeList(t={}){try{const e={pageNum:1,pageSize:20,...t};console.log("获取充值记录参数:",e);const a=await(0,s.balanceRechargeList)(e);if(!a||0!==a.code&&200!==a.code)return this.$message({message:a?.msg||"获取充值记录失败",type:"error",showClose:!0}),null;{const t={list:a.data.rows||[],total:a.data.total||0,totalPage:a.data.totalPage||0,currentPage:e.pageNum,pageSize:e.pageSize,status:e.status};return console.log("充值记录获取成功:",t),t}}catch(e){return console.error("获取充值记录失败:",e),null}},async fetchBalanceWithdrawList(t){const e=await(0,s.balanceWithdrawList)(t);!e||0!==e.code&&200!==e.code||(this.balanceWithdrawList=e.data)},handleRecharge(t){t&&"object"===typeof t&&(this.WalletData=t),this.rechargeDialogVisible=!0,this.qrCodeGenerated=!1,this.$nextTick(()=>{this.generateQRCode()})},handleWithdraw(t){if(t){this.WalletData=t;const e=t.fromChain||t.chain||this.withdrawForm.toChain,a=t.fromSymbol||t.coin||this.withdrawForm.toSymbol;this.withdrawForm.toChain=e,this.withdrawForm.toSymbol=a,this.updateFeeByChain()}this.withdrawDialogVisible=!0},copyAddress(t){const e=t||this.WalletData.fromAddress;e?navigator.clipboard?navigator.clipboard.writeText(e).then(()=>{this.$message({message:"钱包地址已复制到剪贴板",type:"success",showClose:!0})}).catch(()=>{this.fallbackCopyAddress(e)}):this.fallbackCopyAddress(e):this.$message({message:"钱包地址不存在",type:"error",showClose:!0})},fallbackCopyAddress(t){const e=document.createElement("textarea");e.value=t,document.body.appendChild(e),e.select();try{document.execCommand("copy"),this.$message({message:"钱包地址已复制到剪贴板",type:"success",showClose:!0})}catch(a){console.log("复制失败,请手动复制")}document.body.removeChild(e)},generateQRCode(){if(!this.qrCodeGenerated)if(this.WalletData.qrcode){const t=this.$refs.qrCodeRef;if(t){t.innerHTML="";const e=document.createElement("img");e.src=`data:image/png;base64,${this.WalletData.qrcode}`,e.alt="USDT充值二维码",e.style.width="160px",e.style.height="160px",e.style.borderRadius="4px",e.onerror=()=>{t.innerHTML='
二维码加载失败
'},t.appendChild(e),this.qrCodeGenerated=!0}}else{const t=this.$refs.qrCodeRef;t&&(t.innerHTML='
暂无二维码数据
')}},onChainChange(){const t=this.tokenOptions[this.withdrawForm.toChain]||[],e=t.some(t=>"USDT"===t.value);this.withdrawForm.toSymbol=e?"USDT":"",this.updateFeeByChain()},updateFeeByChain(){const t=this.WalletData&&(null!=this.WalletData.charge?this.WalletData.charge:this.WalletData.fee);if(null!=t&&""!==t){const e=Number(t);return void(this.withdrawForm.fee=Number.isFinite(e)?e.toFixed(2):String(t))}const e={tron:"1.00",ethereum:"5.00",bsc:"0.50",polygon:"0.10"};this.withdrawForm.fee=e[this.withdrawForm.toChain]||"1.00"},async confirmWithdraw(){this.$refs.withdrawForm.validate(async t=>{if(t){this.withdrawLoading=!0;try{const t=await(0,s.withdrawBalance)({toChain:this.WalletData&&(this.WalletData.fromChain||this.WalletData.chain)||this.withdrawForm.toChain,toSymbol:this.WalletData&&(this.WalletData.fromSymbol||this.WalletData.coin)||this.withdrawForm.toSymbol,amount:parseFloat(this.withdrawForm.amount),toAddress:this.withdrawForm.toAddress,fromAddress:this.WalletData&&this.WalletData.fromAddress||"",code:this.withdrawForm.googleCode});!t||0!==t.code&&200!==t.code||(this.$message({message:"提现申请已提交,请等待处理",type:"success",showClose:!0}),await this.fetchWalletInfo(),this.withdrawDialogVisible=!1,this.resetWithdrawForm())}catch(e){console.error("提现申请失败:",e),console.log("网络错误,请重试")}finally{this.withdrawLoading=!1}}})},resetRechargeForm(){this.qrCodeGenerated=!1,this.fetchWalletInfo()},resetWithdrawForm(){this.withdrawForm={toChain:"tron",toSymbol:"USDT",amount:"",toAddress:"",fee:"1.00",googleCode:""},this.withdrawLoading=!1,this.$nextTick(()=>{this.$refs.withdrawForm&&this.$refs.withdrawForm.clearValidate()})},validateWithdrawAmount(t,e,a){if(!e)return void a(new Error("请输入提现金额"));const s=this.toScaledInt(e);if(!Number.isFinite(s)||s<=0)return void a(new Error("请输入有效的金额"));const i=this.toScaledInt(this.withdrawForm.fee),o=s+i,r=this.WalletData&&(this.WalletData.walletBalance||this.WalletData.balance)||0,n=this.toScaledInt(r);if(o>n){const t=this.formatDec6FromInt(o);return void a(new Error(`提现金额加上手续费(${t} USDT)不能超过钱包余额`))}s<1e6?a(new Error("最小提现金额为1 USDT")):s<=i?a(new Error("提现金额必须大于手续费")):a()},handleGoogleCodeInput(t){this.withdrawForm.googleCode=t.replace(/\D/g,"")},handleAmountInput(t){let e=String(t||"");e=e.replace(/[^0-9.]/g,"");const a=e.indexOf(".");if(-1!==a&&(e=e.slice(0,a+1)+e.slice(a+1).replace(/\./g,"")),-1!==a){const[t,a]=e.split(".");e=t+"."+(a?a.slice(0,6):"")}const s=e.split(".");s[0]&&s[0].length>12&&(s[0]=s[0].slice(0,12)),e=s.join("."),this.withdrawForm.amount=e},validateGoogleCode(t,e,a){e?/^\d{6}$/.test(e)?a():a(new Error("谷歌验证码必须是6位数字")):a(new Error("请输入谷歌验证码"))},validateAddress(t,e,a){const s="string"===typeof e?e.trim():"";if(!s)return void a(new Error("请输入收款地址"));const i=this.withdrawForm.toChain;let o=!1;switch(i){case"tron":o=/^T[A-Za-z1-9]{33}$/.test(s);break;case"ethereum":o=/^0x[a-fA-F0-9]{40}$/.test(s);break;case"bsc":o=/^0x[a-fA-F0-9]{40}$/.test(s);break;case"polygon":o=/^0x[a-fA-F0-9]{40}$/.test(s);break;default:o=s.length>10}o?a():a(new Error("请输入正确的收款地址格式"))},addTransactionRecord(t,e){const a=new Date,s=`${a.getFullYear()}-${String(a.getMonth()+1).padStart(2,"0")}-${String(a.getDate()).padStart(2,"0")} ${String(a.getHours()).padStart(2,"0")}:${String(a.getMinutes()).padStart(2,"0")}`;this.recentTransactions.unshift({id:Date.now(),type:t,amount:e,time:s}),this.recentTransactions.length>10&&(this.recentTransactions=this.recentTransactions.slice(0,10))}}}},6629:function(t,e,a){"use strict";a.r(e),a.d(e,{__esModule:function(){return i.B},default:function(){return l}});var s=a(5141),i=a(2515),o=i.A,r=a(845),n=(0,r.A)(o,s.XX,s.Yp,!1,null,"fa8ab438",null),l=n.exports},6652:function(t,e){"use strict";e.Yp=e.XX=void 0;e.XX=function(){var t=this,e=t._self._c;return e("div",{staticClass:"header-container"},[e("nav",{staticClass:"navbar"},t._l(t.navigation,function(a){return e("router-link",{key:a.path,staticClass:"nav-btn",attrs:{to:a.path,"active-class":"active",title:a.description}},[e("span",{staticClass:"nav-icon"},[t._v(t._s(a.icon))]),e("span",{staticClass:"nav-text"},[t._v(t._s(a.name))]),"/cart"===a.path?e("span",{staticClass:"cart-count"},[t._v("("+t._s(t.cartItemCount)+")")]):t._e()])}),1)])},e.Yp=[]},6804:function(t,e,a){function s(t,e){try{const a=atob(t);let s="";for(let t=0;tsetTimeout(t,2e3));const t={id:`ORDER_${Date.now()}`,items:this.cartItems,total:this.summary.totalPrice,customer:{name:this.form.name,phone:this.form.phone,address:this.form.address,note:this.form.note},createTime:(new Date).toISOString()};console.log("订单提交成功:",t),(0,s.clearCart)(),this.$message.success("订单提交成功!"),setTimeout(()=>{this.$router.push("/productList")},1500)}catch(t){console.error("提交订单失败:",t),console.log("提交订单失败,请稍后重试")}finally{this.submitting=!1}else this.$message.error("请完善收货信息")}}}},7441:function(t,e){"use strict";e.Yp=e.XX=void 0;e.XX=function(){var t=this,e=t._self._c;return e("div",{staticClass:"receipt-page"},[e("div",{staticClass:"card",attrs:{"aria-label":"收款记录",tabindex:"0"}},[t._m(0),t.loading?e("div",{staticClass:"loading"},[e("i",{staticClass:"el-icon-loading",attrs:{"aria-label":"加载中",role:"img"}}),t._v(" 加载中... ")]):e("div",[e("el-table",{ref:"receiptTable",staticStyle:{width:"100%"},attrs:{data:t.rows,border:"",stripe:"",size:"small","row-key":t.getRowKey,"expand-row-keys":t.expandedRowKeys,"row-class-name":t.getRowClassName,"header-cell-style":{textAlign:"left"},"cell-style":{textAlign:"left"}},on:{"row-click":t.handleRowClick,"expand-change":t.handleExpandChange}},[e("el-table-column",{attrs:{type:"expand",width:"46"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("div",{staticClass:"detail-panel"},[e("div",{staticClass:"detail-grid"},[e("div",{staticClass:"detail-item"},[e("span",{staticClass:"detail-label"},[t._v("订单号")]),e("span",{staticClass:"detail-value mono"},[t._v(t._s(a.row.orderId||"-"))])]),e("div",{staticClass:"detail-item"},[e("span",{staticClass:"detail-label"},[t._v("付款链")]),e("span",{staticClass:"detail-value"},[e("span",{staticClass:"badge"},[t._v(t._s(t.formatChain(a.row.fromChain)||"-"))])])]),e("div",{staticClass:"detail-item"},[e("span",{staticClass:"detail-label"},[t._v("付款币种")]),e("span",{staticClass:"detail-value"},[e("span",{staticClass:"badge badge-blue"},[t._v(t._s(String(a.row.fromSymbol||a.row.coin||"").toUpperCase()))])])]),e("div",{staticClass:"detail-item detail-item-full"},[e("span",{staticClass:"detail-label"},[t._v("付款地址")]),e("span",{staticClass:"detail-value address"},[e("span",{staticClass:"mono-ellipsis",attrs:{title:a.row.fromAddress}},[t._v(t._s(a.row.fromAddress||"-"))]),a.row.fromAddress?e("el-button",{attrs:{type:"text",size:"mini"},on:{click:function(e){return e.stopPropagation(),t.copy(a.row.fromAddress)}}},[t._v("复制")]):t._e()],1)])])])]}}])}),e("el-table-column",{attrs:{label:"支付时间","min-width":"160"},scopedSlots:t._u([{key:"default",fn:function(e){return[t._v(t._s(t.formatFullTime(e.row.createTime)))]}}])}),e("el-table-column",{attrs:{label:"收款金额(USDT)","min-width":"160",align:"right"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("span",{staticClass:"amount-green"},[t._v("+"+t._s(t.formatTrunc(a.row.realAmount,2)))])]}}])}),e("el-table-column",{attrs:{label:"收款链","min-width":"120"},scopedSlots:t._u([{key:"default",fn:function(e){return[t._v(t._s(t.formatChain(e.row.toChain)))]}}])}),e("el-table-column",{attrs:{label:"收款币种","min-width":"100"},scopedSlots:t._u([{key:"default",fn:function(e){return[t._v(t._s(String(e.row.coin||"").toUpperCase()))]}}])}),e("el-table-column",{attrs:{label:"收款地址","min-width":"260"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("span",{staticClass:"mono-ellipsis",attrs:{title:a.row.toAddress}},[t._v(t._s(a.row.toAddress))]),e("el-button",{attrs:{type:"text",size:"mini"},on:{click:function(e){return e.stopPropagation(),t.copy(a.row.toAddress)}}},[t._v("复制")])]}}])}),e("el-table-column",{attrs:{label:"交易HASH","min-width":"260"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("span",{staticClass:"mono-ellipsis",attrs:{title:a.row.txHash}},[t._v(t._s(a.row.txHash))]),a.row.txHash?e("el-button",{attrs:{type:"text",size:"mini"},on:{click:function(e){return e.stopPropagation(),t.copy(a.row.txHash)}}},[t._v("复制")]):t._e()]}}])}),e("el-table-column",{attrs:{label:"支付状态","min-width":"120"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("el-tag",{attrs:{type:t.getStatusType(a.row.status),size:"small"}},[t._v(t._s(t.getStatusText(a.row.status)))])]}}])}),e("el-table-column",{attrs:{label:"状态更新时间","min-width":"160"},scopedSlots:t._u([{key:"default",fn:function(e){return[t._v(t._s(t.formatFullTime(e.row.updateTime)))]}}])})],1),t.rows.length?t._e():e("div",{staticClass:"empty"},[e("div",{staticClass:"empty-icon"},[t._v("💳")]),e("div",{staticClass:"empty-text"},[t._v("暂无收款记录")])]),e("div",{staticClass:"pagination"},[e("el-pagination",{attrs:{background:"",layout:"prev, pager, next, jumper","current-page":t.page,"page-size":t.pageSize,total:t.total},on:{"update:currentPage":function(e){t.page=e},"update:current-page":function(e){t.page=e},"current-change":t.fetchList}})],1)],1)])])},e.Yp=[function(){var t=this,e=t._self._c;return e("div",{staticClass:"card-header"},[e("h3",{staticClass:"card-title"},[t._v("收款记录")])])}]},7455:function(t,e){"use strict";e.Yp=e.XX=void 0;e.XX=function(){var t=this,e=t._self._c;return e("div",{staticClass:"account-product-detail"},[e("div",{staticClass:"header"},[e("el-button",{attrs:{type:"text"},on:{click:t.handleBack}},[t._v("返回")]),e("h2",{staticClass:"title"},[t._v("商品详情")])],1),e("el-card",{staticClass:"detail-card",attrs:{shadow:"never"}},[e("el-form",{staticClass:"detail-form",attrs:{model:t.product,"label-width":"90px",size:"small"}},[e("el-row",{attrs:{gutter:16}},[e("el-col",{attrs:{span:12}},[e("el-form-item",{attrs:{label:"商品ID"}},[e("el-input",{attrs:{value:t.product&&t.product.id,disabled:""}})],1)],1),e("el-col",{attrs:{span:12}},[e("el-form-item",{attrs:{label:"店铺ID"}},[e("el-input",{attrs:{value:t.product&&t.product.shopId,disabled:""}})],1)],1),e("el-col",{attrs:{span:12}},[e("el-form-item",{attrs:{label:"名称"}},[e("el-input",{attrs:{value:t.product&&t.product.name,disabled:""}})],1)],1),e("el-col",{attrs:{span:12}},[e("el-form-item",{attrs:{label:"币种"}},[e("el-input",{attrs:{value:t.product&&t.product.coin,disabled:""}})],1)],1),e("el-col",{attrs:{span:12}},[e("el-form-item",{attrs:{label:"算法"}},[e("el-input",{attrs:{value:t.product&&t.product.algorithm,disabled:""}})],1)],1),e("el-col",{attrs:{span:12}},[e("el-form-item",{attrs:{label:"价格范围"}},[e("el-input",{attrs:{value:t.product&&t.product.priceRange,disabled:""}})],1)],1),e("el-col",{attrs:{span:12}},[e("el-form-item",{attrs:{label:"类型"}},[e("el-input",{attrs:{value:t.product&&(1===t.product.type?"算力套餐":"挖矿机器"),disabled:""}})],1)],1),e("el-col",{attrs:{span:12}},[e("el-form-item",{attrs:{label:"状态"}},[e("el-input",{attrs:{value:t.product&&(1===t.product.state?"下架":"上架"),disabled:""}})],1)],1),e("el-col",{attrs:{span:24}},[e("el-form-item",{attrs:{label:"描述"}},[e("el-input",{attrs:{type:"textarea",rows:3,value:t.product&&t.product.description,disabled:""}})],1)],1)],1)],1)],1),e("el-card",{directives:[{name:"loading",rawName:"v-loading",value:t.updateLoading,expression:"updateLoading"}],staticClass:"detail-card",attrs:{shadow:"never"}},[e("div",{staticClass:"section-title",attrs:{slot:"header"},slot:"header"},[t._v("机器组合")]),t.machineList&&t.machineList.length?e("div",[e("el-table",{staticStyle:{width:"100%"},attrs:{data:t.machineList,border:"",stripe:""}},[e("el-table-column",{attrs:{prop:"user",label:"挖矿账户","min-width":"80"}}),e("el-table-column",{attrs:{prop:"id",label:"矿机ID","min-width":"60"}}),e("el-table-column",{attrs:{prop:"miner",label:"机器编号","min-width":"100"}}),e("el-table-column",{attrs:{label:"实际算力",width:"100"},scopedSlots:t._u([{key:"default",fn:function(e){return[t._v(t._s(e.row.computingPower)+" "+t._s(e.row.unit||""))]}}],null,!1,881627289)},[e("template",{slot:"header"},[e("el-tooltip",{attrs:{content:"实际算力为该机器在本矿池过去24H的平均算力",effect:"dark",placement:"top"}},[e("i",{staticClass:"el-icon-question label-help",attrs:{"aria-label":"帮助",tabindex:"0"}})]),e("span",[t._v("实际算力")])],1)],2),e("el-table-column",{attrs:{label:"理论算力","min-width":"140"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("el-input",{class:{"changed-input":t.isCellChanged(a.row,"theoryPower")},staticStyle:{"max-width":"260px"},attrs:{size:"small",inputmode:"decimal",disabled:t.isRowDisabled(a.row)},on:{input:function(e){return t.handleTheoryPowerInput(a.$index)},blur:function(e){return t.handleTheoryPowerBlur(a.$index)}},model:{value:a.row.theoryPower,callback:function(e){t.$set(a.row,"theoryPower",e)},expression:"scope.row.theoryPower"}},[e("template",{slot:"append"},[t._v(t._s(a.row.unit||""))])],2)]}}],null,!1,2336321065)}),e("el-table-column",{attrs:{label:"功耗(kw/h)","min-width":"140"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("el-input",{class:{"changed-input":t.isCellChanged(a.row,"powerDissipation")},staticStyle:{"max-width":"260px"},attrs:{size:"small",inputmode:"decimal",disabled:t.isRowDisabled(a.row)},on:{input:function(e){return t.handleNumericCell(a.$index,"powerDissipation")},blur:function(e){return t.handlePowerDissipationBlur(a.$index)}},model:{value:a.row.powerDissipation,callback:function(e){t.$set(a.row,"powerDissipation",e)},expression:"scope.row.powerDissipation"}},[e("template",{slot:"append"},[t._v("kw/h")])],2)]}}],null,!1,2811749390)}),e("el-table-column",{attrs:{label:"型号","min-width":"140"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("el-input",{class:{"changed-input":t.isCellChanged(a.row,"type")},staticStyle:{"max-width":"180px"},attrs:{size:"small",placeholder:"矿机型号",maxlength:20,disabled:t.isRowDisabled(a.row)},on:{input:function(e){return t.handleTypeCell(a.$index)}},model:{value:a.row.type,callback:function(e){t.$set(a.row,"type",e)},expression:"scope.row.type"}})]}}],null,!1,3045221146)}),e("el-table-column",{attrs:{label:"售价(USDT)","min-width":"140"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("el-input",{class:{"changed-input":t.isCellChanged(a.row,"price")},staticStyle:{"max-width":"260px"},attrs:{size:"small",inputmode:"decimal",disabled:t.isRowDisabled(a.row)},on:{input:function(e){return t.handleNumericCell(a.$index,"price")},blur:function(e){return t.handlePriceBlur(a.$index)}},model:{value:a.row.price,callback:function(e){t.$set(a.row,"price",e)},expression:"scope.row.price"}},[e("template",{slot:"append"},[t._v("USDT")])],2)]}}],null,!1,2516879139)},[e("template",{slot:"header"},[e("el-tooltip",{attrs:{effect:"dark",placement:"top"}},[e("div",{attrs:{slot:"content"},slot:"content"},[t._v(" 卖家最终收款金额 = 机器售价 × 波动率"),e("br"),t._v(" 波动率规则:"),e("br"),t._v(" 1)0% - 5%(包含5%):波动率 = 1(按售价结算)"),e("br"),t._v(" 2)5%以上:波动率 = 实际算力 / 理论算力,且不会超过 1,即最终结算时不会超过机器售价 ")]),e("i",{staticClass:"el-icon-question label-help",attrs:{"aria-label":"帮助",tabindex:"0"}})]),e("span",[t._v("售价(USDT)")])],1)],2),e("el-table-column",{attrs:{label:"最大租赁天数(天)","min-width":"140"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("el-input",{class:{"changed-input":t.isCellChanged(a.row,"maxLeaseDays")},staticStyle:{"max-width":"260px"},attrs:{size:"small",inputmode:"numeric",disabled:t.isRowDisabled(a.row)},on:{input:function(e){return t.handleMaxLeaseDaysInput(a.$index)},blur:function(e){return t.handleMaxLeaseDaysBlur(a.$index)}},model:{value:a.row.maxLeaseDays,callback:function(e){t.$set(a.row,"maxLeaseDays",e)},expression:"scope.row.maxLeaseDays"}},[e("template",{slot:"append"},[t._v("天")])],2)]}}],null,!1,3414109227)}),e("el-table-column",{attrs:{label:"上下架","min-width":"140"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("el-switch",{attrs:{"active-value":0,"inactive-value":1,"active-text":"上架","inactive-text":"下架",disabled:t.isRowDisabled(a.row)},on:{change:function(e){return t.handleStateChange(a.$index)}},model:{value:a.row.state,callback:function(e){t.$set(a.row,"state",e)},expression:"scope.row.state"}})]}}],null,!1,1620801377)}),e("el-table-column",{attrs:{label:"售出状态","min-width":"100"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("el-tag",{attrs:{type:0===a.row.saleState?"info":1===a.row.saleState?"danger":"warning"}},[t._v(" "+t._s(0===a.row.saleState?"未售出":1===a.row.saleState?"已售出":"售出中")+" ")])]}}],null,!1,1904393654)}),e("el-table-column",{attrs:{label:"操作",fixed:"right","min-width":"120"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("el-button",{staticStyle:{color:"#f56c6c"},attrs:{type:"text",size:"small",disabled:t.isRowDisabled(a.row)},on:{click:function(e){return t.handleDeleteMachine(a.row)}}},[t._v("删除")])]}}],null,!1,979761678)})],1)],1):e("div",{staticClass:"empty-text"},[t._v("暂无组合数据")])]),t.machineList&&t.machineList.length?e("div",{staticClass:"actions"},[e("el-button",{attrs:{type:"primary"},on:{click:t.handleOpenConfirm}},[t._v("提交修改机器")])],1):t._e(),e("el-dialog",{attrs:{title:"确认提交修改",visible:t.confirmVisible,width:"520px"},on:{"update:visible":function(e){t.confirmVisible=e}}},[e("div",[e("p",[t._v("请仔细确认已选择机器机器组合里的机器价格及相关参数定义。")]),e("p",[t._v("机器修改上架后,一经售出,在机器出售期间不能修改价格及机器参数。")])]),e("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[e("el-button",{on:{click:function(e){t.confirmVisible=!1}}},[t._v("取消")]),e("el-button",{attrs:{type:"primary"},on:{click:t.handleSubmitMachines}},[t._v("确认提交修改")])],1)])],1)},e.Yp=[]},7465:function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e["default"]=void 0,a(8111),a(7588);class s{constructor(){this.recentErrors=new Map,this.throttleTime=3e3,this.errorTypes={"Network Error":"network",timeout:"timeout","Request failed with status code":"statusCode",networkReconnected:"networkStatus",NetworkError:"network"}}getErrorType(t){for(const[e,a]of Object.entries(this.errorTypes))if(t.includes(e))return a;return"unknown"}canShowError(t){const e=this.getErrorType(t),a=Date.now();if(this.recentErrors.has(e)){const t=this.recentErrors.get(e);if(a-t{t-e>this.throttleTime&&this.recentErrors.delete(a)})}}const i=new s;e["default"]=i},7570:function(t,e,a){"use strict";var s=a(3999)["default"];Object.defineProperty(e,"B",{value:!0}),e.A=void 0;var i=s(a(1774));e.A={components:{comHeard:()=>Promise.resolve().then(()=>(0,i.default)(a(9872))),appMain:()=>Promise.resolve().then(()=>(0,i.default)(a(1220)))}}},7692:function(t,e,a){"use strict";var s=a(3999)["default"];Object.defineProperty(e,"B",{value:!0}),e.A=void 0;var i=s(a(4487));e.A={name:"ProductDetail",mixins:[i.default],methods:{getRowMaxLeaseDays(t){const e=t&&(t.maxLeaseDays||t.maxLeaseDay||t.max_lease_days)||365,a=Number(e);return Number.isFinite(a)?a<1?1:a>365?365:Math.floor(a):365},handleLeaseDaysChange(t,e){const a=this.getRowMaxLeaseDays(t);let s=Number(e);Number.isFinite(s)||(s=1),s<1&&(s=1),s>a&&(s=a),s=Math.floor(s),this.$set(t,"leaseTime",s)},formatPayTooltip(t){try{if(!t)return"";const e=(t.payChain||"").toString().trim(),a=(t.payCoin||"").toString().trim();return e&&a?`${e} - ${a}`:e||a||""}catch(e){return console.error("formatPayTooltip error:",e),""}},handlePayIconKeyDown(t){try{if(!t)return;console.debug("[pay-icon-keydown]",t.payChain)}catch(e){console.error("handlePayIconKeyDown error:",e)}}}}},7723:function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.listProducts=e.getProductById=e["default"]=void 0;const a=[{id:"p1001",title:"新能源充电桩(家用)",description:"7kW 单相,智能预约,支持远程监控。",price:1299,image:"https://via.placeholder.com/300x200?text=%E5%85%85%E7%94%B5%E6%A1%A9"},{id:"p1002",title:"工业电能表",description:"三相四线,远程抄表,Modbus 通信。",price:899,image:"https://via.placeholder.com/300x200?text=%E7%94%B5%E8%83%BD%E8%A1%A8"},{id:"p1003",title:"配电柜(入门版)",description:"IP54 防护,内置断路器与防雷模块。",price:5599,image:"https://via.placeholder.com/300x200?text=%E9%85%8D%E7%94%B5%E6%9F%9C"},{id:"p1004",title:"工矿照明灯",description:"120W 高亮,耐腐蚀,适配多场景。",price:329,image:"https://via.placeholder.com/300x200?text=%E7%85%A7%E6%98%8E%E7%81%AF"}],s=async()=>Promise.resolve(a);e.listProducts=s;const i=async t=>{const e=a.find(e=>e.id===t);return Promise.resolve(e)};e.getProductById=i;e["default"]={listProducts:s,getProductById:i}},7802:function(t,e,a){"use strict";a.r(e),a.d(e,{__esModule:function(){return i.B},default:function(){return l}});var s=a(5912),i=a(2570),o=i.A,r=a(845),n=(0,r.A)(o,s.XX,s.Yp,!1,null,"031e6e83",null),l=n.exports},7896:function(t,e,a){"use strict";Object.defineProperty(e,"B",{value:!0}),e.A=void 0,a(4114);var s=a(9662),i=a(9252);e.A={name:"AccountPurchased",data(){return{loading:!1,searchKeyword:"",tableData:[],pagination:{pageNum:1,pageSize:10},coins:i.coinList||[],total:0,currentPage:1}},created(){this.fetchTableData(this.pagination)},methods:{async fetchTableData(t){this.loading=!0;try{const e=await(0,s.getOwnedList)(t);!e||0!==e.code&&200!==e.code||(this.tableData=e.rows,this.total=e.total)}catch(e){console.error("获取已购商品失败",e)}finally{this.loading=!1}},handleSearch(){this.pagination.pageNum=1,this.fetchTableData()},handleReset(){this.searchKeyword="",this.pagination.pageNum=1,this.pagination.pageSize=10,this.fetchTableData(this.pagination)},handleClear(){this.searchKeyword="",this.pagination.pageNum=1,this.fetchTableData(this.pagination)},handleSizeChange(t){this.pagination.pageSize=t,this.pagination.pageNum=1,this.fetchTableData(this.pagination)},handleCurrentChange(t){this.pagination.pageNum=t,this.fetchTableData(this.pagination)},handleView(t){this.$router.push({name:"PurchasedDetail",params:{id:t.id}})},formatDateTime(t){if(!t)return"—";try{const e=String(t);return e.includes("T")?e.replace("T"," "):e}catch(e){return String(t)}}}}},8104:function(t,e,a){"use strict";a.r(e),a.d(e,{__esModule:function(){return i.B},default:function(){return l}});var s=a(7455),i=a(1029),o=i.A,r=a(845),n=(0,r.A)(o,s.XX,s.Yp,!1,null,"dd9b9f4e",null),l=n.exports},8213:function(t,e,a){"use strict";a.r(e),a.d(e,{__esModule:function(){return i.B},default:function(){return l}});var s=a(8285),i=a(2935),o=i.A,r=a(845),n=(0,r.A)(o,s.XX,s.Yp,!1,null,"1572342c",null),l=n.exports},8284:function(t,e,a){"use strict";Object.defineProperty(e,"B",{value:!0}),e.A=void 0,a(8111),a(2489);var s=a(6299);e.A={name:"WithdrawalHistory",data(){return{activeTab:"pending",detailDialogVisible:!1,selectedItem:null,withdrawalRecords:[],pagination:{pageNum:1,pageSize:10,totalPage:0},loading:!1,statusFilter:"",total:0,pageSizes:[10,20,50],currentPage:1}},computed:{pendingWithdrawals(){return this.withdrawalRecords.filter(t=>2===t.status)},successWithdrawals(){return this.withdrawalRecords.filter(t=>1===t.status)},failedWithdrawals(){return this.withdrawalRecords.filter(t=>0===t.status)}},mounted(){this.activeTab="pending",this.statusFilter=2,this.loadWithdrawalRecords()},methods:{async fetchBalanceWithdrawList(t={}){try{const e={pageNum:1,pageSize:20,...t};console.log("获取提现记录参数:",e);const a=await(0,s.balanceWithdrawList)(e);!a||0!==a.code&&200!==a.code?this.$message({message:a?.msg||"获取提现记录失败",type:"error",showClose:!0}):(this.withdrawalRecords=a.rows||[],this.pagination.totalPage=a.totalPage||0,this.total=a.total||0,console.log("提现记录获取成功:",{records:this.withdrawalRecords,pagination:this.pagination}))}catch(e){console.error("获取提现记录失败:",e)}},async loadWithdrawalRecords(){this.loading=!0;try{const t={pageNum:this.pagination.pageNum,pageSize:this.pagination.pageSize};""!==this.statusFilter&&(t.status=this.statusFilter),await this.fetchBalanceWithdrawList(t)}finally{this.loading=!1}},handleTabClick(t){this.activeTab=t.name,"pending"===t.name?this.statusFilter=2:"success"===t.name?this.statusFilter=1:"failed"===t.name&&(this.statusFilter=0),this.currentPage=1,this.pagination.pageSize=10,this.pagination.pageNum=1,this.loadWithdrawalRecords()},showDetail(t){this.selectedItem=t,this.detailDialogVisible=!0},closeDetail(){this.detailDialogVisible=!1,this.selectedItem=null},getChainName(t){const e={tron:"Tron (TRC20)",ethereum:"Ethereum (ERC20)",bsc:"BSC (BEP20)",polygon:"Polygon (MATIC)"};return e[t]||t},getStatusType(t){const e={0:"danger",1:"success",2:"warning"};return e[t]||"info"},formatAddress(t){return t?t.length>20?`${t.slice(0,10)}...${t.slice(-10)}`:t:""},formatTime(t){if(!t)return"";const e=new Date(t),a=new Date,s=a-e;return s<6e4?"刚刚":s<36e5?`${Math.floor(s/6e4)}分钟前`:s<864e5?`${Math.floor(s/36e5)}小时前`:e.toLocaleDateString()},formatFullTime(t){return t?new Date(t).toLocaleString("zh-CN"):""},copyAddress(t){navigator.clipboard?navigator.clipboard.writeText(t).then(()=>{this.$message.success("地址已复制到剪贴板")}).catch(()=>{this.fallbackCopyAddress(t)}):this.fallbackCopyAddress(t)},fallbackCopyAddress(t){const e=document.createElement("textarea");e.value=t,document.body.appendChild(e),e.select();try{document.execCommand("copy"),this.$message.success("地址已复制到剪贴板")}catch(a){this.$message.error("复制失败,请手动复制")}document.body.removeChild(e)},viewOnExplorer(t,e){const a={tron:`https://tronscan.org/#/transaction/${t}`,ethereum:`https://etherscan.io/tx/${t}`,bsc:`https://bscscan.com/tx/${t}`,polygon:`https://polygonscan.com/tx/${t}`},s=a[e];s?window.open(s,"_blank"):this.$message.error("不支持的区块链网络")},refreshData(){this.loadWithdrawalRecords()},getStatusText(t){const e={0:"提现失败",1:"提现成功",2:"提现中"};return e[t]||"未知状态"},handleSizeChange(t){console.log(`每页 ${t} 条`),this.pagination.pageSize=t,this.pagination.pageNum=1,this.currentPage=1,this.loadWithdrawalRecords()},handleCurrentChange(t){console.log(`当前页: ${t}`),this.pagination.pageNum=t,this.loadWithdrawalRecords()}}}},8285:function(t,e){"use strict";e.Yp=e.XX=void 0;e.XX=function(){var t=this,e=t._self._c;return e("div",{directives:[{name:"loading",rawName:"v-loading",value:t.payLoading,expression:"payLoading"}]},[t.safeItems.length?e("el-table",{attrs:{data:t.safeItems,border:"","header-cell-style":{textAlign:"left"},"cell-style":{textAlign:"left"}}},[e("el-table-column",{attrs:{type:"expand",width:"46"},scopedSlots:t._u([{key:"default",fn:function(t){return[e("el-table",{attrs:{data:t.row.orderItemDtoList||[],size:"small",border:"","header-cell-style":{textAlign:"left"},"cell-style":{textAlign:"left"},"row-key":"productMachineId"}},[e("el-table-column",{attrs:{prop:"productMachineId",label:"机器ID","min-width":"120"}}),e("el-table-column",{attrs:{prop:"name",label:"名称","min-width":"160"}}),e("el-table-column",{attrs:{prop:"payCoin",label:"币种","min-width":"100"}}),e("el-table-column",{attrs:{prop:"address",label:"收款地址","min-width":"240"}}),e("el-table-column",{attrs:{prop:"leaseTime",label:"租赁天数","min-width":"100"}}),e("el-table-column",{attrs:{prop:"price",label:"售价(USDT)","min-width":"240"}})],1)]}}])}),e("el-table-column",{attrs:{label:"订单号","min-width":"220"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("span",{staticClass:"value mono"},[t._v(t._s(a.row&&a.row.orderNumber||"—"))])]}}])}),e("el-table-column",{attrs:{label:"创建时间","min-width":"180"},scopedSlots:t._u([{key:"default",fn:function(e){return[t._v(t._s(t.formatDateTime(e.row&&e.row.createTime)))]}}])}),e("el-table-column",{attrs:{label:"商品数","min-width":"100"},scopedSlots:t._u([{key:"default",fn:function(e){return[t._v(t._s(Array.isArray(e.row&&e.row.orderItemDtoList)?e.row.orderItemDtoList.length:0))]}}])}),e("el-table-column",{attrs:{label:"总金额(USDT)","min-width":"140"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("span",{staticClass:"value strong"},[t._v(t._s(null!=(a.row&&a.row.totalPrice)?a.row.totalPrice:"—"))])]}}])}),e("el-table-column",{attrs:{"min-width":"180"},scopedSlots:t._u([{key:"header",fn:function(){return[e("el-tooltip",{attrs:{placement:"top",effect:"dark"}},[e("div",{attrs:{slot:"content"},slot:"content"},[t._v(" 实际支付金额/理论支付金额:"),e("br"),t._v(" 1. 实际支付金额是按照矿机实际算力计算支付金额"),e("br"),t._v(" 2. 理论支付金额是卖家定义出售价格 ")]),e("span",{staticStyle:{display:"inline-flex","align-items":"center",gap:"6px"}},[e("i",{staticClass:"el-icon-question",staticStyle:{color:"#909399"},attrs:{"aria-label":"说明",role:"img"}}),t._v(" 已支付金额(USDT) ")])])]},proxy:!0},{key:"default",fn:function(a){return[e("span",{staticClass:"value strong"},[t._v(t._s(null!=(a.row&&a.row.payAmount)?a.row.payAmount:"—"))])]}}])}),e("el-table-column",{attrs:{label:"待支付金额(USDT)","min-width":"140"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("span",{staticClass:"value strong"},[t._v(t._s(null!=(a.row&&a.row.noPayAmount)?a.row.noPayAmount:"—"))])]}}])}),e("el-table-column",{attrs:{label:"操作","min-width":"280",fixed:"right"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("el-button",{staticStyle:{"margin-right":"8px"},attrs:{size:"mini"},on:{click:function(e){return t.handleGoDetail(a.row)}}},[t._v("详情")]),t.shouldShowActions(a.row)?[e("el-button",{attrs:{type:"primary",size:"mini"},on:{click:function(e){return t.handleCheckout(a.row)}}},[t._v("去结算")])]:t._e()]}}])})],1):e("div",{staticClass:"empty"},[t._v(t._s(t.emptyText))]),e("el-dialog",{attrs:{visible:t.dialogVisible,width:"520px",title:"请扫码支付"},on:{"update:visible":function(e){t.dialogVisible=e}}},[e("div",{staticStyle:{"text-align":"left","margin-bottom":"12px",color:"#666"}},[e("div",{staticStyle:{"margin-bottom":"6px"}},[t._v("总金额(USDT):"),e("b",[t._v(t._s(t.paymentDialog.totalPrice))])]),e("div",{staticStyle:{"margin-bottom":"6px",display:"flex","align-items":"center",gap:"6px"}},[e("el-tooltip",{attrs:{placement:"top",effect:"dark"}},[e("div",{attrs:{slot:"content"},slot:"content"},[t._v(" 实际支付金额/理论支付金额:"),e("br"),t._v(" 1. 实际支付金额是按照矿机实际算力计算支付金额"),e("br"),t._v(" 2. 理论支付金额是卖家定义出售价格 ")]),e("i",{staticClass:"el-icon-question",staticStyle:{color:"#909399"},attrs:{"aria-label":"说明",role:"img"}})]),e("span",[t._v("已支付金额(USDT):")]),e("b",{staticClass:"value strong"},[t._v(t._s(t.paymentDialog.payAmount))])],1),e("div",{staticStyle:{"margin-bottom":"6px"}},[t._v("待支付金额(USDT):"),e("b",{staticClass:"value strong"},[t._v(t._s(t.paymentDialog.noPayAmount))])])]),e("div",{staticStyle:{"text-align":"center"}},[t.paymentDialog.img?e("img",{staticStyle:{width:"180px",height:"180px","margin-top":"18px"},attrs:{src:t.paymentDialog.img,alt:"支付二维码"}}):e("div",{staticStyle:{color:"#666"}},[t._v("未返回支付二维码")])]),e("p",{staticStyle:{"margin-bottom":"6px",color:"red","text-align":"left"}},[t._v("注意:如果已经支付对应金额,不要在重复支付,待系统确认后会自动更新订单状态。因个人原因重复支付导致无法退款,平台不承担任何责任。")]),e("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[e("el-button",{on:{click:function(e){t.dialogVisible=!1}}},[t._v("关闭")])],1)])],1)},e.Yp=[]},8401:function(t,e,a){"use strict";a.r(e),a.d(e,{__esModule:function(){return i.B},default:function(){return l}});var s=a(5656),i=a(460),o=i.A,r=a(845),n=(0,r.A)(o,s.XX,s.Yp,!1,null,"2ad2c7c3",null),l=n.exports},8418:function(t,e){"use strict";e.Yp=e.XX=void 0;e.XX=function(){var t=this,e=t._self._c;return e("div",{directives:[{name:"loading",rawName:"v-loading",value:t.productDetailLoading,expression:"productDetailLoading"}],staticClass:"product-detail"},[t.loading?e("div",{staticClass:"loading"},[e("i",{staticClass:"el-icon-loading",attrs:{"aria-label":"加载中",role:"img"}}),t._v(" 加载中... ")]):t.product?e("div",{staticClass:"detail-container"},[e("h2",{staticStyle:{margin:"10px","text-align":"left","margin-top":"28px"}},[t._v("商品详情-选择矿机")]),e("section",{staticClass:"pay-methods",attrs:{"aria-label":"支付方式"}},[e("div",{staticClass:"pay-label",attrs:{tabindex:"0","aria-label":"支付方式标签"}},[t._v("支付方式:")]),e("ul",{staticClass:"pay-list",attrs:{role:"list","aria-label":"支付方式列表"}},t._l(t.paymentMethodList,function(a,s){return e("li",{key:s,staticClass:"pay-item",attrs:{"aria-label":`支付方式: ${a.payChain}`}},[e("el-tooltip",{attrs:{content:t.formatPayTooltip(a),placement:"top","open-delay":80}},[e("img",{staticClass:"pay-icon",attrs:{src:a.payCoinImage,alt:`${a.payChain} 支付`,title:a.payChain,tabindex:"0",role:"img"},on:{keydown:[function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:(e.preventDefault(),t.handlePayIconKeyDown(a))},function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"space",32,e.key,[" ","Spacebar"])?null:(e.preventDefault(),t.handlePayIconKeyDown(a))}]}})])],1)}),0)]),e("section",{staticClass:"productList"},[e("el-table",{ref:"seriesTable",staticClass:"series-table",staticStyle:{width:"100%"},attrs:{data:t.productListData,"row-key":"id","expand-row-keys":t.expandedRowKeys,"row-class-name":t.handleGetSeriesRowClassName,"header-cell-style":{textAlign:"left"},"cell-style":{textAlign:"left"}},on:{"expand-change":t.handleExpandChange,"row-click":t.handleSeriesRowClick}},[e("el-table-column",{attrs:{type:"expand",width:"46"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("el-table",{ref:"innerTable-"+a.row.id,staticStyle:{width:"100%"},attrs:{data:a.row.productMachines,size:"small","show-header":!0,"row-key":"id","reserve-selection":!1,"header-cell-style":{textAlign:"left"},"cell-style":{textAlign:"left"},"row-class-name":t.handleGetInnerRowClass}},[e("el-table-column",{attrs:{width:"46"},scopedSlots:t._u([{key:"default",fn:function(s){return[e("el-checkbox",{attrs:{disabled:1===s.row.saleState||2===s.row.saleState,title:1===s.row.saleState||2===s.row.saleState?"该机器已售出或售出中,无法选择":""},on:{change:e=>t.handleManualSelect(a.row,s.row,e)},model:{value:s.row._selected,callback:function(e){t.$set(s.row,"_selected",e)},expression:"scope.row._selected"}})]}}],null,!0)}),e("el-table-column",{attrs:{prop:"theoryPower",label:"理论算力","min-width":"160","header-align":"left",align:"left","show-overflow-tooltip":""},scopedSlots:t._u([{key:"default",fn:function(e){return[t._v(t._s(e.row.theoryPower)+" "+t._s(e.row.unit))]}}],null,!0)}),e("el-table-column",{attrs:{label:"实际算力","min-width":"160","header-align":"left",align:"left","show-overflow-tooltip":""},scopedSlots:t._u([{key:"default",fn:function(e){return[t._v(t._s(e.row.computingPower)+" "+t._s(e.row.unit))]}}],null,!0)}),e("el-table-column",{attrs:{prop:"powerDissipation",label:"功耗(kw/h)","min-width":"140","header-align":"left",align:"left"}}),e("el-table-column",{attrs:{prop:"algorithm",label:"算法","min-width":"120","header-align":"left",align:"left"}}),e("el-table-column",{attrs:{prop:"theoryIncome","min-width":"160","header-align":"left",align:"left","show-overflow-tooltip":""},scopedSlots:t._u([{key:"header",fn:function(){return[t._v("单机理论收入(每日) "),e("span",{directives:[{name:"show",rawName:"v-show",value:a.row.productMachines[0].coin,expression:"outer.row.productMachines[0].coin"}]},[t._v("("+t._s(a.row.productMachines[0].coin.toUpperCase())+")")])]},proxy:!0}],null,!0)}),e("el-table-column",{attrs:{prop:"theoryUsdtIncome",label:"单机理论收入(每日/USDT)","min-width":"170","header-align":"left",align:"left"}}),e("el-table-column",{attrs:{prop:"type",label:"矿机型号","header-align":"left",align:"left","min-width":"120"}}),e("el-table-column",{attrs:{label:"最大可租赁(天)","min-width":"140","header-align":"left",align:"left"},scopedSlots:t._u([{key:"default",fn:function(e){return[t._v(t._s(t.getRowMaxLeaseDays(e.row)))]}}],null,!0)}),e("el-table-column",{attrs:{label:"租赁天数(天)","min-width":"150","header-align":"left",align:"left"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("el-input-number",{attrs:{min:1,max:t.getRowMaxLeaseDays(a.row),step:1,precision:0,size:"mini",disabled:1===a.row.saleState||2===a.row.saleState,"controls-position":"right"},on:{change:e=>t.handleLeaseDaysChange(a.row,e)},model:{value:a.row.leaseTime,callback:function(e){t.$set(a.row,"leaseTime",e)},expression:"scope.row.leaseTime"}})]}}],null,!0)}),e("el-table-column",{attrs:{prop:"saleState",label:"售出状态","header-align":"left",align:"left","min-width":"110"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("el-tag",{attrs:{type:0===a.row.saleState?"info":1===a.row.saleState?"danger":"warning"}},[t._v(" "+t._s(0===a.row.saleState?"未售出":1===a.row.saleState?"已售出":"售出中")+" ")])]}}],null,!0)})],1)]}}])}),e("el-table-column",{attrs:{label:"价格 (USDT)","header-align":"left",align:"left","min-width":"120"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("span",{staticClass:"price-strong"},[t._v(t._s(a.row.productMachineRangeGroupDto&&a.row.productMachineRangeGroupDto.price))])]}}])}),e("el-table-column",{attrs:{label:"理论算力范围","min-width":"220","header-align":"left",align:"left","show-overflow-tooltip":""},scopedSlots:t._u([{key:"default",fn:function(e){return[t._v(t._s(e.row.productMachineRangeGroupDto&&e.row.productMachineRangeGroupDto.theoryPowerRange))]}}])}),e("el-table-column",{attrs:{label:"实际算力范围","min-width":"200","header-align":"left",align:"left","show-overflow-tooltip":""},scopedSlots:t._u([{key:"default",fn:function(e){return[t._v(t._s(e.row.productMachineRangeGroupDto&&e.row.productMachineRangeGroupDto.computingPowerRange))]}}])}),e("el-table-column",{attrs:{label:"功耗范围","min-width":"160","header-align":"left",align:"left"},scopedSlots:t._u([{key:"default",fn:function(e){return[t._v(t._s(e.row.productMachineRangeGroupDto&&e.row.productMachineRangeGroupDto.powerRange))]}}])}),e("el-table-column",{attrs:{label:"数量","min-width":"100","header-align":"left",align:"left"},scopedSlots:t._u([{key:"default",fn:function(e){return[t._v(t._s(e.row.productMachineRangeGroupDto&&e.row.productMachineRangeGroupDto.number))]}}])})],1)],1),e("div",{staticStyle:{margin:"18px","text-align":"right"}},[e("el-button",{attrs:{type:"primary",size:"small"},on:{click:t.handleOpenAddToCartDialog}},[t._v("加入购物车")])],1),e("el-dialog",{attrs:{visible:t.confirmAddDialog.visible,width:"80vw",title:`确认加入购物车(共 ${t.confirmAddDialog.items.length} 台)`},on:{"update:visible":function(e){return t.$set(t.confirmAddDialog,"visible",e)}},scopedSlots:t._u([{key:"footer",fn:function(){return[e("el-button",{on:{click:function(e){t.confirmAddDialog.visible=!1}}},[t._v("取消")]),e("el-button",{attrs:{type:"primary"},on:{click:t.handleConfirmAddSelectedToCart}},[t._v("确认加入")])]},proxy:!0}])},[e("div",[e("el-table",{attrs:{data:t.confirmAddDialog.items,height:"360",border:"",stripe:"","header-cell-style":{textAlign:"left"},"cell-style":{textAlign:"left"}}},[e("el-table-column",{attrs:{prop:"theoryPower",label:"理论算力","header-align":"left",align:"left"},scopedSlots:t._u([{key:"default",fn:function(e){return[t._v(t._s(e.row.theoryPower)+" "+t._s(e.row.unit))]}}])}),e("el-table-column",{attrs:{label:"实际算力","header-align":"left",align:"left"},scopedSlots:t._u([{key:"default",fn:function(e){return[t._v(t._s(e.row.computingPower)+" "+t._s(e.row.unit))]}}])}),e("el-table-column",{attrs:{prop:"algorithm",label:"算法",width:"120","header-align":"left",align:"left"}}),e("el-table-column",{attrs:{prop:"powerDissipation",label:"功耗(kw/h)","header-align":"left",align:"left"}}),e("el-table-column",{attrs:{label:"租赁天数(天)","header-align":"left",align:"left"},scopedSlots:t._u([{key:"default",fn:function(e){return[t._v(t._s(Number(e.row.leaseTime||1)))]}}])}),e("el-table-column",{attrs:{prop:"price",label:"单价(USDT)","header-align":"left",align:"left"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("span",{staticClass:"price-strong"},[t._v(t._s(a.row.price))])]}}])})],1)],1)])],1):e("div",{staticClass:"not-found"},[e("h2",[t._v("商品不存在")]),e("p",[t._v("抱歉,您查找的商品不存在或已被删除。")]),e("button",{staticClass:"back-btn",on:{click:t.handleBack}},[t._v("返回商品列表")])])])},e.Yp=[]},8475:function(t,e){"use strict";e.Yp=e.XX=void 0;e.XX=function(){var t=this,e=t._self._c;return e("div",{staticClass:"withdrawal-history-container"},[t._m(0),e("div",{staticClass:"tab-container"},[e("el-tabs",{on:{"tab-click":t.handleTabClick},model:{value:t.activeTab,callback:function(e){t.activeTab=e},expression:"activeTab"}},[e("el-tab-pane",{attrs:{label:"提现中",name:"pending"}},[e("div",{staticClass:"tab-content"},[e("div",{staticClass:"list-header"},[e("span",{staticClass:"list-title"},[t._v("提现中 ("+t._s(t.total)+")")]),e("el-button",{attrs:{type:"primary",size:"small"},on:{click:t.refreshData}},[e("i",{staticClass:"el-icon-refresh"}),t._v(" 刷新 ")])],1),e("div",{directives:[{name:"loading",rawName:"v-loading",value:t.loading,expression:"loading"}],staticClass:"withdrawal-list"},[t._l(t.pendingWithdrawals,function(a){return e("div",{key:a.id,staticClass:"withdrawal-item pending",on:{click:function(e){return t.showDetail(a)}}},[e("div",{staticClass:"item-main"},[e("div",{staticClass:"item-left"},[e("div",{staticClass:"amount"},[t._v(t._s(a.amount)+" "+t._s(a.toSymbol||"USDT"))]),e("div",{staticClass:"chain"},[t._v(t._s(t.getChainName(a.toChain)))])]),e("div",{staticClass:"item-right"},[e("div",{staticClass:"status pending-status"},[e("i",{staticClass:"el-icon-loading"}),t._v(" "+t._s(t.getStatusText(a.status))+" ")]),e("div",{staticClass:"time"},[t._v(t._s(t.formatTime(a.createTime)))])])]),e("div",{staticClass:"item-footer"},[e("div",{staticClass:"footer-left"},[e("span",{staticClass:"address"},[t._v(t._s(t.formatAddress(a.toAddress)))]),a.txHash?e("span",{staticClass:"tx-hash"},[e("i",{staticClass:"el-icon-link"}),t._v(" "+t._s(t.formatAddress(a.txHash))+" ")]):t._e()]),e("i",{staticClass:"el-icon-arrow-right"})])])}),0===t.pendingWithdrawals.length?e("div",{staticClass:"empty-state"},[e("i",{staticClass:"el-icon-document"}),e("p",[t._v("暂无提现中的记录")])]):t._e()],2)])]),e("el-tab-pane",{attrs:{label:"提现成功",name:"success"}},[e("div",{staticClass:"tab-content"},[e("div",{staticClass:"list-header"},[e("span",{staticClass:"list-title"},[t._v("提现成功 ("+t._s(t.total)+")")]),e("el-button",{attrs:{type:"primary",size:"small"},on:{click:t.refreshData}},[e("i",{staticClass:"el-icon-refresh"}),t._v(" 刷新 ")])],1),e("div",{directives:[{name:"loading",rawName:"v-loading",value:t.loading,expression:"loading"}],staticClass:"withdrawal-list"},[t._l(t.successWithdrawals,function(a){return e("div",{key:a.id,staticClass:"withdrawal-item success",on:{click:function(e){return t.showDetail(a)}}},[e("div",{staticClass:"item-main"},[e("div",{staticClass:"item-left"},[e("div",{staticClass:"amount"},[t._v(t._s(a.amount)+" "+t._s(a.toSymbol||"USDT"))]),e("div",{staticClass:"chain"},[t._v(t._s(t.getChainName(a.toChain)))])]),e("div",{staticClass:"item-right"},[e("div",{staticClass:"status success-status"},[e("i",{staticClass:"el-icon-check"}),t._v(" "+t._s(t.getStatusText(a.status))+" ")]),e("div",{staticClass:"time"},[t._v(t._s(t.formatTime(a.createTime)))])])]),e("div",{staticClass:"item-footer"},[e("div",{staticClass:"footer-left"},[e("span",{staticClass:"address"},[t._v(t._s(t.formatAddress(a.toAddress)))]),a.txHash?e("span",{staticClass:"tx-hash"},[e("i",{staticClass:"el-icon-link"}),t._v(" "+t._s(t.formatAddress(a.txHash))+" ")]):t._e()]),e("i",{staticClass:"el-icon-arrow-right"})])])}),0===t.successWithdrawals.length?e("div",{staticClass:"empty-state"},[e("i",{staticClass:"el-icon-document"}),e("p",[t._v("暂无提现成功的记录")])]):t._e()],2)])]),e("el-tab-pane",{attrs:{label:"提现失败",name:"failed"}},[e("div",{staticClass:"tab-content"},[e("div",{staticClass:"list-header"},[e("span",{staticClass:"list-title"},[t._v("提现失败 ("+t._s(t.total)+")")]),e("el-button",{attrs:{type:"primary",size:"small"},on:{click:t.refreshData}},[e("i",{staticClass:"el-icon-refresh"}),t._v(" 刷新 ")])],1),e("div",{directives:[{name:"loading",rawName:"v-loading",value:t.loading,expression:"loading"}],staticClass:"withdrawal-list"},[t._l(t.failedWithdrawals,function(a){return e("div",{key:a.id,staticClass:"withdrawal-item failed",on:{click:function(e){return t.showDetail(a)}}},[e("div",{staticClass:"item-main"},[e("div",{staticClass:"item-left"},[e("div",{staticClass:"amount"},[t._v(t._s(a.amount)+" "+t._s(a.toSymbol||"USDT"))]),e("div",{staticClass:"chain"},[t._v(t._s(t.getChainName(a.toChain)))])]),e("div",{staticClass:"item-right"},[e("div",{staticClass:"status failed-status"},[e("i",{staticClass:"el-icon-close"}),t._v(" "+t._s(t.getStatusText(a.status))+" ")]),e("div",{staticClass:"time"},[t._v(t._s(t.formatTime(a.createTime)))])])]),e("div",{staticClass:"item-footer"},[e("div",{staticClass:"footer-left"},[e("span",{staticClass:"address"},[t._v(t._s(t.formatAddress(a.toAddress)))]),a.txHash?e("span",{staticClass:"tx-hash"},[e("i",{staticClass:"el-icon-link"}),t._v(" "+t._s(t.formatAddress(a.txHash))+" ")]):t._e()]),e("i",{staticClass:"el-icon-arrow-right"})])])}),0===t.failedWithdrawals.length?e("div",{staticClass:"empty-state"},[e("i",{staticClass:"el-icon-document"}),e("p",[t._v("暂无提现失败的记录")])]):t._e()],2)])])],1),e("el-row",[e("el-col",{staticStyle:{display:"flex","justify-content":"center"},attrs:{span:24}},[e("el-pagination",{staticStyle:{margin:"0 auto","margin-top":"10px"},attrs:{"current-page":t.currentPage,"page-sizes":t.pageSizes,"page-size":t.pagination.pageSize,layout:"total, sizes, prev, pager, next, jumper",total:t.total},on:{"size-change":t.handleSizeChange,"current-change":t.handleCurrentChange,"update:currentPage":function(e){t.currentPage=e},"update:current-page":function(e){t.currentPage=e}}})],1)],1)],1),e("el-dialog",{attrs:{title:"提现详情",visible:t.detailDialogVisible,width:"600px"},on:{"update:visible":function(e){t.detailDialogVisible=e},close:t.closeDetail}},[t.selectedItem?e("div",{staticClass:"detail-content"},[e("div",{staticClass:"detail-section"},[e("h3",{staticClass:"section-title"},[t._v("基本信息")]),e("div",{staticClass:"detail-list"},[e("div",{staticClass:"detail-row"},[e("span",{staticClass:"detail-label"},[t._v("提现ID")]),e("span",{staticClass:"detail-value"},[t._v(t._s(t.selectedItem.id))])]),e("div",{staticClass:"detail-row"},[e("span",{staticClass:"detail-label"},[t._v("提现金额")]),e("span",{staticClass:"detail-value amount"},[t._v(t._s(t.selectedItem.amount)+" "+t._s(t.selectedItem.toSymbol||"USDT"))])]),e("div",{staticClass:"detail-row"},[e("span",{staticClass:"detail-label"},[t._v("区块链网络")]),e("span",{staticClass:"detail-value"},[t._v(t._s(t.getChainName(t.selectedItem.toChain)))])]),e("div",{staticClass:"detail-row"},[e("span",{staticClass:"detail-label"},[t._v("提现状态")]),e("span",{staticClass:"detail-value"},[e("el-tag",{attrs:{type:t.getStatusType(t.selectedItem.status)}},[t._v(" "+t._s(t.getStatusText(t.selectedItem.status))+" ")])],1)])])]),e("div",{staticClass:"detail-section"},[e("h3",{staticClass:"section-title"},[t._v("地址信息")]),e("div",{staticClass:"detail-list"},[e("div",{staticClass:"detail-row"},[e("span",{staticClass:"detail-label"},[t._v("收款地址")]),e("div",{staticClass:"address-container"},[e("span",{staticClass:"detail-value address"},[t._v(t._s(t.selectedItem.toAddress))]),e("el-button",{attrs:{type:"text",size:"small"},on:{click:function(e){return t.copyAddress(t.selectedItem.toAddress)}}},[t._v(" 复制 ")])],1)]),e("div",{staticClass:"detail-row"},[e("span",{staticClass:"detail-label"},[t._v("交易哈希")]),e("div",{staticClass:"address-container"},[e("span",{staticClass:"detail-value address"},[t._v(t._s(t.selectedItem.txHash))]),t.selectedItem.txHash?e("el-button",{attrs:{type:"text",size:"small"},on:{click:function(e){return t.copyAddress(t.selectedItem.txHash)}}},[t._v(" 复制 ")]):t._e()],1)])])]),e("div",{staticClass:"detail-section"},[e("h3",{staticClass:"section-title"},[t._v("时间信息")]),e("div",{staticClass:"detail-list"},[e("div",{staticClass:"detail-row"},[e("span",{staticClass:"detail-label"},[t._v("提现时间")]),e("span",{staticClass:"detail-value"},[t._v(t._s(t.formatFullTime(t.selectedItem.createTime)))])]),t.selectedItem.updateTime?e("div",{staticClass:"detail-row"},[e("span",{staticClass:"detail-label"},[t._v("完成时间")]),e("span",{staticClass:"detail-value"},[t._v(t._s(t.formatFullTime(t.selectedItem.updateTime)))])]):t._e()])])]):t._e(),e("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[e("el-button",{on:{click:t.closeDetail}},[t._v("关闭")])],1)])],1)},e.Yp=[function(){var t=this,e=t._self._c;return e("div",{staticClass:"page-header"},[e("h1",{staticClass:"page-title"},[t._v("提现记录")]),e("p",{staticClass:"page-subtitle"},[t._v("查看您的提现申请和交易状态")])])}]},8549:function(t,e,a){"use strict";a.r(e),a.d(e,{__esModule:function(){return i.B},default:function(){return l}});var s=a(6900),i=a(7896),o=i.A,r=a(845),n=(0,r.A)(o,s.XX,s.Yp,!1,null,"3f914c01",null),l=n.exports},8732:function(t,e,a){"use strict";Object.defineProperty(e,"B",{value:!0}),e.A=void 0,a(4114),a(8111),a(2489),a(7588),a(1701),a(8237),a(3579),a(7642),a(8004),a(3853),a(5876),a(2475),a(5024),a(1698);var s=a(5844),i=a(4180);e.A={name:"Cart",data(){return{loading:!1,shops:[],groups:[],selectedGroups:[],selectedMachinesMap:{},confirmDialog:{visible:!1,items:[],count:0,total:0},expandedGroupKeys:[],expandedShopKeys:[],creatingOrder:!1,successDialog:{visible:!1},noticeDialog:{visible:!1,checked:!1,countdown:5},noticeTimer:null,pendingCheckoutShop:null,googleCodeDialog:{visible:!1,code:"",error:"",loading:!1},options:[],payDialog:{visible:!1,value:[],loading:!1},selectedChain:"",selectedCoin:"",selectedPrice:0,clearOffLoading:!1,settlementSuccessfulVisible:!1}},computed:{isAllSelected(){return this.selectedGroups.length&&this.selectedGroups.length===this.groups.length},isCartEmpty(){const t=Array.isArray(this.shops)&&this.shops.length>0,e=Array.isArray(this.groups)&&this.groups.length>0;return!t&&!e},selectedMachineCount(){return Object.values(this.selectedMachinesMap).reduce((t,e)=>t+(e?e.size:0),0)},selectedTotal(){let t=0;const e=e=>{const a=this.selectedMachinesMap[e.id],s=Array.isArray(e.productMachineDtoList)?e.productMachineDtoList:[];s.forEach(e=>{a&&a.has(e.id)&&(t+=Number(e.price||0)*Number(e.leaseTime||1))})};return Array.isArray(this.groups)&&this.groups.length?this.groups.forEach(e):Array.isArray(this.shops)&&this.shops.length&&this.shops.forEach(t=>(t.shoppingCartInfoDtoList||[]).forEach(e)),t},canCheckout(){return this.selectedMachineCount>0||this.selectedGroups.length>0},isGoogleCodeValid(){const t=this.googleCodeDialog.code;return/^\d{6}$/.test(t)},payCoinSymbol(){return(this.selectedCoin||"").toUpperCase()}},mounted(){this.fetchGetGoodsList()},watch:{"noticeDialog.visible"(t){if(t)this.startNoticeCountdown(),this.$nextTick(()=>this.reapplySelectionsForPendingShop());else if(this.noticeTimer){try{clearInterval(this.noticeTimer)}catch(e){}this.noticeTimer=null}},"confirmDialog.visible"(t){this.$nextTick(()=>this.reapplySelectionsForPendingShop())},"payDialog.visible"(t){this.$nextTick(()=>this.reapplySelectionsForPendingShop())},"googleCodeDialog.visible"(t){this.$nextTick(()=>this.reapplySelectionsForPendingShop())}},beforeDestroy(){try{this.noticeTimer&&clearInterval(this.noticeTimer)}catch(t){}this.noticeTimer=null},methods:{toCents(t){if(null===t||void 0===t)return 0;let e=String(t).trim();if(""===e)return 0;let a=1;"-"===e[0]&&(a=-1,e=e.slice(1));const s=e.split("."),i=parseInt(s[0]||"0",10)||0,o=(s[1]||"").replace(/[^0-9]/g,""),r=o.length>=2?o.slice(0,2):o.padEnd(2,"0"),n=100*i+(parseInt(r||"0",10)||0);return a*n},centsToText(t){const e=t<0?"-":"",a=Math.abs(Number(t)||0),s=Math.floor(a/100),i=String(a%100).padStart(2,"0");return`${e}${s}.${i}`},isRowSelectable(t,e){return!(1===Number(t&&t.del)||1===Number(t&&t.state))},isOnShelf(t){return!(1===Number(t&&t.del)||1===Number(t&&t.state))},getRowMaxLeaseDaysLocal(t){const e=t&&t.maxLeaseDays,a=Number(e);return Number.isFinite(a)?a<1?1:a>365?365:Math.floor(a):365},formatTrunc(t,e=2){const a=Number(t);if(!Number.isFinite(a))return"0";const s=Math.max(0,Number(e)||0),i=Math.pow(10,s),o=Math.trunc(a*i)/i,r=String(o);if(0===s)return r;const[n,l=""]=r.split("."),c=l.padEnd(s,"0");return`${n}.${c}`},async fetchChainAndListForSeller(t){if(!t)return this.options=[],void(this.loading=!1);this.loading=!0;const e=await(0,i.getChainAndListForSeller)({id:t});e&&(0===e.code||200===e.code)&&e.data&&(this.options=this.toUpperOptions(e.data)),this.loading=!1},toUpperOptions(t){const e=Array.isArray(t)?t:[];return e.map(t=>{const e={...t},a=t&&(null!=t.label?t.label:t.value)||"";return e.label=String(a).toUpperCase(),Array.isArray(t&&t.children)&&(e.children=this.toUpperOptions(t.children)),e})},getAllGroups(){return[]},computeShopTotal(t){if(!t)return 0;const e=Array.isArray(t.productMachineDtoList)?t.productMachineDtoList:[];if(!e.length)return Number(t.totalPrice||0);let a=0;for(const s of e){const t=this.toCents(s&&s.price),e=Math.max(1,Math.floor(Number(s&&s.leaseTime)||1));a+=t*e}return a/100},computeShopTotalDisplay(t){const e=Array.isArray(t&&t.productMachineDtoList)?t.productMachineDtoList:[],a=Number(t&&t.totalPrice),s=Number.isFinite(a);let i=!1;for(const r of e){const t=r&&null!=r._origLeaseTime?Number(r._origLeaseTime):Number(r&&r.leaseTime),e=Math.max(1,Math.floor(Number(r&&r.leaseTime)||1));if(t!==e){i=!0;break}}if(s&&!i||!e.length&&s)return this.formatTrunc(a,2);let o=0;for(const r of e){const t=this.toCents(r&&r.price),e=Math.max(1,Math.floor(Number(r&&r.leaseTime)||1));o+=t*e}return this.centsToText(o)},buildDeletePayload(){const t=[],e=Array.isArray(this.shops)?this.shops:[];return e.forEach(e=>{const a=this.selectedMachinesMap[e.id];if(!a||0===a.size)return;const s=Array.isArray(e.productMachineDtoList)?e.productMachineDtoList:[];s.forEach(e=>{a.has(e.id)&&t.push({machineId:e.id,productId:e.productId})})}),t.filter(t=>t&&null!=t.machineId)},async fetchAddOrders(t,e){try{const a={code:e,chain:this.selectedChain,coin:this.selectedCoin,price:this.selectedPrice,orderInfoVoList:t},s=await(0,i.addOrders)(a);return s}catch(a){return{code:-1,msg:"网络异常",data:null}}},async fetchDeleteBatchGoods(t){try{const e=await(0,s.deleteBatchGoods)(t);return e}catch(e){return{code:-1,msg:"网络异常"}}},async handleClearOffShelf(){if(!this.clearOffLoading){this.clearOffLoading=!0;try{const t=await(0,s.deleteBatchGoodsForIsDelete)();t&&200===Number(t.code)?(this.$message({message:"已清除下架商品",type:"success",showClose:!0}),await this.fetchGetGoodsList()):this.$message({message:t&&t.msg||"清除失败",type:"error",showClose:!0})}catch(t){this.$message({message:"网络异常",type:"error",showClose:!0})}finally{this.clearOffLoading=!1}}},toUpperText(t){return null==t?"":String(t).toUpperCase()},handleOuterExpandChange(t,e){try{const t=Array.isArray(e)?e.map(t=>t&&(null!=t.id?String(t.id):void 0)).filter(Boolean):[];this.expandedGroupKeys=t}catch(a){this.expandedGroupKeys=[]}},handleShopExpandChange(t,e){try{const a=Array.isArray(e)?e.map(t=>t&&(null!=t.id?String(t.id):void 0)).filter(Boolean):[];this.expandedShopKeys=a;const s=a.includes(String(t.id));s&&this.$nextTick(()=>this.applyInnerSelectionFromSet(t))}catch(a){this.expandedShopKeys=[]}},async fetchGetGoodsList(t){try{this.loading=!0;const a=await(0,s.getGoodsList)(t),i=Array.isArray(a&&a.rows)?a.rows:Array.isArray(a&&a.data&&a.data.rows)?a.data.rows:Array.isArray(a&&a.data)?a.data:[];if(!i||0===i.length)return this.shops=[],this.groups=[],this.expandedShopKeys=[],this.expandedGroupKeys=[],this.selectedMachinesMap={},this.selectedGroups=[],void window.dispatchEvent(new CustomEvent("cart-updated",{detail:{count:0}}));if(i.length&&i[0].productMachineDtoList){const t=i.map((t,e)=>({...t,id:null!=t.id?String(t.id):`shop-${e}`}));try{t.forEach(t=>{const e=Array.isArray(t.productMachineDtoList)?t.productMachineDtoList:[];e.forEach(t=>{t&&null==t._origLeaseTime&&(t._origLeaseTime=Number(t.leaseTime||1))})})}catch(e){}this.shops=t,this.groups=[],this.expandedGroupKeys=[];const a=t.reduce((t,e)=>t+(Array.isArray(e.productMachineDtoList)?e.productMachineDtoList.length:0),0);return void window.dispatchEvent(new CustomEvent("cart-updated",{detail:{count:a}}))}const o=i.map((t,e)=>({...t,id:t&&(null!=t.id?t.id:null!=t.productId?t.productId:`g-${e}`)}));this.groups=o,this.shops=[],this.expandedShopKeys=[],this.expandedGroupKeys=(this.expandedGroupKeys||[]).filter(t=>o.some(e=>String(e.id)===String(t)));try{const t=o.reduce((t,e)=>t+(Array.isArray(e.productMachineDtoList)?e.productMachineDtoList.length:0),0);window.dispatchEvent(new CustomEvent("cart-updated",{detail:{count:t}}))}catch(e){}}catch(e){console.log(e,"e")}finally{this.loading=!1}},handleGroupSelectionChange(){},handleGroupSelectionChangeForShop(){},applyInnerSelection(t,e,a=0){const s=this.$refs["innerTable-"+t.id],i=Array.isArray(t.productMachineDtoList)?t.productMachineDtoList:[];if(s&&"function"===typeof s.clearSelection){try{s.clearSelection()}catch(o){}e&&i.forEach(t=>{try{s.toggleRowSelection(t,!0)}catch(o){}})}else a>=5||this.$nextTick(()=>this.applyInnerSelection(t,e,a+1))},applyInnerSelectionFromSet(t,e=0){if(!t)return;const a=this.$refs["innerTable-"+t.id],s=Array.isArray(t.productMachineDtoList)?t.productMachineDtoList:[],i=this.selectedMachinesMap[t.id];if(a&&"function"===typeof a.clearSelection){try{a.clearSelection()}catch(o){}i&&i.size&&s.forEach(t=>{if(i.has(t.id))try{a.toggleRowSelection(t,!0)}catch(o){}})}else e>=5||this.$nextTick(()=>this.applyInnerSelectionFromSet(t,e+1))},reapplySelectionsForPendingShop(){const t=this.pendingCheckoutShop&&this.pendingCheckoutShop.shop;t&&this.applyInnerSelectionFromSet(t)},handleShopInnerSelectionChange(t,e){const a=new Set((e||[]).map(t=>t.id));this.$set(this.selectedMachinesMap,t.id,a)},toggleSelectAll(){const t=this.$refs.outerTable;t&&(this.isAllSelected?t.clearSelection():this.groups.forEach(e=>t.toggleRowSelection(e,!0)))},calcGroupTotal(t){const e=Array.isArray(t&&t.productMachineDtoList)?t.productMachineDtoList:[];return e.reduce((t,e)=>{const a=Number(e.price||0),s=Number(e.leaseTime||1);return t+a*s},0)},countMachines(t){const e=Array.isArray(t&&t.shoppingCartInfoDtoList)?t.shoppingCartInfoDtoList:[];return e.reduce((t,e)=>t+(Array.isArray(e.productMachineDtoList)?e.productMachineDtoList.length:0),0)},async handleCheckoutShop(t){if(!t)return;const e=t.id,a=Array.isArray(t.productMachineDtoList)?t.productMachineDtoList:[];if(0===a.length)return void this.$message({message:"该店铺暂无可结算的机器",type:"warning",showClose:!0});const s=Array.isArray(this.expandedShopKeys)&&this.expandedShopKeys.includes(String(e)),i=[];if(s){const t=this.selectedMachinesMap[e];if(!t||0===t.size)return void this.$message({message:"请先在该店铺下勾选要结算的机器",type:"warning",showClose:!0});if(a.forEach(a=>{t.has(a.id)&&this.isOnShelf(a)&&i.push({leaseTime:Number(a.leaseTime||1),machineId:a.id,productId:a.productId,shopId:e})}),!i.length)return void this.$message({message:"所选机器均已下架,无法结算",type:"warning",showClose:!0})}else{const t=a.filter(t=>this.isOnShelf(t));if(!t.length)return void this.$message({message:"该店铺暂无上架机器可结算",type:"warning",showClose:!0});t.forEach(t=>{i.push({leaseTime:Number(t.leaseTime||1),machineId:t.id,productId:t.productId,shopId:e})})}await this.fetchChainAndListForSeller(e),this.pendingCheckoutShop={shop:t,payload:i},this.noticeDialog.visible=!0,this.noticeDialog.checked=!1,this.startNoticeCountdown()},async executeCheckout(t){if(!this.pendingCheckoutShop)return;const{shop:e,payload:a}=this.pendingCheckoutShop;this.creatingOrder=!0;try{const e=await this.fetchAddOrders(a,t);let s=!1;if(e&&200===Number(e.code)){const t=String(e.data||"");s=t.includes("成功"),this.$message({message:"结算成功,订单状态请在订单列表中查看",type:"success",duration:3e3,showClose:!0}),this.settlementSuccessfulVisible=!0}s?await this.fetchGetGoodsList():this.reapplySelectionsForPendingShop()}catch(s){console.log("网络错误,请重试"),this.reapplySelectionsForPendingShop()}finally{this.creatingOrder=!1,this.pendingCheckoutShop=null}},handleCheckoutSelected(){let t=[];this.selectedMachineCount?((this.shops||[]).forEach(e=>{const a=this.selectedMachinesMap[e.id];if(!a||0===a.size)return;const s=Array.isArray(e.productMachineDtoList)?e.productMachineDtoList:[];s.forEach(s=>{a.has(s.id)&&t.push({product:e.name||"",coin:this.toUpperText(s.coin),machineId:s.id,user:s.user,miner:s.miner,price:Number(s.price||0)})})}),this.confirmDialog.items=t,this.confirmDialog.count=t.length,this.confirmDialog.total=t.reduce((t,e)=>t+e.price,0),this.confirmDialog.visible=!0):this.$message({message:"请先选择商品或机器",type:"warning",showClose:!0})},handleRemoveSelectedMachines(){const t=this.buildDeletePayload();t.length?this.$confirm("确定删除所选机器吗?","提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then(async()=>{const e=await this.fetchDeleteBatchGoods(t);if(e&&200===Number(e.code)){this.$message({message:"已删除选中的机器",type:"success",duration:3e3,showClose:!0}),await this.fetchGetGoodsList(),this.selectedMachinesMap={},this.selectedGroups=[];try{this.getAllGroups().forEach(t=>{const e=this.$refs["innerTable-"+t.id];if(e&&"function"===typeof e.clearSelection)try{e.clearSelection()}catch(a){}})}catch(a){}}}).catch(()=>null):this.$message({message:"请先勾选需要删除的机器或商品",type:"warning",showClose:!0})},confirmPay(){this.confirmDialog.visible=!1,this.showGoogleCodeDialog()},handleCloseSuccessDialog(){try{this.settlementSuccessfulVisible=!1}catch(t){}this.$router.push({path:"/account/orders",query:{status:"7"}})},startNoticeCountdown(){try{this.noticeTimer&&clearInterval(this.noticeTimer)}catch(t){}this.noticeDialog.countdown=5,this.noticeTimer=setInterval(()=>{this.noticeDialog.countdown>0?this.noticeDialog.countdown-=1:(clearInterval(this.noticeTimer),this.noticeTimer=null)},1e3)},handleNoticeAcknowledge(){this.noticeDialog.countdown>0||(this.noticeDialog.checked?(this.noticeDialog.visible=!1,this.$nextTick(()=>this.reapplySelectionsForPendingShop()),this.openPaySelectDialog()):this.$message({message:'请先勾选"我已阅读并同意上述注意事项"',type:"warning",showClose:!0}))},openPaySelectDialog(){this.payDialog.visible=!0,this.$nextTick(()=>this.reapplySelectionsForPendingShop()),Array.isArray(this.options)&&this.options.length||this.fetchChainAndListForSeller()},async handlePayConfirm(){const t=this.payDialog.value||[];if(!Array.isArray(t)||t.length<2)this.$message.warning("请选择支付链和币种");else{if(this.$nextTick(()=>this.reapplySelectionsForPendingShop()),this.selectedChain=t[0],this.selectedCoin=t[1],"USDT"===String(this.selectedCoin).toUpperCase())this.selectedPrice=0;else{this.payDialog.loading=!0;try{const t=await(0,i.getCoinPrice)({coin:this.selectedCoin}),e=t&&t.data&&(t.data.price||t.data)||t.price||0;this.selectedPrice=Number(e||0)}catch(e){this.selectedPrice=0}finally{this.payDialog.loading=!1}}this.payDialog.visible=!1,this.$nextTick(()=>this.reapplySelectionsForPendingShop()),this.showConfirmDialog()}},showConfirmDialog(){if(!this.pendingCheckoutShop)return;const{shop:t,payload:e}=this.pendingCheckoutShop;this.$nextTick(()=>this.reapplySelectionsForPendingShop());const a=Array.isArray(t.productMachineDtoList)?t.productMachineDtoList:[],s=(new Map,new Set(e.map(t=>t.machineId))),i=[];a.forEach(e=>{if(s.has(e.id)&&this.isOnShelf(e)){const a=Number(e.price||0),s=Math.max(1,Math.floor(Number(e.leaseTime||1))),o="USDT"===String(this.selectedCoin).toUpperCase(),r=!o&&this.selectedPrice>0?a/this.selectedPrice:a,n=r*s;i.push({product:t.name||"",coin:this.toUpperText(e.coin),user:e.user,miner:e.miner,unitPrice:Number(r||0),leaseTime:s,subtotal:Number(n||0)})}}),this.confirmDialog.items=i,this.confirmDialog.count=i.length,this.confirmDialog.total=i.reduce((t,e)=>t+e.subtotal,0),this.confirmDialog.visible=!0},showGoogleCodeDialog(){this.googleCodeDialog.visible=!0,this.googleCodeDialog.code="",this.googleCodeDialog.error="",this.googleCodeDialog.loading=!1,this.$nextTick(()=>{this.$refs.googleCodeInput&&this.$refs.googleCodeInput.focus()})},handleGoogleCodeInput(t){this.googleCodeDialog.code=t.replace(/\D/g,""),this.googleCodeDialog.error&&(this.googleCodeDialog.error="")},async handleGoogleCodeSubmit(){if(this.isGoogleCodeValid){this.googleCodeDialog.loading=!0,this.googleCodeDialog.error="";try{await this.executeCheckout(this.googleCodeDialog.code),this.googleCodeDialog.visible=!1}catch(t){this.googleCodeDialog.error="验证码错误,请重新输入"}finally{this.googleCodeDialog.loading=!1}}else this.googleCodeDialog.error="请输入6位数字验证码"},handleGoogleCodeCancel(){this.googleCodeDialog.visible=!1,this.googleCodeDialog.code="",this.googleCodeDialog.error="",this.googleCodeDialog.loading=!1,this.reapplySelectionsForPendingShop(),this.pendingCheckoutShop=null},handleLeaseTimeChange(t){t.leaseTime<1?t.leaseTime=1:t.leaseTime>365?t.leaseTime=365:t.leaseTime=Math.floor(t.leaseTime)},handleLeaseTimeInput(t,e){if(""===e||null===e||void 0===e)return void(t.leaseTime=1);const a=Number(e);isNaN(a)?t.leaseTime=1:t.leaseTime=a%1===0?a<1?1:a>365?365:a:Math.floor(a)},handleProductExpandChange(t,e,a){const s=this.$refs["productTable-"+(t&&t.id)];if(!s||!e)return;const i=s.selection||[],o=Array.isArray(i)&&i.some(t=>t&&t.id===e.id);o&&this.$nextTick(()=>{this.applyInnerSelection(e,!0)})},isProductSelected(t,e){const a=this.$refs["productTable-"+(t&&t.id)];if(!a||!e)return!1;const s=a.selection||[];return Array.isArray(s)&&s.some(t=>t&&t.id===e.id)},formatPayTooltip(t){return`${t.payChain} - ${this.toUpperText(t.payCoin)}`}}}},8874:function(t,e,a){"use strict";a.r(e),a.d(e,{__esModule:function(){return i.B},default:function(){return l}});var s=a(4571),i=a(1867),o=i.A,r=a(845),n=(0,r.A)(o,s.XX,s.Yp,!1,null,"592f2fb3",null),l=n.exports},8875:function(t,e,a){"use strict";e.Yp=e.XX=void 0;e.XX=function(){var t=this,e=t._self._c;return e("div",{directives:[{name:"loading",rawName:"v-loading",value:t.productListLoading,expression:"productListLoading"}],staticClass:"product-list"},[e("section",{staticClass:"container"},[e("h1",{staticClass:"page-title"},[t._v("商品列表")]),e("section",{staticClass:"filter-section"},[e("label",{staticClass:"required",staticStyle:{"margin-bottom":"10px"}},[t._v("币种选择:")]),e("div",{staticClass:"filter-row"},[e("el-select",{ref:"screen",staticClass:"input",attrs:{size:"middle",placeholder:"请选择",clearable:""},on:{change:t.handleCurrencyChange,clear:t.handleCurrencyClear},model:{value:t.screenCurrency,callback:function(e){t.screenCurrency=e},expression:"screenCurrency"}},t._l(t.currencyList,function(a){return e("el-option",{key:a.value,attrs:{label:a.label,value:a.value}},[e("div",{staticStyle:{display:"flex","align-items":"center"}},[e("img",{staticStyle:{float:"left",width:"20px"},attrs:{src:a.imgUrl}}),e("span",{staticStyle:{float:"left","margin-left":"5px"}},[t._v(t._s(a.label))])])])}),1),e("el-input",{staticStyle:{width:"240px"},attrs:{size:"middle",placeholder:"输入算法关键词",clearable:""},on:{clear:t.handleAlgorithmClear},nativeOn:{keyup:function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:t.handleAlgorithmSearch.apply(null,arguments)}},scopedSlots:t._u([{key:"append",fn:function(){return[e("el-button",{attrs:{type:"primary"},on:{click:t.handleAlgorithmSearch}},[t._v("搜索")])]},proxy:!0}]),model:{value:t.searchAlgorithm,callback:function(e){t.searchAlgorithm=e},expression:"searchAlgorithm"}})],1)]),e("div",{staticClass:"product-list-grid"},[t._l(t.products,function(s){return e("div",{key:s.id,staticClass:"product-item",attrs:{tabindex:"0","aria-label":"查看详情"},on:{click:function(e){return t.handleProductClick(s)}}},[e("img",{staticClass:"product-image",attrs:{src:a(6278),alt:s.name}}),e("div",{staticClass:"product-info"},[e("h4",[t._v("商品: "+t._s(s.name))]),e("p",{staticStyle:{"font-size":"16px","margin-top":"10px","font-weight":"bold"}},[t._v("算法: "+t._s(s.algorithm))]),e("div",{staticClass:"product-footer"},[e("div",{staticClass:"price-wrap"},[e("span",{staticClass:"product-price"},[t._v("价格: "+t._s(t.formatPriceRange(s.priceRange)))]),e("span",{staticClass:"unit"},[t._v("USDT")])]),e("span",{staticClass:"product-sold",attrs:{"aria-label":"已售数量"}},[t._v("已售:"+t._s(s&&null!=s.saleNumber?s.saleNumber:0))])])])])}),0!==t.products.length||t.productListLoading?t._e():e("div",{staticClass:"empty-state"},[e("i",{staticClass:"el-icon-goods"}),e("p",[t._v("暂无商品数据")]),e("p",{staticStyle:{"font-size":"12px",color:"#999","margin-top":"8px"}},[t._v("请检查网络连接或联系管理员")])])],2)])])},e.Yp=[]},9072:function(t,e,a){"use strict";a.r(e),a.d(e,{__esModule:function(){return i.B},default:function(){return l}});var s=a(2172),i=a(6616),o=i.A,r=a(845),n=(0,r.A)(o,s.XX,s.Yp,!1,null,"75ddb61b",null),l=n.exports},9146:function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e["default"]=void 0,a(4114);var s=a(9662);e["default"]={name:"ProductList",data(){return{products:[],loading:!1,powerList:[],currencyList:[{path:"nexaAccess",value:"nexa",label:"nexa",imgUrl:"https://m2pool.com/img/nexa.png",name:"course.NEXAcourse",show:!0,amount:1e4},{path:"grsAccess",value:"grs",label:"grs",imgUrl:"https://m2pool.com/img/grs.svg",name:"course.GRScourse",show:!0,amount:1},{path:"monaAccess",value:"mona",label:"mona",imgUrl:"https://m2pool.com/img/mona.svg",name:"course.MONAcourse",show:!0,amount:1},{path:"dgbsAccess",value:"dgbs",label:"dgb(skein)",imgUrl:"https://m2pool.com/img/dgb.svg",name:"course.dgbsCourse",show:!0,amount:1},{path:"dgbqAccess",value:"dgbq",label:"dgb(qubit)",imgUrl:"https://m2pool.com/img/dgb.svg",name:"course.dgbqCourse",show:!0,amount:1},{path:"dgboAccess",value:"dgbo",label:"dgb(odocrypt)",imgUrl:"https://m2pool.com/img/dgb.svg",name:"course.dgboCourse",show:!0,amount:1},{path:"rxdAccess",value:"rxd",label:"radiant(rxd)",imgUrl:"https://m2pool.com/img/rxd.png",name:"course.RXDcourse",show:!0,amount:100},{path:"enxAccess",value:"enx",label:"Entropyx(enx)",imgUrl:"https://m2pool.com/img/enx.svg",name:"course.ENXcourse",show:!0,amount:5e3},{path:"alphminingPool",value:"alph",label:"alephium",imgUrl:"https://m2pool.com/img/alph.svg",name:"course.alphCourse",show:!0,amount:1}],screenCurrency:"",searchAlgorithm:"",params:{coin:"",algorithm:""},productListLoading:!1}},mounted(){this.fetchGetList()},methods:{formatPriceRange(t){try{if(null===t||void 0===t)return"0.00";const e=String(t);if(e.includes("-")){const[t,a]=e.split("-");return`${this._truncate2(t)}-${this._truncate2(a)}`}return this._truncate2(e)}catch(e){return"0.00"}},_truncate2(t){if(null===t||void 0===t)return"0.00";const e=String(t).trim();if(!e)return"0.00";const[a,s=""]=e.split("."),i=s.slice(0,2);return`${a}.${i.padEnd(2,"0")}`},handleCurrencyChange(t){try{if(void 0===t||null===t||""===t)return;this.params.coin=t;const e=(this.searchAlgorithm||"").trim(),a=e?{coin:t,algorithm:e}:{coin:t};this.fetchGetList(a)}catch(e){console.error("处理币种变更失败",e)}},async fetchGetList(t){this.productListLoading=!0;try{const e=await(0,s.getProductList)(t);console.log("API响应:",e),e&&200===e.code?(this.products=e.rows||[],console.log("商品数据:",this.products)):(console.error("API返回错误:",e),this.products=[])}catch(e){console.error("获取商品列表失败:",e),this.products=[],this.products=[]}this.productListLoading=!1},handleAlgorithmSearch(){const t=(this.searchAlgorithm||"").trim(),e={...this.params};t?(e.algorithm=t,this.params.algorithm=t):(delete e.algorithm,this.params.algorithm=""),e.algorithm?this.fetchGetList({...e,coin:this.screenCurrency||void 0}):this.fetchGetList(this.screenCurrency?{coin:this.screenCurrency}:void 0)},handleCurrencyClear(){this.screenCurrency="",this.params.coin="";const t=(this.searchAlgorithm||"").trim();t?this.fetchGetList({algorithm:t}):this.fetchGetList()},handleAlgorithmClear(){this.searchAlgorithm="",this.params.algorithm="";const t=this.screenCurrency;t?this.fetchGetList({coin:t}):this.fetchGetList()},handleProductClick(t){(t.id||0==t.id)&&this.$router.push(`/product/${t.id}`)}}}},9197:function(t,e,a){"use strict";a.r(e),a.d(e,{default:function(){return n}});var s=a(1968),i=a(845),o={},r=(0,i.A)(o,s.XX,s.Yp,!1,null,null,null),n=r.exports},9252:function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.coinList=void 0;e.coinList=[{path:"nexaAccess",value:"nexa",label:"nexa",imgUrl:"https://m2pool.com/img/nexa.png",name:"course.NEXAcourse",show:!0,amount:1e4},{path:"grsAccess",value:"grs",label:"grs",imgUrl:"https://m2pool.com/img/grs.svg",name:"course.GRScourse",show:!0,amount:1},{path:"monaAccess",value:"mona",label:"mona",imgUrl:"https://m2pool.com/img/mona.svg",name:"course.MONAcourse",show:!0,amount:1},{path:"dgbsAccess",value:"dgbs",label:"dgb(skein)",imgUrl:"https://m2pool.com/img/dgb.svg",name:"course.dgbsCourse",show:!0,amount:1},{path:"dgbqAccess",value:"dgbq",label:"dgb(qubit)",imgUrl:"https://m2pool.com/img/dgb.svg",name:"course.dgbqCourse",show:!0,amount:1},{path:"dgboAccess",value:"dgbo",label:"dgb(odocrypt)",imgUrl:"https://m2pool.com/img/dgb.svg",name:"course.dgboCourse",show:!0,amount:1},{path:"rxdAccess",value:"rxd",label:"radiant(rxd)",imgUrl:"https://m2pool.com/img/rxd.png",name:"course.RXDcourse",show:!0,amount:100},{path:"enxAccess",value:"enx",label:"Entropyx(enx)",imgUrl:"https://m2pool.com/img/enx.svg",name:"course.ENXcourse",show:!0,amount:5e3},{path:"alphminingPool",value:"alph",label:"alephium",imgUrl:"https://m2pool.com/img/alph.svg",name:"course.alphCourse",show:!0,amount:1}]},9266:function(t,e,a){"use strict";a.r(e),a.d(e,{__esModule:function(){return i.B},default:function(){return l}});var s=a(3574),i=a(346),o=i.A,r=a(845),n=(0,r.A)(o,s.XX,s.Yp,!1,null,"538996de",null),l=n.exports},9325:function(t,e,a){"use strict";var s=a(3999)["default"];Object.defineProperty(e,"__esModule",{value:!0}),e["default"]=void 0;var i=s(a(5471)),o=s(a(1973)),r=a(3723);i.default.use(o.default);const n=new o.default({mode:"history",base:"/",routes:r.mainRoutes});n.beforeEach((t,e,a)=>{t.meta&&t.meta.title?document.title=`${t.meta.title} - Power Leasing`:document.title="Power Leasing - 电商系统",t.meta&&t.meta.allAuthority&&console.log(`访问页面: ${t.meta.title}, 权限: ${t.meta.allAuthority.join(", ")}`),a()}),n.onError(t=>{console.error("路由错误:",t)});e["default"]=n},9526:function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e["default"]=void 0;e["default"]={401:"认证失败,无法访问系统资源,请重新登录",403:"当前操作没有权限",404:"访问资源不存在",default:"系统未知错误,请反馈给管理员"}},9628:function(t,e){"use strict";e.Yp=e.XX=void 0;e.XX=function(){var t=this,e=t._self._c;return e("div",{staticClass:"checkout-page"},[e("h1",{staticClass:"page-title"},[t._v("订单结算")]),t.loading?e("div",{staticClass:"loading"},[e("el-loading-spinner"),t._v(" 加载中... ")],1):0===t.cartItems.length?e("div",{staticClass:"empty-cart"},[e("div",{staticClass:"empty-icon"},[t._v("🛒")]),e("h2",[t._v("购物车是空的")]),e("p",[t._v("请先添加商品到购物车")]),e("router-link",{staticClass:"shop-now-btn",attrs:{to:"/productList"}},[t._v(" 去购物 ")])],1):e("div",{staticClass:"checkout-content"},[e("div",{staticClass:"order-summary"},[e("h2",{staticClass:"section-title"},[t._v("订单摘要")]),e("div",{staticClass:"order-items"},t._l(t.cartItems,function(a){return e("div",{key:a.id,staticClass:"order-item"},[e("div",{staticClass:"item-image"},[e("img",{attrs:{src:a.image,alt:a.title}})]),e("div",{staticClass:"item-info"},[e("h3",{staticClass:"item-title"},[t._v(t._s(a.title))]),e("div",{staticClass:"item-price"},[t._v("¥"+t._s(a.price))])]),e("div",{staticClass:"item-quantity"},[e("span",{staticClass:"quantity-label"},[t._v("数量:")]),e("span",{staticClass:"quantity-value"},[t._v(t._s(a.quantity))])]),e("div",{staticClass:"item-total"},[e("span",{staticClass:"total-label"},[t._v("小计:")]),e("span",{staticClass:"total-price"},[t._v("¥"+t._s((a.price*a.quantity).toFixed(2)))])])])}),0),e("div",{staticClass:"order-total"},[e("div",{staticClass:"total-row"},[e("span",[t._v("商品总数:")]),e("span",[t._v(t._s(t.summary.totalQuantity)+" 件")])]),e("div",{staticClass:"total-row"},[e("span",[t._v("商品种类:")]),e("span",[t._v(t._s(t.cartItems.length)+" 种")])]),e("div",{staticClass:"total-row final-total"},[e("span",[t._v("订单总计:")]),e("span",{staticClass:"final-amount"},[t._v("¥"+t._s(t.summary.totalPrice.toFixed(2)))])])])]),e("div",{staticClass:"checkout-form"},[e("h2",{staticClass:"section-title"},[t._v("收货信息")]),e("form",{staticClass:"form",on:{submit:function(e){return e.preventDefault(),t.handleSubmit.apply(null,arguments)}}},[e("div",{staticClass:"form-row"},[e("div",{staticClass:"form-group"},[e("label",{staticClass:"form-label",attrs:{for:"name"}},[t._v("收货人姓名 *")]),e("input",{directives:[{name:"model",rawName:"v-model",value:t.form.name,expression:"form.name"}],staticClass:"form-input",attrs:{id:"name",type:"text",required:"",placeholder:"请输入收货人姓名","aria-describedby":"name-error"},domProps:{value:t.form.name},on:{input:function(e){e.target.composing||t.$set(t.form,"name",e.target.value)}}}),t.errors.name?e("div",{staticClass:"error-message",attrs:{id:"name-error"}},[t._v(" "+t._s(t.errors.name)+" ")]):t._e()]),e("div",{staticClass:"form-group"},[e("label",{staticClass:"form-label",attrs:{for:"phone"}},[t._v("联系电话 *")]),e("input",{directives:[{name:"model",rawName:"v-model",value:t.form.phone,expression:"form.phone"}],staticClass:"form-input",attrs:{id:"phone",type:"tel",required:"",placeholder:"请输入联系电话","aria-describedby":"phone-error"},domProps:{value:t.form.phone},on:{input:function(e){e.target.composing||t.$set(t.form,"phone",e.target.value)}}}),t.errors.phone?e("div",{staticClass:"error-message",attrs:{id:"phone-error"}},[t._v(" "+t._s(t.errors.phone)+" ")]):t._e()])]),e("div",{staticClass:"form-group"},[e("label",{staticClass:"form-label",attrs:{for:"address"}},[t._v("收货地址 *")]),e("textarea",{directives:[{name:"model",rawName:"v-model",value:t.form.address,expression:"form.address"}],staticClass:"form-textarea",attrs:{id:"address",rows:"3",required:"",placeholder:"请输入详细收货地址","aria-describedby":"address-error"},domProps:{value:t.form.address},on:{input:function(e){e.target.composing||t.$set(t.form,"address",e.target.value)}}}),t.errors.address?e("div",{staticClass:"error-message",attrs:{id:"address-error"}},[t._v(" "+t._s(t.errors.address)+" ")]):t._e()]),e("div",{staticClass:"form-group"},[e("label",{staticClass:"form-label",attrs:{for:"note"}},[t._v("备注")]),e("textarea",{directives:[{name:"model",rawName:"v-model",value:t.form.note,expression:"form.note"}],staticClass:"form-textarea",attrs:{id:"note",rows:"2",placeholder:"可选:订单备注信息"},domProps:{value:t.form.note},on:{input:function(e){e.target.composing||t.$set(t.form,"note",e.target.value)}}})]),e("div",{staticClass:"form-actions"},[e("router-link",{staticClass:"back-btn",attrs:{to:"/cart"}},[t._v(" 返回购物车 ")]),e("button",{staticClass:"submit-btn",attrs:{type:"submit",disabled:t.submitting,"aria-label":"提交订单"}},[t.submitting?e("span",[t._v("提交中...")]):e("span",[t._v("提交订单")])])],1)])])])])},e.Yp=[]},9660:function(t,e,a){"use strict";Object.defineProperty(e,"B",{value:!0}),e.A=void 0;var s=a(4180);e.A={name:"AccountOrderDetail",data(){return{loading:!1,order:{},items:[]}},created(){this.load()},methods:{async load(){const t=this.$route.params.id;if(t)try{this.loading=!0;const e=await(0,s.getOrdersByIds)({orderId:t}),a=null!=(e&&e.data)?e.data:e;let i={};Array.isArray(a)&&a.length?i=a[0]:a&&"object"===typeof a?i=a:Array.isArray(e&&e.rows)&&e.rows.length&&(i=e.rows[0]),this.order=i||{},this.items=Array.isArray(i&&i.orderItemDtoList)?i.orderItemDtoList:[]}catch(e){console.log("获取订单详情失败")}finally{this.loading=!1}else this.$message({message:"订单ID缺失",type:"error",showClose:!0})},getOrderStatusText(t){const e=Number(t);return 7===e?"进行中":8===e?"已完成":String(null==t?"":t)},formatDateTime(t){if(!t)return"—";try{const e=String(t);return e.includes("T")?e.replace("T"," "):e}catch(e){return String(t)}}}}},9662:function(t,e,a){"use strict";var s=a(3999)["default"];Object.defineProperty(e,"__esModule",{value:!0}),e.createProduct=r,e.deleteProduct=c,e.getList=o,e.getMachineInfo=d,e.getMachineInfoById=p,e.getOwnedById=h,e.getOwnedList=u,e.getProductList=n,e.updateProduct=l;var i=s(a(5720));function o(t){return(0,i.default)({url:"/lease/product/getList",method:"get",data:t})}function r(t){return(0,i.default)({url:"/lease/product/add",method:"post",data:t})}function n(t){return(0,i.default)({url:"/lease/product/getList",method:"post",data:t})}function l(t){return(0,i.default)({url:"/lease/product/update",method:"post",data:t})}function c(t){return(0,i.default)({url:"/lease/product/delete",method:"post",data:{id:t}})}function d(t){return(0,i.default)({url:"/lease/product/getMachineInfo",method:"post",data:t})}function u(t){return(0,i.default)({url:"/lease/product/getOwnedList",method:"post",data:t})}function h(t){return(0,i.default)({url:"/lease/product/getOwnedById",method:"post",data:t})}function p(t){return(0,i.default)({url:"/lease/product/getMachineInfoById",method:"post",data:t})}},9690:function(t,e){"use strict";e.Yp=e.XX=void 0;e.XX=function(){var t=this,e=t._self._c;return e("div",{staticClass:"orders-page"},[e("h2",{staticClass:"title"},[t._v("已售出订单")]),e("el-tabs",{on:{"tab-click":t.handleTabClick},model:{value:t.active,callback:function(e){t.active=e},expression:"active"}},[e("el-tab-pane",{attrs:{label:"订单进行中",name:"7"}},[e("order-list",{attrs:{items:t.orders[7],"show-checkout":!1,"empty-text":"暂无进行中的订单"}})],1),e("el-tab-pane",{attrs:{label:"订单已完成",name:"8"}},[e("order-list",{attrs:{items:t.orders[8],"show-checkout":!1,"empty-text":"暂无已完成的订单"}})],1)],1)],1)},e.Yp=[]},9741:function(t,e){"use strict";e.Yp=e.XX=void 0;e.XX=function(){var t=this,e=t._self._c;return e("div",{staticClass:"cart-page"},[e("h1",{staticClass:"page-title"},[t._v("购物车")]),t.loading?e("div",{staticClass:"loading"},[e("i",{staticClass:"el-icon-loading",attrs:{"aria-label":"加载中",role:"img"}}),t._v(" 加载中... ")]):t.isCartEmpty?e("div",{staticClass:"empty-cart"},[e("div",{staticClass:"empty-icon"},[t._v("🛒")]),e("h2",[t._v("购物车是空的")]),e("p",[t._v("快去添加一些商品吧!")]),e("router-link",{staticClass:"shop-now-btn",attrs:{to:"/productList"}},[t._v(" 去购物 ")])],1):e("div",{staticClass:"cart-content"},[e("el-table",{ref:"shopTable",staticStyle:{width:"100%"},attrs:{data:t.shops,border:"","row-key":"id","expand-row-keys":t.expandedShopKeys,"header-cell-style":{textAlign:"left"},"cell-style":{textAlign:"left"}},on:{"expand-change":t.handleShopExpandChange}},[e("el-table-column",{attrs:{type:"expand",width:"46"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("el-table",{ref:"innerTable-"+a.row.id,staticStyle:{width:"100%"},attrs:{data:a.row.productMachineDtoList||[],size:"small",border:"","row-key":"id","reserve-selection":"","header-cell-style":{textAlign:"left"},"cell-style":{textAlign:"left"}},on:{"selection-change":e=>t.handleShopInnerSelectionChange(a.row,e)}},[e("el-table-column",{attrs:{type:"selection",width:"46",selectable:t.isRowSelectable}}),e("el-table-column",{attrs:{prop:"name",label:"商品名称"}}),e("el-table-column",{attrs:{prop:"miner",label:"机器编号"}}),e("el-table-column",{attrs:{prop:"algorithm",label:"算法"}}),e("el-table-column",{attrs:{prop:"powerDissipation",label:"功耗(kw/h)"}}),e("el-table-column",{attrs:{prop:"theoryPower",label:"理论算力"},scopedSlots:t._u([{key:"default",fn:function(a){return[t._v(t._s(a.row.theoryPower)+" "),e("span",{directives:[{name:"show",rawName:"v-show",value:a.row.theoryPower,expression:"scope.row.theoryPower"}]},[t._v(t._s(a.row.unit))])]}}],null,!0)}),e("el-table-column",{attrs:{prop:"computingPower",label:"实际算力"},scopedSlots:t._u([{key:"default",fn:function(a){return[t._v(t._s(a.row.computingPower)+" "),e("span",{directives:[{name:"show",rawName:"v-show",value:a.row.computingPower,expression:"scope.row.computingPower"}]},[t._v(t._s(a.row.unit))])]}}],null,!0)}),e("el-table-column",{attrs:{prop:"theoryIncome",label:"单机理论收入(每日/币种)"},scopedSlots:t._u([{key:"default",fn:function(a){return[t._v(t._s(a.row.theoryIncome)+" "),e("span",{directives:[{name:"show",rawName:"v-show",value:a.row.coin,expression:"scope.row.coin"}]},[t._v(t._s(t.toUpperText(a.row.coin)))])]}}],null,!0)}),e("el-table-column",{attrs:{prop:"theoryUsdtIncome",label:"单机理论收入(每日/USDT)"}}),e("el-table-column",{attrs:{prop:"price",label:"单价(USDT)",width:"100"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("span",{staticClass:"price-strong"},[t._v(t._s(t.formatTrunc(a.row.price,2)))])]}}],null,!0)}),e("el-table-column",{attrs:{label:"租赁天数",width:"145"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("el-input-number",{attrs:{min:1,max:t.getRowMaxLeaseDaysLocal(a.row),precision:0,step:1,size:"mini","controls-position":"right"},on:{change:function(e){return t.handleLeaseTimeChange(a.row)},input:function(e){return t.handleLeaseTimeInput(a.row,e)}},model:{value:a.row.leaseTime,callback:function(e){t.$set(a.row,"leaseTime",e)},expression:"scope.row.leaseTime"}})]}}],null,!0)}),e("el-table-column",{attrs:{label:"最大可租(天)","min-width":"60"},scopedSlots:t._u([{key:"default",fn:function(e){return[t._v(t._s(null!=e.row.maxLeaseDays?e.row.maxLeaseDays:""))]}}],null,!0)}),e("el-table-column",{attrs:{label:"机器状态",width:"110"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("el-tag",{attrs:{type:1===Number(a.row.del)||1===Number(a.row.state)?"info":"success"}},[t._v(" "+t._s(1===Number(a.row.del)||1===Number(a.row.state)?"下架":"上架")+" ")])]}}],null,!0)}),e("el-table-column",{attrs:{label:"机器总价(USDT)","min-width":"100"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("span",{staticClass:"price-strong"},[t._v(t._s(t.formatTrunc(Number(a.row.price||0)*Number(a.row.leaseTime||1),2)))])]}}],null,!0)})],1)]}}])}),e("el-table-column",{attrs:{prop:"name",label:"店铺名称"}}),e("el-table-column",{attrs:{prop:"totalMachine",label:"机器总数"}}),e("el-table-column",{attrs:{prop:"totalPrice",label:"总价(USDT)"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("span",{staticClass:"price-strong"},[t._v(t._s(t.computeShopTotalDisplay(a.row)))])]}}])}),e("el-table-column",{attrs:{label:"支付方式"},scopedSlots:t._u([{key:"default",fn:function(a){return t._l(a.row.payConfigList,function(a,s){return e("img",{key:s,staticStyle:{width:"20px",height:"20px","margin-right":"10px"},attrs:{src:a.payCoinImage,alt:a.payChain,title:t.formatPayTooltip(a)}})})}}])}),e("el-table-column",{attrs:{label:"操作"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("el-button",{attrs:{type:"primary",size:"mini",loading:t.creatingOrder,disabled:t.creatingOrder},on:{click:function(e){return t.handleCheckoutShop(a.row)}}},[t._v("结算该店铺订单")])]}}])})],1),e("div",{staticClass:"summary-actions",staticStyle:{"margin-top":"16px",display:"flex",gap:"12px","justify-content":"flex-end"}},[e("div",{staticClass:"summary-inline",staticStyle:{color:"#666"}},[t._v(" 已选机器:"),e("b",[t._v(t._s(t.selectedMachineCount))]),t._v(" 台 "),e("span",{staticStyle:{"margin-left":"12px"}},[t._v("金额合计(USDT):"),e("b",[t._v(t._s(t.formatTrunc(t.selectedTotal,2)))])])]),e("div",{staticClass:"actions-inline",staticStyle:{display:"flex",gap:"12px"}},[e("el-button",{attrs:{type:"danger",disabled:!t.selectedMachineCount},on:{click:t.handleRemoveSelectedMachines}},[t._v("删除所选机器")]),e("el-button",{attrs:{type:"warning",plain:"",loading:t.clearOffLoading},on:{click:t.handleClearOffShelf}},[t._v("清除已下架商品")])],1)]),e("el-dialog",{attrs:{visible:t.confirmDialog.visible,width:"80vw","close-on-click-modal":!1,title:`确认结算该店铺订单(共 ${t.confirmDialog.count} 台机器)`},on:{"update:visible":function(e){return t.$set(t.confirmDialog,"visible",e)}},scopedSlots:t._u([{key:"footer",fn:function(){return[e("el-button",{on:{click:function(e){t.confirmDialog.visible=!1}}},[t._v("取消")]),e("el-button",{attrs:{type:"primary"},on:{click:t.confirmPay}},[t._v("确认结算")])]},proxy:!0}])},[e("div",[e("el-table",{attrs:{data:t.confirmDialog.items,height:"360",border:"",stripe:"","header-cell-style":{textAlign:"left"},"cell-style":{textAlign:"left"}}},[e("el-table-column",{attrs:{prop:"product",label:"商品","min-width":"160"}}),e("el-table-column",{attrs:{prop:"coin",label:"币种","min-width":"100"}}),e("el-table-column",{attrs:{prop:"user",label:"账户","min-width":"120"}}),e("el-table-column",{attrs:{prop:"miner",label:"机器编号","min-width":"160"}}),e("el-table-column",{attrs:{prop:"unitPrice","min-width":"140"},scopedSlots:t._u([{key:"header",fn:function(){return[t._v("单价("+t._s(t.payCoinSymbol||"USDT")+")")]},proxy:!0},{key:"default",fn:function(a){return[e("span",{staticClass:"price-strong"},[t._v(t._s(t.formatTrunc(a.row.unitPrice,2)))])]}}])}),e("el-table-column",{attrs:{prop:"leaseTime",label:"租赁天数","min-width":"120"}}),e("el-table-column",{attrs:{prop:"subtotal","min-width":"140"},scopedSlots:t._u([{key:"header",fn:function(){return[t._v("小计("+t._s(t.payCoinSymbol||"USDT")+")")]},proxy:!0},{key:"default",fn:function(a){return[e("span",{staticClass:"price-strong"},[t._v(t._s(t.formatTrunc(a.row.subtotal,2)))])]}}])})],1),e("div",{staticStyle:{"margin-top":"12px","text-align":"right"}},[t._v("总金额("+t._s(t.payCoinSymbol||"USDT")+"):"),e("span",{staticClass:"price-strong"},[t._v(t._s(t.formatTrunc(t.confirmDialog.total,2)))])])],1)]),e("el-dialog",{attrs:{visible:t.payDialog.visible,width:"520px",title:"选择支付链/币种","close-on-click-modal":!1},on:{"update:visible":function(e){return t.$set(t.payDialog,"visible",e)}},scopedSlots:t._u([{key:"footer",fn:function(){return[e("el-button",{on:{click:function(e){t.payDialog.visible=!1}}},[t._v("取消")]),e("el-button",{attrs:{type:"primary",loading:t.payDialog.loading},on:{click:t.handlePayConfirm}},[t._v("下一步")])]},proxy:!0}])},[e("el-form",{attrs:{"label-width":"120px"}},[e("el-form-item",{attrs:{label:"链/币种"}},[e("el-cascader",{staticStyle:{width:"100%"},attrs:{options:t.options},model:{value:t.payDialog.value,callback:function(e){t.$set(t.payDialog,"value",e)},expression:"payDialog.value"}})],1)],1)],1),e("el-dialog",{attrs:{visible:t.noticeDialog.visible,width:"680px",title:"下单须知","show-close":!1,"close-on-click-modal":!1,"close-on-press-escape":!1},on:{"update:visible":function(e){return t.$set(t.noticeDialog,"visible",e)}},scopedSlots:t._u([{key:"footer",fn:function(){return[e("el-button",{attrs:{type:"primary",disabled:t.noticeDialog.countdown>0},on:{click:t.handleNoticeAcknowledge}},[t._v(" 同意并下单"+t._s(t.noticeDialog.countdown>0?`(${t.noticeDialog.countdown}s)`:"")+" ")])]},proxy:!0}])},[e("div",{staticClass:"notice-content"},[e("p",{staticClass:"notice-title"},[t._v('尊敬的客户,感谢您选择我们的服务。在您下单前,请务必仔细阅读并完全理解以下须知条款。一旦您点击" 同意并下单"或完成支付流程,即视为您已充分阅读、理解并同意接受本须知的全部内容约束。')]),e("ol",{staticClass:"notice-list"},[e("li",[e("b",[t._v("预授权冻结:")]),t._v("为保障订单顺利执行,在下单成功后,系统将立即对您数字钱包或账户中与订单全款总额等值的资金进行预授权冻结。此操作并非即时划转,而是为确保您有足够的资金用于每日支付。")]),e("li",[e("b",[t._v("每日结算支付:")]),t._v('本服务采用"按日结算"模式。冻结的资金将根据租赁协议约定的每日费用,每日自动划转相应的金额给卖家。划转操作通常在每个UTC日结束时自动执行。')]),e("li",[e("b",[t._v("资金解冻:")]),t._v("当租赁服务到期或因其他原因终止后,系统中剩余的、未被划转的冻结资金将立即解除冻结,并返还至您的可用余额中。")]),e("li",[e("b",[t._v("订单生效:")]),t._v(" 您的订单在支付流程完成且资金成功冻结后立即生效。系统将开始为您配置相应的矿机或算力资源。")]),e("li",[e("b",[t._v("不可取消政策:")]),t._v(" 鉴于算力服务一经提供即无法退回的特性,所有订单一旦生效,即不可取消、不可退款、不可转让。您无法在租赁期内单方面中止服务或要求退还已冻结及已支付的费用。")]),e("li",[e("b",[t._v("免责声明:")]),t._v("因不可抗力(如自然灾害、政策变动等)导致订单延迟或无法履行,我们不承担相应责任。")]),e("li",[e("b",[t._v("算力波动:")]),t._v("您所租赁的算力产生的收益取决于区块链网络难度、全球总算力、币价波动、矿池运气等多种外部因素。我们仅提供稳定的算力输出,不对您的最终收益做出任何承诺或保证。")])]),e("p",{staticClass:"notice-title"},[t._v("再次提醒:数字资产挖矿存在较高市场风险,收益波动巨大,过去业绩不代表未来表现。请根据自身的风险承受能力谨慎决策。您下单的行为即代表您已充分了解并自愿承担所有相关风险。")]),e("div",{staticClass:"notice-ack"},[e("el-checkbox",{staticStyle:{color:"#e74c3c"},model:{value:t.noticeDialog.checked,callback:function(e){t.$set(t.noticeDialog,"checked",e)},expression:"noticeDialog.checked"}},[t._v("我已阅读并同意上述注意事项")])],1)])]),e("el-dialog",{attrs:{visible:t.googleCodeDialog.visible,width:"480px",title:"安全验证","show-close":!1,"close-on-click-modal":!1,"close-on-press-escape":!1},on:{"update:visible":function(e){return t.$set(t.googleCodeDialog,"visible",e)}},scopedSlots:t._u([{key:"footer",fn:function(){return[e("div",{staticClass:"dialog-footer"},[e("el-button",{on:{click:t.handleGoogleCodeCancel}},[t._v("取消")]),e("el-button",{attrs:{type:"primary",loading:t.googleCodeDialog.loading,disabled:!t.isGoogleCodeValid},on:{click:t.handleGoogleCodeSubmit}},[t._v(" "+t._s(t.googleCodeDialog.loading?"验证中...":"确认验证")+" ")])],1)]},proxy:!0}])},[e("div",{staticClass:"google-code-content"},[e("div",{staticClass:"verification-icon"},[e("i",{staticClass:"el-icon-lock",staticStyle:{"font-size":"48px",color:"#409EFF"}})]),e("div",{staticClass:"verification-title"},[e("h3",[t._v("请输入谷歌验证码")]),e("p",{staticClass:"verification-desc"},[t._v("为了保障您的账户安全,请输入您的谷歌验证器中的6位验证码")])]),e("div",{staticClass:"code-input-wrapper"},[e("el-input",{ref:"googleCodeInput",staticClass:"code-input",attrs:{placeholder:"请输入6位验证码",maxlength:"6",size:"large"},on:{input:t.handleGoogleCodeInput},nativeOn:{keyup:function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:t.handleGoogleCodeSubmit.apply(null,arguments)}},scopedSlots:t._u([{key:"prepend",fn:function(){return[e("i",{staticClass:"el-icon-key"})]},proxy:!0}]),model:{value:t.googleCodeDialog.code,callback:function(e){t.$set(t.googleCodeDialog,"code",e)},expression:"googleCodeDialog.code"}})],1),t.googleCodeDialog.error?e("div",{staticClass:"code-error"},[e("i",{staticClass:"el-icon-warning"}),e("span",[t._v(t._s(t.googleCodeDialog.error))])]):t._e()])])],1),e("el-dialog",{attrs:{visible:t.settlementSuccessfulVisible,width:"480px","append-to-body":"","close-on-click-modal":!1,"close-on-press-escape":!1},on:{"update:visible":function(e){t.settlementSuccessfulVisible=e},close:t.handleCloseSuccessDialog},scopedSlots:t._u([{key:"footer",fn:function(){return[e("el-button",{attrs:{type:"primary"},on:{click:t.handleCloseSuccessDialog}},[t._v("已知晓")])]},proxy:!0}])},[e("div",{staticStyle:{"text-align":"center",padding:"20px 0"}},[e("div",{staticStyle:{"font-size":"48px",color:"#52c41a","margin-bottom":"16px"}},[t._v("✓")]),e("div",{staticStyle:{"font-size":"18px",color:"#333","margin-bottom":"12px"}},[t._v("请求结算处理成功")]),e("div",{staticStyle:{color:"#666","line-height":"1.6"}},[t._v(" 请在订单列表页面查看结算状态"),e("br"),t._v(" 结算成功会自动更新钱包余额 ")])])])],1)},e.Yp=[]},9814:function(t,e,a){"use strict";Object.defineProperty(e,"B",{value:!0}),e.A=void 0,a(4114),a(8111),a(7588),a(8237);var s=a(5952),i=a(6067),o=a(5844);e.A={name:"Header",data(){return{user:null,cart:[],cartServerCount:0,navigation:i.mainNavigation}},computed:{cartItemCount(){return Number.isFinite(this.cartServerCount)?this.cartServerCount:0},breadcrumbs(){return(0,i.getBreadcrumb)(this.$route.path)}},watch:{},mounted(){this.loadCart(),window.addEventListener("storage",this.handleStorageChange),this.loadServerCartCount(),window.addEventListener("cart-updated",this.handleCartUpdated)},beforeDestroy(){window.removeEventListener("storage",this.handleStorageChange),window.removeEventListener("cart-updated",this.handleCartUpdated)},methods:{loadCart(){this.cart=(0,s.readCart)()},async loadServerCartCount(){try{const t=await(0,o.getGoodsList)(),e=Array.isArray(t&&t.rows)?t.rows:Array.isArray(t&&t.data&&t.data.rows)?t.data.rows:Array.isArray(t&&t.data)?t.data:Array.isArray(t)?t:[];let a=[];Array.isArray(e)&&e.length?Array.isArray(e[0]&&e[0].shoppingCartInfoDtoList)?e.forEach(t=>{Array.isArray(t&&t.shoppingCartInfoDtoList)&&a.push(...t.shoppingCartInfoDtoList)}):a=e:Array.isArray(t&&t.shoppingCartInfoDtoList)&&(a=t.shoppingCartInfoDtoList);let s=0;a.length?s=a.reduce((t,e)=>t+(Array.isArray(e&&e.productMachineDtoList)?e.productMachineDtoList.length:0),0):Array.isArray(t&&t.productMachineDtoList)&&(s=t.productMachineDtoList.length),this.cartServerCount=Number.isFinite(s)?s:0}catch(t){}},handleStorageChange(t){"power_leasing_cart_v1"===t.key&&(this.loadCart(),this.loadServerCartCount())},handleCartUpdated(t){try{const e=t&&t.detail&&Number(t.detail.count);if(Number.isFinite(e))return void(this.cartServerCount=e)}catch(e){}this.loadServerCartCount()},handleLogout(){this.user=null,this.cart=[]},getBreadcrumbPath(t){const e=["/productList","/cart","/checkout"];return 0===t?"/productList":t=o)&&Object.keys(a.O).every(function(t){return a.O[t](s[l])})?s.splice(l--,1):(n=!1,o0&&t[d-1][2]>o;d--)t[d]=t[d-1];t[d]=[s,i,o]}}(),function(){a.d=function(t,e){for(var s in e)a.o(e,s)&&!a.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:e[s]})}}(),function(){a.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"===typeof window)return window}}()}(),function(){a.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)}}(),function(){a.r=function(t){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}}(),function(){a.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t}}(),function(){a.p="/"}(),function(){var t={524:0};a.O.j=function(e){return 0===t[e]};var e=function(e,s){var i,o,r=s[0],n=s[1],l=s[2],c=0;if(r.some(function(e){return 0!==t[e]})){for(i in n)a.o(n,i)&&(a.m[i]=n[i]);if(l)var d=l(a)}for(e&&e(s);c\n
\n \n
\n

新增商品

\n

创建新的商品信息

\n
\n \n \n \n \n \n \n\n \n \n \n 矿机\n \n \n \n\n \n \n \n \n \n \n\n \n \n \n \n\n \n \n\n \n \n\n\n \n \n\n \n \n\n \n \n\n \n \n \n 上架\n 下架\n \n \n\n \n \n
\n 创建商品\n 重置\n 取消\n
\n
\n
\n
\n
\n\n\n\n\n ","\n\n\n\n\n","/**\r\n * 全局输入表情符号拦截守卫(极简,无侵入)\r\n * 作用:拦截所有原生 input/textarea 的输入事件,移除 Emoji,并重新派发 input 事件以同步 v-model\r\n * 注意:\r\n * - 跳过正在输入法合成阶段(compositionstart ~ compositionend),避免影响中文输入\r\n * - 默认对所有可编辑 input/textarea 生效;如需个别放行,可在元素上加 data-allow-emoji=\"true\"\r\n */\r\nexport const initNoEmojiGuard = () => {\r\n if (typeof window === 'undefined') return\r\n if (window.__noEmojiGuardInitialized) return\r\n window.__noEmojiGuardInitialized = true\r\n\r\n // 覆盖常见 Emoji、旗帜、杂项符号、ZWJ、变体选择符、组合键帽\r\n const emojiPattern = /[\\u{1F300}-\\u{1FAFF}]|[\\u{1F1E6}-\\u{1F1FF}]|[\\u{2600}-\\u{26FF}]|[\\u{2700}-\\u{27BF}]|[\\u{FE0F}]|[\\u{200D}]|[\\u{20E3}]/gu\r\n\r\n /**\r\n * 判断是否是需要拦截的可编辑元素\r\n * @param {EventTarget} el 事件目标\r\n * @returns {boolean}\r\n */\r\n const isEditableTarget = (el) => {\r\n if (!el || !(el instanceof Element)) return false\r\n if (el.getAttribute && el.getAttribute('data-allow-emoji') === 'true') return false\r\n const tag = el.tagName\r\n if (tag === 'INPUT') {\r\n const type = (el.getAttribute('type') || 'text').toLowerCase()\r\n // 排除不会产生文本的类型\r\n const disallow = ['checkbox', 'radio', 'file', 'hidden', 'button', 'submit', 'reset', 'range', 'color', 'date', 'datetime-local', 'month', 'time', 'week']\r\n return disallow.indexOf(type) === -1\r\n }\r\n if (tag === 'TEXTAREA') return true\r\n return false\r\n }\r\n\r\n // 记录输入法合成状态\r\n const setComposing = (el, composing) => {\r\n try { el.__noEmojiComposing = composing } catch (e) {}\r\n }\r\n const isComposing = (el) => !!(el && el.__noEmojiComposing)\r\n\r\n // 结束合成时做一次清洗\r\n document.addEventListener('compositionstart', (e) => {\r\n if (!isEditableTarget(e.target)) return\r\n setComposing(e.target, true)\r\n }, true)\r\n document.addEventListener('compositionend', (e) => {\r\n if (!isEditableTarget(e.target)) return\r\n setComposing(e.target, false)\r\n sanitizeAndRedispatch(e.target)\r\n }, true)\r\n\r\n // 主输入拦截:捕获阶段尽早处理\r\n document.addEventListener('input', (e) => {\r\n const target = e.target\r\n if (!isEditableTarget(target)) return\r\n if (isComposing(target)) return\r\n sanitizeAndRedispatch(target)\r\n }, true)\r\n\r\n /**\r\n * 清洗目标元素的值并在变更时重新派发 input 事件\r\n * @param {HTMLInputElement|HTMLTextAreaElement} target\r\n */\r\n function sanitizeAndRedispatch(target) {\r\n const before = String(target.value ?? '')\r\n if (!before) return\r\n if (!emojiPattern.test(before)) return\r\n const selectionStart = target.selectionStart\r\n const selectionEnd = target.selectionEnd\r\n const after = before.replace(emojiPattern, '')\r\n if (after === before) return\r\n target.value = after\r\n try {\r\n // 重置光标,尽量贴近原位置\r\n if (typeof selectionStart === 'number' && typeof selectionEnd === 'number') {\r\n const removed = before.length - after.length\r\n const nextPos = Math.max(0, selectionStart - removed)\r\n target.setSelectionRange(nextPos, nextPos)\r\n }\r\n } catch (e) {}\r\n // 重新派发 input 事件以同步 v-model\r\n const evt = new Event('input', { bubbles: true })\r\n target.dispatchEvent(evt)\r\n }\r\n}\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./index.vue?vue&type=template&id=2fdab8e8&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=js\"\nexport * from \"./index.vue?vue&type=script&lang=js\"\nimport style0 from \"./index.vue?vue&type=style&index=0&id=2fdab8e8&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2fdab8e8\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./idnex.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./idnex.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./idnex.vue?vue&type=template&id=0f1fd789\"\nimport script from \"./idnex.vue?vue&type=script&lang=js\"\nexport * from \"./idnex.vue?vue&type=script&lang=js\"\nimport style0 from \"./idnex.vue?vue&type=style&index=0&id=0f1fd789&prod&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import request from '../utils/request'\r\n\r\n//新增机器\r\nexport function addSingleOrBatchMachine(data) {\r\n return request({\r\n url: `/lease/product/machine/addSingleOrBatchMachine`,\r\n method: 'post',\r\n data\r\n })\r\n}\r\n\r\n\r\n//根据矿机id 删除商品矿机\r\nexport function deleteMachine(data) {\r\n return request({\r\n url: `/lease/product/machine/delete`,\r\n method: 'post',\r\n data\r\n })\r\n }\r\n\r\n\r\n //根据挖矿账户获取矿机列表\r\nexport function getUserMachineList(data) {\r\n return request({\r\n url: `/lease/product/machine/getUserMachineList`,\r\n method: 'post',\r\n data\r\n })\r\n }\r\n\r\n\r\n \r\n //根据 登录账户 获取挖矿账户及挖矿币种集合\r\nexport function getUserMinersList(data) {\r\n return request({\r\n url: `/lease/product/machine/getUserMinersList`,\r\n method: 'post',\r\n data\r\n })\r\n }\r\n\r\n\r\n //编辑矿机 + 矿机上下架\r\nexport function updateMachine(data) {\r\n return request({\r\n url: `/lease/product/machine/updateMachine`,\r\n method: 'post',\r\n data\r\n })\r\n }\r\n\r\n\r\n \r\n //获取矿机列表\r\nexport function getMachineListForUpdate(data) {\r\n return request({\r\n url: `/lease/product/machine/getMachineListForUpdate`,\r\n method: 'post',\r\n data\r\n })\r\n }","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./content.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./content.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./content.vue?vue&type=template&id=9935370e&scoped=true\"\nimport script from \"./content.vue?vue&type=script&lang=js\"\nexport * from \"./content.vue?vue&type=script&lang=js\"\nimport style0 from \"./content.vue?vue&type=style&index=0&id=9935370e&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"9935370e\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"account-products\"},[_c('div',{staticClass:\"toolbar\"},[_vm._m(0),_c('div',{staticClass:\"right-area\"},[_c('el-input',{staticClass:\"mr-12\",staticStyle:{\"width\":\"280px\"},attrs:{\"placeholder\":\"输入币种或算法关键字后回车/搜索\",\"size\":\"small\",\"clearable\":\"\"},on:{\"clear\":_vm.handleClear},nativeOn:{\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.handleSearch.apply(null, arguments)}},model:{value:(_vm.searchKeyword),callback:function ($$v) {_vm.searchKeyword=$$v},expression:\"searchKeyword\"}}),_c('el-button',{attrs:{\"type\":\"primary\",\"size\":\"small\"},on:{\"click\":_vm.handleSearch}},[_vm._v(\"搜索\")]),_c('el-button',{staticClass:\"ml-8\",attrs:{\"size\":\"small\"},on:{\"click\":_vm.handleReset}},[_vm._v(\"重置\")])],1)]),_c('el-table',{directives:[{name:\"loading\",rawName:\"v-loading\",value:(_vm.loading),expression:\"loading\"}],staticStyle:{\"width\":\"100%\"},attrs:{\"data\":_vm.tableData,\"border\":\"\",\"stripe\":\"\"}},[_c('el-table-column',{attrs:{\"prop\":\"name\",\"label\":\"名称\",\"min-width\":\"100\"}}),_c('el-table-column',{attrs:{\"prop\":\"coin\",\"label\":\"币种\",\"width\":\"100\"}}),_c('el-table-column',{attrs:{\"prop\":\"priceRange\",\"label\":\"价格范围\",\"width\":\"150\"}}),_c('el-table-column',{attrs:{\"prop\":\"algorithm\",\"label\":\"算法\",\"min-width\":\"120\"}}),_c('el-table-column',{attrs:{\"prop\":\"type\",\"label\":\"商品类型\",\"width\":\"130\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('el-tag',{attrs:{\"type\":scope.row.type === 1 ? 'success' : 'warning'}},[_vm._v(\" \"+_vm._s(scope.row.type === 1 ? '算力套餐' : '挖矿机器')+\" \")])]}}])}),_c('el-table-column',{attrs:{\"prop\":\"saleNumber\",\"label\":\"已售数量\",\"min-width\":\"60\"}}),_c('el-table-column',{attrs:{\"prop\":\"totalMachineNumber\",\"label\":\"该商品总机器数量\",\"min-width\":\"60\"}}),_c('el-table-column',{attrs:{\"prop\":\"state\",\"label\":\"状态\",\"width\":\"100\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('el-tag',{attrs:{\"type\":scope.row.state === 1 ? 'info' : 'success'}},[_vm._v(\" \"+_vm._s(scope.row.state === 1 ? '下架' : '上架')+\" \")])]}}])}),_c('el-table-column',{attrs:{\"label\":\"操作\",\"fixed\":\"right\",\"width\":\"220\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('el-button',{attrs:{\"type\":\"text\",\"size\":\"small\"},on:{\"click\":function($event){return _vm.handleView(scope.row)}}},[_vm._v(\"详情\")]),_c('el-button',{attrs:{\"type\":\"text\",\"size\":\"small\"},on:{\"click\":function($event){return _vm.handleEdit(scope.row)}}},[_vm._v(\"修改\")]),_c('el-button',{staticStyle:{\"color\":\"#f56c6c\"},attrs:{\"type\":\"text\",\"size\":\"small\"},on:{\"click\":function($event){return _vm.handleDelete(scope.row)}}},[_vm._v(\"删除\")]),_c('el-button',{attrs:{\"type\":\"text\",\"size\":\"small\"},on:{\"click\":function($event){return _vm.handleAddMachine(scope.row)}}},[_vm._v(\"添加出售机器\")])]}}])})],1),_c('div',{staticClass:\"pagination\"},[_c('el-pagination',{attrs:{\"background\":\"\",\"layout\":\"total, sizes, prev, pager, next, jumper\",\"total\":_vm.total,\"current-page\":_vm.pagination.pageNum,\"page-sizes\":[10, 20, 50, 100],\"page-size\":_vm.pagination.pageSize},on:{\"update:currentPage\":function($event){return _vm.$set(_vm.pagination, \"pageNum\", $event)},\"update:current-page\":function($event){return _vm.$set(_vm.pagination, \"pageNum\", $event)},\"update:pageSize\":function($event){return _vm.$set(_vm.pagination, \"pageSize\", $event)},\"update:page-size\":function($event){return _vm.$set(_vm.pagination, \"pageSize\", $event)},\"size-change\":_vm.handleSizeChange,\"current-change\":_vm.handleCurrentChange}})],1),_c('el-dialog',{attrs:{\"visible\":_vm.editDialog.visible,\"close-on-click-modal\":false,\"width\":\"620px\",\"title\":'编辑商品 - ' + ((_vm.editDialog.form && _vm.editDialog.form.name) ? _vm.editDialog.form.name : '')},on:{\"update:visible\":function($event){return _vm.$set(_vm.editDialog, \"visible\", $event)}},scopedSlots:_vm._u([{key:\"footer\",fn:function(){return [_c('el-button',{on:{\"click\":function($event){_vm.editDialog.visible = false}}},[_vm._v(\"取消\")]),_c('el-button',{attrs:{\"type\":\"primary\",\"loading\":_vm.editDialog.saving},on:{\"click\":_vm.handleSaveEdit}},[_vm._v(\"保存\")])]},proxy:true}])},[(_vm.editDialog.form)?_c('el-form',{ref:\"editForm\",staticClass:\"edit-form\",attrs:{\"model\":_vm.editDialog.form,\"label-width\":\"100px\"}},[_c('el-form-item',{attrs:{\"label\":\"名称\"}},[_c('el-input',{attrs:{\"maxlength\":\"30\",\"show-word-limit\":\"\"},model:{value:(_vm.editDialog.form.name),callback:function ($$v) {_vm.$set(_vm.editDialog.form, \"name\", $$v)},expression:\"editDialog.form.name\"}})],1),_c('el-form-item',{staticClass:\"align-like-input\",attrs:{\"label\":\"状态\"}},[_c('el-radio-group',{model:{value:(_vm.editDialog.form.state),callback:function ($$v) {_vm.$set(_vm.editDialog.form, \"state\", $$v)},expression:\"editDialog.form.state\"}},[_c('el-radio',{attrs:{\"label\":0}},[_vm._v(\"上架\")]),_c('el-radio',{attrs:{\"label\":1}},[_vm._v(\"下架\")])],1)],1),_c('el-form-item',{attrs:{\"label\":\"描述\"}},[_c('el-input',{attrs:{\"type\":\"textarea\",\"rows\":4,\"maxlength\":\"100\",\"show-word-limit\":\"\"},model:{value:(_vm.editDialog.form.description),callback:function ($$v) {_vm.$set(_vm.editDialog.form, \"description\", $$v)},expression:\"editDialog.form.description\"}})],1)],1):_vm._e()],1)],1)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"left-area\"},[_c('h2',{staticClass:\"page-title\"},[_vm._v(\"商品列表\")])])\n}]\n\nexport { render, staticRenderFns }","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./withdrawalHistory.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./withdrawalHistory.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./withdrawalHistory.vue?vue&type=template&id=37492658&scoped=true\"\nimport script from \"./withdrawalHistory.vue?vue&type=script&lang=js\"\nexport * from \"./withdrawalHistory.vue?vue&type=script&lang=js\"\nimport style0 from \"./withdrawalHistory.vue?vue&type=style&index=0&id=37492658&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"37492658\",\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\r\nimport App from './App.vue'\r\nimport router from './router'\r\nimport store from './store'\r\nimport ElementUI from 'element-ui';\r\nimport 'element-ui/lib/theme-chalk/index.css';\r\n// 引入登录信息处理\r\nimport './utils/loginInfo.js';\r\n// 全局输入防表情守卫(极简、无侵入)\r\nimport { initNoEmojiGuard } from './utils/noEmojiGuard.js';\r\n\r\nconsole.log = ()=>{} //全局关闭打印\r\n\r\n\r\nVue.config.productionTip = false\r\nVue.use(ElementUI);\r\n// 初始化全局防表情拦截器\r\ninitNoEmojiGuard();\r\nnew Vue({\r\n router,\r\n store,\r\n render: h => h(App)\r\n}).$mount('#app')\r\n","\n\n\n\n","\n\n\n\n\n\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./shopNew.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./shopNew.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./shopNew.vue?vue&type=template&id=7f00bb86&scoped=true\"\nimport script from \"./shopNew.vue?vue&type=script&lang=js\"\nexport * from \"./shopNew.vue?vue&type=script&lang=js\"\nimport style0 from \"./shopNew.vue?vue&type=style&index=0&id=7f00bb86&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7f00bb86\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","\n\n\n\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"account-page\"},[_c('div',{staticClass:\"account-layout\"},[_c('aside',{staticClass:\"sidebar\"},[_c('nav',{staticClass:\"side-nav\"},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.userEmail),expression:\"userEmail\"}],staticClass:\"user-info-card\",attrs:{\"role\":\"region\",\"aria-label\":\"用户信息\",\"tabindex\":\"0\"}},[_c('div',{staticClass:\"user-meta\"},[_c('div',{staticClass:\"user-email\",attrs:{\"title\":_vm.userEmail || '未登录'}},[_vm._v(_vm._s(_vm.userEmail || '未登录'))])])]),_c('div',{staticClass:\"user-role\",attrs:{\"role\":\"group\",\"aria-label\":\"导航分组切换\"}},[_c('button',{staticClass:\"role-button\",class:{ active: _vm.activeRole === 'buyer' },attrs:{\"aria-pressed\":_vm.activeRole === 'buyer',\"tabindex\":\"0\"},on:{\"click\":function($event){return _vm.handleClickRole('buyer')},\"keydown\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;$event.preventDefault();return _vm.handleClickRole('buyer')},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"space\",32,$event.key,[\" \",\"Spacebar\"]))return null;$event.preventDefault();return _vm.handleClickRole('buyer')}]}},[_vm._v(\"买家相关\")]),_c('button',{staticClass:\"role-button\",class:{ active: _vm.activeRole === 'seller' },attrs:{\"aria-pressed\":_vm.activeRole === 'seller',\"tabindex\":\"0\"},on:{\"click\":function($event){return _vm.handleClickRole('seller')},\"keydown\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;$event.preventDefault();return _vm.handleClickRole('seller')},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"space\",32,$event.key,[\" \",\"Spacebar\"]))return null;$event.preventDefault();return _vm.handleClickRole('seller')}]}},[_vm._v(\"卖家相关\")])]),_vm._l((_vm.displayedLinks),function(item){return _c('router-link',{key:item.to,class:['side-link', _vm.isActiveLink(item.to) ? 'active' : ''],attrs:{\"to\":item.to}},[_vm._v(_vm._s(item.label))])})],2)]),_c('section',{staticClass:\"content\"},[_c('router-view')],1)])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{attrs:{\"id\":\"app\"}},[_c('router-view')],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('el-container',{staticClass:\"containerApp\",staticStyle:{\"width\":\"100vw\",\"height\":\"100vh\"}},[_c('el-header',{staticClass:\"el-header\"},[_c('comHeard')],1),_c('el-main',{staticClass:\"el-main\"},[_c('appMain')],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./receiptRecord.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./receiptRecord.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./receiptRecord.vue?vue&type=template&id=cabadc3c&scoped=true\"\nimport script from \"./receiptRecord.vue?vue&type=script&lang=js\"\nexport * from \"./receiptRecord.vue?vue&type=script&lang=js\"\nimport style0 from \"./receiptRecord.vue?vue&type=style&index=0&id=cabadc3c&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"cabadc3c\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"wallet-container\"},[_c('div',{staticClass:\"wallet-toolbar\",attrs:{\"role\":\"region\",\"aria-label\":\"钱包操作\"}},[_c('el-button',{staticClass:\"create-wallet-btn\",attrs:{\"type\":\"primary\"},on:{\"click\":_vm.openCreateWallet}},[_c('i',{staticClass:\"el-icon-plus\",staticStyle:{\"margin-right\":\"6px\"}}),_vm._v(\"充值 \")])],1),_c('section',{staticClass:\"wallet-card-section\"},_vm._l((_vm.walletList),function(w){return _c('div',{key:w.id,staticClass:\"wallet-card\"},[_c('div',{staticClass:\"wallet-header\"},[_c('h2',{staticClass:\"wallet-title\"},[_c('i',{staticClass:\"el-icon-wallet\"}),_vm._v(\" 我的钱包 \"),_c('el-tag',{staticStyle:{\"margin-left\":\"8px\"},attrs:{\"size\":\"mini\",\"effect\":\"dark\"}},[_vm._v(\" \"+_vm._s((w.fromChain || w.chain || '').toUpperCase())+\" \"+_vm._s((w.fromSymbol || w.coin || '').toUpperCase())+\" \")])],1),_c('div',{staticClass:\"wallet-balance\"},[_c('div',{staticClass:\"balance-item\"},[_c('span',{staticClass:\"balance-label\"},[_vm._v(\"可用余额\")]),_c('span',{staticClass:\"balance-amount\"},[_vm._v(_vm._s((w.walletBalance || w.balance || 0))+\" \"+_vm._s(_vm.displaySymbol(w)))])]),_c('div',{staticClass:\"balance-item\"},[_c('el-tooltip',{attrs:{\"placement\":\"top\",\"effect\":\"dark\"}},[_c('div',{attrs:{\"slot\":\"content\"},slot:\"content\"},[_vm._v(\" 冻结金额不能使用或提现,以下情况会冻结钱包余额:\"),_c('br'),_vm._v(\" 1. 下单机器后会冻结订单对应金额\"),_c('br'),_vm._v(\" 2. 提交提现后,金额正在提现中 \")]),_c('i',{staticClass:\"el-icon-question balance-tip-icon\"})]),_c('span',{staticClass:\"balance-label\"},[_vm._v(\"冻结余额\")]),_c('span',{staticClass:\"balance-amount frozen\"},[_vm._v(_vm._s((w.blockedBalance || 0))+\" \"+_vm._s(_vm.displaySymbol(w)))])],1),_c('el-button',{staticClass:\"withdraw-inline-btn\",attrs:{\"type\":\"success\",\"size\":\"mini\"},on:{\"click\":function($event){return _vm.handleWithdraw(w)}}},[_vm._v(\" 提现 \")])],1)])])}),0),_c('div',{staticClass:\"transaction-section\"},[_c('h3',{staticClass:\"section-title\"},[_vm._v(\"最近交易\")]),_c('div',{staticClass:\"transaction-list\"},[_vm._l((_vm.recentTransactions),function(transaction){return _c('div',{key:transaction.id,staticClass:\"transaction-item\"},[_c('div',{staticClass:\"transaction-info\"},[_c('span',{staticClass:\"transaction-type\"},[_vm._v(_vm._s(transaction.type))]),_c('span',{staticClass:\"transaction-time\"},[_vm._v(_vm._s(transaction.time))]),_c('el-tag',{staticClass:\"transaction-status\",attrs:{\"size\":\"mini\",\"type\":transaction.statusTagType || 'info'}},[_vm._v(\" \"+_vm._s(transaction.statusText || '-')+\" \")])],1),_c('div',{staticClass:\"transaction-amount\",class:transaction.amount > 0 ? 'positive' : 'negative'},[_vm._v(\" \"+_vm._s(transaction.amount > 0 ? '+' : '')+_vm._s(transaction.amountText)+\" USDT \")])])}),(_vm.recentTransactions.length === 0)?_c('div',{staticClass:\"empty-state\"},[_vm._v(\" 暂无交易记录 \")]):_vm._e()],2)]),_c('el-dialog',{attrs:{\"title\":\"钱包余额充值\",\"visible\":_vm.rechargeDialogVisible,\"width\":\"660px\"},on:{\"update:visible\":function($event){_vm.rechargeDialogVisible=$event},\"close\":_vm.resetRechargeForm}},[_c('div',{staticClass:\"recharge-content\"},[_c('div',{staticClass:\"wallet-address-section\"},[_c('h4',{staticClass:\"section-title\"},[_vm._v(\"钱包地址\")]),_c('div',{staticClass:\"charge-meta\"},[_c('el-tag',{staticClass:\"meta-tag\",attrs:{\"size\":\"small\",\"effect\":\"dark\",\"type\":\"warning\"}},[_c('i',{staticClass:\"el-icon-link\"}),_c('span',{staticClass:\"meta-title\"},[_vm._v(\"充值链:\")]),_c('span',{staticClass:\"meta-val\"},[_vm._v(_vm._s((_vm.WalletData.fromChain || _vm.WalletData.chain || '').toString().toUpperCase()))])]),_c('el-tag',{staticClass:\"meta-tag\",attrs:{\"size\":\"small\",\"effect\":\"dark\",\"type\":\"warning\"}},[_c('i',{staticClass:\"el-icon-coin\"}),_c('span',{staticClass:\"meta-title\"},[_vm._v(\"充值币种:\")]),_c('span',{staticClass:\"meta-val\"},[_vm._v(_vm._s((_vm.WalletData.fromSymbol || _vm.WalletData.coin || '').toString().toUpperCase()))])])],1),_c('div',{staticClass:\"address-container\"},[_c('el-input',{staticClass:\"address-input\",attrs:{\"readonly\":\"\",\"disabled\":true},model:{value:(_vm.WalletData.fromAddress),callback:function ($$v) {_vm.$set(_vm.WalletData, \"fromAddress\", $$v)},expression:\"WalletData.fromAddress\"}}),_c('el-button',{staticClass:\"copy-btn\",attrs:{\"type\":\"primary\",\"size\":\"small\"},on:{\"click\":function($event){return _vm.copyAddress(_vm.WalletData.fromAddress)}}},[_vm._v(\" 复制 \")])],1),_c('p',{staticClass:\"address-tip\"},[_vm._v(\"请向此地址转账非\"+_vm._s(_vm.displaySymbol(_vm.WalletData))+\"资产,否则资产将无法找回.\")])]),_c('div',{staticClass:\"qr-code-section\"},[_c('h4',{staticClass:\"section-title\"},[_vm._v(\"扫码充值\")]),_c('div',{staticClass:\"qr-code-container\"},[_c('div',{ref:\"qrCodeRef\",staticClass:\"qr-code\"}),_c('p',{staticClass:\"qr-tip\"},[_vm._v(\"使用支持\"+_vm._s(_vm.displaySymbol(_vm.WalletData))+\"的钱包扫描二维码\")])])]),_c('div',{staticClass:\"recharge-notice\"},[_c('h4',{staticClass:\"section-title\"},[_vm._v(\"充值说明\")]),_c('ul',{staticClass:\"notice-list\"},[_c('li',[_vm._v(\"充值后请耐心等待余额更新或在资金流水页面查看最新充值记录\")]),_c('li',[_vm._v(\"最小充值金额:10 \"+_vm._s(_vm.displaySymbol(_vm.WalletData)))])])])]),_c('div',{staticClass:\"dialog-footer\",attrs:{\"slot\":\"footer\"},slot:\"footer\"},[_c('el-button',{on:{\"click\":function($event){_vm.rechargeDialogVisible = false}}},[_vm._v(\"关闭\")])],1)]),_c('el-dialog',{attrs:{\"title\":\"USDT提现\",\"visible\":_vm.withdrawDialogVisible,\"width\":\"720px\",\"close-on-click-modal\":false,\"close-on-press-escape\":false},on:{\"update:visible\":function($event){_vm.withdrawDialogVisible=$event},\"close\":_vm.resetWithdrawForm}},[_c('el-form',{ref:\"withdrawForm\",attrs:{\"model\":_vm.withdrawForm,\"rules\":_vm.withdrawRules,\"label-width\":\"120px\"}},[_c('el-form-item',{attrs:{\"label\":\"提现链\"}},[_c('el-input',{staticStyle:{\"width\":\"100%\"},attrs:{\"value\":(_vm.WalletData.fromChain || _vm.WalletData.chain || _vm.withdrawForm.toChain || '').toString().toUpperCase(),\"disabled\":true}})],1),_c('el-form-item',{attrs:{\"label\":\"提现币种\"}},[_c('el-input',{staticStyle:{\"width\":\"100%\"},attrs:{\"value\":_vm.displayWithdrawSymbol,\"disabled\":true}})],1),_c('el-form-item',{attrs:{\"label\":\"提现金额\",\"prop\":\"amount\"}},[_c('el-input',{staticStyle:{\"width\":\"100%\"},attrs:{\"placeholder\":\"请输入提现金额\",\"inputmode\":\"decimal\"},on:{\"input\":_vm.handleAmountInput},model:{value:(_vm.withdrawForm.amount),callback:function ($$v) {_vm.$set(_vm.withdrawForm, \"amount\", $$v)},expression:\"withdrawForm.amount\"}},[_c('template',{slot:\"append\"},[_vm._v(_vm._s(_vm.displayWithdrawSymbol))])],2),_c('div',{staticClass:\"balance-info\"},[_c('div',{staticClass:\"balance-total\"},[_vm._v(\"钱包总余额:\"+_vm._s(_vm.totalBalance)+\" \"+_vm._s(_vm.displayWithdrawSymbol))]),_c('div',{staticClass:\"balance-row\"},[_c('span',[_vm._v(\"可用余额:\"+_vm._s(_vm.availableWithdrawBalance)+\" \"+_vm._s(_vm.displayWithdrawSymbol))]),_c('span',{staticClass:\"divider\"},[_vm._v(\"|\")]),_c('span',{staticClass:\"frozen-info\"},[_c('el-tooltip',{attrs:{\"placement\":\"top\",\"effect\":\"dark\"}},[_c('div',{attrs:{\"slot\":\"content\"},slot:\"content\"},[_vm._v(\" 冻结金额不能使用或提现,以下情况会冻结钱包余额:\"),_c('br'),_vm._v(\" 1. 下单机器后会冻结订单对应金额\"),_c('br'),_vm._v(\" 2. 提交提现后,金额正在提现中 \")]),_c('i',{staticClass:\"el-icon-question frozen-tip-icon\"})]),_vm._v(\" 冻结余额:\"+_vm._s((_vm.WalletData.blockedBalance || 0))+\" \"+_vm._s(_vm.displayWithdrawSymbol)+\" \"),_c('span',{staticClass:\"frozen-tip\"},[_vm._v(\"(购买机器下单后冻结,不可提现)\")])],1)])])],1),_c('el-form-item',{attrs:{\"label\":\"手续费\"}},[_c('el-input',{staticStyle:{\"width\":\"100%\"},attrs:{\"placeholder\":\"手续费\",\"disabled\":true},model:{value:(_vm.withdrawForm.fee),callback:function ($$v) {_vm.$set(_vm.withdrawForm, \"fee\", $$v)},expression:\"withdrawForm.fee\"}},[_c('template',{slot:\"append\"},[_vm._v(_vm._s(_vm.displayWithdrawSymbol))])],2),_c('div',{staticClass:\"fee-info\"},[_vm._v(\" 网络手续费:\"+_vm._s(_vm.withdrawForm.fee || '0.00')+\" \"+_vm._s(_vm.displayWithdrawSymbol)+\" \")])],1),_c('el-form-item',{attrs:{\"label\":\"实际到账\"}},[_c('el-input',{staticStyle:{\"width\":\"100%\"},attrs:{\"placeholder\":\"实际到账金额\",\"disabled\":true},model:{value:(_vm.actualAmount),callback:function ($$v) {_vm.actualAmount=$$v},expression:\"actualAmount\"}},[_c('template',{slot:\"append\"},[_vm._v(_vm._s(_vm.displayWithdrawSymbol))])],2),_c('div',{staticClass:\"actual-amount-info\"},[_vm._v(\" 实际到账:\"+_vm._s(_vm.actualAmount)+\" \"+_vm._s(_vm.displayWithdrawSymbol)+\" \")])],1),_c('el-form-item',{attrs:{\"label\":\"收款地址\",\"prop\":\"toAddress\"}},[_c('el-input',{staticStyle:{\"width\":\"100%\"},attrs:{\"type\":\"textarea\",\"rows\":3,\"placeholder\":\"请输入收款钱包地址\"},model:{value:(_vm.withdrawForm.toAddress),callback:function ($$v) {_vm.$set(_vm.withdrawForm, \"toAddress\", $$v)},expression:\"withdrawForm.toAddress\"}}),_c('div',{staticClass:\"address-tip\"},[_vm._v(\" 请确保地址正确,错误地址将导致资产丢失 \")])],1),_c('el-form-item',{attrs:{\"label\":\"谷歌验证码\",\"prop\":\"googleCode\"}},[_c('el-input',{ref:\"googleCodeInput\",staticStyle:{\"width\":\"100%\"},attrs:{\"placeholder\":\"请输入6位谷歌验证码\",\"maxlength\":\"6\"},on:{\"input\":_vm.handleGoogleCodeInput},model:{value:(_vm.withdrawForm.googleCode),callback:function ($$v) {_vm.$set(_vm.withdrawForm, \"googleCode\", $$v)},expression:\"withdrawForm.googleCode\"}},[_c('template',{slot:\"prepend\"},[_c('i',{staticClass:\"el-icon-key\"})])],2),_c('div',{staticClass:\"google-code-tip\"},[_vm._v(\" 为了保障您的账户安全,请输入您的谷歌验证器中的6位验证码 \")])],1)],1),_c('div',{staticClass:\"dialog-footer\",attrs:{\"slot\":\"footer\"},slot:\"footer\"},[_c('el-button',{on:{\"click\":function($event){_vm.withdrawDialogVisible = false}}},[_vm._v(\"取消\")]),_c('el-button',{attrs:{\"type\":\"primary\",\"loading\":_vm.withdrawLoading},on:{\"click\":_vm.confirmWithdraw}},[_vm._v(\"确认提现\")])],1)],1),_c('el-dialog',{attrs:{\"title\":\"链上充值\",\"visible\":_vm.createDialogVisible,\"close-on-click-modal\":false,\"close-on-press-escape\":false,\"width\":\"520px\"},on:{\"update:visible\":function($event){_vm.createDialogVisible=$event}}},[_c('el-form',{attrs:{\"label-width\":\"120px\"}},[_c('el-form-item',{attrs:{\"label\":\"选择充值链/币种\"}},[_c('el-cascader',{staticStyle:{\"width\":\"100%\"},attrs:{\"options\":_vm.options},model:{value:(_vm.createValue),callback:function ($$v) {_vm.createValue=$$v},expression:\"createValue\"}})],1)],1),_c('div',{staticClass:\"dialog-footer\",attrs:{\"slot\":\"footer\"},slot:\"footer\"},[_c('el-button',{on:{\"click\":function($event){_vm.createDialogVisible = false}}},[_vm._v(\"取消\")]),_c('el-button',{attrs:{\"type\":\"primary\",\"loading\":_vm.createLoading},on:{\"click\":_vm.confirmCreateWallet}},[_vm._v(\"确定\")])],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"order-detail-page\"},[_c('h2',{staticClass:\"title\"},[_vm._v(\"订单详情\")]),(_vm.loading)?_c('div',{staticClass:\"loading\"},[_vm._v(\"加载中...\")]):_c('div',[_c('el-card',{staticClass:\"section\"},[_c('div',{staticClass:\"row\"},[_c('span',{staticClass:\"label\"},[_vm._v(\"订单ID:\")]),_c('span',{staticClass:\"value mono\"},[_vm._v(_vm._s(_vm.order.id || '—'))])]),_c('div',{staticClass:\"row\"},[_c('span',{staticClass:\"label\"},[_vm._v(\"订单号:\")]),_c('span',{staticClass:\"value mono\"},[_vm._v(_vm._s(_vm.order.orderNumber || '—'))])]),_c('div',{staticClass:\"row\"},[_c('span',{staticClass:\"label\"},[_vm._v(\"状态:\")]),_c('span',{staticClass:\"value\"},[_vm._v(_vm._s(_vm.getOrderStatusText(_vm.order.status)))])]),_c('div',{staticClass:\"row\"},[_c('span',{staticClass:\"label\"},[_vm._v(\"金额(USDT):\")]),_c('span',{staticClass:\"value strong\"},[_vm._v(_vm._s(_vm.order.totalPrice))])]),_c('div',{staticClass:\"row\"},[_c('span',{staticClass:\"label\"},[_vm._v(\"创建时间:\")]),_c('span',{staticClass:\"value\"},[_vm._v(_vm._s(_vm.formatDateTime(_vm.order.createTime)))])])]),_c('el-card',{staticClass:\"section\",staticStyle:{\"margin-top\":\"12px\"}},[_c('div',{staticClass:\"sub-title\"},[_vm._v(\"机器列表\")]),_c('el-table',{staticStyle:{\"width\":\"100%\"},attrs:{\"data\":_vm.items,\"border\":\"\",\"size\":\"small\",\"header-cell-style\":{ textAlign: 'left' },\"cell-style\":{ textAlign: 'left' }}},[_c('el-table-column',{attrs:{\"prop\":\"productMachineId\",\"label\":\"机器ID\",\"min-width\":\"120\"}}),_c('el-table-column',{attrs:{\"prop\":\"name\",\"label\":\"名称\",\"min-width\":\"160\"}}),_c('el-table-column',{attrs:{\"prop\":\"payCoin\",\"label\":\"币种\",\"min-width\":\"100\"}}),_c('el-table-column',{attrs:{\"prop\":\"leaseTime\",\"label\":\"租赁天数\",\"min-width\":\"100\"}}),_c('el-table-column',{attrs:{\"prop\":\"price\",\"label\":\"单价(USDT)\",\"min-width\":\"120\"}}),_c('el-table-column',{attrs:{\"prop\":\"address\",\"label\":\"收款地址\",\"min-width\":\"240\"}})],1)],1),_c('div',{staticClass:\"actions\"},[_c('el-button',{on:{\"click\":function($event){return _vm.$router.back()}}},[_vm._v(\"返回\")])],1)],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"recharge-record-container\"},[_vm._m(0),_c('div',{staticClass:\"tab-container\"},[_c('el-tabs',{on:{\"tab-click\":_vm.handleTabClick},model:{value:(_vm.activeTab),callback:function ($$v) {_vm.activeTab=$$v},expression:\"activeTab\"}},[_c('el-tab-pane',{attrs:{\"label\":\"充值中\",\"name\":\"pending\"}},[_c('div',{staticClass:\"tab-content\"},[_c('div',{staticClass:\"list-header\"},[_c('span',{staticClass:\"list-title\"},[_vm._v(\"充值中 (\"+_vm._s(_vm.pendingRecharges.length)+\")\")]),_c('el-button',{attrs:{\"type\":\"primary\",\"size\":\"small\"},on:{\"click\":_vm.refreshData}},[_c('i',{staticClass:\"el-icon-refresh\"}),_vm._v(\" 刷新 \")])],1),_c('div',{directives:[{name:\"loading\",rawName:\"v-loading\",value:(_vm.loading),expression:\"loading\"}],staticClass:\"recharge-list\"},[_vm._l((_vm.pendingRecharges),function(item){return _c('div',{key:item.id,staticClass:\"recharge-item pending\",on:{\"click\":function($event){return _vm.showDetail(item)}}},[_c('div',{staticClass:\"item-main\"},[_c('div',{staticClass:\"item-left\"},[_c('div',{staticClass:\"amount\"},[_vm._v(\" \"+_vm._s(item.amount)+\" \"+_vm._s(item.fromSymbol || \"USDT\")+\" \")]),_c('div',{staticClass:\"chain\"},[_vm._v(_vm._s(_vm.getChainName(item.fromChain)))])]),_c('div',{staticClass:\"item-right\"},[_c('div',{staticClass:\"status pending-status\"},[_c('i',{staticClass:\"el-icon-loading\"}),_vm._v(\" \"+_vm._s(_vm.getStatusText(item.status))+\" \")]),_c('div',{staticClass:\"time\"},[_vm._v(_vm._s(_vm.formatTime(item.createTime)))])])]),_c('div',{staticClass:\"item-footer\"},[_c('div',{staticClass:\"footer-left\"},[_c('span',{staticClass:\"address\"},[_vm._v(_vm._s(_vm.formatAddress(item.address)))]),(item.txHash)?_c('span',{staticClass:\"tx-hash\"},[_c('i',{staticClass:\"el-icon-link\"}),_vm._v(\" \"+_vm._s(_vm.formatAddress(item.txHash))+\" \")]):_vm._e()]),_c('i',{staticClass:\"el-icon-arrow-right\"})])])}),(_vm.pendingRecharges.length === 0)?_c('div',{staticClass:\"empty-state\"},[_c('i',{staticClass:\"el-icon-document\"}),_c('p',[_vm._v(\"暂无充值中的记录\")])]):_vm._e()],2)])]),_c('el-tab-pane',{attrs:{\"label\":\"充值成功\",\"name\":\"success\"}},[_c('div',{staticClass:\"tab-content\"},[_c('div',{staticClass:\"list-header\"},[_c('span',{staticClass:\"list-title\"},[_vm._v(\"充值成功 (\"+_vm._s(_vm.successRecharges.length)+\")\")]),_c('el-button',{attrs:{\"type\":\"primary\",\"size\":\"small\"},on:{\"click\":_vm.refreshData}},[_c('i',{staticClass:\"el-icon-refresh\"}),_vm._v(\" 刷新 \")])],1),_c('div',{directives:[{name:\"loading\",rawName:\"v-loading\",value:(_vm.loading),expression:\"loading\"}],staticClass:\"recharge-list\"},[_vm._l((_vm.successRecharges),function(item){return _c('div',{key:item.id,staticClass:\"recharge-item success\",on:{\"click\":function($event){return _vm.showDetail(item)}}},[_c('div',{staticClass:\"item-main\"},[_c('div',{staticClass:\"item-left\"},[_c('div',{staticClass:\"amount\"},[_vm._v(\" \"+_vm._s(item.amount)+\" \"+_vm._s(item.fromSymbol || \"USDT\")+\" \")]),_c('div',{staticClass:\"chain\"},[_vm._v(_vm._s(_vm.getChainName(item.fromChain)))])]),_c('div',{staticClass:\"item-right\"},[_c('div',{staticClass:\"status success-status\"},[_c('i',{staticClass:\"el-icon-check\"}),_vm._v(\" \"+_vm._s(_vm.getStatusText(item.status))+\" \")]),_c('div',{staticClass:\"time\"},[_vm._v(_vm._s(_vm.formatTime(item.createTime)))])])]),_c('div',{staticClass:\"item-footer\"},[_c('div',{staticClass:\"footer-left\"},[_c('span',{staticClass:\"address\"},[_vm._v(_vm._s(_vm.formatAddress(item.address)))]),(item.txHash)?_c('span',{staticClass:\"tx-hash\"},[_c('i',{staticClass:\"el-icon-link\"}),_vm._v(\" \"+_vm._s(_vm.formatAddress(item.txHash))+\" \")]):_vm._e()]),_c('i',{staticClass:\"el-icon-arrow-right\"})])])}),(_vm.successRecharges.length === 0)?_c('div',{staticClass:\"empty-state\"},[_c('i',{staticClass:\"el-icon-document\"}),_c('p',[_vm._v(\"暂无充值成功的记录\")])]):_vm._e()],2)])]),_c('el-tab-pane',{attrs:{\"label\":\"充值失败\",\"name\":\"failed\"}},[_c('div',{staticClass:\"tab-content\"},[_c('div',{staticClass:\"list-header\"},[_c('span',{staticClass:\"list-title\"},[_vm._v(\"充值失败 (\"+_vm._s(_vm.failedRecharges.length)+\")\")]),_c('el-button',{attrs:{\"type\":\"primary\",\"size\":\"small\"},on:{\"click\":_vm.refreshData}},[_c('i',{staticClass:\"el-icon-refresh\"}),_vm._v(\" 刷新 \")])],1),_c('div',{directives:[{name:\"loading\",rawName:\"v-loading\",value:(_vm.loading),expression:\"loading\"}],staticClass:\"recharge-list\"},[_vm._l((_vm.failedRecharges),function(item){return _c('div',{key:item.id,staticClass:\"recharge-item failed\",on:{\"click\":function($event){return _vm.showDetail(item)}}},[_c('div',{staticClass:\"item-main\"},[_c('div',{staticClass:\"item-left\"},[_c('div',{staticClass:\"amount\"},[_vm._v(\" \"+_vm._s(item.amount)+\" \"+_vm._s(item.fromSymbol || \"USDT\")+\" \")]),_c('div',{staticClass:\"chain\"},[_vm._v(_vm._s(_vm.getChainName(item.fromChain)))])]),_c('div',{staticClass:\"item-right\"},[_c('div',{staticClass:\"status failed-status\"},[_c('i',{staticClass:\"el-icon-close\"}),_vm._v(\" \"+_vm._s(_vm.getStatusText(item.status))+\" \")]),_c('div',{staticClass:\"time\"},[_vm._v(_vm._s(_vm.formatTime(item.createTime)))])])]),_c('div',{staticClass:\"item-footer\"},[_c('div',{staticClass:\"footer-left\"},[_c('span',{staticClass:\"address\"},[_vm._v(_vm._s(_vm.formatAddress(item.address)))]),(item.txHash)?_c('span',{staticClass:\"tx-hash\"},[_c('i',{staticClass:\"el-icon-link\"}),_vm._v(\" \"+_vm._s(_vm.formatAddress(item.txHash))+\" \")]):_vm._e()]),_c('i',{staticClass:\"el-icon-arrow-right\"})])])}),(_vm.failedRecharges.length === 0)?_c('div',{staticClass:\"empty-state\"},[_c('i',{staticClass:\"el-icon-document\"}),_c('p',[_vm._v(\"暂无充值失败的记录\")])]):_vm._e()],2)])])],1),_c('el-row',[_c('el-col',{staticStyle:{\"display\":\"flex\",\"justify-content\":\"center\"},attrs:{\"span\":24}},[_c('el-pagination',{staticStyle:{\"margin\":\"0 auto\",\"margin-top\":\"10px\"},attrs:{\"current-page\":_vm.currentPage,\"page-sizes\":_vm.pageSizes,\"page-size\":_vm.pagination.pageSize,\"layout\":\"total, sizes, prev, pager, next, jumper\",\"total\":_vm.total},on:{\"size-change\":_vm.handleSizeChange,\"current-change\":_vm.handleCurrentChange,\"update:currentPage\":function($event){_vm.currentPage=$event},\"update:current-page\":function($event){_vm.currentPage=$event}}})],1)],1)],1),_c('el-dialog',{attrs:{\"title\":\"充值详情\",\"visible\":_vm.detailDialogVisible,\"width\":\"600px\"},on:{\"update:visible\":function($event){_vm.detailDialogVisible=$event},\"close\":_vm.closeDetail}},[(_vm.selectedItem)?_c('div',{staticClass:\"detail-content\"},[_c('div',{staticClass:\"detail-section\"},[_c('h3',{staticClass:\"section-title\"},[_vm._v(\"基本信息\")]),_c('div',{staticClass:\"detail-list\"},[_c('div',{staticClass:\"detail-row\"},[_c('span',{staticClass:\"detail-label\"},[_vm._v(\"充值ID\")]),_c('span',{staticClass:\"detail-value\"},[_vm._v(_vm._s(_vm.selectedItem.id))])]),_c('div',{staticClass:\"detail-row\"},[_c('span',{staticClass:\"detail-label\"},[_vm._v(\"充值金额\")]),_c('span',{staticClass:\"detail-value amount\"},[_vm._v(_vm._s(_vm.selectedItem.amount)+\" \"+_vm._s(_vm.selectedItem.fromSymbol || \"USDT\"))])]),_c('div',{staticClass:\"detail-row\"},[_c('span',{staticClass:\"detail-label\"},[_vm._v(\"区块链网络\")]),_c('span',{staticClass:\"detail-value\"},[_vm._v(_vm._s(_vm.getChainName(_vm.selectedItem.fromChain)))])]),_c('div',{staticClass:\"detail-row\"},[_c('span',{staticClass:\"detail-label\"},[_vm._v(\"充值状态\")]),_c('span',{staticClass:\"detail-value\"},[_c('el-tag',{attrs:{\"type\":_vm.getStatusType(_vm.selectedItem.status)}},[_vm._v(\" \"+_vm._s(_vm.getStatusText(_vm.selectedItem.status))+\" \")])],1)])])]),_c('div',{staticClass:\"detail-section\"},[_c('h3',{staticClass:\"section-title\"},[_vm._v(\"地址信息\")]),_c('div',{staticClass:\"detail-list\"},[_c('div',{staticClass:\"detail-row\"},[_c('span',{staticClass:\"detail-label\"},[_vm._v(\"充值地址\")]),_c('div',{staticClass:\"address-container\"},[_c('span',{staticClass:\"detail-value address\"},[_vm._v(_vm._s(_vm.selectedItem.address))]),_c('el-button',{attrs:{\"type\":\"text\",\"size\":\"small\"},on:{\"click\":function($event){return _vm.copyAddress(_vm.selectedItem.address)}}},[_vm._v(\" 复制 \")])],1)]),(_vm.selectedItem.txHash)?_c('div',{staticClass:\"detail-row\"},[_c('span',{staticClass:\"detail-label\"},[_vm._v(\"交易哈希\")]),_c('div',{staticClass:\"address-container\"},[_c('span',{staticClass:\"detail-value address\"},[_vm._v(_vm._s(_vm.selectedItem.txHash))]),_c('el-button',{attrs:{\"type\":\"text\",\"size\":\"small\"},on:{\"click\":function($event){return _vm.copyAddress(_vm.selectedItem.txHash)}}},[_vm._v(\" 复制 \")])],1)]):_vm._e()])]),_c('div',{staticClass:\"detail-section\"},[_c('h3',{staticClass:\"section-title\"},[_vm._v(\"时间信息\")]),_c('div',{staticClass:\"detail-list\"},[_c('div',{staticClass:\"detail-row\"},[_c('span',{staticClass:\"detail-label\"},[_vm._v(\"充值时间\")]),_c('span',{staticClass:\"detail-value\"},[_vm._v(_vm._s(_vm.formatFullTime(_vm.selectedItem.createTime)))])])])])]):_vm._e(),_c('div',{staticClass:\"dialog-footer\",attrs:{\"slot\":\"footer\"},slot:\"footer\"},[_c('el-button',{on:{\"click\":_vm.closeDetail}},[_vm._v(\"关闭\")])],1)])],1)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"page-header\"},[_c('h1',{staticClass:\"page-title\"},[_vm._v(\"充值记录\")]),_c('p',{staticClass:\"page-subtitle\"},[_vm._v(\"查看您的充值申请和到账状态\")])])\n}]\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./shopConfig.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./shopConfig.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./shopConfig.vue?vue&type=template&id=dc8bb7de&scoped=true\"\nimport script from \"./shopConfig.vue?vue&type=script&lang=js\"\nexport * from \"./shopConfig.vue?vue&type=script&lang=js\"\nimport style0 from \"./shopConfig.vue?vue&type=style&index=0&id=dc8bb7de&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"dc8bb7de\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./index.vue?vue&type=template&id=3376dbce&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=js\"\nexport * from \"./index.vue?vue&type=script&lang=js\"\nimport style0 from \"./index.vue?vue&type=style&index=0&id=3376dbce&prod&scoped=true&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3376dbce\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"product-new\"},[_c('el-card',{staticClass:\"product-form-card\"},[_c('div',{staticClass:\"card-header\",attrs:{\"slot\":\"header\"},slot:\"header\"},[_c('h2',[_vm._v(\"新增商品\")]),_c('p',{staticClass:\"subtitle\"},[_vm._v(\"创建新的商品信息\")])]),_c('el-form',{ref:\"productForm\",staticClass:\"product-form\",attrs:{\"model\":_vm.form,\"rules\":_vm.rules,\"label-width\":\"120px\"}},[_c('el-form-item',{attrs:{\"label\":\"商品名称\",\"prop\":\"name\"}},[_c('el-input',{attrs:{\"placeholder\":\"请输入商品名称,如:Nexa-M2-Miner\",\"maxlength\":\"30\",\"show-word-limit\":\"\"},model:{value:(_vm.form.name),callback:function ($$v) {_vm.$set(_vm.form, \"name\", $$v)},expression:\"form.name\"}})],1),_c('el-form-item',{staticClass:\"align-like-input\",attrs:{\"label\":\"商品类型\",\"prop\":\"type\"}},[_c('el-radio-group',{model:{value:(_vm.form.type),callback:function ($$v) {_vm.$set(_vm.form, \"type\", $$v)},expression:\"form.type\"}},[_c('el-radio',{attrs:{\"label\":0}},[_vm._v(\"矿机\")])],1)],1),_c('el-form-item',{attrs:{\"label\":\"挖矿币种\",\"prop\":\"coin\"}},[_c('el-select',{staticStyle:{\"width\":\"100%\"},attrs:{\"placeholder\":\"请选择挖矿币种\"},model:{value:(_vm.form.coin),callback:function ($$v) {_vm.$set(_vm.form, \"coin\", $$v)},expression:\"form.coin\"}},_vm._l((_vm.coinOptions),function(coin){return _c('el-option',{key:coin.value,attrs:{\"label\":coin.label,\"value\":coin.value}})}),1)],1),_c('el-form-item',{attrs:{\"label\":\"商品描述\",\"prop\":\"description\"}},[_c('el-input',{attrs:{\"type\":\"textarea\",\"rows\":4,\"placeholder\":\"请输入商品描述\",\"maxlength\":\"100\",\"show-word-limit\":\"\"},model:{value:(_vm.form.description),callback:function ($$v) {_vm.$set(_vm.form, \"description\", $$v)},expression:\"form.description\"}})],1),_c('el-form-item',{staticClass:\"align-like-input\",attrs:{\"label\":\"商品状态\",\"prop\":\"state\"}},[_c('el-radio-group',{model:{value:(_vm.form.state),callback:function ($$v) {_vm.$set(_vm.form, \"state\", $$v)},expression:\"form.state\"}},[_c('el-radio',{attrs:{\"label\":0}},[_vm._v(\"上架\")]),_c('el-radio',{attrs:{\"label\":1}},[_vm._v(\"下架\")])],1)],1),_c('el-form-item',{staticClass:\"actions-row\"},[_c('div',{staticClass:\"form-actions\"},[_c('el-button',{attrs:{\"type\":\"primary\",\"size\":\"medium\",\"loading\":_vm.submitting},on:{\"click\":_vm.handleSubmit}},[_vm._v(\"创建商品\")]),_c('el-button',{attrs:{\"size\":\"medium\"},on:{\"click\":_vm.handleReset}},[_vm._v(\"重置\")]),_c('el-button',{attrs:{\"size\":\"medium\"},on:{\"click\":_vm.handleCancel}},[_vm._v(\"取消\")])],1)])],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @file 路由配置文件\n * @description 定义所有电商页面的路由配置\n */\n\n// 商品相关路由\nexport const productRoutes = [\n {\n path: '/productList',\n name: 'productList',\n \n component: () => import('../views/productList/index.vue'),\n meta: {\n title: '商品列表',\n description: '浏览所有可用商品',\n allAuthority: ['all']\n }\n },\n {\n path: '/product/:id',\n name: 'productDetail',\n component: () => import('../views/productDetail/index.vue'),\n meta: {\n title: '商品详情',\n description: '查看商品详细信息',\n allAuthority: ['all']\n }\n }\n]\n\n// 购物车相关路由\nexport const cartRoutes = [\n {\n path: '/cart',\n name: 'cart',\n component: () => import('../views/cart/index.vue'),\n meta: {\n title: '购物车',\n description: '管理购物车商品',\n allAuthority: ['all']\n }\n }\n]\n\n// 结算相关路由\nexport const checkoutRoutes = [\n {\n path: '/checkout',\n name: 'checkout',\n component: () => import('../views/checkout/index.vue'),\n meta: {\n title: '订单结算',\n description: '完成订单结算',\n allAuthority: ['all']\n }\n }\n]\n\n// 个人中心相关路由\nexport const accountRoutes = [\n {\n path: '/account',\n name: 'account',\n component: () => import('../views/account/index.vue'),\n redirect: '/account/shops',\n meta: {\n title: '个人中心',\n description: '管理个人资料和店铺',\n allAuthority: ['all']\n },\n children: [\n {\n path: 'wallet',\n name: 'Wallet',\n component: () => import('../views/account/wallet.vue'),\n meta: {\n title: '我的钱包',\n description: '查看钱包余额、充值和提现',\n allAuthority: ['all']\n }\n },\n {//充值记录\n path: 'rechargeRecord',\n name: 'RechargeRecord',\n component: () => import('../views/account/rechargeRecord.vue'),\n meta: {\n title: '充值记录',\n description: '查看充值记录',\n allAuthority: ['all']\n }\n },\n {//提现记录\n path: 'withdrawalHistory',\n name: 'WithdrawalHistory',\n component: () => import('../views/account/withdrawalHistory.vue'),\n meta: {\n title: '提现记录',\n description: '查看提现记录',\n allAuthority: ['all']\n }\n },\n {\n path: 'receipt-record',\n name: 'accountReceiptRecord',\n component: () => import('../views/account/receiptRecord.vue'),\n meta: {\n title: '收款记录',\n description: '卖家收款流水记录',\n allAuthority: ['all']\n }\n },\n {\n path: 'shop-new',\n name: 'accountShopNew',\n component: () => import('../views/account/shopNew.vue'),\n meta: {\n title: '新增店铺',\n description: '创建新的店铺',\n allAuthority: ['all']\n }\n },\n {\n path: 'shop-config',\n name: 'accountShopConfig',\n component: () => import('../views/account/shopConfig.vue'),\n meta: {\n title: '钱包绑定',\n description: '绑定店铺收款钱包',\n allAuthority: ['all']\n }\n },\n {\n path: 'shops',\n name: 'accountMyShops',\n component: () => import('../views/account/myShops.vue'),\n meta: {\n title: '我的店铺',\n description: '查看我的店铺信息',\n allAuthority: ['all']\n }\n },\n {\n path: 'product-new',\n name: 'accountProductNew',\n component: () => import('../views/account/productNew.vue'),\n meta: {\n title: '新增商品',\n description: '创建新的商品',\n allAuthority: ['all']\n }\n },\n {\n path: 'products',\n name: 'accountProducts',\n component: () => import('../views/account/products.vue'),\n meta: {\n title: '商品列表',\n description: '管理店铺下的商品列表',\n allAuthority: ['all']\n }\n },\n {\n path: 'purchased',\n name: 'accountPurchased',\n component: () => import('../views/account/purchased.vue'),\n meta: {\n title: '已购商品',\n description: '查看已购买的商品列表',\n allAuthority: ['all']\n }\n },\n {\n path: 'funds-flow',\n name: 'accountFundsFlow',\n component: () => import('../views/account/fundsFlow.vue'),\n meta: {\n title: '资金流水',\n description: '充值/提现/消费记录切换查看',\n allAuthority: ['all']\n }\n },\n {\n path: 'purchased-detail/:id',\n name: 'PurchasedDetail',\n component: () => import('../views/account/purchasedDetail.vue'),\n meta: {\n title: '已购商品详情',\n description: '查看已购商品详细信息',\n allAuthority: ['all']\n }\n },\n {\n path: 'orders',\n name: 'accountOrders',\n component: () => import('../views/account/orders.vue'),\n meta: {\n title: '订单列表',\n description: '查看与管理订单(按状态筛选)',\n allAuthority: ['all']\n }\n },\n {\n path: 'seller-orders',\n name: 'accountSellerOrders',\n component: () => import('../views/account/SellerOrders.vue'),\n meta: {\n title: '已售出订单',\n description: '卖家侧订单列表',\n allAuthority: ['all']\n }\n },\n {\n path: 'order-detail/:id',\n name: 'accountOrderDetail',\n component: () => import('../views/account/orderDetail.vue'),\n meta: {\n title: '订单详情',\n description: '查看订单详细信息',\n allAuthority: ['all']\n }\n },\n {\n path: 'product-detail/:id',\n name: 'accountProductDetail',\n component: () => import('../views/account/productDetail.vue'),\n meta: {\n title: '商品详情',\n description: '个人中心 - 商品详情',\n allAuthority: ['all']\n }\n },\n {\n path: 'product-machine-add',\n name: 'accountProductMachineAdd',\n component: () => import('../views/account/productMachineAdd.vue'),\n meta: {\n title: '添加出售机器',\n description: '为商品添加出售机器',\n allAuthority: ['all']\n }\n }\n ]\n }\n]\n\n// 所有子路由\nexport const childrenRoutes = [\n ...productRoutes,\n ...cartRoutes,\n ...checkoutRoutes,\n ...accountRoutes\n]\n\n// 主路由配置\nexport const mainRoutes = [\n {\n path: '/',\n name: 'Home',\n component: () => import('../Layout/idnex.vue'),\n redirect: '/productList',\n children: childrenRoutes\n },\n // 404页面重定向到商品列表\n {\n path: '*',\n redirect: '/productList'\n }\n]\n\nexport default mainRoutes ","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./index.vue?vue&type=template&id=59d86c16&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=js\"\nexport * from \"./index.vue?vue&type=script&lang=js\"\nimport style0 from \"./index.vue?vue&type=style&index=0&id=59d86c16&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"59d86c16\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./index.vue?vue&type=template&id=2d97afb4&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=js\"\nexport * from \"./index.vue?vue&type=script&lang=js\"\nimport style0 from \"./index.vue?vue&type=style&index=0&id=2d97afb4&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2d97afb4\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SellerOrders.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SellerOrders.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./SellerOrders.vue?vue&type=template&id=c4d1af58&scoped=true\"\nimport script from \"./SellerOrders.vue?vue&type=script&lang=js\"\nexport * from \"./SellerOrders.vue?vue&type=script&lang=js\"\nimport style0 from \"./SellerOrders.vue?vue&type=style&index=0&id=c4d1af58&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c4d1af58\",\n null\n \n)\n\nexport default component.exports","import request from '../utils/request'\r\n\r\n//创建订单及订单详情\r\nexport function addOrders(data) {\r\n return request({\r\n url: `/lease/order/info/addOrders`,\r\n method: 'post',\r\n data\r\n })\r\n}\r\n\r\n\r\n//取消订单\r\nexport function cancelOrder(data) {\r\n return request({\r\n url: `/lease/order/info/cancelOrder`,\r\n method: 'post',\r\n data\r\n })\r\n }\r\n\r\n\r\n //根据订单id查询订单信息\r\nexport function getOrdersByIds(data) {\r\n return request({\r\n url: `/lease/order/info/getOrdersByIds`,\r\n method: 'post',\r\n data\r\n })\r\n }\r\n\r\n \r\n //查询订单列表(买家侧)\r\nexport function getOrdersByStatus(data) {\r\n return request({\r\n url: `/lease/order/info/getOrdersByStatus`,\r\n method: 'post',\r\n data\r\n })\r\n }\r\n\r\n //查询订单列表(卖家侧)\r\nexport function getOrdersByStatusForSeller(data) {\r\n return request({\r\n url: `/lease/order/info/getOrdersByStatusForSeller`,\r\n method: 'post',\r\n data\r\n })\r\n }\r\n\r\n\r\n //结算前链和币种查询\r\nexport function getChainAndListForSeller(data) {\r\n return request({\r\n url: `/lease/shop/getChainAndListForSeller`,\r\n method: 'post',\r\n data\r\n })\r\n}\r\n\r\n //获取实时币价\r\n export function getCoinPrice(data) {\r\n return request({\r\n url: `/lease/order/info/getCoinPrice`,\r\n method: 'post',\r\n data\r\n })\r\n }\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./orderDetail.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./orderDetail.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./orderDetail.vue?vue&type=template&id=613e4d6c&scoped=true\"\nimport script from \"./orderDetail.vue?vue&type=script&lang=js\"\nexport * from \"./orderDetail.vue?vue&type=script&lang=js\"\nimport style0 from \"./orderDetail.vue?vue&type=style&index=0&id=613e4d6c&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"613e4d6c\",\n null\n \n)\n\nexport default component.exports","\nimport { getProductById } from '../../utils/productService'\nimport { addToCart } from '../../utils/cartManager'\nimport { getMachineInfo } from '../../api/products'\nimport { addCart, getGoodsList } from '../../api/shoppingCart'\n\nexport default {\n name: 'ProductDetail',\n data() {\n return {\n product: null,\n loading: false,\n // 默认展开的行keys\n expandedRowKeys: [],\n selectedMap: {},\n params: {\n id: \"\",\n \n\n },\n confirmAddDialog: {\n visible: false,\n items: []\n },\n // 购物车中已存在的当前商品机器集合:id 与 user|miner 组合键\n cartMachineIdSet: new Set(),\n cartCompositeKeySet: new Set(),\n cartLoaded: false,\n machinesLoaded: false,\n /**\n * 可展开的产品系列数据\n * 每个系列(group)包含多个可选条目(variants)\n */\n productListData: [\n // {\n // id: 'grp-1',\n // group: 'A系列',\n // summary: {\n // theoryPower: '56T',\n // computingPower: '54T',\n // powerDissipation: '3200W',\n // algorithm: 'power',\n // type: 'A-Pro',\n // count: 3,\n // price: '¥1000+'\n // },\n // variants: [\n // { id: 'A-1', model: 'A1', theoryPower: '14T', computingPower: '13.5T', powerDissipation: '780W', algorithm: 'power', stock: 50, price: 999, quantity: 1 },\n // { id: 'A-2', model: 'A2', theoryPower: '18T', computingPower: '17.2T', powerDissipation: '900W', algorithm: 'power', stock: 40, price: 1299, quantity: 1 },\n // { id: 'A-3', model: 'A3', theoryPower: '24T', computingPower: '23.1T', powerDissipation: '1520W', algorithm: 'power', stock: 30, price: 1699, quantity: 1 }\n // ]\n // },\n // {\n // id: 'grp-2',\n // group: 'B系列',\n // summary: {\n // theoryPower: '72T',\n // computingPower: '70T',\n // powerDissipation: '4100W',\n // algorithm: 'power',\n // type: 'B-Max',\n // count: 2,\n // price: '¥2000+'\n // },\n // variants: [\n // { id: 'B-1', model: 'B1', theoryPower: '32T', computingPower: '31.2T', powerDissipation: '1800W', algorithm: 'power', stock: 28, price: 2199, quantity: 1 },\n // { id: 'B-2', model: 'B2', theoryPower: '40T', computingPower: '38.8T', powerDissipation: '2300W', algorithm: 'power', stock: 18, price: 2699, quantity: 1 }\n // ]\n // }\n ],\n tableData: [\n // {\n // theoryPower: \"55656\",//理论算力\n // computingPower: \"44545\",//实际算力\n // powerDissipation: \"5565\",//功耗\n // algorithm: \"power\",//算法\n // type: \"型号1\",//矿机型号\n // number:2001, \n // cost:\"1000\",//价格 \n // },\n // {\n // theoryPower: \"55656\",//理论算力\n // computingPower: \"44545\",//实际算力\n // powerDissipation: \"5565\",//功耗\n // algorithm: \"power\",//算法\n // type: \"型号1\",//矿机型号\n // number:2001, \n // cost:\"1000\",//价格 \n // },\n // {\n // theoryPower: \"55656\",//理论算力\n // computingPower: \"44545\",//实际算力\n // powerDissipation: \"5565\",//功耗\n // algorithm: \"power\",//算法\n // type: \"型号1\",//矿机型号\n // number:2001, \n // cost:\"1000\",//价格 \n // },\n // {\n // theoryPower: \"55656\",//理论算力\n // computingPower: \"44545\",//实际算力\n // powerDissipation: \"5565\",//功耗\n // algorithm: \"power\",//算法\n // type: \"型号1\",//矿机型号\n // number:2001, \n // cost:\"1000\",//价格 \n // },\n \n ],\n productDetailLoading:false\n }\n },\n mounted() {\n console.log(this.$route.params.id, \"i叫哦附加费\")\n if (this.$route.params.id) {\n this.params.id = this.$route.params.id\n this.product = true\n // 默认展开第一行\n if (this.productListData && this.productListData.length) {\n this.expandedRowKeys = [this.productListData[0].id]\n }\n this.fetchGetMachineInfo(this.params)\n } else {\n this.$message.error('商品不存在')\n this.product = false\n }\n this.fetchGetGoodsList()\n },\n methods: {\n\n async fetchGetMachineInfo(params) {\n this.productDetailLoading = true\n const res = await getMachineInfo(params)\n console.log(res)\n if (res && res.code === 200) {\n console.log(res.data, 'res.rows');\n this.paymentMethodList = res.data.payConfigList || []\n const list =res.data.machineRangeInfoList || []\n const withKeys = list.map((group, idx) => {\n const fallbackId = `grp-${idx}`\n const groupId = group.id || group.onlyKey || (group.productMachineRangeGroupDto && group.productMachineRangeGroupDto.id)\n const firstMachineId = Array.isArray(group.productMachines) && group.productMachines.length > 0 ? group.productMachines[0].id : undefined\n // 为机器行设置默认租赁天数为1,并确保未选中状态\n const normalizedMachines = Array.isArray(group.productMachines)\n ? group.productMachines.map(m => ({\n ...m,\n leaseTime: (m && m.leaseTime && Number(m.leaseTime) > 0) ? Number(m.leaseTime) : 1,\n _selected: false // 确保所有机器行初始状态为未选中\n }))\n : []\n return { ...group, id: groupId || (firstMachineId ? `m-${firstMachineId}` : fallbackId), productMachines: normalizedMachines }\n })\n\n this.productListData = withKeys\n if (this.productListData.length && (!this.expandedRowKeys || !this.expandedRowKeys.length)) {\n this.expandedRowKeys = [this.productListData[0].id]\n }\n // 产品机器加载完成后,依据购物车集合执行一次本地禁用与勾选\n this.$nextTick(() => {\n this.machinesLoaded = true\n // 已取消与购物车对比:不再自动禁用或勾选\n })\n }\n\n this.productDetailLoading = false\n },\n /**\n * 加载商品详情\n */\n async loadProduct() {\n try {\n this.loading = true\n const productId = this.$route.params.id\n this.product = await getProductById(productId)\n\n if (!this.product) {\n this.$message({\n message: '商品不存在',\n type: 'error',\n showClose: true\n })\n }\n } catch (error) {\n console.error('加载商品详情失败:', error)\n this.$message({\n message: '加载商品详情失败,请稍后重试',\n type: 'error',\n showClose: true\n })\n } finally {\n this.loading = false\n }\n },\n //加入购物车\n async fetchAddCart(params) {\n const res = await addCart(params)\n \n return res\n },\n //查询购物车列表\n async fetchGetGoodsList(params) {\n const res = await getGoodsList(params)\n // 统计当前商品在购物车中已有的机器ID,用于禁用和默认勾选\n try {\n const productId = this.params && this.params.id ? Number(this.params.id) : Number(this.$route.params.id)\n // 兼容两种返回结构:1) 旧:直接是商品分组数组 2) 新:店铺数组 → shoppingCartInfoDtoList\n const rawRows = Array.isArray(res && res.rows)\n ? res.rows\n : Array.isArray(res && res.data && res.data.rows)\n ? res.data.rows\n : Array.isArray(res && res.data)\n ? res.data\n : []\n // 扁平化为商品分组\n const groups = rawRows.length && rawRows[0] && Array.isArray(rawRows[0].shoppingCartInfoDtoList)\n ? rawRows.flatMap(shop => Array.isArray(shop.shoppingCartInfoDtoList) ? shop.shoppingCartInfoDtoList : [])\n : rawRows\n const matched = groups.filter(g => Number(g.productId) === productId)\n const ids = new Set()\n const compositeKeys = new Set()\n matched.forEach(r => {\n const list = Array.isArray(r.productMachineDtoList) ? r.productMachineDtoList : []\n list.forEach(m => {\n if (!m) return\n if (m.id !== undefined && m.id !== null) ids.add(String(m.id))\n if (m.user && m.miner) compositeKeys.add(`${String(m.user)}|${String(m.miner)}`)\n })\n })\n this.cartMachineIdSet = ids\n this.cartCompositeKeySet = compositeKeys\n // 计算购物车总数量并通知头部,避免页面初次加载时徽标显示为0\n try {\n const totalCount = groups.reduce((sum, g) => sum + (Array.isArray(g && g.productMachineDtoList) ? g.productMachineDtoList.length : 0), 0)\n if (Number.isFinite(totalCount)) {\n window.dispatchEvent(new CustomEvent('cart-updated', { detail: { count: totalCount } }))\n }\n } catch (e) { /* noop */ }\n // 展开表格渲染后,默认勾选并禁用这些行\n this.$nextTick(() => {\n this.cartLoaded = true\n this.autoSelectAndDisable()\n })\n } catch (e) {\n console.warn('解析购物车数据失败', e)\n }\n },\n\n /**\n * 处理返回\n */\n handleBack() {\n this.$router.push('/productList')\n },\n\n\n\n /**\n * 点击系列行:切换展开/收起\n * @param {Object} row - 当前行\n */\n handleSeriesRowClick(row) {\n const key = row.id\n const lockedIds = Object.keys(this.selectedMap).filter(k => (this.selectedMap[k] || []).length > 0)\n const opened = this.expandedRowKeys.includes(key)\n if (opened) {\n // 关闭当前行,仅保留已勾选的行展开\n this.expandedRowKeys = lockedIds\n } else {\n // 打开当前行,同时保留已勾选的行展开\n this.expandedRowKeys = Array.from(new Set([key, ...lockedIds]))\n }\n },\n\n /**\n * 外层系列行样式\n */\n handleGetSeriesRowClassName() {\n return 'series-clickable-row'\n },\n\n // 子表选择变化\n handleInnerSelectionChange(parentRow, selections) {\n const key = parentRow.id\n this.$set(this.selectedMap, key, selections)\n const lockedIds = Object.keys(this.selectedMap).filter(k => (this.selectedMap[k] || []).length > 0)\n // 更新展开:锁定的行始终展开\n const openedSet = new Set(this.expandedRowKeys)\n lockedIds.forEach(id => openedSet.add(id))\n // 清理不再勾选且不是当前展开的行\n this.expandedRowKeys = Array.from(openedSet).filter(id => lockedIds.includes(id) || id === key || this.expandedRowKeys.includes(id))\n },\n\n // 展开行变化时:已取消自动与购物车对比,无需勾选/禁用\n handleExpandChange(row, expandedRows) {\n // no-op\n },\n\n // 已取消对比购物车的自动勾选/禁用逻辑\n autoSelectAndDisable() {},\n\n // 选择器可选控制:已在购物车中的机器不可再选\n isSelectable(row, index) {\n // 不再通过 selectable 禁用,以便勾选可见;通过行样式和交互阻止点击\n return true\n },\n\n // 判断在特定父行下是否已选择(配合自定义checkbox使用)\n isSelectedByParent(parentRow, row) {\n const key = parentRow && parentRow.id\n const list = (key && this.selectedMap[key]) || []\n return !!list.find(it => it && it.id === row.id)\n },\n\n // 手动切换选择(自定义checkbox与 selectedMap 同步),并维护每行的 _selected 状态\n handleManualSelect(parentRow, row, checked) {\n // 禁用:已售出或售出中的机器不可选择\n if (row && (row.saleState === 1 || row.saleState === 2)) {\n this.$message.warning('该机器已售出或售出中,无法选择')\n this.$set(row, '_selected', false)\n return\n }\n const key = parentRow.id\n const list = (this.selectedMap[key] && [...this.selectedMap[key]]) || []\n const idx = list.findIndex(it => it && it.id === row.id)\n if (checked && idx === -1) list.push(row)\n if (!checked && idx > -1) list.splice(idx, 1)\n this.$set(this.selectedMap, key, list)\n this.$set(row, '_selected', !!checked)\n },\n\n // 为子表中已在购物车的行添加只读样式,并阻止点击取消\n handleGetInnerRowClass({ row }) {\n if (!row) return ''\n return (row.saleState === 1 || row.saleState === 2) ? 'sold-row' : ''\n },\n\n /**\n * 子行:减少数量\n * @param {number} groupIndex - 系列索引\n * @param {number} variantIndex - 变体索引\n */\n handleDecreaseVariantQuantity(groupIndex, variantIndex) {\n const item = this.productListData[groupIndex].variants[variantIndex]\n if (item.quantity > 1) {\n item.quantity--\n }\n },\n\n /**\n * 子行:增加数量\n * @param {number} groupIndex - 系列索引\n * @param {number} variantIndex - 变体索引\n */\n handleIncreaseVariantQuantity(groupIndex, variantIndex) {\n const item = this.productListData[groupIndex].variants[variantIndex]\n if (item.quantity < 99) {\n item.quantity++\n }\n },\n\n /**\n * 子行:输入数量校验\n * @param {number} groupIndex - 系列索引\n * @param {number} variantIndex - 变体索引\n */\n handleVariantQuantityInput(groupIndex, variantIndex) {\n const item = this.productListData[groupIndex].variants[variantIndex]\n const q = Number(item.quantity)\n if (!q || q < 1) item.quantity = 1\n if (q > 99) item.quantity = 99\n },\n\n /**\n * 子行:加入购物车\n * @param {Object} variant - 子项行数据\n */\n handleAddVariantToCart(variant) {\n if (!variant || !variant.onlyKey) return\n try {\n addToCart({\n id: variant.onlyKey,\n title: variant.model,\n price: variant.price,\n quantity: variant.quantity\n })\n this.$message.success(`已添加 ${variant.quantity} 件 ${variant.model} 到购物车`)\n variant.quantity = 1\n } catch (error) {\n console.error('添加到购物车失败:', error)\n \n }\n },\n // 统一加入购物车\n handleAddSelectedToCart() {\n const allSelected = Object.values(this.selectedMap).flat().filter(Boolean)\n if (!allSelected.length) {\n this.$message.warning('请先勾选至少一台矿机')\n return\n }\n try {\n allSelected.forEach(item => {\n addToCart({\n id: item.onlyKey || item.id,\n title: item.type || item.model || '矿机',\n price: item.price,\n quantity: 1,\n leaseTime: Number(item.leaseTime || 1)\n })\n })\n this.$message.success(`已加入 ${allSelected.length} 台矿机到购物车`)\n this.selectedMap = {}\n } catch (e) {\n console.error('统一加入购物车失败', e)\n \n }\n },\n // 打开确认弹窗:以当前界面勾选(_selected)为准,并在打开后清空左侧勾选状态\n handleOpenAddToCartDialog() {\n // 扫描当前所有系列下被勾选的机器\n const groups = Array.isArray(this.productListData) ? this.productListData : []\n const pickedAll = groups.flatMap(g => Array.isArray(g.productMachines) ? g.productMachines.filter(m => !!m && !!m._selected) : [])\n const picked = pickedAll.filter(m => m && (m.saleState === 0 || m.saleState === undefined || m.saleState === null))\n if (!picked.length) {\n this.$message.warning('请先勾选至少一台矿机')\n return\n }\n if (picked.length < pickedAll.length) {\n this.$message.warning('部分机器已售出或售出中,已自动为您排除')\n }\n // 使用弹窗中的固定快照,避免后续清空勾选影响弹窗显示\n this.confirmAddDialog.items = picked.slice()\n this.confirmAddDialog.visible = true\n // 打开后立即把左侧复选框清空,避免“勾选了两个但弹窗只有一条”的不一致问题\n this.$nextTick(() => {\n try { this.clearAllSelections() } catch (e) { /* noop */ }\n })\n },\n // 确认加入:调用后端购物车接口,传入裸数组 [{ productId, productMachineId }]\n async handleConfirmAddSelectedToCart() {\n // 以弹窗中的列表为准,避免与左侧勾选状态不一致\n const allSelected = Array.isArray(this.confirmAddDialog.items) ? this.confirmAddDialog.items.filter(Boolean) : []\n if (!allSelected.length) {\n this.$message.warning('请先勾选至少一台矿机')\n return\n }\n\n const productId = this.params && this.params.id ? this.params.id : (this.$route && this.$route.params && this.$route.params.id)\n if (!productId) {\n this.$message.error('商品ID缺失,无法加入购物车')\n return\n }\n\n // 裸数组,仅包含后端要求的两个字段\n const payload = allSelected.map(item => ({\n productId: productId,\n productMachineId: item.id,\n leaseTime: Number(item.leaseTime || 1)\n }))\n\n try {\n const res = await this.fetchAddCart(payload)\n // 若后端返回码存在,这里做一下兜底提示\n if (!res || (res.code && Number(res.code) !== 200)) {\n this.$message.error(res && res.msg ? res.msg : '加入购物车失败,请稍后重试')\n return\n }\n // 立即本地更新禁用状态:把刚加入的机器ID合并进本地集合\n try {\n allSelected.forEach(item => {\n if (item && item.id) this.cartMachineIdSet.add(item.id)\n this.$set(item, '_selected', false)\n this.$set(item, '_inCart', true)\n if (!item.leaseTime || Number(item.leaseTime) <= 0) this.$set(item, 'leaseTime', 1)\n })\n this.$nextTick(() => this.autoSelectAndDisable())\n } catch (e) { /* noop */ }\n \n this.$message({\n message: `已加入 ${allSelected.length} 台矿机到购物车`,\n type: 'success',\n duration: 3000,\n showClose: true,\n });\n \n this.confirmAddDialog.visible = false\n // 清空选中映射,然后重新加载数据(数据加载时会自动设置 _selected: false)\n this.selectedMap = {}\n // 重新加载机器信息和购物车数据\n this.fetchGetMachineInfo(this.params)\n this.fetchGetGoodsList()\n // 通知头部刷新服务端购物车数量\n try {\n // 如果没有传数量,header 会主动拉取服务端数量\n window.dispatchEvent(new CustomEvent('cart-updated'))\n } catch (e) { /* noop */ }\n\n } catch (e) {\n console.error('加入购物车失败: ', e)\n this.$message.error('加入购物车失败,请稍后重试')\n }\n },\n\n // 取消所有商品勾选(内层表格的自定义 checkbox)\n clearAllSelections() {\n try {\n // 清空选中映射\n this.selectedMap = {}\n // 遍历所有系列与机器,复位 _selected\n const groups = Array.isArray(this.productListData) ? this.productListData : []\n groups.forEach(g => {\n const list = Array.isArray(g.productMachines) ? g.productMachines : []\n list.forEach(m => { if (m) this.$set(m, '_selected', false) })\n })\n } catch (e) { /* noop */ }\n },\n\n /**\n * 减少数量\n * @param {number} rowIndex - 表格行索引\n */\n handleDecreaseQuantity(rowIndex) {\n if (this.tableData[rowIndex].quantity > 1) {\n this.tableData[rowIndex].quantity--\n }\n },\n\n /**\n * 增加数量\n * @param {number} rowIndex - 表格行索引\n */\n handleIncreaseQuantity(rowIndex) {\n if (this.tableData[rowIndex].quantity < 99) {\n this.tableData[rowIndex].quantity++\n }\n },\n\n /**\n * 处理数量输入\n * @param {number} rowIndex - 表格行索引\n */\n handleQuantityInput(rowIndex) {\n const quantity = this.tableData[rowIndex].quantity\n if (quantity < 1) {\n this.tableData[rowIndex].quantity = 1\n } else if (quantity > 99) {\n this.tableData[rowIndex].quantity = 99\n }\n },\n\n /**\n * 处理数量输入框失焦\n * @param {number} rowIndex - 表格行索引\n */\n handleQuantityBlur(rowIndex) {\n const quantity = this.tableData[rowIndex].quantity\n if (!quantity || quantity < 1) {\n this.tableData[rowIndex].quantity = 1\n } else if (quantity > 99) {\n this.tableData[rowIndex].quantity = 99\n }\n },\n\n /**\n * 添加到购物车\n * @param {Object} rowData - 表格行数据\n */\n handleAddToCart(rowData) {\n if (!rowData || rowData.quantity < 1) {\n this.$message.warning('请选择有效的数量')\n return\n }\n\n try {\n addToCart({\n id: rowData.date, // 使用矿机名称作为ID\n title: rowData.date,\n price: rowData.price,\n quantity: rowData.quantity,\n leaseTime: Number(rowData.leaseTime || 1)\n })\n\n this.$message.success(`已添加 ${rowData.quantity} 件 ${rowData.date} 到购物车`)\n\n // 重置数量\n rowData.quantity = 1\n } catch (error) {\n console.error('添加到购物车失败:', error)\n this.$message.error('添加到购物车失败,请稍后重试')\n }\n }\n }\n}","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"purchased-detail-page\"},[_c('h2',{staticClass:\"title\"},[_vm._v(\"已购商品详情\")]),(_vm.loading)?_c('div',{staticClass:\"loading\"},[_vm._v(\"加载中...\")]):_c('div',[_c('el-card',{staticClass:\"section\"},[_c('div',{staticClass:\"sub-title\"},[_vm._v(\"基本信息\")]),_c('div',{staticClass:\"row\"},[_c('span',{staticClass:\"label\"},[_vm._v(\"用户:\")]),_c('span',{staticClass:\"value mono\"},[_vm._v(_vm._s(_vm.detail.userId || '—'))])]),_c('div',{staticClass:\"row\"},[_c('span',{staticClass:\"label\"},[_vm._v(\"订单项ID:\")]),_c('span',{staticClass:\"value mono\"},[_vm._v(_vm._s(_vm.detail.orderItemId || '—'))])]),_c('div',{staticClass:\"row\"},[_c('span',{staticClass:\"label\"},[_vm._v(\"机器ID:\")]),_c('span',{staticClass:\"value mono\"},[_vm._v(_vm._s(_vm.detail.productMachineId || '—'))])]),_c('div',{staticClass:\"row\"},[_c('span',{staticClass:\"label\"},[_vm._v(\"商品类型:\")]),_c('span',{staticClass:\"value\"},[_c('el-tag',{attrs:{\"type\":_vm.detail.type === 1 ? 'success' : 'info'}},[_vm._v(\" \"+_vm._s(_vm.detail.type === 1 ? \"算力套餐\" : \"挖矿机器\")+\" \")])],1)]),_c('div',{staticClass:\"row\"},[_c('span',{staticClass:\"label\"},[_vm._v(\"状态:\")]),_c('span',{staticClass:\"value\"},[_c('el-tag',{attrs:{\"type\":_vm.detail.status === 0 ? 'success' : 'info'}},[_vm._v(\" \"+_vm._s(_vm.detail.status === 0 ? \"运行中\" : \"已过期\")+\" \")])],1)]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.detail.type === 1),expression:\"detail.type === 1\"}],staticClass:\"row\"},[_c('span',{staticClass:\"label\"},[_vm._v(\"购买算力:\")]),_c('span',{staticClass:\"value strong\"},[_vm._v(_vm._s(_vm.detail.purchasedComputingPower))])]),_c('div',{staticClass:\"row\"},[_c('span',{staticClass:\"label\"},[_vm._v(\"购买时间:\")]),_c('span',{staticClass:\"value\"},[_vm._v(_vm._s(_vm.formatDateTime(_vm.detail.createTime)))])]),_c('div',{staticClass:\"row\"},[_c('span',{staticClass:\"label\"},[_vm._v(\"开始时间:\")]),_c('span',{staticClass:\"value\"},[_vm._v(_vm._s(_vm.formatDateTime(_vm.detail.startTime)))])]),_c('div',{staticClass:\"row\"},[_c('span',{staticClass:\"label\"},[_vm._v(\"结束时间:\")]),_c('span',{staticClass:\"value\"},[_vm._v(_vm._s(_vm.formatDateTime(_vm.detail.endTime)))])])]),_c('el-card',{staticClass:\"section\",staticStyle:{\"margin-top\":\"12px\"}},[_c('div',{staticClass:\"sub-title\"},[_vm._v(\"收益信息\")]),_c('div',{staticClass:\"row\"},[_c('span',{staticClass:\"label\"},[_vm._v(\"当前实际算力:\")]),_c('span',{staticClass:\"value strong\"},[_vm._v(_vm._s(_vm.detail.currentComputingPower || '0'))])]),_c('div',{staticClass:\"row\"},[_c('span',{staticClass:\"label\"},[_vm._v(\"币种收益:\")]),_c('span',{staticClass:\"value strong\"},[_vm._v(_vm._s(_vm.detail.currentIncome || '0'))])]),_c('div',{staticClass:\"row\"},[_c('span',{staticClass:\"label\"},[_vm._v(\"当前USDT收益:\")]),_c('span',{staticClass:\"value strong\"},[_vm._v(_vm._s(_vm.detail.currentUsdtIncome || '0')+\" USDT\")])]),_c('div',{staticClass:\"row\"},[_c('span',{staticClass:\"label\"},[_vm._v(\"预估结束总收益:\")]),_c('span',{staticClass:\"value strong\"},[_vm._v(_vm._s(_vm.detail.estimatedEndIncome || '0'))])]),_c('div',{staticClass:\"row\"},[_c('span',{staticClass:\"label\"},[_vm._v(\"预估结束USDT总收益:\")]),_c('span',{staticClass:\"value strong\"},[_vm._v(_vm._s(_vm.detail.estimatedEndUsdtIncome || '0')+\" USDT\")])])]),_c('div',{staticClass:\"actions\"},[_c('el-button',{on:{\"click\":function($event){return _vm.$router.back()}}},[_vm._v(\"返回\")])],1)],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n\r\n","// 全局 loading 状态管理器\r\nclass LoadingManager {\r\n constructor() {\r\n this.loadingStates = new Map(); // 存储所有 loading 状态\r\n this.setupListeners();\r\n }\r\n \r\n setupListeners() {\r\n // 监听网络重试完成事件\r\n window.addEventListener('network-retry-complete', () => {\r\n this.resetAllLoadingStates();\r\n });\r\n }\r\n \r\n // 设置 loading 状态\r\n setLoading(componentId, stateKey, value) {\r\n const key = `${componentId}:${stateKey}`;\r\n this.loadingStates.set(key, {\r\n value,\r\n timestamp: Date.now()\r\n });\r\n }\r\n \r\n // 获取 loading 状态\r\n getLoading(componentId, stateKey) {\r\n const key = `${componentId}:${stateKey}`;\r\n const state = this.loadingStates.get(key);\r\n return state ? state.value : false;\r\n }\r\n \r\n // 重置所有 loading 状态\r\n resetAllLoadingStates() {\r\n // 清除所有处于加载状态的组件\r\n const componentsToUpdate = [];\r\n \r\n this.loadingStates.forEach((state, key) => {\r\n if (state.value === true) {\r\n const [componentId, stateKey] = key.split(':');\r\n componentsToUpdate.push({ componentId, stateKey });\r\n this.loadingStates.set(key, { value: false, timestamp: Date.now() });\r\n }\r\n });\r\n \r\n // 使用事件通知各组件更新\r\n window.dispatchEvent(new CustomEvent('reset-loading-states', {\r\n detail: { componentsToUpdate }\r\n }));\r\n }\r\n \r\n // 重置特定组件的所有 loading 状态\r\n resetComponentLoadingStates(componentId) {\r\n const componentsToUpdate = [];\r\n \r\n this.loadingStates.forEach((state, key) => {\r\n if (key.startsWith(`${componentId}:`) && state.value === true) {\r\n const stateKey = key.split(':')[1];\r\n componentsToUpdate.push({ componentId, stateKey });\r\n this.loadingStates.set(key, { value: false, timestamp: Date.now() });\r\n }\r\n });\r\n \r\n return componentsToUpdate;\r\n }\r\n }\r\n \r\n // 创建单例实例\r\n const loadingManager = new LoadingManager();\r\n export default loadingManager;","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"panel\"},[_c('h2',{staticClass:\"panel-title\"},[_vm._v(\"新增店铺\")]),_c('div',{staticClass:\"panel-body\"},[_c('div',{staticClass:\"row\"},[_c('label',{staticClass:\"label\"},[_vm._v(\"店铺名称\")]),_c('el-input',{attrs:{\"placeholder\":\"请输入店铺名称\",\"maxlength\":30,\"show-word-limit\":\"\"},model:{value:(_vm.form.name),callback:function ($$v) {_vm.$set(_vm.form, \"name\", $$v)},expression:\"form.name\"}})],1),_c('div',{staticClass:\"row\"},[_c('label',{staticClass:\"label\"},[_vm._v(\"店铺描述\")]),_c('div',{staticClass:\"textarea-wrapper\"},[_c('el-input',{attrs:{\"type\":\"textarea\",\"rows\":4,\"maxlength\":300,\"placeholder\":\"请输入店铺描述\",\"show-word-limit\":\"\"},on:{\"input\":_vm.handleDescriptionInput},model:{value:(_vm.form.description),callback:function ($$v) {_vm.$set(_vm.form, \"description\", $$v)},expression:\"form.description\"}})],1)]),_c('div',{staticClass:\"row\"},[_c('el-button',{attrs:{\"type\":\"primary\"},on:{\"click\":_vm.handleCreate}},[_vm._v(\"创建店铺\")])],1)])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import Vue from 'vue'\nimport Vuex from 'vuex'\n\nVue.use(Vuex)\n\nexport default new Vuex.Store({\n state: {\n },\n getters: {\n },\n mutations: {\n },\n actions: {\n },\n modules: {\n }\n})\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"funds-page\"},[_c('h3',{staticClass:\"title\",staticStyle:{\"margin-bottom\":\"18px\",\"text-align\":\"left\"}},[_vm._v(\"资金流水\")]),_c('div',{staticClass:\"tabs-card\"},[_c('el-tabs',{on:{\"tab-click\":_vm.handleTab},model:{value:(_vm.active),callback:function ($$v) {_vm.active=$$v},expression:\"active\"}},[_c('el-tab-pane',{attrs:{\"label\":\"充值记录\",\"name\":\"recharge\"}},[_c('div',{staticClass:\"list-wrap\"},[_c('div',{staticClass:\"list-header\"},[_c('span',{staticClass:\"list-title\"},[_vm._v(\"全部充值 (\"+_vm._s(_vm.rechargeRows.length)+\")\")]),_c('el-button',{attrs:{\"type\":\"primary\",\"size\":\"small\"},on:{\"click\":_vm.loadRecharge}},[_vm._v(\"刷新\")])],1),_c('div',{directives:[{name:\"loading\",rawName:\"v-loading\",value:(_vm.loading.recharge),expression:\"loading.recharge\"}],staticClass:\"record-list\"},[_vm._l((_vm.rechargeRows),function(row,idx){return _c('div',{key:_vm.getRowKey(row, idx),staticClass:\"record-item\",class:_vm.statusClass(row.status),on:{\"click\":function($event){return _vm.toggleExpand('recharge', row, idx)}}},[_c('div',{staticClass:\"item-main\"},[_c('div',{staticClass:\"item-left\"},[_c('div',{staticClass:\"amount\"},[_vm._v(\"+ \"+_vm._s(_vm.formatDec6(row.amount))+\" \"+_vm._s((row.fromSymbol || 'USDT').toUpperCase()))]),_c('div',{staticClass:\"chain\"},[_vm._v(_vm._s(_vm.formatChain(row.fromChain)))])]),_c('div',{staticClass:\"item-right\"},[_c('div',{staticClass:\"status\"},[_c('el-tag',{attrs:{\"type\":_vm.getRechargeStatusType(row.status),\"size\":\"small\"}},[_vm._v(_vm._s(_vm.getRechargeStatusText(row.status)))])],1),_c('div',{staticClass:\"time\"},[_vm._v(_vm._s(_vm.formatFullTime(row.createTime)))])])]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isExpanded('recharge', row, idx)),expression:\"isExpanded('recharge', row, idx)\"}],staticClass:\"expand-panel\"},[_c('div',{staticClass:\"expand-grid\"},[_c('div',{staticClass:\"expand-item\"},[_c('span',{staticClass:\"label\"},[_vm._v(\"充值地址\")]),_c('div',{staticClass:\"value value-row\"},[_c('span',{staticClass:\"mono-ellipsis\",attrs:{\"title\":row.fromAddress}},[_vm._v(_vm._s(row.fromAddress))]),_c('el-button',{attrs:{\"type\":\"text\",\"size\":\"mini\",\"icon\":\"el-icon-document-copy\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.handleCopy(row.fromAddress, '充值地址')}}},[_vm._v(\"复制\")])],1)]),(row.txHash)?_c('div',{staticClass:\"expand-item\"},[_c('span',{staticClass:\"label\"},[_vm._v(\"交易哈希\")]),_c('div',{staticClass:\"value value-row\"},[_c('span',{staticClass:\"mono-ellipsis\",attrs:{\"title\":row.txHash}},[_vm._v(_vm._s(row.txHash))]),_c('el-button',{attrs:{\"type\":\"text\",\"size\":\"mini\",\"icon\":\"el-icon-document-copy\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.handleCopy(row.txHash, '交易哈希')}}},[_vm._v(\"复制\")])],1)]):_vm._e()])])])}),(!_vm.rechargeRows.length)?_c('div',{staticClass:\"empty\"},[_vm._v(\"暂无充值记录\")]):_vm._e()],2)])]),_c('el-tab-pane',{attrs:{\"label\":\"提现记录\",\"name\":\"withdraw\"}},[_c('div',{staticClass:\"list-wrap\"},[_c('div',{staticClass:\"list-header\"},[_c('span',{staticClass:\"list-title\"},[_vm._v(\"全部提现 (\"+_vm._s(_vm.withdrawRows.length)+\")\")]),_c('el-button',{attrs:{\"type\":\"primary\",\"size\":\"small\"},on:{\"click\":_vm.loadWithdraw}},[_vm._v(\"刷新\")])],1),_c('div',{directives:[{name:\"loading\",rawName:\"v-loading\",value:(_vm.loading.withdraw),expression:\"loading.withdraw\"}],staticClass:\"record-list\"},[_vm._l((_vm.withdrawRows),function(row,idx){return _c('div',{key:_vm.getRowKey(row, idx),staticClass:\"record-item\",class:_vm.statusClass(row.status),on:{\"click\":function($event){return _vm.toggleExpand('withdraw', row, idx)}}},[_c('div',{staticClass:\"item-main\"},[_c('div',{staticClass:\"item-left\"},[_c('div',{staticClass:\"amount\"},[_vm._v(\"- \"+_vm._s(_vm.formatDec6(row.amount))+\" \"+_vm._s((row.toSymbol || 'USDT').toUpperCase()))]),_c('div',{staticClass:\"chain\"},[_vm._v(_vm._s(_vm.formatChain(row.toChain)))])]),_c('div',{staticClass:\"item-right\"},[_c('div',{staticClass:\"status\"},[_c('el-tag',{attrs:{\"type\":_vm.getWithdrawStatusType(row.status),\"size\":\"small\"}},[_vm._v(_vm._s(_vm.getWithdrawStatusText(row.status)))])],1),_c('div',{staticClass:\"time\"},[_vm._v(_vm._s(_vm.formatFullTime(row.createTime)))])])]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isExpanded('withdraw', row, idx)),expression:\"isExpanded('withdraw', row, idx)\"}],staticClass:\"expand-panel\"},[_c('div',{staticClass:\"expand-grid\"},[_c('div',{staticClass:\"expand-item\"},[_c('span',{staticClass:\"label\"},[_vm._v(\"收款地址\")]),_c('div',{staticClass:\"value value-row\"},[_c('span',{staticClass:\"mono-ellipsis\",attrs:{\"title\":row.toAddress}},[_vm._v(_vm._s(row.toAddress))]),_c('el-button',{attrs:{\"type\":\"text\",\"size\":\"mini\",\"icon\":\"el-icon-document-copy\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.handleCopy(row.toAddress, '收款地址')}}},[_vm._v(\"复制\")])],1)]),(row.txHash)?_c('div',{staticClass:\"expand-item\"},[_c('span',{staticClass:\"label\"},[_vm._v(\"交易哈希\")]),_c('div',{staticClass:\"value value-row\"},[_c('span',{staticClass:\"mono-ellipsis\",attrs:{\"title\":row.txHash}},[_vm._v(_vm._s(row.txHash))]),_c('el-button',{attrs:{\"type\":\"text\",\"size\":\"mini\",\"icon\":\"el-icon-document-copy\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.handleCopy(row.txHash, '交易哈希')}}},[_vm._v(\"复制\")])],1)]):_vm._e()])])])}),(!_vm.withdrawRows.length)?_c('div',{staticClass:\"empty\"},[_vm._v(\"暂无提现记录\")]):_vm._e()],2)])]),_c('el-tab-pane',{attrs:{\"label\":\"消费记录\",\"name\":\"consume\"}},[_c('div',{staticClass:\"list-wrap\"},[_c('div',{staticClass:\"list-header\"},[_c('span',{staticClass:\"list-title\"},[_vm._v(\"全部消费 (\"+_vm._s(_vm.consumeRows.length)+\")\")]),_c('el-button',{attrs:{\"type\":\"primary\",\"size\":\"small\"},on:{\"click\":_vm.loadConsume}},[_vm._v(\"刷新\")])],1),_c('div',{directives:[{name:\"loading\",rawName:\"v-loading\",value:(_vm.loading.consume),expression:\"loading.consume\"}],staticClass:\"record-list\"},[_vm._l((_vm.consumeRows),function(row,idx){return _c('div',{key:_vm.getRowKey(row, idx),staticClass:\"record-item\",class:_vm.statusClass(row.status),on:{\"click\":function($event){return _vm.toggleExpand('consume', row, idx)}}},[_c('div',{staticClass:\"item-main\"},[_c('div',{staticClass:\"item-left\"},[_c('div',{staticClass:\"amount\"},[_vm._v(\"- \"+_vm._s(_vm.formatDec6(row.realAmount))+\" \"+_vm._s((row.fromSymbol || 'USDT').toUpperCase()))]),_c('div',{staticClass:\"chain\"},[_vm._v(_vm._s(_vm.formatChain(row.fromChain)))])]),_c('div',{staticClass:\"item-right\"},[_c('div',{staticClass:\"status\"},[_c('el-tag',{attrs:{\"type\":_vm.getPayStatusType(row.status),\"size\":\"small\"}},[_vm._v(_vm._s(_vm.getPayStatusText(row.status)))])],1),_c('div',{staticClass:\"time\"},[_vm._v(_vm._s(_vm.formatFullTime(row.createTime || row.time)))])])]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isExpanded('consume', row, idx)),expression:\"isExpanded('consume', row, idx)\"}],staticClass:\"expand-panel\"},[_c('div',{staticClass:\"expand-grid\"},[_c('div',{staticClass:\"expand-item\"},[_c('span',{staticClass:\"label\"},[_vm._v(\"订单号\")]),_c('span',{staticClass:\"value mono\"},[_vm._v(_vm._s(row.orderId || ''))])]),_c('div',{staticClass:\"expand-item\"},[_c('span',{staticClass:\"label\"},[_vm._v(\"支付地址\")]),_c('span',{staticClass:\"value mono-ellipsis\",attrs:{\"title\":row.fromAddress}},[_vm._v(_vm._s(row.fromAddress || ''))])]),_c('div',{staticClass:\"expand-item\"},[_c('span',{staticClass:\"label\"},[_vm._v(\"收款地址\")]),_c('span',{staticClass:\"value mono-ellipsis\",attrs:{\"title\":row.toAddress}},[_vm._v(_vm._s(row.toAddress || ''))])]),(row.txHash)?_c('div',{staticClass:\"expand-item\"},[_c('span',{staticClass:\"label\"},[_vm._v(\"交易哈希\")]),_c('span',{staticClass:\"value mono-ellipsis\",attrs:{\"title\":row.txHash}},[_vm._v(_vm._s(row.txHash))])]):_vm._e()])])])}),(!_vm.consumeRows.length)?_c('div',{staticClass:\"empty\"},[_vm._v(\"暂无消费记录\")]):_vm._e()],2)])])],1),_c('el-row',[_c('el-col',{staticStyle:{\"display\":\"flex\",\"justify-content\":\"center\"},attrs:{\"span\":24}},[_c('el-pagination',{staticStyle:{\"margin\":\"0 auto\",\"margin-top\":\"10px\"},attrs:{\"current-page\":_vm.currentPage,\"page-sizes\":_vm.pageSizes,\"page-size\":_vm.pagination.pageSize,\"layout\":\"total, sizes, prev, pager, next, jumper\",\"total\":_vm.total},on:{\"size-change\":_vm.handleSizeChange,\"current-change\":_vm.handleCurrentChange,\"update:currentPage\":function($event){_vm.currentPage=$event},\"update:current-page\":function($event){_vm.currentPage=$event}}})],1)],1)],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./products.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./products.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./products.vue?vue&type=template&id=1152902e&scoped=true\"\nimport script from \"./products.vue?vue&type=script&lang=js\"\nexport * from \"./products.vue?vue&type=script&lang=js\"\nimport style0 from \"./products.vue?vue&type=style&index=0&id=1152902e&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1152902e\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"content-container\"},[_c('router-view')],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./index.vue?vue&type=template&id=c3bf12ce&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=js\"\nexport * from \"./index.vue?vue&type=script&lang=js\"\nimport style0 from \"./index.vue?vue&type=style&index=0&id=c3bf12ce&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c3bf12ce\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"orders-page\"},[_c('h2',{staticClass:\"title\"},[_vm._v(\"订单列表\")]),_c('el-tabs',{on:{\"tab-click\":_vm.handleTabClick},model:{value:(_vm.active),callback:function ($$v) {_vm.active=$$v},expression:\"active\"}},[_c('el-tab-pane',{attrs:{\"label\":\"订单进行中\",\"name\":\"7\"}},[_c('order-list',{attrs:{\"items\":_vm.orders[7],\"show-checkout\":true,\"on-cancel\":_vm.handleCancelOrder,\"empty-text\":\"暂无进行中的订单\"}})],1),_c('el-tab-pane',{attrs:{\"label\":\"订单已完成\",\"name\":\"8\"}},[_c('order-list',{attrs:{\"items\":_vm.orders[8],\"show-checkout\":false,\"empty-text\":\"暂无已完成的订单\"}})],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import request from '../utils/request'\r\n\r\n//商品列表\r\nexport function getAddShop(data) {\r\n return request({\r\n url: `/lease/shop/addShop`,\r\n method: 'post',\r\n data\r\n })\r\n}\r\n\r\n// 我的店铺(获取当前用户店铺信息)\r\nexport function getMyShop(params) {\r\n return request({\r\n url: `/lease/shop/getShopByUserEmail`,\r\n method: 'get',\r\n params\r\n })\r\n}\r\n\r\n// 更新店铺\r\nexport function updateShop(data) {\r\n return request({\r\n url: `/lease/shop/updateShop`,\r\n method: 'post',\r\n data\r\n })\r\n}\r\n\r\n// 删除店铺\r\nexport function deleteShop(id) {\r\n return request({\r\n url: `/lease/shop/deleteShop`,\r\n method: 'post',\r\n data: { id }\r\n })\r\n}\r\n\r\n// 查询店铺信息(根据ID)\r\nexport function queryShop(data) {\r\n return request({\r\n url: `/lease/shop/getShopById`,\r\n method: 'post',\r\n data\r\n })\r\n}\r\n\r\n// 关闭店铺\r\nexport function closeShop(id) {\r\n return request({\r\n url: `/lease/shop/closeShop`,\r\n method: 'post',\r\n data: { id }\r\n })\r\n}\r\n\r\n// 根据 店铺id 查询店铺商品配置信息列表\r\nexport function getShopConfig(id) {\r\n return request({\r\n url: `/lease/shop/getShopConfig`,\r\n method: 'post',\r\n data: { id }\r\n })\r\n }\r\n\r\n\r\n // 新增商铺配置\r\nexport function addShopConfig(data) {\r\n return request({\r\n url: `/lease/shop/addShopConfig`,\r\n method: 'post',\r\n data\r\n })\r\n }\r\n\r\n // 根据配置id 修改配置\r\nexport function updateShopConfig(data) {\r\n return request({\r\n url: `/lease/shop/updateShopConfig`,\r\n method: 'post',\r\n data\r\n })\r\n }\r\n\r\n // 根据配置id 删除配置\r\nexport function deleteShopConfig(data) {\r\n return request({\r\n url: `/lease/shop/deleteShopConfig`,\r\n method: 'post',\r\n data\r\n })\r\n }\r\n\r\n \r\n // 钱包配置(用于修改卖家钱包地址)----获取链(一级)和币(二级) 下拉列表(获取本系统支持的链和币种)\r\nexport function getChainAndCoin(data) {\r\n return request({\r\n url: `/lease/shop/getChainAndCoin`,\r\n method: 'post',\r\n data\r\n })\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import axios from 'axios'\r\nimport errorCode from './errorCode'\r\nimport { Notification, MessageBox, Message } from 'element-ui'\r\nimport loadingManager from './loadingManager';\r\nimport errorNotificationManager from './errorNotificationManager';\r\n\r\n \r\nconst pendingRequestMap = new Map(); //处理Request aborted 错误\r\n\r\nfunction getRequestKey(config) { //处理Request aborted 错误 生成唯一 key 的函数\r\n const { url, method, params, data } = config;\r\n return [url, method, JSON.stringify(params), JSON.stringify(data)].join('&');\r\n}\r\n// 创建axios实例\r\nconst service = axios.create({\r\n // axios中请求配置有baseURL选项,表示请求URL公共部分\r\n baseURL: process.env.VUE_APP_BASE_API,\r\n // 超时\r\n timeout: 10000,\r\n})\r\n\r\n// 网络错误相关配置\r\nconst NETWORK_ERROR_THROTTLE_TIME = 5000; // 错误提示节流时间\r\nconst RETRY_DELAY = 2000; // 重试间隔时间\r\nconst MAX_RETRY_TIMES = 3; // 最大重试次数\r\nconst RETRY_WINDOW = 60000; // 60秒重试窗口\r\nlet lastNetworkErrorTime = 0; // 上次网络错误提示时间\r\nlet pendingRequests = new Map();\r\n\r\n\r\n// 网络状态监听器\r\n// 网络状态最后提示时间\r\nlet lastNetworkStatusTime = {\r\n online: 0,\r\n offline: 0\r\n};\r\n\r\n// 创建一个全局标志,确保每次网络恢复只显示一次提示\r\nlet networkRecoveryInProgress = false;\r\n\r\n// 网络状态监听器\r\nwindow.addEventListener('online', () => {\r\n const now = Date.now();\r\n \r\n // 避免短时间内多次触发\r\n if (networkRecoveryInProgress) {\r\n console.log('[网络] 网络恢复处理已在进行中,忽略重复事件');\r\n return;\r\n }\r\n \r\n networkRecoveryInProgress = true;\r\n \r\n // 严格检查是否应该显示提示\r\n if (now - lastNetworkStatusTime.online > 30000) { // 30秒内不重复提示\r\n lastNetworkStatusTime.online = now;\r\n \r\n try {\r\n if (window.vm && window.vm.$message) {\r\n // 确保消息只显示一次\r\n window.vm.$message({\r\n message: window.vm.$i18n.t('home.networkReconnected') || '网络已重新连接,正在恢复数据...',\r\n type: 'success',\r\n duration: 5000,\r\n showClose: true,\r\n });\r\n console.log('[网络] 显示网络恢复提示, 时间:', new Date().toLocaleTimeString());\r\n }\r\n } catch (e) {\r\n console.error('[网络] 显示网络恢复提示失败:', e);\r\n }\r\n } else {\r\n console.log('[网络] 抑制重复的网络恢复提示, 间隔过短:', now - lastNetworkStatusTime.online + 'ms');\r\n }\r\n\r\n // 网络恢复时,重试所有待处理的请求\r\n const pendingPromises = [];\r\n \r\n pendingRequests.forEach(async (request, key) => {\r\n if (now - request.timestamp <= RETRY_WINDOW) {\r\n try {\r\n // 获取新的响应数据\r\n const response = await service(request.config);\r\n pendingPromises.push(response);\r\n \r\n // 执行请求特定的回调\r\n if (request.callback && typeof request.callback === 'function') {\r\n request.callback(response);\r\n }\r\n \r\n // 处理特定类型的请求\r\n if (window.vm) {\r\n // 处理图表数据请求\r\n if (request.config.url.includes('getPoolPower') && response && response.data) {\r\n // 触发图表更新事件\r\n window.dispatchEvent(new CustomEvent('chart-data-updated', { \r\n detail: { type: 'poolPower', data: response.data } \r\n }));\r\n }\r\n else if (request.config.url.includes('getNetPower') && response && response.data) {\r\n window.dispatchEvent(new CustomEvent('chart-data-updated', { \r\n detail: { type: 'netPower', data: response.data } \r\n }));\r\n }\r\n else if (request.config.url.includes('getBlockInfo') && response && response.rows) {\r\n window.dispatchEvent(new CustomEvent('chart-data-updated', { \r\n detail: { type: 'blockInfo', data: response.rows } \r\n }));\r\n }\r\n }\r\n \r\n pendingRequests.delete(key);\r\n } catch (error) {\r\n console.error('重试请求失败:', error);\r\n pendingRequests.delete(key);\r\n }\r\n } else {\r\n pendingRequests.delete(key);\r\n }\r\n });\r\n \r\n // 等待所有请求完成\r\n Promise.allSettled(pendingPromises).then(() => {\r\n // 重置所有 loading 状态\r\n if (loadingManager) {\r\n loadingManager.resetAllLoadingStates();\r\n }\r\n \r\n // 手动重置一些关键的 loading 状态\r\n if (window.vm) {\r\n // 常见的加载状态\r\n const commonLoadingProps = [\r\n 'minerChartLoading', 'reportBlockLoading', 'apiPageLoading', \r\n 'MiningLoading', 'miniLoading', 'bthLoading', 'editLoading'\r\n ];\r\n \r\n commonLoadingProps.forEach(prop => {\r\n if (typeof window.vm[prop] !== 'undefined') {\r\n window.vm[prop] = false;\r\n }\r\n });\r\n\r\n // 重置所有以Loading结尾的状态\r\n Object.keys(window.vm).forEach(key => {\r\n if (key.endsWith('Loading')) {\r\n window.vm[key] = false;\r\n }\r\n });\r\n\r\n\r\n }\r\n \r\n // 触发网络重试完成事件\r\n window.dispatchEvent(new CustomEvent('network-retry-complete'));\r\n \r\n // 重置网络恢复标志\r\n setTimeout(() => {\r\n networkRecoveryInProgress = false;\r\n }, 5000); // 5秒后允许再次处理网络恢复\r\n });\r\n});\r\n\r\n // 使用错误提示管理器控制网络断开提示\r\nwindow.addEventListener('offline', () => {\r\n if (window.vm && window.vm.$message && errorNotificationManager.canShowError('networkOffline')) {\r\n window.vm.$message({\r\n message: window.vm.$i18n.t('home.networkOffline') || '网络连接已断开,系统将在恢复连接后自动重试',\r\n type: 'error',\r\n duration: 5000,\r\n showClose: true,\r\n });\r\n }\r\n});\r\n\r\nservice.defaults.retry = 2;// 重试次数\r\nservice.defaults.retryDelay = 2000;\r\nservice.defaults.shouldRetry = (error) => {\r\n // 只有网络错误或超时错误才进行重试\r\n return error.message === \"Network Error\" || error.message.includes(\"timeout\");\r\n};\r\n\r\nlocalStorage.setItem('superReportError', \"\")\r\nlet superReportError = localStorage.getItem('superReportError')\r\nwindow.addEventListener(\"setItem\", () => {\r\n superReportError = localStorage.getItem('superReportError')\r\n});\r\n\r\n// request拦截器\r\nservice.interceptors.request.use(config => {\r\n superReportError = \"\"\r\n // retryCount =0\r\n localStorage.setItem('superReportError', \"\")\r\n // 是否需要设置 token\r\n let token\r\n try {\r\n token = JSON.parse(localStorage.getItem('token'))\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n if (token) {\r\n config.headers['Authorization'] = token\r\n }\r\n\r\nconsole.log(token,\"if就覅飞机飞机\");\r\n\r\n if (config.method == 'get' && config.data) {\r\n config.params = config.data\r\n }\r\n // get请求映射params参数\r\n if (config.method === 'get' && config.params) {\r\n let url = config.url + '?';\r\n for (const propName of Object.keys(config.params)) {\r\n const value = config.params[propName];\r\n var part = encodeURIComponent(propName) + \"=\";\r\n if (value !== null && typeof (value) !== \"undefined\") {\r\n if (typeof value === 'object') {\r\n for (const key of Object.keys(value)) {\r\n if (value[key] !== null && typeof (value[key]) !== 'undefined') {\r\n let params = propName + '[' + key + ']';\r\n let subPart = encodeURIComponent(params) + '=';\r\n url += subPart + encodeURIComponent(value[key]) + '&';\r\n }\r\n }\r\n } else {\r\n url += part + encodeURIComponent(value) + \"&\";\r\n }\r\n }\r\n }\r\n url = url.slice(0, -1);\r\n config.params = {};\r\n config.url = url;\r\n }\r\n\r\n // 生成请求唯一key 处理Request aborted 错误\r\n const requestKey = getRequestKey(config);\r\n\r\n // 如果有相同请求,先取消 处理Request aborted 错误\r\n if (pendingRequestMap.has(requestKey)) {\r\n const cancel = pendingRequestMap.get(requestKey);\r\n cancel(); // 取消上一次请求\r\n pendingRequestMap.delete(requestKey);\r\n }\r\n\r\n // 创建新的CancelToken 处理Request aborted 错误\r\n config.cancelToken = new axios.CancelToken(cancel => {\r\n pendingRequestMap.set(requestKey, cancel);\r\n });\r\n\r\n return config\r\n}, error => {\r\n Promise.reject(error)\r\n})\r\n\r\n// 响应拦截器\r\nservice.interceptors.response.use(res => {\r\n\r\n // 请求完成后移除\r\n const requestKey = getRequestKey(res.config);\r\n pendingRequestMap.delete(requestKey);\r\n // 未设置状态码则默认成功状态\r\n const code = res.data.code || 200;\r\n // 获取错误信息\r\n const msg = errorCode[code] || res.data.msg || errorCode['default']\r\n if (code === 421) {\r\n localStorage.setItem('cs_disconnect_all', Date.now().toString()); //告知客服页面断开连接\r\n localStorage.removeItem('token')\r\n // 系统状态已过期,请重新点击SUPPORT按钮进入 \r\n superReportError = localStorage.getItem('superReportError')\r\n if (!superReportError) {\r\n superReportError = 421\r\n localStorage.setItem('superReportError', superReportError)\r\n MessageBox.confirm(window.vm.$i18n.t(`user.loginExpired`), window.vm.$i18n.t(`user.overduePrompt`), {\r\n distinguishCancelAndClose: true,\r\n confirmButtonText: window.vm.$i18n.t(`user.login`),\r\n cancelButtonText: window.vm.$i18n.t(`user.Home`),\r\n // showCancelButton: false, // 隐藏取消按钮\r\n closeOnClickModal: false, // 点击空白处不关闭对话框\r\n showClose: false, // 隐藏关闭按钮\r\n type: 'warning'\r\n }\r\n ).then(() => {\r\n window.vm.$router.push(`/${window.vm.$i18n.locale}/login`)\r\n localStorage.removeItem('token')\r\n }).catch(() => {\r\n window.vm.$router.push(`/${window.vm.$i18n.locale}/`)\r\n localStorage.removeItem('token')\r\n });\r\n\r\n }\r\n\r\n\r\n return Promise.reject('登录状态已过期')\r\n } else if (code >= 500 && !superReportError) {\r\n superReportError = 500\r\n localStorage.setItem('superReportError', superReportError)\r\n Message({\r\n dangerouslyUseHTMLString: true,\r\n message: msg,\r\n type: 'error',\r\n showClose: true\r\n })\r\n // throw msg; // 抛出错误,中断请求链并触发后续的错误处理逻辑\r\n // return Promise.reject(new Error(msg))\r\n } else if (code !== 200) {\r\n\r\n\r\n\r\n Notification.error({\r\n title: msg\r\n })\r\n return Promise.reject('error')\r\n\r\n } else {\r\n\r\n return res.data\r\n }\r\n\r\n\r\n\r\n\r\n},\r\n error => {\r\n\r\n // 主动取消的请求,直接忽略,不提示\r\n if (\r\n error.code === 'ERR_CANCELED' ||\r\n (error.message && error.message.includes('canceled')) ||\r\n error.message?.includes('Request aborted')\r\n ) {\r\n // 静默处理,不提示,不冒泡\r\n return new Promise(() => {}); // 返回pending Promise,阻止控制台报错\r\n }\r\n\r\n\r\n\r\n \r\n // 请求异常也要移除 处理Request aborted 错误\r\n if (error.config) {\r\n const requestKey = getRequestKey(error.config);\r\n pendingRequestMap.delete(requestKey);\r\n }\r\n\r\n\r\n let { message } = error;\r\n if (message == \"Network Error\" || message.includes(\"timeout\")) {\r\n if (!navigator.onLine) {\r\n // 断网状态,添加到重试队列\r\n const requestKey = JSON.stringify({\r\n url: error.config.url,\r\n method: error.config.method,\r\n params: error.config.params,\r\n data: error.config.data\r\n });\r\n \r\n // 根据URL确定请求类型并记录回调\r\n let callback = null;\r\n if (error.config.url.includes('getPoolPower')) {\r\n callback = (data) => {\r\n if (window.vm) {\r\n // 清除loading状态\r\n window.vm.minerChartLoading = false;\r\n }\r\n };\r\n } else if (error.config.url.includes('getBlockInfo')) {\r\n callback = (data) => {\r\n if (window.vm) {\r\n window.vm.reportBlockLoading = false;\r\n }\r\n };\r\n }\r\n \r\n if (!pendingRequests.has(requestKey)) {\r\n pendingRequests.set(requestKey, {\r\n config: error.config,\r\n timestamp: Date.now(),\r\n retryCount: 0,\r\n callback: callback\r\n });\r\n \r\n console.log('请求已加入断网重连队列:', error.config.url);\r\n }\r\n } else {\r\n // 网络已连接,但请求失败,尝试重试\r\n // 确保 config 中有 __retryCount 字段\r\n error.config.__retryCount = error.config.__retryCount || 0;\r\n \r\n // 判断是否可以重试\r\n if (error.config.__retryCount < service.defaults.retry && service.defaults.shouldRetry(error)) {\r\n // 增加重试计数\r\n error.config.__retryCount += 1;\r\n \r\n console.log(`[请求重试] ${error.config.url} - 第 ${error.config.__retryCount} 次重试`);\r\n \r\n // 创建新的Promise等待一段时间后重试\r\n return new Promise(resolve => {\r\n setTimeout(() => {\r\n resolve(service(error.config));\r\n }, service.defaults.retryDelay);\r\n });\r\n }\r\n \r\n // 达到最大重试次数,不再重试\r\n console.log(`[请求失败] ${error.config.url} - 已达到最大重试次数`);\r\n }\r\n }\r\n\r\n if (!superReportError) {\r\n superReportError = \"error\"\r\n localStorage.setItem('superReportError', superReportError)\r\n //使用错误提示管理器errorNotificationManager\r\n if (errorNotificationManager.canShowError(message)) {\r\n if (message == \"Network Error\") {\r\n Message({\r\n message: window.vm.$i18n.t(`home.NetworkError`),\r\n type: 'error',\r\n duration: 4 * 1000,\r\n showClose: true\r\n });\r\n }\r\n else if (message.includes(\"timeout\")) {\r\n Message({\r\n message: window.vm.$i18n.t(`home.requestTimeout`),\r\n type: 'error',\r\n duration: 5 * 1000,\r\n showClose: true\r\n });\r\n }\r\n else if (message.includes(\"Request failed with status code\")) {\r\n Message({\r\n message: \"系统接口\" + message.substr(message.length - 3) + \"异常\",\r\n type: 'error',\r\n duration: 5 * 1000,\r\n showClose: true\r\n });\r\n } else {\r\n Message({\r\n message: message,\r\n type: 'error',\r\n duration: 5 * 1000,\r\n showClose: true\r\n });\r\n }\r\n } else {\r\n // 避免完全不提示,可以在控制台记录被抑制的错误\r\n console.log('[错误提示] 已抑制重复错误:', message);\r\n }\r\n }\r\n\r\n\r\n\r\n\r\n return Promise.reject(error)\r\n\r\n }\r\n)\r\n\r\n\r\n\r\nexport default service","\n\n\n\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"product-machine-add\"},[_c('div',{staticClass:\"header\"},[_c('el-button',{attrs:{\"type\":\"text\"},on:{\"click\":_vm.handleBack}},[_vm._v(\"返回\")]),_c('h2',{staticClass:\"title\"},[_vm._v(\"添加出售机器\")])],1),_c('el-alert',{staticClass:\"notice-alert\",attrs:{\"type\":\"warning\",\"show-icon\":\"\",\"closable\":false,\"title\":\"新增出售机器必须在 M2pool 有挖矿算力记录才能添加出租\",\"description\":\"建议稳定在 M2pool 矿池挖矿 24 小时之后,再添加出售该机器\"}}),_c('el-card',{staticClass:\"form-card\",attrs:{\"shadow\":\"never\"}},[_c('el-form',{ref:\"machineForm\",attrs:{\"model\":_vm.form,\"rules\":_vm.rules,\"label-width\":\"160px\",\"size\":\"small\"}},[_c('el-form-item',{attrs:{\"label\":\"商品名称\"}},[_c('el-input',{staticStyle:{\"width\":\"50%\"},attrs:{\"disabled\":\"\"},model:{value:(_vm.form.productName),callback:function ($$v) {_vm.$set(_vm.form, \"productName\", $$v)},expression:\"form.productName\"}})],1),_c('el-form-item',{attrs:{\"label\":\"矿机型号\"}},[_c('el-input',{staticStyle:{\"width\":\"50%\"},attrs:{\"placeholder\":\"示例:龍珠\",\"maxlength\":20},on:{\"input\":_vm.handleTypeInput},model:{value:(_vm.form.type),callback:function ($$v) {_vm.$set(_vm.form, \"type\", $$v)},expression:\"form.type\"}})],1),_c('el-form-item',{attrs:{\"label\":\"理论算力\",\"prop\":\"theoryPower\"}},[_c('el-input',{staticStyle:{\"width\":\"50%\"},attrs:{\"placeholder\":\"请输入单机理论算力\",\"inputmode\":\"decimal\"},on:{\"input\":function($event){return _vm.handleNumeric('theoryPower')}},model:{value:(_vm.form.theoryPower),callback:function ($$v) {_vm.$set(_vm.form, \"theoryPower\", $$v)},expression:\"form.theoryPower\"}})],1),_c('el-form-item',{attrs:{\"label\":\"算力单位\",\"prop\":\"unit\"}},[_c('el-select',{attrs:{\"placeholder\":\"请选择算力单位\"},model:{value:(_vm.form.unit),callback:function ($$v) {_vm.$set(_vm.form, \"unit\", $$v)},expression:\"form.unit\"}},[_c('el-option',{attrs:{\"label\":\"KH/S\",\"value\":\"KH/S\"}}),_c('el-option',{attrs:{\"label\":\"MH/S\",\"value\":\"MH/S\"}}),_c('el-option',{attrs:{\"label\":\"GH/S\",\"value\":\"GH/S\"}}),_c('el-option',{attrs:{\"label\":\"TH/S\",\"value\":\"TH/S\"}}),_c('el-option',{attrs:{\"label\":\"PH/S\",\"value\":\"PH/S\"}})],1)],1),_c('el-form-item',{attrs:{\"label\":\"最大租赁天数\",\"prop\":\"maxLeaseDays\"}},[_c('el-input',{staticStyle:{\"width\":\"50%\"},attrs:{\"placeholder\":\"1-365\",\"inputmode\":\"numeric\"},on:{\"input\":function($event){return _vm.handleNumeric('maxLeaseDays')}},model:{value:(_vm.form.maxLeaseDays),callback:function ($$v) {_vm.$set(_vm.form, \"maxLeaseDays\", $$v)},expression:\"form.maxLeaseDays\"}},[_c('template',{slot:\"append\"},[_vm._v(\"天\")])],2)],1),_c('el-form-item',{attrs:{\"label\":\"功耗\",\"prop\":\"powerDissipation\"}},[_c('el-input',{staticStyle:{\"width\":\"50%\"},attrs:{\"placeholder\":\"示例:0.01\",\"inputmode\":\"decimal\"},on:{\"input\":function($event){return _vm.handleNumeric('powerDissipation')}},model:{value:(_vm.form.powerDissipation),callback:function ($$v) {_vm.$set(_vm.form, \"powerDissipation\", $$v)},expression:\"form.powerDissipation\"}},[_c('template',{slot:\"append\"},[_vm._v(\"kw/h\")])],2)],1),_c('el-form-item',{attrs:{\"label\":\"统一售价\",\"prop\":\"cost\"}},[_c('span',{attrs:{\"slot\":\"label\"},slot:\"label\"},[_vm._v(\" 统一售价 \"),_c('el-tooltip',{attrs:{\"effect\":\"dark\",\"placement\":\"top\"}},[_c('div',{attrs:{\"slot\":\"content\"},slot:\"content\"},[_vm._v(\" 卖家最终收款金额 = 机器售价 × 波动率\"),_c('br'),_vm._v(\" 波动率规则:\"),_c('br'),_vm._v(\" 1)0% - 5%(包含5%):波动率 = 1(按售价结算)\"),_c('br'),_vm._v(\" 2)5%以上:波动率 = 实际算力 / 理论算力,且不会超过 1,即最终结算时不会超过机器售价 \")]),_c('i',{staticClass:\"el-icon-question label-help\",attrs:{\"aria-label\":\"帮助\",\"tabindex\":\"0\"}})])],1),_c('el-input',{staticStyle:{\"width\":\"50%\"},attrs:{\"placeholder\":\"请输入成本(USDT)\",\"inputmode\":\"decimal\"},on:{\"input\":function($event){return _vm.handleNumeric('cost')}},model:{value:(_vm.form.cost),callback:function ($$v) {_vm.$set(_vm.form, \"cost\", $$v)},expression:\"form.cost\"}},[_c('template',{slot:\"append\"},[_vm._v(\"USDT\")])],2)],1),_c('el-form-item',{attrs:{\"label\":\"选择挖矿账户\"}},[_c('el-select',{attrs:{\"filterable\":\"\",\"clearable\":\"\",\"placeholder\":\"请选择挖矿账户\",\"loading\":_vm.minersLoading},on:{\"change\":_vm.handleMinerChange},model:{value:(_vm.selectedMiner),callback:function ($$v) {_vm.selectedMiner=$$v},expression:\"selectedMiner\"}},_vm._l((_vm.miners),function(m){return _c('el-option',{key:m.user + '_' + m.coin,attrs:{\"label\":m.user + '(' + m.coin + ')',\"value\":m.user + '|' + m.coin}})}),1)],1),_c('el-form-item',{attrs:{\"label\":\"选择机器(可多选)\"}},[_c('el-select',{attrs:{\"multiple\":\"\",\"filterable\":\"\",\"collapse-tags\":\"\",\"placeholder\":\"请选择机器\",\"loading\":_vm.machinesLoading,\"disabled\":!_vm.selectedMiner},model:{value:(_vm.selectedMachines),callback:function ($$v) {_vm.selectedMachines=$$v},expression:\"selectedMachines\"}},_vm._l((_vm.machineOptions),function(m){return _c('el-option',{key:m.user + '_' + m.miner,attrs:{\"label\":m.miner + '(' + m.user + ')',\"value\":m.miner}})}),1)],1)],1)],1),(_vm.selectedMachineRows.length)?_c('el-card',{staticClass:\"form-card\",attrs:{\"shadow\":\"never\"}},[_c('div',{staticClass:\"section-title\",attrs:{\"slot\":\"header\"},slot:\"header\"},[_vm._v(\"已选择机器\")]),_c('el-table',{staticStyle:{\"width\":\"100%\"},attrs:{\"data\":_vm.selectedMachineRows,\"border\":\"\",\"stripe\":\"\"}},[_c('el-table-column',{attrs:{\"prop\":\"user\",\"label\":\"挖矿账户\"}}),_c('el-table-column',{attrs:{\"prop\":\"miner\",\"label\":\"机器编号\"}}),_c('el-table-column',{attrs:{\"prop\":\"realPower\",\"label\":\"实际算力(MH/S)\"}},[_c('template',{slot:\"header\"},[_c('el-tooltip',{attrs:{\"content\":\"实际算力为该机器在本矿池过去24H的平均算力\",\"effect\":\"dark\",\"placement\":\"top\"}},[_c('i',{staticClass:\"el-icon-question\",staticStyle:{\"margin-right\":\"4px\",\"color\":\"#909399\"},attrs:{\"aria-label\":\"帮助\",\"tabindex\":\"0\"}})]),_c('span',[_vm._v(\"实际算力(MH/S)\")])],1)],2),_c('el-table-column',{attrs:{\"label\":\"功耗(kw/h)\",\"min-width\":\"120\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('el-input',{staticStyle:{\"width\":\"100%\"},attrs:{\"placeholder\":\"示例:0.01\",\"inputmode\":\"decimal\"},on:{\"input\":function($event){return _vm.handleRowPowerDissipationInput(scope.$index)},\"blur\":function($event){return _vm.handleRowPowerDissipationBlur(scope.$index)}},model:{value:(scope.row.powerDissipation),callback:function ($$v) {_vm.$set(scope.row, \"powerDissipation\", $$v)},expression:\"scope.row.powerDissipation\"}},[_c('template',{slot:\"append\"},[_vm._v(\"kw/h\")])],2)]}}],null,false,2461731706)}),_c('el-table-column',{attrs:{\"label\":\"理论算力\",\"min-width\":\"160\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('div',{staticStyle:{\"display\":\"flex\",\"align-items\":\"center\",\"gap\":\"8px\"}},[_c('el-input',{staticStyle:{\"width\":\"100%\"},attrs:{\"placeholder\":\"理论算力\",\"inputmode\":\"decimal\"},on:{\"input\":function($event){return _vm.handleRowTheoryPowerInput(scope.$index)},\"blur\":function($event){return _vm.handleRowTheoryPowerBlur(scope.$index)}},model:{value:(scope.row.theoryPower),callback:function ($$v) {_vm.$set(scope.row, \"theoryPower\", $$v)},expression:\"scope.row.theoryPower\"}}),_c('el-select',{staticStyle:{\"width\":\"150px\"},attrs:{\"placeholder\":\"单位\"},on:{\"change\":val => _vm.handleRowUnitChange(scope.$index, val)},model:{value:(scope.row.unit),callback:function ($$v) {_vm.$set(scope.row, \"unit\", $$v)},expression:\"scope.row.unit\"}},[_c('el-option',{attrs:{\"label\":\"KH/S\",\"value\":\"KH/S\"}}),_c('el-option',{attrs:{\"label\":\"MH/S\",\"value\":\"MH/S\"}}),_c('el-option',{attrs:{\"label\":\"GH/S\",\"value\":\"GH/S\"}}),_c('el-option',{attrs:{\"label\":\"TH/S\",\"value\":\"TH/S\"}}),_c('el-option',{attrs:{\"label\":\"PH/S\",\"value\":\"PH/S\"}})],1)],1)]}}],null,false,2316701192)}),_c('el-table-column',{attrs:{\"label\":\"售价(USDT)\",\"min-width\":\"160\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('el-input',{staticStyle:{\"width\":\"100%\"},attrs:{\"placeholder\":\"价格\",\"inputmode\":\"decimal\"},on:{\"input\":function($event){return _vm.handleRowPriceInput(scope.$index)},\"blur\":function($event){return _vm.handleRowPriceBlur(scope.$index)}},model:{value:(scope.row.price),callback:function ($$v) {_vm.$set(scope.row, \"price\", $$v)},expression:\"scope.row.price\"}},[_c('template',{slot:\"append\"},[_vm._v(\"USDT\")])],2)]}}],null,false,3549540243)},[_c('template',{slot:\"header\"},[_c('el-tooltip',{attrs:{\"effect\":\"dark\",\"placement\":\"top\"}},[_c('div',{attrs:{\"slot\":\"content\"},slot:\"content\"},[_vm._v(\" 卖家最终收款金额 = 机器售价 × 波动率\"),_c('br'),_vm._v(\" 波动率规则:\"),_c('br'),_vm._v(\" 1)0% - 5%(包含5%):波动率 = 1(按售价结算)\"),_c('br'),_vm._v(\" 2)5%以上:波动率 = 实际算力 / 理论算力,且不会超过 1,即最终结算时不会超过机器售价 \")]),_c('i',{staticClass:\"el-icon-question label-help\",attrs:{\"aria-label\":\"帮助\",\"tabindex\":\"0\"}})]),_c('span',[_vm._v(\"售价(USDT)\")])],1)],2),_c('el-table-column',{attrs:{\"label\":\"最大租赁天数(天)\",\"min-width\":\"120\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('el-input',{staticStyle:{\"width\":\"100%\"},attrs:{\"placeholder\":\"1-365\",\"inputmode\":\"numeric\"},on:{\"input\":function($event){return _vm.handleRowMaxLeaseDaysInput(scope.$index)},\"blur\":function($event){return _vm.handleRowMaxLeaseDaysBlur(scope.$index)}},model:{value:(scope.row.maxLeaseDays),callback:function ($$v) {_vm.$set(scope.row, \"maxLeaseDays\", $$v)},expression:\"scope.row.maxLeaseDays\"}},[_c('template',{slot:\"append\"},[_vm._v(\"天\")])],2)]}}],null,false,309661603)}),_c('el-table-column',{attrs:{\"label\":\"矿机型号\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('el-input',{staticStyle:{\"width\":\"100%\"},attrs:{\"placeholder\":\"矿机型号\",\"maxlength\":20},on:{\"input\":function($event){return _vm.handleRowTypeInput(scope.$index)},\"blur\":function($event){return _vm.handleRowTypeBlur(scope.$index)}},model:{value:(scope.row.type),callback:function ($$v) {_vm.$set(scope.row, \"type\", $$v)},expression:\"scope.row.type\"}})]}}],null,false,1752667191)}),_c('el-table-column',{attrs:{\"label\":\"上下架状态\",\"width\":\"100\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('el-button',{attrs:{\"type\":scope.row.state === 0 ? 'success' : 'info',\"size\":\"mini\"},on:{\"click\":function($event){return _vm.handleToggleState(scope.$index)}}},[_vm._v(\" \"+_vm._s(scope.row.state === 0 ? '上架' : '下架')+\" \")])]}}],null,false,875649026)})],1)],1):_vm._e(),_c('div',{staticClass:\"actions\"},[_c('el-button',{on:{\"click\":_vm.handleBack}},[_vm._v(\"取消\")]),_c('el-button',{attrs:{\"type\":\"primary\",\"loading\":_vm.saving},on:{\"click\":_vm.handleSave}},[_vm._v(\"确认添加\")])],1),_c('el-dialog',{attrs:{\"title\":\"请确认上架信息\",\"visible\":_vm.confirmVisible,\"width\":\"400px\"},on:{\"update:visible\":function($event){_vm.confirmVisible=$event}}},[_c('div',[_c('p',[_vm._v(\"请仔细确认已选择机器列表、价格及相关参数定义。\")]),_c('p',{staticStyle:{\"text-align\":\"left\"}},[_vm._v(\"机器上架后,一经售出,在机器出售期间不能修改价格及机器参数。\")])]),_c('span',{staticClass:\"dialog-footer\",attrs:{\"slot\":\"footer\"},slot:\"footer\"},[_c('el-button',{on:{\"click\":function($event){_vm.confirmVisible = false}}},[_vm._v(\"取消\")]),_c('el-button',{attrs:{\"type\":\"primary\",\"loading\":_vm.saving},on:{\"click\":_vm.doSubmit}},[_vm._v(\"确认上架已选择机器\")])],1)])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import request from '../utils/request'\r\n\r\n//加入购物车\r\nexport function addCart(data) {\r\n return request({\r\n url: `/lease/shopping/cart/addGoods`,\r\n method: 'post',\r\n data\r\n })\r\n}\r\n\r\n\r\n//查询购物车列表\r\nexport function getGoodsList(data) {\r\n return request({\r\n url: `/lease/shopping/cart/getGoodsList`,\r\n method: 'post',\r\n data\r\n })\r\n }\r\n //删除购物车商品 批量\r\nexport function deleteBatchGoods(data) {\r\n return request({\r\n url: `/lease/shopping/cart/deleteBatchGoods`,\r\n method: 'post',\r\n data\r\n })\r\n }\r\n\r\n \r\n // 批量删除购物车中已下架商品\r\nexport function deleteBatchGoodsForIsDelete(data) {\r\n return request({\r\n url: `/lease/shopping/cart/deleteBatchGoodsForIsDelete`,\r\n method: 'post',\r\n data\r\n })\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"panel\"},[_c('h2',{staticClass:\"panel-title\"},[_vm._v(\"我的店铺\")]),_c('div',{staticClass:\"panel-body\"},[_c('el-card',{staticClass:\"guide-card\",staticStyle:{\"margin-bottom\":\"16px\"},attrs:{\"shadow\":\"never\"}},[_c('div',{staticClass:\"guide-header\",attrs:{\"slot\":\"header\"},slot:\"header\"},[_vm._v(\"店铺层级说明\")]),_c('div',{staticClass:\"guide-content\"},[_c('p',{staticClass:\"hierarchy\"},[_vm._v(\"层级结构:店铺 → 商品 → 出售机器\")]),_c('ol',{staticClass:\"guide-steps\"},[_c('li',[_c('b',[_vm._v(\"店铺(唯一)\")]),_vm._v(\":每个用户在平台\"),_c('strong',[_vm._v(\"仅能创建一个店铺\")]),_vm._v(\"。创建成功后, 请在本页点击 \"),_c('b',[_vm._v(\"钱包绑定\")]),_vm._v(\",配置自己的收款地址(支持不同链与币种)。 \")]),_c('li',[_c('b',[_vm._v(\"商品\")]),_vm._v(\":完成钱包绑定后,即可在“我的店铺”页面 \"),_c('b',[_vm._v(\"创建商品\")]),_vm._v(\"。 商品可按 \"),_c('b',[_vm._v(\"币种\")]),_vm._v(\" 进行分类管理,创建的商品会在商城对买家展示。 商品可理解为“不同算法、币种的机器集合分类”。 \")]),_c('li',[_c('b',[_vm._v(\"出售机器\")]),_vm._v(\":创建商品后,请进入 \"),_c('b',[_vm._v(\"商品列表\")]),_vm._v(\" 为该商品 \"),_c('b',[_vm._v(\"添加出售机器明细\")]),_vm._v(\"。 必须添加出售机器,否则买家无法下单。买家点击某个商品后,会看到该商品下的机器明细并进行选购。 \")])]),_c('div',{staticClass:\"guide-note\"},[_vm._v(\"提示:建议先创建店铺 → 完成钱包绑定 → 创建商品 → 添加出售机器的顺序,避免漏配导致无法收款或无法下单。\")])])]),(_vm.loaded && _vm.hasShop)?_c('el-card',{staticClass:\"shop-card\",attrs:{\"shadow\":\"hover\"}},[_c('div',{staticClass:\"shop-row\"},[_c('div',{staticClass:\"shop-cover\"},[_c('img',{attrs:{\"src\":_vm.shop.image || _vm.defaultCover,\"alt\":\"店铺封面\"}})]),_c('div',{staticClass:\"shop-info\"},[_c('div',{staticClass:\"shop-title\"},[_c('span',{staticClass:\"name\"},[_vm._v(_vm._s(_vm.shop.name || '未命名店铺'))]),_c('el-tag',{attrs:{\"size\":\"small\",\"type\":_vm.shopStateTagType}},[_vm._v(\" \"+_vm._s(_vm.shopStateText)+\" \")])],1),_c('div',{staticClass:\"desc\"},[_vm._v(_vm._s(_vm.shop.description || '这家店还没有描述~'))]),_c('div',{staticClass:\"actions\"},[_c('el-button',{attrs:{\"size\":\"small\",\"type\":\"primary\"},on:{\"click\":_vm.handleOpenEdit}},[_vm._v(\"修改店铺\")]),_c('el-button',{attrs:{\"size\":\"small\",\"type\":\"warning\"},on:{\"click\":_vm.handleToggleShop}},[_vm._v(\" \"+_vm._s(_vm.shop.state === 2 ? '开启店铺' : '关闭店铺')+\" \")]),_c('el-button',{attrs:{\"size\":\"small\",\"type\":\"danger\"},on:{\"click\":_vm.handleDelete}},[_vm._v(\"删除店铺\")]),_c('el-button',{attrs:{\"size\":\"small\",\"type\":\"success\"},on:{\"click\":_vm.handleAddProduct}},[_vm._v(\"新增商品\")]),_c('el-button',{attrs:{\"size\":\"small\",\"type\":\"success\"},on:{\"click\":_vm.handleWalletBind}},[_vm._v(\"钱包绑定\")])],1)])])]):_vm._e(),(_vm.loaded && _vm.hasShop)?_c('el-card',{staticClass:\"shop-config-card\",staticStyle:{\"margin-top\":\"16px\"},attrs:{\"shadow\":\"never\"}},[_c('div',{staticClass:\"clearfix\",attrs:{\"slot\":\"header\"},slot:\"header\"},[_c('span',[_vm._v(\"已绑定钱包\")])]),_c('el-table',{staticStyle:{\"width\":\"100%\"},attrs:{\"data\":_vm.shopConfigs,\"border\":\"\"}},[_c('el-table-column',{attrs:{\"prop\":\"chain\",\"label\":\"链\",\"width\":\"140\"}}),_c('el-table-column',{attrs:{\"label\":\"支付币种\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('div',{staticClass:\"coin-list\"},[(Array.isArray(scope.row.children) && scope.row.children.length)?_vm._l((scope.row.children),function(c,idx){return _c('el-tooltip',{key:idx,attrs:{\"content\":String(c && c.payCoin ? c.payCoin : '').toUpperCase(),\"placement\":\"top\"}},[(c && c.image)?_c('img',{staticClass:\"coin-img\",attrs:{\"src\":c.image,\"alt\":(c.payCoin || '').toUpperCase()}}):_vm._e()])}):[_vm._v(\" \"+_vm._s(String(scope.row.payCoin || '').toUpperCase())+\" \")]],2)]}}],null,false,569036476)}),_c('el-table-column',{attrs:{\"prop\":\"payAddress\",\"label\":\"收款钱包地址\",\"show-overflow-tooltip\":\"\"}}),_c('el-table-column',{attrs:{\"label\":\"操作\",\"width\":\"180\",\"fixed\":\"right\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('el-button',{attrs:{\"type\":\"text\"},on:{\"click\":function($event){return _vm.handleEditConfig(scope.row)}}},[_vm._v(\"修改\")]),_c('el-divider',{attrs:{\"direction\":\"vertical\"}}),_c('el-button',{staticStyle:{\"color\":\"#e74c3c\"},attrs:{\"type\":\"text\"},on:{\"click\":function($event){return _vm.handleDeleteConfig(scope.row)}}},[_vm._v(\"删除\")])]}}],null,false,2146652355)})],1)],1):(_vm.loaded && !_vm.hasShop)?_c('div',{staticClass:\"no-shop\"},[_c('el-empty',{attrs:{\"description\":\"暂无店铺\"}},[_c('el-button',{attrs:{\"type\":\"primary\"},on:{\"click\":_vm.handleGoNew}},[_vm._v(\"新建店铺\")])],1)],1):_c('el-empty',{attrs:{\"description\":\"正在加载店铺信息...\"}}),_c('el-dialog',{attrs:{\"title\":\"修改店铺\",\"visible\":_vm.visibleEdit,\"width\":\"520px\"},on:{\"update:visible\":function($event){_vm.visibleEdit=$event}}},[_c('div',{staticClass:\"row\"},[_c('label',{staticClass:\"label\"},[_vm._v(\"店铺名称\")]),_c('el-input',{attrs:{\"placeholder\":\"请输入店铺名称\",\"maxlength\":30,\"show-word-limit\":\"\"},model:{value:(_vm.editForm.name),callback:function ($$v) {_vm.$set(_vm.editForm, \"name\", $$v)},expression:\"editForm.name\"}})],1),_c('div',{staticClass:\"row\"},[_c('label',{staticClass:\"label\"},[_vm._v(\"店铺描述\")]),_c('el-input',{attrs:{\"type\":\"textarea\",\"rows\":3,\"placeholder\":\"请输入描述\",\"maxlength\":300,\"show-word-limit\":\"\"},model:{value:(_vm.editForm.description),callback:function ($$v) {_vm.$set(_vm.editForm, \"description\", $$v)},expression:\"editForm.description\"}})],1),_c('span',{staticClass:\"dialog-footer\",attrs:{\"slot\":\"footer\"},slot:\"footer\"},[_c('el-button',{on:{\"click\":function($event){_vm.visibleEdit=false}}},[_vm._v(\"取消\")]),_c('el-button',{attrs:{\"type\":\"primary\"},on:{\"click\":_vm.submitEdit}},[_vm._v(\"保存\")])],1)]),_c('el-dialog',{attrs:{\"title\":\"修改配置\",\"visible\":_vm.visibleConfigEdit,\"width\":\"560px\"},on:{\"update:visible\":function($event){_vm.visibleConfigEdit=$event}}},[_c('div',{staticClass:\"row\"},[_c('label',{staticClass:\"label\"},[_vm._v(\"支付链\")]),_c('el-input',{attrs:{\"placeholder\":\"-\",\"disabled\":\"\"},model:{value:(_vm.configForm.chainLabel),callback:function ($$v) {_vm.$set(_vm.configForm, \"chainLabel\", $$v)},expression:\"configForm.chainLabel\"}})],1),_c('div',{staticClass:\"row\"},[_c('label',{staticClass:\"label\"},[_vm._v(\"支付币种\")]),_c('el-select',{staticClass:\"input\",attrs:{\"size\":\"middle\",\"multiple\":\"\",\"collapse-tags\":\"\",\"filterable\":\"\",\"placeholder\":\"请选择币种\"},model:{value:(_vm.configForm.payCoins),callback:function ($$v) {_vm.$set(_vm.configForm, \"payCoins\", $$v)},expression:\"configForm.payCoins\"}},_vm._l((_vm.editCoinOptions),function(item){return _c('el-option',{key:item.value,attrs:{\"label\":item.label,\"value\":item.value}})}),1)],1),_c('div',{staticClass:\"row\"},[_c('label',{staticClass:\"label\"},[_vm._v(\"已选择币种\")]),_c('div',{staticClass:\"selected-coin-list\"},[_vm._l((_vm.selectedCoinLabels),function(c){return _c('el-tag',{key:c,attrs:{\"type\":\"warning\",\"effect\":\"light\",\"closable\":\"\"},on:{\"close\":function($event){return _vm.removeSelectedCoin(c)}}},[_vm._v(_vm._s(c))])}),(!_vm.selectedCoinLabels.length)?_c('span',{staticStyle:{\"color\":\"#c0c4cc\"}},[_vm._v(\"未选择\")]):_vm._e()],2)]),_c('div',{staticClass:\"row\"},[_c('label',{staticClass:\"label\"},[_vm._v(\"钱包地址\")]),_c('el-input',{attrs:{\"placeholder\":\"请输入钱包地址\"},model:{value:(_vm.configForm.payAddress),callback:function ($$v) {_vm.$set(_vm.configForm, \"payAddress\", $$v)},expression:\"configForm.payAddress\"}})],1),_c('span',{staticClass:\"dialog-footer\",attrs:{\"slot\":\"footer\"},slot:\"footer\"},[_c('el-button',{on:{\"click\":function($event){_vm.visibleConfigEdit=false}}},[_vm._v(\"取消\")]),_c('el-button',{attrs:{\"type\":\"primary\"},on:{\"click\":_vm.submitConfigEdit}},[_vm._v(\"确认修改\")])],1)])],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @file 购物车管理(轻量,无 Vuex)\n * @description 提供添加、更新、删除、清空、查询购物车的函数。使用 localStorage 持久化。\n */\n\nconst STORAGE_KEY = 'power_leasing_cart_v1';\n\n/**\n * @typedef {Object} CartItem\n * @property {string} id - 商品ID\n * @property {string} title - 商品标题\n * @property {number} price - 单价\n * @property {number} quantity - 数量\n * @property {string} image - 图片URL\n */\n\n/**\n * 读取本地购物车\n * @returns {CartItem[]}\n */\nexport const readCart = () => {\n try {\n const raw = window.localStorage.getItem(STORAGE_KEY);\n if (!raw) return [];\n const parsed = JSON.parse(raw);\n if (!Array.isArray(parsed)) return [];\n return parsed.filter(Boolean);\n } catch (error) {\n console.error('[cartManager] readCart error:', error);\n return [];\n }\n}\n\n/**\n * 持久化购物车\n * @param {CartItem[]} cart\n */\nconst writeCart = (cart) => {\n try {\n window.localStorage.setItem(STORAGE_KEY, JSON.stringify(cart));\n // 同步派发购物车更新事件(总数量),用于头部徽标等全局更新\n try {\n const count = cart.reduce((s, c) => s + Number(c.quantity || 0), 0)\n window.dispatchEvent(new CustomEvent('cart-updated', { detail: { count } }))\n } catch (e) { /* noop */ }\n } catch (error) {\n console.error('[cartManager] writeCart error:', error);\n }\n}\n\n/**\n * 添加到购物车(若已存在则数量累加)\n * @param {CartItem} item\n * @returns {CartItem[]}\n */\nexport const addToCart = (item) => {\n if (!item || !item.id) return readCart();\n const cart = readCart();\n const index = cart.findIndex((c) => c.id === item.id);\n if (index >= 0) {\n const next = [...cart];\n next[index] = {\n ...next[index],\n quantity: Math.max(1, Number(next[index].quantity || 0) + Number(item.quantity || 1))\n };\n writeCart(next);\n return next;\n }\n const next = [...cart, { ...item, quantity: Math.max(1, Number(item.quantity || 1)) }];\n writeCart(next);\n return next;\n}\n\n/**\n * 更新数量\n * @param {string} productId\n * @param {number} quantity\n * @returns {CartItem[]}\n */\nexport const updateQuantity = (productId, quantity) => {\n const cart = readCart();\n const next = cart\n .map((c) => (c.id === productId ? { ...c, quantity: Math.max(1, Number(quantity) || 1) } : c));\n writeCart(next);\n return next;\n}\n\n/**\n * 移除商品\n * @param {string} productId\n * @returns {CartItem[]}\n */\nexport const removeFromCart = (productId) => {\n const cart = readCart();\n const next = cart.filter((c) => c.id !== productId);\n writeCart(next);\n return next;\n}\n\n/**\n * 清空购物车\n * @returns {CartItem[]}\n */\nexport const clearCart = () => {\n writeCart([]);\n return [];\n}\n\n/**\n * 计算总价\n * @returns {{ totalQuantity: number, totalPrice: number }}\n */\nexport const computeSummary = () => {\n const cart = readCart();\n const totalQuantity = cart.reduce((sum, cur) => sum + Number(cur.quantity || 0), 0);\n const totalPrice = cart.reduce((sum, cur) => sum + Number(cur.quantity || 0) * Number(cur.price || 0), 0);\n return { totalQuantity, totalPrice };\n}\n\nexport default {\n readCart,\n addToCart,\n updateQuantity,\n removeFromCart,\n clearCart,\n computeSummary\n}\n\n","/**\n * @file 导航配置文件\n * @description 定义所有可用的导航链接和菜单结构\n */\n\n// 主导航配置\nexport const mainNavigation = [\n {\n path: '/productList',\n name: '商城',\n icon: '🛍️',\n description: '浏览所有商品'\n },\n {\n path: '/cart',\n name: '购物车',\n icon: '🛒',\n description: '管理购物车商品'\n },\n // {\n // path: '/checkout',\n // name: '结算',\n // icon: '💳',\n // description: '完成订单结算'\n // },\n {\n path: '/account',\n name: '个人中心',\n icon: '👤',\n description: '管理个人资料和店铺'\n }\n]\n\n// 面包屑导航配置\nexport const breadcrumbConfig = {\n '/productList': ['首页', '商品列表'],\n '/product': ['首页', '商品列表', '商品详情'],\n '/cart': ['首页', '购物车'],\n '/checkout': ['首页', '购物车', '订单结算'],\n '/account': ['首页', '个人中心'],\n '/account/wallet': ['首页', '个人中心', '我的钱包'],\n '/account/shop-new': ['首页', '个人中心', '新增店铺'],\n '/account/shop-config': ['首页', '个人中心', '店铺配置'],\n '/account/shops': ['首页', '个人中心', '我的店铺'],\n '/account/product-new': ['首页', '个人中心', '新增商品'],\n '/account/products': ['首页', '个人中心', '商品列表']\n}\n\n// 获取面包屑导航\nexport const getBreadcrumb = (path) => {\n // 处理动态路由\n if (path.startsWith('/product/')) {\n return breadcrumbConfig['/product']\n }\n \n return breadcrumbConfig[path] || ['首页']\n}\n\n// 检查路由权限\nexport const checkRoutePermission = (route, userPermissions = []) => {\n if (!route.meta || !route.meta.allAuthority) {\n return true\n }\n \n const requiredPermissions = route.meta.allAuthority\n \n // 如果权限要求是 'all',则所有人都可以访问\n if (requiredPermissions.includes('all')) {\n return true\n }\n \n // 检查用户是否有所需权限\n return requiredPermissions.some(permission => \n userPermissions.includes(permission)\n )\n}\n\n// 获取页面标题\nexport const getPageTitle = (route) => {\n if (route.meta && route.meta.title) {\n return `${route.meta.title} - Power Leasing`\n }\n return 'Power Leasing - 电商系统'\n}\n\n// 获取页面描述\nexport const getPageDescription = (route) => {\n if (route.meta && route.meta.description) {\n return route.meta.description\n }\n return 'Power Leasing 电商系统 - 专业的电力设备租赁平台'\n}\n\nexport default {\n mainNavigation,\n breadcrumbConfig,\n getBreadcrumb,\n checkRoutePermission,\n getPageTitle,\n getPageDescription\n} ","\n\n\n\n\n\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"panel\"},[_c('h2',{staticClass:\"panel-title page-title\"},[_vm._v(\"钱包绑定\")]),_c('div',{directives:[{name:\"loading\",rawName:\"v-loading\",value:(_vm.loading),expression:\"loading\"}],staticClass:\"panel-body\"},[_c('el-form',{staticClass:\"config-form\",attrs:{\"model\":_vm.form,\"label-width\":\"120px\"}},[_c('el-form-item',{attrs:{\"label\":\"选择链/币种\"}},[_c('el-cascader',{staticStyle:{\"width\":\"420px\"},attrs:{\"options\":_vm.options,\"props\":_vm.cascaderProps,\"show-all-levels\":false,\"clearable\":\"\",\"filterable\":\"\"},on:{\"change\":_vm.handleChange,\"expand-change\":_vm.handleExpandChange},scopedSlots:_vm._u([{key:\"default\",fn:function({ node, data }){return [_c('span',{staticClass:\"custom-node\",attrs:{\"aria-label\":\"cascader-item\",\"tabindex\":\"0\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.handleItemClick(node, data)}}},[_c('span',{staticClass:\"node-label\"},[_vm._v(_vm._s(data.label))]),(node.isLeaf && node.checked)?_c('span',{staticClass:\"leaf-checked\",attrs:{\"aria-hidden\":\"true\"}},[_vm._v(\"✓\")]):_vm._e()])]}}]),model:{value:(_vm.value),callback:function ($$v) {_vm.value=$$v},expression:\"value\"}})],1),_c('el-form-item',{attrs:{\"label\":\"已选择币种\"}},[_c('div',{staticClass:\"selected-coins\",attrs:{\"aria-label\":\"selected-coins\",\"tabindex\":\"0\"}},[_vm._l((_vm.selectedCoins),function(coin){return _c('el-tag',{key:coin,attrs:{\"type\":\"warning\",\"effect\":\"light\",\"closable\":\"\",\"disable-transitions\":\"\"},on:{\"close\":function($event){return _vm.handleRemoveSelectedCoin(coin)}}},[_vm._v(\" \"+_vm._s(coin)+\" \")])}),(_vm.selectedCoins.length === 0)?_c('span',{staticClass:\"placeholder\"},[_vm._v(\"未选择\")]):_vm._e()],2)]),_c('el-form-item',{attrs:{\"label\":\"收款钱包地址\"}},[_c('el-input',{attrs:{\"placeholder\":\"请输入\"},model:{value:(_vm.form.payAddress),callback:function ($$v) {_vm.$set(_vm.form, \"payAddress\", $$v)},expression:\"form.payAddress\"}})],1),_c('el-form-item',[_c('el-button',{staticStyle:{\"width\":\"200px\"},attrs:{\"type\":\"primary\"},on:{\"click\":_vm.handleSave}},[_vm._v(\"确认绑定\")])],1)],1)],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import request from '../utils/request'\r\n\r\n//钱包余额\r\nexport function getWalletInfo(data) {\r\n return request({\r\n url: `/lease/user/getWalletInfo`,\r\n method: 'post',\r\n data\r\n })\r\n}\r\n\r\n//余额提现\r\nexport function withdrawBalance(data) {\r\n return request({\r\n url: `/lease/user/withdrawBalance`,\r\n method: 'post',\r\n data\r\n })\r\n}\r\n\r\n\r\n\r\n//余额充值记录\r\nexport function balanceRechargeList(data) {\r\n return request({\r\n url: `/lease/user/balanceRechargeList`,\r\n method: 'post',\r\n data\r\n })\r\n}\r\n\r\n\r\n//提现记录\r\nexport function balanceWithdrawList(data) {\r\n return request({\r\n url: `/lease/user/balanceWithdrawList`,\r\n method: 'post',\r\n data\r\n })\r\n}\r\n\r\n\r\n// 卖家收款记录\r\nexport function sellerReceiptList(data) {\r\n return request({\r\n url: `/lease/user/balancePayList`,\r\n method: 'post',\r\n data\r\n })\r\n}\r\n\r\n\r\n//钱包绑定\r\nexport function addWalletShopConfig(data) {\r\n return request({\r\n url: `/lease/shop/addShopConfig`,\r\n method: 'post',\r\n data\r\n })\r\n}\r\n\r\n//获取支持的链和币种\r\nexport function getChainAndList(data) {\r\n return request({\r\n url: `/lease/shop/getChainAndList`,\r\n method: 'post',\r\n data\r\n })\r\n}\r\n\r\n\r\n//获取钱包绑定列表\r\nexport function getShopConfig(data) {\r\n return request({\r\n url: `/lease/shop/getShopConfig`,\r\n method: 'post',\r\n data\r\n })\r\n}\r\n\r\n\r\n//创建钱包\r\nexport function bindWallet(data) {\r\n return request({\r\n url: `/lease/user/bindWallet`,\r\n method: 'post',\r\n data\r\n })\r\n}\r\n\r\n//资金流水\r\nexport function transactionRecord(data) {\r\n return request({\r\n url: `/lease/user/transactionRecord`,\r\n method: 'post',\r\n data\r\n })\r\n}\r\n\r\n//钱包的最近交易\r\nexport function getRecentlyTransaction(data) {\r\n return request({\r\n url: `/lease/user/getRecentlyTransaction`,\r\n method: 'post',\r\n data\r\n })\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n","\n\n\n\n\n\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./fundsFlow.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./fundsFlow.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./fundsFlow.vue?vue&type=template&id=fa8ab438&scoped=true\"\nimport script from \"./fundsFlow.vue?vue&type=script&lang=js\"\nexport * from \"./fundsFlow.vue?vue&type=script&lang=js\"\nimport style0 from \"./fundsFlow.vue?vue&type=style&index=0&id=fa8ab438&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"fa8ab438\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"header-container\"},[_c('nav',{staticClass:\"navbar\"},_vm._l((_vm.navigation),function(nav){return _c('router-link',{key:nav.path,staticClass:\"nav-btn\",attrs:{\"to\":nav.path,\"active-class\":\"active\",\"title\":nav.description}},[_c('span',{staticClass:\"nav-icon\"},[_vm._v(_vm._s(nav.icon))]),_c('span',{staticClass:\"nav-text\"},[_vm._v(_vm._s(nav.name))]),(nav.path === '/cart')?_c('span',{staticClass:\"cart-count\"},[_vm._v(\"(\"+_vm._s(_vm.cartItemCount)+\")\")]):_vm._e()])}),1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\r\n * 解密函数(与发送端保持一致)\r\n * @param {string} encryptedText - 加密的文本\r\n * @param {string} secretKey - 密钥\r\n * @returns {string} 解密后的字符串\r\n */\r\nfunction decryptData(encryptedText, secretKey) {\r\n try {\r\n // Base64解码\r\n const encrypted = atob(encryptedText);\r\n let decrypted = '';\r\n for (let i = 0; i < encrypted.length; i++) {\r\n decrypted += String.fromCharCode(encrypted.charCodeAt(i) ^ secretKey.charCodeAt(i % secretKey.length));\r\n }\r\n return decrypted;\r\n } catch (error) {\r\n console.error('解密失败:', error);\r\n return null;\r\n }\r\n }\r\n \r\n /**\r\n * 获取并解密URL参数\r\n */\r\n function getDecryptedParams() {\r\n const urlParams = new URLSearchParams(window.location.search);\r\n const encryptedData = urlParams.get('data');\r\n const language = urlParams.get('language');\r\n const username = urlParams.get('username');\r\n const source = urlParams.get('source');\r\n const version = urlParams.get('version');\r\n \r\n // 解密敏感数据\r\n const secretKey = 'mining-pool-secret-key-2024'; // 必须与发送端保持一致\r\n let sensitiveData = null;\r\n \r\n if (encryptedData) {\r\n try {\r\n const decryptedJson = decryptData(encryptedData, secretKey);\r\n sensitiveData = JSON.parse(decryptedJson);\r\n } catch (error) {\r\n console.error('解密或解析数据失败:', error);\r\n }\r\n }\r\n \r\n return {\r\n // 敏感数据(已解密)\r\n token: sensitiveData?.token || '',\r\n leasEmail: sensitiveData?.leasEmail || '',\r\n userId: sensitiveData?.userId || '',\r\n timestamp: sensitiveData?.timestamp || null,\r\n \r\n // 非敏感数据(明文)\r\n language: language || 'zh',\r\n username: username || '',\r\n source: source || '',\r\n version: version || '1.0'\r\n };\r\n }\r\n \r\n /**\r\n * 执行自动登录\r\n */\r\n function performAutoLogin(token, userId, leasEmail) {\r\n console.log('执行自动登录:', { userId, leasEmail: leasEmail ? '***' : '' });\r\n // 这里可以添加自动登录的逻辑\r\n // 例如:设置全局状态、跳转页面等\r\n }\r\n \r\n /**\r\n * 设置界面语言\r\n */\r\n function setLanguage(language) {\r\n console.log('设置语言:', language);\r\n // 这里可以添加语言设置的逻辑\r\n // 例如:设置 i18n 语言、更新界面等\r\n }\r\n\r\n // 使用示例\r\n document.addEventListener('DOMContentLoaded', function() {\r\n const params = getDecryptedParams();\r\n if (params.token) {\r\n console.log(params.token,\"params.token 存入\");\r\n \r\n localStorage.setItem('token', params.token);\r\n localStorage.setItem('leasEmail', params.leasEmail);\r\n localStorage.setItem('userId', params.userId);\r\n localStorage.setItem('language', params.language);\r\n localStorage.setItem('username', params.username);\r\n localStorage.setItem('source', params.source);\r\n localStorage.setItem('version', params.version);\r\n }\r\n \r\n console.log('接收到的参数:', {\r\n userId: params.userId ? '***' : '',\r\n leasEmail: params.leasEmail ? '***' : '',\r\n token: params.token ? '***' : '',\r\n language: params.language,\r\n username: params.username,\r\n source: params.source\r\n });\r\n \r\n // 根据参数执行相应操作\r\n if (params.token && params.userId) {\r\n // 执行自动登录\r\n performAutoLogin(params.token, params.userId, params.leasEmail);\r\n }\r\n \r\n if (params.language) {\r\n // 设置界面语言\r\n setLanguage(params.language);\r\n }\r\n });","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./rechargeRecord.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./rechargeRecord.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./rechargeRecord.vue?vue&type=template&id=5cf693fa&scoped=true\"\nimport script from \"./rechargeRecord.vue?vue&type=script&lang=js\"\nexport * from \"./rechargeRecord.vue?vue&type=script&lang=js\"\nimport style0 from \"./rechargeRecord.vue?vue&type=style&index=0&id=5cf693fa&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5cf693fa\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"account-purchased\"},[_vm._m(0),_c('el-table',{directives:[{name:\"loading\",rawName:\"v-loading\",value:(_vm.loading),expression:\"loading\"}],staticStyle:{\"width\":\"100%\"},attrs:{\"data\":_vm.tableData,\"border\":\"\",\"stripe\":\"\"}},[_c('el-table-column',{attrs:{\"prop\":\"userId\",\"label\":\"用户\",\"width\":\"180\"}}),_c('el-table-column',{attrs:{\"prop\":\"productMachineId\",\"label\":\"机器ID\",\"width\":\"80\"}}),_c('el-table-column',{attrs:{\"prop\":\"type\",\"label\":\"类型\",\"width\":\"100\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('el-tag',{attrs:{\"type\":scope.row.type === 1 ? 'success' : 'info'}},[_vm._v(\" \"+_vm._s(scope.row.type === 1 ? \"算力套餐\" : \"挖矿机器\")+\" \")])]}}])}),_c('el-table-column',{attrs:{\"prop\":\"estimatedEndIncome\",\"label\":\"预计总收益\",\"min-width\":\"120\"}}),_c('el-table-column',{attrs:{\"prop\":\"estimatedEndUsdtIncome\",\"label\":\"预计USDT总收益\",\"min-width\":\"160\"}}),_c('el-table-column',{attrs:{\"prop\":\"startTime\",\"label\":\"开始时间\",\"min-width\":\"160\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('span',[_vm._v(_vm._s(_vm.formatDateTime(scope.row.startTime)))])]}}])}),_c('el-table-column',{attrs:{\"prop\":\"endTime\",\"label\":\"结束时间\",\"min-width\":\"160\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('span',[_vm._v(_vm._s(_vm.formatDateTime(scope.row.endTime)))])]}}])}),_c('el-table-column',{attrs:{\"prop\":\"status\",\"label\":\"状态\",\"width\":\"100\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('el-tag',{attrs:{\"type\":scope.row.status === 0 ? 'success' : 'info'}},[_vm._v(\" \"+_vm._s(scope.row.status === 0 ? \"运行中\" : \"已过期\")+\" \")])]}}])}),_c('el-table-column',{attrs:{\"label\":\"操作\",\"fixed\":\"right\",\"width\":\"120\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('el-button',{attrs:{\"type\":\"text\",\"size\":\"small\"},on:{\"click\":function($event){return _vm.handleView(scope.row)}}},[_vm._v(\"详情\")])]}}])})],1),_c('div',{staticClass:\"pagination\"},[_c('el-pagination',{attrs:{\"background\":\"\",\"layout\":\"total, sizes, prev, pager, next, jumper\",\"total\":_vm.total,\"current-page\":_vm.pagination.pageNum,\"page-sizes\":[10, 20, 50, 100],\"page-size\":_vm.pagination.pageSize},on:{\"update:currentPage\":function($event){return _vm.$set(_vm.pagination, \"pageNum\", $event)},\"update:current-page\":function($event){return _vm.$set(_vm.pagination, \"pageNum\", $event)},\"update:pageSize\":function($event){return _vm.$set(_vm.pagination, \"pageSize\", $event)},\"update:page-size\":function($event){return _vm.$set(_vm.pagination, \"pageSize\", $event)},\"size-change\":_vm.handleSizeChange,\"current-change\":_vm.handleCurrentChange}})],1)],1)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"toolbar\"},[_c('div',{staticClass:\"left-area\"},[_c('h2',{staticClass:\"page-title\"},[_vm._v(\"已购商品\")])])])\n}]\n\nexport { render, staticRenderFns }","\n\n\n\n ","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"receipt-page\"},[_c('div',{staticClass:\"card\",attrs:{\"aria-label\":\"收款记录\",\"tabindex\":\"0\"}},[_vm._m(0),(_vm.loading)?_c('div',{staticClass:\"loading\"},[_c('i',{staticClass:\"el-icon-loading\",attrs:{\"aria-label\":\"加载中\",\"role\":\"img\"}}),_vm._v(\" 加载中... \")]):_c('div',[_c('el-table',{ref:\"receiptTable\",staticStyle:{\"width\":\"100%\"},attrs:{\"data\":_vm.rows,\"border\":\"\",\"stripe\":\"\",\"size\":\"small\",\"row-key\":_vm.getRowKey,\"expand-row-keys\":_vm.expandedRowKeys,\"row-class-name\":_vm.getRowClassName,\"header-cell-style\":{ textAlign: 'left' },\"cell-style\":{ textAlign: 'left' }},on:{\"row-click\":_vm.handleRowClick,\"expand-change\":_vm.handleExpandChange}},[_c('el-table-column',{attrs:{\"type\":\"expand\",\"width\":\"46\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('div',{staticClass:\"detail-panel\"},[_c('div',{staticClass:\"detail-grid\"},[_c('div',{staticClass:\"detail-item\"},[_c('span',{staticClass:\"detail-label\"},[_vm._v(\"订单号\")]),_c('span',{staticClass:\"detail-value mono\"},[_vm._v(_vm._s(scope.row.orderId || '-'))])]),_c('div',{staticClass:\"detail-item\"},[_c('span',{staticClass:\"detail-label\"},[_vm._v(\"付款链\")]),_c('span',{staticClass:\"detail-value\"},[_c('span',{staticClass:\"badge\"},[_vm._v(_vm._s(_vm.formatChain(scope.row.fromChain) || '-'))])])]),_c('div',{staticClass:\"detail-item\"},[_c('span',{staticClass:\"detail-label\"},[_vm._v(\"付款币种\")]),_c('span',{staticClass:\"detail-value\"},[_c('span',{staticClass:\"badge badge-blue\"},[_vm._v(_vm._s(String((scope.row.fromSymbol || scope.row.coin) || '') .toUpperCase()))])])]),_c('div',{staticClass:\"detail-item detail-item-full\"},[_c('span',{staticClass:\"detail-label\"},[_vm._v(\"付款地址\")]),_c('span',{staticClass:\"detail-value address\"},[_c('span',{staticClass:\"mono-ellipsis\",attrs:{\"title\":scope.row.fromAddress}},[_vm._v(_vm._s(scope.row.fromAddress || '-'))]),(scope.row.fromAddress)?_c('el-button',{attrs:{\"type\":\"text\",\"size\":\"mini\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.copy(scope.row.fromAddress)}}},[_vm._v(\"复制\")]):_vm._e()],1)])])])]}}])}),_c('el-table-column',{attrs:{\"label\":\"支付时间\",\"min-width\":\"160\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_vm._v(_vm._s(_vm.formatFullTime(scope.row.createTime)))]}}])}),_c('el-table-column',{attrs:{\"label\":\"收款金额(USDT)\",\"min-width\":\"160\",\"align\":\"right\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('span',{staticClass:\"amount-green\"},[_vm._v(\"+\"+_vm._s(_vm.formatTrunc(scope.row.realAmount, 2)))])]}}])}),_c('el-table-column',{attrs:{\"label\":\"收款链\",\"min-width\":\"120\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_vm._v(_vm._s(_vm.formatChain(scope.row.toChain)))]}}])}),_c('el-table-column',{attrs:{\"label\":\"收款币种\",\"min-width\":\"100\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_vm._v(_vm._s(String(scope.row.coin || '').toUpperCase()))]}}])}),_c('el-table-column',{attrs:{\"label\":\"收款地址\",\"min-width\":\"260\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('span',{staticClass:\"mono-ellipsis\",attrs:{\"title\":scope.row.toAddress}},[_vm._v(_vm._s(scope.row.toAddress))]),_c('el-button',{attrs:{\"type\":\"text\",\"size\":\"mini\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.copy(scope.row.toAddress)}}},[_vm._v(\"复制\")])]}}])}),_c('el-table-column',{attrs:{\"label\":\"交易HASH\",\"min-width\":\"260\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('span',{staticClass:\"mono-ellipsis\",attrs:{\"title\":scope.row.txHash}},[_vm._v(_vm._s(scope.row.txHash))]),(scope.row.txHash)?_c('el-button',{attrs:{\"type\":\"text\",\"size\":\"mini\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.copy(scope.row.txHash)}}},[_vm._v(\"复制\")]):_vm._e()]}}])}),_c('el-table-column',{attrs:{\"label\":\"支付状态\",\"min-width\":\"120\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('el-tag',{attrs:{\"type\":_vm.getStatusType(scope.row.status),\"size\":\"small\"}},[_vm._v(_vm._s(_vm.getStatusText(scope.row.status)))])]}}])}),_c('el-table-column',{attrs:{\"label\":\"状态更新时间\",\"min-width\":\"160\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_vm._v(_vm._s(_vm.formatFullTime(scope.row.updateTime)))]}}])})],1),(!_vm.rows.length)?_c('div',{staticClass:\"empty\"},[_c('div',{staticClass:\"empty-icon\"},[_vm._v(\"💳\")]),_c('div',{staticClass:\"empty-text\"},[_vm._v(\"暂无收款记录\")])]):_vm._e(),_c('div',{staticClass:\"pagination\"},[_c('el-pagination',{attrs:{\"background\":\"\",\"layout\":\"prev, pager, next, jumper\",\"current-page\":_vm.page,\"page-size\":_vm.pageSize,\"total\":_vm.total},on:{\"update:currentPage\":function($event){_vm.page=$event},\"update:current-page\":function($event){_vm.page=$event},\"current-change\":_vm.fetchList}})],1)],1)])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"card-header\"},[_c('h3',{staticClass:\"card-title\"},[_vm._v(\"收款记录\")])])\n}]\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"account-product-detail\"},[_c('div',{staticClass:\"header\"},[_c('el-button',{attrs:{\"type\":\"text\"},on:{\"click\":_vm.handleBack}},[_vm._v(\"返回\")]),_c('h2',{staticClass:\"title\"},[_vm._v(\"商品详情\")])],1),_c('el-card',{staticClass:\"detail-card\",attrs:{\"shadow\":\"never\"}},[_c('el-form',{staticClass:\"detail-form\",attrs:{\"model\":_vm.product,\"label-width\":\"90px\",\"size\":\"small\"}},[_c('el-row',{attrs:{\"gutter\":16}},[_c('el-col',{attrs:{\"span\":12}},[_c('el-form-item',{attrs:{\"label\":\"商品ID\"}},[_c('el-input',{attrs:{\"value\":_vm.product && _vm.product.id,\"disabled\":\"\"}})],1)],1),_c('el-col',{attrs:{\"span\":12}},[_c('el-form-item',{attrs:{\"label\":\"店铺ID\"}},[_c('el-input',{attrs:{\"value\":_vm.product && _vm.product.shopId,\"disabled\":\"\"}})],1)],1),_c('el-col',{attrs:{\"span\":12}},[_c('el-form-item',{attrs:{\"label\":\"名称\"}},[_c('el-input',{attrs:{\"value\":_vm.product && _vm.product.name,\"disabled\":\"\"}})],1)],1),_c('el-col',{attrs:{\"span\":12}},[_c('el-form-item',{attrs:{\"label\":\"币种\"}},[_c('el-input',{attrs:{\"value\":_vm.product && _vm.product.coin,\"disabled\":\"\"}})],1)],1),_c('el-col',{attrs:{\"span\":12}},[_c('el-form-item',{attrs:{\"label\":\"算法\"}},[_c('el-input',{attrs:{\"value\":_vm.product && _vm.product.algorithm,\"disabled\":\"\"}})],1)],1),_c('el-col',{attrs:{\"span\":12}},[_c('el-form-item',{attrs:{\"label\":\"价格范围\"}},[_c('el-input',{attrs:{\"value\":_vm.product && _vm.product.priceRange,\"disabled\":\"\"}})],1)],1),_c('el-col',{attrs:{\"span\":12}},[_c('el-form-item',{attrs:{\"label\":\"类型\"}},[_c('el-input',{attrs:{\"value\":_vm.product && (_vm.product.type === 1 ? '算力套餐' : '挖矿机器'),\"disabled\":\"\"}})],1)],1),_c('el-col',{attrs:{\"span\":12}},[_c('el-form-item',{attrs:{\"label\":\"状态\"}},[_c('el-input',{attrs:{\"value\":_vm.product && (_vm.product.state === 1 ? '下架' : '上架'),\"disabled\":\"\"}})],1)],1),_c('el-col',{attrs:{\"span\":24}},[_c('el-form-item',{attrs:{\"label\":\"描述\"}},[_c('el-input',{attrs:{\"type\":\"textarea\",\"rows\":3,\"value\":_vm.product && _vm.product.description,\"disabled\":\"\"}})],1)],1)],1)],1)],1),_c('el-card',{directives:[{name:\"loading\",rawName:\"v-loading\",value:(_vm.updateLoading),expression:\"updateLoading\"}],staticClass:\"detail-card\",attrs:{\"shadow\":\"never\"}},[_c('div',{staticClass:\"section-title\",attrs:{\"slot\":\"header\"},slot:\"header\"},[_vm._v(\"机器组合\")]),(_vm.machineList && _vm.machineList.length)?_c('div',[_c('el-table',{staticStyle:{\"width\":\"100%\"},attrs:{\"data\":_vm.machineList,\"border\":\"\",\"stripe\":\"\"}},[_c('el-table-column',{attrs:{\"prop\":\"user\",\"label\":\"挖矿账户\",\"min-width\":\"80\"}}),_c('el-table-column',{attrs:{\"prop\":\"id\",\"label\":\"矿机ID\",\"min-width\":\"60\"}}),_c('el-table-column',{attrs:{\"prop\":\"miner\",\"label\":\"机器编号\",\"min-width\":\"100\"}}),_c('el-table-column',{attrs:{\"label\":\"实际算力\",\"width\":\"100\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_vm._v(_vm._s(scope.row.computingPower)+\" \"+_vm._s(scope.row.unit || ''))]}}],null,false,881627289)},[_c('template',{slot:\"header\"},[_c('el-tooltip',{attrs:{\"content\":\"实际算力为该机器在本矿池过去24H的平均算力\",\"effect\":\"dark\",\"placement\":\"top\"}},[_c('i',{staticClass:\"el-icon-question label-help\",attrs:{\"aria-label\":\"帮助\",\"tabindex\":\"0\"}})]),_c('span',[_vm._v(\"实际算力\")])],1)],2),_c('el-table-column',{attrs:{\"label\":\"理论算力\",\"min-width\":\"140\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('el-input',{class:{ 'changed-input': _vm.isCellChanged(scope.row, 'theoryPower') },staticStyle:{\"max-width\":\"260px\"},attrs:{\"size\":\"small\",\"inputmode\":\"decimal\",\"disabled\":_vm.isRowDisabled(scope.row)},on:{\"input\":function($event){return _vm.handleTheoryPowerInput(scope.$index)},\"blur\":function($event){return _vm.handleTheoryPowerBlur(scope.$index)}},model:{value:(scope.row.theoryPower),callback:function ($$v) {_vm.$set(scope.row, \"theoryPower\", $$v)},expression:\"scope.row.theoryPower\"}},[_c('template',{slot:\"append\"},[_vm._v(_vm._s(scope.row.unit || ''))])],2)]}}],null,false,2336321065)}),_c('el-table-column',{attrs:{\"label\":\"功耗(kw/h)\",\"min-width\":\"140\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('el-input',{class:{ 'changed-input': _vm.isCellChanged(scope.row, 'powerDissipation') },staticStyle:{\"max-width\":\"260px\"},attrs:{\"size\":\"small\",\"inputmode\":\"decimal\",\"disabled\":_vm.isRowDisabled(scope.row)},on:{\"input\":function($event){return _vm.handleNumericCell(scope.$index, 'powerDissipation')},\"blur\":function($event){return _vm.handlePowerDissipationBlur(scope.$index)}},model:{value:(scope.row.powerDissipation),callback:function ($$v) {_vm.$set(scope.row, \"powerDissipation\", $$v)},expression:\"scope.row.powerDissipation\"}},[_c('template',{slot:\"append\"},[_vm._v(\"kw/h\")])],2)]}}],null,false,2811749390)}),_c('el-table-column',{attrs:{\"label\":\"型号\",\"min-width\":\"140\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('el-input',{class:{ 'changed-input': _vm.isCellChanged(scope.row, 'type') },staticStyle:{\"max-width\":\"180px\"},attrs:{\"size\":\"small\",\"placeholder\":\"矿机型号\",\"maxlength\":20,\"disabled\":_vm.isRowDisabled(scope.row)},on:{\"input\":function($event){return _vm.handleTypeCell(scope.$index)}},model:{value:(scope.row.type),callback:function ($$v) {_vm.$set(scope.row, \"type\", $$v)},expression:\"scope.row.type\"}})]}}],null,false,3045221146)}),_c('el-table-column',{attrs:{\"label\":\"售价(USDT)\",\"min-width\":\"140\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('el-input',{class:{ 'changed-input': _vm.isCellChanged(scope.row, 'price') },staticStyle:{\"max-width\":\"260px\"},attrs:{\"size\":\"small\",\"inputmode\":\"decimal\",\"disabled\":_vm.isRowDisabled(scope.row)},on:{\"input\":function($event){return _vm.handleNumericCell(scope.$index, 'price')},\"blur\":function($event){return _vm.handlePriceBlur(scope.$index)}},model:{value:(scope.row.price),callback:function ($$v) {_vm.$set(scope.row, \"price\", $$v)},expression:\"scope.row.price\"}},[_c('template',{slot:\"append\"},[_vm._v(\"USDT\")])],2)]}}],null,false,2516879139)},[_c('template',{slot:\"header\"},[_c('el-tooltip',{attrs:{\"effect\":\"dark\",\"placement\":\"top\"}},[_c('div',{attrs:{\"slot\":\"content\"},slot:\"content\"},[_vm._v(\" 卖家最终收款金额 = 机器售价 × 波动率\"),_c('br'),_vm._v(\" 波动率规则:\"),_c('br'),_vm._v(\" 1)0% - 5%(包含5%):波动率 = 1(按售价结算)\"),_c('br'),_vm._v(\" 2)5%以上:波动率 = 实际算力 / 理论算力,且不会超过 1,即最终结算时不会超过机器售价 \")]),_c('i',{staticClass:\"el-icon-question label-help\",attrs:{\"aria-label\":\"帮助\",\"tabindex\":\"0\"}})]),_c('span',[_vm._v(\"售价(USDT)\")])],1)],2),_c('el-table-column',{attrs:{\"label\":\"最大租赁天数(天)\",\"min-width\":\"140\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('el-input',{class:{ 'changed-input': _vm.isCellChanged(scope.row, 'maxLeaseDays') },staticStyle:{\"max-width\":\"260px\"},attrs:{\"size\":\"small\",\"inputmode\":\"numeric\",\"disabled\":_vm.isRowDisabled(scope.row)},on:{\"input\":function($event){return _vm.handleMaxLeaseDaysInput(scope.$index)},\"blur\":function($event){return _vm.handleMaxLeaseDaysBlur(scope.$index)}},model:{value:(scope.row.maxLeaseDays),callback:function ($$v) {_vm.$set(scope.row, \"maxLeaseDays\", $$v)},expression:\"scope.row.maxLeaseDays\"}},[_c('template',{slot:\"append\"},[_vm._v(\"天\")])],2)]}}],null,false,3414109227)}),_c('el-table-column',{attrs:{\"label\":\"上下架\",\"min-width\":\"140\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('el-switch',{attrs:{\"active-value\":0,\"inactive-value\":1,\"active-text\":\"上架\",\"inactive-text\":\"下架\",\"disabled\":_vm.isRowDisabled(scope.row)},on:{\"change\":function($event){return _vm.handleStateChange(scope.$index)}},model:{value:(scope.row.state),callback:function ($$v) {_vm.$set(scope.row, \"state\", $$v)},expression:\"scope.row.state\"}})]}}],null,false,1620801377)}),_c('el-table-column',{attrs:{\"label\":\"售出状态\",\"min-width\":\"100\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('el-tag',{attrs:{\"type\":scope.row.saleState === 0 ? 'info' : (scope.row.saleState === 1 ? 'danger' : 'warning')}},[_vm._v(\" \"+_vm._s(scope.row.saleState === 0 ? '未售出' : (scope.row.saleState === 1 ? '已售出' : '售出中'))+\" \")])]}}],null,false,1904393654)}),_c('el-table-column',{attrs:{\"label\":\"操作\",\"fixed\":\"right\",\"min-width\":\"120\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('el-button',{staticStyle:{\"color\":\"#f56c6c\"},attrs:{\"type\":\"text\",\"size\":\"small\",\"disabled\":_vm.isRowDisabled(scope.row)},on:{\"click\":function($event){return _vm.handleDeleteMachine(scope.row)}}},[_vm._v(\"删除\")])]}}],null,false,979761678)})],1)],1):_c('div',{staticClass:\"empty-text\"},[_vm._v(\"暂无组合数据\")])]),(_vm.machineList && _vm.machineList.length)?_c('div',{staticClass:\"actions\"},[_c('el-button',{attrs:{\"type\":\"primary\"},on:{\"click\":_vm.handleOpenConfirm}},[_vm._v(\"提交修改机器\")])],1):_vm._e(),_c('el-dialog',{attrs:{\"title\":\"确认提交修改\",\"visible\":_vm.confirmVisible,\"width\":\"520px\"},on:{\"update:visible\":function($event){_vm.confirmVisible=$event}}},[_c('div',[_c('p',[_vm._v(\"请仔细确认已选择机器机器组合里的机器价格及相关参数定义。\")]),_c('p',[_vm._v(\"机器修改上架后,一经售出,在机器出售期间不能修改价格及机器参数。\")])]),_c('span',{staticClass:\"dialog-footer\",attrs:{\"slot\":\"footer\"},slot:\"footer\"},[_c('el-button',{on:{\"click\":function($event){_vm.confirmVisible = false}}},[_vm._v(\"取消\")]),_c('el-button',{attrs:{\"type\":\"primary\"},on:{\"click\":_vm.handleSubmitMachines}},[_vm._v(\"确认提交修改\")])],1)])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\r\n * 错误提示管理器\r\n * 用于控制错误提示的频率,避免短时间内重复显示相同类型的错误\r\n */\r\nclass ErrorNotificationManager {\r\n constructor() {\r\n // 记录最近显示的错误信息\r\n this.recentErrors = new Map();\r\n // 默认节流时间 (30秒)\r\n this.throttleTime = 3000;\r\n // 错误类型映射\r\n this.errorTypes = {\r\n 'Network Error': 'network',\r\n 'timeout': 'timeout',\r\n 'Request failed with status code': 'statusCode',\r\n // 添加网络状态类型\r\n 'networkReconnected': 'networkStatus',\r\n 'NetworkError': 'network'\r\n };\r\n }\r\n\r\n /**\r\n * 获取错误类型\r\n * @param {String} message 错误信息\r\n * @returns {String} 错误类型\r\n */\r\n getErrorType(message) {\r\n for (const [key, type] of Object.entries(this.errorTypes)) {\r\n if (message.includes(key)) {\r\n return type;\r\n }\r\n }\r\n return 'unknown';\r\n }\r\n\r\n /**\r\n * 检查是否可以显示错误\r\n * @param {String} message 错误信息\r\n * @returns {Boolean} 是否可以显示\r\n */\r\n canShowError(message) {\r\n const errorType = this.getErrorType(message);\r\n const now = Date.now();\r\n \r\n // 检查同类型的错误是否最近已经显示过\r\n if (this.recentErrors.has(errorType)) {\r\n const lastTime = this.recentErrors.get(errorType);\r\n if (now - lastTime < this.throttleTime) {\r\n console.log(`[错误提示] 已抑制重复错误: ${errorType}`);\r\n return false;\r\n }\r\n }\r\n \r\n // 更新最后显示时间\r\n this.recentErrors.set(errorType, now);\r\n return true;\r\n }\r\n\r\n /**\r\n * 清理过期的错误记录\r\n */\r\n cleanup() {\r\n const now = Date.now();\r\n this.recentErrors.forEach((time, type) => {\r\n if (now - time > this.throttleTime) {\r\n this.recentErrors.delete(type);\r\n }\r\n });\r\n }\r\n}\r\n\r\n// 创建单例实例\r\nconst errorNotificationManager = new ErrorNotificationManager();\r\nexport default errorNotificationManager;","\r\n\r\n\r\n\r\n","\n\n\n\n ","/**\r\n * @file 商品数据服务(轻量静态数据源)\r\n * @description 提供商品列表与详情查询。无需后端即可演示。\r\n */\r\n\r\n/**\r\n * @typedef {Object} Product\r\n * @property {string} id - 商品唯一标识\r\n * @property {string} title - 商品标题\r\n * @property {string} description - 商品描述\r\n * @property {number} price - 商品单价(元)\r\n * @property {string} image - 商品图片URL(此处使用占位图)\r\n */\r\n\r\n/**\r\n * 内置演示商品数据\r\n * 使用简短且清晰的字段,满足演示所需\r\n * @type {Product[]}\r\n */\r\nconst products = [\r\n {\r\n id: 'p1001',\r\n title: '新能源充电桩(家用)',\r\n description: '7kW 单相,智能预约,支持远程监控。',\r\n price: 1299,\r\n image: 'https://via.placeholder.com/300x200?text=%E5%85%85%E7%94%B5%E6%A1%A9'\r\n },\r\n {\r\n id: 'p1002',\r\n title: '工业电能表',\r\n description: '三相四线,远程抄表,Modbus 通信。',\r\n price: 899,\r\n image: 'https://via.placeholder.com/300x200?text=%E7%94%B5%E8%83%BD%E8%A1%A8'\r\n },\r\n {\r\n id: 'p1003',\r\n title: '配电柜(入门版)',\r\n description: 'IP54 防护,内置断路器与防雷模块。',\r\n price: 5599,\r\n image: 'https://via.placeholder.com/300x200?text=%E9%85%8D%E7%94%B5%E6%9F%9C'\r\n },\r\n {\r\n id: 'p1004',\r\n title: '工矿照明灯',\r\n description: '120W 高亮,耐腐蚀,适配多场景。',\r\n price: 329,\r\n image: 'https://via.placeholder.com/300x200?text=%E7%85%A7%E6%98%8E%E7%81%AF'\r\n }\r\n]\r\n\r\n/**\r\n * 获取全部商品\r\n * @returns {Promise}\r\n */\r\nexport const listProducts = async () => {\r\n return Promise.resolve(products);\r\n}\r\n\r\n/**\r\n * 根据ID获取商品\r\n * @param {string} productId - 商品ID\r\n * @returns {Promise}\r\n */\r\nexport const getProductById = async (productId) => {\r\n const product = products.find((p) => p.id === productId);\r\n return Promise.resolve(product);\r\n}\r\n\r\nexport default {\r\n listProducts,\r\n getProductById\r\n}\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./myShops.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./myShops.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./myShops.vue?vue&type=template&id=031e6e83&scoped=true\"\nimport script from \"./myShops.vue?vue&type=script&lang=js\"\nexport * from \"./myShops.vue?vue&type=script&lang=js\"\nimport style0 from \"./myShops.vue?vue&type=style&index=0&id=031e6e83&prod&scoped=true&lang=css\"\nimport style1 from \"./myShops.vue?vue&type=style&index=1&id=031e6e83&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"031e6e83\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./productDetail.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./productDetail.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./productDetail.vue?vue&type=template&id=dd9b9f4e&scoped=true\"\nimport script from \"./productDetail.vue?vue&type=script&lang=js\"\nexport * from \"./productDetail.vue?vue&type=script&lang=js\"\nimport style0 from \"./productDetail.vue?vue&type=style&index=0&id=dd9b9f4e&prod&scoped=true&lang=css\"\nimport style1 from \"./productDetail.vue?vue&type=style&index=1&id=dd9b9f4e&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"dd9b9f4e\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./OrderList.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./OrderList.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./OrderList.vue?vue&type=template&id=1572342c&scoped=true\"\nimport script from \"./OrderList.vue?vue&type=script&lang=js\"\nexport * from \"./OrderList.vue?vue&type=script&lang=js\"\nimport style0 from \"./OrderList.vue?vue&type=style&index=0&id=1572342c&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1572342c\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{directives:[{name:\"loading\",rawName:\"v-loading\",value:(_vm.payLoading),expression:\"payLoading\"}]},[(!_vm.safeItems.length)?_c('div',{staticClass:\"empty\"},[_vm._v(_vm._s(_vm.emptyText))]):_c('el-table',{attrs:{\"data\":_vm.safeItems,\"border\":\"\",\"header-cell-style\":{ textAlign: 'left' },\"cell-style\":{ textAlign: 'left' }}},[_c('el-table-column',{attrs:{\"type\":\"expand\",\"width\":\"46\"},scopedSlots:_vm._u([{key:\"default\",fn:function(outer){return [_c('el-table',{attrs:{\"data\":outer.row.orderItemDtoList || [],\"size\":\"small\",\"border\":\"\",\"header-cell-style\":{ textAlign: 'left' },\"cell-style\":{ textAlign: 'left' },\"row-key\":\"productMachineId\"}},[_c('el-table-column',{attrs:{\"prop\":\"productMachineId\",\"label\":\"机器ID\",\"min-width\":\"120\"}}),_c('el-table-column',{attrs:{\"prop\":\"name\",\"label\":\"名称\",\"min-width\":\"160\"}}),_c('el-table-column',{attrs:{\"prop\":\"payCoin\",\"label\":\"币种\",\"min-width\":\"100\"}}),_c('el-table-column',{attrs:{\"prop\":\"address\",\"label\":\"收款地址\",\"min-width\":\"240\"}}),_c('el-table-column',{attrs:{\"prop\":\"leaseTime\",\"label\":\"租赁天数\",\"min-width\":\"100\"}}),_c('el-table-column',{attrs:{\"prop\":\"price\",\"label\":\"售价(USDT)\",\"min-width\":\"240\"}})],1)]}}])}),_c('el-table-column',{attrs:{\"label\":\"订单号\",\"min-width\":\"220\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('span',{staticClass:\"value mono\"},[_vm._v(_vm._s(scope.row && scope.row.orderNumber || '—'))])]}}])}),_c('el-table-column',{attrs:{\"label\":\"创建时间\",\"min-width\":\"180\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_vm._v(_vm._s(_vm.formatDateTime(scope.row && scope.row.createTime)))]}}])}),_c('el-table-column',{attrs:{\"label\":\"商品数\",\"min-width\":\"100\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_vm._v(_vm._s(Array.isArray(scope.row && scope.row.orderItemDtoList) ? scope.row.orderItemDtoList.length : 0))]}}])}),_c('el-table-column',{attrs:{\"label\":\"总金额(USDT)\",\"min-width\":\"140\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('span',{staticClass:\"value strong\"},[_vm._v(_vm._s((scope.row && scope.row.totalPrice) != null ? scope.row.totalPrice : '—'))])]}}])}),_c('el-table-column',{attrs:{\"min-width\":\"180\"},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_c('el-tooltip',{attrs:{\"placement\":\"top\",\"effect\":\"dark\"}},[_c('div',{attrs:{\"slot\":\"content\"},slot:\"content\"},[_vm._v(\" 实际支付金额/理论支付金额:\"),_c('br'),_vm._v(\" 1. 实际支付金额是按照矿机实际算力计算支付金额\"),_c('br'),_vm._v(\" 2. 理论支付金额是卖家定义出售价格 \")]),_c('span',{staticStyle:{\"display\":\"inline-flex\",\"align-items\":\"center\",\"gap\":\"6px\"}},[_c('i',{staticClass:\"el-icon-question\",staticStyle:{\"color\":\"#909399\"},attrs:{\"aria-label\":\"说明\",\"role\":\"img\"}}),_vm._v(\" 已支付金额(USDT) \")])])]},proxy:true},{key:\"default\",fn:function(scope){return [_c('span',{staticClass:\"value strong\"},[_vm._v(_vm._s((scope.row && scope.row.payAmount) != null ? scope.row.payAmount : '—'))])]}}])}),_c('el-table-column',{attrs:{\"label\":\"待支付金额(USDT)\",\"min-width\":\"140\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('span',{staticClass:\"value strong\"},[_vm._v(_vm._s((scope.row && scope.row.noPayAmount) != null ? scope.row.noPayAmount : '—'))])]}}])}),_c('el-table-column',{attrs:{\"label\":\"操作\",\"min-width\":\"280\",\"fixed\":\"right\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('el-button',{staticStyle:{\"margin-right\":\"8px\"},attrs:{\"size\":\"mini\"},on:{\"click\":function($event){return _vm.handleGoDetail(scope.row)}}},[_vm._v(\"详情\")]),(_vm.shouldShowActions(scope.row))?[_c('el-button',{attrs:{\"type\":\"primary\",\"size\":\"mini\"},on:{\"click\":function($event){return _vm.handleCheckout(scope.row)}}},[_vm._v(\"去结算\")])]:_vm._e()]}}])})],1),_c('el-dialog',{attrs:{\"visible\":_vm.dialogVisible,\"width\":\"520px\",\"title\":\"请扫码支付\"},on:{\"update:visible\":function($event){_vm.dialogVisible=$event}}},[_c('div',{staticStyle:{\"text-align\":\"left\",\"margin-bottom\":\"12px\",\"color\":\"#666\"}},[_c('div',{staticStyle:{\"margin-bottom\":\"6px\"}},[_vm._v(\"总金额(USDT):\"),_c('b',[_vm._v(_vm._s(_vm.paymentDialog.totalPrice))])]),_c('div',{staticStyle:{\"margin-bottom\":\"6px\",\"display\":\"flex\",\"align-items\":\"center\",\"gap\":\"6px\"}},[_c('el-tooltip',{attrs:{\"placement\":\"top\",\"effect\":\"dark\"}},[_c('div',{attrs:{\"slot\":\"content\"},slot:\"content\"},[_vm._v(\" 实际支付金额/理论支付金额:\"),_c('br'),_vm._v(\" 1. 实际支付金额是按照矿机实际算力计算支付金额\"),_c('br'),_vm._v(\" 2. 理论支付金额是卖家定义出售价格 \")]),_c('i',{staticClass:\"el-icon-question\",staticStyle:{\"color\":\"#909399\"},attrs:{\"aria-label\":\"说明\",\"role\":\"img\"}})]),_c('span',[_vm._v(\"已支付金额(USDT):\")]),_c('b',{staticClass:\"value strong\"},[_vm._v(_vm._s(_vm.paymentDialog.payAmount))])],1),_c('div',{staticStyle:{\"margin-bottom\":\"6px\"}},[_vm._v(\"待支付金额(USDT):\"),_c('b',{staticClass:\"value strong\"},[_vm._v(_vm._s(_vm.paymentDialog.noPayAmount))])])]),_c('div',{staticStyle:{\"text-align\":\"center\"}},[(_vm.paymentDialog.img)?_c('img',{staticStyle:{\"width\":\"180px\",\"height\":\"180px\",\"margin-top\":\"18px\"},attrs:{\"src\":_vm.paymentDialog.img,\"alt\":\"支付二维码\"}}):_c('div',{staticStyle:{\"color\":\"#666\"}},[_vm._v(\"未返回支付二维码\")])]),_c('p',{staticStyle:{\"margin-bottom\":\"6px\",\"color\":\"red\",\"text-align\":\"left\"}},[_vm._v(\"注意:如果已经支付对应金额,不要在重复支付,待系统确认后会自动更新订单状态。因个人原因重复支付导致无法退款,平台不承担任何责任。\")]),_c('span',{staticClass:\"dialog-footer\",attrs:{\"slot\":\"footer\"},slot:\"footer\"},[_c('el-button',{on:{\"click\":function($event){_vm.dialogVisible=false}}},[_vm._v(\"关闭\")])],1)])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./orders.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./orders.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./orders.vue?vue&type=template&id=2ad2c7c3&scoped=true\"\nimport script from \"./orders.vue?vue&type=script&lang=js\"\nexport * from \"./orders.vue?vue&type=script&lang=js\"\nimport style0 from \"./orders.vue?vue&type=style&index=0&id=2ad2c7c3&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2ad2c7c3\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{directives:[{name:\"loading\",rawName:\"v-loading\",value:(_vm.productDetailLoading),expression:\"productDetailLoading\"}],staticClass:\"product-detail\"},[(_vm.loading)?_c('div',{staticClass:\"loading\"},[_c('i',{staticClass:\"el-icon-loading\",attrs:{\"aria-label\":\"加载中\",\"role\":\"img\"}}),_vm._v(\" 加载中... \")]):(_vm.product)?_c('div',{staticClass:\"detail-container\"},[_c('h2',{staticStyle:{\"margin\":\"10px\",\"text-align\":\"left\",\"margin-top\":\"28px\"}},[_vm._v(\"商品详情-选择矿机\")]),_c('section',{staticClass:\"pay-methods\",attrs:{\"aria-label\":\"支付方式\"}},[_c('div',{staticClass:\"pay-label\",attrs:{\"tabindex\":\"0\",\"aria-label\":\"支付方式标签\"}},[_vm._v(\"支付方式:\")]),_c('ul',{staticClass:\"pay-list\",attrs:{\"role\":\"list\",\"aria-label\":\"支付方式列表\"}},_vm._l((_vm.paymentMethodList),function(item,index){return _c('li',{key:index,staticClass:\"pay-item\",attrs:{\"aria-label\":`支付方式: ${item.payChain}`}},[_c('el-tooltip',{attrs:{\"content\":_vm.formatPayTooltip(item),\"placement\":\"top\",\"open-delay\":80}},[_c('img',{staticClass:\"pay-icon\",attrs:{\"src\":item.payCoinImage,\"alt\":`${item.payChain} 支付`,\"title\":item.payChain,\"tabindex\":\"0\",\"role\":\"img\"},on:{\"keydown\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;$event.preventDefault();return _vm.handlePayIconKeyDown(item)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"space\",32,$event.key,[\" \",\"Spacebar\"]))return null;$event.preventDefault();return _vm.handlePayIconKeyDown(item)}]}})])],1)}),0)]),_c('section',{staticClass:\"productList\"},[_c('el-table',{ref:\"seriesTable\",staticClass:\"series-table\",staticStyle:{\"width\":\"100%\"},attrs:{\"data\":_vm.productListData,\"row-key\":\"id\",\"expand-row-keys\":_vm.expandedRowKeys,\"row-class-name\":_vm.handleGetSeriesRowClassName,\"header-cell-style\":{ textAlign: 'left' },\"cell-style\":{ textAlign: 'left' }},on:{\"expand-change\":_vm.handleExpandChange,\"row-click\":_vm.handleSeriesRowClick}},[_c('el-table-column',{attrs:{\"type\":\"expand\",\"width\":\"46\"},scopedSlots:_vm._u([{key:\"default\",fn:function(outer){return [_c('el-table',{ref:'innerTable-' + outer.row.id,staticStyle:{\"width\":\"100%\"},attrs:{\"data\":outer.row.productMachines,\"size\":\"small\",\"show-header\":true,\"row-key\":'id',\"reserve-selection\":false,\"header-cell-style\":{ textAlign: 'left' },\"cell-style\":{ textAlign: 'left' },\"row-class-name\":_vm.handleGetInnerRowClass}},[_c('el-table-column',{attrs:{\"width\":\"46\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('el-checkbox',{attrs:{\"disabled\":scope.row.saleState === 1 || scope.row.saleState === 2,\"title\":(scope.row.saleState === 1 || scope.row.saleState === 2) ? '该机器已售出或售出中,无法选择' : ''},on:{\"change\":checked => _vm.handleManualSelect(outer.row, scope.row, checked)},model:{value:(scope.row._selected),callback:function ($$v) {_vm.$set(scope.row, \"_selected\", $$v)},expression:\"scope.row._selected\"}})]}}],null,true)}),_c('el-table-column',{attrs:{\"prop\":\"theoryPower\",\"label\":\"理论算力\",\"min-width\":\"160\",\"header-align\":\"left\",\"align\":\"left\",\"show-overflow-tooltip\":\"\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_vm._v(_vm._s(scope.row.theoryPower)+\" \"+_vm._s(scope.row.unit))]}}],null,true)}),_c('el-table-column',{attrs:{\"label\":\"实际算力\",\"min-width\":\"160\",\"header-align\":\"left\",\"align\":\"left\",\"show-overflow-tooltip\":\"\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_vm._v(_vm._s(scope.row.computingPower)+\" \"+_vm._s(scope.row.unit))]}}],null,true)}),_c('el-table-column',{attrs:{\"prop\":\"powerDissipation\",\"label\":\"功耗(kw/h)\",\"min-width\":\"140\",\"header-align\":\"left\",\"align\":\"left\"}}),_c('el-table-column',{attrs:{\"prop\":\"algorithm\",\"label\":\"算法\",\"min-width\":\"120\",\"header-align\":\"left\",\"align\":\"left\"}}),_c('el-table-column',{attrs:{\"prop\":\"theoryIncome\",\"min-width\":\"160\",\"header-align\":\"left\",\"align\":\"left\",\"show-overflow-tooltip\":\"\"},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\"单机理论收入(每日) \"),_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(outer.row.productMachines[0].coin),expression:\"outer.row.productMachines[0].coin\"}]},[_vm._v(\"(\"+_vm._s(outer.row.productMachines[0].coin.toUpperCase())+\")\")])]},proxy:true}],null,true)}),_c('el-table-column',{attrs:{\"prop\":\"theoryUsdtIncome\",\"label\":\"单机理论收入(每日/USDT)\",\"min-width\":\"170\",\"header-align\":\"left\",\"align\":\"left\"}}),_c('el-table-column',{attrs:{\"prop\":\"type\",\"label\":\"矿机型号\",\"header-align\":\"left\",\"align\":\"left\",\"min-width\":\"120\"}}),_c('el-table-column',{attrs:{\"label\":\"最大可租赁(天)\",\"min-width\":\"140\",\"header-align\":\"left\",\"align\":\"left\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_vm._v(_vm._s(_vm.getRowMaxLeaseDays(scope.row)))]}}],null,true)}),_c('el-table-column',{attrs:{\"label\":\"租赁天数(天)\",\"min-width\":\"150\",\"header-align\":\"left\",\"align\":\"left\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('el-input-number',{attrs:{\"min\":1,\"max\":_vm.getRowMaxLeaseDays(scope.row),\"step\":1,\"precision\":0,\"size\":\"mini\",\"disabled\":scope.row.saleState === 1 || scope.row.saleState === 2,\"controls-position\":\"right\"},on:{\"change\":val => _vm.handleLeaseDaysChange(scope.row, val)},model:{value:(scope.row.leaseTime),callback:function ($$v) {_vm.$set(scope.row, \"leaseTime\", $$v)},expression:\"scope.row.leaseTime\"}})]}}],null,true)}),_c('el-table-column',{attrs:{\"prop\":\"saleState\",\"label\":\"售出状态\",\"header-align\":\"left\",\"align\":\"left\",\"min-width\":\"110\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('el-tag',{attrs:{\"type\":scope.row.saleState === 0 ? 'info' : (scope.row.saleState === 1 ? 'danger' : 'warning')}},[_vm._v(\" \"+_vm._s(scope.row.saleState === 0 ? '未售出' : (scope.row.saleState === 1 ? '已售出' : '售出中'))+\" \")])]}}],null,true)})],1)]}}])}),_c('el-table-column',{attrs:{\"label\":\"价格 (USDT)\",\"header-align\":\"left\",\"align\":\"left\",\"min-width\":\"120\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('span',{staticClass:\"price-strong\"},[_vm._v(_vm._s(scope.row.productMachineRangeGroupDto && scope.row.productMachineRangeGroupDto.price))])]}}])}),_c('el-table-column',{attrs:{\"label\":\"理论算力范围\",\"min-width\":\"220\",\"header-align\":\"left\",\"align\":\"left\",\"show-overflow-tooltip\":\"\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_vm._v(_vm._s(scope.row.productMachineRangeGroupDto && scope.row.productMachineRangeGroupDto.theoryPowerRange))]}}])}),_c('el-table-column',{attrs:{\"label\":\"实际算力范围\",\"min-width\":\"200\",\"header-align\":\"left\",\"align\":\"left\",\"show-overflow-tooltip\":\"\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_vm._v(_vm._s(scope.row.productMachineRangeGroupDto && scope.row.productMachineRangeGroupDto.computingPowerRange))]}}])}),_c('el-table-column',{attrs:{\"label\":\"功耗范围\",\"min-width\":\"160\",\"header-align\":\"left\",\"align\":\"left\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_vm._v(_vm._s(scope.row.productMachineRangeGroupDto && scope.row.productMachineRangeGroupDto.powerRange))]}}])}),_c('el-table-column',{attrs:{\"label\":\"数量\",\"min-width\":\"100\",\"header-align\":\"left\",\"align\":\"left\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_vm._v(_vm._s(scope.row.productMachineRangeGroupDto && scope.row.productMachineRangeGroupDto.number))]}}])})],1)],1),_c('div',{staticStyle:{\"margin\":\"18px\",\"text-align\":\"right\"}},[_c('el-button',{attrs:{\"type\":\"primary\",\"size\":\"small\"},on:{\"click\":_vm.handleOpenAddToCartDialog}},[_vm._v(\"加入购物车\")])],1),_c('el-dialog',{attrs:{\"visible\":_vm.confirmAddDialog.visible,\"width\":\"80vw\",\"title\":`确认加入购物车(共 ${_vm.confirmAddDialog.items.length} 台)`},on:{\"update:visible\":function($event){return _vm.$set(_vm.confirmAddDialog, \"visible\", $event)}},scopedSlots:_vm._u([{key:\"footer\",fn:function(){return [_c('el-button',{on:{\"click\":function($event){_vm.confirmAddDialog.visible = false}}},[_vm._v(\"取消\")]),_c('el-button',{attrs:{\"type\":\"primary\"},on:{\"click\":_vm.handleConfirmAddSelectedToCart}},[_vm._v(\"确认加入\")])]},proxy:true}])},[_c('div',[_c('el-table',{attrs:{\"data\":_vm.confirmAddDialog.items,\"height\":\"360\",\"border\":\"\",\"stripe\":\"\",\"header-cell-style\":{ textAlign: 'left' },\"cell-style\":{ textAlign: 'left' }}},[_c('el-table-column',{attrs:{\"prop\":\"theoryPower\",\"label\":\"理论算力\",\"header-align\":\"left\",\"align\":\"left\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_vm._v(_vm._s(scope.row.theoryPower)+\" \"+_vm._s(scope.row.unit))]}}])}),_c('el-table-column',{attrs:{\"label\":\"实际算力\",\"header-align\":\"left\",\"align\":\"left\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_vm._v(_vm._s(scope.row.computingPower)+\" \"+_vm._s(scope.row.unit))]}}])}),_c('el-table-column',{attrs:{\"prop\":\"algorithm\",\"label\":\"算法\",\"width\":\"120\",\"header-align\":\"left\",\"align\":\"left\"}}),_c('el-table-column',{attrs:{\"prop\":\"powerDissipation\",\"label\":\"功耗(kw/h)\",\"header-align\":\"left\",\"align\":\"left\"}}),_c('el-table-column',{attrs:{\"label\":\"租赁天数(天)\",\"header-align\":\"left\",\"align\":\"left\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_vm._v(_vm._s(Number(scope.row.leaseTime || 1)))]}}])}),_c('el-table-column',{attrs:{\"prop\":\"price\",\"label\":\"单价(USDT)\",\"header-align\":\"left\",\"align\":\"left\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('span',{staticClass:\"price-strong\"},[_vm._v(_vm._s(scope.row.price))])]}}])})],1)],1)])],1):_c('div',{staticClass:\"not-found\"},[_c('h2',[_vm._v(\"商品不存在\")]),_c('p',[_vm._v(\"抱歉,您查找的商品不存在或已被删除。\")]),_c('button',{staticClass:\"back-btn\",on:{\"click\":_vm.handleBack}},[_vm._v(\"返回商品列表\")])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"withdrawal-history-container\"},[_vm._m(0),_c('div',{staticClass:\"tab-container\"},[_c('el-tabs',{on:{\"tab-click\":_vm.handleTabClick},model:{value:(_vm.activeTab),callback:function ($$v) {_vm.activeTab=$$v},expression:\"activeTab\"}},[_c('el-tab-pane',{attrs:{\"label\":\"提现中\",\"name\":\"pending\"}},[_c('div',{staticClass:\"tab-content\"},[_c('div',{staticClass:\"list-header\"},[_c('span',{staticClass:\"list-title\"},[_vm._v(\"提现中 (\"+_vm._s(_vm.total)+\")\")]),_c('el-button',{attrs:{\"type\":\"primary\",\"size\":\"small\"},on:{\"click\":_vm.refreshData}},[_c('i',{staticClass:\"el-icon-refresh\"}),_vm._v(\" 刷新 \")])],1),_c('div',{directives:[{name:\"loading\",rawName:\"v-loading\",value:(_vm.loading),expression:\"loading\"}],staticClass:\"withdrawal-list\"},[_vm._l((_vm.pendingWithdrawals),function(item){return _c('div',{key:item.id,staticClass:\"withdrawal-item pending\",on:{\"click\":function($event){return _vm.showDetail(item)}}},[_c('div',{staticClass:\"item-main\"},[_c('div',{staticClass:\"item-left\"},[_c('div',{staticClass:\"amount\"},[_vm._v(_vm._s(item.amount)+\" \"+_vm._s(item.toSymbol || 'USDT'))]),_c('div',{staticClass:\"chain\"},[_vm._v(_vm._s(_vm.getChainName(item.toChain)))])]),_c('div',{staticClass:\"item-right\"},[_c('div',{staticClass:\"status pending-status\"},[_c('i',{staticClass:\"el-icon-loading\"}),_vm._v(\" \"+_vm._s(_vm.getStatusText(item.status))+\" \")]),_c('div',{staticClass:\"time\"},[_vm._v(_vm._s(_vm.formatTime(item.createTime)))])])]),_c('div',{staticClass:\"item-footer\"},[_c('div',{staticClass:\"footer-left\"},[_c('span',{staticClass:\"address\"},[_vm._v(_vm._s(_vm.formatAddress(item.toAddress)))]),(item.txHash)?_c('span',{staticClass:\"tx-hash\"},[_c('i',{staticClass:\"el-icon-link\"}),_vm._v(\" \"+_vm._s(_vm.formatAddress(item.txHash))+\" \")]):_vm._e()]),_c('i',{staticClass:\"el-icon-arrow-right\"})])])}),(_vm.pendingWithdrawals.length === 0)?_c('div',{staticClass:\"empty-state\"},[_c('i',{staticClass:\"el-icon-document\"}),_c('p',[_vm._v(\"暂无提现中的记录\")])]):_vm._e()],2)])]),_c('el-tab-pane',{attrs:{\"label\":\"提现成功\",\"name\":\"success\"}},[_c('div',{staticClass:\"tab-content\"},[_c('div',{staticClass:\"list-header\"},[_c('span',{staticClass:\"list-title\"},[_vm._v(\"提现成功 (\"+_vm._s(_vm.total)+\")\")]),_c('el-button',{attrs:{\"type\":\"primary\",\"size\":\"small\"},on:{\"click\":_vm.refreshData}},[_c('i',{staticClass:\"el-icon-refresh\"}),_vm._v(\" 刷新 \")])],1),_c('div',{directives:[{name:\"loading\",rawName:\"v-loading\",value:(_vm.loading),expression:\"loading\"}],staticClass:\"withdrawal-list\"},[_vm._l((_vm.successWithdrawals),function(item){return _c('div',{key:item.id,staticClass:\"withdrawal-item success\",on:{\"click\":function($event){return _vm.showDetail(item)}}},[_c('div',{staticClass:\"item-main\"},[_c('div',{staticClass:\"item-left\"},[_c('div',{staticClass:\"amount\"},[_vm._v(_vm._s(item.amount)+\" \"+_vm._s(item.toSymbol || 'USDT'))]),_c('div',{staticClass:\"chain\"},[_vm._v(_vm._s(_vm.getChainName(item.toChain)))])]),_c('div',{staticClass:\"item-right\"},[_c('div',{staticClass:\"status success-status\"},[_c('i',{staticClass:\"el-icon-check\"}),_vm._v(\" \"+_vm._s(_vm.getStatusText(item.status))+\" \")]),_c('div',{staticClass:\"time\"},[_vm._v(_vm._s(_vm.formatTime(item.createTime)))])])]),_c('div',{staticClass:\"item-footer\"},[_c('div',{staticClass:\"footer-left\"},[_c('span',{staticClass:\"address\"},[_vm._v(_vm._s(_vm.formatAddress(item.toAddress)))]),(item.txHash)?_c('span',{staticClass:\"tx-hash\"},[_c('i',{staticClass:\"el-icon-link\"}),_vm._v(\" \"+_vm._s(_vm.formatAddress(item.txHash))+\" \")]):_vm._e()]),_c('i',{staticClass:\"el-icon-arrow-right\"})])])}),(_vm.successWithdrawals.length === 0)?_c('div',{staticClass:\"empty-state\"},[_c('i',{staticClass:\"el-icon-document\"}),_c('p',[_vm._v(\"暂无提现成功的记录\")])]):_vm._e()],2)])]),_c('el-tab-pane',{attrs:{\"label\":\"提现失败\",\"name\":\"failed\"}},[_c('div',{staticClass:\"tab-content\"},[_c('div',{staticClass:\"list-header\"},[_c('span',{staticClass:\"list-title\"},[_vm._v(\"提现失败 (\"+_vm._s(_vm.total)+\")\")]),_c('el-button',{attrs:{\"type\":\"primary\",\"size\":\"small\"},on:{\"click\":_vm.refreshData}},[_c('i',{staticClass:\"el-icon-refresh\"}),_vm._v(\" 刷新 \")])],1),_c('div',{directives:[{name:\"loading\",rawName:\"v-loading\",value:(_vm.loading),expression:\"loading\"}],staticClass:\"withdrawal-list\"},[_vm._l((_vm.failedWithdrawals),function(item){return _c('div',{key:item.id,staticClass:\"withdrawal-item failed\",on:{\"click\":function($event){return _vm.showDetail(item)}}},[_c('div',{staticClass:\"item-main\"},[_c('div',{staticClass:\"item-left\"},[_c('div',{staticClass:\"amount\"},[_vm._v(_vm._s(item.amount)+\" \"+_vm._s(item.toSymbol || 'USDT'))]),_c('div',{staticClass:\"chain\"},[_vm._v(_vm._s(_vm.getChainName(item.toChain)))])]),_c('div',{staticClass:\"item-right\"},[_c('div',{staticClass:\"status failed-status\"},[_c('i',{staticClass:\"el-icon-close\"}),_vm._v(\" \"+_vm._s(_vm.getStatusText(item.status))+\" \")]),_c('div',{staticClass:\"time\"},[_vm._v(_vm._s(_vm.formatTime(item.createTime)))])])]),_c('div',{staticClass:\"item-footer\"},[_c('div',{staticClass:\"footer-left\"},[_c('span',{staticClass:\"address\"},[_vm._v(_vm._s(_vm.formatAddress(item.toAddress)))]),(item.txHash)?_c('span',{staticClass:\"tx-hash\"},[_c('i',{staticClass:\"el-icon-link\"}),_vm._v(\" \"+_vm._s(_vm.formatAddress(item.txHash))+\" \")]):_vm._e()]),_c('i',{staticClass:\"el-icon-arrow-right\"})])])}),(_vm.failedWithdrawals.length === 0)?_c('div',{staticClass:\"empty-state\"},[_c('i',{staticClass:\"el-icon-document\"}),_c('p',[_vm._v(\"暂无提现失败的记录\")])]):_vm._e()],2)])])],1),_c('el-row',[_c('el-col',{staticStyle:{\"display\":\"flex\",\"justify-content\":\"center\"},attrs:{\"span\":24}},[_c('el-pagination',{staticStyle:{\"margin\":\"0 auto\",\"margin-top\":\"10px\"},attrs:{\"current-page\":_vm.currentPage,\"page-sizes\":_vm.pageSizes,\"page-size\":_vm.pagination.pageSize,\"layout\":\"total, sizes, prev, pager, next, jumper\",\"total\":_vm.total},on:{\"size-change\":_vm.handleSizeChange,\"current-change\":_vm.handleCurrentChange,\"update:currentPage\":function($event){_vm.currentPage=$event},\"update:current-page\":function($event){_vm.currentPage=$event}}})],1)],1)],1),_c('el-dialog',{attrs:{\"title\":\"提现详情\",\"visible\":_vm.detailDialogVisible,\"width\":\"600px\"},on:{\"update:visible\":function($event){_vm.detailDialogVisible=$event},\"close\":_vm.closeDetail}},[(_vm.selectedItem)?_c('div',{staticClass:\"detail-content\"},[_c('div',{staticClass:\"detail-section\"},[_c('h3',{staticClass:\"section-title\"},[_vm._v(\"基本信息\")]),_c('div',{staticClass:\"detail-list\"},[_c('div',{staticClass:\"detail-row\"},[_c('span',{staticClass:\"detail-label\"},[_vm._v(\"提现ID\")]),_c('span',{staticClass:\"detail-value\"},[_vm._v(_vm._s(_vm.selectedItem.id))])]),_c('div',{staticClass:\"detail-row\"},[_c('span',{staticClass:\"detail-label\"},[_vm._v(\"提现金额\")]),_c('span',{staticClass:\"detail-value amount\"},[_vm._v(_vm._s(_vm.selectedItem.amount)+\" \"+_vm._s(_vm.selectedItem.toSymbol || 'USDT'))])]),_c('div',{staticClass:\"detail-row\"},[_c('span',{staticClass:\"detail-label\"},[_vm._v(\"区块链网络\")]),_c('span',{staticClass:\"detail-value\"},[_vm._v(_vm._s(_vm.getChainName(_vm.selectedItem.toChain)))])]),_c('div',{staticClass:\"detail-row\"},[_c('span',{staticClass:\"detail-label\"},[_vm._v(\"提现状态\")]),_c('span',{staticClass:\"detail-value\"},[_c('el-tag',{attrs:{\"type\":_vm.getStatusType(_vm.selectedItem.status)}},[_vm._v(\" \"+_vm._s(_vm.getStatusText(_vm.selectedItem.status))+\" \")])],1)])])]),_c('div',{staticClass:\"detail-section\"},[_c('h3',{staticClass:\"section-title\"},[_vm._v(\"地址信息\")]),_c('div',{staticClass:\"detail-list\"},[_c('div',{staticClass:\"detail-row\"},[_c('span',{staticClass:\"detail-label\"},[_vm._v(\"收款地址\")]),_c('div',{staticClass:\"address-container\"},[_c('span',{staticClass:\"detail-value address\"},[_vm._v(_vm._s(_vm.selectedItem.toAddress))]),_c('el-button',{attrs:{\"type\":\"text\",\"size\":\"small\"},on:{\"click\":function($event){return _vm.copyAddress(_vm.selectedItem.toAddress)}}},[_vm._v(\" 复制 \")])],1)]),_c('div',{staticClass:\"detail-row\"},[_c('span',{staticClass:\"detail-label\"},[_vm._v(\"交易哈希\")]),_c('div',{staticClass:\"address-container\"},[_c('span',{staticClass:\"detail-value address\"},[_vm._v(_vm._s(_vm.selectedItem.txHash))]),(_vm.selectedItem.txHash)?_c('el-button',{attrs:{\"type\":\"text\",\"size\":\"small\"},on:{\"click\":function($event){return _vm.copyAddress(_vm.selectedItem.txHash)}}},[_vm._v(\" 复制 \")]):_vm._e()],1)])])]),_c('div',{staticClass:\"detail-section\"},[_c('h3',{staticClass:\"section-title\"},[_vm._v(\"时间信息\")]),_c('div',{staticClass:\"detail-list\"},[_c('div',{staticClass:\"detail-row\"},[_c('span',{staticClass:\"detail-label\"},[_vm._v(\"提现时间\")]),_c('span',{staticClass:\"detail-value\"},[_vm._v(_vm._s(_vm.formatFullTime(_vm.selectedItem.createTime)))])]),(_vm.selectedItem.updateTime)?_c('div',{staticClass:\"detail-row\"},[_c('span',{staticClass:\"detail-label\"},[_vm._v(\"完成时间\")]),_c('span',{staticClass:\"detail-value\"},[_vm._v(_vm._s(_vm.formatFullTime(_vm.selectedItem.updateTime)))])]):_vm._e()])])]):_vm._e(),_c('div',{staticClass:\"dialog-footer\",attrs:{\"slot\":\"footer\"},slot:\"footer\"},[_c('el-button',{on:{\"click\":_vm.closeDetail}},[_vm._v(\"关闭\")])],1)])],1)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"page-header\"},[_c('h1',{staticClass:\"page-title\"},[_vm._v(\"提现记录\")]),_c('p',{staticClass:\"page-subtitle\"},[_vm._v(\"查看您的提现申请和交易状态\")])])\n}]\n\nexport { render, staticRenderFns }","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./purchased.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./purchased.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./purchased.vue?vue&type=template&id=3f914c01&scoped=true\"\nimport script from \"./purchased.vue?vue&type=script&lang=js\"\nexport * from \"./purchased.vue?vue&type=script&lang=js\"\nimport style0 from \"./purchased.vue?vue&type=style&index=0&id=3f914c01&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3f914c01\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n ","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./purchasedDetail.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./purchasedDetail.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./purchasedDetail.vue?vue&type=template&id=592f2fb3&scoped=true\"\nimport script from \"./purchasedDetail.vue?vue&type=script&lang=js\"\nexport * from \"./purchasedDetail.vue?vue&type=script&lang=js\"\nimport style0 from \"./purchasedDetail.vue?vue&type=style&index=0&id=592f2fb3&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"592f2fb3\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{directives:[{name:\"loading\",rawName:\"v-loading\",value:(_vm.productListLoading),expression:\"productListLoading\"}],staticClass:\"product-list\"},[_c('section',{staticClass:\"container\"},[_c('h1',{staticClass:\"page-title\"},[_vm._v(\"商品列表\")]),_c('section',{staticClass:\"filter-section\"},[_c('label',{staticClass:\"required\",staticStyle:{\"margin-bottom\":\"10px\"}},[_vm._v(\"币种选择:\")]),_c('div',{staticClass:\"filter-row\"},[_c('el-select',{ref:\"screen\",staticClass:\"input\",attrs:{\"size\":\"middle\",\"placeholder\":\"请选择\",\"clearable\":\"\"},on:{\"change\":_vm.handleCurrencyChange,\"clear\":_vm.handleCurrencyClear},model:{value:(_vm.screenCurrency),callback:function ($$v) {_vm.screenCurrency=$$v},expression:\"screenCurrency\"}},_vm._l((_vm.currencyList),function(item){return _c('el-option',{key:item.value,attrs:{\"label\":item.label,\"value\":item.value}},[_c('div',{staticStyle:{\"display\":\"flex\",\"align-items\":\"center\"}},[_c('img',{staticStyle:{\"float\":\"left\",\"width\":\"20px\"},attrs:{\"src\":item.imgUrl}}),_c('span',{staticStyle:{\"float\":\"left\",\"margin-left\":\"5px\"}},[_vm._v(_vm._s(item.label))])])])}),1),_c('el-input',{staticStyle:{\"width\":\"240px\"},attrs:{\"size\":\"middle\",\"placeholder\":\"输入算法关键词\",\"clearable\":\"\"},on:{\"clear\":_vm.handleAlgorithmClear},nativeOn:{\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.handleAlgorithmSearch.apply(null, arguments)}},scopedSlots:_vm._u([{key:\"append\",fn:function(){return [_c('el-button',{attrs:{\"type\":\"primary\"},on:{\"click\":_vm.handleAlgorithmSearch}},[_vm._v(\"搜索\")])]},proxy:true}]),model:{value:(_vm.searchAlgorithm),callback:function ($$v) {_vm.searchAlgorithm=$$v},expression:\"searchAlgorithm\"}})],1)]),_c('div',{staticClass:\"product-list-grid\"},[_vm._l((_vm.products),function(product){return _c('div',{key:product.id,staticClass:\"product-item\",attrs:{\"tabindex\":\"0\",\"aria-label\":\"查看详情\"},on:{\"click\":function($event){return _vm.handleProductClick(product)}}},[_c('img',{staticClass:\"product-image\",attrs:{\"src\":require(\"../../assets/imgs/commodity.png\"),\"alt\":product.name}}),_c('div',{staticClass:\"product-info\"},[_c('h4',[_vm._v(\"商品: \"+_vm._s(product.name))]),_c('p',{staticStyle:{\"font-size\":\"16px\",\"margin-top\":\"10px\",\"font-weight\":\"bold\"}},[_vm._v(\"算法: \"+_vm._s(product.algorithm))]),_c('div',{staticClass:\"product-footer\"},[_c('div',{staticClass:\"price-wrap\"},[_c('span',{staticClass:\"product-price\"},[_vm._v(\"价格: \"+_vm._s(_vm.formatPriceRange(product.priceRange)))]),_c('span',{staticClass:\"unit\"},[_vm._v(\"USDT\")])]),_c('span',{staticClass:\"product-sold\",attrs:{\"aria-label\":\"已售数量\"}},[_vm._v(\"已售:\"+_vm._s(product && product.saleNumber != null ? product.saleNumber : 0))])])])])}),(_vm.products.length === 0 && !_vm.productListLoading)?_c('div',{staticClass:\"empty-state\"},[_c('i',{staticClass:\"el-icon-goods\"}),_c('p',[_vm._v(\"暂无商品数据\")]),_c('p',{staticStyle:{\"font-size\":\"12px\",\"color\":\"#999\",\"margin-top\":\"8px\"}},[_vm._v(\"请检查网络连接或联系管理员\")])]):_vm._e()],2)])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./wallet.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./wallet.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./wallet.vue?vue&type=template&id=75ddb61b&scoped=true\"\nimport script from \"./wallet.vue?vue&type=script&lang=js\"\nexport * from \"./wallet.vue?vue&type=script&lang=js\"\nimport style0 from \"./wallet.vue?vue&type=style&index=0&id=75ddb61b&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"75ddb61b\",\n null\n \n)\n\nexport default component.exports","import { getProductList } from '../../api/products'\nexport default {\n name: 'ProductList',\n data() {\n return {\n products: [\n // {\n // id: 1,\n // name: \"Nexa\",\n // price: `10000~20000`,\n // image: \"https://img.yzcdn.cn/vant/apple-1.jpg\",\n // desc: \"NexaPow\",\n // },\n // {\n // id: 2,\n // name: \"grs\",\n // price: `10000~20000`,\n // image: \"https://img.yzcdn.cn/vant/apple-1.jpg\",\n // desc: \"groestl\",\n // },\n // {\n // id: 3,\n // name: \"mona\",\n // price: `10000~20000`,\n // image: \"https://img.yzcdn.cn/vant/apple-1.jpg\",\n // desc: \"Lyra2REv2\",\n // },\n // {\n // id: 4,\n // name: \"dgb\",\n // price: `10000~20000`,\n // image: \"https://img.yzcdn.cn/vant/apple-1.jpg\",\n // desc: \"DigiByte(Skein)\",\n // },\n ],\n loading: false,\n powerList: [\n // {\n // value: 1,\n // label: \"NexaPow\",\n // children: [\n // {\n // value: 1 - 1,\n // label: \"挖矿账户1\",\n // },\n // {\n // value: 1 - 2,\n // label: \"挖矿账户2\",\n // },\n // ],\n // },\n // {\n // value: 2,\n // label: \"Grepow\",\n // children: [\n // {\n // value: 2 - 1,\n // label: \"挖矿账户1\",\n // },\n // {\n // value: 2 - 2,\n // label: \"挖矿账户2\",\n // },\n // ],\n // },\n // {\n // value: 3,\n // label: \"mofang\",\n // children: [\n // {\n // value: 3 - 1,\n // label: \"挖矿账户1\",\n // },\n // ],\n // },\n ], \n currencyList: [\n {\n path: \"nexaAccess\",\n value: \"nexa\",\n label: \"nexa\",\n\n imgUrl: `https://m2pool.com/img/nexa.png`,\n name: \"course.NEXAcourse\",\n show: true,\n amount: 10000,\n },\n {\n path: \"grsAccess\",\n value: \"grs\",\n label: \"grs\",\n\n imgUrl: `https://m2pool.com/img/grs.svg`,\n name: \"course.GRScourse\",\n show: true,\n amount: 1,\n },\n {\n path: \"monaAccess\",\n value: \"mona\",\n label: \"mona\",\n\n imgUrl: `https://m2pool.com/img/mona.svg`,\n name: \"course.MONAcourse\",\n show: true,\n amount: 1,\n },\n {\n path: \"dgbsAccess\",\n value: \"dgbs\",\n // label: \"dgb-skein-pool1\",\n label: \"dgb(skein)\",\n\n imgUrl: `https://m2pool.com/img/dgb.svg`,\n name: \"course.dgbsCourse\",\n show: true,\n amount: 1,\n },\n {\n path: \"dgbqAccess\",\n value: \"dgbq\",\n // label: \"dgb(qubit-pool1)\",\n label: \"dgb(qubit)\",\n\n imgUrl: `https://m2pool.com/img/dgb.svg`,\n name: \"course.dgbqCourse\",\n show: true,\n amount: 1,\n },\n {\n path: \"dgboAccess\",\n value: \"dgbo\",\n // label: \"dgb-odocrypt-pool1\",\n label: \"dgb(odocrypt)\",\n\n imgUrl: `https://m2pool.com/img/dgb.svg`,\n name: \"course.dgboCourse\",\n show: true,\n amount: 1,\n },\n {\n path: \"rxdAccess\",\n value: \"rxd\",\n label: \"radiant(rxd)\",\n\n imgUrl: `https://m2pool.com/img/rxd.png`,\n name: \"course.RXDcourse\",\n show: true,\n amount: 100,\n },\n {\n path: \"enxAccess\",\n value: \"enx\",\n label: \"Entropyx(enx)\",\n\n imgUrl: `https://m2pool.com/img/enx.svg`,\n name: \"course.ENXcourse\",\n show: true,\n amount: 5000,\n },\n {\n path: \"alphminingPool\",\n value: \"alph\",\n label: \"alephium\",\n\n imgUrl: `https://m2pool.com/img/alph.svg`,\n name: \"course.alphCourse\",\n show: true,\n amount: 1,\n },\n ],\n screenCurrency: \"\",\n searchAlgorithm: \"\",\n params:{\n coin: \"\",\n algorithm: \"\"\n },\n productListLoading:false,\n }\n },\n mounted() {\n this.fetchGetList()\n },\n methods: {\n /**\n * 价格裁剪为两位小数(不四舍五入)\n * 兼容区间字符串:\"min-max\" 或 单值\n */\n formatPriceRange(input) {\n try {\n if (input === null || input === undefined) return '0.00'\n const raw = String(input)\n if (raw.includes('-')) {\n const [lo, hi] = raw.split('-')\n return `${this._truncate2(lo)}-${this._truncate2(hi)}`\n }\n return this._truncate2(raw)\n } catch (e) {\n return '0.00'\n }\n },\n /**\n * 将任意数字字符串截断为 2 位小数(不四舍五入)。\n */\n _truncate2(val) {\n if (val === null || val === undefined) return '0.00'\n const str = String(val).trim()\n if (!str) return '0.00'\n const [intPart, decPart = ''] = str.split('.')\n const two = decPart.slice(0, 2)\n return `${intPart}.${two.padEnd(2, '0')}`\n },\n handleCurrencyChange(val){\n try{\n // 清空时(el-select 的 clear 同时触发 change),避免重复请求,交由 handleCurrencyClear 处理\n if (val === undefined || val === null || val === '') return\n // 选择具体币种时,合并算法关键词一起查询\n this.params.coin = val\n const keyword = (this.searchAlgorithm || '').trim()\n const req = keyword ? { coin: val, algorithm: keyword } : { coin: val }\n this.fetchGetList(req)\n \n \n // 可在此发起接口:getProductList({ coin: val })\n // this.fetchGetList({ coin: val })\n }catch(e){\n console.error('处理币种变更失败', e)\n }\n },\n\n async fetchGetList(params) {\n this.productListLoading = true\n try {\n const res = await getProductList(params)\n console.log('API响应:', res)\n if (res && res.code === 200) {\n this.products = res.rows || []\n console.log('商品数据:', this.products)\n } else {\n console.error('API返回错误:', res)\n this.products = []\n }\n } catch (error) {\n console.error('获取商品列表失败:', error)\n this.products = []\n // 添加一些测试数据,避免页面空白\n this.products = [\n // {\n // id: 1,\n // name: \"测试商品1\",\n // algorithm: \"测试算法1\",\n // priceRange: \"100-200\",\n // image: \"https://img.yzcdn.cn/vant/apple-1.jpg\"\n // },\n // {\n // id: 2,\n // name: \"测试商品2\", \n // algorithm: \"测试算法2\",\n // priceRange: \"200-300\",\n // image: \"https://img.yzcdn.cn/vant/apple-1.jpg\"\n // }\n ]\n }\n this.productListLoading = false\n },\n // 算法搜索(使用同一接口,传入 algorithm 参数)\n handleAlgorithmSearch() {\n const keyword = (this.searchAlgorithm || '').trim()\n const next = { ...this.params }\n if (keyword) {\n next.algorithm = keyword\n this.params.algorithm = keyword\n } else {\n delete next.algorithm\n this.params.algorithm = \"\"\n }\n // 不重置下拉,只根据算法关键词查询\n if (next.algorithm) this.fetchGetList({ ...next, coin: this.screenCurrency || undefined })\n else this.fetchGetList(this.screenCurrency ? { coin: this.screenCurrency } : undefined)\n \n },\n // 清空下拉时:只清 coin,保留算法条件\n handleCurrencyClear() {\n this.screenCurrency = \"\"\n this.params.coin = \"\"\n const keyword = (this.searchAlgorithm || '').trim()\n if (keyword) this.fetchGetList({ algorithm: keyword })\n else this.fetchGetList()\n },\n // 清空算法时:只清 algorithm,保留下拉 coin\n handleAlgorithmClear() {\n this.searchAlgorithm = \"\"\n this.params.algorithm = \"\"\n const coin = this.screenCurrency\n if (coin) this.fetchGetList({ coin })\n else this.fetchGetList()\n },\n handleProductClick(product) {\n\n if (product.id || product.id == 0) {\n \n this.$router.push(`/product/${product.id}`); \n } \n\n \n },\n\n\n\n }\n}","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=662f903c\"\nvar script = {}\nimport style0 from \"./App.vue?vue&type=style&index=0&id=662f903c&prod&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","export const coinList = [\r\n {\r\n path: \"nexaAccess\",\r\n value: \"nexa\",\r\n label: \"nexa\",\r\n\r\n imgUrl: `https://m2pool.com/img/nexa.png`,\r\n name: \"course.NEXAcourse\",\r\n show: true,\r\n amount: 10000,\r\n },\r\n {\r\n path: \"grsAccess\",\r\n value: \"grs\",\r\n label: \"grs\",\r\n\r\n imgUrl: `https://m2pool.com/img/grs.svg`,\r\n name: \"course.GRScourse\",\r\n show: true,\r\n amount: 1,\r\n },\r\n {\r\n path: \"monaAccess\",\r\n value: \"mona\",\r\n label: \"mona\",\r\n\r\n imgUrl: `https://m2pool.com/img/mona.svg`,\r\n name: \"course.MONAcourse\",\r\n show: true,\r\n amount: 1,\r\n },\r\n {\r\n path: \"dgbsAccess\",\r\n value: \"dgbs\",\r\n // label: \"dgb-skein-pool1\",\r\n label: \"dgb(skein)\",\r\n\r\n imgUrl: `https://m2pool.com/img/dgb.svg`,\r\n name: \"course.dgbsCourse\",\r\n show: true,\r\n amount: 1,\r\n },\r\n {\r\n path: \"dgbqAccess\",\r\n value: \"dgbq\",\r\n // label: \"dgb(qubit-pool1)\",\r\n label: \"dgb(qubit)\",\r\n\r\n imgUrl: `https://m2pool.com/img/dgb.svg`,\r\n name: \"course.dgbqCourse\",\r\n show: true,\r\n amount: 1,\r\n },\r\n {\r\n path: \"dgboAccess\",\r\n value: \"dgbo\",\r\n // label: \"dgb-odocrypt-pool1\",\r\n label: \"dgb(odocrypt)\",\r\n\r\n imgUrl: `https://m2pool.com/img/dgb.svg`,\r\n name: \"course.dgboCourse\",\r\n show: true,\r\n amount: 1,\r\n },\r\n {\r\n path: \"rxdAccess\",\r\n value: \"rxd\",\r\n label: \"radiant(rxd)\",\r\n\r\n imgUrl: `https://m2pool.com/img/rxd.png`,\r\n name: \"course.RXDcourse\",\r\n show: true,\r\n amount: 100,\r\n },\r\n {\r\n path: \"enxAccess\",\r\n value: \"enx\",\r\n label: \"Entropyx(enx)\",\r\n\r\n imgUrl: `https://m2pool.com/img/enx.svg`,\r\n name: \"course.ENXcourse\",\r\n show: true,\r\n amount: 5000,\r\n },\r\n {\r\n path: \"alphminingPool\",\r\n value: \"alph\",\r\n label: \"alephium\",\r\n\r\n imgUrl: `https://m2pool.com/img/alph.svg`,\r\n name: \"course.alphCourse\",\r\n show: true,\r\n amount: 1,\r\n },\r\n ]","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./productNew.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./productNew.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./productNew.vue?vue&type=template&id=538996de&scoped=true\"\nimport script from \"./productNew.vue?vue&type=script&lang=js\"\nexport * from \"./productNew.vue?vue&type=script&lang=js\"\nimport style0 from \"./productNew.vue?vue&type=style&index=0&id=538996de&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"538996de\",\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\nimport VueRouter from 'vue-router'\nimport { mainRoutes } from './routes'\n\nVue.use(VueRouter)\n\nconst router = new VueRouter({\n mode: 'history',\n base: process.env.BASE_URL,\n routes: mainRoutes\n})\n\n// 路由守卫 - 设置页面标题和权限检查\nrouter.beforeEach((to, from, next) => {\n // 设置页面标题\n if (to.meta && to.meta.title) {\n document.title = `${to.meta.title} - Power Leasing`\n } else {\n document.title = 'Power Leasing - 电商系统'\n }\n \n // 检查权限\n if (to.meta && to.meta.allAuthority) {\n // 这里可以添加权限检查逻辑\n // 目前所有页面都是 ['all'] 权限,所以直接通过\n console.log(`访问页面: ${to.meta.title}, 权限: ${to.meta.allAuthority.join(', ')}`)\n }\n \n next()\n})\n\n// 路由错误处理\nrouter.onError((error) => {\n console.error('路由错误:', error)\n // 可以在这里添加错误处理逻辑,比如跳转到错误页面\n})\n\nexport default router\n","export default {\r\n '401': '认证失败,无法访问系统资源,请重新登录',\r\n '403': '当前操作没有权限',\r\n '404': '访问资源不存在',\r\n 'default': '系统未知错误,请反馈给管理员'\r\n}\r\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"checkout-page\"},[_c('h1',{staticClass:\"page-title\"},[_vm._v(\"订单结算\")]),(_vm.loading)?_c('div',{staticClass:\"loading\"},[_c('el-loading-spinner'),_vm._v(\" 加载中... \")],1):(_vm.cartItems.length === 0)?_c('div',{staticClass:\"empty-cart\"},[_c('div',{staticClass:\"empty-icon\"},[_vm._v(\"🛒\")]),_c('h2',[_vm._v(\"购物车是空的\")]),_c('p',[_vm._v(\"请先添加商品到购物车\")]),_c('router-link',{staticClass:\"shop-now-btn\",attrs:{\"to\":\"/productList\"}},[_vm._v(\" 去购物 \")])],1):_c('div',{staticClass:\"checkout-content\"},[_c('div',{staticClass:\"order-summary\"},[_c('h2',{staticClass:\"section-title\"},[_vm._v(\"订单摘要\")]),_c('div',{staticClass:\"order-items\"},_vm._l((_vm.cartItems),function(item){return _c('div',{key:item.id,staticClass:\"order-item\"},[_c('div',{staticClass:\"item-image\"},[_c('img',{attrs:{\"src\":item.image,\"alt\":item.title}})]),_c('div',{staticClass:\"item-info\"},[_c('h3',{staticClass:\"item-title\"},[_vm._v(_vm._s(item.title))]),_c('div',{staticClass:\"item-price\"},[_vm._v(\"¥\"+_vm._s(item.price))])]),_c('div',{staticClass:\"item-quantity\"},[_c('span',{staticClass:\"quantity-label\"},[_vm._v(\"数量:\")]),_c('span',{staticClass:\"quantity-value\"},[_vm._v(_vm._s(item.quantity))])]),_c('div',{staticClass:\"item-total\"},[_c('span',{staticClass:\"total-label\"},[_vm._v(\"小计:\")]),_c('span',{staticClass:\"total-price\"},[_vm._v(\"¥\"+_vm._s((item.price * item.quantity).toFixed(2)))])])])}),0),_c('div',{staticClass:\"order-total\"},[_c('div',{staticClass:\"total-row\"},[_c('span',[_vm._v(\"商品总数:\")]),_c('span',[_vm._v(_vm._s(_vm.summary.totalQuantity)+\" 件\")])]),_c('div',{staticClass:\"total-row\"},[_c('span',[_vm._v(\"商品种类:\")]),_c('span',[_vm._v(_vm._s(_vm.cartItems.length)+\" 种\")])]),_c('div',{staticClass:\"total-row final-total\"},[_c('span',[_vm._v(\"订单总计:\")]),_c('span',{staticClass:\"final-amount\"},[_vm._v(\"¥\"+_vm._s(_vm.summary.totalPrice.toFixed(2)))])])])]),_c('div',{staticClass:\"checkout-form\"},[_c('h2',{staticClass:\"section-title\"},[_vm._v(\"收货信息\")]),_c('form',{staticClass:\"form\",on:{\"submit\":function($event){$event.preventDefault();return _vm.handleSubmit.apply(null, arguments)}}},[_c('div',{staticClass:\"form-row\"},[_c('div',{staticClass:\"form-group\"},[_c('label',{staticClass:\"form-label\",attrs:{\"for\":\"name\"}},[_vm._v(\"收货人姓名 *\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.form.name),expression:\"form.name\"}],staticClass:\"form-input\",attrs:{\"id\":\"name\",\"type\":\"text\",\"required\":\"\",\"placeholder\":\"请输入收货人姓名\",\"aria-describedby\":\"name-error\"},domProps:{\"value\":(_vm.form.name)},on:{\"input\":function($event){if($event.target.composing)return;_vm.$set(_vm.form, \"name\", $event.target.value)}}}),(_vm.errors.name)?_c('div',{staticClass:\"error-message\",attrs:{\"id\":\"name-error\"}},[_vm._v(\" \"+_vm._s(_vm.errors.name)+\" \")]):_vm._e()]),_c('div',{staticClass:\"form-group\"},[_c('label',{staticClass:\"form-label\",attrs:{\"for\":\"phone\"}},[_vm._v(\"联系电话 *\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.form.phone),expression:\"form.phone\"}],staticClass:\"form-input\",attrs:{\"id\":\"phone\",\"type\":\"tel\",\"required\":\"\",\"placeholder\":\"请输入联系电话\",\"aria-describedby\":\"phone-error\"},domProps:{\"value\":(_vm.form.phone)},on:{\"input\":function($event){if($event.target.composing)return;_vm.$set(_vm.form, \"phone\", $event.target.value)}}}),(_vm.errors.phone)?_c('div',{staticClass:\"error-message\",attrs:{\"id\":\"phone-error\"}},[_vm._v(\" \"+_vm._s(_vm.errors.phone)+\" \")]):_vm._e()])]),_c('div',{staticClass:\"form-group\"},[_c('label',{staticClass:\"form-label\",attrs:{\"for\":\"address\"}},[_vm._v(\"收货地址 *\")]),_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.form.address),expression:\"form.address\"}],staticClass:\"form-textarea\",attrs:{\"id\":\"address\",\"rows\":\"3\",\"required\":\"\",\"placeholder\":\"请输入详细收货地址\",\"aria-describedby\":\"address-error\"},domProps:{\"value\":(_vm.form.address)},on:{\"input\":function($event){if($event.target.composing)return;_vm.$set(_vm.form, \"address\", $event.target.value)}}}),(_vm.errors.address)?_c('div',{staticClass:\"error-message\",attrs:{\"id\":\"address-error\"}},[_vm._v(\" \"+_vm._s(_vm.errors.address)+\" \")]):_vm._e()]),_c('div',{staticClass:\"form-group\"},[_c('label',{staticClass:\"form-label\",attrs:{\"for\":\"note\"}},[_vm._v(\"备注\")]),_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.form.note),expression:\"form.note\"}],staticClass:\"form-textarea\",attrs:{\"id\":\"note\",\"rows\":\"2\",\"placeholder\":\"可选:订单备注信息\"},domProps:{\"value\":(_vm.form.note)},on:{\"input\":function($event){if($event.target.composing)return;_vm.$set(_vm.form, \"note\", $event.target.value)}}})]),_c('div',{staticClass:\"form-actions\"},[_c('router-link',{staticClass:\"back-btn\",attrs:{\"to\":\"/cart\"}},[_vm._v(\" 返回购物车 \")]),_c('button',{staticClass:\"submit-btn\",attrs:{\"type\":\"submit\",\"disabled\":_vm.submitting,\"aria-label\":\"提交订单\"}},[(_vm.submitting)?_c('span',[_vm._v(\"提交中...\")]):_c('span',[_vm._v(\"提交订单\")])])],1)])])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n","import request from '../utils/request'\n\n//商品列表\nexport function getList(data) {\n return request({\n url: `/lease/product/getList`,\n method: 'get',\n data\n })\n}\n\n//创建商品 新增商品\nexport function createProduct(data) {\n return request({\n url: `/lease/product/add`,\n method: 'post',\n data\n })\n}\n\n//获取商品列表\nexport function getProductList(data) {\n return request({\n url: `/lease/product/getList`,\n method: 'post',\n data\n })\n}\n\n// 更新商品\nexport function updateProduct(data) {\n return request({\n url: `/lease/product/update`,\n method: 'post',\n data\n })\n}\n\n// 删除商品\nexport function deleteProduct(id) {\n return request({\n url: `/lease/product/delete`,\n method: 'post',\n data: { id }\n })\n}\n\n\n\n// 查询单个商品详情\nexport function getMachineInfo(data) {\n return request({\n url: `/lease/product/getMachineInfo`,\n method: 'post', \n data\n })\n}\n\n\n// 已购商品\nexport function getOwnedList(data) {\n return request({\n url: `/lease/product/getOwnedList`,\n method: 'post', \n data\n })\n}\n\n\n\n// 已购商品详情\nexport function getOwnedById(data) {\n return request({\n url: `/lease/product/getOwnedById`,\n method: 'post', \n data\n })\n}\n\n// 查商品详情里面的商品信息\nexport function getMachineInfoById(data) {\n return request({\n url: `/lease/product/getMachineInfoById`,\n method: 'post', \n data\n })\n}\n\n\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"orders-page\"},[_c('h2',{staticClass:\"title\"},[_vm._v(\"已售出订单\")]),_c('el-tabs',{on:{\"tab-click\":_vm.handleTabClick},model:{value:(_vm.active),callback:function ($$v) {_vm.active=$$v},expression:\"active\"}},[_c('el-tab-pane',{attrs:{\"label\":\"订单进行中\",\"name\":\"7\"}},[_c('order-list',{attrs:{\"items\":_vm.orders[7],\"show-checkout\":false,\"empty-text\":\"暂无进行中的订单\"}})],1),_c('el-tab-pane',{attrs:{\"label\":\"订单已完成\",\"name\":\"8\"}},[_c('order-list',{attrs:{\"items\":_vm.orders[8],\"show-checkout\":false,\"empty-text\":\"暂无已完成的订单\"}})],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"cart-page\"},[_c('h1',{staticClass:\"page-title\"},[_vm._v(\"购物车\")]),(_vm.loading)?_c('div',{staticClass:\"loading\"},[_c('i',{staticClass:\"el-icon-loading\",attrs:{\"aria-label\":\"加载中\",\"role\":\"img\"}}),_vm._v(\" 加载中... \")]):(_vm.isCartEmpty)?_c('div',{staticClass:\"empty-cart\"},[_c('div',{staticClass:\"empty-icon\"},[_vm._v(\"🛒\")]),_c('h2',[_vm._v(\"购物车是空的\")]),_c('p',[_vm._v(\"快去添加一些商品吧!\")]),_c('router-link',{staticClass:\"shop-now-btn\",attrs:{\"to\":\"/productList\"}},[_vm._v(\" 去购物 \")])],1):_c('div',{staticClass:\"cart-content\"},[_c('el-table',{ref:\"shopTable\",staticStyle:{\"width\":\"100%\"},attrs:{\"data\":_vm.shops,\"border\":\"\",\"row-key\":'id',\"expand-row-keys\":_vm.expandedShopKeys,\"header-cell-style\":{ textAlign: 'left' },\"cell-style\":{ textAlign: 'left' }},on:{\"expand-change\":_vm.handleShopExpandChange}},[_c('el-table-column',{attrs:{\"type\":\"expand\",\"width\":\"46\"},scopedSlots:_vm._u([{key:\"default\",fn:function(shopScope){return [_c('el-table',{ref:'innerTable-' + shopScope.row.id,staticStyle:{\"width\":\"100%\"},attrs:{\"data\":shopScope.row.productMachineDtoList || [],\"size\":\"small\",\"border\":\"\",\"row-key\":'id',\"reserve-selection\":\"\",\"header-cell-style\":{ textAlign: 'left' },\"cell-style\":{ textAlign: 'left' }},on:{\"selection-change\":sels => _vm.handleShopInnerSelectionChange(shopScope.row, sels)}},[_c('el-table-column',{attrs:{\"type\":\"selection\",\"width\":\"46\",\"selectable\":_vm.isRowSelectable}}),_c('el-table-column',{attrs:{\"prop\":\"name\",\"label\":\"商品名称\"}}),_c('el-table-column',{attrs:{\"prop\":\"miner\",\"label\":\"机器编号\"}}),_c('el-table-column',{attrs:{\"prop\":\"algorithm\",\"label\":\"算法\"}}),_c('el-table-column',{attrs:{\"prop\":\"powerDissipation\",\"label\":\"功耗(kw/h)\"}}),_c('el-table-column',{attrs:{\"prop\":\"theoryPower\",\"label\":\"理论算力\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_vm._v(_vm._s(scope.row.theoryPower)+\" \"),_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(scope.row.theoryPower),expression:\"scope.row.theoryPower\"}]},[_vm._v(_vm._s(scope.row.unit))])]}}],null,true)}),_c('el-table-column',{attrs:{\"prop\":\"computingPower\",\"label\":\"实际算力\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_vm._v(_vm._s(scope.row.computingPower)+\" \"),_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(scope.row.computingPower),expression:\"scope.row.computingPower\"}]},[_vm._v(_vm._s(scope.row.unit))])]}}],null,true)}),_c('el-table-column',{attrs:{\"prop\":\"theoryIncome\",\"label\":\"单机理论收入(每日/币种)\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_vm._v(_vm._s(scope.row.theoryIncome)+\" \"),_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(scope.row.coin),expression:\"scope.row.coin\"}]},[_vm._v(_vm._s(_vm.toUpperText(scope.row.coin)))])]}}],null,true)}),_c('el-table-column',{attrs:{\"prop\":\"theoryUsdtIncome\",\"label\":\"单机理论收入(每日/USDT)\"}}),_c('el-table-column',{attrs:{\"prop\":\"price\",\"label\":\"单价(USDT)\",\"width\":\"100\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('span',{staticClass:\"price-strong\"},[_vm._v(_vm._s(_vm.formatTrunc(scope.row.price, 2)))])]}}],null,true)}),_c('el-table-column',{attrs:{\"label\":\"租赁天数\",\"width\":\"145\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('el-input-number',{attrs:{\"min\":1,\"max\":_vm.getRowMaxLeaseDaysLocal(scope.row),\"precision\":0,\"step\":1,\"size\":\"mini\",\"controls-position\":\"right\"},on:{\"change\":function($event){return _vm.handleLeaseTimeChange(scope.row)},\"input\":function($event){return _vm.handleLeaseTimeInput(scope.row, $event)}},model:{value:(scope.row.leaseTime),callback:function ($$v) {_vm.$set(scope.row, \"leaseTime\", $$v)},expression:\"scope.row.leaseTime\"}})]}}],null,true)}),_c('el-table-column',{attrs:{\"label\":\"最大可租(天)\",\"min-width\":\"60\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_vm._v(_vm._s(scope.row.maxLeaseDays != null ? scope.row.maxLeaseDays : ''))]}}],null,true)}),_c('el-table-column',{attrs:{\"label\":\"机器状态\",\"width\":\"110\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('el-tag',{attrs:{\"type\":(Number(scope.row.del) === 1 || Number(scope.row.state) === 1) ? 'info' : 'success'}},[_vm._v(\" \"+_vm._s((Number(scope.row.del) === 1 || Number(scope.row.state) === 1) ? '下架' : '上架')+\" \")])]}}],null,true)}),_c('el-table-column',{attrs:{\"label\":\"机器总价(USDT)\",\"min-width\":\"100\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('span',{staticClass:\"price-strong\"},[_vm._v(_vm._s(_vm.formatTrunc(Number(scope.row.price || 0) * Number(scope.row.leaseTime || 1), 2)))])]}}],null,true)})],1)]}}])}),_c('el-table-column',{attrs:{\"prop\":\"name\",\"label\":\"店铺名称\"}}),_c('el-table-column',{attrs:{\"prop\":\"totalMachine\",\"label\":\"机器总数\"}}),_c('el-table-column',{attrs:{\"prop\":\"totalPrice\",\"label\":\"总价(USDT)\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('span',{staticClass:\"price-strong\"},[_vm._v(_vm._s(_vm.computeShopTotalDisplay(scope.row)))])]}}])}),_c('el-table-column',{attrs:{\"label\":\"支付方式\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return _vm._l((scope.row.payConfigList),function(item,index){return _c('img',{key:index,staticStyle:{\"width\":\"20px\",\"height\":\"20px\",\"margin-right\":\"10px\"},attrs:{\"src\":item.payCoinImage,\"alt\":item.payChain,\"title\":_vm.formatPayTooltip(item)}})})}}])}),_c('el-table-column',{attrs:{\"label\":\"操作\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('el-button',{attrs:{\"type\":\"primary\",\"size\":\"mini\",\"loading\":_vm.creatingOrder,\"disabled\":_vm.creatingOrder},on:{\"click\":function($event){return _vm.handleCheckoutShop(scope.row)}}},[_vm._v(\"结算该店铺订单\")])]}}])})],1),_c('div',{staticClass:\"summary-actions\",staticStyle:{\"margin-top\":\"16px\",\"display\":\"flex\",\"gap\":\"12px\",\"justify-content\":\"flex-end\"}},[_c('div',{staticClass:\"summary-inline\",staticStyle:{\"color\":\"#666\"}},[_vm._v(\" 已选机器:\"),_c('b',[_vm._v(_vm._s(_vm.selectedMachineCount))]),_vm._v(\" 台 \"),_c('span',{staticStyle:{\"margin-left\":\"12px\"}},[_vm._v(\"金额合计(USDT):\"),_c('b',[_vm._v(_vm._s(_vm.formatTrunc(_vm.selectedTotal, 2)))])])]),_c('div',{staticClass:\"actions-inline\",staticStyle:{\"display\":\"flex\",\"gap\":\"12px\"}},[_c('el-button',{attrs:{\"type\":\"danger\",\"disabled\":!_vm.selectedMachineCount},on:{\"click\":_vm.handleRemoveSelectedMachines}},[_vm._v(\"删除所选机器\")]),_c('el-button',{attrs:{\"type\":\"warning\",\"plain\":\"\",\"loading\":_vm.clearOffLoading},on:{\"click\":_vm.handleClearOffShelf}},[_vm._v(\"清除已下架商品\")])],1)]),_c('el-dialog',{attrs:{\"visible\":_vm.confirmDialog.visible,\"width\":\"80vw\",\"close-on-click-modal\":false,\"title\":`确认结算该店铺订单(共 ${_vm.confirmDialog.count} 台机器)`},on:{\"update:visible\":function($event){return _vm.$set(_vm.confirmDialog, \"visible\", $event)}},scopedSlots:_vm._u([{key:\"footer\",fn:function(){return [_c('el-button',{on:{\"click\":function($event){_vm.confirmDialog.visible=false}}},[_vm._v(\"取消\")]),_c('el-button',{attrs:{\"type\":\"primary\"},on:{\"click\":_vm.confirmPay}},[_vm._v(\"确认结算\")])]},proxy:true}])},[_c('div',[_c('el-table',{attrs:{\"data\":_vm.confirmDialog.items,\"height\":\"360\",\"border\":\"\",\"stripe\":\"\",\"header-cell-style\":{ textAlign: 'left' },\"cell-style\":{ textAlign: 'left' }}},[_c('el-table-column',{attrs:{\"prop\":\"product\",\"label\":\"商品\",\"min-width\":\"160\"}}),_c('el-table-column',{attrs:{\"prop\":\"coin\",\"label\":\"币种\",\"min-width\":\"100\"}}),_c('el-table-column',{attrs:{\"prop\":\"user\",\"label\":\"账户\",\"min-width\":\"120\"}}),_c('el-table-column',{attrs:{\"prop\":\"miner\",\"label\":\"机器编号\",\"min-width\":\"160\"}}),_c('el-table-column',{attrs:{\"prop\":\"unitPrice\",\"min-width\":\"140\"},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\"单价(\"+_vm._s(_vm.payCoinSymbol || 'USDT')+\")\")]},proxy:true},{key:\"default\",fn:function(scope){return [_c('span',{staticClass:\"price-strong\"},[_vm._v(_vm._s(_vm.formatTrunc(scope.row.unitPrice, 2)))])]}}])}),_c('el-table-column',{attrs:{\"prop\":\"leaseTime\",\"label\":\"租赁天数\",\"min-width\":\"120\"}}),_c('el-table-column',{attrs:{\"prop\":\"subtotal\",\"min-width\":\"140\"},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\"小计(\"+_vm._s(_vm.payCoinSymbol || 'USDT')+\")\")]},proxy:true},{key:\"default\",fn:function(scope){return [_c('span',{staticClass:\"price-strong\"},[_vm._v(_vm._s(_vm.formatTrunc(scope.row.subtotal, 2)))])]}}])})],1),_c('div',{staticStyle:{\"margin-top\":\"12px\",\"text-align\":\"right\"}},[_vm._v(\"总金额(\"+_vm._s(_vm.payCoinSymbol || 'USDT')+\"):\"),_c('span',{staticClass:\"price-strong\"},[_vm._v(_vm._s(_vm.formatTrunc(_vm.confirmDialog.total, 2)))])])],1)]),_c('el-dialog',{attrs:{\"visible\":_vm.payDialog.visible,\"width\":\"520px\",\"title\":\"选择支付链/币种\",\"close-on-click-modal\":false},on:{\"update:visible\":function($event){return _vm.$set(_vm.payDialog, \"visible\", $event)}},scopedSlots:_vm._u([{key:\"footer\",fn:function(){return [_c('el-button',{on:{\"click\":function($event){_vm.payDialog.visible=false}}},[_vm._v(\"取消\")]),_c('el-button',{attrs:{\"type\":\"primary\",\"loading\":_vm.payDialog.loading},on:{\"click\":_vm.handlePayConfirm}},[_vm._v(\"下一步\")])]},proxy:true}])},[_c('el-form',{attrs:{\"label-width\":\"120px\"}},[_c('el-form-item',{attrs:{\"label\":\"链/币种\"}},[_c('el-cascader',{staticStyle:{\"width\":\"100%\"},attrs:{\"options\":_vm.options},model:{value:(_vm.payDialog.value),callback:function ($$v) {_vm.$set(_vm.payDialog, \"value\", $$v)},expression:\"payDialog.value\"}})],1)],1)],1),_c('el-dialog',{attrs:{\"visible\":_vm.noticeDialog.visible,\"width\":\"680px\",\"title\":\"下单须知\",\"show-close\":false,\"close-on-click-modal\":false,\"close-on-press-escape\":false},on:{\"update:visible\":function($event){return _vm.$set(_vm.noticeDialog, \"visible\", $event)}},scopedSlots:_vm._u([{key:\"footer\",fn:function(){return [_c('el-button',{attrs:{\"type\":\"primary\",\"disabled\":_vm.noticeDialog.countdown > 0},on:{\"click\":_vm.handleNoticeAcknowledge}},[_vm._v(\" 同意并下单\"+_vm._s(_vm.noticeDialog.countdown > 0 ? `(${_vm.noticeDialog.countdown}s)` : '')+\" \")])]},proxy:true}])},[_c('div',{staticClass:\"notice-content\"},[_c('p',{staticClass:\"notice-title\"},[_vm._v(\"尊敬的客户,感谢您选择我们的服务。在您下单前,请务必仔细阅读并完全理解以下须知条款。一旦您点击\\\" 同意并下单\\\"或完成支付流程,即视为您已充分阅读、理解并同意接受本须知的全部内容约束。\")]),_c('ol',{staticClass:\"notice-list\"},[_c('li',[_c('b',[_vm._v(\"预授权冻结:\")]),_vm._v(\"为保障订单顺利执行,在下单成功后,系统将立即对您数字钱包或账户中与订单全款总额等值的资金进行预授权冻结。此操作并非即时划转,而是为确保您有足够的资金用于每日支付。\")]),_c('li',[_c('b',[_vm._v(\"每日结算支付:\")]),_vm._v(\"本服务采用\\\"按日结算\\\"模式。冻结的资金将根据租赁协议约定的每日费用,每日自动划转相应的金额给卖家。划转操作通常在每个UTC日结束时自动执行。\")]),_c('li',[_c('b',[_vm._v(\"资金解冻:\")]),_vm._v(\"当租赁服务到期或因其他原因终止后,系统中剩余的、未被划转的冻结资金将立即解除冻结,并返还至您的可用余额中。\")]),_c('li',[_c('b',[_vm._v(\"订单生效:\")]),_vm._v(\" 您的订单在支付流程完成且资金成功冻结后立即生效。系统将开始为您配置相应的矿机或算力资源。\")]),_c('li',[_c('b',[_vm._v(\"不可取消政策:\")]),_vm._v(\" 鉴于算力服务一经提供即无法退回的特性,所有订单一旦生效,即不可取消、不可退款、不可转让。您无法在租赁期内单方面中止服务或要求退还已冻结及已支付的费用。\")]),_c('li',[_c('b',[_vm._v(\"免责声明:\")]),_vm._v(\"因不可抗力(如自然灾害、政策变动等)导致订单延迟或无法履行,我们不承担相应责任。\")]),_c('li',[_c('b',[_vm._v(\"算力波动:\")]),_vm._v(\"您所租赁的算力产生的收益取决于区块链网络难度、全球总算力、币价波动、矿池运气等多种外部因素。我们仅提供稳定的算力输出,不对您的最终收益做出任何承诺或保证。\")])]),_c('p',{staticClass:\"notice-title\"},[_vm._v(\"再次提醒:数字资产挖矿存在较高市场风险,收益波动巨大,过去业绩不代表未来表现。请根据自身的风险承受能力谨慎决策。您下单的行为即代表您已充分了解并自愿承担所有相关风险。\")]),_c('div',{staticClass:\"notice-ack\"},[_c('el-checkbox',{staticStyle:{\"color\":\"#e74c3c\"},model:{value:(_vm.noticeDialog.checked),callback:function ($$v) {_vm.$set(_vm.noticeDialog, \"checked\", $$v)},expression:\"noticeDialog.checked\"}},[_vm._v(\"我已阅读并同意上述注意事项\")])],1)])]),_c('el-dialog',{attrs:{\"visible\":_vm.googleCodeDialog.visible,\"width\":\"480px\",\"title\":\"安全验证\",\"show-close\":false,\"close-on-click-modal\":false,\"close-on-press-escape\":false},on:{\"update:visible\":function($event){return _vm.$set(_vm.googleCodeDialog, \"visible\", $event)}},scopedSlots:_vm._u([{key:\"footer\",fn:function(){return [_c('div',{staticClass:\"dialog-footer\"},[_c('el-button',{on:{\"click\":_vm.handleGoogleCodeCancel}},[_vm._v(\"取消\")]),_c('el-button',{attrs:{\"type\":\"primary\",\"loading\":_vm.googleCodeDialog.loading,\"disabled\":!_vm.isGoogleCodeValid},on:{\"click\":_vm.handleGoogleCodeSubmit}},[_vm._v(\" \"+_vm._s(_vm.googleCodeDialog.loading ? '验证中...' : '确认验证')+\" \")])],1)]},proxy:true}])},[_c('div',{staticClass:\"google-code-content\"},[_c('div',{staticClass:\"verification-icon\"},[_c('i',{staticClass:\"el-icon-lock\",staticStyle:{\"font-size\":\"48px\",\"color\":\"#409EFF\"}})]),_c('div',{staticClass:\"verification-title\"},[_c('h3',[_vm._v(\"请输入谷歌验证码\")]),_c('p',{staticClass:\"verification-desc\"},[_vm._v(\"为了保障您的账户安全,请输入您的谷歌验证器中的6位验证码\")])]),_c('div',{staticClass:\"code-input-wrapper\"},[_c('el-input',{ref:\"googleCodeInput\",staticClass:\"code-input\",attrs:{\"placeholder\":\"请输入6位验证码\",\"maxlength\":\"6\",\"size\":\"large\"},on:{\"input\":_vm.handleGoogleCodeInput},nativeOn:{\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.handleGoogleCodeSubmit.apply(null, arguments)}},scopedSlots:_vm._u([{key:\"prepend\",fn:function(){return [_c('i',{staticClass:\"el-icon-key\"})]},proxy:true}]),model:{value:(_vm.googleCodeDialog.code),callback:function ($$v) {_vm.$set(_vm.googleCodeDialog, \"code\", $$v)},expression:\"googleCodeDialog.code\"}})],1),(_vm.googleCodeDialog.error)?_c('div',{staticClass:\"code-error\"},[_c('i',{staticClass:\"el-icon-warning\"}),_c('span',[_vm._v(_vm._s(_vm.googleCodeDialog.error))])]):_vm._e()])])],1),_c('el-dialog',{attrs:{\"visible\":_vm.settlementSuccessfulVisible,\"width\":\"480px\",\"append-to-body\":\"\",\"close-on-click-modal\":false,\"close-on-press-escape\":false},on:{\"update:visible\":function($event){_vm.settlementSuccessfulVisible=$event},\"close\":_vm.handleCloseSuccessDialog},scopedSlots:_vm._u([{key:\"footer\",fn:function(){return [_c('el-button',{attrs:{\"type\":\"primary\"},on:{\"click\":_vm.handleCloseSuccessDialog}},[_vm._v(\"已知晓\")])]},proxy:true}])},[_c('div',{staticStyle:{\"text-align\":\"center\",\"padding\":\"20px 0\"}},[_c('div',{staticStyle:{\"font-size\":\"48px\",\"color\":\"#52c41a\",\"margin-bottom\":\"16px\"}},[_vm._v(\"✓\")]),_c('div',{staticStyle:{\"font-size\":\"18px\",\"color\":\"#333\",\"margin-bottom\":\"12px\"}},[_vm._v(\"请求结算处理成功\")]),_c('div',{staticStyle:{\"color\":\"#666\",\"line-height\":\"1.6\"}},[_vm._v(\" 请在订单列表页面查看结算状态\"),_c('br'),_vm._v(\" 结算成功会自动更新钱包余额 \")])])])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n ","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./header.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./header.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./header.vue?vue&type=template&id=20c969ee&scoped=true\"\nimport script from \"./header.vue?vue&type=script&lang=js\"\nexport * from \"./header.vue?vue&type=script&lang=js\"\nimport style0 from \"./header.vue?vue&type=style&index=0&id=20c969ee&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"20c969ee\",\n null\n \n)\n\nexport default component.exports","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdO = {};","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t524: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkpower_leasing\"] = self[\"webpackChunkpower_leasing\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [504], function() { return __webpack_require__(1406); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["component","_coinList","require","_products","exports","name","data","notOnlySpaces","rule","value","callback","trim","length","Error","containsEmoji","text","emojiPattern","test","noEmoji","submitting","form","type","coin","description","image","state","shopId","rules","required","message","trigger","validator","min","max","computed","coinOptions","coinList","label","created","$route","query","Number","methods","fetchAddProduct","params","res","createProduct","code","$message","msg","showClose","$router","push","handleSubmit","valid","$refs","productForm","validate","error","console","handleReset","resetFields","handleCancel","_order","_OrderList","_interopRequireDefault","components","OrderList","active","orders","loading","urlStatus","status","String","savedStatus","localStorage","getItem","initial","fetchOrders","fetchCancelOrder","cancelOrder","handleCancelOrder","orderId","handleTabClick","tab","setItem","e","warn","key","getOrdersByStatus","payload","list","Array","isArray","rows","$set","log","initNoEmojiGuard","window","__noEmojiGuardInitialized","isEditableTarget","el","Element","getAttribute","tag","tagName","toLowerCase","disallow","indexOf","setComposing","composing","__noEmojiComposing","isComposing","sanitizeAndRedispatch","target","before","selectionStart","selectionEnd","after","replace","removed","nextPos","Math","setSelectionRange","evt","Event","bubbles","dispatchEvent","document","addEventListener","_machine","product","ranges","machineList","productId","confirmVisible","stateSnapshot","fieldSnapshot","updateLoading","id","fetchDetail","fetchMachineList","isRowDisabled","row","saleState","handleOpenConfirm","warning","getMachineInfoById","productMachineRangeList","getMachineListForUpdate","refreshStateSnapshot","refreshFieldSnapshot","snapshot","i","theoryPower","powerDissipation","price","maxLeaseDays","isCellChanged","snap","current","original","restoreStateSnapshot","currentRow","prevState","updateMachineList","updateMachine","success","deleteMachine","handleTheoryPowerInput","index","rowItem","v","firstDot","slice","endsWithDot","endsWith","parts","split","intPart","decPart","handleNumericCell","d","handlePriceBlur","raw","pattern","handleMaxLeaseDaysInput","handleMaxLeaseDaysBlur","n","isInteger","handleTheoryPowerBlur","handlePowerDissipationBlur","handleTypeCell","handleStateChange","handleDeleteMachine","$confirm","confirmButtonText","cancelButtonText","handleSubmitMachines","powerPattern","pricePattern","isOnlySpaces","rowLabel","miner","theoryRaw","priceRaw","typeRaw","dissRaw","daysRaw","map","m","unit","handleBack","back","_request","addSingleOrBatchMachine","request","url","method","getUserMachineList","getUserMinersList","activeIndex","userEmail","activeRole","buyerLinks","to","sellerLinks","userInitial","email","toUpperCase","displayedLinks","mounted","getVal","JSON","parse","val","savedRole","setActiveRoleByRoute","handleClickRole","role","stringify","firstPath","path","qFrom","from","sessionStorage","buyerPrefixes","sellerPrefixes","shouldBuyer","some","p","shouldSeller","isActiveLink","pathLike","prefixes","watch","immediate","handler","_vm","this","_c","_self","staticClass","_m","staticStyle","attrs","on","handleClear","nativeOn","$event","_k","keyCode","handleSearch","apply","arguments","model","searchKeyword","$$v","expression","_v","directives","rawName","tableData","scopedSlots","_u","fn","scope","_s","handleView","handleEdit","handleDelete","handleAddMachine","total","pagination","pageNum","pageSize","handleSizeChange","handleCurrentChange","editDialog","visible","saving","handleSaveEdit","proxy","ref","_e","_vue","_App","_router","_store","_elementUi","_noEmojiGuard","Vue","config","productionTip","use","ElementUI","router","store","render","h","App","$mount","_cartManager","_index","mixins","Index","handleAddToCart","addToCart","title","quantity","_shops","hasEmoji","str","emojiRegex","fetchAddShop","getAddShop","handleDescriptionInput","substring","handleCreate","hasShop","detail","load","paramsId","getOwnedById","formatDateTime","includes","class","preventDefault","_l","item","getOrdersByStatusForSeller","openCreateWallet","walletList","w","fromChain","chain","fromSymbol","walletBalance","balance","displaySymbol","slot","blockedBalance","handleWithdraw","recentTransactions","transaction","time","statusTagType","statusText","amount","amountText","rechargeDialogVisible","resetRechargeForm","WalletData","toString","fromAddress","copyAddress","withdrawDialogVisible","resetWithdrawForm","withdrawForm","withdrawRules","toChain","displayWithdrawSymbol","handleAmountInput","totalBalance","availableWithdrawBalance","fee","actualAmount","toAddress","handleGoogleCodeInput","googleCode","withdrawLoading","confirmWithdraw","createDialogVisible","options","createValue","createLoading","confirmCreateWallet","order","orderNumber","getOrderStatusText","totalPrice","createTime","items","textAlign","_wallet","recharge","withdraw","consume","rechargeRows","withdrawRows","consumeRows","expandedKeys","Set","pageSizes","currentPage","getStatusByTab","loadList","handleTab","pane","clear","tabName","getRowKey","idx","indexPart","stable","__key","txHash","updateTime","isExpanded","has","toggleExpand","add","typeKey","getTypeKeyByStatus","transactionRecord","mapped","r","loadByStatus","getTabByStatus","loadRecharge","loadWithdraw","loadConsume","statusClass","getRechargeStatusType","s","getRechargeStatusText","getWithdrawStatusType","getWithdrawStatusText","getPayStatusType","getPayStatusText","formatChain","tron","trx","eth","ethereum","bsc","polygon","matic","formatFullTime","Date","toLocaleString","formatTime","formatTrunc","decimals","num","isFinite","factor","pow","truncated","trunc","padded","padEnd","formatDec6","undefined","toFixed","match","handleCopy","navigator","clipboard","writeText","ta","createElement","style","position","left","body","appendChild","focus","select","execCommand","removeChild","activeTab","pendingRecharges","refreshData","showDetail","getChainName","getStatusText","formatAddress","address","successRecharges","failedRecharges","detailDialogVisible","closeDetail","selectedItem","getStatusType","loaded","defaultCover","shop","del","visibleEdit","editForm","shopConfigs","visibleConfigEdit","configForm","chainLabel","chainValue","payAddress","payCoins","payCoin","productOptions","editCoinOptionsApi","chainOptions","shopLoading","shopStateText","shopStateTagType","canCreateShop","editCoinOptions","selectedCoinLabels","Map","o","get","fetchMyShop","resetShopState","getMyShop","fetchShopConfigs","getShopConfig","updateShopConfig","deleteShopConfig","handleEditConfig","getChainAndCoin","children","c","preSelected","filter","hasBind","join","payCoinStr","handleDeleteConfig","submitConfigEdit","addr","removeSelectedCoin","labelUpper","handleOpenEdit","queryShop","submitEdit","updateShop","deleteShop","setTimeout","handleToggleShop","isClosed","confirmMsg","closeShop","handleGoNew","handleAddProduct","handleWalletBind","props","default","emptyText","showCheckout","Boolean","onCancel","Function","payLoading","orderDialog","qrContent","dialogVisible","paymentDialog","payAmount","noPayAmount","img","safeItems","buildQrSrc","startsWith","handleCheckout","handleGoDetail","curPath","then","catch","shouldShowActions","productName","cost","miners","minersLoading","selectedMiner","machineOptions","machinesLoading","selectedMachines","selectedMachineRows","lastCostBaseline","lastTypeBaseline","lastMaxLeaseDaysBaseline","lastPowerDissipationBaseline","lastTheoryPowerBaseline","lastUnitBaseline","productMachineURDVos","fetchMiners","handleNumeric","syncMaxLeaseDaysToRows","syncCostToRows","handleTypeInput","newCost","oldBaseline","priceNum","updateMachineType","updateSelectedMachineRows","forEach","set","nextRows","minerId","existed","find","user","realPower","syncPowerDissipationToRows","newVal","rowNum","syncTheoryPowerToRows","syncUnitToRows","newUnit","rowUnit","handleRowPowerDissipationInput","handleRowPowerDissipationBlur","handleRowTheoryPowerInput","handleRowTheoryPowerBlur","handleRowUnitChange","handleRowMaxLeaseDaysInput","handleRowMaxLeaseDaysBlur","handleRowPriceInput","handleRowPriceBlur","handleRowTypeInput","handleRowTypeBlur","handleToggleState","currentState","Object","keys","coinKey","arr","additionalProperties1","handleMinerChange","userMinerVo","handleSave","ok","machineForm","invalidTypeRowIndex","findIndex","rawDays","doSubmit","duration","productRoutes","Promise","resolve","_interopRequireWildcard2","meta","allAuthority","cartRoutes","checkoutRoutes","accountRoutes","redirect","childrenRoutes","mainRoutes","addOrders","getOrdersByIds","getChainAndListForSeller","getCoinPrice","realAmount","page","range","keyword","expandedRowKeys","fetchList","withKeys","it","__rowKey","handleRowClick","isOpen","handleExpandChange","expandedRows","getRowClassName","copy","area","handleRangeChange","sellerReceiptList","_productService","_shoppingCart","selectedMap","confirmAddDialog","cartMachineIdSet","cartCompositeKeySet","cartLoaded","machinesLoaded","productListData","productDetailLoading","fetchGetMachineInfo","fetchGetGoodsList","getMachineInfo","paymentMethodList","payConfigList","machineRangeInfoList","group","fallbackId","groupId","onlyKey","productMachineRangeGroupDto","firstMachineId","productMachines","normalizedMachines","leaseTime","_selected","$nextTick","loadProduct","getProductById","fetchAddCart","addCart","getGoodsList","rawRows","groups","shoppingCartInfoDtoList","flatMap","matched","g","ids","compositeKeys","productMachineDtoList","totalCount","reduce","sum","CustomEvent","count","autoSelectAndDisable","handleSeriesRowClick","lockedIds","k","opened","handleGetSeriesRowClassName","handleInnerSelectionChange","parentRow","selections","openedSet","isSelectable","isSelectedByParent","handleManualSelect","checked","splice","handleGetInnerRowClass","handleDecreaseVariantQuantity","groupIndex","variantIndex","variants","handleIncreaseVariantQuantity","handleVariantQuantityInput","q","handleAddVariantToCart","variant","handleAddSelectedToCart","allSelected","values","flat","handleOpenAddToCartDialog","pickedAll","picked","clearAllSelections","handleConfirmAddSelectedToCart","productMachineId","handleDecreaseQuantity","rowIndex","handleIncreaseQuantity","handleQuantityInput","handleQuantityBlur","rowData","date","userId","orderItemId","purchasedComputingPower","startTime","endTime","currentComputingPower","currentIncome","currentUsdtIncome","estimatedEndIncome","estimatedEndUsdtIncome","currentChain","cascaderProps","multiple","checkStrictly","emitPath","getChainAndList","handleRemoveSelectedCoin","coinUpper","next","handleChange","handleItemClick","node","isLeaf","last","lastChain","expanded","expand","nodes","validateAddressByChain","toUpperOptions","src","FetchAddWalletShopConfig","addWalletShopConfig","targetChain","filtered","selectedCoinsDisplay","coins","selectedCoins","LoadingManager","constructor","loadingStates","setupListeners","resetAllLoadingStates","setLoading","componentId","stateKey","timestamp","now","getLoading","componentsToUpdate","resetComponentLoadingStates","loadingManager","_vuex","Vuex","Store","getters","mutations","actions","modules","stopPropagation","toSymbol","addShopConfig","_axios","_errorCode","_loadingManager","_errorNotificationManager","pendingRequestMap","getRequestKey","service","axios","create","baseURL","process","timeout","RETRY_WINDOW","pendingRequests","lastNetworkStatusTime","online","offline","networkRecoveryInProgress","vm","$i18n","t","toLocaleTimeString","pendingPromises","async","response","delete","allSettled","commonLoadingProps","prop","errorNotificationManager","canShowError","defaults","retry","retryDelay","shouldRetry","superReportError","interceptors","token","headers","propName","part","encodeURIComponent","subPart","requestKey","cancel","cancelToken","CancelToken","reject","errorCode","removeItem","MessageBox","confirm","distinguishCancelAndClose","closeOnClickModal","locale","Message","dangerouslyUseHTMLString","Notification","onLine","__retryCount","minerChartLoading","reportBlockLoading","retryCount","substr","rechargeRecords","totalPage","statusFilter","loadRechargeRecords","balanceRechargeList","records","chainNames","statusTypeMap","timeStr","diff","floor","toLocaleDateString","fallbackCopyAddress","textArea","err","viewOnExplorer","explorers","open","statusMap","$index","deleteBatchGoods","deleteBatchGoodsForIsDelete","STORAGE_KEY","readCart","parsed","writeCart","cart","updateQuantity","removeFromCart","clearCart","computeSummary","totalQuantity","cur","mainNavigation","icon","breadcrumbConfig","getBreadcrumb","checkRoutePermission","route","userPermissions","requiredPermissions","permission","getPageTitle","getPageDescription","initOptions","fetchTableData","fetchMachineInfo","coinParam","algorithmParam","lower","hitCoin","$alert","center","closeOnPressEscape","location","href","algorithm","getProductList","notEmpty","updateProduct","deleteProduct","size","getWalletInfo","withdrawBalance","balanceWithdrawList","bindWallet","getRecentlyTransaction","_wallet2","qrCodeGenerated","validateWithdrawAmount","validateAddress","validateGoogleCode","tokenOptions","availableTokens","amountInt","toScaledInt","feeInt","result","formatDec6FromInt","available","parseFloat","blocked","sym","fetchWalletInfo","updateFeeByChain","fetchRecentlyTransaction","walletInfo","generateQRCode","rawAmt","amt","signAmt","abs","typeLabel","statusTextMap","statusTagTypeMap","formatApiTime","amountStr","normalized","re","RegExp","scale","round","decPartRaw","scaledIntToString","intVal","sign","padStart","first","fetchBalanceRechargeList","requestParams","fetchBalanceWithdrawList","handleRecharge","wallet","symbol","addressToCopy","qrcode","qrContainer","qrCodeRef","innerHTML","alt","width","height","borderRadius","onerror","onChainChange","hasUSDT","walletCharge","charge","feeMap","clearValidate","totalRequired","availableBalance","balanceInt","totalText","isValid","addTransactionRecord","getFullYear","getMonth","getDate","getHours","getMinutes","unshift","navigation","nav","cartItemCount","decryptData","encryptedText","secretKey","encrypted","atob","decrypted","fromCharCode","charCodeAt","getDecryptedParams","urlParams","URLSearchParams","search","encryptedData","language","username","source","version","sensitiveData","decryptedJson","leasEmail","performAutoLogin","setLanguage","cartItems","phone","note","errors","summary","loadCart","validateForm","customer","toISOString","priceRange","computingPower","ErrorNotificationManager","recentErrors","throttleTime","errorTypes","getErrorType","entries","errorType","lastTime","cleanup","comHeard","appMain","getRowMaxLeaseDays","maxLeaseDay","max_lease_days","handleLeaseDaysChange","formatPayTooltip","payChain","handlePayIconKeyDown","debug","products","listProducts","getOwnedList","withdrawalRecords","pendingWithdrawals","successWithdrawals","failedWithdrawals","loadWithdrawalRecords","outer","orderItemDtoList","payCoinImage","theoryPowerRange","computingPowerRange","powerRange","number","shops","selectedGroups","selectedMachinesMap","confirmDialog","expandedGroupKeys","expandedShopKeys","creatingOrder","successDialog","noticeDialog","countdown","noticeTimer","pendingCheckoutShop","googleCodeDialog","payDialog","selectedChain","selectedCoin","selectedPrice","clearOffLoading","settlementSuccessfulVisible","isAllSelected","isCartEmpty","hasShops","hasGroups","selectedMachineCount","selectedTotal","accumulate","canCheckout","isGoogleCodeValid","payCoinSymbol","startNoticeCountdown","reapplySelectionsForPendingShop","clearInterval","beforeDestroy","toCents","parseInt","decRaw","decTwo","cents","centsToText","isRowSelectable","isOnShelf","getRowMaxLeaseDaysLocal","fetchChainAndListForSeller","labelSrc","getAllGroups","computeShopTotal","totalCents","priceCents","days","computeShopTotalDisplay","backendVal","hasBackend","modified","orig","_origLeaseTime","buildDeletePayload","machineId","fetchAddOrders","orderInfoVoList","fetchDeleteBatchGoods","apiDeleteBatchGoods","handleClearOffShelf","toUpperText","handleOuterExpandChange","handleShopExpandChange","applyInnerSelectionFromSet","withShopKeys","sIdx","sp","handleGroupSelectionChange","handleGroupSelectionChangeForShop","applyInnerSelection","shouldSelectAll","inner","clearSelection","toggleRowSelection","handleShopInnerSelectionChange","selIds","toggleSelectAll","table","outerTable","calcGroupTotal","countMachines","handleCheckoutShop","machines","selectedSet","onShelfMachines","executeCheckout","dataStr","handleCheckoutSelected","handleRemoveSelectedMachines","confirmPay","showGoogleCodeDialog","handleCloseSuccessDialog","setInterval","handleNoticeAcknowledge","openPaySelectDialog","handlePayConfirm","showConfirmDialog","selectedIds","baseUnit","leaseDays","isUSDT","unitPrice","subtotal","googleCodeInput","handleGoogleCodeSubmit","handleGoogleCodeCancel","handleLeaseTimeChange","machine","handleLeaseTimeInput","numValue","isNaN","handleProductExpandChange","selectedRows","selection","isSelected","isProductSelected","productListLoading","handleCurrencyChange","handleCurrencyClear","screenCurrency","currencyList","imgUrl","handleAlgorithmClear","handleAlgorithmSearch","searchAlgorithm","handleProductClick","formatPriceRange","saleNumber","powerList","show","fetchGetList","input","lo","hi","_truncate2","two","req","script","_vueRouter","_routes","VueRouter","mode","base","routes","beforeEach","onError","domProps","one","getList","shopScope","sels","theoryIncome","_navigation","cartServerCount","breadcrumbs","handleStorageChange","loadServerCartCount","handleCartUpdated","removeEventListener","primary","event","handleLogout","getBreadcrumbPath","paths","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","module","__webpack_modules__","call","amdO","deferred","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","j","every","definition","defineProperty","enumerable","globalThis","obj","prototype","hasOwnProperty","Symbol","toStringTag","nmd","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","self","bind","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file