feat(公共): 离开页面提示hooks和取消异步函数hooks
This commit is contained in:
parent
1833b422fc
commit
45ab964050
|
@ -35,7 +35,7 @@
|
||||||
<a-button
|
<a-button
|
||||||
class="ml-3"
|
class="ml-3"
|
||||||
type="primary"
|
type="primary"
|
||||||
:loading="props.loading"
|
:loading="confirmLoading"
|
||||||
:disabled="props.disabledOk"
|
:disabled="props.disabledOk"
|
||||||
@click="confirmHandler"
|
@click="confirmHandler"
|
||||||
>
|
>
|
||||||
|
@ -74,7 +74,6 @@
|
||||||
title: string;
|
title: string;
|
||||||
confirm?: (enable: boolean | undefined) => void; // 确定
|
confirm?: (enable: boolean | undefined) => void; // 确定
|
||||||
visible: boolean;
|
visible: boolean;
|
||||||
loading: boolean;
|
|
||||||
close: () => void;
|
close: () => void;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -118,9 +117,19 @@
|
||||||
props?.close();
|
props?.close();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const confirmLoading = ref<boolean>(false);
|
||||||
|
|
||||||
const confirmHandler = async () => {
|
const confirmHandler = async () => {
|
||||||
if (props.confirm) {
|
if (props.confirm) {
|
||||||
props.confirm(switchEnable.value);
|
confirmLoading.value = true;
|
||||||
|
try {
|
||||||
|
await props.confirm(switchEnable.value);
|
||||||
|
confirmLoading.value = false;
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
} finally {
|
||||||
|
confirmLoading.value = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -1,23 +0,0 @@
|
||||||
import { ref } from 'vue';
|
|
||||||
|
|
||||||
export default function useAsyncHandler() {
|
|
||||||
const loading = ref<boolean>(false);
|
|
||||||
|
|
||||||
async function handleAsyncProcess<T>(reqAsyncFun: T): Promise<any> {
|
|
||||||
loading.value = true;
|
|
||||||
try {
|
|
||||||
await reqAsyncFun;
|
|
||||||
} catch (error) {
|
|
||||||
console.log(error);
|
|
||||||
loading.value = false;
|
|
||||||
return Promise.reject();
|
|
||||||
} finally {
|
|
||||||
loading.value = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
loading,
|
|
||||||
handleAsyncProcess,
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
import { ref, onUnmounted } from 'vue';
|
||||||
|
import useModal from '@/hooks/useModal';
|
||||||
|
import { onBeforeRouteLeave } from 'vue-router';
|
||||||
|
import { useI18n } from '@/hooks/useI18n';
|
||||||
|
|
||||||
|
// 离开页面确认提示
|
||||||
|
export default function useLeaveUnSaveTip() {
|
||||||
|
const isSave = ref(false);
|
||||||
|
const { openModal } = useModal();
|
||||||
|
const { t } = useI18n();
|
||||||
|
|
||||||
|
const setSaveStatus = (status: boolean) => {
|
||||||
|
isSave.value = status;
|
||||||
|
};
|
||||||
|
|
||||||
|
onBeforeRouteLeave((to, from, next) => {
|
||||||
|
if (to.path === from.path) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 如果已保存
|
||||||
|
if (isSave.value) {
|
||||||
|
next();
|
||||||
|
} else {
|
||||||
|
openModal({
|
||||||
|
type: 'error',
|
||||||
|
title: t('common.unSaveLeaveTitle'),
|
||||||
|
content: t('common.unSaveLeaveContent'),
|
||||||
|
okText: t('common.leave'),
|
||||||
|
cancelText: t('common.cancel'),
|
||||||
|
okButtonProps: {
|
||||||
|
status: 'normal',
|
||||||
|
},
|
||||||
|
onBeforeOk: async () => {
|
||||||
|
setSaveStatus(true);
|
||||||
|
next();
|
||||||
|
},
|
||||||
|
hideCancel: false,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
onUnmounted(() => {
|
||||||
|
isSave.value = false;
|
||||||
|
});
|
||||||
|
|
||||||
|
return {
|
||||||
|
setSaveStatus,
|
||||||
|
};
|
||||||
|
}
|
|
@ -40,4 +40,7 @@ export default {
|
||||||
'common.admin': 'Admin',
|
'common.admin': 'Admin',
|
||||||
'common.revokeDelete': 'Revoke delete',
|
'common.revokeDelete': 'Revoke delete',
|
||||||
'common.revokeDeleteSuccess': 'Revoke delete success',
|
'common.revokeDeleteSuccess': 'Revoke delete success',
|
||||||
|
'common.unSaveLeaveTitle': 'Leave this page?',
|
||||||
|
'common.unSaveLeaveContent': 'The system may not save your changes',
|
||||||
|
'common.leave': 'Leave',
|
||||||
};
|
};
|
||||||
|
|
|
@ -40,4 +40,7 @@ export default {
|
||||||
'common.admin': '管理员',
|
'common.admin': '管理员',
|
||||||
'common.revokeDelete': '撤销删除',
|
'common.revokeDelete': '撤销删除',
|
||||||
'common.revokeDeleteSuccess': '已撤销删除',
|
'common.revokeDeleteSuccess': '已撤销删除',
|
||||||
|
'common.unSaveLeaveTitle': '离开此页面?',
|
||||||
|
'common.unSaveLeaveContent': '系统可能不会保存你所做的更改',
|
||||||
|
'common.leave': '离开',
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue