From 71c8ed68b37002a8f4979e0c0a70fdae2410daf8 Mon Sep 17 00:00:00 2001 From: tianfeng <769204422@qq.com> Date: Wed, 20 Aug 2025 19:37:43 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E7=A4=BA=E6=96=87=E6=A1=88=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.development | 2 +- src/components/Toast.vue | 255 ++++++++++++++++++++++++++++ src/utils/toast.js | 106 ++++++++++++ src/views/AgencyCenterView.vue | 3 +- src/views/ApplyView.vue | 13 +- src/views/CoinSellerView.vue | 13 +- src/views/ExchangeGoldCoinsView.vue | 19 ++- src/views/HostCenterView.vue | 3 +- src/views/HostSettingView.vue | 5 +- src/views/InviteMembersView.vue | 48 ------ src/views/MessageView.vue | 13 +- src/views/SearchPayeeView.vue | 5 +- src/views/TeamMemberView.vue | 3 +- src/views/TransferView.vue | 17 +- 14 files changed, 414 insertions(+), 91 deletions(-) create mode 100644 src/components/Toast.vue create mode 100644 src/utils/toast.js diff --git a/.env.development b/.env.development index 64ad3f6..debf8f5 100644 --- a/.env.development +++ b/.env.development @@ -4,7 +4,7 @@ VITE_API_BASE_URL=https://api.likeichat.com VITE_APP_TITLE=Likei H5 (Development) # 普通用户 -VITE_USER_AUTH=03FF1925725628BD5319BAF8CAC4B1C8.djIlM0ExOTU0MDU5NzkzOTYzMzkzMDI1JTNBTElLRUklM0ExNzU4MTgwNjE1ODAxJTNBMTc1NTU4ODYxNTgwMQ== +VITE_USER_AUTH=657DB83B46ED88A0384D8FA9D83C1BA7.djIlM0ExOTU0MDU5NzkzOTYzMzkzMDI1JTNBTElLRUklM0ExNzU4Mjc1MTUwMzQ2JTNBMTc1NTY4MzE1MDM0Ng== # 代理用户 8826603 # VITE_USER_AUTH=747E27BE38B21A129CE41BB1F80EA924.djIlM0ExOTU3MzU2MTM4NTIzMDY2MzY5JTNBTElLRUklM0ExNzU4MDk3MDg4NDA0JTNBMTc1NTUwNTA4ODQwNA== diff --git a/src/components/Toast.vue b/src/components/Toast.vue new file mode 100644 index 0000000..ae9f999 --- /dev/null +++ b/src/components/Toast.vue @@ -0,0 +1,255 @@ + + + + + diff --git a/src/utils/toast.js b/src/utils/toast.js new file mode 100644 index 0000000..dab1618 --- /dev/null +++ b/src/utils/toast.js @@ -0,0 +1,106 @@ +import { createApp } from 'vue' +import ErrorModal from '../components/Toast.vue' + +class ErrorModalManager { + constructor() { + this.instances = [] + } + + // 显示错误弹框 + show(message, options = {}) { + const container = document.createElement('div') + document.body.appendChild(container) + + const app = createApp(ErrorModal, { + message, + ...options, + onConfirm: () => { + if (options.onConfirm) { + options.onConfirm() + } + this.cleanup(app, container) + }, + onClose: () => { + if (options.onClose) { + options.onClose() + } + this.cleanup(app, container) + } + }) + + const instance = app.mount(container) + this.instances.push(app) + + return { + close: () => instance.close(), + instance + } + } + + // 清理DOM和实例 + cleanup(app, container) { + setTimeout(() => { + if (container && container.parentNode) { + container.parentNode.removeChild(container) + } + app.unmount() + + // 从实例列表中移除 + const index = this.instances.indexOf(app) + if (index > -1) { + this.instances.splice(index, 1) + } + }, 100) + } + + // 关闭所有弹框 + closeAll() { + this.instances.forEach(app => { + const instance = app._instance + if (instance && instance.exposed && instance.exposed.close) { + instance.exposed.close() + } + }) + this.instances = [] + } +} + +// 创建全局实例 +export const errorModal = new ErrorModalManager() + +// 快捷方法 - 替代alert +export const showError = (message, title = 'Error') => { + return errorModal.show(message, { title }) +} + +// 错误处理的专用方法 +export const handleError = (error) => { + let message = 'An unknown error occurred' + let title = 'Error' + + if (error.errorCode === 1083) { + title = 'Service Unavailable' + message = 'Exchange function is not available' + } else if (error.message && error.message.includes('HTTP Error: 406')) { + title = 'Request Not Acceptable' + message = 'Something went wrong, please retry.' + } else if (error.message) { + message = error.message + } + + return errorModal.show(message, { title }) +} + +// 确认对话框 +export const showConfirm = (message, title = 'Confirm') => { + return new Promise((resolve) => { + errorModal.show(message, { + title, + confirmText: 'Confirm', + onConfirm: () => resolve(true), + onClose: () => resolve(false) + }) + }) +} + +export default errorModal diff --git a/src/views/AgencyCenterView.vue b/src/views/AgencyCenterView.vue index 0b8554f..38ec33f 100644 --- a/src/views/AgencyCenterView.vue +++ b/src/views/AgencyCenterView.vue @@ -157,6 +157,7 @@ import MobileHeader from '../components/MobileHeader.vue' import { get } from '../utils/http.js' import {getBankBalance} from "@/api/wallet.js"; import {getTeamId} from "@/utils/userStore.js"; +import {showError} from "@/utils/toast.js"; const router = useRouter() @@ -266,7 +267,7 @@ const fetchBankBalance = async () => { console.error('Failed to fetch bank balance:', error) salaryInfo.currentSalary = 0.00 // 可以显示错误提示 - alert('Failed to load balance. Please try again.') + showError('Failed to load balance. Please try again.') } } diff --git a/src/views/ApplyView.vue b/src/views/ApplyView.vue index 0852be1..27eaa2d 100644 --- a/src/views/ApplyView.vue +++ b/src/views/ApplyView.vue @@ -69,7 +69,7 @@ Pending -