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.
@@ -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
- <el-tooltip effect="light" content="取对应业务线已选商品统计 同一商品多业务线选用按多次计" placement="right">
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" content="取对应业务线已选商品统计 同一商品多业务线选用按多次计 同一商品多规格按多次计" placement="right">
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
- <div>
20
- <span style="margin-right: 10px">折扣类型</span>
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"
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
- </el-option>
35
- </el-select>
36
- </div>
37
- <div>
38
- <span style="margin-right: 10px">供应商</span>
39
- <el-select
40
- v-model="channel_code"
41
- filterable
42
- clearable
43
- placeholder="请选择供应商类别"
44
- style="margin-right: 10px"
45
- >
46
- <el-option
47
- v-for="item in channelList"
48
- :key="item.value"
49
- :label="item.label"
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
- </el-option>
53
- </el-select>
54
- <el-select
55
- clearable
56
- v-if="channel_code && showSupplier === 'Y'"
57
- v-model="supplier_ids"
58
- filterable
59
- remote
60
- reserve-keyword
61
- placeholder="请输入供应商"
62
- :remote-method="remoteMethod"
63
- >
64
- <el-option
65
- v-for="item in supplierList"
66
- :key="item.value"
67
- :label="item.label"
68
- :value="item.value"
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
- </el-option>
71
- </el-select>
72
- </div>
73
- <el-button
74
- @click="getDataList"
75
- style="margin-left: 10px"
76
- type="primary"
77
- >搜索</el-button
78
- >
79
- <el-button @click="doExport" type="primary">条件导出</el-button>
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
- this.getProductDiscount({
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
- }).then((res) => {
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" content="仅统计人工添加的商品;上架商品按首次审核通过时间统计;下架商品按最近下架时间统计,周期内多次下架按1次计;" placement="right">
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
- // backgroundColor: 'rgba(255,255,255,0.9)',
63
- // textStyle: {
64
- // color: '#666'
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
- saveAsImage: {}
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
- // #ifndef admin supplier
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()
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jufubao-admin-library",
3
- "version": "1.1.67",
3
+ "version": "1.1.69",
4
4
  "description": "聚福宝福利后台管理系统公共模块",
5
5
  "author": "goashiyong <gaoshiyong1272@vip.163.com>",
6
6
  "scripts": {