hookehuyr

新增个人首页

1 <template> 1 <template>
2 - <div class="person-index-page"></div> 2 + <div class="person-index-page">
3 + <div class="header-wrapper">
4 + <div class="info">
5 + <van-row>
6 + <van-col>
7 + <van-image round width="50" height="50" src="https://cdn.jsdelivr.net/npm/@vant/assets/cat.jpeg"
8 + style="padding-right: 1rem;" />
9 + </van-col>
10 + <van-col class="text-wrapper" span="18">
11 + <div>
12 + <div class="username">瑟日古娜</div>
13 + <div class="toggle-user" @click="toggleUser"><van-icon name="plus" />&nbsp;关注</div>
14 + </div>
15 + <div class="address">呼和浩特市新城区蒙古族幼儿园</div>
16 + </van-col>
17 + </van-row>
18 + </div>
19 +
20 + <div class="sub-data">
21 + <van-row>
22 + <van-col span="11" offset="1" class="un-tap-color">
23 + <p>获赞</p>
24 + <p>25478</p>
25 + </van-col>
26 + <van-col span="1" class="divide">|</van-col>
27 + <van-col span="11" class="un-tap-color">
28 + <p>粉丝</p>
29 + <p>45</p>
30 + </van-col>
31 + </van-row>
32 + </div>
33 + </div>
34 + <div style="padding: 0 1rem; background-color: #F7F7F7;">
35 + <van-row>
36 + <van-col span="6">
37 + <div style="color: #222222; font-size: 1.1rem; border-bottom: 2px solid #F9D95C; padding: 0.5rem; text-align: center;">发布作品</div>
38 + </van-col>
39 + <van-col span="12" offset="6" style="text-align: right; color: #626262;">
40 + <div style="padding-top: 0.5rem;">6个作品</div>
41 + </van-col>
42 + </van-row>
43 + </div>
44 + <div>
45 + <van-list v-model:loading="loading" :finished="finished" finished-text="没有更多了" @load="onLoad">
46 + <template v-for="item in dataList" :key="item" style="height: 3rem;">
47 + <video-card :item="item"></video-card>
48 + </template>
49 + </van-list>
50 + </div>
51 + </div>
3 </template> 52 </template>
4 53
5 <script setup> 54 <script setup>
55 +import dataList from '@/mock/video_list'
56 +import VideoCard from '@/components/VideoCard/index.vue'
57 +
6 import { ref, reactive, onMounted } from 'vue' 58 import { ref, reactive, onMounted } from 'vue'
7 import { useRoute, useRouter } from 'vue-router' 59 import { useRoute, useRouter } from 'vue-router'
8 import axios from '@/utils/axios'; 60 import axios from '@/utils/axios';
...@@ -11,9 +63,32 @@ import { Toast } from 'vant'; ...@@ -11,9 +63,32 @@ import { Toast } from 'vant';
11 const $route = useRoute(); 63 const $route = useRoute();
12 const $router = useRouter(); 64 const $router = useRouter();
13 65
14 - onMounted(() => { 66 +// 处理书籍下作品列表
67 +const list = ref([]);
68 +const loading = ref(false);
69 +const finished = ref(false);
70 +
71 +const onLoad = () => {
72 + // 异步更新数据
73 + // setTimeout 仅做示例,真实场景中一般为 ajax 请求
74 + setTimeout(() => {
75 + for (let i = 0; i < 20; i++) {
76 + list.value.push(list.value.length + 1);
77 + }
78 +
79 + // 加载状态结束
80 + loading.value = false;
81 +
82 + // 数据全部加载完成
83 + if (list.value.length >= 100) {
84 + finished.value = true;
85 + }
86 + }, 1000);
87 +};
88 +
89 +onMounted(() => {
15 90
16 - }) 91 +})
17 </script> 92 </script>
18 93
19 <script> 94 <script>
...@@ -21,12 +96,12 @@ import mixin from 'common/mixin'; ...@@ -21,12 +96,12 @@ import mixin from 'common/mixin';
21 96
22 export default { 97 export default {
23 mixins: [mixin.init], 98 mixins: [mixin.init],
24 - data () { 99 + data() {
25 return { 100 return {
26 101
27 } 102 }
28 }, 103 },
29 - mounted () { 104 + mounted() {
30 105
31 }, 106 },
32 methods: { 107 methods: {
...@@ -36,5 +111,59 @@ export default { ...@@ -36,5 +111,59 @@ export default {
36 </script> 111 </script>
37 112
38 <style lang="less" scoped> 113 <style lang="less" scoped>
39 -.person-index-page {} 114 +.person-index-page {
115 + .header-wrapper {
116 + background: linear-gradient(310deg, #FDD347 0%, #FFED6D 100%);
117 +
118 + .info {
119 + padding: 2rem;
120 + padding-right: 0;
121 +
122 + .text-wrapper {
123 + line-height: 1.5;
124 +
125 + .username {
126 + display: inline-block;
127 + overflow: auto;
128 + font-size: 1.15rem;
129 + color: #222222;
130 + }
131 +
132 + .toggle-user {
133 + float: right;
134 + font-size: 0.8rem;
135 + background-color: white;
136 + border-radius: 15px;
137 + padding: 5px 10px;
138 + color: #713610;
139 + }
140 + }
141 +
142 + .address {
143 + font-size: 0.85rem;
144 + color: #999999;
145 + }
146 + }
147 +
148 + .sub-data {
149 + text-align: center;
150 + overflow: auto;
151 + padding-bottom: 1rem;
152 +
153 + .un-tap-color {
154 + color: #666666;
155 + }
156 +
157 + .tap-color {
158 + color: #713610;
159 + }
160 +
161 + .divide {
162 + line-height: 2.5;
163 + color: #999999;
164 + font-size: 1rem;
165 + }
166 + }
167 + }
168 +}
40 </style> 169 </style>
...\ No newline at end of file ...\ No newline at end of file
......