Compare commits

...
33 Commits
Author SHA1 Message Date
Hooray b504024ddc chore: release v6.2.0 2026-06-12 23:40:53 +08:00
Hooray a2ee25e900 chore: 移除/更换部分三方插件示例 2026-06-12 23:16:33 +08:00
Hooray bf27f7f980 refactor: 更新页面重载逻辑以支持 Ctrl/⌘ 键 2026-06-12 23:10:06 +08:00
Hooray 699b6d5e4e refactor: 修改 Router 接口为 _RouterClassic 以支持扩展语法 2026-06-12 23:09:00 +08:00
Hooray c61a9caa44 chore: 更新依赖 2026-06-12 20:47:04 +08:00
Hooray 24348a70b2 chore: 更新主页 One-step Console 介绍 2026-06-11 12:26:11 +08:00
Hooray c7dc819d06 docs: readme 2026-06-10 23:20:54 +08:00
Hooray c0cd2ffc9f feat(descriptions): 新增 FaDescriptions 组件及示例 2026-06-10 18:27:21 +08:00
Hooray 6ebdea493c refactor: 重构标准模块列表 2026-06-08 15:10:38 +08:00
Hooray 05e3e6141b feat(skill): 更新 fa-crud-page-generator 2026-06-08 15:08:14 +08:00
Hooray 57f98e7bb1 feat(table): 新增表格组件及示例 2026-06-08 15:00:38 +08:00
Hooray 29618d2816 style: 统一命名约定 2026-06-08 14:30:24 +08:00
Hooray 7277861ade chore: 将 lucide-vue-next 替换为 @lucide/vue,并更新相关依赖 2026-06-04 19:14:42 +08:00
Hooray f1c0258676 feat: 内建组件内的固定中文文案,改为可替换 2026-06-04 09:42:01 +08:00
Hooray 410ce626a8 feat(badge): 新增徽章组件及示例 2026-06-02 09:45:24 +08:00
Hooray 574d0fcccd feat(tag): 新增标签组件及示例 2026-06-02 09:10:20 +08:00
Hooray f6516782c0 revert!: 回滚 vite-plugin-fake-server 插件配置 2026-05-31 23:12:41 +08:00
Hooray 445e6c9e33 chore: 更新依赖 2026-05-28 15:34:55 +08:00
Hooray 2646930feb fix: 修复 Drawer 和 Modal 组件的 isClosed 状态初始化逻辑 2026-05-28 13:27:43 +08:00
Hooray eb4538c753 refactor: 将 example 中内建组件的示例,提取到子包中统一维护 2026-05-26 22:44:00 +08:00
Hooray 4e5bfb923d feat(antdv-next): 添加 AApp 组件 2026-05-22 15:12:24 +08:00
Hooray 67656e5943 chore: 移除多余代码 2026-05-18 14:12:08 +08:00
Hooray bd4bec9a9e chore: 更新依赖 2026-05-18 00:40:30 +08:00
Hooray 26b5c165e3 style: 统一表单样式 2026-05-17 16:23:45 +08:00
Hooray 58452d656c refactor: 子包里使用 createRequire 动态获取 PACKAGE_NAME 2026-05-17 13:36:38 +08:00
Hooray 749c55edbc refactor!: 重构多个子包
- 移除 unbuild --stub 模式
- faToast -> useFaToast
2026-05-17 03:54:49 +08:00
Hooray 40cab5efa3 feat(alert): 添加 FaAlert 组件 2026-05-14 13:55:57 +08:00
Hooray 5f9a01fd29 feat(FaFileUpload): 增加文件夹上传和自定义上传请求功能 2026-05-13 09:04:25 +08:00
Hooray a77416fbbe feat(FaImageUpload): 增加文件夹上传和自定义上传请求功能 2026-05-13 09:00:14 +08:00
Hooray 2302186258 refactor: 更新 CheckboxGroupOption 和 RadioGroupOption 接口,支持泛型扩展 2026-05-12 21:49:54 +08:00
Hooray f7789a4791 chore: 更新依赖 2026-05-12 01:09:31 +08:00
Hooray 474c11d9ea refactor!: 上游 vite-plugin-fake-server 插件问题修复,代码回滚 2026-05-12 01:03:31 +08:00
Hooray 5356dbeee4 chore: readme 2026-05-10 20:41:28 +08:00
884 changed files with 17784 additions and 19300 deletions
+2 -2
View File
@@ -25,7 +25,7 @@
- AI 友好的工程底座,内置多个 Skills
- 一流的技术栈:Vue 3.6 / Vite 8 / Pinia / UnoCSS / VueUse / TypeScript / ESLint / Stylelint / ...
- 自由选择喜爱的 UI 库,默认 Element Plus
- 8 套默认主题方案且可扩展,给不同行业提供专属品牌气质
- 18 套默认主题方案且可扩展,给不同行业提供专属品牌气质
- 7 款导航菜单模式,匹配产品发展的各个阶段
- 精细可控的页面保活策略
- 全方位权限验证
@@ -58,4 +58,4 @@
- [`Fantastic-startkit`](https://hooray.github.io/fantastic-startkit/) - 简单好用的 Vue3 项目启动套件
- [`Fantastic-mobile`](https://fantastic-mobile.hurui.me/) - 让你的 H5 项目拥有稳固的工程底座
- [`One-step-admin`](https://one-step-admin.hurui.me) - 干啥都快人一步的 Vue 中后台管理系统框架
- [`One-step Console`](https://one-step-admin.hurui.me) - 像导播一样编排你的工作现场
-1
View File
@@ -29,7 +29,6 @@
"eruda": "catalog:",
"es-toolkit": "catalog:",
"hotkeys-js": "catalog:",
"lucide-vue-next": "catalog:",
"mitt": "catalog:",
"nprogress": "catalog:",
"path-browserify": "catalog:",
+2 -2
View File
@@ -51,7 +51,7 @@ function handleError(error: any) {
useAppAccountStore().requestLogout()
}
else {
faToast.error('Error', {
useFaToast().error('Error', {
description: error.message,
})
}
@@ -70,7 +70,7 @@ api.interceptors.response.use(
if (typeof response.data === 'object') {
if (response.data.status === 1) {
if (response.data.error) {
faToast.warning('Warning', {
useFaToast().warning('Warning', {
description: response.data.error,
})
return Promise.reject(response.data)
@@ -32,7 +32,7 @@ const form = useForm({
const onSubmit = form.handleSubmit((values) => {
loading.value = true
appAccountStore.editPassword(values).then(async () => {
faToast.success('模拟修改成功,请重新登录')
useFaToast().success('模拟修改成功,请重新登录')
appAccountStore.logout()
}).finally(() => {
loading.value = false
@@ -61,7 +61,7 @@ const onSubmit = form.handleSubmit((values) => {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -75,7 +75,7 @@ const onSubmit = form.handleSubmit((values) => {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -89,7 +89,7 @@ const onSubmit = form.handleSubmit((values) => {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -90,7 +90,7 @@ function testAccount(account: string) {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -104,7 +104,7 @@ function testAccount(account: string) {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -63,7 +63,7 @@ const onSubmit = form.handleSubmit((values) => {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -76,11 +76,11 @@ const onSubmit = form.handleSubmit((values) => {
</template>
</FaInput>
</FormControl>
<FormDescription>
<FormDescription class="m-0">
<FaPasswordStrength :password="value" />
</FormDescription>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -94,7 +94,7 @@ const onSubmit = form.handleSubmit((values) => {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -70,7 +70,7 @@ function handleSendCaptcha() {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -81,7 +81,7 @@ function handleSendCaptcha() {
<FaInputOTP :model-value="value" :name="componentField.name" :length="6" class="border-destructive" @update:model-value="val => setValue(val)" />
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -99,7 +99,7 @@ function handleSendCaptcha() {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -80,13 +80,13 @@ export function useAppTabbar() {
const index = appTabbarStore.list.findIndex(item => item.tabId === tabId)
if (index < 0) {
flag = false
!checkOnly && faToast.warning('关闭的标签页不存在', {
!checkOnly && useFaToast().warning('关闭的标签页不存在', {
position: 'top-center',
})
}
else if (appTabbarStore.list.length <= 1) {
flag = false
!checkOnly && faToast.warning('当前只有一个标签页,不可关闭', {
!checkOnly && useFaToast().warning('当前只有一个标签页,不可关闭', {
position: 'top-center',
})
}
@@ -72,13 +72,13 @@ watch(() => route, (val) => {
function tabbarScrollTip() {
if (tabContainerRef.value?.$el.clientWidth > (tabsRef.value?.ref?.$el.clientWidth ?? 0) && !localStorage.has('tabbarScrollTip')) {
localStorage.setItem('tabbarScrollTip', '')
const tips = faToast.info('温馨提示', {
const tips = useFaToast().info('温馨提示', {
description: '标签栏数量超过展示区域范围,可以将鼠标移到标签栏上,通过鼠标滚轮滑动浏览',
position: 'top-center',
duration: Infinity,
action: {
label: '知道了',
onClick: () => faToast.dismiss(tips),
onClick: () => useFaToast().dismiss(tips),
},
})
}
@@ -8,13 +8,15 @@ const mainPage = useAppPage()
const isAnimating = ref(false)
function handleClick() {
isAnimating.value = true
mainPage.reload()
}
function handleCtrlClick() {
location.reload()
function handleClick(event: MouseEvent) {
if (event.ctrlKey && !event.altKey && !event.metaKey && !event.shiftKey) {
location.reload()
return
}
if (!event.ctrlKey && !event.altKey && !event.metaKey && !event.shiftKey) {
isAnimating.value = true
mainPage.reload()
}
}
</script>
@@ -28,7 +30,7 @@ function handleCtrlClick() {
<p>可切换为浏览器原生刷新</p>
</div>
</template>
<FaButton variant="ghost" size="icon-sm" @click.exact="handleClick" @click.ctrl.exact="handleCtrlClick" @animationend="isAnimating = false">
<FaButton variant="ghost" size="icon-sm" @click="handleClick" @animationend="isAnimating = false">
<FaIcon name="i-iconoir:refresh-double" class="size-4" :class="{ animation: isAnimating }" />
</FaButton>
</FaTooltip>
@@ -8,7 +8,7 @@ defineOptions({
const route = useRoute()
const { copy, copied } = useClipboard()
watch(copied, (val) => {
val && faToast.success('复制成功')
val && useFaToast().success('复制成功')
})
function open() {
@@ -110,7 +110,7 @@ function extendClose(router: Router) {
}
declare module 'vue-router' {
interface Router {
interface _RouterClassic {
/**
* 本方法为框架扩展语法,会同时关闭当前标签页
*
@@ -94,16 +94,6 @@ export const useAppAccountStore = defineStore('appAccount', () => {
await apiApp.passwordEdit(data)
}
// 锁屏
function lock() {
localStorage.removeItem('token')
}
// 解锁
function unlock() {
localStorage.setItem('token', token.value)
}
return {
token,
account,
@@ -115,7 +105,5 @@ export const useAppAccountStore = defineStore('appAccount', () => {
requestLogout,
getPermissions,
editPassword,
lock,
unlock,
}
})
+1 -1
View File
@@ -16,7 +16,6 @@ declare global {
const defineComponent: typeof import('vue').defineComponent
const defineStore: typeof import('pinia').defineStore
const effectScope: typeof import('vue').effectScope
const faToast: typeof import('@fantastic-admin/components').faToast
const getActivePinia: typeof import('pinia').getActivePinia
const getCurrentInstance: typeof import('vue').getCurrentInstance
const getCurrentScope: typeof import('vue').getCurrentScope
@@ -84,6 +83,7 @@ declare global {
const useFaDrawer: typeof import('@fantastic-admin/components').useFaDrawer
const useFaImagePreview: typeof import('@fantastic-admin/components').useFaImagePreview
const useFaModal: typeof import('@fantastic-admin/components').useFaModal
const useFaToast: typeof import('@fantastic-admin/components').useFaToast
const useId: typeof import('vue').useId
const useLink: typeof import('vue-router').useLink
const useModel: typeof import('vue').useModel
+10
View File
@@ -19,7 +19,9 @@ declare module 'vue' {
AppNotAllowed: typeof import('./../components/AppNotAllowed/index.vue')['default']
AppNotSupportedMobile: typeof import('./../components/AppNotSupportedMobile/index.vue')['default']
AppSystemInfo: typeof import('./../components/AppSystemInfo/index.vue')['default']
FaAlert: typeof import('@fantastic-admin/components')['FaAlert']
FaAvatar: typeof import('@fantastic-admin/components')['FaAvatar']
FaBadge: typeof import('@fantastic-admin/components')['FaBadge']
FaButton: typeof import('@fantastic-admin/components')['FaButton']
FaButtonGroup: typeof import('@fantastic-admin/components')['FaButtonGroup']
FaCard: typeof import('@fantastic-admin/components')['FaCard']
@@ -27,6 +29,7 @@ declare module 'vue' {
FaCheckboxGroup: typeof import('@fantastic-admin/components')['FaCheckboxGroup']
FaCollapsible: typeof import('@fantastic-admin/components')['FaCollapsible']
FaContextMenu: typeof import('@fantastic-admin/components')['FaContextMenu']
FaDescriptions: typeof import('@fantastic-admin/components')['FaDescriptions']
FaDivider: typeof import('@fantastic-admin/components')['FaDivider']
FaDrawer: typeof import('@fantastic-admin/components')['FaDrawer']
FaDropdown: typeof import('@fantastic-admin/components')['FaDropdown']
@@ -55,7 +58,9 @@ declare module 'vue' {
FaSelect: typeof import('@fantastic-admin/components')['FaSelect']
FaSlider: typeof import('@fantastic-admin/components')['FaSlider']
FaSwitch: typeof import('@fantastic-admin/components')['FaSwitch']
FaTable: typeof import('@fantastic-admin/components')['FaTable']
FaTabs: typeof import('@fantastic-admin/components')['FaTabs']
FaTag: typeof import('@fantastic-admin/components')['FaTag']
FaTextarea: typeof import('@fantastic-admin/components')['FaTextarea']
FaToast: typeof import('@fantastic-admin/components')['FaToast']
FaTooltip: typeof import('@fantastic-admin/components')['FaTooltip']
@@ -72,7 +77,9 @@ declare global {
const AppNotAllowed: typeof import('./../components/AppNotAllowed/index.vue')['default']
const AppNotSupportedMobile: typeof import('./../components/AppNotSupportedMobile/index.vue')['default']
const AppSystemInfo: typeof import('./../components/AppSystemInfo/index.vue')['default']
const FaAlert: typeof import('@fantastic-admin/components')['FaAlert']
const FaAvatar: typeof import('@fantastic-admin/components')['FaAvatar']
const FaBadge: typeof import('@fantastic-admin/components')['FaBadge']
const FaButton: typeof import('@fantastic-admin/components')['FaButton']
const FaButtonGroup: typeof import('@fantastic-admin/components')['FaButtonGroup']
const FaCard: typeof import('@fantastic-admin/components')['FaCard']
@@ -80,6 +87,7 @@ declare global {
const FaCheckboxGroup: typeof import('@fantastic-admin/components')['FaCheckboxGroup']
const FaCollapsible: typeof import('@fantastic-admin/components')['FaCollapsible']
const FaContextMenu: typeof import('@fantastic-admin/components')['FaContextMenu']
const FaDescriptions: typeof import('@fantastic-admin/components')['FaDescriptions']
const FaDivider: typeof import('@fantastic-admin/components')['FaDivider']
const FaDrawer: typeof import('@fantastic-admin/components')['FaDrawer']
const FaDropdown: typeof import('@fantastic-admin/components')['FaDropdown']
@@ -108,7 +116,9 @@ declare global {
const FaSelect: typeof import('@fantastic-admin/components')['FaSelect']
const FaSlider: typeof import('@fantastic-admin/components')['FaSlider']
const FaSwitch: typeof import('@fantastic-admin/components')['FaSwitch']
const FaTable: typeof import('@fantastic-admin/components')['FaTable']
const FaTabs: typeof import('@fantastic-admin/components')['FaTabs']
const FaTag: typeof import('@fantastic-admin/components')['FaTag']
const FaTextarea: typeof import('@fantastic-admin/components')['FaTextarea']
const FaToast: typeof import('@fantastic-admin/components')['FaToast']
const FaTooltip: typeof import('@fantastic-admin/components')['FaTooltip']
+3 -3
View File
@@ -33,12 +33,12 @@ const products = ref([
],
},
{
name: 'One-step-admin',
tagline: '干啥都快人一步的 Vue 中后台系统框架',
name: 'One-step Console',
tagline: '像导播一样编排你的工作现场',
logo: 'https://one-step-admin.hurui.me/logo.png',
url: 'https://one-step-admin.hurui.me',
images: [
'https://one-step-admin.hurui.me/preview1.png',
'https://one-step-admin.hurui.me/hero_preview.png',
],
},
])
+4 -1
View File
@@ -47,7 +47,10 @@ export default defineConfig(({ mode, command }) => {
},
plugins: createVitePlugins(mode, command === 'build'),
optimizeDeps: {
exclude: ['@fantastic-admin/components'],
exclude: [
'@fantastic-admin/components',
'@fantastic-admin/composables',
],
},
resolve: {
alias: {
-1
View File
@@ -29,7 +29,6 @@
"eruda": "catalog:",
"es-toolkit": "catalog:",
"hotkeys-js": "catalog:",
"lucide-vue-next": "catalog:",
"mitt": "catalog:",
"nprogress": "catalog:",
"path-browserify": "catalog:",
+2 -2
View File
@@ -51,7 +51,7 @@ function handleError(error: any) {
useAppAccountStore().requestLogout()
}
else {
faToast.error('Error', {
useFaToast().error('Error', {
description: error.message,
})
}
@@ -70,7 +70,7 @@ api.interceptors.response.use(
if (typeof response.data === 'object') {
if (response.data.status === 1) {
if (response.data.error) {
faToast.warning('Warning', {
useFaToast().warning('Warning', {
description: response.data.error,
})
return Promise.reject(response.data)
@@ -32,7 +32,7 @@ const form = useForm({
const onSubmit = form.handleSubmit((values) => {
loading.value = true
appAccountStore.editPassword(values).then(async () => {
faToast.success('模拟修改成功,请重新登录')
useFaToast().success('模拟修改成功,请重新登录')
appAccountStore.logout()
}).finally(() => {
loading.value = false
@@ -61,7 +61,7 @@ const onSubmit = form.handleSubmit((values) => {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -75,7 +75,7 @@ const onSubmit = form.handleSubmit((values) => {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -89,7 +89,7 @@ const onSubmit = form.handleSubmit((values) => {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -90,7 +90,7 @@ function testAccount(account: string) {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -104,7 +104,7 @@ function testAccount(account: string) {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -63,7 +63,7 @@ const onSubmit = form.handleSubmit((values) => {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -76,11 +76,11 @@ const onSubmit = form.handleSubmit((values) => {
</template>
</FaInput>
</FormControl>
<FormDescription>
<FormDescription class="m-0">
<FaPasswordStrength :password="value" />
</FormDescription>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -94,7 +94,7 @@ const onSubmit = form.handleSubmit((values) => {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -70,7 +70,7 @@ function handleSendCaptcha() {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -81,7 +81,7 @@ function handleSendCaptcha() {
<FaInputOTP :model-value="value" :name="componentField.name" :length="6" class="border-destructive" @update:model-value="val => setValue(val)" />
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -99,7 +99,7 @@ function handleSendCaptcha() {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -80,13 +80,13 @@ export function useAppTabbar() {
const index = appTabbarStore.list.findIndex(item => item.tabId === tabId)
if (index < 0) {
flag = false
!checkOnly && faToast.warning('关闭的标签页不存在', {
!checkOnly && useFaToast().warning('关闭的标签页不存在', {
position: 'top-center',
})
}
else if (appTabbarStore.list.length <= 1) {
flag = false
!checkOnly && faToast.warning('当前只有一个标签页,不可关闭', {
!checkOnly && useFaToast().warning('当前只有一个标签页,不可关闭', {
position: 'top-center',
})
}
@@ -72,13 +72,13 @@ watch(() => route, (val) => {
function tabbarScrollTip() {
if (tabContainerRef.value?.$el.clientWidth > (tabsRef.value?.ref?.$el.clientWidth ?? 0) && !localStorage.has('tabbarScrollTip')) {
localStorage.setItem('tabbarScrollTip', '')
const tips = faToast.info('温馨提示', {
const tips = useFaToast().info('温馨提示', {
description: '标签栏数量超过展示区域范围,可以将鼠标移到标签栏上,通过鼠标滚轮滑动浏览',
position: 'top-center',
duration: Infinity,
action: {
label: '知道了',
onClick: () => faToast.dismiss(tips),
onClick: () => useFaToast().dismiss(tips),
},
})
}
@@ -8,13 +8,15 @@ const mainPage = useAppPage()
const isAnimating = ref(false)
function handleClick() {
isAnimating.value = true
mainPage.reload()
}
function handleCtrlClick() {
location.reload()
function handleClick(event: MouseEvent) {
if (event.ctrlKey && !event.altKey && !event.metaKey && !event.shiftKey) {
location.reload()
return
}
if (!event.ctrlKey && !event.altKey && !event.metaKey && !event.shiftKey) {
isAnimating.value = true
mainPage.reload()
}
}
</script>
@@ -28,7 +30,7 @@ function handleCtrlClick() {
<p>可切换为浏览器原生刷新</p>
</div>
</template>
<FaButton variant="ghost" size="icon-sm" @click.exact="handleClick" @click.ctrl.exact="handleCtrlClick" @animationend="isAnimating = false">
<FaButton variant="ghost" size="icon-sm" @click="handleClick" @animationend="isAnimating = false">
<FaIcon name="i-iconoir:refresh-double" class="size-4" :class="{ animation: isAnimating }" />
</FaButton>
</FaTooltip>
@@ -8,7 +8,7 @@ defineOptions({
const route = useRoute()
const { copy, copied } = useClipboard()
watch(copied, (val) => {
val && faToast.success('复制成功')
val && useFaToast().success('复制成功')
})
function open() {
@@ -110,7 +110,7 @@ function extendClose(router: Router) {
}
declare module 'vue-router' {
interface Router {
interface _RouterClassic {
/**
* 本方法为框架扩展语法,会同时关闭当前标签页
*
@@ -94,16 +94,6 @@ export const useAppAccountStore = defineStore('appAccount', () => {
await apiApp.passwordEdit(data)
}
// 锁屏
function lock() {
localStorage.removeItem('token')
}
// 解锁
function unlock() {
localStorage.setItem('token', token.value)
}
return {
token,
account,
@@ -115,7 +105,5 @@ export const useAppAccountStore = defineStore('appAccount', () => {
requestLogout,
getPermissions,
editPassword,
lock,
unlock,
}
})
+1 -1
View File
@@ -16,7 +16,6 @@ declare global {
const defineComponent: typeof import('vue').defineComponent
const defineStore: typeof import('pinia').defineStore
const effectScope: typeof import('vue').effectScope
const faToast: typeof import('@fantastic-admin/components').faToast
const getActivePinia: typeof import('pinia').getActivePinia
const getCurrentInstance: typeof import('vue').getCurrentInstance
const getCurrentScope: typeof import('vue').getCurrentScope
@@ -84,6 +83,7 @@ declare global {
const useFaDrawer: typeof import('@fantastic-admin/components').useFaDrawer
const useFaImagePreview: typeof import('@fantastic-admin/components').useFaImagePreview
const useFaModal: typeof import('@fantastic-admin/components').useFaModal
const useFaToast: typeof import('@fantastic-admin/components').useFaToast
const useId: typeof import('vue').useId
const useLink: typeof import('vue-router').useLink
const useModel: typeof import('vue').useModel
+10
View File
@@ -19,7 +19,9 @@ declare module 'vue' {
AppNotAllowed: typeof import('./../components/AppNotAllowed/index.vue')['default']
AppNotSupportedMobile: typeof import('./../components/AppNotSupportedMobile/index.vue')['default']
AppSystemInfo: typeof import('./../components/AppSystemInfo/index.vue')['default']
FaAlert: typeof import('@fantastic-admin/components')['FaAlert']
FaAvatar: typeof import('@fantastic-admin/components')['FaAvatar']
FaBadge: typeof import('@fantastic-admin/components')['FaBadge']
FaButton: typeof import('@fantastic-admin/components')['FaButton']
FaButtonGroup: typeof import('@fantastic-admin/components')['FaButtonGroup']
FaCard: typeof import('@fantastic-admin/components')['FaCard']
@@ -27,6 +29,7 @@ declare module 'vue' {
FaCheckboxGroup: typeof import('@fantastic-admin/components')['FaCheckboxGroup']
FaCollapsible: typeof import('@fantastic-admin/components')['FaCollapsible']
FaContextMenu: typeof import('@fantastic-admin/components')['FaContextMenu']
FaDescriptions: typeof import('@fantastic-admin/components')['FaDescriptions']
FaDivider: typeof import('@fantastic-admin/components')['FaDivider']
FaDrawer: typeof import('@fantastic-admin/components')['FaDrawer']
FaDropdown: typeof import('@fantastic-admin/components')['FaDropdown']
@@ -55,7 +58,9 @@ declare module 'vue' {
FaSelect: typeof import('@fantastic-admin/components')['FaSelect']
FaSlider: typeof import('@fantastic-admin/components')['FaSlider']
FaSwitch: typeof import('@fantastic-admin/components')['FaSwitch']
FaTable: typeof import('@fantastic-admin/components')['FaTable']
FaTabs: typeof import('@fantastic-admin/components')['FaTabs']
FaTag: typeof import('@fantastic-admin/components')['FaTag']
FaTextarea: typeof import('@fantastic-admin/components')['FaTextarea']
FaToast: typeof import('@fantastic-admin/components')['FaToast']
FaTooltip: typeof import('@fantastic-admin/components')['FaTooltip']
@@ -72,7 +77,9 @@ declare global {
const AppNotAllowed: typeof import('./../components/AppNotAllowed/index.vue')['default']
const AppNotSupportedMobile: typeof import('./../components/AppNotSupportedMobile/index.vue')['default']
const AppSystemInfo: typeof import('./../components/AppSystemInfo/index.vue')['default']
const FaAlert: typeof import('@fantastic-admin/components')['FaAlert']
const FaAvatar: typeof import('@fantastic-admin/components')['FaAvatar']
const FaBadge: typeof import('@fantastic-admin/components')['FaBadge']
const FaButton: typeof import('@fantastic-admin/components')['FaButton']
const FaButtonGroup: typeof import('@fantastic-admin/components')['FaButtonGroup']
const FaCard: typeof import('@fantastic-admin/components')['FaCard']
@@ -80,6 +87,7 @@ declare global {
const FaCheckboxGroup: typeof import('@fantastic-admin/components')['FaCheckboxGroup']
const FaCollapsible: typeof import('@fantastic-admin/components')['FaCollapsible']
const FaContextMenu: typeof import('@fantastic-admin/components')['FaContextMenu']
const FaDescriptions: typeof import('@fantastic-admin/components')['FaDescriptions']
const FaDivider: typeof import('@fantastic-admin/components')['FaDivider']
const FaDrawer: typeof import('@fantastic-admin/components')['FaDrawer']
const FaDropdown: typeof import('@fantastic-admin/components')['FaDropdown']
@@ -108,7 +116,9 @@ declare global {
const FaSelect: typeof import('@fantastic-admin/components')['FaSelect']
const FaSlider: typeof import('@fantastic-admin/components')['FaSlider']
const FaSwitch: typeof import('@fantastic-admin/components')['FaSwitch']
const FaTable: typeof import('@fantastic-admin/components')['FaTable']
const FaTabs: typeof import('@fantastic-admin/components')['FaTabs']
const FaTag: typeof import('@fantastic-admin/components')['FaTag']
const FaTextarea: typeof import('@fantastic-admin/components')['FaTextarea']
const FaToast: typeof import('@fantastic-admin/components')['FaToast']
const FaTooltip: typeof import('@fantastic-admin/components')['FaTooltip']
@@ -11,6 +11,8 @@ const themeConfig = computed(() => ({
<template>
<AConfigProvider :locale="antdvNextLocaleZhCN" :theme="themeConfig">
<slot />
<AApp class="size-full">
<slot />
</AApp>
</AConfigProvider>
</template>
+3 -3
View File
@@ -33,12 +33,12 @@ const products = ref([
],
},
{
name: 'One-step-admin',
tagline: '干啥都快人一步的 Vue 中后台系统框架',
name: 'One-step Console',
tagline: '像导播一样编排你的工作现场',
logo: 'https://one-step-admin.hurui.me/logo.png',
url: 'https://one-step-admin.hurui.me',
images: [
'https://one-step-admin.hurui.me/preview1.png',
'https://one-step-admin.hurui.me/hero_preview.png',
],
},
])
+4 -1
View File
@@ -47,7 +47,10 @@ export default defineConfig(({ mode, command }) => {
},
plugins: createVitePlugins(mode, command === 'build'),
optimizeDeps: {
exclude: ['@fantastic-admin/components'],
exclude: [
'@fantastic-admin/components',
'@fantastic-admin/composables',
],
},
resolve: {
alias: {
-1
View File
@@ -28,7 +28,6 @@
"eruda": "catalog:",
"es-toolkit": "catalog:",
"hotkeys-js": "catalog:",
"lucide-vue-next": "catalog:",
"mitt": "catalog:",
"nprogress": "catalog:",
"path-browserify": "catalog:",
+2 -2
View File
@@ -51,7 +51,7 @@ function handleError(error: any) {
useAppAccountStore().requestLogout()
}
else {
faToast.error('Error', {
useFaToast().error('Error', {
description: error.message,
})
}
@@ -70,7 +70,7 @@ api.interceptors.response.use(
if (typeof response.data === 'object') {
if (response.data.status === 1) {
if (response.data.error) {
faToast.warning('Warning', {
useFaToast().warning('Warning', {
description: response.data.error,
})
return Promise.reject(response.data)
@@ -32,7 +32,7 @@ const form = useForm({
const onSubmit = form.handleSubmit((values) => {
loading.value = true
appAccountStore.editPassword(values).then(async () => {
faToast.success('模拟修改成功,请重新登录')
useFaToast().success('模拟修改成功,请重新登录')
appAccountStore.logout()
}).finally(() => {
loading.value = false
@@ -61,7 +61,7 @@ const onSubmit = form.handleSubmit((values) => {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -75,7 +75,7 @@ const onSubmit = form.handleSubmit((values) => {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -89,7 +89,7 @@ const onSubmit = form.handleSubmit((values) => {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -90,7 +90,7 @@ function testAccount(account: string) {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -104,7 +104,7 @@ function testAccount(account: string) {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -63,7 +63,7 @@ const onSubmit = form.handleSubmit((values) => {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -76,11 +76,11 @@ const onSubmit = form.handleSubmit((values) => {
</template>
</FaInput>
</FormControl>
<FormDescription>
<FormDescription class="m-0">
<FaPasswordStrength :password="value" />
</FormDescription>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -94,7 +94,7 @@ const onSubmit = form.handleSubmit((values) => {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -70,7 +70,7 @@ function handleSendCaptcha() {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -81,7 +81,7 @@ function handleSendCaptcha() {
<FaInputOTP :model-value="value" :name="componentField.name" :length="6" class="border-destructive" @update:model-value="val => setValue(val)" />
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -99,7 +99,7 @@ function handleSendCaptcha() {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -80,13 +80,13 @@ export function useAppTabbar() {
const index = appTabbarStore.list.findIndex(item => item.tabId === tabId)
if (index < 0) {
flag = false
!checkOnly && faToast.warning('关闭的标签页不存在', {
!checkOnly && useFaToast().warning('关闭的标签页不存在', {
position: 'top-center',
})
}
else if (appTabbarStore.list.length <= 1) {
flag = false
!checkOnly && faToast.warning('当前只有一个标签页,不可关闭', {
!checkOnly && useFaToast().warning('当前只有一个标签页,不可关闭', {
position: 'top-center',
})
}
@@ -72,13 +72,13 @@ watch(() => route, (val) => {
function tabbarScrollTip() {
if (tabContainerRef.value?.$el.clientWidth > (tabsRef.value?.ref?.$el.clientWidth ?? 0) && !localStorage.has('tabbarScrollTip')) {
localStorage.setItem('tabbarScrollTip', '')
const tips = faToast.info('温馨提示', {
const tips = useFaToast().info('温馨提示', {
description: '标签栏数量超过展示区域范围,可以将鼠标移到标签栏上,通过鼠标滚轮滑动浏览',
position: 'top-center',
duration: Infinity,
action: {
label: '知道了',
onClick: () => faToast.dismiss(tips),
onClick: () => useFaToast().dismiss(tips),
},
})
}
@@ -8,13 +8,15 @@ const mainPage = useAppPage()
const isAnimating = ref(false)
function handleClick() {
isAnimating.value = true
mainPage.reload()
}
function handleCtrlClick() {
location.reload()
function handleClick(event: MouseEvent) {
if (event.ctrlKey && !event.altKey && !event.metaKey && !event.shiftKey) {
location.reload()
return
}
if (!event.ctrlKey && !event.altKey && !event.metaKey && !event.shiftKey) {
isAnimating.value = true
mainPage.reload()
}
}
</script>
@@ -28,7 +30,7 @@ function handleCtrlClick() {
<p>可切换为浏览器原生刷新</p>
</div>
</template>
<FaButton variant="ghost" size="icon-sm" @click.exact="handleClick" @click.ctrl.exact="handleCtrlClick" @animationend="isAnimating = false">
<FaButton variant="ghost" size="icon-sm" @click="handleClick" @animationend="isAnimating = false">
<FaIcon name="i-iconoir:refresh-double" class="size-4" :class="{ animation: isAnimating }" />
</FaButton>
</FaTooltip>
@@ -8,7 +8,7 @@ defineOptions({
const route = useRoute()
const { copy, copied } = useClipboard()
watch(copied, (val) => {
val && faToast.success('复制成功')
val && useFaToast().success('复制成功')
})
function open() {
@@ -110,7 +110,7 @@ function extendClose(router: Router) {
}
declare module 'vue-router' {
interface Router {
interface _RouterClassic {
/**
* 本方法为框架扩展语法,会同时关闭当前标签页
*
@@ -94,16 +94,6 @@ export const useAppAccountStore = defineStore('appAccount', () => {
await apiApp.passwordEdit(data)
}
// 锁屏
function lock() {
localStorage.removeItem('token')
}
// 解锁
function unlock() {
localStorage.setItem('token', token.value)
}
return {
token,
account,
@@ -115,7 +105,5 @@ export const useAppAccountStore = defineStore('appAccount', () => {
requestLogout,
getPermissions,
editPassword,
lock,
unlock,
}
})
+1 -1
View File
@@ -16,7 +16,6 @@ declare global {
const defineComponent: typeof import('vue').defineComponent
const defineStore: typeof import('pinia').defineStore
const effectScope: typeof import('vue').effectScope
const faToast: typeof import('@fantastic-admin/components').faToast
const getActivePinia: typeof import('pinia').getActivePinia
const getCurrentInstance: typeof import('vue').getCurrentInstance
const getCurrentScope: typeof import('vue').getCurrentScope
@@ -84,6 +83,7 @@ declare global {
const useFaDrawer: typeof import('@fantastic-admin/components').useFaDrawer
const useFaImagePreview: typeof import('@fantastic-admin/components').useFaImagePreview
const useFaModal: typeof import('@fantastic-admin/components').useFaModal
const useFaToast: typeof import('@fantastic-admin/components').useFaToast
const useId: typeof import('vue').useId
const useLink: typeof import('vue-router').useLink
const useModel: typeof import('vue').useModel
+10
View File
@@ -19,7 +19,9 @@ declare module 'vue' {
AppNotAllowed: typeof import('./../components/AppNotAllowed/index.vue')['default']
AppNotSupportedMobile: typeof import('./../components/AppNotSupportedMobile/index.vue')['default']
AppSystemInfo: typeof import('./../components/AppSystemInfo/index.vue')['default']
FaAlert: typeof import('@fantastic-admin/components')['FaAlert']
FaAvatar: typeof import('@fantastic-admin/components')['FaAvatar']
FaBadge: typeof import('@fantastic-admin/components')['FaBadge']
FaButton: typeof import('@fantastic-admin/components')['FaButton']
FaButtonGroup: typeof import('@fantastic-admin/components')['FaButtonGroup']
FaCard: typeof import('@fantastic-admin/components')['FaCard']
@@ -27,6 +29,7 @@ declare module 'vue' {
FaCheckboxGroup: typeof import('@fantastic-admin/components')['FaCheckboxGroup']
FaCollapsible: typeof import('@fantastic-admin/components')['FaCollapsible']
FaContextMenu: typeof import('@fantastic-admin/components')['FaContextMenu']
FaDescriptions: typeof import('@fantastic-admin/components')['FaDescriptions']
FaDivider: typeof import('@fantastic-admin/components')['FaDivider']
FaDrawer: typeof import('@fantastic-admin/components')['FaDrawer']
FaDropdown: typeof import('@fantastic-admin/components')['FaDropdown']
@@ -55,7 +58,9 @@ declare module 'vue' {
FaSelect: typeof import('@fantastic-admin/components')['FaSelect']
FaSlider: typeof import('@fantastic-admin/components')['FaSlider']
FaSwitch: typeof import('@fantastic-admin/components')['FaSwitch']
FaTable: typeof import('@fantastic-admin/components')['FaTable']
FaTabs: typeof import('@fantastic-admin/components')['FaTabs']
FaTag: typeof import('@fantastic-admin/components')['FaTag']
FaTextarea: typeof import('@fantastic-admin/components')['FaTextarea']
FaToast: typeof import('@fantastic-admin/components')['FaToast']
FaTooltip: typeof import('@fantastic-admin/components')['FaTooltip']
@@ -72,7 +77,9 @@ declare global {
const AppNotAllowed: typeof import('./../components/AppNotAllowed/index.vue')['default']
const AppNotSupportedMobile: typeof import('./../components/AppNotSupportedMobile/index.vue')['default']
const AppSystemInfo: typeof import('./../components/AppSystemInfo/index.vue')['default']
const FaAlert: typeof import('@fantastic-admin/components')['FaAlert']
const FaAvatar: typeof import('@fantastic-admin/components')['FaAvatar']
const FaBadge: typeof import('@fantastic-admin/components')['FaBadge']
const FaButton: typeof import('@fantastic-admin/components')['FaButton']
const FaButtonGroup: typeof import('@fantastic-admin/components')['FaButtonGroup']
const FaCard: typeof import('@fantastic-admin/components')['FaCard']
@@ -80,6 +87,7 @@ declare global {
const FaCheckboxGroup: typeof import('@fantastic-admin/components')['FaCheckboxGroup']
const FaCollapsible: typeof import('@fantastic-admin/components')['FaCollapsible']
const FaContextMenu: typeof import('@fantastic-admin/components')['FaContextMenu']
const FaDescriptions: typeof import('@fantastic-admin/components')['FaDescriptions']
const FaDivider: typeof import('@fantastic-admin/components')['FaDivider']
const FaDrawer: typeof import('@fantastic-admin/components')['FaDrawer']
const FaDropdown: typeof import('@fantastic-admin/components')['FaDropdown']
@@ -108,7 +116,9 @@ declare global {
const FaSelect: typeof import('@fantastic-admin/components')['FaSelect']
const FaSlider: typeof import('@fantastic-admin/components')['FaSlider']
const FaSwitch: typeof import('@fantastic-admin/components')['FaSwitch']
const FaTable: typeof import('@fantastic-admin/components')['FaTable']
const FaTabs: typeof import('@fantastic-admin/components')['FaTabs']
const FaTag: typeof import('@fantastic-admin/components')['FaTag']
const FaTextarea: typeof import('@fantastic-admin/components')['FaTextarea']
const FaToast: typeof import('@fantastic-admin/components')['FaToast']
const FaTooltip: typeof import('@fantastic-admin/components')['FaTooltip']
@@ -33,12 +33,12 @@ const products = ref([
],
},
{
name: 'One-step-admin',
tagline: '干啥都快人一步的 Vue 中后台系统框架',
name: 'One-step Console',
tagline: '像导播一样编排你的工作现场',
logo: 'https://one-step-admin.hurui.me/logo.png',
url: 'https://one-step-admin.hurui.me',
images: [
'https://one-step-admin.hurui.me/preview1.png',
'https://one-step-admin.hurui.me/hero_preview.png',
],
},
])
+4 -1
View File
@@ -47,7 +47,10 @@ export default defineConfig(({ mode, command }) => {
},
plugins: createVitePlugins(mode, command === 'build'),
optimizeDeps: {
exclude: ['@fantastic-admin/components'],
exclude: [
'@fantastic-admin/components',
'@fantastic-admin/composables',
],
},
resolve: {
alias: {
-1
View File
@@ -28,7 +28,6 @@
"eruda": "catalog:",
"es-toolkit": "catalog:",
"hotkeys-js": "catalog:",
"lucide-vue-next": "catalog:",
"mitt": "catalog:",
"nprogress": "catalog:",
"path-browserify": "catalog:",
+2 -2
View File
@@ -51,7 +51,7 @@ function handleError(error: any) {
useAppAccountStore().requestLogout()
}
else {
faToast.error('Error', {
useFaToast().error('Error', {
description: error.message,
})
}
@@ -70,7 +70,7 @@ api.interceptors.response.use(
if (typeof response.data === 'object') {
if (response.data.status === 1) {
if (response.data.error) {
faToast.warning('Warning', {
useFaToast().warning('Warning', {
description: response.data.error,
})
return Promise.reject(response.data)
@@ -32,7 +32,7 @@ const form = useForm({
const onSubmit = form.handleSubmit((values) => {
loading.value = true
appAccountStore.editPassword(values).then(async () => {
faToast.success('模拟修改成功,请重新登录')
useFaToast().success('模拟修改成功,请重新登录')
appAccountStore.logout()
}).finally(() => {
loading.value = false
@@ -61,7 +61,7 @@ const onSubmit = form.handleSubmit((values) => {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -75,7 +75,7 @@ const onSubmit = form.handleSubmit((values) => {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -89,7 +89,7 @@ const onSubmit = form.handleSubmit((values) => {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -90,7 +90,7 @@ function testAccount(account: string) {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -104,7 +104,7 @@ function testAccount(account: string) {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -63,7 +63,7 @@ const onSubmit = form.handleSubmit((values) => {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -76,11 +76,11 @@ const onSubmit = form.handleSubmit((values) => {
</template>
</FaInput>
</FormControl>
<FormDescription>
<FormDescription class="m-0">
<FaPasswordStrength :password="value" />
</FormDescription>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -94,7 +94,7 @@ const onSubmit = form.handleSubmit((values) => {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -70,7 +70,7 @@ function handleSendCaptcha() {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -81,7 +81,7 @@ function handleSendCaptcha() {
<FaInputOTP :model-value="value" :name="componentField.name" :length="6" class="border-destructive" @update:model-value="val => setValue(val)" />
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -99,7 +99,7 @@ function handleSendCaptcha() {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -80,13 +80,13 @@ export function useAppTabbar() {
const index = appTabbarStore.list.findIndex(item => item.tabId === tabId)
if (index < 0) {
flag = false
!checkOnly && faToast.warning('关闭的标签页不存在', {
!checkOnly && useFaToast().warning('关闭的标签页不存在', {
position: 'top-center',
})
}
else if (appTabbarStore.list.length <= 1) {
flag = false
!checkOnly && faToast.warning('当前只有一个标签页,不可关闭', {
!checkOnly && useFaToast().warning('当前只有一个标签页,不可关闭', {
position: 'top-center',
})
}
@@ -72,13 +72,13 @@ watch(() => route, (val) => {
function tabbarScrollTip() {
if (tabContainerRef.value?.$el.clientWidth > (tabsRef.value?.ref?.$el.clientWidth ?? 0) && !localStorage.has('tabbarScrollTip')) {
localStorage.setItem('tabbarScrollTip', '')
const tips = faToast.info('温馨提示', {
const tips = useFaToast().info('温馨提示', {
description: '标签栏数量超过展示区域范围,可以将鼠标移到标签栏上,通过鼠标滚轮滑动浏览',
position: 'top-center',
duration: Infinity,
action: {
label: '知道了',
onClick: () => faToast.dismiss(tips),
onClick: () => useFaToast().dismiss(tips),
},
})
}
@@ -8,13 +8,15 @@ const mainPage = useAppPage()
const isAnimating = ref(false)
function handleClick() {
isAnimating.value = true
mainPage.reload()
}
function handleCtrlClick() {
location.reload()
function handleClick(event: MouseEvent) {
if (event.ctrlKey && !event.altKey && !event.metaKey && !event.shiftKey) {
location.reload()
return
}
if (!event.ctrlKey && !event.altKey && !event.metaKey && !event.shiftKey) {
isAnimating.value = true
mainPage.reload()
}
}
</script>
@@ -28,7 +30,7 @@ function handleCtrlClick() {
<p>可切换为浏览器原生刷新</p>
</div>
</template>
<FaButton variant="ghost" size="icon-sm" @click.exact="handleClick" @click.ctrl.exact="handleCtrlClick" @animationend="isAnimating = false">
<FaButton variant="ghost" size="icon-sm" @click="handleClick" @animationend="isAnimating = false">
<FaIcon name="i-iconoir:refresh-double" class="size-4" :class="{ animation: isAnimating }" />
</FaButton>
</FaTooltip>
@@ -8,7 +8,7 @@ defineOptions({
const route = useRoute()
const { copy, copied } = useClipboard()
watch(copied, (val) => {
val && faToast.success('复制成功')
val && useFaToast().success('复制成功')
})
function open() {
+1 -1
View File
@@ -110,7 +110,7 @@ function extendClose(router: Router) {
}
declare module 'vue-router' {
interface Router {
interface _RouterClassic {
/**
* 本方法为框架扩展语法,会同时关闭当前标签页
*
@@ -94,16 +94,6 @@ export const useAppAccountStore = defineStore('appAccount', () => {
await apiApp.passwordEdit(data)
}
// 锁屏
function lock() {
localStorage.removeItem('token')
}
// 解锁
function unlock() {
localStorage.setItem('token', token.value)
}
return {
token,
account,
@@ -115,7 +105,5 @@ export const useAppAccountStore = defineStore('appAccount', () => {
requestLogout,
getPermissions,
editPassword,
lock,
unlock,
}
})
+1 -1
View File
@@ -16,7 +16,6 @@ declare global {
const defineComponent: typeof import('vue').defineComponent
const defineStore: typeof import('pinia').defineStore
const effectScope: typeof import('vue').effectScope
const faToast: typeof import('@fantastic-admin/components').faToast
const getActivePinia: typeof import('pinia').getActivePinia
const getCurrentInstance: typeof import('vue').getCurrentInstance
const getCurrentScope: typeof import('vue').getCurrentScope
@@ -84,6 +83,7 @@ declare global {
const useFaDrawer: typeof import('@fantastic-admin/components').useFaDrawer
const useFaImagePreview: typeof import('@fantastic-admin/components').useFaImagePreview
const useFaModal: typeof import('@fantastic-admin/components').useFaModal
const useFaToast: typeof import('@fantastic-admin/components').useFaToast
const useId: typeof import('vue').useId
const useLink: typeof import('vue-router').useLink
const useModel: typeof import('vue').useModel
+10
View File
@@ -19,7 +19,9 @@ declare module 'vue' {
AppNotAllowed: typeof import('./../components/AppNotAllowed/index.vue')['default']
AppNotSupportedMobile: typeof import('./../components/AppNotSupportedMobile/index.vue')['default']
AppSystemInfo: typeof import('./../components/AppSystemInfo/index.vue')['default']
FaAlert: typeof import('@fantastic-admin/components')['FaAlert']
FaAvatar: typeof import('@fantastic-admin/components')['FaAvatar']
FaBadge: typeof import('@fantastic-admin/components')['FaBadge']
FaButton: typeof import('@fantastic-admin/components')['FaButton']
FaButtonGroup: typeof import('@fantastic-admin/components')['FaButtonGroup']
FaCard: typeof import('@fantastic-admin/components')['FaCard']
@@ -27,6 +29,7 @@ declare module 'vue' {
FaCheckboxGroup: typeof import('@fantastic-admin/components')['FaCheckboxGroup']
FaCollapsible: typeof import('@fantastic-admin/components')['FaCollapsible']
FaContextMenu: typeof import('@fantastic-admin/components')['FaContextMenu']
FaDescriptions: typeof import('@fantastic-admin/components')['FaDescriptions']
FaDivider: typeof import('@fantastic-admin/components')['FaDivider']
FaDrawer: typeof import('@fantastic-admin/components')['FaDrawer']
FaDropdown: typeof import('@fantastic-admin/components')['FaDropdown']
@@ -55,7 +58,9 @@ declare module 'vue' {
FaSelect: typeof import('@fantastic-admin/components')['FaSelect']
FaSlider: typeof import('@fantastic-admin/components')['FaSlider']
FaSwitch: typeof import('@fantastic-admin/components')['FaSwitch']
FaTable: typeof import('@fantastic-admin/components')['FaTable']
FaTabs: typeof import('@fantastic-admin/components')['FaTabs']
FaTag: typeof import('@fantastic-admin/components')['FaTag']
FaTextarea: typeof import('@fantastic-admin/components')['FaTextarea']
FaToast: typeof import('@fantastic-admin/components')['FaToast']
FaTooltip: typeof import('@fantastic-admin/components')['FaTooltip']
@@ -72,7 +77,9 @@ declare global {
const AppNotAllowed: typeof import('./../components/AppNotAllowed/index.vue')['default']
const AppNotSupportedMobile: typeof import('./../components/AppNotSupportedMobile/index.vue')['default']
const AppSystemInfo: typeof import('./../components/AppSystemInfo/index.vue')['default']
const FaAlert: typeof import('@fantastic-admin/components')['FaAlert']
const FaAvatar: typeof import('@fantastic-admin/components')['FaAvatar']
const FaBadge: typeof import('@fantastic-admin/components')['FaBadge']
const FaButton: typeof import('@fantastic-admin/components')['FaButton']
const FaButtonGroup: typeof import('@fantastic-admin/components')['FaButtonGroup']
const FaCard: typeof import('@fantastic-admin/components')['FaCard']
@@ -80,6 +87,7 @@ declare global {
const FaCheckboxGroup: typeof import('@fantastic-admin/components')['FaCheckboxGroup']
const FaCollapsible: typeof import('@fantastic-admin/components')['FaCollapsible']
const FaContextMenu: typeof import('@fantastic-admin/components')['FaContextMenu']
const FaDescriptions: typeof import('@fantastic-admin/components')['FaDescriptions']
const FaDivider: typeof import('@fantastic-admin/components')['FaDivider']
const FaDrawer: typeof import('@fantastic-admin/components')['FaDrawer']
const FaDropdown: typeof import('@fantastic-admin/components')['FaDropdown']
@@ -108,7 +116,9 @@ declare global {
const FaSelect: typeof import('@fantastic-admin/components')['FaSelect']
const FaSlider: typeof import('@fantastic-admin/components')['FaSlider']
const FaSwitch: typeof import('@fantastic-admin/components')['FaSwitch']
const FaTable: typeof import('@fantastic-admin/components')['FaTable']
const FaTabs: typeof import('@fantastic-admin/components')['FaTabs']
const FaTag: typeof import('@fantastic-admin/components')['FaTag']
const FaTextarea: typeof import('@fantastic-admin/components')['FaTextarea']
const FaToast: typeof import('@fantastic-admin/components')['FaToast']
const FaTooltip: typeof import('@fantastic-admin/components')['FaTooltip']
+3 -3
View File
@@ -33,12 +33,12 @@ const products = ref([
],
},
{
name: 'One-step-admin',
tagline: '干啥都快人一步的 Vue 中后台系统框架',
name: 'One-step Console',
tagline: '像导播一样编排你的工作现场',
logo: 'https://one-step-admin.hurui.me/logo.png',
url: 'https://one-step-admin.hurui.me',
images: [
'https://one-step-admin.hurui.me/preview1.png',
'https://one-step-admin.hurui.me/hero_preview.png',
],
},
])
+4 -1
View File
@@ -47,7 +47,10 @@ export default defineConfig(({ mode, command }) => {
},
plugins: createVitePlugins(mode, command === 'build'),
optimizeDeps: {
exclude: ['@fantastic-admin/components'],
exclude: [
'@fantastic-admin/components',
'@fantastic-admin/composables',
],
},
resolve: {
alias: {
-1
View File
@@ -28,7 +28,6 @@
"eruda": "catalog:",
"es-toolkit": "catalog:",
"hotkeys-js": "catalog:",
"lucide-vue-next": "catalog:",
"mitt": "catalog:",
"nprogress": "catalog:",
"path-browserify": "catalog:",
+2 -2
View File
@@ -51,7 +51,7 @@ function handleError(error: any) {
useAppAccountStore().requestLogout()
}
else {
faToast.error('Error', {
useFaToast().error('Error', {
description: error.message,
})
}
@@ -70,7 +70,7 @@ api.interceptors.response.use(
if (typeof response.data === 'object') {
if (response.data.status === 1) {
if (response.data.error) {
faToast.warning('Warning', {
useFaToast().warning('Warning', {
description: response.data.error,
})
return Promise.reject(response.data)
@@ -32,7 +32,7 @@ const form = useForm({
const onSubmit = form.handleSubmit((values) => {
loading.value = true
appAccountStore.editPassword(values).then(async () => {
faToast.success('模拟修改成功,请重新登录')
useFaToast().success('模拟修改成功,请重新登录')
appAccountStore.logout()
}).finally(() => {
loading.value = false
@@ -61,7 +61,7 @@ const onSubmit = form.handleSubmit((values) => {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -75,7 +75,7 @@ const onSubmit = form.handleSubmit((values) => {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -89,7 +89,7 @@ const onSubmit = form.handleSubmit((values) => {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -90,7 +90,7 @@ function testAccount(account: string) {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -104,7 +104,7 @@ function testAccount(account: string) {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -63,7 +63,7 @@ const onSubmit = form.handleSubmit((values) => {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -76,11 +76,11 @@ const onSubmit = form.handleSubmit((values) => {
</template>
</FaInput>
</FormControl>
<FormDescription>
<FormDescription class="m-0">
<FaPasswordStrength :password="value" />
</FormDescription>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -94,7 +94,7 @@ const onSubmit = form.handleSubmit((values) => {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -70,7 +70,7 @@ function handleSendCaptcha() {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -81,7 +81,7 @@ function handleSendCaptcha() {
<FaInputOTP :model-value="value" :name="componentField.name" :length="6" class="border-destructive" @update:model-value="val => setValue(val)" />
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -99,7 +99,7 @@ function handleSendCaptcha() {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -80,13 +80,13 @@ export function useAppTabbar() {
const index = appTabbarStore.list.findIndex(item => item.tabId === tabId)
if (index < 0) {
flag = false
!checkOnly && faToast.warning('关闭的标签页不存在', {
!checkOnly && useFaToast().warning('关闭的标签页不存在', {
position: 'top-center',
})
}
else if (appTabbarStore.list.length <= 1) {
flag = false
!checkOnly && faToast.warning('当前只有一个标签页,不可关闭', {
!checkOnly && useFaToast().warning('当前只有一个标签页,不可关闭', {
position: 'top-center',
})
}
@@ -72,13 +72,13 @@ watch(() => route, (val) => {
function tabbarScrollTip() {
if (tabContainerRef.value?.$el.clientWidth > (tabsRef.value?.ref?.$el.clientWidth ?? 0) && !localStorage.has('tabbarScrollTip')) {
localStorage.setItem('tabbarScrollTip', '')
const tips = faToast.info('温馨提示', {
const tips = useFaToast().info('温馨提示', {
description: '标签栏数量超过展示区域范围,可以将鼠标移到标签栏上,通过鼠标滚轮滑动浏览',
position: 'top-center',
duration: Infinity,
action: {
label: '知道了',
onClick: () => faToast.dismiss(tips),
onClick: () => useFaToast().dismiss(tips),
},
})
}
@@ -8,13 +8,15 @@ const mainPage = useAppPage()
const isAnimating = ref(false)
function handleClick() {
isAnimating.value = true
mainPage.reload()
}
function handleCtrlClick() {
location.reload()
function handleClick(event: MouseEvent) {
if (event.ctrlKey && !event.altKey && !event.metaKey && !event.shiftKey) {
location.reload()
return
}
if (!event.ctrlKey && !event.altKey && !event.metaKey && !event.shiftKey) {
isAnimating.value = true
mainPage.reload()
}
}
</script>
@@ -28,7 +30,7 @@ function handleCtrlClick() {
<p>可切换为浏览器原生刷新</p>
</div>
</template>
<FaButton variant="ghost" size="icon-sm" @click.exact="handleClick" @click.ctrl.exact="handleCtrlClick" @animationend="isAnimating = false">
<FaButton variant="ghost" size="icon-sm" @click="handleClick" @animationend="isAnimating = false">
<FaIcon name="i-iconoir:refresh-double" class="size-4" :class="{ animation: isAnimating }" />
</FaButton>
</FaTooltip>
@@ -8,7 +8,7 @@ defineOptions({
const route = useRoute()
const { copy, copied } = useClipboard()
watch(copied, (val) => {
val && faToast.success('复制成功')
val && useFaToast().success('复制成功')
})
function open() {
+1 -1
View File
@@ -110,7 +110,7 @@ function extendClose(router: Router) {
}
declare module 'vue-router' {
interface Router {
interface _RouterClassic {
/**
* 本方法为框架扩展语法,会同时关闭当前标签页
*
@@ -94,16 +94,6 @@ export const useAppAccountStore = defineStore('appAccount', () => {
await apiApp.passwordEdit(data)
}
// 锁屏
function lock() {
localStorage.removeItem('token')
}
// 解锁
function unlock() {
localStorage.setItem('token', token.value)
}
return {
token,
account,
@@ -115,7 +105,5 @@ export const useAppAccountStore = defineStore('appAccount', () => {
requestLogout,
getPermissions,
editPassword,
lock,
unlock,
}
})
+1 -1
View File
@@ -16,7 +16,6 @@ declare global {
const defineComponent: typeof import('vue').defineComponent
const defineStore: typeof import('pinia').defineStore
const effectScope: typeof import('vue').effectScope
const faToast: typeof import('@fantastic-admin/components').faToast
const getActivePinia: typeof import('pinia').getActivePinia
const getCurrentInstance: typeof import('vue').getCurrentInstance
const getCurrentScope: typeof import('vue').getCurrentScope
@@ -84,6 +83,7 @@ declare global {
const useFaDrawer: typeof import('@fantastic-admin/components').useFaDrawer
const useFaImagePreview: typeof import('@fantastic-admin/components').useFaImagePreview
const useFaModal: typeof import('@fantastic-admin/components').useFaModal
const useFaToast: typeof import('@fantastic-admin/components').useFaToast
const useId: typeof import('vue').useId
const useLink: typeof import('vue-router').useLink
const useModel: typeof import('vue').useModel
+10
View File
@@ -19,7 +19,9 @@ declare module 'vue' {
AppNotAllowed: typeof import('./../components/AppNotAllowed/index.vue')['default']
AppNotSupportedMobile: typeof import('./../components/AppNotSupportedMobile/index.vue')['default']
AppSystemInfo: typeof import('./../components/AppSystemInfo/index.vue')['default']
FaAlert: typeof import('@fantastic-admin/components')['FaAlert']
FaAvatar: typeof import('@fantastic-admin/components')['FaAvatar']
FaBadge: typeof import('@fantastic-admin/components')['FaBadge']
FaButton: typeof import('@fantastic-admin/components')['FaButton']
FaButtonGroup: typeof import('@fantastic-admin/components')['FaButtonGroup']
FaCard: typeof import('@fantastic-admin/components')['FaCard']
@@ -27,6 +29,7 @@ declare module 'vue' {
FaCheckboxGroup: typeof import('@fantastic-admin/components')['FaCheckboxGroup']
FaCollapsible: typeof import('@fantastic-admin/components')['FaCollapsible']
FaContextMenu: typeof import('@fantastic-admin/components')['FaContextMenu']
FaDescriptions: typeof import('@fantastic-admin/components')['FaDescriptions']
FaDivider: typeof import('@fantastic-admin/components')['FaDivider']
FaDrawer: typeof import('@fantastic-admin/components')['FaDrawer']
FaDropdown: typeof import('@fantastic-admin/components')['FaDropdown']
@@ -55,7 +58,9 @@ declare module 'vue' {
FaSelect: typeof import('@fantastic-admin/components')['FaSelect']
FaSlider: typeof import('@fantastic-admin/components')['FaSlider']
FaSwitch: typeof import('@fantastic-admin/components')['FaSwitch']
FaTable: typeof import('@fantastic-admin/components')['FaTable']
FaTabs: typeof import('@fantastic-admin/components')['FaTabs']
FaTag: typeof import('@fantastic-admin/components')['FaTag']
FaTextarea: typeof import('@fantastic-admin/components')['FaTextarea']
FaToast: typeof import('@fantastic-admin/components')['FaToast']
FaTooltip: typeof import('@fantastic-admin/components')['FaTooltip']
@@ -72,7 +77,9 @@ declare global {
const AppNotAllowed: typeof import('./../components/AppNotAllowed/index.vue')['default']
const AppNotSupportedMobile: typeof import('./../components/AppNotSupportedMobile/index.vue')['default']
const AppSystemInfo: typeof import('./../components/AppSystemInfo/index.vue')['default']
const FaAlert: typeof import('@fantastic-admin/components')['FaAlert']
const FaAvatar: typeof import('@fantastic-admin/components')['FaAvatar']
const FaBadge: typeof import('@fantastic-admin/components')['FaBadge']
const FaButton: typeof import('@fantastic-admin/components')['FaButton']
const FaButtonGroup: typeof import('@fantastic-admin/components')['FaButtonGroup']
const FaCard: typeof import('@fantastic-admin/components')['FaCard']
@@ -80,6 +87,7 @@ declare global {
const FaCheckboxGroup: typeof import('@fantastic-admin/components')['FaCheckboxGroup']
const FaCollapsible: typeof import('@fantastic-admin/components')['FaCollapsible']
const FaContextMenu: typeof import('@fantastic-admin/components')['FaContextMenu']
const FaDescriptions: typeof import('@fantastic-admin/components')['FaDescriptions']
const FaDivider: typeof import('@fantastic-admin/components')['FaDivider']
const FaDrawer: typeof import('@fantastic-admin/components')['FaDrawer']
const FaDropdown: typeof import('@fantastic-admin/components')['FaDropdown']
@@ -108,7 +116,9 @@ declare global {
const FaSelect: typeof import('@fantastic-admin/components')['FaSelect']
const FaSlider: typeof import('@fantastic-admin/components')['FaSlider']
const FaSwitch: typeof import('@fantastic-admin/components')['FaSwitch']
const FaTable: typeof import('@fantastic-admin/components')['FaTable']
const FaTabs: typeof import('@fantastic-admin/components')['FaTabs']
const FaTag: typeof import('@fantastic-admin/components')['FaTag']
const FaTextarea: typeof import('@fantastic-admin/components')['FaTextarea']
const FaToast: typeof import('@fantastic-admin/components')['FaToast']
const FaTooltip: typeof import('@fantastic-admin/components')['FaTooltip']
+3 -3
View File
@@ -33,12 +33,12 @@ const products = ref([
],
},
{
name: 'One-step-admin',
tagline: '干啥都快人一步的 Vue 中后台系统框架',
name: 'One-step Console',
tagline: '像导播一样编排你的工作现场',
logo: 'https://one-step-admin.hurui.me/logo.png',
url: 'https://one-step-admin.hurui.me',
images: [
'https://one-step-admin.hurui.me/preview1.png',
'https://one-step-admin.hurui.me/hero_preview.png',
],
},
])
+4 -1
View File
@@ -47,7 +47,10 @@ export default defineConfig(({ mode, command }) => {
},
plugins: createVitePlugins(mode, command === 'build'),
optimizeDeps: {
exclude: ['@fantastic-admin/components'],
exclude: [
'@fantastic-admin/components',
'@fantastic-admin/composables',
],
},
resolve: {
alias: {
-1
View File
@@ -28,7 +28,6 @@
"eruda": "catalog:",
"es-toolkit": "catalog:",
"hotkeys-js": "catalog:",
"lucide-vue-next": "catalog:",
"mitt": "catalog:",
"nprogress": "catalog:",
"path-browserify": "catalog:",
+2 -2
View File
@@ -51,7 +51,7 @@ function handleError(error: any) {
useAppAccountStore().requestLogout()
}
else {
faToast.error('Error', {
useFaToast().error('Error', {
description: error.message,
})
}
@@ -70,7 +70,7 @@ api.interceptors.response.use(
if (typeof response.data === 'object') {
if (response.data.status === 1) {
if (response.data.error) {
faToast.warning('Warning', {
useFaToast().warning('Warning', {
description: response.data.error,
})
return Promise.reject(response.data)
@@ -32,7 +32,7 @@ const form = useForm({
const onSubmit = form.handleSubmit((values) => {
loading.value = true
appAccountStore.editPassword(values).then(async () => {
faToast.success('模拟修改成功,请重新登录')
useFaToast().success('模拟修改成功,请重新登录')
appAccountStore.logout()
}).finally(() => {
loading.value = false
@@ -61,7 +61,7 @@ const onSubmit = form.handleSubmit((values) => {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -75,7 +75,7 @@ const onSubmit = form.handleSubmit((values) => {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -89,7 +89,7 @@ const onSubmit = form.handleSubmit((values) => {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -90,7 +90,7 @@ function testAccount(account: string) {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -104,7 +104,7 @@ function testAccount(account: string) {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -63,7 +63,7 @@ const onSubmit = form.handleSubmit((values) => {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -76,11 +76,11 @@ const onSubmit = form.handleSubmit((values) => {
</template>
</FaInput>
</FormControl>
<FormDescription>
<FormDescription class="m-0">
<FaPasswordStrength :password="value" />
</FormDescription>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -94,7 +94,7 @@ const onSubmit = form.handleSubmit((values) => {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -70,7 +70,7 @@ function handleSendCaptcha() {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -81,7 +81,7 @@ function handleSendCaptcha() {
<FaInputOTP :model-value="value" :name="componentField.name" :length="6" class="border-destructive" @update:model-value="val => setValue(val)" />
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -99,7 +99,7 @@ function handleSendCaptcha() {
</FaInput>
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="text-xs bottom-1 absolute" />
<FormMessage class="text-xs m-0 bottom-1 absolute" />
</Transition>
</FormItem>
</FormField>
@@ -80,13 +80,13 @@ export function useAppTabbar() {
const index = appTabbarStore.list.findIndex(item => item.tabId === tabId)
if (index < 0) {
flag = false
!checkOnly && faToast.warning('关闭的标签页不存在', {
!checkOnly && useFaToast().warning('关闭的标签页不存在', {
position: 'top-center',
})
}
else if (appTabbarStore.list.length <= 1) {
flag = false
!checkOnly && faToast.warning('当前只有一个标签页,不可关闭', {
!checkOnly && useFaToast().warning('当前只有一个标签页,不可关闭', {
position: 'top-center',
})
}
@@ -72,13 +72,13 @@ watch(() => route, (val) => {
function tabbarScrollTip() {
if (tabContainerRef.value?.$el.clientWidth > (tabsRef.value?.ref?.$el.clientWidth ?? 0) && !localStorage.has('tabbarScrollTip')) {
localStorage.setItem('tabbarScrollTip', '')
const tips = faToast.info('温馨提示', {
const tips = useFaToast().info('温馨提示', {
description: '标签栏数量超过展示区域范围,可以将鼠标移到标签栏上,通过鼠标滚轮滑动浏览',
position: 'top-center',
duration: Infinity,
action: {
label: '知道了',
onClick: () => faToast.dismiss(tips),
onClick: () => useFaToast().dismiss(tips),
},
})
}
@@ -8,13 +8,15 @@ const mainPage = useAppPage()
const isAnimating = ref(false)
function handleClick() {
isAnimating.value = true
mainPage.reload()
}
function handleCtrlClick() {
location.reload()
function handleClick(event: MouseEvent) {
if (event.ctrlKey && !event.altKey && !event.metaKey && !event.shiftKey) {
location.reload()
return
}
if (!event.ctrlKey && !event.altKey && !event.metaKey && !event.shiftKey) {
isAnimating.value = true
mainPage.reload()
}
}
</script>
@@ -28,7 +30,7 @@ function handleCtrlClick() {
<p>可切换为浏览器原生刷新</p>
</div>
</template>
<FaButton variant="ghost" size="icon-sm" @click.exact="handleClick" @click.ctrl.exact="handleCtrlClick" @animationend="isAnimating = false">
<FaButton variant="ghost" size="icon-sm" @click="handleClick" @animationend="isAnimating = false">
<FaIcon name="i-iconoir:refresh-double" class="size-4" :class="{ animation: isAnimating }" />
</FaButton>
</FaTooltip>
@@ -8,7 +8,7 @@ defineOptions({
const route = useRoute()
const { copy, copied } = useClipboard()
watch(copied, (val) => {
val && faToast.success('复制成功')
val && useFaToast().success('复制成功')
})
function open() {
+1 -1
View File
@@ -110,7 +110,7 @@ function extendClose(router: Router) {
}
declare module 'vue-router' {
interface Router {
interface _RouterClassic {
/**
* 本方法为框架扩展语法,会同时关闭当前标签页
*
@@ -94,16 +94,6 @@ export const useAppAccountStore = defineStore('appAccount', () => {
await apiApp.passwordEdit(data)
}
// 锁屏
function lock() {
localStorage.removeItem('token')
}
// 解锁
function unlock() {
localStorage.setItem('token', token.value)
}
return {
token,
account,
@@ -115,7 +105,5 @@ export const useAppAccountStore = defineStore('appAccount', () => {
requestLogout,
getPermissions,
editPassword,
lock,
unlock,
}
})
+1 -1
View File
@@ -16,7 +16,6 @@ declare global {
const defineComponent: typeof import('vue').defineComponent
const defineStore: typeof import('pinia').defineStore
const effectScope: typeof import('vue').effectScope
const faToast: typeof import('@fantastic-admin/components').faToast
const getActivePinia: typeof import('pinia').getActivePinia
const getCurrentInstance: typeof import('vue').getCurrentInstance
const getCurrentScope: typeof import('vue').getCurrentScope
@@ -84,6 +83,7 @@ declare global {
const useFaDrawer: typeof import('@fantastic-admin/components').useFaDrawer
const useFaImagePreview: typeof import('@fantastic-admin/components').useFaImagePreview
const useFaModal: typeof import('@fantastic-admin/components').useFaModal
const useFaToast: typeof import('@fantastic-admin/components').useFaToast
const useId: typeof import('vue').useId
const useLink: typeof import('vue-router').useLink
const useModel: typeof import('vue').useModel
+10
View File
@@ -19,7 +19,9 @@ declare module 'vue' {
AppNotAllowed: typeof import('./../components/AppNotAllowed/index.vue')['default']
AppNotSupportedMobile: typeof import('./../components/AppNotSupportedMobile/index.vue')['default']
AppSystemInfo: typeof import('./../components/AppSystemInfo/index.vue')['default']
FaAlert: typeof import('@fantastic-admin/components')['FaAlert']
FaAvatar: typeof import('@fantastic-admin/components')['FaAvatar']
FaBadge: typeof import('@fantastic-admin/components')['FaBadge']
FaButton: typeof import('@fantastic-admin/components')['FaButton']
FaButtonGroup: typeof import('@fantastic-admin/components')['FaButtonGroup']
FaCard: typeof import('@fantastic-admin/components')['FaCard']
@@ -27,6 +29,7 @@ declare module 'vue' {
FaCheckboxGroup: typeof import('@fantastic-admin/components')['FaCheckboxGroup']
FaCollapsible: typeof import('@fantastic-admin/components')['FaCollapsible']
FaContextMenu: typeof import('@fantastic-admin/components')['FaContextMenu']
FaDescriptions: typeof import('@fantastic-admin/components')['FaDescriptions']
FaDivider: typeof import('@fantastic-admin/components')['FaDivider']
FaDrawer: typeof import('@fantastic-admin/components')['FaDrawer']
FaDropdown: typeof import('@fantastic-admin/components')['FaDropdown']
@@ -55,7 +58,9 @@ declare module 'vue' {
FaSelect: typeof import('@fantastic-admin/components')['FaSelect']
FaSlider: typeof import('@fantastic-admin/components')['FaSlider']
FaSwitch: typeof import('@fantastic-admin/components')['FaSwitch']
FaTable: typeof import('@fantastic-admin/components')['FaTable']
FaTabs: typeof import('@fantastic-admin/components')['FaTabs']
FaTag: typeof import('@fantastic-admin/components')['FaTag']
FaTextarea: typeof import('@fantastic-admin/components')['FaTextarea']
FaToast: typeof import('@fantastic-admin/components')['FaToast']
FaTooltip: typeof import('@fantastic-admin/components')['FaTooltip']
@@ -72,7 +77,9 @@ declare global {
const AppNotAllowed: typeof import('./../components/AppNotAllowed/index.vue')['default']
const AppNotSupportedMobile: typeof import('./../components/AppNotSupportedMobile/index.vue')['default']
const AppSystemInfo: typeof import('./../components/AppSystemInfo/index.vue')['default']
const FaAlert: typeof import('@fantastic-admin/components')['FaAlert']
const FaAvatar: typeof import('@fantastic-admin/components')['FaAvatar']
const FaBadge: typeof import('@fantastic-admin/components')['FaBadge']
const FaButton: typeof import('@fantastic-admin/components')['FaButton']
const FaButtonGroup: typeof import('@fantastic-admin/components')['FaButtonGroup']
const FaCard: typeof import('@fantastic-admin/components')['FaCard']
@@ -80,6 +87,7 @@ declare global {
const FaCheckboxGroup: typeof import('@fantastic-admin/components')['FaCheckboxGroup']
const FaCollapsible: typeof import('@fantastic-admin/components')['FaCollapsible']
const FaContextMenu: typeof import('@fantastic-admin/components')['FaContextMenu']
const FaDescriptions: typeof import('@fantastic-admin/components')['FaDescriptions']
const FaDivider: typeof import('@fantastic-admin/components')['FaDivider']
const FaDrawer: typeof import('@fantastic-admin/components')['FaDrawer']
const FaDropdown: typeof import('@fantastic-admin/components')['FaDropdown']
@@ -108,7 +116,9 @@ declare global {
const FaSelect: typeof import('@fantastic-admin/components')['FaSelect']
const FaSlider: typeof import('@fantastic-admin/components')['FaSlider']
const FaSwitch: typeof import('@fantastic-admin/components')['FaSwitch']
const FaTable: typeof import('@fantastic-admin/components')['FaTable']
const FaTabs: typeof import('@fantastic-admin/components')['FaTabs']
const FaTag: typeof import('@fantastic-admin/components')['FaTag']
const FaTextarea: typeof import('@fantastic-admin/components')['FaTextarea']
const FaToast: typeof import('@fantastic-admin/components')['FaToast']
const FaTooltip: typeof import('@fantastic-admin/components')['FaTooltip']
+3 -3
View File
@@ -33,12 +33,12 @@ const products = ref([
],
},
{
name: 'One-step-admin',
tagline: '干啥都快人一步的 Vue 中后台系统框架',
name: 'One-step Console',
tagline: '像导播一样编排你的工作现场',
logo: 'https://one-step-admin.hurui.me/logo.png',
url: 'https://one-step-admin.hurui.me',
images: [
'https://one-step-admin.hurui.me/preview1.png',
'https://one-step-admin.hurui.me/hero_preview.png',
],
},
])
+4 -1
View File
@@ -47,7 +47,10 @@ export default defineConfig(({ mode, command }) => {
},
plugins: createVitePlugins(mode, command === 'build'),
optimizeDeps: {
exclude: ['@fantastic-admin/components'],
exclude: [
'@fantastic-admin/components',
'@fantastic-admin/composables',
],
},
resolve: {
alias: {
-1
View File
@@ -29,7 +29,6 @@
"eruda": "catalog:",
"es-toolkit": "catalog:",
"hotkeys-js": "catalog:",
"lucide-vue-next": "catalog:",
"mitt": "catalog:",
"nprogress": "catalog:",
"path-browserify": "catalog:",
+2 -2
View File
@@ -51,7 +51,7 @@ function handleError(error: any) {
useAppAccountStore().requestLogout()
}
else {
faToast.error('Error', {
useFaToast().error('Error', {
description: error.message,
})
}
@@ -70,7 +70,7 @@ api.interceptors.response.use(
if (typeof response.data === 'object') {
if (response.data.status === 1) {
if (response.data.error) {
faToast.warning('Warning', {
useFaToast().warning('Warning', {
description: response.data.error,
})
return Promise.reject(response.data)

Some files were not shown because too many files have changed in this diff Show More