Browse Source

feat: 企微助手 - 群活码 - 分析数据页面&接口联调

zhengxy 2 years ago
parent
commit
eb32fed041

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

@@ -188,6 +188,10 @@ var api = {
188 188
   groupCode_chatGroupList: '/api/chatGroup/chatGroupList',
189 189
   groupCode_delQrcode: '/api/qrcodeChatGroup/delQrcode',
190 190
   groupCode_chatGroupCountOfGroup: '/api/qrcodeChatGroup/chatGroupCountOfGroup',
191
+  groupCode_condition: '/api/qrcodeChatGroup/condition',
192
+  groupCode_dailyReport: '/api/qrcodeChatGroup/dailyReport',
193
+  groupCode_analysis: '/api/qrcodeChatGroup/analysis',
194
+  groupCode_customerList: '/api/qrcodeChatGroup/customerList',
191 195
 
192 196
   radar_addGroup: '/api/radar/radarGroupCreate',
193 197
   radar_groupList: '/api/radar/radarGroupList',

+ 177 - 0
project/src/components/groupCode/components/channelAnalysis.vue

@@ -0,0 +1,177 @@
1
+<template>
2
+  <div v-loading="loading">
3
+    <div class="timeBox">
4
+      <date-picker
5
+        title=""
6
+        :quickFlag="true"
7
+        :afferent_time="default_time"
8
+        :clearFlag='false'
9
+        :reset="resetFlag"
10
+        @changeTime="changeTime"
11
+      />
12
+    </div>
13
+    <div id="trend" style="width:100%;height:300px" />
14
+    <el-table
15
+      border
16
+      :height="height"
17
+      :data="tableData"
18
+      tooltip-effect="dark"
19
+      :header-cell-style="()=>{return { backgroundColor: '#f9f9f9 !important' }}"
20
+      style="width: 100%"
21
+    >
22
+      <template v-for="item in desCol">
23
+        <el-table-column
24
+          :key="item.prop"
25
+          :label="item.label"
26
+          :min-width="item.min_width ? item.min_width : 120"
27
+          align="center"
28
+        >
29
+          <template slot-scope="{ row }">
30
+            <div>{{ row[item.prop] || row[item.prop] == 0 ? row[item.prop] : '-' }}</div>
31
+          </template>
32
+        </el-table-column>
33
+      </template>
34
+    </el-table>
35
+  </div>
36
+</template>
37
+
38
+<script>
39
+import datePicker from '@/components/assembly/screen/datePicker.vue'
40
+
41
+export default {
42
+  name: "channelAnalysis",
43
+  components:{
44
+    datePicker
45
+  },
46
+  props: {
47
+    rule_id: {
48
+      type: Number | String,
49
+      default: () => ''
50
+    },
51
+  },
52
+  data(){
53
+    return{
54
+      loading: false,
55
+      height: '',
56
+      desCol: [
57
+        { prop: "ref_date", label: "统计时间" },
58
+        { prop: "scan_total", label: "扫码总人数" },
59
+        { prop: "keep_total", label: "留存总人数" },
60
+      ],
61
+      default_time: [this.$getDay(-30, false), this.$getDay(0, false)],
62
+      resetFlag: false,
63
+      myChart: null,
64
+      time: [],
65
+      xDate: [],
66
+      scan_code_Data: [],
67
+      scan_code_keep_Data: [],
68
+      tableData: [],
69
+    }
70
+  },
71
+  created(){
72
+    this.height = document.documentElement.clientHeight - 300 > 400 ? document.documentElement.clientHeight - 300 : 400
73
+    this.time = this.default_time
74
+    this.init()
75
+  },
76
+  methods:{
77
+    changeTime (time) {
78
+      if (!time || time && time.length == 0) {
79
+        this.time = []
80
+      } else {
81
+        this.time = time
82
+      }
83
+      this.init()
84
+    },
85
+    trendEvent () {
86
+      this.myChart && this.myChart.clear()
87
+      const option = {
88
+        title: '',
89
+        tooltip: {
90
+          trigger: 'axis',
91
+          axisPointer: {
92
+            type: 'shadow'
93
+          }
94
+        },
95
+        grid: {
96
+          left: '3%',
97
+          right: '3%',
98
+          bottom: '3%',
99
+          top:'2%',
100
+          containLabel: true
101
+        },
102
+        xAxis: [
103
+          {
104
+            type: 'category',
105
+            data: this.xDate,
106
+            axisTick: {
107
+              show: false,
108
+              alignWithLabel: false
109
+            }
110
+          }
111
+        ],
112
+        yAxis: [
113
+          {
114
+            type: 'value'
115
+          }
116
+        ],
117
+        series: [
118
+          {
119
+            name: '当日扫码人数',
120
+            type: 'bar',
121
+            barWidth: '40%',
122
+            data: this.scan_code_Data
123
+          },
124
+          {
125
+            name: '当日扫码留存人数',
126
+            type: 'bar',
127
+            barWidth: '40%',
128
+            data: this.scan_code_keep_Data
129
+          }
130
+        ]
131
+      };
132
+      //初始化echarts实例
133
+      this.myChart = this.myChart ? this.myChart : this.$echarts.init(document.getElementById('trend'));
134
+      this.myChart.setOption(option, true);
135
+    },
136
+    async init() {//渠道分析
137
+      try {
138
+        this.loading = true
139
+        const { data: res = {} } = await this.$axios.get(this.URL.BASEURL + this.URL.groupCode_dailyReport, {
140
+          params:{
141
+            rule_id: this.rule_id,
142
+            start_date: this.time[0],
143
+            end_date: this.time[1]
144
+          }
145
+        })
146
+        if (res && res.errno == 0) {
147
+          this.xDate = []
148
+          this.scan_code_Data = []
149
+          this.scan_code_keep_Data = []
150
+          res.rst.forEach(item=>{
151
+            this.xDate.push(item.ref_date)
152
+            this.scan_code_Data.push(item.scan_total)
153
+            this.scan_code_keep_Data.push(item.keep_total)
154
+          })
155
+          this.tableData = res.rst.reverse()
156
+          await this.$nextTick()
157
+          this.trendEvent()
158
+        } else if (res.errno != 4002) {
159
+          this.$message.warning(res.err)
160
+        }
161
+      } catch (error) {
162
+        console.log('error => ', error)
163
+      } finally {
164
+        this.loading = false
165
+      }
166
+    },
167
+  }
168
+}
169
+</script>
170
+
171
+<style lang="scss" scoped>
172
+.timeBox{
173
+  display: flex;
174
+  align-items: center;
175
+  justify-content: flex-end;
176
+}
177
+</style>

+ 152 - 0
project/src/components/groupCode/components/condition.vue

@@ -0,0 +1,152 @@
1
+<template>
2
+  <div class="dataBox" v-loading="loading">
3
+    <div v-for="(item,index) in dataPreview" :key="index" class="box_item">
4
+      <div class="flex-align-center">
5
+        <span class="c-000 fWeight600">{{ item.bigTitle ? item.bigTitle : '-' }}</span>
6
+        <span class="lMarauto" v-if="item.note && item.note.length > 0">
7
+            <el-tooltip class="disinblock" placement="top" effect="light">
8
+              <div slot="content">
9
+                <div v-for="(n, idx) in item.note" :key="idx">{{ n }}</div>
10
+              </div>
11
+            <i class="el-icon-question c-999" />
12
+          </el-tooltip>
13
+        </span>
14
+      </div>
15
+      <div class="f28 pad120">{{ item.bigNum || item.bigNum == 0 ? item.bigNum : '-' }}</div>
16
+      <div :style="{ 'opacity': item.smallTitle ? '1' : '0' }">
17
+        <div class="splitLine" />
18
+        <div class="pad120">
19
+          <span class="c-666 f13">{{ item.smallTitle ? item.smallTitle : '-' }}</span>
20
+          <span class="c-000 f13">{{ item.smallNum || item.smallNum == 0 ? item.smallNum : '-'}}</span>
21
+        </div>
22
+      </div>
23
+    </div>
24
+  </div>
25
+</template>
26
+
27
+<script>
28
+export default {
29
+  props: {
30
+    rule_id: {
31
+      type: Number | String,
32
+      default: () => ''
33
+    },
34
+  },
35
+  data() {
36
+    return {
37
+      loading: false,
38
+      dataPreview:[
39
+        {
40
+          bigTitle: '扫码总客户数',
41
+          smallTitle: '今日扫码总客户数',
42
+          note: [
43
+            '扫码总人数:扫描渠道群活码的总客户数',
44
+            '今日扫码人数:今日扫描渠道群活码的总客户数'
45
+          ],
46
+          bigNum: 0,
47
+          smallNum: 0,
48
+          bigParams: 'scan_total',
49
+          smallParams: 'scan_today',
50
+        },
51
+        {
52
+          bigTitle: '进群客户数',
53
+          smallTitle: '今日进群客户数',
54
+          note:[
55
+            '进群客户数:扫描渠道群活码进群的总客户数',
56
+            '今日进群客户数:今日扫描渠道群活码进群的总客户数'
57
+          ],
58
+          bigNum: 0,
59
+          smallNum: 0,
60
+          bigParams: 'join_total',
61
+          smallParams: 'join_today',
62
+        },
63
+        {
64
+          bigTitle:'退群客户数',
65
+          smallTitle:'今日退群客户数',
66
+          note:[
67
+            '退群客户数:扫描渠道群活码退群的总客户数',
68
+            '今日退群客户数:今日扫描渠道群活码退群的总客户数'
69
+          ],
70
+          bigNum: 0,
71
+          smallNum: 0,
72
+          bigParams: 'loss_total',
73
+          smallParams: 'loss_today',
74
+        },
75
+        {
76
+          bigTitle: '流失率',
77
+          smallTitle: '',
78
+          note: [
79
+            '扫描渠道群活码退群总客户数占比',
80
+          ],
81
+          bigNum: '0.00%',
82
+          smallNum: '',
83
+          bigParams: 'loss_rate',
84
+          smallParams: '',
85
+        },
86
+        {
87
+          bigTitle: '留存率',
88
+          smallTitle: '',
89
+          note: [
90
+            '扫描渠道群活码在群客户数占比',
91
+          ],
92
+          bigNum: '0.00%',
93
+          smallNum: '',
94
+          bigParams: 'keep_rate',
95
+          smallParams: '',
96
+        },
97
+      ],
98
+    }
99
+  },
100
+  created() {
101
+    this.handleGetData()
102
+  },
103
+  methods: {
104
+    async handleGetData() {
105
+      console.log('handleGetData => ', this.rule_id)
106
+      try {
107
+        this.loading = true
108
+        const { data: res = {} } = await this.$axios.get(this.URL.BASEURL + this.URL.groupCode_condition, {
109
+          params: {
110
+            rule_id: this.rule_id
111
+          }
112
+        })
113
+        if (res && res.errno == 0) {
114
+          this.dataPreview.forEach(item => {
115
+            if (item.bigTitle) {
116
+              item.bigNum = res.rst[item.bigParams]
117
+            }
118
+            if (item.smallTitle) {
119
+              item.smallNum = res.rst[item.smallParams]
120
+            }
121
+          })
122
+        } else if (res.errno != 4002) {
123
+          this.$message.warning(res.err)
124
+        }
125
+      } catch (error) {
126
+        console.log('error => ', error)
127
+      } finally {
128
+        this.loading = false
129
+      }
130
+    },
131
+  },
132
+}
133
+</script>
134
+
135
+<style lang="scss" scoped>
136
+.dataBox{
137
+  display: flex;
138
+  align-items: center;
139
+  justify-content: space-between;
140
+  .box_item{
141
+    min-width: 19%;
142
+    padding: 20px 15px 10px;
143
+    font-size: 14px;
144
+    background-color: #fff;
145
+    border-radius: 4px;
146
+    .splitLine{
147
+      width: 100%;
148
+      border-bottom: 1px solid #ddd;
149
+    }
150
+  }
151
+}
152
+</style>

+ 142 - 0
project/src/components/groupCode/components/customerList.vue

@@ -0,0 +1,142 @@
1
+<template>
2
+  <div v-loading="loading">
3
+    <div class="flex">
4
+      <self-input :hasLabel="false" label_name="搜索客户" @inputChange='onChangeKeyword' />
5
+      <el-button type="primary" size="small" @click="init('export')">导出excle</el-button>
6
+    </div>
7
+    <el-table
8
+      border
9
+      :height="height"
10
+      :data="tableData"
11
+      tooltip-effect="dark"
12
+      :header-cell-style="()=>{return { backgroundColor: '#f9f9f9 !important' }}"
13
+      style="width: 100%"
14
+    >
15
+      <template v-for="item in desCol">
16
+        <el-table-column
17
+          :key="item.prop"
18
+          :label="item.label"
19
+          :min-width="item.min_width ? item.min_width : 120"
20
+          align="center"
21
+        >
22
+          <template slot-scope="{ row }">
23
+            <div v-if="item.prop=='status'">
24
+              {{ row.status == 1 ? '正常' : row.status == 2 ? '退群' : '-' }}
25
+            </div>
26
+            <div v-else>{{ row[item.prop] || row[item.prop] === 0 ? row[item.prop] : '-' }}</div>
27
+          </template>
28
+        </el-table-column>
29
+      </template>
30
+    </el-table>
31
+    <div class="pagination" v-show="total>0">
32
+      <el-pagination background :current-page="page" @current-change="handleCurrentChange" layout="prev, pager, next" :page-count='Number(pages)'>
33
+      </el-pagination>
34
+    </div>
35
+  </div>
36
+</template>
37
+
38
+<script>
39
+import selfInput from '@/components/assembly/screen/input.vue'
40
+import _lodash from 'lodash'
41
+
42
+export default {
43
+  name: "groupAnalysis",
44
+  components: {
45
+    selfInput,
46
+  },
47
+  props: {
48
+    rule_id: {
49
+      type: Number | String,
50
+      default: () => ''
51
+    },
52
+  },
53
+  data(){
54
+    return{
55
+      loading: false,
56
+      height: '',
57
+      desCol:[
58
+        { prop: "chat_id", label: "客户群id" },
59
+        { prop: "name", label: "客户信息" },
60
+        { prop: "group_nickname", label: "群内昵称" },
61
+        { prop: "user_id", label: "userId" },
62
+        { prop: "status", label: "在群状态"},
63
+        { prop: "join_time", label: "进群时间"},
64
+      ],
65
+      tableData: [],
66
+      keyword: '',
67
+      total: 0,
68
+      page: 1,
69
+      pages: 0,
70
+      page_size: 20,
71
+    }
72
+  },
73
+  created(){
74
+    this.height = document.documentElement.clientHeight - 300 > 400 ? document.documentElement.clientHeight - 300 : 400
75
+    this.init()
76
+  },
77
+  methods:{
78
+    handleCurrentChange(page) {
79
+      this.page = page
80
+      this.init()
81
+    },
82
+    onChangeKeyword(keyword) {
83
+      this.keyword = keyword
84
+      this.page = 1
85
+      this.init()
86
+    },
87
+    async init(type) {
88
+      try {
89
+        if (type === 'export' && !this.tableData.length) {
90
+          this.$message.warning('暂无数据可导出')
91
+          return
92
+        }
93
+        this.loading = true
94
+        const { data: res = {} } = await this.$axios.get(this.URL.BASEURL + this.URL.groupCode_customerList, {
95
+          params: {
96
+            rule_id: this.rule_id,
97
+            keyword: this.keyword,
98
+            page: type === 'export' ? 1 : this.page,
99
+            page_size: type === 'export' ? this.$store.state.exportNumber : this.page_size
100
+          }
101
+        })
102
+        if (res && res.errno == 0) {
103
+          if (type === 'export') {
104
+            this.exportEvent(res.rst.data)
105
+          } else {
106
+            this.tableData = res.rst.data
107
+            this.total = res.rst.pageInfo.total
108
+            this.pages = res.rst.pageInfo.pages
109
+          }
110
+        } else if (res.errno != 4002) {
111
+          this.$message.warning(res.err)
112
+        }
113
+      } catch (error) {
114
+        console.log('error => ', error)
115
+      } finally {
116
+        this.loading = false
117
+      }
118
+    },
119
+    exportEvent(data) {
120
+      const tHeader = this.desCol.map((v) => v.label)
121
+      const filterVal = this.desCol.map((v) => v.prop)
122
+      const tableDatas = _lodash.cloneDeep(data)
123
+      tableDatas.forEach((item) => {
124
+        item.status = item.status == 1 ? '正常' : (item.status == 2 ? '退群' : '-')
125
+      })
126
+      const excelDatas = [
127
+        {
128
+          tHeader, // sheet表一头部
129
+          filterVal, // 表一的数据字段
130
+          tableDatas, // 表一的整体json数据
131
+          sheetName: ''// 表一的sheet名字
132
+        }
133
+      ]
134
+      this.$exportOrder({ excelDatas, name: `渠道群活码-分析数据-客户列表(导出时间:${this.$getDay(0)})` })
135
+    }
136
+  }
137
+}
138
+</script>
139
+
140
+<style lang="scss" scoped>
141
+
142
+</style>

+ 80 - 0
project/src/components/groupCode/components/groupAnalysis.vue

@@ -0,0 +1,80 @@
1
+<template>
2
+  <div v-loading="loading">
3
+    <el-table
4
+      border
5
+      :height="height"
6
+      :data="tableData"
7
+      tooltip-effect="dark"
8
+      :header-cell-style="()=>{return { backgroundColor: '#f9f9f9 !important' }}"
9
+      style="width: 100%"
10
+    >
11
+      <template v-for="item in desCol">
12
+        <el-table-column
13
+          :key="item.prop"
14
+          :label="item.label"
15
+          :min-width="item.min_width ? item.min_width : 120"
16
+          align="center"
17
+        >
18
+          <template slot-scope="{ row }">
19
+            <div>{{ row[item.prop] || row[item.prop] == 0 ? row[item.prop] : '-' }}</div>
20
+          </template>
21
+        </el-table-column>
22
+      </template>
23
+    </el-table>
24
+  </div>
25
+</template>
26
+
27
+<script>
28
+export default {
29
+  name: "groupAnalysis",
30
+  props: {
31
+    rule_id: {
32
+      type: Number | String,
33
+      default: () => ''
34
+    },
35
+  },
36
+  data(){
37
+    return{
38
+      loading: false,
39
+      height: '',
40
+      desCol:[
41
+        { prop: "chat_id", label: "客户群id" },
42
+        { prop: "chat_group_name", label: "群聊名称" },
43
+        { prop: "join_total", label: "入群人数" },
44
+        { prop: "loss_total", label: "退群人数" },
45
+        { prop: "keep_rate", label: "留存率",}
46
+      ],
47
+      tableData: [],
48
+    }
49
+  },
50
+  created(){
51
+    this.height = document.documentElement.clientHeight - 300 > 400 ? document.documentElement.clientHeight - 300 : 400
52
+    this.init()
53
+  },
54
+  methods:{
55
+    async init() {
56
+      try {
57
+        this.loading = true
58
+        const { data: res = {} } = await this.$axios.get(this.URL.BASEURL + this.URL.groupCode_analysis, {
59
+          params: {
60
+            rule_id: this.rule_id,
61
+          }
62
+        })
63
+        if (res && res.errno == 0) {
64
+          this.tableData = res.rst
65
+        } else if (res.errno != 4002) {
66
+          this.$message.warning(res.err)
67
+        }
68
+      } catch (error) {
69
+        console.log('error => ', error)
70
+      } finally {
71
+        this.loading = false
72
+      }
73
+    },
74
+  }
75
+}
76
+</script>
77
+
78
+<style lang="scss" scoped>
79
+
80
+</style>

+ 84 - 0
project/src/components/groupCode/groupCodeAnalyse.vue

@@ -0,0 +1,84 @@
1
+<template>
2
+  <div class="con">
3
+    <div class="backBox" @click="$router.go(-1)">
4
+      <div class="back">
5
+        <i class="el-icon-back"></i>
6
+        <span>返回</span>
7
+      </div>
8
+    </div>
9
+
10
+    <!-- S 数据总概 -->
11
+    <condition :rule_id="id"  />
12
+    <!-- E 数据总概 -->
13
+
14
+    <div class="topTagBox">
15
+      <!-- S tab 切换 -->
16
+      <div class="flex-align-center bMar15">
17
+        <div
18
+          v-for="tab in switchList"
19
+          :key="tab.id"
20
+          :class="['tagItem', tagType === tab.id ? 'tagItem_active' : '']"
21
+          @click="tagType = tab.id"
22
+        >
23
+          {{ tab.name ? tab.name : '-' }}
24
+        </div>
25
+      </div>
26
+      <!-- E tab 切换 -->
27
+
28
+      <!-- S 渠道分析 -->
29
+      <channelAnalysis v-if="tagType === 0" :rule_id="id" />
30
+      <!-- E 渠道分析 -->
31
+
32
+      <!-- S 客户列表 -->
33
+      <customerList v-if="tagType === 1" :rule_id="id" />
34
+      <!-- E 客户列表 -->
35
+
36
+      <!-- S 群分析 -->
37
+      <groupAnalysis v-if="tagType === 2" :rule_id="id" style="margin-top: 30px" />
38
+      <!-- E 群分析 -->
39
+
40
+    </div>
41
+  </div>
42
+</template>
43
+
44
+<script>
45
+import condition from './components/condition.vue'
46
+import channelAnalysis from './components/channelAnalysis.vue'
47
+import customerList from './components/customerList.vue'
48
+import groupAnalysis from './components/groupAnalysis.vue'
49
+
50
+export default {
51
+  name: 'groupCodeAnalyse',
52
+  components: {
53
+    condition,
54
+    channelAnalysis,
55
+    customerList,
56
+    groupAnalysis,
57
+  },
58
+  data() {
59
+    return {
60
+      id: this.$route.params.id,
61
+      tagType: 0,
62
+      switchList: [
63
+        { name: '渠道分析', id: 0 },
64
+        { name: '客户列表', id: 1 },
65
+        { name: '群分析', id: 2 },
66
+      ],
67
+    }
68
+  },
69
+  created() {},
70
+  methods: {}
71
+}
72
+</script>
73
+
74
+<style lang="scss" scoped>
75
+@import "@/style/list.scss";
76
+.con{
77
+  padding-right: 10px;
78
+}
79
+
80
+.topTagBox{
81
+  margin-top: 10px;
82
+  font-size: 14px;
83
+}
84
+</style>

+ 7 - 7
project/src/components/groupCode/index.vue

@@ -50,11 +50,11 @@
50 50
                   <!-- E 禁用 -->
51 51
 
52 52
                   <!-- S 编辑 -->
53
-                  <div class="lMar8" :class="row.status==1 ? 'c-00B38A pointer' : 'c-999 pointer-drop'" @click="row.status==1&&editCode(row.id)">编辑</div>
53
+                  <div class="lMar8" :class="row.status==1 ? 'c-00B38A pointer' : 'c-999 pointer-drop'" @click="row.status==1&&handleEditCode(row.id)">编辑</div>
54 54
                   <!-- E 编辑 -->
55 55
 
56 56
                   <!-- S 复制 -->
57
-                  <el-popconfirm @confirm="copyCode(row.id)" :title="`确定复制【${row.name}】渠道活码?`">
57
+                  <el-popconfirm @confirm="handleCopyCode(row.id)" :title="`确定复制【${row.name}】渠道活码?`">
58 58
                     <div slot="reference" class="c-00B38A pointer lMar8">复制</div>
59 59
                   </el-popconfirm>
60 60
                   <!-- E 复制 -->
@@ -64,7 +64,7 @@
64 64
                   <!-- E 下载 -->
65 65
 
66 66
                   <!-- S 分析数据 -->
67
-                  <div class="c-00B38A pointer lMar8" @click="goDataAanlyse(row.id)">分析数据</div>
67
+                  <div class="c-00B38A pointer lMar8" @click="handleToAnalyse(row.id)">分析数据</div>
68 68
                   <!-- E 分析数据 -->
69 69
                 </div>
70 70
             </template>
@@ -191,14 +191,14 @@ export default {
191 191
       }
192 192
     },
