|
@@ -0,0 +1,182 @@
|
|
|
|
+<template>
|
|
|
|
+ <div>
|
|
|
|
+ <el-card>
|
|
|
|
+ <span class="title">监控ASIN每月平均评分</span>
|
|
|
|
+ <div style="display: flex; align-items: baseline; justify-content: space-between">
|
|
|
|
+ <div style="display: flex; gap: 25px; margin-bottom: 10px">
|
|
|
|
+ <div>
|
|
|
|
+ <span style="font-size: 14px; padding-right: 4px; color: #95969a">ASIN:</span>
|
|
|
|
+ <el-input v-model="searchAsin" clearable style="width: 180px" @change="fetchData"></el-input>
|
|
|
|
+ </div>
|
|
|
|
+ <div>
|
|
|
|
+ <span style="font-size: 14px; padding-right: 4px; color: #95969a">SKU:</span>
|
|
|
|
+ <el-input v-model="searchSku" clearable style="width: 180px" @change="fetchData"></el-input>
|
|
|
|
+ </div>
|
|
|
|
+ <div>
|
|
|
|
+ <span style="font-size: 14px; color: #95969a">时间选择:</span>
|
|
|
|
+ <el-date-picker
|
|
|
|
+ v-model="asinMonthDate"
|
|
|
|
+ :clearable="false"
|
|
|
|
+ :disabled-date="disabledDate"
|
|
|
|
+ placeholder="选择月"
|
|
|
|
+ style="width: 170px"
|
|
|
|
+ type="month"
|
|
|
|
+ >
|
|
|
|
+ </el-date-picker>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <div>
|
|
|
|
+ <el-button circle :icon="Download" plain @click="handleDownload"></el-button>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <el-card body-style="padding: 0" shadow="never">
|
|
|
|
+ <vxe-grid :cell-style="cellStyle" :header-cell-style="headerStyle" v-bind="gridOptions" v-on="gridEvents" show-overflow="tooltip"></vxe-grid>
|
|
|
|
+ </el-card>
|
|
|
|
+ </el-card>
|
|
|
|
+ </div>
|
|
|
|
+</template>
|
|
|
|
+
|
|
|
|
+<script lang="ts" setup>
|
|
|
|
+import { getTableData, getTableDownloadData } from '/@/views/scoreStatistics/api';
|
|
|
|
+import { Download } from '@element-plus/icons-vue';
|
|
|
|
+import { scoreStatisticsColumns } from '/@/views/scoreStatistics/Columns';
|
|
|
|
+
|
|
|
|
+const gridOptions = reactive({
|
|
|
|
+ border: 'inner',
|
|
|
|
+ loading: false,
|
|
|
|
+ height: 700,
|
|
|
|
+ pagerConfig: {
|
|
|
|
+ enabled: true,
|
|
|
|
+ total: 20,
|
|
|
|
+ currentPage: 1,
|
|
|
|
+ pageSize: 20,
|
|
|
|
+ pageSizes: [10, 20, 30],
|
|
|
|
+ },
|
|
|
|
+ rowConfig: {
|
|
|
|
+ height: 38,
|
|
|
|
+ },
|
|
|
|
+ columns: scoreStatisticsColumns,
|
|
|
|
+ data: [],
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
+const asinMonthDate = ref(dayjs().subtract(1, 'month').startOf('month').format('YYYY-MM-DD'))
|
|
|
|
+
|
|
|
|
+const disabledDate = (time: Date) => {
|
|
|
|
+ // 禁用当前月和当前月之后的日期
|
|
|
|
+ const today = new Date(); // 获取当前日期
|
|
|
|
+ const currentYear = today.getFullYear();
|
|
|
|
+ const currentMonth = today.getMonth() + 1; // 获取月份,注意要 +1
|
|
|
|
+ // 通过比较年份和月份来禁用
|
|
|
|
+ return time.getFullYear() > currentYear || (time.getFullYear() === currentYear && time.getMonth() + 2 > currentMonth);
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+const searchAsin = ref('');
|
|
|
|
+const searchSku = ref('');
|
|
|
|
+const averageData = ref([]);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+const gridEvents = {
|
|
|
|
+ pageChange({ pageSize, currentPage }) {
|
|
|
|
+ gridOptions.pagerConfig.currentPage = currentPage;
|
|
|
|
+ gridOptions.pagerConfig.pageSize = pageSize;
|
|
|
|
+ fetchData();
|
|
|
|
+ },
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+async function fetchData() {
|
|
|
|
+ gridOptions.loading = true; // 显示加载状态
|
|
|
|
+ try {
|
|
|
|
+ const params = {
|
|
|
|
+ limit: gridOptions.pagerConfig.pageSize,
|
|
|
|
+ page: gridOptions.pagerConfig.currentPage,
|
|
|
|
+ review_date: asinMonthDate.value,
|
|
|
|
+ asin : searchAsin.value,
|
|
|
|
+ sku : searchSku.value,
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ const resp = await getTableData(params);
|
|
|
|
+ gridOptions.data = resp.data;
|
|
|
|
+ console.log("=>(monthlyRating.vue:121) gridOptions.data", gridOptions.data);
|
|
|
|
+ gridOptions.pagerConfig.total = resp.total;
|
|
|
|
+ } catch (error) {
|
|
|
|
+ console.log(error);
|
|
|
|
+ } finally {
|
|
|
|
+ gridOptions.loading = false;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+async function handleDownload() {
|
|
|
|
+ gridOptions.loading = true; // 显示加载状态
|
|
|
|
+ try {
|
|
|
|
+ const params = {
|
|
|
|
+ review_date: asinMonthDate.value,
|
|
|
|
+ asin : searchAsin.value,
|
|
|
|
+ sku : searchSku.value,
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ const resp = await getTableDownloadData(params);
|
|
|
|
+ const url = window.URL.createObjectURL(resp.data);
|
|
|
|
+ const link = document.createElement('a');
|
|
|
|
+ link.href = url;
|
|
|
|
+ link.setAttribute('download', asinMonthDate.slice(0, 7) + '平均评分.xlsx');
|
|
|
|
+ document.body.appendChild(link);
|
|
|
|
+ link.click();
|
|
|
|
+ document.body.removeChild(link);
|
|
|
|
+ window.URL.revokeObjectURL(url);
|
|
|
|
+ gridOptions.loading = false;
|
|
|
|
+ ElMessage.success('下载成功!');
|
|
|
|
+ } catch (error) {
|
|
|
|
+ ElMessage.error('下载失败!');
|
|
|
|
+ } finally {
|
|
|
|
+ gridOptions.loading = false;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function cellStyle() {
|
|
|
|
+ return {
|
|
|
|
+ fontSize: '13px',
|
|
|
|
+ fontWeight: '500',
|
|
|
|
+ };
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function headerStyle() {
|
|
|
|
+ return {
|
|
|
|
+ fontSize: '13px',
|
|
|
|
+ backgroundColor: '#f0f1f3',
|
|
|
|
+ height: 10,
|
|
|
|
+ //color: '#b4b6ba',
|
|
|
|
+ //fontWeight: '500',
|
|
|
|
+ };
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+watch(asinMonthDate, (newVal) => {
|
|
|
|
+ const date = dayjs(newVal).startOf('month').format('YYYY-MM-DD');
|
|
|
|
+ console.log("=>(monthlyRating.vue:180) date", date);
|
|
|
|
+ if (date !== asinMonthDate.value) {
|
|
|
|
+ asinMonthDate.value = date;
|
|
|
|
+ console.log("=>(monthlyRating.vue:183) asinMonthDate.value", asinMonthDate.value);
|
|
|
|
+ fetchData();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+);
|
|
|
|
+
|
|
|
|
+onMounted(() => {
|
|
|
|
+ fetchData();
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
+</script>
|
|
|
|
+
|
|
|
|
+<style scoped>
|
|
|
|
+.tool {
|
|
|
|
+ padding-right: 25px;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+.title {
|
|
|
|
+ display: flex;
|
|
|
|
+ align-items: center; /* 垂直居中对齐 */
|
|
|
|
+ /* justify-content: space-between; !* 水平居中对齐 *! */
|
|
|
|
+ font-size: 16px;
|
|
|
|
+ font-weight: 500;
|
|
|
|
+ margin-bottom: 20px;
|
|
|
|
+}
|
|
|
|
+</style>
|