2025-06-03 11:53:46 +08:00
|
|
|
|
<template>
|
|
|
|
|
<div class="sales-top">
|
|
|
|
|
<el-card>
|
2025-06-07 15:51:05 +08:00
|
|
|
|
<template v-slot:header>
|
|
|
|
|
<div class="clearfix">
|
|
|
|
|
<el-row>
|
|
|
|
|
<el-col :span="6">
|
|
|
|
|
<div style="font-size: large">
|
2025-06-25 15:08:12 +08:00
|
|
|
|
<el-radio-group v-model="params.statType" @change="getData">
|
2025-06-07 15:51:05 +08:00
|
|
|
|
<el-radio-button label="2">商品销量榜</el-radio-button>
|
|
|
|
|
<el-radio-button label="1">规格销量榜</el-radio-button>
|
|
|
|
|
</el-radio-group>
|
|
|
|
|
</div>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="18">
|
|
|
|
|
<div style="text-align: right">
|
2025-06-25 15:08:12 +08:00
|
|
|
|
<el-radio-group v-model="params.type" @change="getData">
|
2025-06-07 15:51:05 +08:00
|
|
|
|
<el-radio-button label="0">今日</el-radio-button>
|
|
|
|
|
<el-radio-button label="7">近七日</el-radio-button>
|
|
|
|
|
<el-radio-button label="30">近三十日</el-radio-button>
|
|
|
|
|
</el-radio-group>
|
|
|
|
|
</div>
|
|
|
|
|
</el-col>
|
|
|
|
|
</el-row>
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
2025-06-03 11:53:46 +08:00
|
|
|
|
<el-table v-loading="loading" :data="salesTopData" :border="false">
|
|
|
|
|
<el-table-column type="index" width="80"></el-table-column>
|
|
|
|
|
<el-table-column prop="productName" label="商品名称"></el-table-column>
|
|
|
|
|
<el-table-column prop="spData" label="规格" v-if="params.statType == 1">
|
|
|
|
|
<template v-slot="scope">
|
|
|
|
|
<div v-for="(value, key) in JSON.parse(scope.row.spData)">{{ key }}:{{ value }} </div>
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column label="主图" align="center" prop="pic">
|
2025-06-07 15:51:05 +08:00
|
|
|
|
<template v-slot="{ row }">
|
|
|
|
|
<el-image v-if="row.pic" :src="row.pic" :preview-src-list="[row.pic]" class="small-img circle-img" />
|
2025-06-03 11:53:46 +08:00
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column prop="totalSales" label="销量" width="120">
|
2025-06-07 15:51:05 +08:00
|
|
|
|
<template #default="{ row }"> {{ row.totalSales }} 件 </template>
|
2025-06-03 11:53:46 +08:00
|
|
|
|
</el-table-column>
|
|
|
|
|
</el-table>
|
|
|
|
|
</el-card>
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script>
|
2025-06-07 15:51:05 +08:00
|
|
|
|
import { goodsStatistics } from '@/api/statistics';
|
2025-06-03 11:53:46 +08:00
|
|
|
|
import dateUtil from '@/utils/DateUtil';
|
|
|
|
|
|
|
|
|
|
export default {
|
|
|
|
|
name: 'TopProduct',
|
|
|
|
|
data() {
|
|
|
|
|
return {
|
|
|
|
|
salesTopData: [],
|
|
|
|
|
params: {
|
|
|
|
|
statType: 1,
|
2025-06-07 15:51:05 +08:00
|
|
|
|
type: 0,
|
2025-06-03 11:53:46 +08:00
|
|
|
|
size: 10,
|
|
|
|
|
startDate: '2023-02-01',
|
|
|
|
|
endDate: '2023-06-01'
|
|
|
|
|
},
|
|
|
|
|
loading: false
|
|
|
|
|
};
|
|
|
|
|
},
|
|
|
|
|
created() {
|
2025-06-07 15:51:05 +08:00
|
|
|
|
this.getData();
|
2025-06-03 11:53:46 +08:00
|
|
|
|
},
|
|
|
|
|
methods: {
|
2025-06-07 15:51:05 +08:00
|
|
|
|
getData() {
|
|
|
|
|
this.loading = true;
|
|
|
|
|
const range = Number(this.params.type);
|
|
|
|
|
this.params.startDate = dateUtil.getAfterDate(-range);
|
|
|
|
|
this.params.endDate = dateUtil.getAfterDate(0);
|
|
|
|
|
goodsStatistics(this.params).then((res) => {
|
|
|
|
|
this.salesTopData = res;
|
|
|
|
|
this.loading = false;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-06-03 11:53:46 +08:00
|
|
|
|
};
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<style>
|
|
|
|
|
.sales-top {
|
|
|
|
|
margin: 20px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.export-btn {
|
|
|
|
|
float: right;
|
|
|
|
|
margin-right: 20px;
|
|
|
|
|
}
|
|
|
|
|
</style>
|