Procházet zdrojové kódy

企微客户数统计

shensong00 %!s(int64=3) %!d(string=před) měsíci
rodič
revize
29806c8abc
96 změnil soubory, kde provedl 571 přidání a 120 odebrání
  1. 1 1
      index.html
  2. 1 0
      project/src/assets/config/interface_api.js
  3. 432 0
      project/src/components/dataBoard/corpCustomerCountStat.vue
  4. 16 14
      project/src/components/dataBoard/yxOrderData.vue
  5. 16 1
      project/src/router/allRouter.js
  6. 1 1
      static/css/app.4cef2d4d8499be9fa2ff980d2ff2137d.css
  7. 0 15
      static/js/0.60669f6f2d3c3ba5b00d.js
  8. 15 0
      static/js/0.f78a3e06fedd826ebc44.js
  9. 1 1
      static/js/99.69b856247616c400e3ce.js
  10. 0 1
      static/js/18.af36b8472e5ec7f607ed.js
  11. 1 1
      static/js/19.2508e59119a13842f4a5.js
  12. 1 1
      static/js/20.6580d8df017a0520292b.js
  13. 1 1
      static/js/21.efc8dadda316c61615ac.js
  14. 1 1
      static/js/22.dae91633fceabb9f625c.js
  15. 1 1
      static/js/23.d1e7b0403cee6793efb3.js
  16. 1 1
      static/js/24.97c97f5adfa0b9a507d4.js
  17. 1 1
      static/js/25.4054db9ae2f7da1cbc54.js
  18. 1 1
      static/js/27.b07dd678790fdc2b9ae8.js
  19. 0 1
      static/js/26.310a5e1e77e6f19b3217.js
  20. 1 1
      static/js/28.7e03f902b765f19511c3.js
  21. 1 1
      static/js/29.0526ec18be8f695f2e78.js
  22. 1 1
      static/js/30.280698f082efc911b336.js
  23. 1 1
      static/js/31.a1a59b3256b873d9b6df.js
  24. 1 1
      static/js/32.a0d3e27c05cd91cf9e7a.js
  25. 1 1
      static/js/33.3bced9cd6673d092f8a2.js
  26. 1 1
      static/js/34.bdead09a7ad4b361f1fa.js
  27. 1 1
      static/js/35.bfac29632c1a7bfad34f.js
  28. 1 1
      static/js/36.46940af7561693a6da5e.js
  29. 1 1
      static/js/37.3c2e1d19aba2d3fc6498.js
  30. 1 1
      static/js/38.c330c5b4b86a2c8f201d.js
  31. 1 1
      static/js/39.535e8a02b7d1cdceee04.js
  32. 1 1
      static/js/40.2a378da81198b2e85217.js
  33. 1 1
      static/js/41.f9a976e9d6eb91b37c3d.js
  34. 1 1
      static/js/42.4895acbfed9d99a1e320.js
  35. 1 1
      static/js/43.ea6b3a37ad845010b9ef.js
  36. 1 1
      static/js/44.e776b6d6be55a921d3f8.js
  37. 1 1
      static/js/45.5d185a368f047af6a460.js
  38. 1 1
      static/js/46.6495d0fdff71ae160f3a.js
  39. 1 1
      static/js/47.d62f88307060e320dc48.js
  40. 1 1
      static/js/48.79c724aea0b5759cb0b6.js
  41. 1 1
      static/js/49.d1033f7266f9e41f5263.js
  42. 1 1
      static/js/50.af4d91bda95620a9b9fb.js
  43. 1 1
      static/js/51.670e6e50c6b56733981d.js
  44. 1 1
      static/js/52.b6bfb8084f4a295cf594.js
  45. 1 1
      static/js/53.a655dd044050938bf73b.js
  46. 1 0
      static/js/52.56c859a2f6835e9006b0.js
  47. 1 1
      static/js/54.30e9a00ce701d7a5678f.js
  48. 1 0
      static/js/54.e1f26caae77f96b9f27a.js
  49. 1 0
      static/js/56.7bf540b9d9fe04bd8da5.js
  50. 1 1
      static/js/56.ceb4568c2d414d603740.js
  51. 1 1
      static/js/57.06192371caeebc9f27e6.js
  52. 1 1
      static/js/58.8e58ad21942787e92ebc.js
  53. 1 1
      static/js/59.27407a7dd5a247e468a5.js
  54. 1 1
      static/js/60.f7af024cb8943b26ef88.js
  55. 1 1
      static/js/61.575c575756bf87398070.js
  56. 1 1
      static/js/62.24da6f61365dd7980dae.js
  57. 1 1
      static/js/63.0cd54484e1b6ee51b599.js
  58. 1 1
      static/js/64.44f6c629e9853cd8f671.js
  59. 1 1
      static/js/65.fdb33ec0470a60b62b37.js
  60. 1 1
      static/js/66.e2d7429748d8bd202328.js
  61. 1 1
      static/js/67.ea55bba02a4db200c42c.js
  62. 1 1
      static/js/68.e876d223e9758a79dba3.js
  63. 1 1
      static/js/69.8878ad191e961de239e2.js
  64. 1 1
      static/js/70.387ad354070843f91f92.js
  65. 1 1
      static/js/71.a1d3f016b6bd79feb12e.js
  66. 1 1
      static/js/72.1711cc3d28d0cb963606.js
  67. 1 1
      static/js/73.a79a63b04fa67be52ba9.js
  68. 1 1
      static/js/74.64baa29b6a09238fc43f.js
  69. 1 1
      static/js/75.4ba6b5024eb98a3446b5.js
  70. 1 1
      static/js/76.189cf42c82cd2ba5c7ed.js
  71. 1 1
      static/js/77.c5fc79dd1ab1d627bc19.js
  72. 1 1
      static/js/78.5e0a7f0f19edde2e32f3.js
  73. 1 1
      static/js/79.0387420ca53867ada3fa.js
  74. 1 0
      static/js/81.17197df1280209a9a834.js
  75. 1 1
      static/js/80.cb3218143219b269cdc1.js
  76. 1 1
      static/js/81.4e0a63db6df7f357a61b.js
  77. 1 1
      static/js/82.9b38c90a248507658e4f.js
  78. 1 1
      static/js/83.9ce89d15b563ab37f975.js
  79. 1 1
      static/js/84.481edfe28bb926979b83.js
  80. 1 1
      static/js/85.19920caae6bd83784ba9.js
  81. 1 1
      static/js/86.27b6125ddec8c46ed520.js
  82. 0 1
      static/js/88.f8d119bdd6cc624e81d0.js
  83. 1 1
      static/js/87.65be13a98cb96ee2c98d.js
  84. 1 1
      static/js/89.900bbf9f08a9fce47cdf.js
  85. 1 1
      static/js/90.3853761115eeaadbc800.js
  86. 1 1
      static/js/91.ddb0e1f37632f938cc75.js
  87. 1 1
      static/js/92.04c31ac4ffedf8efec62.js
  88. 1 1
      static/js/93.33e47f3685e4683e356c.js
  89. 1 1
      static/js/94.3b3dbd554e063a71ece3.js
  90. 1 1
      static/js/95.9dc4658147da56b697ce.js
  91. 1 1
      static/js/96.bea8540b3114ab21454c.js
  92. 1 1
      static/js/97.5c07331a85d5c4e82f84.js
  93. 1 1
      static/js/98.40aa3785df4027a47887.js
  94. 6 6
      static/js/app.796b9751e25609984bf2.js
  95. 0 1
      static/js/manifest.005760f08540e67b9957.js
  96. 1 0
      static/js/manifest.b5f8124635bf7970979a.js

