# 粉丝管理
# 组件与路由配置
目标:配置粉丝组件路由
- 配置路由映射
import Fans from '@/views/Fans.vue'
{ path: 'fans', component: Fans }
- 路由链接
<el-menu-item index="/home/fans">
# 组件基本布局
目标:实现粉丝组件的基本布局
<el-card>
<div slot="header">
粉丝管理
</div>
<!-- 内容区 -->
<el-tabs v-model="activeName" type="card">
<el-tab-pane label="粉丝概况" name="base">
<!-- 粉丝概况 -->
<div>粉丝概况</div>
</el-tab-pane>
<el-tab-pane label="粉丝画像" name="picture">
<!-- 粉丝画像 -->
<div>粉丝画像</div>
</el-tab-pane>
<el-tab-pane label="粉丝列表" name="list">
<!-- 粉丝列表 -->
<div>粉丝列表</div>
</el-tab-pane>
</el-tabs>
</el-card>
# 粉丝列表
目标:实现粉丝列表动态渲染
- 相关数据
data () {
return {
// 粉丝列表
fansList: [],
// 请求参数
filterParams: {
page: 1,
per_page: 21
},
// 总条数
total: 0,
// 当前激活选择卡名称
activeName: 'list'
}
}
- 获取接口数据
methods: {
async loadFansList () {
// 获取粉丝列表数据
const [err, ret] = await getFansList(this.filterParams)
if (err) {
return this.$message.error('获取粉丝列表失败!')
}
this.list = ret.data.results
this.total = ret.data.total_count
}
},
created () {
this.loadFansList()
}
- 列表渲染
<div class="fans_list">
<!-- item.id.toString() 因为使用json-bigint后id变成了对象 -->
<div class="fans_item" v-for="item in fansList" :key="item.id.toString()">
<!-- 头像 -->
<el-avatar :size="80" :src="item.photo">
<!-- 如果src路径对应的图片加载失败,就显示默认的如下的图片 -->
<img src="https://cube.elemecdn.com/e/fd/0fc7d20532fdaf769a25683617711png.png"/>
</el-avatar>
<!-- 用户名 -->
<p>{{item.name}}</p>
<!-- 关注按钮 -->
<el-button type="primary" plain size="small">+关注</el-button>
</div>
</div>
<el-pagination
style="margin-top:20px"
background
layout="prev, pager, next"
:total="total"
:current-page="reqParams.page"
:page-size="reqParams.per_page"
@current-change="changePager"
></el-pagination>
- 列表样式
.fans_item {
width: 120px;
height: 170px;
border: 1px dashed #ddd;
text-align: center;
padding: 10px 0;
display: inline-block;
margin-right: 50px;
margin-bottom: 15px;
p {
font-size: 12px;
padding: 5px 0;
}
}
# 粉丝画像
目标:基于echarts实现粉丝画像功能
- 图标填充标签
<div ref="dom" style="width:600px;height:400px"></div>
- 初始化图表
initEcharts () {
// 初始化图表
const option = {
color: ['#3398DB'],
tooltip: {
trigger: 'axis',
axisPointer: { // 坐标轴指示器,坐标轴触发有效
type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
}
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
xAxis: [
{
type: 'category',
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
axisTick: {
alignWithLabel: true
}
}
],
yAxis: [
{
type: 'value'
}
],
series: [
{
name: '直接访问',
type: 'bar',
barWidth: '60%',
data: [10, 52, 200, 334, 390, 330, 220]
}
]
}
// 获取echarts的填充位置
const div = this.$refs.fans
// 创建echarts实例对象
const chart = echarts.init(div)
// 设置图片的选项
chart.setOption(option)
},
mounted () {
// 初始化粉丝画像的图表
this.initEcharts()
}