| <template> | 
|   <div class="container"> | 
|     <Breadcrumb :items="['menu.profile', 'menu.profile.basic']" /> | 
|     <a-space direction="vertical" :size="16" fill> | 
|       <a-card class="general-card" :title="$t('basicProfile.title.form')"> | 
|         <template #extra> | 
|           <a-space> | 
|             <a-button>{{ $t('basicProfile.cancel') }}</a-button> | 
|             <a-button type="primary"> | 
|               {{ $t('basicProfile.goBack') }} | 
|             </a-button> | 
|           </a-space> | 
|         </template> | 
|         <a-steps v-model:current="step" line-less class="steps"> | 
|           <a-step>{{ $t('basicProfile.steps.commit') }}</a-step> | 
|           <a-step>{{ $t('basicProfile.steps.approval') }}</a-step> | 
|           <a-step>{{ $t('basicProfile.steps.finish') }}</a-step> | 
|         </a-steps> | 
|       </a-card> | 
|       <a-card class="general-card"> | 
|         <ProfileItem :loading="loading" :render-data="currentData" /> | 
|       </a-card> | 
|       <a-card class="general-card"> | 
|         <ProfileItem :loading="preLoading" type="pre" :render-data="preData" /> | 
|       </a-card> | 
|       <OperationLog /> | 
|     </a-space> | 
|   </div> | 
| </template> | 
|   | 
| <script lang="ts" setup> | 
|   import { ref } from 'vue'; | 
|   import useLoading from '@/hooks/loading'; | 
|   import { queryProfileBasic, ProfileBasicRes } from '@/api/profile'; | 
|   import ProfileItem from './components/profile-item.vue'; | 
|   import OperationLog from './components/operation-log.vue'; | 
|   | 
|   const { loading, setLoading } = useLoading(true); | 
|   const { loading: preLoading, setLoading: preSetLoading } = useLoading(true); | 
|   const currentData = ref<ProfileBasicRes>({} as ProfileBasicRes); | 
|   const preData = ref<ProfileBasicRes>({} as ProfileBasicRes); | 
|   const step = ref(1); | 
|   const fetchCurrentData = async () => { | 
|     try { | 
|       const { data } = await queryProfileBasic(); | 
|       currentData.value = data; | 
|       step.value = 2; | 
|     } catch (err) { | 
|       // you can report use errorHandler or other | 
|     } finally { | 
|       setLoading(false); | 
|     } | 
|   }; | 
|   const fetchPreData = async () => { | 
|     try { | 
|       const { data } = await queryProfileBasic(); | 
|       preData.value = data; | 
|     } catch (err) { | 
|       // you can report use errorHandler or other | 
|     } finally { | 
|       preSetLoading(false); | 
|     } | 
|   }; | 
|   fetchCurrentData(); | 
|   fetchPreData(); | 
| </script> | 
|   | 
| <script lang="ts"> | 
|   export default { | 
|     name: 'Basic', | 
|   }; | 
| </script> | 
|   | 
| <style scoped lang="less"> | 
|   .container { | 
|     padding: 0 20px 20px 20px; | 
|   } | 
|   | 
|   .steps { | 
|     max-width: 548px; | 
|     margin: 0 auto 10px; | 
|   } | 
| </style> |