jufubao-admin-library 1.1.67 → 1.1.69
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/library/viewModules/viewCardsGift/viewCardsGift/config.vue +0 -1
- package/library/viewModules/viewStat/schemas/supplier.stat.js +9 -0
- package/library/viewModules/viewStat/viewsStat/product/components/stat-all.vue +4 -2
- package/library/viewModules/viewStat/viewsStat/product/components/table-brand.vue +2 -2
- package/library/viewModules/viewStat/viewsStat/product/components/table-category.vue +3 -3
- package/library/viewModules/viewStat/viewsStat/product/components/table-product.vue +2 -2
- package/library/viewModules/viewStat/viewsStat/supplier/components/discount.vue +115 -67
- package/library/viewModules/viewStat/viewsStat/supplier/components/stat-product.vue +38 -11
- package/library/viewModules/viewStat/viewsStat/supplier/components/table-category.vue +2 -2
- package/library/viewModules/viewStat/viewsStat/supplier/components/table-product.vue +2 -2
- package/library/viewModules/viewStat/viewsStat/supplier/components/table-supplier.vue +2 -2
- package/library/viewModules/viewStat/viewsStat/supplier/components/up-new.vue +334 -0
- package/library/viewModules/viewStat/viewsStat/supplier/index.vue +6 -3
- package/library/viewModules/viewTask/schemas/tasks.js +6 -0
- package/library/viewModules/viewTask/viewTask/list.vue +26 -1
- package/package.json +1 -1
|
@@ -154,7 +154,6 @@ import {mapActions} from "vuex";
|
|
|
154
154
|
import {Loading} from "element-ui";
|
|
155
155
|
import {isPlatform} from "@/utils/xd.base";
|
|
156
156
|
import XdBaseDynamicField from "@/components/XdBaseDynamicField.vue";
|
|
157
|
-
import {number} from "echarts/lib/export";
|
|
158
157
|
import {getImageFullPath} from "@/mixins/handleUpdate";
|
|
159
158
|
const Color = require("color");
|
|
160
159
|
|
|
@@ -93,5 +93,14 @@ module.exports = {
|
|
|
93
93
|
disabled: true,
|
|
94
94
|
role: "STAT-PARTNER.TRADE_STAT_OFFLINE_SHOP_SALES"
|
|
95
95
|
},
|
|
96
|
+
{
|
|
97
|
+
title: "统计-供应商统计-上新商品折扣分布数据",
|
|
98
|
+
mapFn: "getNewOnShelfProductDiscounts",
|
|
99
|
+
path: '/stat-partner/v1/supplier-stat/new-on-shelf-product-discounts',
|
|
100
|
+
isRule: false,
|
|
101
|
+
params: {},
|
|
102
|
+
disabled: true,
|
|
103
|
+
role: "STAT-PARTNER.SUPPLIER_STAT_NEW_ON"
|
|
104
|
+
},
|
|
96
105
|
]
|
|
97
106
|
}
|
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
<div class="stat_item">
|
|
13
13
|
<p class="_title">
|
|
14
14
|
商品总数
|
|
15
|
-
|
|
15
|
+
<el-tooltip effect="light" placement="right">
|
|
16
|
+
<div slot="content">取对应业务线已选商品统计<br/>同一商品多业务线选用按多次计</div>
|
|
16
17
|
<i class="xdicon_question-circle xd_admin_iconfont"></i>
|
|
17
18
|
</el-tooltip>
|
|
18
19
|
</p>
|
|
@@ -52,7 +53,8 @@
|
|
|
52
53
|
<div class="stat_item">
|
|
53
54
|
<p class="_title">
|
|
54
55
|
SKU总数
|
|
55
|
-
<el-tooltip effect="light"
|
|
56
|
+
<el-tooltip effect="light" placement="right">
|
|
57
|
+
<div slot="content">取对应业务线已选商品统计<br/>同一商品多业务线选用按多次计<br/>同一商品多规格按多次计</div>
|
|
56
58
|
<i class="xdicon_question-circle xd_admin_iconfont"></i>
|
|
57
59
|
</el-tooltip>
|
|
58
60
|
</p>
|
|
@@ -179,7 +179,7 @@ export default {
|
|
|
179
179
|
label: "实际销量",
|
|
180
180
|
sort: "custom",
|
|
181
181
|
notice: {
|
|
182
|
-
data: ["
|
|
182
|
+
data: ["总销量减去仅退款和换购的售后次数"],
|
|
183
183
|
},
|
|
184
184
|
},
|
|
185
185
|
{
|
|
@@ -202,7 +202,7 @@ export default {
|
|
|
202
202
|
label: "售后次数",
|
|
203
203
|
sort: "custom",
|
|
204
204
|
notice: {
|
|
205
|
-
data: ["
|
|
205
|
+
data: ["按审核时间统计客服对应业务线的售后订单中商品的总件数;同一订单售后多件商品按多次计;同一商品多次售后按多次计;仅统计线上订单且全部处理方式的售后订单;"],
|
|
206
206
|
},
|
|
207
207
|
},
|
|
208
208
|
{
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
:label="item.label"
|
|
46
46
|
:value="item.value"
|
|
47
47
|
>
|
|
48
|
-
</el-option>
|
|
48
|
+
</el-option>
|
|
49
49
|
</el-select>
|
|
50
50
|
</div>
|
|
51
51
|
</template>
|
|
@@ -175,7 +175,7 @@ export default {
|
|
|
175
175
|
label: "实际销量",
|
|
176
176
|
sort: "custom",
|
|
177
177
|
notice: {
|
|
178
|
-
data: ["
|
|
178
|
+
data: ["总销量减去仅退款和换购的售后次数"],
|
|
179
179
|
},
|
|
180
180
|
},
|
|
181
181
|
{
|
|
@@ -198,7 +198,7 @@ export default {
|
|
|
198
198
|
label: "售后次数",
|
|
199
199
|
sort: "custom",
|
|
200
200
|
notice: {
|
|
201
|
-
data: ["
|
|
201
|
+
data: ["按审核时间统计客服对应业务线的售后订单中商品的总件数;同一订单售后多件商品按多次计;同一商品多次售后按多次计;仅统计线上订单且全部处理方式的售后订单;"],
|
|
202
202
|
},
|
|
203
203
|
},
|
|
204
204
|
{
|
|
@@ -200,7 +200,7 @@ export default {
|
|
|
200
200
|
label: "实际销量",
|
|
201
201
|
sort: "custom",
|
|
202
202
|
notice: {
|
|
203
|
-
data: ["
|
|
203
|
+
data: ["总销量减去仅退款和换购的售后次数"],
|
|
204
204
|
},
|
|
205
205
|
},
|
|
206
206
|
{
|
|
@@ -223,7 +223,7 @@ export default {
|
|
|
223
223
|
label: "售后次数",
|
|
224
224
|
sort: "custom",
|
|
225
225
|
notice: {
|
|
226
|
-
data: ["
|
|
226
|
+
data: ["按审核时间统计客服对应业务线的售后订单中商品的总件数;同一订单售后多件商品按多次计;同一商品多次售后按多次计;仅统计线上订单且全部处理方式的售后订单;"],
|
|
227
227
|
},
|
|
228
228
|
},
|
|
229
229
|
{
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
<el-card class="discount-wrap">
|
|
3
3
|
<div class="discount-wrap-header" slot="header">
|
|
4
4
|
<div class="discount-wrap-header-select">
|
|
5
|
-
<div>
|
|
5
|
+
<div class="mb10">
|
|
6
6
|
在售商品折扣分布
|
|
7
7
|
<el-tooltip
|
|
8
8
|
effect="light"
|
|
@@ -16,67 +16,75 @@
|
|
|
16
16
|
</span>
|
|
17
17
|
</div>
|
|
18
18
|
<div>
|
|
19
|
-
<
|
|
20
|
-
<
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
>
|
|
28
|
-
<el-option
|
|
29
|
-
v-for="item in discountTypeList"
|
|
30
|
-
:key="item.value"
|
|
31
|
-
:label="item.label"
|
|
32
|
-
:value="item.value"
|
|
19
|
+
<el-form ref="form" :inline="true" :model="form" label-width="80px">
|
|
20
|
+
<el-form-item label="折扣类型">
|
|
21
|
+
<el-select
|
|
22
|
+
v-model="discount_type"
|
|
23
|
+
filterable
|
|
24
|
+
clearable
|
|
25
|
+
placeholder="请选择折扣类型"
|
|
26
|
+
style="margin-right: 10px"
|
|
33
27
|
>
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
:value="item.value"
|
|
28
|
+
<el-option
|
|
29
|
+
v-for="item in discountTypeList"
|
|
30
|
+
:key="item.value"
|
|
31
|
+
:label="item.label"
|
|
32
|
+
:value="item.value"
|
|
33
|
+
>
|
|
34
|
+
</el-option>
|
|
35
|
+
</el-select>
|
|
36
|
+
</el-form-item>
|
|
37
|
+
<el-form-item label="供应商">
|
|
38
|
+
<el-select
|
|
39
|
+
v-model="channel_code"
|
|
40
|
+
filterable
|
|
41
|
+
clearable
|
|
42
|
+
placeholder="请选择供应商类别"
|
|
43
|
+
style="margin-right: 10px"
|
|
51
44
|
>
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
:
|
|
45
|
+
<el-option
|
|
46
|
+
v-for="item in channelList"
|
|
47
|
+
:key="item.value"
|
|
48
|
+
:label="item.label"
|
|
49
|
+
:value="item.value"
|
|
50
|
+
>
|
|
51
|
+
</el-option>
|
|
52
|
+
</el-select>
|
|
53
|
+
<el-select
|
|
54
|
+
clearable
|
|
55
|
+
v-if="channel_code && showSupplier === 'Y'"
|
|
56
|
+
v-model="supplier_ids"
|
|
57
|
+
filterable
|
|
58
|
+
remote
|
|
59
|
+
reserve-keyword
|
|
60
|
+
placeholder="请输入供应商"
|
|
61
|
+
:remote-method="remoteMethod"
|
|
69
62
|
>
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
63
|
+
<el-option
|
|
64
|
+
v-for="item in supplierList"
|
|
65
|
+
:key="item.value"
|
|
66
|
+
:label="item.label"
|
|
67
|
+
:value="item.value"
|
|
68
|
+
>
|
|
69
|
+
</el-option>
|
|
70
|
+
</el-select>
|
|
71
|
+
</el-form-item>
|
|
72
|
+
<el-form-item label="时间">
|
|
73
|
+
<xd-stat-trade-date :isRangeMonth="true" v-model="tradeTime"></xd-stat-trade-date>
|
|
74
|
+
</el-form-item>
|
|
75
|
+
<el-form-item label="公共分类">
|
|
76
|
+
<el-cascader v-model="category_id" :props="categoryProps" clearable></el-cascader>
|
|
77
|
+
</el-form-item>
|
|
78
|
+
<el-form-item>
|
|
79
|
+
<el-button
|
|
80
|
+
@click="getDataList"
|
|
81
|
+
style="margin-left: 10px"
|
|
82
|
+
type="primary"
|
|
83
|
+
>搜索</el-button
|
|
84
|
+
>
|
|
85
|
+
<el-button @click="doExport" type="primary">条件导出</el-button>
|
|
86
|
+
</el-form-item>
|
|
87
|
+
</el-form>
|
|
80
88
|
</div>
|
|
81
89
|
</div>
|
|
82
90
|
<div>
|
|
@@ -136,7 +144,11 @@
|
|
|
136
144
|
<script>
|
|
137
145
|
import { getOptions } from "@/utils/options";
|
|
138
146
|
import { mapActions } from "vuex";
|
|
147
|
+
import XdStatTradeDate from "@/components/XdStatTradeDate";
|
|
139
148
|
export default {
|
|
149
|
+
components: {
|
|
150
|
+
XdStatTradeDate
|
|
151
|
+
},
|
|
140
152
|
data() {
|
|
141
153
|
return {
|
|
142
154
|
keyList: [],
|
|
@@ -161,6 +173,25 @@ export default {
|
|
|
161
173
|
},
|
|
162
174
|
],
|
|
163
175
|
discount_type:'',
|
|
176
|
+
tradeTime: null,
|
|
177
|
+
category_id:[],
|
|
178
|
+
categoryProps: {
|
|
179
|
+
checkStrictly: true,
|
|
180
|
+
lazy: true,
|
|
181
|
+
lazyLoad (node, resolve) {
|
|
182
|
+
getOptions({
|
|
183
|
+
server: 'product-partner',
|
|
184
|
+
fn: "categories",
|
|
185
|
+
path: "p4",
|
|
186
|
+
params: {
|
|
187
|
+
value: node.level == 0 ? 0 : node.value,
|
|
188
|
+
},
|
|
189
|
+
}).then((res) => {
|
|
190
|
+
resolve(res["data"]["list"])
|
|
191
|
+
})
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
form:{},
|
|
164
195
|
};
|
|
165
196
|
},
|
|
166
197
|
watch: {
|
|
@@ -194,20 +225,29 @@ export default {
|
|
|
194
225
|
}).then((res) => {
|
|
195
226
|
this.channelList = res.data.list;
|
|
196
227
|
});
|
|
228
|
+
|
|
229
|
+
},
|
|
230
|
+
mounted(){
|
|
197
231
|
this.getDataList();
|
|
198
232
|
},
|
|
199
233
|
methods: {
|
|
200
234
|
...mapActions("supplierStat", ["getProductDiscount"]),
|
|
201
235
|
// 获取列表数据
|
|
202
236
|
async getDataList(row) {
|
|
203
|
-
|
|
204
|
-
|
|
237
|
+
|
|
238
|
+
let params = {
|
|
205
239
|
channel_code: this.channel_code,
|
|
206
240
|
supplier_ids: this.supplier_ids,
|
|
207
241
|
channel_code_text: this.channel_code_text,
|
|
208
242
|
supplier_text: this.supplier_text,
|
|
209
|
-
discount_type:this.discount_type
|
|
210
|
-
|
|
243
|
+
discount_type:this.discount_type,
|
|
244
|
+
...this.tradeTime,
|
|
245
|
+
}
|
|
246
|
+
if (this.category_id && this.category_id.length) {
|
|
247
|
+
params['category_id'] = this.category_id[this.category_id.length - 1]
|
|
248
|
+
}
|
|
249
|
+
// 获取产品折扣
|
|
250
|
+
this.getProductDiscount(params).then((res) => {
|
|
211
251
|
// 获取行标题列表
|
|
212
252
|
this.keyList = res.data.col_title_list;
|
|
213
253
|
|
|
@@ -242,7 +282,8 @@ export default {
|
|
|
242
282
|
file_name: value,
|
|
243
283
|
channel_code_text: this.channel_code_text,
|
|
244
284
|
supplier_text: this.supplier_text,
|
|
245
|
-
discount_type:this.discount_type
|
|
285
|
+
discount_type:this.discount_type,
|
|
286
|
+
...this.tradeTime,
|
|
246
287
|
};
|
|
247
288
|
let loading = this.$loading({});
|
|
248
289
|
this.getProductDiscount(params)
|
|
@@ -292,9 +333,9 @@ export default {
|
|
|
292
333
|
margin-top: 20px;
|
|
293
334
|
&-header {
|
|
294
335
|
&-select {
|
|
295
|
-
display: flex;
|
|
296
|
-
justify-content: space-between;
|
|
297
|
-
align-items: center;
|
|
336
|
+
//display: flex;
|
|
337
|
+
//justify-content: space-between;
|
|
338
|
+
//align-items: center;
|
|
298
339
|
margin-bottom: 10px;
|
|
299
340
|
|
|
300
341
|
& > div:first-child {
|
|
@@ -310,6 +351,7 @@ export default {
|
|
|
310
351
|
|
|
311
352
|
& > div:nth-child(2) {
|
|
312
353
|
display: flex;
|
|
354
|
+
flex-wrap: wrap;
|
|
313
355
|
align-items: center;
|
|
314
356
|
}
|
|
315
357
|
}
|
|
@@ -330,4 +372,10 @@ export default {
|
|
|
330
372
|
color: #a1a7b3;
|
|
331
373
|
font-size: 14px;
|
|
332
374
|
}
|
|
375
|
+
.mb10{
|
|
376
|
+
margin-bottom: 10px;
|
|
377
|
+
}
|
|
378
|
+
.dis_f{
|
|
379
|
+
display: flex;
|
|
380
|
+
}
|
|
333
381
|
</style>
|
|
@@ -3,7 +3,10 @@
|
|
|
3
3
|
<div slot="header" class="card_header">
|
|
4
4
|
<div class="card_tit">
|
|
5
5
|
<span class="b_tit">商品数量</span>
|
|
6
|
-
<el-tooltip effect="light"
|
|
6
|
+
<el-tooltip effect="light" placement="right">
|
|
7
|
+
<div slot="content">仅统计人工添加的商品;上架商品按首次审核通过时间统计;<br/>
|
|
8
|
+
下架商品按最近下架时间统计,周期内多次下架按1次计;<br/>
|
|
9
|
+
上架环比为月度环比增长,即(当月上架商品-上月上架商品)/上月上架商品。<br/></div>
|
|
7
10
|
<i class="xdicon_question-circle xd_admin_iconfont"></i>
|
|
8
11
|
</el-tooltip>
|
|
9
12
|
</div>
|
|
@@ -46,7 +49,7 @@ export default {
|
|
|
46
49
|
},
|
|
47
50
|
getChartOptions(data){
|
|
48
51
|
let xAxisData = data.x.data;
|
|
49
|
-
let legendData = ['上架商品', '下架商品'];
|
|
52
|
+
let legendData = ['上架商品', '下架商品','上架环比'];
|
|
50
53
|
let seriesData = [];
|
|
51
54
|
data.series.forEach(item => {
|
|
52
55
|
for(let i = 0; i < item.length; i++){
|
|
@@ -59,10 +62,12 @@ export default {
|
|
|
59
62
|
return {
|
|
60
63
|
tooltip: {
|
|
61
64
|
trigger: 'axis',
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
65
|
+
axisPointer: {
|
|
66
|
+
type: 'cross',
|
|
67
|
+
crossStyle: {
|
|
68
|
+
color: '#999'
|
|
69
|
+
}
|
|
70
|
+
}
|
|
66
71
|
},
|
|
67
72
|
legend: {
|
|
68
73
|
data: legendData
|
|
@@ -75,7 +80,10 @@ export default {
|
|
|
75
80
|
},
|
|
76
81
|
toolbox: {
|
|
77
82
|
feature: {
|
|
78
|
-
|
|
83
|
+
dataView: { show: true, readOnly: false },
|
|
84
|
+
magicType: { show: true, type: ['line', 'bar'] },
|
|
85
|
+
restore: { show: true },
|
|
86
|
+
saveAsImage: { show: true }
|
|
79
87
|
}
|
|
80
88
|
},
|
|
81
89
|
xAxis: {
|
|
@@ -84,17 +92,36 @@ export default {
|
|
|
84
92
|
smooth: true,
|
|
85
93
|
data: xAxisData
|
|
86
94
|
},
|
|
87
|
-
yAxis: {
|
|
95
|
+
yAxis: [{
|
|
88
96
|
type: 'value'
|
|
89
|
-
},
|
|
97
|
+
},{
|
|
98
|
+
type: 'value',
|
|
99
|
+
axisLabel: {
|
|
100
|
+
formatter: '{value} %'
|
|
101
|
+
}
|
|
102
|
+
}],
|
|
90
103
|
series: seriesData.map((item, index) => {
|
|
91
104
|
return {
|
|
92
105
|
name: legendData[index],
|
|
93
|
-
type: 'line',
|
|
106
|
+
type: index==0||index==1?'bar':'line',
|
|
107
|
+
yAxisIndex: index==0||index==1?0:1,
|
|
94
108
|
smooth: true,
|
|
109
|
+
// label:{
|
|
110
|
+
// show:index==0||index==1?true:false,
|
|
111
|
+
// },
|
|
112
|
+
tooltip: {
|
|
113
|
+
valueFormatter: function (value) {
|
|
114
|
+
if(index==0||index==1){
|
|
115
|
+
return value
|
|
116
|
+
}else{
|
|
117
|
+
return value+'%';
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
},
|
|
95
121
|
data: item
|
|
96
122
|
}
|
|
97
|
-
})
|
|
123
|
+
}),
|
|
124
|
+
color:['#165DFF','#0FC6C2','#EB0B0B']
|
|
98
125
|
};
|
|
99
126
|
},
|
|
100
127
|
handleChangeType(val){
|
|
@@ -144,13 +144,13 @@ export default {
|
|
|
144
144
|
data: ["按支付时间统计已支付货源订单中对应商品件数x平台进货价 仅计算商品价格,不包含运费"],
|
|
145
145
|
} },
|
|
146
146
|
{ "type": "normal", "prop": "total_real_product_num", "align": "center", "minWidth": 150, "label": "实际销量", "sort": "custom",notice: {
|
|
147
|
-
data: ["
|
|
147
|
+
data: ["总销量减去仅退款和换购的售后次数"],
|
|
148
148
|
} },
|
|
149
149
|
{ "type": "price", "prop": "total_real_sale_amount", "align": "center", "width": 160, "label": "实际建议售价金额", "unit": "元", "sort": "custom",notice: {
|
|
150
150
|
data: ["即建议售价金额-售后建议售价金额"],
|
|
151
151
|
} },
|
|
152
152
|
{ "type": "normal", "prop": "total_aftersale_product_num", "align": "center", "minWidth": 150, "label": "售后次数", "sort": "custom",notice: {
|
|
153
|
-
data: ["
|
|
153
|
+
data: ["按审核时间统计客服对应业务线的售后订单中商品的总件数;同一订单售后多件商品按多次计;同一商品多次售后按多次计;仅统计线上订单且全部处理方式的售后订单;"],
|
|
154
154
|
} },
|
|
155
155
|
{ "type": "price", "prop": "total_aftersale_amount", "align": "center", "width": 160, "label": "售后建议售价金额", "unit": "元", "sort": "custom",notice: {
|
|
156
156
|
data: ["按审核时间统计客服售后订单中商品的建议售价金额 同一订单售后多件商品按多次计 同一商品多次售后按多次计 仅统计线上订单且处理方式为退款、换购的售后订单"],
|
|
@@ -145,13 +145,13 @@ export default {
|
|
|
145
145
|
data: ["按支付时间统计已支付货源订单中对应商品件数x平台进货价 仅计算商品价格,不包含运费"],
|
|
146
146
|
} },
|
|
147
147
|
{ "type": "normal", "prop": "total_real_product_num", "align": "center", "minWidth": 150, "label": "实际销量", "sort": "custom",notice: {
|
|
148
|
-
data: ["
|
|
148
|
+
data: ["总销量减去仅退款和换购的售后次数"],
|
|
149
149
|
} },
|
|
150
150
|
{ "type": "price", "prop": "total_real_sale_amount", "align": "center", "width": 160, "label": "实际建议售价金额", "unit": "元", "sort": "custom",notice: {
|
|
151
151
|
data: ["即建议售价金额-售后建议售价金额"],
|
|
152
152
|
} },
|
|
153
153
|
{ "type": "normal", "prop": "total_aftersale_product_num", "align": "center", "minWidth": 150, "label": "售后次数", "sort": "custom",notice: {
|
|
154
|
-
data: ["
|
|
154
|
+
data: ["按审核时间统计客服对应业务线的售后订单中商品的总件数;同一订单售后多件商品按多次计;同一商品多次售后按多次计;仅统计线上订单且全部处理方式的售后订单;"],
|
|
155
155
|
} },
|
|
156
156
|
{ "type": "price", "prop": "total_aftersale_amount", "align": "center", "width": 160, "label": "售后建议售价金额", "unit": "元", "sort": "custom",notice: {
|
|
157
157
|
data: ["按审核时间统计客服售后订单中商品的建议售价金额 同一订单售后多件商品按多次计 同一商品多次售后按多次计 仅统计线上订单且处理方式为退款、换购的售后订单"],
|
|
@@ -139,13 +139,13 @@ export default {
|
|
|
139
139
|
data: ["按支付时间统计已支付货源订单中对应商品件数x平台进货价 仅计算商品价格,不包含运费"],
|
|
140
140
|
} },
|
|
141
141
|
{ "type": "normal", "prop": "total_real_product_num", "align": "center", "minWidth": 150, "label": "实际销量", "sort": "custom",notice: {
|
|
142
|
-
data: ["
|
|
142
|
+
data: ["总销量减去仅退款和换购的售后次数"],
|
|
143
143
|
} },
|
|
144
144
|
{ "type": "price", "prop": "total_real_sale_amount", "align": "center", "width": 160, "label": "实际建议售价金额", "unit": "元", "sort": "custom",notice: {
|
|
145
145
|
data: ["即建议售价金额-售后建议售价金额"],
|
|
146
146
|
} },
|
|
147
147
|
{ "type": "normal", "prop": "total_aftersale_product_num", "align": "center", "minWidth": 150, "label": "售后次数", "sort": "custom",notice: {
|
|
148
|
-
data: ["
|
|
148
|
+
data: ["按审核时间统计客服对应业务线的售后订单中商品的总件数;同一订单售后多件商品按多次计;同一商品多次售后按多次计;仅统计线上订单且全部处理方式的售后订单;"],
|
|
149
149
|
} },
|
|
150
150
|
{ "type": "price", "prop": "total_aftersale_amount", "align": "center", "width": 160, "label": "售后建议售价金额", "unit": "元", "sort": "custom",notice: {
|
|
151
151
|
data: ["按审核时间统计客服售后订单中商品的建议售价金额 同一订单售后多件商品按多次计 同一商品多次售后按多次计 仅统计线上订单且处理方式为退款、换购的售后订单"],
|
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<el-card class="discount-wrap">
|
|
3
|
+
<div class="discount-wrap-header" slot="header">
|
|
4
|
+
<div class="discount-wrap-header-select">
|
|
5
|
+
<div class="mb10">
|
|
6
|
+
上新商品折扣分布
|
|
7
|
+
<!-- <el-tooltip
|
|
8
|
+
effect="light"
|
|
9
|
+
content="仅统计可售商品,包含人工添加和接口同步商品。"
|
|
10
|
+
placement="right"
|
|
11
|
+
>
|
|
12
|
+
<i class="xdicon_question-circle xd_admin_iconfont"></i>
|
|
13
|
+
</el-tooltip> -->
|
|
14
|
+
<span class="s_tit">
|
|
15
|
+
截止到{{ last_updated_date_time }}
|
|
16
|
+
</span>
|
|
17
|
+
</div>
|
|
18
|
+
<div>
|
|
19
|
+
<el-form ref="form" :inline="true" :model="form" label-width="80px">
|
|
20
|
+
<el-form-item label="折扣类型">
|
|
21
|
+
<el-select
|
|
22
|
+
v-model="discount_type"
|
|
23
|
+
filterable
|
|
24
|
+
clearable
|
|
25
|
+
placeholder="请选择折扣类型"
|
|
26
|
+
style="margin-right: 10px"
|
|
27
|
+
>
|
|
28
|
+
<el-option
|
|
29
|
+
v-for="item in discountTypeList"
|
|
30
|
+
:key="item.value"
|
|
31
|
+
:label="item.label"
|
|
32
|
+
:value="item.value"
|
|
33
|
+
>
|
|
34
|
+
</el-option>
|
|
35
|
+
</el-select>
|
|
36
|
+
</el-form-item>
|
|
37
|
+
<el-form-item label="供应商">
|
|
38
|
+
<el-select
|
|
39
|
+
v-model="channel_code"
|
|
40
|
+
filterable
|
|
41
|
+
clearable
|
|
42
|
+
placeholder="请选择供应商类别"
|
|
43
|
+
style="margin-right: 10px"
|
|
44
|
+
>
|
|
45
|
+
<el-option
|
|
46
|
+
v-for="item in channelList"
|
|
47
|
+
:key="item.value"
|
|
48
|
+
:label="item.label"
|
|
49
|
+
:value="item.value"
|
|
50
|
+
>
|
|
51
|
+
</el-option>
|
|
52
|
+
</el-select>
|
|
53
|
+
<el-select
|
|
54
|
+
clearable
|
|
55
|
+
v-if="channel_code && showSupplier === 'Y'"
|
|
56
|
+
v-model="supplier_ids"
|
|
57
|
+
filterable
|
|
58
|
+
remote
|
|
59
|
+
reserve-keyword
|
|
60
|
+
placeholder="请输入供应商"
|
|
61
|
+
:remote-method="remoteMethod"
|
|
62
|
+
>
|
|
63
|
+
<el-option
|
|
64
|
+
v-for="item in supplierList"
|
|
65
|
+
:key="item.value"
|
|
66
|
+
:label="item.label"
|
|
67
|
+
:value="item.value"
|
|
68
|
+
>
|
|
69
|
+
</el-option>
|
|
70
|
+
</el-select>
|
|
71
|
+
</el-form-item>
|
|
72
|
+
<el-form-item label="上架时间">
|
|
73
|
+
<xd-stat-trade-date :isRangeMonth="true" v-model="tradeTime"></xd-stat-trade-date>
|
|
74
|
+
</el-form-item>
|
|
75
|
+
<el-form-item label="公共分类">
|
|
76
|
+
<el-cascader v-model="category_id" :props="categoryProps" clearable></el-cascader>
|
|
77
|
+
</el-form-item>
|
|
78
|
+
<el-form-item>
|
|
79
|
+
<el-button
|
|
80
|
+
@click="getDataList"
|
|
81
|
+
style="margin-left: 10px"
|
|
82
|
+
type="primary"
|
|
83
|
+
>搜索</el-button
|
|
84
|
+
>
|
|
85
|
+
<el-button @click="doExport" type="primary">条件导出</el-button>
|
|
86
|
+
</el-form-item>
|
|
87
|
+
</el-form>
|
|
88
|
+
</div>
|
|
89
|
+
</div>
|
|
90
|
+
<div>
|
|
91
|
+
{{
|
|
92
|
+
channel_code
|
|
93
|
+
? channel_code !== "self"
|
|
94
|
+
? channel_code_text
|
|
95
|
+
: supplier_text
|
|
96
|
+
? supplier_text
|
|
97
|
+
: "月度"
|
|
98
|
+
: "月度"
|
|
99
|
+
}}-新上架商品-按折扣统计数量为
|
|
100
|
+
</div>
|
|
101
|
+
</div>
|
|
102
|
+
<xd-stat-table-group
|
|
103
|
+
v-if="upNewParams"
|
|
104
|
+
:params="upNewParams"
|
|
105
|
+
:key="upNewkey"
|
|
106
|
+
:getList="getNewOnShelfProductDiscounts"
|
|
107
|
+
>
|
|
108
|
+
</xd-stat-table-group>
|
|
109
|
+
</el-card>
|
|
110
|
+
</template>
|
|
111
|
+
<script>
|
|
112
|
+
import { getOptions } from "@/utils/options";
|
|
113
|
+
import { mapActions } from "vuex";
|
|
114
|
+
import XdStatTradeDate from "@/components/XdStatTradeDate";
|
|
115
|
+
import XdStatTableGroup from "@/components/XdStatTableGroup";
|
|
116
|
+
export default {
|
|
117
|
+
components: {
|
|
118
|
+
XdStatTradeDate,
|
|
119
|
+
XdStatTableGroup
|
|
120
|
+
},
|
|
121
|
+
data() {
|
|
122
|
+
return {
|
|
123
|
+
keyList: [],
|
|
124
|
+
rowTitle: [],
|
|
125
|
+
dataList: [],
|
|
126
|
+
channelList: [],
|
|
127
|
+
channel_code: null,
|
|
128
|
+
supplier_ids: null,
|
|
129
|
+
supplierList: [],
|
|
130
|
+
last_updated_date_time: "", //截止时间
|
|
131
|
+
supplier_text: "",
|
|
132
|
+
channel_code_text: "",
|
|
133
|
+
showSupplier: "N",
|
|
134
|
+
form:{},
|
|
135
|
+
discountTypeList:[
|
|
136
|
+
{
|
|
137
|
+
label:'市场价',
|
|
138
|
+
value:'market'
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
label:'建议售价',
|
|
142
|
+
value:'sale'
|
|
143
|
+
},
|
|
144
|
+
],
|
|
145
|
+
discount_type:'',
|
|
146
|
+
tradeTime: null,
|
|
147
|
+
category_id:[],
|
|
148
|
+
categoryProps: {
|
|
149
|
+
checkStrictly: true,
|
|
150
|
+
lazy: true,
|
|
151
|
+
lazyLoad (node, resolve) {
|
|
152
|
+
getOptions({
|
|
153
|
+
server: 'product-partner',
|
|
154
|
+
fn: "categories",
|
|
155
|
+
path: "p4",
|
|
156
|
+
params: {
|
|
157
|
+
value: node.level == 0 ? 0 : node.value,
|
|
158
|
+
},
|
|
159
|
+
}).then((res) => {
|
|
160
|
+
resolve(res["data"]["list"])
|
|
161
|
+
})
|
|
162
|
+
},
|
|
163
|
+
},
|
|
164
|
+
upNewkey:'upNewkey',
|
|
165
|
+
upNewParams:null,
|
|
166
|
+
};
|
|
167
|
+
},
|
|
168
|
+
watch: {
|
|
169
|
+
channel_code(n, o) {
|
|
170
|
+
this.channel_code_text = "";
|
|
171
|
+
this.supplier_text = "";
|
|
172
|
+
this.supplier_ids = null;
|
|
173
|
+
if (n && n !== o) {
|
|
174
|
+
this.channel_code_text = this.channelList.find(
|
|
175
|
+
(item) => item.value === n
|
|
176
|
+
).label;
|
|
177
|
+
this.showSupplier = this.channelList.find(
|
|
178
|
+
(item) => item.value === n
|
|
179
|
+
).has_supplier;
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
supplier_ids(n, o) {
|
|
183
|
+
this.supplier_text = "";
|
|
184
|
+
if (n && n !== o) {
|
|
185
|
+
this.supplier_text = this.supplierList.find(
|
|
186
|
+
(item) => item.value === n
|
|
187
|
+
).label;
|
|
188
|
+
}
|
|
189
|
+
},
|
|
190
|
+
},
|
|
191
|
+
created() {
|
|
192
|
+
getOptions({
|
|
193
|
+
server: "supplier-partner",
|
|
194
|
+
fn: "partner-channel",
|
|
195
|
+
path: "p1",
|
|
196
|
+
}).then((res) => {
|
|
197
|
+
this.channelList = res.data.list;
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
},
|
|
201
|
+
mounted(){
|
|
202
|
+
this.getDataList();
|
|
203
|
+
},
|
|
204
|
+
methods: {
|
|
205
|
+
...mapActions("supplierStat", ["getNewOnShelfProductDiscounts"]),
|
|
206
|
+
// 获取列表数据
|
|
207
|
+
async getDataList() {
|
|
208
|
+
|
|
209
|
+
let params = {
|
|
210
|
+
channel_code: this.channel_code,
|
|
211
|
+
supplier_ids: this.supplier_ids,
|
|
212
|
+
channel_code_text: this.channel_code_text,
|
|
213
|
+
supplier_text: this.supplier_text,
|
|
214
|
+
discount_type:this.discount_type,
|
|
215
|
+
...this.tradeTime,
|
|
216
|
+
}
|
|
217
|
+
if (this.category_id && this.category_id.length) {
|
|
218
|
+
params['category_id'] = this.category_id[this.category_id.length - 1]
|
|
219
|
+
}
|
|
220
|
+
this.upNewParams = params;
|
|
221
|
+
this.upNewkey = Date.now()
|
|
222
|
+
},
|
|
223
|
+
doExport() {
|
|
224
|
+
this.$prompt("请输入导出文件名称", "提示", {
|
|
225
|
+
confirmButtonText: "确定",
|
|
226
|
+
cancelButtonText: "取消",
|
|
227
|
+
inputPattern: /[\S]+/,
|
|
228
|
+
inputErrorMessage: "请填写正确的名称",
|
|
229
|
+
}).then(({ value }) => {
|
|
230
|
+
let params = {
|
|
231
|
+
export: true,
|
|
232
|
+
file_ext: "xlsx",
|
|
233
|
+
file_name: value,
|
|
234
|
+
channel_code: this.channel_code,
|
|
235
|
+
supplier_ids: this.supplier_ids,
|
|
236
|
+
channel_code_text: this.channel_code_text,
|
|
237
|
+
supplier_text: this.supplier_text,
|
|
238
|
+
discount_type:this.discount_type,
|
|
239
|
+
...this.tradeTime,
|
|
240
|
+
};
|
|
241
|
+
if (this.category_id && this.category_id.length) {
|
|
242
|
+
params['category_id'] = this.category_id[this.category_id.length - 1]
|
|
243
|
+
}
|
|
244
|
+
let loading = this.$loading({});
|
|
245
|
+
this.getNewOnShelfProductDiscounts(params)
|
|
246
|
+
.then((res) => {
|
|
247
|
+
loading.close();
|
|
248
|
+
this.$alert(
|
|
249
|
+
"导出任务已经开始执行,请去任务管理查看下载状态",
|
|
250
|
+
"提示",
|
|
251
|
+
{
|
|
252
|
+
confirmButtonText: "确定",
|
|
253
|
+
}
|
|
254
|
+
);
|
|
255
|
+
})
|
|
256
|
+
.catch((err) => {
|
|
257
|
+
this.$message.error(err.msg);
|
|
258
|
+
loading.close();
|
|
259
|
+
});
|
|
260
|
+
});
|
|
261
|
+
},
|
|
262
|
+
remoteMethod(query) {
|
|
263
|
+
if (query !== "") {
|
|
264
|
+
getOptions({
|
|
265
|
+
server: "supplier-partner",
|
|
266
|
+
fn: "channel-supplier",
|
|
267
|
+
path: "p1",
|
|
268
|
+
params: {
|
|
269
|
+
channel_code: this.channel_code,
|
|
270
|
+
keyword: query,
|
|
271
|
+
},
|
|
272
|
+
})
|
|
273
|
+
.then((res) => {
|
|
274
|
+
this.supplierList = res.data.list;
|
|
275
|
+
})
|
|
276
|
+
.catch((err) => {
|
|
277
|
+
console.log(err, "err");
|
|
278
|
+
});
|
|
279
|
+
} else {
|
|
280
|
+
this.supplierList = [];
|
|
281
|
+
}
|
|
282
|
+
},
|
|
283
|
+
},
|
|
284
|
+
};
|
|
285
|
+
</script>
|
|
286
|
+
<style lang="less" scoped>
|
|
287
|
+
.discount {
|
|
288
|
+
&-wrap {
|
|
289
|
+
margin-top: 20px;
|
|
290
|
+
&-header {
|
|
291
|
+
&-select {
|
|
292
|
+
margin-bottom: 10px;
|
|
293
|
+
|
|
294
|
+
& > div:first-child {
|
|
295
|
+
display: flex;
|
|
296
|
+
align-items: center;
|
|
297
|
+
font-size: 20px;
|
|
298
|
+
i {
|
|
299
|
+
cursor: pointer;
|
|
300
|
+
margin-left: 4px;
|
|
301
|
+
color: #a1a7b3;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
& > div:nth-child(2) {
|
|
306
|
+
display: flex;
|
|
307
|
+
flex-wrap: wrap;
|
|
308
|
+
align-items: center;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
.s_tit{
|
|
315
|
+
font-size: 12px;
|
|
316
|
+
color: #A1A7B3;
|
|
317
|
+
margin-left: 10px;
|
|
318
|
+
vertical-align: bottom;
|
|
319
|
+
}
|
|
320
|
+
.empty_data {
|
|
321
|
+
display: flex;
|
|
322
|
+
justify-content: center;
|
|
323
|
+
align-items: center;
|
|
324
|
+
height: 100px;
|
|
325
|
+
color: #a1a7b3;
|
|
326
|
+
font-size: 14px;
|
|
327
|
+
}
|
|
328
|
+
.mb10{
|
|
329
|
+
margin-bottom: 10px;
|
|
330
|
+
}
|
|
331
|
+
.dis_f{
|
|
332
|
+
display: flex;
|
|
333
|
+
}
|
|
334
|
+
</style>
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
<stat-all v-permission="[Role.totalCounts]"></stat-all>
|
|
4
4
|
<stat-product v-permission="[Role.productCycCounts]" style="margin-top: 20px;"></stat-product>
|
|
5
5
|
<stat-supplier v-permission="[Role.supplierCycCounts]" style="margin-top: 20px"></stat-supplier>
|
|
6
|
-
<discount></discount>
|
|
6
|
+
<discount v-permission="[Role.getNewOnShelfProductDiscounts]"></discount>
|
|
7
|
+
<up-new></up-new>
|
|
7
8
|
<el-card v-if="has_tab" style="margin-top: 20px;">
|
|
8
9
|
<el-tabs v-model="activeName" >
|
|
9
10
|
<el-tab-pane v-if="has_tab_supplier" label="供应商(线上货源订单)" name="supplier">
|
|
@@ -34,6 +35,7 @@
|
|
|
34
35
|
import tableCategory from "./components/table-category.vue"
|
|
35
36
|
import tableStore from "./components/table-store.vue"
|
|
36
37
|
import discount from './components/discount.vue'
|
|
38
|
+
import upNew from './components/up-new.vue'
|
|
37
39
|
import checkPermission from "@/utils/permission"
|
|
38
40
|
import Role from "@/constant/modules/supplierStat"
|
|
39
41
|
|
|
@@ -47,7 +49,8 @@
|
|
|
47
49
|
tableProduct,
|
|
48
50
|
tableCategory,
|
|
49
51
|
discount,
|
|
50
|
-
tableStore
|
|
52
|
+
tableStore,
|
|
53
|
+
upNew
|
|
51
54
|
},
|
|
52
55
|
data() {
|
|
53
56
|
return {
|
|
@@ -71,7 +74,7 @@
|
|
|
71
74
|
},
|
|
72
75
|
is_shop(){
|
|
73
76
|
return checkPermission([Role.offlineShopSalesSupplier])
|
|
74
|
-
}
|
|
77
|
+
},
|
|
75
78
|
},
|
|
76
79
|
|
|
77
80
|
created() {
|
|
@@ -15,6 +15,9 @@ module.exports = {
|
|
|
15
15
|
//#ifdef partner-gift partner-mall partner-movie partner-market
|
|
16
16
|
path: '/@@@@/v1/:xsiteid/:xnamespace/async/list',
|
|
17
17
|
// #endif
|
|
18
|
+
//#ifdef partner-site
|
|
19
|
+
path: '/@@@@/v1/:xsiteid/async/list',
|
|
20
|
+
// #endif
|
|
18
21
|
params: {
|
|
19
22
|
page_token: ['页码', 'String', '必选'],
|
|
20
23
|
page_size: ['页长', 'Number', '必选'],
|
|
@@ -39,6 +42,9 @@ module.exports = {
|
|
|
39
42
|
// #ifdef partner-gift partner-mall partner-movie partner-market
|
|
40
43
|
path: '/@@@@/v1/:xsiteid/:xnamespace/async/retry',
|
|
41
44
|
// #endif
|
|
45
|
+
//#ifdef partner-site
|
|
46
|
+
path: '/@@@@/v1/:xsiteid/async/retry',
|
|
47
|
+
// #endif
|
|
42
48
|
params: {
|
|
43
49
|
serial_no: ['id', 'String', '必选'],
|
|
44
50
|
},
|
|
@@ -147,7 +147,12 @@ export default {
|
|
|
147
147
|
}
|
|
148
148
|
let loading = this.$loading({})
|
|
149
149
|
this.getAsyncList(params).then(res => {
|
|
150
|
+
//#ifdef partner-site
|
|
151
|
+
const { list, total_size } = res
|
|
152
|
+
// #endif
|
|
153
|
+
//#ifndef partner-site
|
|
150
154
|
const { list, total_size } = res.data
|
|
155
|
+
// #endif
|
|
151
156
|
this.tables = list.map(item => {
|
|
152
157
|
Object.assign(item, {
|
|
153
158
|
success_time: getTimeFormat(item.success_time),
|
|
@@ -209,7 +214,12 @@ export default {
|
|
|
209
214
|
path: 'p1',
|
|
210
215
|
params:params,
|
|
211
216
|
}).then(res => {
|
|
217
|
+
//#ifdef partner-site
|
|
218
|
+
data.cb(res.list || [])
|
|
219
|
+
// #endif
|
|
220
|
+
//#ifndef partner-site
|
|
212
221
|
data.cb(res.data.list || [])
|
|
222
|
+
// #endif
|
|
213
223
|
}).catch(error => {
|
|
214
224
|
console.error(error)
|
|
215
225
|
data.cb([])
|
|
@@ -231,7 +241,10 @@ export default {
|
|
|
231
241
|
// #ifdef supplier
|
|
232
242
|
params = {from:'supplier'}
|
|
233
243
|
// #endif
|
|
234
|
-
// #
|
|
244
|
+
// #ifdef partner-site
|
|
245
|
+
params = {from:'site'}
|
|
246
|
+
// #endif
|
|
247
|
+
// #ifndef admin supplier partner-site
|
|
235
248
|
params = {from:'partner'}
|
|
236
249
|
// #endif
|
|
237
250
|
getOptions({
|
|
@@ -245,7 +258,12 @@ export default {
|
|
|
245
258
|
path: 'p1',
|
|
246
259
|
params
|
|
247
260
|
}).then(res => {
|
|
261
|
+
//#ifdef partner-site
|
|
262
|
+
data.cb(res.list || [])
|
|
263
|
+
// #endif
|
|
264
|
+
//#ifndef partner-site
|
|
248
265
|
data.cb(res.data.list || [])
|
|
266
|
+
// #endif
|
|
249
267
|
}).catch(error => {
|
|
250
268
|
console.error(error)
|
|
251
269
|
data.cb([])
|
|
@@ -285,9 +303,16 @@ export default {
|
|
|
285
303
|
let loading = this.$loading({})
|
|
286
304
|
this.getDownloadUrl({serial_no})
|
|
287
305
|
.then(res=>{
|
|
306
|
+
//#ifdef partner-site
|
|
307
|
+
if(res.download_url) {
|
|
308
|
+
window.open(res.download_url)
|
|
309
|
+
}
|
|
310
|
+
// #endif
|
|
311
|
+
//#ifndef partner-site
|
|
288
312
|
if(res.data.download_url) {
|
|
289
313
|
window.open(res.data.download_url)
|
|
290
314
|
}
|
|
315
|
+
// #endif
|
|
291
316
|
loading.close()
|
|
292
317
|
}).catch(err=>{
|
|
293
318
|
loading.close()
|