Files
temu-plugin/src/view/sale/ExportSaleDataShein.vue
liushiwei 2e1a84681d 调整
2024-05-18 16:06:44 +08:00

492 lines
14 KiB
Vue

<template>
<ai-list class="list" v-loading="isLoading" element-loading-text="拼命加载中" element-loading-spinner="el-icon-loading">
<ai-title
slot="title"
title="销售数据(希音)"
isShowBottomBorder>
</ai-title>
<template slot="content">
<div class="top">
<div class="item">
<h2>今日销量</h2>
<p>{{ todayTotal }}</p>
</div>
<div class="item">
<h2>今日销售额</h2>
<p>{{ todayMoney }}</p>
</div>
<div class="item">
<h2>可用库存总量()</h2>
<p>{{ inventoryTotal }}</p>
</div>
<div class="item">
<h2>可用库存总额</h2>
<p>{{ inventoryMoney }}</p>
</div>
<div class="item">
<h2><span>在途库存总量()<el-tooltip
effect="dark"
content="在途数量的总和"
placement="right">
<i class="el-icon-question"
style="font-size: 16px; vertical-align: middle;"></i>
</el-tooltip></span></h2>
<p>{{ inroadTotal }}</p>
</div>
<div class="item">
<h2><span>在途库存总额<el-tooltip
effect="dark"
content="在途数量*价格"
placement="right">
<i class="el-icon-question"
style="font-size: 16px; vertical-align: middle;"></i>
</el-tooltip></span></h2>
<p>{{ inroadTotalMoney }}</p>
</div>
</div>
<ai-card title="数据明细" style="padding-bottom: 40px;">
<template #right>
<json-excel
:data="list"
:fields="jsonFields"
:before-generate = "startDownload"
name="销售数据.xls"
worksheet="销售统计">
<el-button type="primary">导出数据</el-button>
</json-excel>
</template>
<ai-table
ref="table0"
:isShowPagination="false"
:tableData="list"
height="500"
:col-configs="colConfigs"
:total="list.length"
style="margin-top: 8px;"
@getList="() => {}">
<el-table-column slot="goodsThumb" width="120px" label="商品图片" fixed="left">
<template slot-scope="scope">
<div>
<el-image :src="scope.row.goodsThumb" style="width: 40px; height: 40px" class="image" :preview-src-list="[scope.row.goodsThumb]" />
</div>
</template>
</el-table-column>
</ai-table>
</ai-card>
</template>
</ai-list>
</template>
<script>
import {sendGeiwohuoAPIMessage} from '@/api/chromeApi'
import JsonExcel from 'vue-json-excel'
import { Message } from 'element-ui'
export default {
name: 'ExportSaleData',
data () {
return {
list: [],
isLoading: false,
pageSize: 100,
currentPage: 1,
todayTotal: 0,
todayMoney: 0.0,
inventoryTotal: 0,
inventoryMoney: 0.0,
inroadTotal: 0,
inroadTotalMoney: 0.0,
deliveryTotal: 0,
deliveryMoney: 0.0,
startDate: '',
endDate: '',
skuIds: [],
jsonFields: {
"商品名称": "productName",
"SPU": "productId",
"SKC": "productSkcId",
"SKU ID": "productSkuId",
"SKU属性": "className",
"SKU货号": "skuExtCode",
"加入站点时长": "onSalesDurationOffline",
"图片链接": "productSkcPicture",
"申报价格(CNY)": {
"field": "supplierPrice",
callback: (value) => {
return value /100;
}
},
"开款核价状态": {
"field": "isVerifyPrice",
callback: (value) => {
return value ? '核价通过': '核价未通过 / 无法备货';
}
},
"缺货数量": "lackQuantity",
"建议备货量": "adviceQuantity",
"可售天数": "availableSaleDays",
"库存可售天数": "availableSaleDaysFromInventory",
"仓内库存可售天数": "warehouseAvailableSaleDays",
"近7日用户加购数量": "inCartNumber7d",
"用户累计加购数量": "inCardNumber",
"已订阅待提醒到货": "nomsgSubsCntCntSth",
"销售数据 - 今日": "todaySaleVolume",
"销售数据 - 近7日": "lastSevenDaysSaleVolume",
"销售数据 - 近30天": "lastThirtyDaysSaleVolume",
"库存数据 - 仓内可用库存": "inventoryNumInfo.warehouseInventoryNum",
"库存数据 - 仓内暂不可用库存": "inventoryNumInfo.waitOnShelfNum",
"库存数据 - 已发货库存": "inventoryNumInfo.waitReceiveNum",
"库存数据 - 已下单待发货库存": "inventoryNumInfo.waitDeliveryInventoryNum",
"库存数据 - 待审核备货库存": "inventoryNumInfo.waitApproveInventoryNum",
"VMI备货单数 - 待发货": "vmiOrderInfo.waitDeliveryNum",
"VMI备货单数 - 在途单数": "vmiOrderInfo.transportationNum",
"VMI备货单数 - 发货延迟": "vmiOrderInfo.deliveryDelayNum",
"VMI备货单数 - 到货延迟": "vmiOrderInfo.arrivalDelayNum",
"非VMI备货单数 - 待发货": "notVmiOrderInfo.waitDeliveryNum",
"非VMI备货单数 - 在途单数": "notVmiOrderInfo.transportationNum",
"非VMI备货单数 - 发货延迟": "notVmiOrderInfo.deliveryDelayNum",
"非VMI备货单数 - 到货延迟": "notVmiOrderInfo.arrivalDelayNum",
"备货逻辑": "purchaseConfig",
"可用库存货值(CNY)": "productTotalPrice",
"在途库存货值(CNY)": "inroadTotalPrice",
"店铺名称": "mallName",
"评分": "mark",
"是否热销": 'hotTag',
"生产建议信息 - 建议生产数": 'adviceProduceNum',
"生产建议信息 - 剩余件数": 'availableProduceNum',
"类目": 'category'
},
skuSaleNumberFields: {},
skuSaleNumberList: [],
downloadSkuSaleNumberDlg: false,
skuDownloadForm: {
date: ''
},
}
},
computed: {
colConfigs () {
return [
{
slot: 'goodsThumb',
label: '图片'
},
{
prop: 'supplierCode',
label: '货号',
width: '120px',
align: 'center',
fixed: 'left'
},
{
prop: 'suffixZh',
label: '规格',
width: '160px',
align: 'center',
fixed: 'left'
},
{
prop: 'categoryName',
label: '分类',
"show-overflow-tooltip": true,
width: '100px'
},
{
prop: 'mallStatusName',
label: '状态',
width: '120px',
align: 'center'
},
{
prop: 'skc',
label: 'SKC',
width: '160px',
align: 'center'
},
{
prop: 'ableSaleDays',
label: '可售天数',
align: 'center'
},
{
prop: 'cost',
label: '价格',
width: '120px',
align: 'center'
},
{
prop: 'todaySale',
label: '今日销量',
width: '120px',
align: 'center'
},
{
prop: 'saleInfoWeek',
label: '近7天销量',
width: '120px',
align: 'center'
},
{
prop: 'saleInfoMonth',
label: '本月销量',
width: '120px',
align: 'center'
},
{
prop: 'saleInfoPreMonth',
label: '上月销量',
width: '120px',
align: 'center'
},
{
prop: 'purchaseConfig',
label: '备货逻辑',
width: '160px',
align: 'center'
},
{
prop: 'onWayNum',
label: '在途数量',
width: '160px',
align: 'center'
},
{
prop: 'ivtNum',
label: '库存数量',
width: '160px',
align: 'center'
},
{
prop: 'productTotalPrice',
label: '库存货值(CNY)',
width: '180px',
align: 'center',
fixed: "right",
sortable: true,
'sort-method': (a, b) => {
return a.productTotalPrice - b.productTotalPrice
}
},
{
prop: 'inroadTotalPrice',
label: '在途货值(CNY)',
width: '180px',
align: 'center',
fixed: "right",
sortable: true,
'sort-method': (a, b) => {
return a.inroadTotalPrice - b.inroadTotalPrice
}
},
{
prop: 'purchaseConfig',
label: '备货逻辑',
align: 'center',
width: '120px',
fixed: "right",
sortable: true,
'sort-method': (a, b) => {
if (a.purchaseConfig > b.purchaseConfig) {
return 1
} else if (a.purchaseConfig == b.purchaseConfig) {
return 0
} else {
return -1
}
}
}
]
}
},
components: {
JsonExcel
},
mounted () {
this.beforeGetList()
},
methods: {
beforeGetList() {
this.list = []
this.currentPage = 1
this.todayMoney = 0.0
this.todayTotal = 0
this.inventoryMoney = 0.0
this.inventoryTotal = 0
this.inroadTotalMoney = 0.0
this.inroadTotal = 0
this.isLoading = true
this.getList()
},
getList () {
sendGeiwohuoAPIMessage({
url: 'gmpj/goods/goods/list',
method: 'POST',
data: {
"mallStatusList": [
1
],
"page": this.currentPage,
"perPage": this.pageSize
}}).then((res) => {
if (res.code == '0' && res.msg == "OK") {
for(let i = 0;i < res.info.list.length; i++) {
let item = res.info.list[i];
let data = {};
data.categoryName = item.categoryName
data.goodsThumb = item.goodsThumb
data.mallStatusName = item.mallStatusName
data.supplierCode = item.supplierCode
data.skc = item.skc
for(let j = 0;j < item.sizes.length; j++) {
let sku = item.sizes[j]
data = {...data,
ableSaleDays: sku.ableSaleDays,
cost: sku.cost,
purchaseConfig: (sku.operateTime?sku.operateTime:'/') + '+' + (sku.prepareDay?sku.prepareDay:'/'),
saleInfoMonth: sku.saleInfoMonth,
saleInfoPreMonth: sku.saleInfoPreMonth,
saleInfoWeek: sku.saleInfoWeek,
suffixZh: sku.suffixZh,
todaySale: sku.todaySale,
onWayNum: sku.onWayNum,
ivtNum: sku.ivtNum,
productTotalPrice: (sku.cost * sku.ivtNum).toFixed(2),
inroadTotalPrice: (sku.cost * sku.onWayNum).toFixed(2)}
this.todayTotal += sku.todaySale
this.todayMoney += new Number((sku.cost * sku.todaySale).toFixed(2))
this.todayMoney = new Number(this.todayMoney.toFixed(2))
this.inventoryTotal += sku.ivtNum
this.inventoryMoney += new Number((sku.cost * sku.ivtNum).toFixed(2))
this.inventoryMoney = new Number(this.inventoryMoney.toFixed(2))
this.inroadTotal += sku.onWayNum
this.inroadTotalMoney += new Number((sku.cost * sku.onWayNum).toFixed(2))
this.inroadTotalMoney = new Number(this.inroadTotalMoney.toFixed(2))
this.list.push(data);
}
}
if (this.pageSize == res.info.list.length) {
this.currentPage ++
setTimeout(() => {
this.getList()
}, 1500)
} else {
this.isLoading = false
Message.success('销售数据加载完成,可进行导出')
this.$nextTick(() => { //在数据加载完,重新渲染表格
this.$refs['table0'].doLayout();
})
}
} else {
setTimeout(() => {
this.getList()
}, 1500)
}
}).catch(() => {
this.isLoading = false
})
},
startDownload() {
this.$http.post('/api/malluser/info').then(res => {
if (res.code == 0) {
this.$store.commit('setUserInfo', res.data)
if (res.data.flag != 1) {
Message.error('您的账号未激活或已失效,请激活后使用')
this.$store.commit('setActiveDlgShow', true)
return;
}
}
})
}
}
}
</script>
<style scoped lang="scss">
.list {
.title-right {
display: flex;
align-items: center;
& > div:first-child {
margin-right: 20px;
}
}
::v-deep.ai-list {
.ai-list__content--right-wrapper {
background: transparent;
box-shadow: none;
padding: 0!important;
}
}
.top {
display: flex;
justify-content: space-between;
margin-bottom: 24px;
.item {
flex: 1;
margin-right: 20px;
padding: 16px 24px;
background: #FFF;
box-shadow: 0px 4px 6px -2px rgba(15, 15, 21, 0.15);
border-radius: 4px;
&:last-child {
margin-right: 0;
}
&:nth-of-type(1) {
color: #2266ff;
}
&:nth-of-type(2) {
color: #f8b426;
}
&:nth-of-type(3) {
color: #21aa99;
}
&:nth-of-type(4) {
color: #F46;
}
&:nth-of-type(5) {
color: #11A265;
}
h2 {
margin-bottom: 30px;
font-size: 16px;
color: #999;
}
p {
font-weight: 600;
font-size: 28px;
}
}
}
}
.like {
cursor: pointer;
font-size: 25px;
display: inline-block;
}
</style>