|  | @@ -0,0 +1,108 @@
 | 
	
		
			
				|  |  | +import ColEmpty from '@/components/col-empty'
 | 
	
		
			
				|  |  | +import Pagination from '@/components/pagination'
 | 
	
		
			
				|  |  | +import request from '@/helpers/request'
 | 
	
		
			
				|  |  | +import styles from './index.module.less'
 | 
	
		
			
				|  |  | +import { ElSkeleton, ElSkeletonItem } from 'element-plus'
 | 
	
		
			
				|  |  | +import { defineComponent } from 'vue'
 | 
	
		
			
				|  |  | +import Item from './item'
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +export default defineComponent({
 | 
	
		
			
				|  |  | +  name: 'list',
 | 
	
		
			
				|  |  | +  data() {
 | 
	
		
			
				|  |  | +    return {
 | 
	
		
			
				|  |  | +      pageInfo: {
 | 
	
		
			
				|  |  | +        // 分页规则
 | 
	
		
			
				|  |  | +        limit: 10, // 限制显示条数
 | 
	
		
			
				|  |  | +        page: 1, // 当前页
 | 
	
		
			
				|  |  | +        total: 0, // 总条数
 | 
	
		
			
				|  |  | +        page_size: [10, 20, 40, 50] // 选择限制显示条数
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +      list: [] as any[],
 | 
	
		
			
				|  |  | +      loading: false,
 | 
	
		
			
				|  |  | +      dataShow: false // 是否有数据
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +  mounted() {
 | 
	
		
			
				|  |  | +    this.getList()
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +  methods: {
 | 
	
		
			
				|  |  | +    async getList() {
 | 
	
		
			
				|  |  | +      this.loading = true
 | 
	
		
			
				|  |  | +      try {
 | 
	
		
			
				|  |  | +        const { data } = await request.post(
 | 
	
		
			
				|  |  | +          '/api-website/student/queryMyFollow',
 | 
	
		
			
				|  |  | +          {
 | 
	
		
			
				|  |  | +            requestType: 'json',
 | 
	
		
			
				|  |  | +            data: {
 | 
	
		
			
				|  |  | +              page: this.pageInfo.page,
 | 
	
		
			
				|  |  | +              rows: this.pageInfo.limit
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        )
 | 
	
		
			
				|  |  | +        this.list = data.rows || []
 | 
	
		
			
				|  |  | +        this.pageInfo.total = data.total
 | 
	
		
			
				|  |  | +        if (data.total <= 0) {
 | 
	
		
			
				|  |  | +          this.dataShow = true
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      } catch {}
 | 
	
		
			
				|  |  | +      if (this.dataShow) {
 | 
	
		
			
				|  |  | +        this.loading = false
 | 
	
		
			
				|  |  | +      } else {
 | 
	
		
			
				|  |  | +        setTimeout(() => {
 | 
	
		
			
				|  |  | +          this.loading = false
 | 
	
		
			
				|  |  | +        }, 200)
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +  render() {
 | 
	
		
			
				|  |  | +    return (
 | 
	
		
			
				|  |  | +      <>
 | 
	
		
			
				|  |  | +        <div class="px-[38px] pt-4">
 | 
	
		
			
				|  |  | +          <ElSkeleton
 | 
	
		
			
				|  |  | +            loading={this.loading}
 | 
	
		
			
				|  |  | +            animated
 | 
	
		
			
				|  |  | +            class=" w-full m-auto px-[14px] flex items-center flex-col"
 | 
	
		
			
				|  |  | +            count={3}
 | 
	
		
			
				|  |  | +            v-slots={{
 | 
	
		
			
				|  |  | +              template: () => (
 | 
	
		
			
				|  |  | +                <div class="h-[94px] flex items-center justify-between w-full mb-2">
 | 
	
		
			
				|  |  | +                  <div class="w-2/3 flex items-center">
 | 
	
		
			
				|  |  | +                    <ElSkeletonItem
 | 
	
		
			
				|  |  | +                      variant="circle"
 | 
	
		
			
				|  |  | +                      style={{ width: '66px', height: '66px' }}
 | 
	
		
			
				|  |  | +                    ></ElSkeletonItem>
 | 
	
		
			
				|  |  | +                    <div class="w-1/2 pl-2">
 | 
	
		
			
				|  |  | +                      <ElSkeletonItem variant="h3"></ElSkeletonItem>
 | 
	
		
			
				|  |  | +                      <ElSkeletonItem
 | 
	
		
			
				|  |  | +                        variant="p"
 | 
	
		
			
				|  |  | +                        style={{ width: '50%' }}
 | 
	
		
			
				|  |  | +                      ></ElSkeletonItem>
 | 
	
		
			
				|  |  | +                    </div>
 | 
	
		
			
				|  |  | +                  </div>
 | 
	
		
			
				|  |  | +                  <ElSkeletonItem
 | 
	
		
			
				|  |  | +                    variant="p"
 | 
	
		
			
				|  |  | +                    style={{ width: '20%' }}
 | 
	
		
			
				|  |  | +                  ></ElSkeletonItem>
 | 
	
		
			
				|  |  | +                </div>
 | 
	
		
			
				|  |  | +              )
 | 
	
		
			
				|  |  | +            }}
 | 
	
		
			
				|  |  | +          >
 | 
	
		
			
				|  |  | +            {this.list.map((item: any) => (
 | 
	
		
			
				|  |  | +              <Item class="mb-2" item={item} />
 | 
	
		
			
				|  |  | +            ))}
 | 
	
		
			
				|  |  | +          </ElSkeleton>
 | 
	
		
			
				|  |  | +        </div>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        <Pagination
 | 
	
		
			
				|  |  | +          total={this.pageInfo.total}
 | 
	
		
			
				|  |  | +          v-model:page={this.pageInfo.page}
 | 
	
		
			
				|  |  | +          limit={this.pageInfo.limit}
 | 
	
		
			
				|  |  | +          pageSizes={this.pageInfo.page_size}
 | 
	
		
			
				|  |  | +          pagination={this.getList}
 | 
	
		
			
				|  |  | +        />
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        {this.dataShow && <ColEmpty />}
 | 
	
		
			
				|  |  | +      </>
 | 
	
		
			
				|  |  | +    )
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +})
 |