初始化 ui.

This commit is contained in:
lijiahang
2023-07-27 18:48:15 +08:00
parent ee53ec6486
commit 5be2c7fda2
185 changed files with 1107 additions and 17815 deletions

View File

@@ -12,7 +12,7 @@ export default function useLocale() {
return;
}
i18.locale.value = value;
localStorage.setItem('arco-locale', value);
localStorage.setItem('locale', value);
Message.success(i18.t('navbar.action.locale'));
};
return {

View File

@@ -4,30 +4,26 @@ import { useUserStore } from '@/store';
export default function usePermission() {
const userStore = useUserStore();
return {
// TODO test
accessRouter(route: RouteLocationNormalized | RouteRecordRaw) {
return (
!route.meta?.requiresAuth ||
!route.meta?.roles ||
route.meta?.roles?.includes('*') ||
route.meta?.roles?.includes(userStore.role)
!route.meta?.permission ||
userStore.permission?.includes(route.meta?.permission)
);
},
findFirstPermissionRoute(_routers: any, role = 'admin') {
findFirstPermissionRoute(_routers: any, permission: string) {
const cloneRouters = [..._routers];
while (cloneRouters.length) {
const firstElement = cloneRouters.shift();
if (
firstElement?.meta?.roles?.find((el: string[]) => {
return el.includes('*') || el.includes(role);
})
)
if (firstElement?.meta?.permission === permission) {
return { name: firstElement.name };
}
if (firstElement?.children) {
cloneRouters.push(...firstElement.children);
}
}
return null;
},
// You can add any rules you want
};
}

View File

@@ -3,11 +3,6 @@ import { AxiosResponse } from 'axios';
import { HttpResponse } from '@/api/interceptor';
import useLoading from './loading';
// use to fetch list
// Don't use async function. It doesn't work in async function.
// Use the bind function to add parameters
// example: useRequest(api.bind(null, {}))
export default function useRequest<T>(
api: () => Promise<AxiosResponse<HttpResponse>>,
defaultValue = [] as unknown as T,
@@ -15,12 +10,10 @@ export default function useRequest<T>(
) {
const { loading, setLoading } = useLoading(isLoading);
const response = ref<T>(defaultValue);
api()
.then((res) => {
response.value = res.data as unknown as UnwrapRef<T>;
})
.finally(() => {
setLoading(false);
});
api().then((res) => {
response.value = res.data as unknown as UnwrapRef<T>;
}).finally(() => {
setLoading(false);
});
return { loading, response };
}

View File

@@ -3,7 +3,7 @@ import { useDebounceFn } from '@vueuse/core';
import { useAppStore } from '@/store';
import { addEventListen, removeEventListen } from '@/utils/event';
const WIDTH = 992; // https://arco.design/vue/component/grid#responsivevalue
const WIDTH = 992;
function queryDevice() {
const rect = document.body.getBoundingClientRect();
@@ -12,6 +12,7 @@ function queryDevice() {
export default function useResponsive(immediate?: boolean) {
const appStore = useAppStore();
function resizeHandler() {
if (!document.hidden) {
const isMobile = queryDevice();
@@ -19,6 +20,7 @@ export default function useResponsive(immediate?: boolean) {
appStore.toggleMenu(isMobile);
}
}
const debounceFn = useDebounceFn(resizeHandler, 100);
onMounted(() => {
if (immediate) debounceFn();

View File

@@ -9,9 +9,9 @@ export default function useUser() {
const logout = async (logoutTo?: string) => {
await userStore.logout();
const currentRoute = router.currentRoute.value;
Message.success('登出成功');
Message.success('已退出登录');
router.push({
name: logoutTo && typeof logoutTo === 'string' ? logoutTo : 'login',
name: logoutTo || 'login',
query: {
...router.currentRoute.value.query,
redirect: currentRoute.name as string,