193 193
     // 编辑
194
-    editCode(id){
194
+    handleEditCode(id){
195 195
       this.$router.push({
196 196
         path: '/createGroupCode',
197 197
         query: { id, type: 'edit' }
198 198
       })
199 199
     },
200 200
     // 复制
201
-    copyCode(id){
201
+    handleCopyCode(id){
202 202
       this.$router.push({
203 203
         path: '/createGroupCode',
204 204
         query: { id, type: 'copy' }
@@ -227,8 +227,8 @@ export default {
227 227
       image.src = imgsrc;
228 228
     },
229 229
     // 分析数据
230
-    goDataAanlyse(id){
231
-      this.$router.push('/dataAnalyse/'+id)
230
+    handleToAnalyse(id) {
231
+      this.$router.push(`/groupCodeAnalyse/${id}`)
232 232
     },
233 233
   }
234 234
 }

+ 11 - 0
project/src/router/allRouter.js

@@ -50,6 +50,7 @@ const radarIndex = () => import(/* webpackChunkName: 'radarIndex' */ '@/componen
50 50
 
51 51
 const groupCodeIndex = () => import(/* webpackChunkName: 'groupCodeIndex' */ '@/components/groupCode/index.vue')
52 52
 const createGroupCode = () => import(/* webpackChunkName: 'createGroupCode' */ '@/components/groupCode/createGroupCode.vue')
53
+const groupCodeAnalyse = () => import(/* webpackChunkName: 'groupCodeAnalyse' */ '@/components/groupCode/groupCodeAnalyse.vue')
53 54
 
54 55
 
55 56
 // name与菜单配置的页面路由一致
@@ -142,6 +143,16 @@ export var allRouter = [
142 143
         }
143 144
       },
144 145
       {
146
+        path: 'groupCodeAnalyse/:id',
147
+        name: 'groupCodeIndex',
148
+        component: groupCodeAnalyse,
149
+        meta: {
150
+          keepAlive: false,
151
+          isLogin: true,
152
+          title: '分析数据'
153
+        }
154
+      },
155
+      {
145 156
         path: 'codeIndex',
146 157
         name: 'codeIndex',
147 158
         component: codeIndex,