|
@@ -1,36 +1,65 @@
|
|
|
// 程序状态的hook接口
|
|
|
-import { Loading } from 'quasar';
|
|
|
+import { Dialog } from 'quasar';
|
|
|
import SystemApi from 'src/api/SystemApi';
|
|
|
+import useInterval from 'src/composables/use-interval';
|
|
|
+import { computed, onBeforeUnmount, watch } from 'vue';
|
|
|
+import LoadingDialogAppPrepareJobInit from 'components/LoadingDialogAppPrepareError/LoadingDialogAppPrepareJobInit.vue';
|
|
|
+import { systemState } from 'src/store/systemState';
|
|
|
+
|
|
|
+let isPreJobLoadingDialogOpened = false;
|
|
|
+const openPreJobLoadingDialog = () => {
|
|
|
+ if (isPreJobLoadingDialogOpened) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ isPreJobLoadingDialogOpened = true;
|
|
|
+ Dialog.create({
|
|
|
+ component: LoadingDialogAppPrepareJobInit,
|
|
|
+ }).onDismiss(() => {
|
|
|
+ isPreJobLoadingDialogOpened = false;
|
|
|
+ });
|
|
|
+};
|
|
|
|
|
|
export const useAppStatusLoading = () => {
|
|
|
- let timer = null;
|
|
|
+ const prepareStatus = computed(() => systemState.preJobStatus);
|
|
|
+
|
|
|
+ const updateDialog = () => {
|
|
|
+ if (prepareStatus.value?.is_done !== true) {
|
|
|
+ openPreJobLoadingDialog();
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ const getPrepareStatus = async () => {
|
|
|
+ const [res] = await SystemApi.getPrepareStatus();
|
|
|
+ systemState.preJobStatus = res;
|
|
|
+ };
|
|
|
+
|
|
|
+ const { resetInterval, stopInterval } = useInterval(
|
|
|
+ async () => {
|
|
|
+ await getPrepareStatus();
|
|
|
+ updateDialog();
|
|
|
+ },
|
|
|
+ 1000,
|
|
|
+ false
|
|
|
+ );
|
|
|
|
|
|
const startLoading = async () => {
|
|
|
- Loading.show({
|
|
|
- message: '正在应用程序配置',
|
|
|
- html: true,
|
|
|
- });
|
|
|
-
|
|
|
- const sleep = (ms) =>
|
|
|
- new Promise((resolve) => {
|
|
|
- setTimeout(resolve, ms);
|
|
|
- });
|
|
|
- // 考虑保存配置后HTTP服务没有立即重启的情况,等待几秒再请求状态接口
|
|
|
- await sleep(6000);
|
|
|
-
|
|
|
- const handler = async () => {
|
|
|
- const [res, err] = await SystemApi.getInfo();
|
|
|
- if (res || err?.error?.status <= 401) {
|
|
|
- clearInterval(timer);
|
|
|
- Loading.hide();
|
|
|
+ await getPrepareStatus();
|
|
|
+ updateDialog();
|
|
|
+ resetInterval();
|
|
|
+ };
|
|
|
+
|
|
|
+ watch(
|
|
|
+ () => prepareStatus.value?.is_done,
|
|
|
+ (val) => {
|
|
|
+ if (val === true) {
|
|
|
+ stopInterval();
|
|
|
}
|
|
|
- };
|
|
|
+ }
|
|
|
+ );
|
|
|
|
|
|
- timer = setInterval(async () => {
|
|
|
- handler();
|
|
|
- }, 1000);
|
|
|
- handler();
|
|
|
- };
|
|
|
+ onBeforeUnmount(() => {
|
|
|
+ stopInterval();
|
|
|
+ });
|
|
|
|
|
|
return {
|
|
|
startLoading,
|