|
@@ -1,4 +1,4 @@
|
|
-<script setup lang="ts">
|
|
|
|
|
|
+<script setup lang="ts" generic="T extends Record<string, any>">
|
|
import { computed, ref } from 'vue';
|
|
import { computed, ref } from 'vue';
|
|
import { useRouter } from 'vue-router';
|
|
import { useRouter } from 'vue-router';
|
|
|
|
|
|
@@ -6,11 +6,14 @@ import { t } from '@/i18n';
|
|
import { addUnit } from '@/utils';
|
|
import { addUnit } from '@/utils';
|
|
|
|
|
|
import type { Component, CSSProperties } from 'vue';
|
|
import type { Component, CSSProperties } from 'vue';
|
|
-import type { UseGuideStepItem } from '@/types';
|
|
|
|
|
|
+import type { FormInstance } from 'ant-design-vue';
|
|
|
|
+import type { FormRules, UseGuideStepItem } from '@/types';
|
|
|
|
|
|
interface Props {
|
|
interface Props {
|
|
title: string;
|
|
title: string;
|
|
steps: UseGuideStepItem[];
|
|
steps: UseGuideStepItem[];
|
|
|
|
+ form: T;
|
|
|
|
+ rules: FormRules<T>;
|
|
contentOffset?: number;
|
|
contentOffset?: number;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -18,6 +21,7 @@ const props = defineProps<Props>();
|
|
|
|
|
|
const router = useRouter();
|
|
const router = useRouter();
|
|
const current = ref(0);
|
|
const current = ref(0);
|
|
|
|
+const formRef = ref<FormInstance>();
|
|
|
|
|
|
const isFirstStep = computed(() => {
|
|
const isFirstStep = computed(() => {
|
|
return current.value === 0;
|
|
return current.value === 0;
|
|
@@ -61,7 +65,14 @@ const finishCurrentStep = () => {
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
- goNextStep();
|
|
|
|
|
|
+ formRef.value
|
|
|
|
+ ?.validate()
|
|
|
|
+ .then(() => {
|
|
|
|
+ goNextStep();
|
|
|
|
+ })
|
|
|
|
+ .catch((err) => {
|
|
|
|
+ console.error(err);
|
|
|
|
+ });
|
|
};
|
|
};
|
|
</script>
|
|
</script>
|
|
|
|
|
|
@@ -79,7 +90,9 @@ const finishCurrentStep = () => {
|
|
</ALayoutSider>
|
|
</ALayoutSider>
|
|
<ALayout>
|
|
<ALayout>
|
|
<ALayoutContent class="use-guide-main" :style="contentStyle">
|
|
<ALayoutContent class="use-guide-main" :style="contentStyle">
|
|
- <Component :is="currentComponent" />
|
|
|
|
|
|
+ <AForm ref="formRef" :model="form" :rules="rules">
|
|
|
|
+ <Component :is="currentComponent" :form="form" />
|
|
|
|
+ </AForm>
|
|
</ALayoutContent>
|
|
</ALayoutContent>
|
|
<ALayoutFooter class="use-guide-footer">
|
|
<ALayoutFooter class="use-guide-footer">
|
|
<AButton type="text" :disabled="isLastStep" @click="goNextStep">{{ $t('common.skip') }}</AButton>
|
|
<AButton type="text" :disabled="isLastStep" @click="goNextStep">{{ $t('common.skip') }}</AButton>
|