mirror of
https://github.com/nagisa77/OpenIsle.git
synced 2026-04-21 03:17:28 +08:00
feat: 处理编译问题
This commit is contained in:
74
frontend_nuxt/composables/useToast.js
Normal file
74
frontend_nuxt/composables/useToast.js
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
// 导出一个便捷的 toast 对象
|
||||||
|
export const toast = {
|
||||||
|
success: async (message) => {
|
||||||
|
if (process.client) {
|
||||||
|
try {
|
||||||
|
const { useToast } = await import('vue-toastification')
|
||||||
|
const toastInstance = useToast()
|
||||||
|
toastInstance.success(message)
|
||||||
|
} catch (error) {
|
||||||
|
console.warn('Toast not available:', error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error: async (message) => {
|
||||||
|
if (process.client) {
|
||||||
|
try {
|
||||||
|
const { useToast } = await import('vue-toastification')
|
||||||
|
const toastInstance = useToast()
|
||||||
|
toastInstance.error(message)
|
||||||
|
} catch (error) {
|
||||||
|
console.warn('Toast not available:', error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
warning: async (message) => {
|
||||||
|
if (process.client) {
|
||||||
|
try {
|
||||||
|
const { useToast } = await import('vue-toastification')
|
||||||
|
const toastInstance = useToast()
|
||||||
|
toastInstance.warning(message)
|
||||||
|
} catch (error) {
|
||||||
|
console.warn('Toast not available:', error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
info: async (message) => {
|
||||||
|
if (process.client) {
|
||||||
|
try {
|
||||||
|
const { useToast } = await import('vue-toastification')
|
||||||
|
const toastInstance = useToast()
|
||||||
|
toastInstance.info(message)
|
||||||
|
} catch (error) {
|
||||||
|
console.warn('Toast not available:', error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出 useToast composable
|
||||||
|
export const useToast = () => {
|
||||||
|
if (process.client) {
|
||||||
|
return new Promise(async (resolve) => {
|
||||||
|
try {
|
||||||
|
const { useToast: useVueToast } = await import('vue-toastification')
|
||||||
|
resolve(useVueToast())
|
||||||
|
} catch (error) {
|
||||||
|
console.warn('Toast not available:', error)
|
||||||
|
resolve({
|
||||||
|
success: () => {},
|
||||||
|
error: () => {},
|
||||||
|
warning: () => {},
|
||||||
|
info: () => {}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return Promise.resolve({
|
||||||
|
success: () => {},
|
||||||
|
error: () => {},
|
||||||
|
warning: () => {},
|
||||||
|
info: () => {}
|
||||||
|
})
|
||||||
|
}
|
||||||
@@ -5,28 +5,5 @@ export const GITHUB_CLIENT_ID = 'Ov23liVkO1NPAX5JyWxJ'
|
|||||||
export const DISCORD_CLIENT_ID = '1394985417044000779'
|
export const DISCORD_CLIENT_ID = '1394985417044000779'
|
||||||
export const TWITTER_CLIENT_ID = 'ZTRTU05KSk9KTTJrTTdrVC1tc1E6MTpjaQ'
|
export const TWITTER_CLIENT_ID = 'ZTRTU05KSk9KTTJrTTdrVC1tc1E6MTpjaQ'
|
||||||
|
|
||||||
// 导入真实的 toast 功能
|
// 重新导出 toast 功能,使用 composable 方式
|
||||||
import { useToast } from 'vue-toastification'
|
export { toast } from './composables/useToast'
|
||||||
|
|
||||||
// 创建一个全局的 toast 实例
|
|
||||||
let toastInstance = null
|
|
||||||
|
|
||||||
// 初始化 toast 实例的函数
|
|
||||||
export const initToast = () => {
|
|
||||||
if (!toastInstance) {
|
|
||||||
toastInstance = useToast()
|
|
||||||
}
|
|
||||||
return toastInstance
|
|
||||||
}
|
|
||||||
|
|
||||||
// 导出 toast 对象,提供 success 和 error 方法
|
|
||||||
export const toast = {
|
|
||||||
success: (message) => {
|
|
||||||
const toast = initToast()
|
|
||||||
toast.success(message)
|
|
||||||
},
|
|
||||||
error: (message) => {
|
|
||||||
const toast = initToast()
|
|
||||||
toast.error(message)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,13 +1,22 @@
|
|||||||
import { defineNuxtPlugin } from '#app'
|
import { defineNuxtPlugin } from '#app'
|
||||||
import Toast, { POSITION } from 'vue-toastification'
|
|
||||||
import 'vue-toastification/dist/index.css'
|
import 'vue-toastification/dist/index.css'
|
||||||
import '~/assets/toast.css'
|
import '~/assets/toast.css'
|
||||||
|
|
||||||
export default defineNuxtPlugin(nuxtApp => {
|
export default defineNuxtPlugin(async (nuxtApp) => {
|
||||||
nuxtApp.vueApp.use(Toast, {
|
// 确保只在客户端环境中注册插件
|
||||||
position: POSITION.TOP_RIGHT,
|
if (process.client) {
|
||||||
containerClassName: 'open-isle-toast-style-v1',
|
try {
|
||||||
transition: 'Vue-Toastification__fade',
|
// 使用动态导入来避免 CommonJS 模块问题
|
||||||
timeout: 2000,
|
const { default: Toast, POSITION } = await import('vue-toastification')
|
||||||
})
|
|
||||||
|
nuxtApp.vueApp.use(Toast, {
|
||||||
|
position: POSITION.TOP_RIGHT,
|
||||||
|
containerClassName: 'open-isle-toast-style-v1',
|
||||||
|
transition: 'Vue-Toastification__fade',
|
||||||
|
timeout: 2000,
|
||||||
|
})
|
||||||
|
} catch (error) {
|
||||||
|
console.warn('Failed to load vue-toastification:', error)
|
||||||
|
}
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user