| <template> | 
|   <a-card class="general-card" :title="$t('userInfo.title.myProject')"> | 
|     <template #extra> | 
|       <a-link>{{ $t('userInfo.showMore') }}</a-link> | 
|     </template> | 
|     <a-row :gutter="16"> | 
|       <a-col | 
|         v-for="(project, index) in projectList" | 
|         :key="index" | 
|         :xs="12" | 
|         :sm="12" | 
|         :md="12" | 
|         :lg="12" | 
|         :xl="8" | 
|         :xxl="8" | 
|         class="my-project-item" | 
|       > | 
|         <a-card> | 
|           <a-skeleton v-if="loading" :loading="loading" :animation="true"> | 
|             <a-skeleton-line :rows="3" /> | 
|           </a-skeleton> | 
|           <a-space v-else direction="vertical"> | 
|             <a-typography-text bold>{{ project.name }}</a-typography-text> | 
|             <a-typography-text type="secondary"> | 
|               {{ project.description }} | 
|             </a-typography-text> | 
|             <a-space> | 
|               <a-avatar-group :size="24"> | 
|                 {{ project.contributors }} | 
|                 <a-avatar | 
|                   v-for="(contributor, idx) in project.contributors" | 
|                   :key="idx" | 
|                   :size="32" | 
|                 > | 
|                   <img alt="avatar" :src="contributor.avatar" /> | 
|                 </a-avatar> | 
|               </a-avatar-group> | 
|               <a-typography-text type="secondary"> | 
|                 等{{ project.peopleNumber }}人 | 
|               </a-typography-text> | 
|             </a-space> | 
|           </a-space> | 
|         </a-card> | 
|       </a-col> | 
|     </a-row> | 
|   </a-card> | 
| </template> | 
|   | 
| <script lang="ts" setup> | 
|   import { queryMyProjectList, MyProjectRecord } from '@/api/user-center'; | 
|   import useRequest from '@/hooks/request'; | 
|   | 
|   const defaultValue = Array(6).fill({} as MyProjectRecord); | 
|   const { loading, response: projectList } = useRequest<MyProjectRecord[]>( | 
|     queryMyProjectList, | 
|     defaultValue | 
|   ); | 
| </script> | 
|   | 
| <style scoped lang="less"> | 
|   :deep(.arco-card-body) { | 
|     min-height: 128px; | 
|     padding-bottom: 0; | 
|   } | 
|   .my-project { | 
|     &-header { | 
|       display: flex; | 
|       align-items: flex-start; | 
|       justify-content: space-between; | 
|     } | 
|   | 
|     &-title { | 
|       margin-top: 0 !important; | 
|       margin-bottom: 18px !important; | 
|     } | 
|   | 
|     &-list { | 
|       display: flex; | 
|       justify-content: space-between; | 
|     } | 
|   | 
|     &-item { | 
|       // padding-right: 16px; | 
|       margin-bottom: 16px; | 
|   | 
|       &:last-child { | 
|         padding-right: 0; | 
|       } | 
|     } | 
|   } | 
| </style> |