+ 1 - 1
index.html

@@ -7,4 +7,4 @@
7 7
         hm.src = "https://hm.baidu.com/hm.js?d61b9e2caf4d46ccda7471b5385e2333";
8 8
         var s = document.getElementsByTagName("script")[0];
9 9
         s.parentNode.insertBefore(hm, s);
10
-      })();</script><link href=./static/css/app.4cef2d4d8499be9fa2ff980d2ff2137d.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.005760f08540e67b9957.js></script><script type=text/javascript src=./static/js/app.796b9751e25609984bf2.js></script></body></html>
10
+      })();</script><link href=./static/css/app.04d85b3057025a16f5165da58237ec10.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.b5f8124635bf7970979a.js></script><script type=text/javascript src=./static/js/app.0dd795fa44118b608072.js></script></body></html>

+ 1 - 0
project/src/assets/config/interface_api.js

@@ -321,6 +321,7 @@ var api = {
321 321
   dataBoard_orderData_yxOrderActionReport: '/api/order/yxOrderActionReport',// 云选订单手动回传
322 322
   dataBoard_orderData_yxOrderExport: '/api/order/yxOrderExport',// 云选订单导出
323 323
   dataBoard_orderData_adgroupStatList: '/api/order/adgroupStatList',// 云选广告数据统计
324
+  dataBoard_corpCustomerCountStat: '/api/statistics/corpCustomerCountStat',// 企微客户数统计
324 325
 
325 326
   getPlatformOptions: "/api/intelligentMassSending/platformIndex", // 平台筛选选项
326 327
   accountManage_accountIndex: "/api/intelligentMassSending/accountIndex", // 平台账号管理 - 账号列表

+ 432 - 0
project/src/components/dataBoard/corpCustomerCountStat.vue

@@ -0,0 +1,432 @@
1
+<template>
2
+  <div v-loading="loading" class="corpCustomerCountStat">
3
+    <div class="screenBox">
4
+       <!-- 企微主体 -->
5
+       <div class="common-screen-item">
6
+        <label class="common-screen-label">企微主体</label>
7
+        <!-- 系统管理员 -->
8
+        <el-cascader v-if="$cookie.getCookie('isSuperManage') == 1" v-model="system_enterprise" size="small" :options="enterpriseList" :props="{value:'self_id',label:'self_name',children:'manage_corp_list'}" @change="onChangeCorpidSystem" clearable filterable placeholder="请选择" class="select-cls cascader" />
9
+        <!-- 非系统管理员 -->
10
+        <el-select v-else v-model="corpid" size="small" filterable placeholder="请选择" @change="onChangeCorpid" clearable class="select-cls">
11
+          <el-option v-for="(item, index) in enterpriseList" :key="index+'enterpriseList'" :label="item.corp_name?item.corp_name:item.corp_full_name?item.corp_full_name:item.corpid" :value="item.corpid" />
12
+        </el-select>
13
+      </div>
14
+      <!-- 搜索客户 -->
15
+      <self-input :reset='resetFlag' @inputChange='(val)=>{input_keyword = val;init()}' />
16
+      <!-- 添加时间 -->
17
+      <date-picker :reset='resetFlag' @changeTime="changeTime" />
18
+      <!-- 添加渠道 -->
19
+      <selfChannelMultiple :reset='resetFlag' @channelDefine="onChangeAddWay" />
20
+      <!-- 性别-->
21
+      <self-gender :reset='resetFlag' @genderChange="(val)=>{gender = val;init()}" />
22
+      <!-- 流失状态 -->
23
+      <loss-body :reset='resetFlag' @lossChange="lossChange" />
24
+      <!-- 付费情况 -->
25
+      <screen-pay :reset='resetFlag' @payChange="payChange" />
26
+      <!-- 充值时间 -->
27
+      <date-picker :reset='resetFlag' title="充值时间" @changeTime="onChangePayTime" />
28
+      <!-- 流失时间 -->
29
+      <date-picker :reset='resetFlag' title="流失时间" timeFlag :pickerOptions="{}" :defaultTime="['00:00:00', '23:59:59']" @changeTime="onChangeLossTime" />
30
+      <!-- 是否新用户 -->
31
+      <selfChannelV2 v-model="is_new_customer_no_loss" type='isNewCustomerNoLoss' title="是否新用户" @change="onChangeIsNewCus" />
32
+      <!-- 可否接收消息 -->
33
+      <selfChannelV2 v-model="can_receive" type='canReceive' title="可否接收消息" @change="onChangeCanReceive" />
34
+      <!-- 是否单主体流失 -->
35
+      <selfChannelV2 v-model="retained_status" type='retainedStatus' title="单主体留存" @change="onChangeRetainedStatus" />
36
+
37
+      <div class="flex">
38
+        <el-button v-if="isCanExport" class="export-btn" type="primary" plain size="mini" @click="init('export')">导出Excel</el-button>
39
+        <div class="reset" @click="resetEvent">重置</div>
40
+      </div>
41
+    </div>
42
+
43
+    <!-- table -->
44
+    <el-table ref="multipleTable" :height='height' :data="tableData" stripe tooltip-effect="dark" style="width: 100%; margin-top: 10px;">
45
+      <el-table-column label="企微主体" show-overflow-tooltip align="center">
46
+        <template slot-scope="scope">
47
+          <div>{{scope.row.corp_name}}</div>
48
+        </template>
49
+      </el-table-column>
50
+      <el-table-column label="客户数" show-overflow-tooltip align="center">
51
+        <template slot-scope="scope">
52
+          <div>{{scope.row.customer_count}}</div>
53
+        </template>
54
+      </el-table-column>
55
+    </el-table>
56
+  </div>
57
+</template>
58
+<script>
59
+import selfInput from '@/components/assembly/screen/input.vue'
60
+import selfCustomerservice from '@/components/assembly/screen/customerService.vue'
61
+import enterpriseTag from '@/components/assembly/screen/enterpriseTag.vue'
62
+import datePicker from '@/components/assembly/screen/datePicker.vue'
63
+import selfChannel from '@/components/assembly/screen/channel.vue'
64
+import selfChannelMultiple from '@/components/assembly/screen/channelMultiple.vue'
65
+import selfChannelV2 from '@/components/assembly/screen/channelV2.vue'
66
+import selfGender from '@/components/assembly/screen/gender.vue'
67
+import lossBody from '@/components/assembly/screen/lossBody.vue'
68
+import screenPay from '@/components/assembly/screen/pay.vue'
69
+import shieldingUser from '@/components/assembly/shieldingUser.vue'
70
+import tagDialog from '@/components/assembly/tagDialog.vue'
71
+import detial from '@/components/detials/index.vue'
72
+import noData from "../assembly/noData";
73
+export default {
74
+  components: { tagDialog, detial, selfInput, selfCustomerservice, enterpriseTag, datePicker, selfChannel, selfChannelMultiple, selfChannelV2, selfGender, lossBody, screenPay, shieldingUser, noData },
75
+  data () {
76
+    return {
77
+      drawerSize: '60%',
78
+      detialDrawer: false,
79
+      rowPro: {},//去详情的此条对象
80
+      loading: false,
81
+      shieldingFlag: false,
82
+      input_keyword: '',
83
+      tableData: [],
84
+      add_way: [],//客户来源
85
+      is_new_customer_no_loss: '', // 是否新用户
86
+      can_receive: '', // 可否接收消息
87
+      retained_status: '', // 是否单主体内全部流失
88
+      add_date_start: '',//添加日期 起始
89
+      add_date_end: '',//添加日期 截止
90
+      last_pay_time_start: '',//充值时间 起始
91
+      last_pay_time_end: '',//充值时间 截止
92
+      loss_time_start: '',//流失时间 起始
93
+      loss_time_end: '',//流失时间 截止
94
+      loss_status: null,//客户流失状态 没有筛选时传null 0未流失 1已流失
95
+      pay_status: null,//	付款状态 没有筛选时传null 0未付款 1已付款
96
+      pay_num_min: '',//最小付款次数,当pay_status是1时必传
97
+      pay_num_max: '',//最大付款次数,当pay_status是1时必传
98
+      resetFlag: false,//重置
99
+      multipleArr: [],
100
+      filter_multipleArr: [],
101
+      selectTotal: 0,
102
+      gender: '',
103
+      height: '',
104
+      tips: '',
105
+      system_enterprise: [], // 企微主体数据
106
+      enterpriseList: [], // 企微主体数据
107
+      enterprise: {}, // 当前选择的企微信息
108
+      corpid: '',
109
+    }
110
+  },
111
+  computed: {
112
+    // 是否有“导出”权限
113
+    isCanExport() {
114
+      return !!this.$store.state.dataBoardAuth.can_export
115
+    },
116
+  },
117
+  created () {
118
+    this.height = document.documentElement.clientHeight - 140 > 140 ? document.documentElement.clientHeight - 140 : 140
119
+    this.init()
120
+    this.handleInitCorpOptions()
121
+  },
122
+  methods: {
123
+    resetEvent () {//重置
124
+      this.resetFlag = !this.resetFlag
125
+      this.input_keyword = '';
126
+      this.add_way = [];
127
+      this.is_new_customer_no_loss = '';
128
+      this.can_receive = '';
129
+      this.retained_status = '';
130
+      this.add_date_start = '';
131
+      this.add_date_end = '';
132
+      this.last_pay_time_start = '';
133
+      this.last_pay_time_end = '';
134
+      this.loss_time_start = '';
135
+      this.loss_time_end = '';
136
+      this.loss_status = null;
137
+      this.pay_status = null;
138
+      this.pay_num_min = '';
139
+      this.pay_num_max = '';
140
+      this.gender = '';
141
+      this.corp_id = '';
142
+      this.init()
143
+    },
144
+    // S 企微主体数据
145
+    onChangeCorpidSystem(val) {//二级联选择器
146
+      if (val.length < 1) {
147
+        this.enterprise = {}
148
+      } else {
149
+        this.enterpriseList.forEach((item) => {
150
+          item.manage_corp_list.forEach((item1) => {
151
+            if (item1.corpid == val[1]) {
152
+              this.enterprise = item1
153
+            }
154
+          })
155
+        })
156
+      }
157
+      this.corpid = this.enterprise.corpid || ''
158
+      this.init()
159
+    },
160
+    onChangeCorpid(val) {
161
+      if (!val) {
162
+        this.enterprise = {}
163
+      } else {
164
+        const res = this.enterpriseList.filter(v => v.corpid == val)[0];
165
+        this.enterprise = res || {}
166
+      }
167
+      this.corpid = this.enterprise.corpid || ''
168
+      this.init()
169
+    },
170
+    // 企业筛选初始化
171
+    handleInitCorpOptions() {
172
+      if (this.$cookie.getCookie('isSuperManage') == 1) {//系统管理员
173
+        const enterpriseList = this.$store.state.authorize_corpList;
174
+        enterpriseList.forEach(item => {//为了el-cascader更改props
175
+          item.self_id = item.group_id.toString();
176
+          item.self_name = item.group_name;
177
+          item.manage_corp_list.forEach(item1 => {
178
+            item1.self_id = item1.corpid;
179
+            item1.self_name = item1.corp_name;
180
+          })
181
+        });
182
+        this.enterpriseList = enterpriseList
183
+      } else {
184
+        this.enterpriseList = this.$store.state.authorize_corpList;
185
+      }
186
+    },
187
+    // E 企微主体数据
188
+
189
+    payChange (data) {//付费情况变化
190
+      this.pay_status = data.radio;
191
+      this.pay_num_min = data.minValue;
192
+      this.pay_num_max = data.maxValue;
193
+      this.init()
194
+    },
195
+    lossChange (val) {//筛选流失状态变化
196
+      if (val == '') {
197
+        this.loss_status = null
198
+      } else {
199
+        this.loss_status = val
200
+      }
201
+      this.init()
202
+    },
203
+    changeTime (time) {//筛选时间变化
204
+      if (!time || time && time.length == 0) {
205
+        this.add_date_start = '';
206
+        this.add_date_end = '';
207
+      } else {
208
+        this.add_date_start = time[0]
209
+        this.add_date_end = time[1]
210
+      }
211
+      this.init()
212
+    },
213
+    // 监听“充值时间”筛选变化
214
+    onChangePayTime (time) {
215
+      if (!time || time && time.length == 0) {
216
+        this.last_pay_time_start = '';
217
+        this.last_pay_time_end = '';
218
+      } else {
219
+        this.last_pay_time_start = time[0]
220
+        this.last_pay_time_end = time[1]
221
+      }
222
+      this.init()
223
+    },
224
+    // 监听“流失时间”筛选变化
225
+    onChangeLossTime (time) {
226
+      if (!time || time && time.length == 0) {
227
+        this.loss_time_start = '';
228
+        this.loss_time_end = '';
229
+      } else {
230
+        this.loss_time_start = time[0]
231
+        this.loss_time_end = time[1]
232
+      }
233
+      this.init()
234
+    },
235
+    // 监听“添加渠道”筛选变化
236
+    onChangeAddWay (val) {
237
+      this.add_way = val
238
+      this.init()
239
+    },
240
+    // 监听“是否新用户”筛选变化
241
+    onChangeIsNewCus (val) {
242
+      this.is_new_customer_no_loss = val
243
+      this.init()
244
+    },
245
+    // 监听“可否接收消息”筛选变化
246
+    onChangeCanReceive (val) {
247
+      this.can_receive = val
248
+      this.init()
249
+    },
250
+    // 监听"是否单主体完全流失"筛选变化
251
+    onChangeRetainedStatus(val) {
252
+      this.retained_status = val
253
+      this.init()
254
+    },
255
+    init (type) {
256
+      if (type == 'export' && this.tableData.length == 0) {
257
+        this.$message({
258
+          message: '暂无数据可导出',
259
+          type: "warning"
260
+        })
261
+        return
262
+
263
+      }
264
+      this.loading = true
265
+      this.$axios.get(this.URL.BASEURL + this.URL.dataBoard_corpCustomerCountStat, {
266
+        params: {
267
+          corp_id: this.corpid,
268
+          customer_name: this.input_keyword,
269
+          add_date_start: this.add_date_start,
270
+          add_date_end: this.add_date_end,
271
+          last_pay_time_start: this.last_pay_time_start,
272
+          last_pay_time_end: this.last_pay_time_end,
273
+          loss_time_start: this.loss_time_start,
274
+          loss_time_end: this.loss_time_end,
275
+          add_way: this.add_way,
276
+          is_new_customer_no_loss: this.is_new_customer_no_loss,
277
+          can_receive: this.can_receive,
278
+          retained_status: this.retained_status,
279
+          pay_status: this.pay_status,
280
+          pay_num_min: this.pay_num_min,
281
+          pay_num_max: this.pay_num_max,     
282
+          loss_status: this.loss_status,
283
+          source: 1,
284
+          gender: this.gender
285
+        }
286
+      }).then((res) => {
287
+        var res = res.data
288
+        this.loading = false
289
+        if (res && res.errno == 0) {
290
+          if (type == 'export') {
291
+            this.exportEvent(res.rst)
292
+          } else {
293
+            this.tableData = res.rst;
294
+          }
295
+        } else if (res.errno != 4002) {
296
+          this.$message({
297
+            message: res.err,
298
+            type: "warning"
299
+          })
300
+        }
301
+      }).catch((err) => {
302
+        this.loading = false
303
+      });
304
+    },
305
+    exportEvent (data) {
306
+      let list = data;
307
+      let tHeader = ['企微主体', '客户数']
308
+      let filterVal = ['corp_name', 'customer_count']
309
+      let excelDatas = [
310
+        {
311
+          tHeader: tHeader, // sheet表一头部
312
+          filterVal: filterVal, // 表一的数据字段
313
+          tableDatas: list, // 表一的整体json数据
314
+          sheetName: ''// 表一的sheet名字
315
+        }
316
+      ]
317
+      this.$exportOrder({ excelDatas, name: `企微客户数统计(导出时间:${this.$getDay(0)})` })
318
+    },
319
+  }
320
+}
321
+</script>
322
+<style lang="scss" scoped>
323
+@import "@/style/list.scss";
324
+.corpCustomerCountStat{
325
+  .screenBox {
326
+    background: #fff;
327
+    // padding: 5px 20px 26px;
328
+    padding: 5px 20px 10px;
329
+    position: relative;
330
+    .export-btn {
331
+      position: absolute;
332
+      top: 17px;
333
+      right: 4px;
334
+    }
335
+  }
336
+
337
+  .con{
338
+    position: relative;
339
+    .flex{
340
+      display: flex;
341
+      position: sticky;
342
+      top: 0px;
343
+      margin-left: 10px;
344
+      height: 60px;
345
+      background-color: white;
346
+    }
347
+    .theads{
348
+      background: #FBFBFB;
349
+      border: 1px solid #EBEEF5;
350
+      font-size: 14px;
351
+      color: #666;
352
+      display: flex;
353
+      align-items: center;
354
+      position: sticky;
355
+      top: 60px;
356
+      .thead_item{
357
+        // width: 20%;
358
+        flex: 1;
359
+        padding: 16px;
360
+        color: #666;
361
+        background-color: #fbfbfb;
362
+        border-right: 1px solid #EBEEF5;
363
+      }
364
+    }
365
+    .tbodys{
366
+      .tbody_item{
367
+        display: flex;
368
+        align-items: center;
369
+        color: #333;
370
+        font-size: 13px;
371
+        border: 1px solid #EBEEF5;
372
+        border-top: none;
373
+        div{
374
+          // width: 20%;
375
+          flex: 1;
376
+          word-break:break-all;
377
+          border-right: 1px solid #EBEEF5;
378
+          padding: 16px;
379
+        }
380
+        .c-00B38A{
381
+          color: #00B38A;
382
+        }
383
+      }
384
+    }
385
+  }
386
+  .tips-wrap {
387
+    background-color: #fff;
388
+    margin-bottom: 5px;
389
+    margin-top: 5px;
390
+    padding: 5px 15px;
391
+    display: flex;
392
+    align-items: flex-start;
393
+    font-size: 13px;
394
+    color: #666;
395
+    line-height: 16px;
396
+    i {
397
+      font-size: 14px;
398
+      font-weight: 600;
399
+      margin-right: 4px;
400
+      margin-top: 1px;
401
+    }
402
+  }
403
+  .select-cls {
404
+    /deep/ .el-input__inner {
405
+      width: 210px;
406
+    }
407
+    /deep/ &.el-select .el-input.is-focus .el-input__inner,
408
+    /deep/ &.el-select .el-input__inner:focus,
409
+    /deep/ &.el-cascader .el-input.is-focus .el-input__inner,
410
+    /deep/ &.el-cascader .el-input__inner:focus {
411
+      border-color: #DCDFE6;
412
+    }
413
+    /deep/ .el-input__suffix {
414
+      border-top-right-radius: 4px;
415
+      border-bottom-right-radius: 4px;
416
+      border: 1px solid #DCDFE6;
417
+      right: 0;
418
+      width: 30px;
419
+      background-color: #F1F1F1;
420
+      .el-input__icon {
421
+        color: #909399;
422
+      }
423
+    }
424
+    &.cascader {
425
+      /deep/ .el-input__suffix {
426
+        height: 32px;
427
+        top: 2px;
428
+      }
429
+    }
430
+  }
431
+}
432
+</style>

+ 16 - 14
project/src/components/dataBoard/yxOrderData.vue

@@ -10,25 +10,27 @@
10 10
       <div class="reset" @click="resetEvent">重置</div>
11 11
       <!-- <el-button v-if="isCanExport" class="export-btn" type="primary" size="mini" @click="onClickExport">导出Excel</el-button> -->
12 12
     </div>
13
+
13 14
     <!-- S 广告汇总 summaryTable -->
14
-    <div v-loading="summaryLoading">
15
-        <ux-grid class="uxGridBox" ref="summaryTable" :border="false" @row-click="() => { return }" :header-cell-style="headerColor" :max-height="height" show-footer-overflow="tooltip" show-overflow="tooltip" size="mini">
16
-          <ux-table-column v-for="(item, idx) in summaryTableCol" :key="item.prop" :resizable="true" :field="item.prop" :title="item.label" :min-width="item.min_width ? item.min_width : 120" :fixed="item.fixed ? item.fixed : ''" align="center">
17
-            <template #header>
15
+    <div v-loading="summaryLoading" style="margin-top: 10px;">
16
+      <ux-grid class="uxGridBox" ref="summaryTable" :border="false" @row-click="() => { return }" :header-cell-style="headerColor" :max-height="height" show-footer-overflow="tooltip" show-overflow="tooltip" size="mini">
17
+        <ux-table-column v-for="(item, idx) in summaryTableCol" :key="item.prop" :resizable="true" :field="item.prop" :title="item.label" :min-width="item.min_width ? item.min_width : 120" :fixed="item.fixed ? item.fixed : ''" align="center">
18
+          <template #header>
18 19
             <div class="flex-align-jus-center">{{ item.label }}
19 20
               <el-tooltip v-if="item.notes" :content="item.notes" placement="top">
20 21
                 <div><i class="el-icon-question"></i></div>
21 22
               </el-tooltip>
22 23
             </div>
23 24
           </template>
24
-            <template v-slot="{ row }">
25
-              <span>{{ (row[item.prop] || row[item.prop] == 0) ? $formatNum(row[item.prop]) : '-' }}</span>
26
-            </template>
27
-          </ux-table-column>
28
-        </ux-grid>
29
-      </div>
30
-      <!-- E 广告汇总 summaryTable -->
31
-    <div v-loading="loading">
25
+          <template v-slot="{ row }">
26
+            <span>{{ (row[item.prop] || row[item.prop] == 0) ? $formatNum(row[item.prop]) : '-' }}</span>
27
+          </template>
28
+        </ux-table-column>
29
+      </ux-grid>
30
+    </div>
31
+    <!-- E 广告汇总 summaryTable -->
32
+    
33
+    <div v-loading="loading" style="margin-top: 10px;">
32 34
       <ux-grid class="uxGridBox" ref="plxTable" :border="false" @row-click="() => { return }"
33 35
         :header-cell-style="headerColor" :height="height" show-footer-overflow="tooltip" show-overflow="tooltip"
34 36
         size="mini">
@@ -47,7 +49,7 @@
47 49
               <template>
48 50
                 <span v-if="row.ad_report_order_status == '成功' && row.supplement_status == 0" class="c-A5A5A5 pointer fWeight600 disabled">已回传</span>
49 51
                 <span v-else-if="row.ad_report_order_status == '成功' && row.supplement_status == 1" class="c-A5A5A5 pointer fWeight600 disabled">已补单</span>
50
-                <span v-else-if="row.order_status != 4 && row.predict_commission_fee > 0" class="c-00B38A pointer fWeight600" @click="onClickReport(row)">回传</span>
52
+                <span v-else-if="row.order_status != 4 && row.predict_commission_fee > 0" class="c-00B38A pointer fWeight600" @click="onClickReport(row)">补单</span>
51 53
               </template>
52 54
             </div>
53 55
 
@@ -349,7 +351,7 @@ export default {
349 351
     },
350 352
     async onClickReport(row) {
351 353
       try {
352
-        await this.$confirm(`订单ID【${row.order_id}】,确定手动回传吗?`, '提示', {
354
+        await this.$confirm(`订单ID【${row.order_id}】,确定补单吗?`, '提示', {
353 355
           confirmButtonText: '确定',
354 356
           cancelButtonText: '取消',
355 357
           type: 'warning'

+ 16 - 1
project/src/router/allRouter.js

@@ -1,3 +1,5 @@
1
+// import { component } from 'vue/types/umd'
2
+
1 3
 const INDEX = () => import(/* webpackChunkName: 'INDEX' */'@/components/Index/index.vue')
2 4
 const Home = () => import(/* webpackChunkName: 'Home' */'@/components/Home.vue')
3 5
 const homeData = () => import(/* webpackChunkName: 'homeData' */'@/components/HomeData.vue')
@@ -58,7 +60,7 @@ const playletFansActTrend = () => import(/* webpackChunkName: 'playletFansActTre
58 60
 const batchAddFriend = () => import(/* webpackChunkName: 'batchAddFriend' */ '@/components/marketingGuest/batchAddFriend/index.vue')
59 61
 const importRecord = () => import(/* webpackChunkName: 'importRecord' */ '@/components/marketingGuest/batchAddFriend/addFriend/importRecord.vue')
60 62
 const importRecordDetial = () => import(/* webpackChunkName: 'importRecordDetial' */ '@/components/marketingGuest/batchAddFriend/addFriend/importRecordDetial.vue')
61
-const yxOrderData = () => import('@/components/dataBoard/yxOrderData.vue')
63
+const yxOrderData = () => import(/* webpackChunkName: 'yxOrderData' */ '@/components/dataBoard/yxOrderData.vue')
62 64
 // const putOnwarning = () => import(/* webpackChunkName: 'putOnwarning' */ '@/components/dataBoard/putOnwarning/warningManage.vue')
63 65
 // const massMsgDetail = () => import(/* webpackChunkName: 'massMsgDetail' */ '@/components/customOperate/massMsgDetail/index.vue')
64 66
 const codeIndex = () => import(/* webpackChunkName: 'codeIndex' */ '@/components/channelCode/codeIndex.vue')
@@ -91,6 +93,8 @@ const pitcherAdq = () => import(/* webpackChunkName: 'pitcherAdq' */ '@/componen
91 93
 const customerStaff = () => import(/* webpackChunkName: 'customerStaff' */ '@/components/dataBoard/customerStaff/index.vue')
92 94
 // 数据看板 - 导出列表(离线导出任务列表)
93 95
 const exportOffline = () => import(/* webpackChunkName: 'exportOffline' */ '@/components/dataBoard/exportOffline.vue')
96
+// 数据看板 - 企微客户数统计
97
+const corpCustomerCountStat = () => import(/* webpackChunkName: 'corpCustomerCountStat' */'@/components/dataBoard/corpCustomerCountStat.vue')
94 98
 
95 99
 // 平台账号管理
96 100
 const accountManage = () => import(/* webpackChunkName: 'accountManage' */ '@/components/manage/accountManage/accountManage.vue')
@@ -1093,6 +1097,17 @@ export var allRouter = [
1093 1097
           isData: true
1094 1098
         }
1095 1099
       },
1100
+      {
1101
+        path: 'corpCustomerCountStat',
1102
+        name: 'corpCustomerCountStat',
1103
+        component: corpCustomerCountStat,
1104
+        meta: {
1105
+          keepAlive: false,
1106
+          isLogin: true,
1107
+          title: '企微客户数统计',
1108
+          isData: true
1109
+        }
1110
+      }
1096 1111
     ]
1097 1112
   }
1098 1113
 ]

File diff suppressed because it is too large
+ 1 - 1
static/css/app.4cef2d4d8499be9fa2ff980d2ff2137d.css


File diff suppressed because it is too large
+ 0 - 15
static/js/0.60669f6f2d3c3ba5b00d.js


File diff suppressed because it is too large
+ 15 - 0
static/js/0.f78a3e06fedd826ebc44.js


File diff suppressed because it is too large
+ 1 - 1
static/js/99.69b856247616c400e3ce.js


File diff suppressed because it is too large
+ 0 - 1
static/js/18.af36b8472e5ec7f607ed.js


File diff suppressed because it is too large
+ 1 - 1
static/js/19.2508e59119a13842f4a5.js


File diff suppressed because it is too large
+ 1 - 1
static/js/20.6580d8df017a0520292b.js


File diff suppressed because it is too large
+ 1 - 1
static/js/21.efc8dadda316c61615ac.js


File diff suppressed because it is too large
+ 1 - 1
static/js/22.dae91633fceabb9f625c.js


File diff suppressed because it is too large
+ 1 - 1
static/js/23.d1e7b0403cee6793efb3.js


File diff suppressed because it is too large
+ 1 - 1
static/js/24.97c97f5adfa0b9a507d4.js


File diff suppressed because it is too large
+ 1 - 1
static/js/25.4054db9ae2f7da1cbc54.js


File diff suppressed because it is too large
+ 1 - 1
static/js/27.b07dd678790fdc2b9ae8.js


File diff suppressed because it is too large
+ 0 - 1
static/js/26.310a5e1e77e6f19b3217.js


File diff suppressed because it is too large
+ 1 - 1
static/js/28.7e03f902b765f19511c3.js


File diff suppressed because it is too large
+ 1 - 1
static/js/29.0526ec18be8f695f2e78.js


File diff suppressed because it is too large
+ 1 - 1
static/js/30.280698f082efc911b336.js


File diff suppressed because it is too large
+ 1 - 1
static/js/31.a1a59b3256b873d9b6df.js


File diff suppressed because it is too large
+ 1 - 1
static/js/32.a0d3e27c05cd91cf9e7a.js


File diff suppressed because it is too large
+ 1 - 1
static/js/33.3bced9cd6673d092f8a2.js


File diff suppressed because it is too large
+ 1 - 1
static/js/34.bdead09a7ad4b361f1fa.js


File diff suppressed because it is too large
+ 1 - 1
static/js/35.bfac29632c1a7bfad34f.js


File diff suppressed because it is too large
+ 1 - 1
static/js/36.46940af7561693a6da5e.js


File diff suppressed because it is too large
+ 1 - 1
static/js/37.3c2e1d19aba2d3fc6498.js


File diff suppressed because it is too large
+ 1 - 1
static/js/38.c330c5b4b86a2c8f201d.js


File diff suppressed because it is too large
+ 1 - 1
static/js/39.535e8a02b7d1cdceee04.js


File diff suppressed because it is too large
+ 1 - 1
static/js/40.2a378da81198b2e85217.js


File diff suppressed because it is too large
+ 1 - 1
static/js/41.f9a976e9d6eb91b37c3d.js


File diff suppressed because it is too large
+ 1 - 1
static/js/42.4895acbfed9d99a1e320.js


File diff suppressed because it is too large
+ 1 - 1
static/js/43.ea6b3a37ad845010b9ef.js


File diff suppressed because it is too large
+ 1 - 1
static/js/44.e776b6d6be55a921d3f8.js


File diff suppressed because it is too large
+ 1 - 1
static/js/45.5d185a368f047af6a460.js


File diff suppressed because it is too large
+ 1 - 1
static/js/46.6495d0fdff71ae160f3a.js


File diff suppressed because it is too large
+ 1 - 1
static/js/47.d62f88307060e320dc48.js


File diff suppressed because it is too large
+ 1 - 1
static/js/48.79c724aea0b5759cb0b6.js


File diff suppressed because it is too large
+ 1 - 1
static/js/49.d1033f7266f9e41f5263.js


File diff suppressed because it is too large
+ 1 - 1
static/js/50.af4d91bda95620a9b9fb.js


File diff suppressed because it is too large
+ 1 - 1
static/js/51.670e6e50c6b56733981d.js


File diff suppressed because it is too large
+ 1 - 1
static/js/52.b6bfb8084f4a295cf594.js


File diff suppressed because it is too large
+ 1 - 1
static/js/53.a655dd044050938bf73b.js


File diff suppressed because it is too large
+ 1 - 0
static/js/52.56c859a2f6835e9006b0.js


File diff suppressed because it is too large
+ 1 - 1
static/js/54.30e9a00ce701d7a5678f.js


File diff suppressed because it is too large
+ 1 - 0
static/js/54.e1f26caae77f96b9f27a.js


File diff suppressed because it is too large
+ 1 - 0
static/js/56.7bf540b9d9fe04bd8da5.js


File diff suppressed because it is too large
+ 1 - 1
static/js/56.ceb4568c2d414d603740.js


File diff suppressed because it is too large
+ 1 - 1
static/js/57.06192371caeebc9f27e6.js


File diff suppressed because it is too large
+ 1 - 1
static/js/58.8e58ad21942787e92ebc.js


File diff suppressed because it is too large
+ 1 - 1
static/js/59.27407a7dd5a247e468a5.js


File diff suppressed because it is too large
+ 1 - 1
static/js/60.f7af024cb8943b26ef88.js


File diff suppressed because it is too large
+ 1 - 1
static/js/61.575c575756bf87398070.js


File diff suppressed because it is too large
+ 1 - 1
static/js/62.24da6f61365dd7980dae.js


File diff suppressed because it is too large
+ 1 - 1
static/js/63.0cd54484e1b6ee51b599.js


File diff suppressed because it is too large
+ 1 - 1
static/js/64.44f6c629e9853cd8f671.js


File diff suppressed because it is too large
+ 1 - 1
static/js/65.fdb33ec0470a60b62b37.js


File diff suppressed because it is too large
+ 1 - 1
static/js/66.e2d7429748d8bd202328.js


File diff suppressed because it is too large
+ 1 - 1
static/js/67.ea55bba02a4db200c42c.js


File diff suppressed because it is too large
+ 1 - 1
static/js/68.e876d223e9758a79dba3.js


File diff suppressed because it is too large
+ 1 - 1
static/js/69.8878ad191e961de239e2.js


File diff suppressed because it is too large
+ 1 - 1
static/js/70.387ad354070843f91f92.js


File diff suppressed because it is too large
+ 1 - 1
static/js/71.a1d3f016b6bd79feb12e.js


File diff suppressed because it is too large
+ 1 - 1
static/js/72.1711cc3d28d0cb963606.js


File diff suppressed because it is too large
+ 1 - 1
static/js/73.a79a63b04fa67be52ba9.js


File diff suppressed because it is too large
+ 1 - 1
static/js/74.64baa29b6a09238fc43f.js


File diff suppressed because it is too large
+ 1 - 1
static/js/75.4ba6b5024eb98a3446b5.js


File diff suppressed because it is too large
+ 1 - 1
static/js/76.189cf42c82cd2ba5c7ed.js


File diff suppressed because it is too large
+ 1 - 1
static/js/77.c5fc79dd1ab1d627bc19.js


File diff suppressed because it is too large
+ 1 - 1
static/js/78.5e0a7f0f19edde2e32f3.js


File diff suppressed because it is too large
+ 1 - 1
static/js/79.0387420ca53867ada3fa.js


File diff suppressed because it is too large
+ 1 - 0
static/js/81.17197df1280209a9a834.js


File diff suppressed because it is too large
+ 1 - 1
static/js/80.cb3218143219b269cdc1.js


File diff suppressed because it is too large
+ 1 - 1
static/js/81.4e0a63db6df7f357a61b.js


File diff suppressed because it is too large
+ 1 - 1
static/js/82.9b38c90a248507658e4f.js


File diff suppressed because it is too large
+ 1 - 1
static/js/83.9ce89d15b563ab37f975.js


File diff suppressed because it is too large
+ 1 - 1
static/js/84.481edfe28bb926979b83.js


File diff suppressed because it is too large
+ 1 - 1
static/js/85.19920caae6bd83784ba9.js


File diff suppressed because it is too large
+ 1 - 1
static/js/86.27b6125ddec8c46ed520.js


File diff suppressed because it is too large
+ 0 - 1
static/js/88.f8d119bdd6cc624e81d0.js


File diff suppressed because it is too large
+ 1 - 1
static/js/87.65be13a98cb96ee2c98d.js


File diff suppressed because it is too large
+ 1 - 1
static/js/89.900bbf9f08a9fce47cdf.js


File diff suppressed because it is too large
+ 1 - 1
static/js/90.3853761115eeaadbc800.js


File diff suppressed because it is too large
+ 1 - 1
static/js/91.ddb0e1f37632f938cc75.js


File diff suppressed because it is too large
+ 1 - 1
static/js/92.04c31ac4ffedf8efec62.js


File diff suppressed because it is too large
+ 1 - 1
static/js/93.33e47f3685e4683e356c.js


File diff suppressed because it is too large
+ 1 - 1
static/js/94.3b3dbd554e063a71ece3.js


File diff suppressed because it is too large
+ 1 - 1
static/js/95.9dc4658147da56b697ce.js


File diff suppressed because it is too large
+ 1 - 1
static/js/96.bea8540b3114ab21454c.js


File diff suppressed because it is too large
+ 1 - 1
static/js/97.5c07331a85d5c4e82f84.js


File diff suppressed because it is too large
+ 1 - 1
static/js/98.40aa3785df4027a47887.js


File diff suppressed because it is too large
+ 6 - 6
static/js/app.796b9751e25609984bf2.js


File diff suppressed because it is too large
+ 0 - 1
static/js/manifest.005760f08540e67b9957.js


File diff suppressed because it is too large
+ 1 - 0
static/js/manifest.b5f8124635bf7970979a.js