liyongli 2 gadi atpakaļ
vecāks
revīzija
3e54072fe1
34 mainītis faili ar 227 papildinājumiem un 166 dzēšanām
  1. 24 0
      src/api/index.js
  2. 3 0
      src/views/Activity/views/defaultComponent.vue
  3. 3 0
      src/views/Activity/views/derunsanqin.vue
  4. 3 0
      src/views/Activity/views/huashanyunhai.vue
  5. 3 0
      src/views/Activity/views/mianmianjiedao.vue
  6. 3 0
      src/views/Activity/views/shanxijiaoao1.vue
  7. 3 0
      src/views/Activity/views/shanxijiaoao2.vue
  8. 3 0
      src/views/Activity/views/zhongqiuzhiye.vue
  9. 2 0
      src/views/AdvertisingEye/components/allTrend.vue
  10. 2 0
      src/views/AdvertisingEye/components/allTrendB.vue
  11. 1 0
      src/views/AdvertisingEye/components/comTrendWeek.vue
  12. 2 0
      src/views/AdvertisingEye/components/distribution.vue
  13. 15 14
      src/views/AdvertisingEye/components/distributionB.vue
  14. 1 0
      src/views/AdvertisingEye/components/structure.vue
  15. 1 0
      src/views/AdvertisingEye/components/structureB.vue
  16. 3 0
      src/views/AdvertisingEye/components/tranche.vue
  17. 7 5
      src/views/AdvertisingEye/components/trancheB.vue
  18. 2 0
      src/views/AdvertisingEye/components/trancheB2.vue
  19. 2 0
      src/views/BoutiqueColumn/views/dialogueSecretary.vue
  20. 2 0
      src/views/BoutiqueColumn/views/huashanlunjian.vue
  21. 2 0
      src/views/BoutiqueColumn/views/hundredBrokenPlays.vue
  22. 2 0
      src/views/BoutiqueColumn/views/policeStory.vue
  23. 2 0
      src/views/BoutiqueColumn/views/shaanxiNewsSimulcast.vue
  24. 2 0
      src/views/BoutiqueColumn/views/urbanExpressNews.vue
  25. 1 0
      src/views/ChannelRanking/components/lineCharts.vue
  26. 120 145
      src/views/Channle/index.vue
  27. 1 0
      src/views/Content/index.vue
  28. 1 0
      src/views/Country/components/lineCharts.vue
  29. 1 0
      src/views/Country/components/lineCharts1.vue
  30. 4 0
      src/views/HardAdvertisement/HardAdvertisement.vue
  31. 1 0
      src/views/History/index.vue
  32. 1 0
      src/views/RealOnline/index.vue
  33. 1 0
      src/views/Region/index.vue
  34. 3 2
      src/views/Version/index.vue

+ 24 - 0
src/api/index.js

@@ -1006,3 +1006,27 @@ export function getRegionChart(data) {
     data,
   });
 }
+/**
+ * 获取大数据平台渠道分析 图表;
+ * @return {AxjxPromise}
+ */
+export function getChannleChart(data) {
+  return ajax({
+    urlType: "leverAudience",
+    url: "/cxzx-program/new-media/user/manufacturer-dt",
+    method: "POST",
+    data,
+  });
+}
+/**
+ * 获取大数据平台渠道分析 页面;
+ * @return {AxjxPromise}
+ */
+export function getChannlePage(data) {
+  return ajax({
+    urlType: "leverAudience",
+    url: "/cxzx-program/new-media/user/manufacturer",
+    method: "POST",
+    data,
+  });
+}

+ 3 - 0
src/views/Activity/views/defaultComponent.vue

@@ -325,6 +325,7 @@ export default {
       chart1.setOption({
         tooltip: {
           trigger: "axis",
+          confine: true,
           formatter: v => {
             const item = v[0] || {};
             return (
@@ -372,6 +373,7 @@ export default {
       });
       this.chart2.setOption({
         tooltip: {
+          confine: true,
           trigger: "item",
           formatter: v => {
             return v.name + ":" + this.numform(v.value);
@@ -443,6 +445,7 @@ export default {
       });
       this.chart3.setOption({
         tooltip: {
+          confine: true,
           trigger: "item",
           formatter: v => {
             return v.name + ":" + this.numform(v.value);

+ 3 - 0
src/views/Activity/views/derunsanqin.vue

@@ -187,6 +187,7 @@ export default {
       });
       var option = {
         tooltip: {
+          confine: true,
           trigger: "item",
           formatter: "{b}: {c} ({d}%)",
         },
@@ -231,6 +232,7 @@ export default {
       var option = {
         tooltip: {
           show: true,
+          confine: true,
           formatter: function(res) {
             if (!res.data) return "";
             return res.data.name + ":" + (res.data.value || 0);
@@ -304,6 +306,7 @@ export default {
       });
       var option = {
         tooltip: {
+          confine: true,
           trigger: "item",
           formatter: "{b}: {c} ({d}%)",
           rich: {

+ 3 - 0
src/views/Activity/views/huashanyunhai.vue

@@ -170,6 +170,7 @@ export default {
       });
       var option = {
         tooltip: {
+          confine: true,
           trigger: "item",
           formatter: "{b}: {c} ({d}%)",
         },
@@ -217,6 +218,7 @@ export default {
       });
       var option = {
         tooltip: {
+          confine: true,
           trigger: "axis",
           axisPointer: {
             type: "shadow",
@@ -277,6 +279,7 @@ export default {
       echarts.registerMap("china", map);
       var option = {
         tooltip: {
+          confine: true,
           show: true,
           formatter: function(res) {
             if (!res.data) return "";

+ 3 - 0
src/views/Activity/views/mianmianjiedao.vue

@@ -175,6 +175,7 @@ export default {
       });
       var option = {
         tooltip: {
+          confine: true,
           trigger: "item",
           formatter: "{a} <br/>{b}: {c} ({d}%)",
         },
@@ -224,6 +225,7 @@ export default {
       });
       var option = {
         tooltip: {
+          confine: true,
           trigger: "axis",
           axisPointer: {
             type: "shadow",
@@ -284,6 +286,7 @@ export default {
       echarts.registerMap("china", map);
       var option = {
         tooltip: {
+          confine: true,
           show: true,
           formatter: function(res) {
             if (!res.data) return "";

+ 3 - 0
src/views/Activity/views/shanxijiaoao1.vue

@@ -248,6 +248,7 @@ export default {
       });
       var option = {
         tooltip: {
+          confine: true,
           trigger: "item",
           formatter: "{a} <br/>{b}: {c} ({d}%)",
         },
@@ -315,6 +316,7 @@ export default {
           text: title[num - 1],
         },
         tooltip: {
+          confine: true,
           formatter: "{b} : {c}",
           trigger: "axis",
           axisPointer: {
@@ -433,6 +435,7 @@ export default {
       });
       var option = {
         tooltip: {
+          confine: true,
           trigger: "item",
           formatter: "{b} : {d}%",
         },

+ 3 - 0
src/views/Activity/views/shanxijiaoao2.vue

@@ -256,6 +256,7 @@ export default {
       });
       var option = {
         tooltip: {
+          confine: true,
           trigger: "item",
           formatter: "{a} <br/>{b}: {c} ({d}%)",
         },
@@ -325,6 +326,7 @@ export default {
         tooltip: {
           formatter: "{b} : {c}",
           trigger: "axis",
+          confine: true,
           axisPointer: {
             type: "shadow",
           },
@@ -458,6 +460,7 @@ export default {
       var option = {
         tooltip: {
           trigger: "item",
+          confine: true,
           formatter: "{b} : {d}%",
         },
         series: [

+ 3 - 0
src/views/Activity/views/zhongqiuzhiye.vue

@@ -173,6 +173,7 @@ export default {
       });
       var option = {
         tooltip: {
+          confine: true,
           trigger: "item",
           formatter: "{b}: {c} ({d}%)",
         },
@@ -227,6 +228,7 @@ export default {
       });
       var option = {
         tooltip: {
+          confine: true,
           trigger: "axis",
           axisPointer: {
             type: "shadow",
@@ -361,6 +363,7 @@ export default {
       });
       var option = {
         tooltip: {
+          confine: true,
           trigger: "item",
           formatter: "{b} : {c} ({d}%)",
         },

+ 2 - 0
src/views/AdvertisingEye/components/allTrend.vue

@@ -262,6 +262,7 @@ export default {
         color: c,
         tooltip: {
           trigger: "axis",
+          confine: true,
           textStyle: {
             color: "#000000",
           },
@@ -333,6 +334,7 @@ export default {
         color: c,
         tooltip: {
           trigger: "axis",
+          confine: true,
           textStyle: {
             color: "#000000",
           },

+ 2 - 0
src/views/AdvertisingEye/components/allTrendB.vue

@@ -247,6 +247,7 @@ export default {
         },
         tooltip: {
           trigger: "axis",
+          confine: true,
           textStyle: {
             color: "#000000",
           },
@@ -306,6 +307,7 @@ export default {
         color: c,
         tooltip: {
           trigger: "axis",
+          confine: true,
           textStyle: {
             color: "#000000",
           },

+ 1 - 0
src/views/AdvertisingEye/components/comTrendWeek.vue

@@ -108,6 +108,7 @@ export default {
       var option = {
         tooltip: {
           trigger: "axis",
+          confine: true,
           textStyle: {
             color: "#000000",
           },

+ 2 - 0
src/views/AdvertisingEye/components/distribution.vue

@@ -226,6 +226,7 @@ export default {
             },
             tooltip: {
               show: index === 0 ? false : true,
+          confine: true,
               formatter: function() {
                 return k[index - 1].name + ":" + item[index - 1] + "%";
               },
@@ -238,6 +239,7 @@ export default {
 
       let option = {
         tooltip: {
+          confine: true,
           trigger: "item",
         },
         radar: {

+ 15 - 14
src/views/AdvertisingEye/components/distributionB.vue

@@ -1,6 +1,6 @@
 <template>
   <br />
-  <el-card style="margin: 0 1em;">
+  <el-card style="margin: 0 1em">
     <div class="title_card" v-text="title"></div>
     <br />
     <el-button-group style="margin-left: 1.5em">
@@ -19,9 +19,7 @@
     <el-row>
       <el-col :span="12">
         <div class="customer_list">
-          <div class="customer_list_head">
-            软广-节目类型占比
-          </div>
+          <div class="customer_list_head">软广-节目类型占比</div>
           <div ref="softAd"></div>
         </div>
       </el-col>
@@ -197,18 +195,18 @@ export default {
         item = [],
         total = 0;
       list.map(v => {
-         total +=
+        total +=
           (v[this.soft_planting_list[this.soft_planting_act].proportionType] ||
             0) - 0;
       });
       list.map(v => {
-         let value =
+        let value =
           v[this.soft_planting_list[this.soft_planting_act].proportionType] - 0;
         let val = ((value / total) * 100).toFixed(2) - 0;
         item.push(val);
         k.push({ name: v.programType, max: item[0] + 10 });
       });
-      const buildSeries = function(data) {
+      const buildSeries = function (data) {
         const helper = data.map((item, index) => {
           const arr = new Array(data.length);
           arr.splice(index, 1, item);
@@ -233,9 +231,9 @@ export default {
             },
             tooltip: {
               show: index === 0 ? false : true,
-              formatter: function() {
-
-                return k[index - 1].name + ":" + item[index - 1] + '%';
+              confine: true,
+              formatter: function () {
+                return k[index - 1].name + ":" + item[index - 1] + "%";
               },
             },
             z: index === 0 ? 1 : 2,
@@ -245,7 +243,10 @@ export default {
       };
 
       let option = {
-        tooltip: { trigger: "item" },
+        tooltip: {
+          confine: true,
+          trigger: "item",
+        },
         radar: {
           radius: 130,
           shape: "circle",
@@ -265,12 +266,12 @@ export default {
     },
     numFor(num) {
       if (isNaN(num)) return 0;
-    //   if (num >= 100000000) return (num / 100000000).toFixed(2) - 0 + "亿";
-    //   if (num >= 10000) return (num / 10000).toFixed(2) - 0 + "万";
+      //   if (num >= 100000000) return (num / 100000000).toFixed(2) - 0 + "亿";
+      //   if (num >= 10000) return (num / 10000).toFixed(2) - 0 + "万";
       return Number(num).toFixed(2) - 0;
     },
   },
-  beforeUnmount: function() {
+  beforeUnmount: function () {
     this.softAd_chart && this.softAd_chart.dispose();
     this.softAd_chart && (this.softAd_chart = undefined);
   },

+ 1 - 0
src/views/AdvertisingEye/components/structure.vue

@@ -137,6 +137,7 @@ export default {
         ],
         tooltip: {
           trigger: "item",
+          confine: true,
           //   formatter: '{b} {d}%'
           formatter: item => {
             return (

+ 1 - 0
src/views/AdvertisingEye/components/structureB.vue

@@ -141,6 +141,7 @@ export default {
         ],
         tooltip: {
           trigger: "item",
+          confine: true,
           formatter: '{b} {d}%'
         },
         series: li.map((v, i) => {

+ 3 - 0
src/views/AdvertisingEye/components/tranche.vue

@@ -179,6 +179,7 @@ export default {
         ],
         tooltip: {
           trigger: "item",
+          confine: true,
           formatter: item => {
             return (
               item.name +
@@ -280,6 +281,7 @@ export default {
           type: "bar",
           stack: "total",
           color: "rgba(255,255,255,1)",
+          confine: true,
           tooltip: {
             show: false,
           },
@@ -297,6 +299,7 @@ export default {
       }
       var option = {
         tooltip: {
+          confine: true,
           trigger: "item",
           axisPointer: {
             type: "shadow",

+ 7 - 5
src/views/AdvertisingEye/components/trancheB.vue

@@ -1,6 +1,6 @@
 <template>
   <br />
-  <el-card style="margin: 0 1em;">
+  <el-card style="margin: 0 1em">
     <div class="title_card" v-text="title"></div>
     <br />
     <el-button-group style="margin-left: 1.5em">
@@ -107,7 +107,7 @@ export default {
             label: {
               show: true,
               formatter: item => {
-                if(item.value === 0 ) return "";
+                if (item.value === 0) return "";
                 return item.value + "%";
               },
             },
@@ -123,7 +123,7 @@ export default {
             label: {
               show: true,
               formatter: item => {
-                if(item.value === 0 ) return "";
+                if (item.value === 0) return "";
                 return item.value + "%";
               },
             },
@@ -141,13 +141,14 @@ export default {
             type: "bar",
             stack: "total",
             color: "rgba(255,255,255,1)",
+            confine: true,
             tooltip: {
               show: false,
             },
             label: {
               show: true,
               formatter: item => {
-                if(item.value === 0 ) return "";
+                if (item.value === 0) return "";
                 if (t === 0) return "硬广无刊例价";
                 if (t === 1) return "软广无刊例价";
               },
@@ -174,6 +175,7 @@ export default {
       });
       var option = {
         tooltip: {
+          confine: true,
           trigger: "item",
           axisPointer: {
             type: "shadow",
@@ -215,7 +217,7 @@ export default {
       option && share1_chart.setOption(option);
     },
   },
-  beforeUnmount: function() {
+  beforeUnmount: function () {
     share1_chart && share1_chart.dispose();
     share1_chart && (share1_chart = undefined);
   },

+ 2 - 0
src/views/AdvertisingEye/components/trancheB2.vue

@@ -130,6 +130,7 @@ export default {
       var option = {
         tooltip: {
           trigger: "item",
+          confine: true,
           formatter: obj => {
             let v = obj.value || 0;
             if (!isNaN(v)) v = v - 0;
@@ -199,6 +200,7 @@ export default {
       var option = {
         tooltip: {
           trigger: "item",
+          confine: true,
           formatter: obj => {
             let v = obj.value || 0;
             if (!isNaN(v)) v = v - 0;

+ 2 - 0
src/views/BoutiqueColumn/views/dialogueSecretary.vue

@@ -187,6 +187,7 @@ export default {
       });
       let option = {
         tooltip: {
+          confine: true,
           trigger: "axis",
           axisPointer: {
             type: "cross",
@@ -309,6 +310,7 @@ export default {
       let option = {
         title: {},
         tooltip: {
+          confine: true,
           trigger: "axis",
           axisPointer: {
             type: "shadow",

+ 2 - 0
src/views/BoutiqueColumn/views/huashanlunjian.vue

@@ -189,6 +189,7 @@ export default {
       let option = {
         tooltip: {
           trigger: "axis",
+          confine: true,
           axisPointer: {
             type: "cross",
           },
@@ -310,6 +311,7 @@ export default {
       let option = {
         title: {},
         tooltip: {
+          confine: true,
           trigger: "axis",
         },
         grid: {

+ 2 - 0
src/views/BoutiqueColumn/views/hundredBrokenPlays.vue

@@ -189,6 +189,7 @@ export default {
       let option = {
         tooltip: {
           trigger: "axis",
+          confine: true,
           axisPointer: {
             type: "cross",
           },
@@ -311,6 +312,7 @@ export default {
         title: {},
         tooltip: {
           trigger: "axis",
+          confine: true,
           axisPointer: {
             type: "shadow",
           },

+ 2 - 0
src/views/BoutiqueColumn/views/policeStory.vue

@@ -189,6 +189,7 @@ export default {
       let option = {
         tooltip: {
           trigger: "axis",
+          confine: true,
           axisPointer: {
             type: "cross",
           },
@@ -311,6 +312,7 @@ export default {
         title: {},
         tooltip: {
           trigger: "axis",
+          confine: true,
           axisPointer: {
             type: "shadow",
           },

+ 2 - 0
src/views/BoutiqueColumn/views/shaanxiNewsSimulcast.vue

@@ -188,6 +188,7 @@ export default {
       let option = {
         tooltip: {
           trigger: "axis",
+          confine: true,
           axisPointer: {
             type: "cross",
           },
@@ -310,6 +311,7 @@ export default {
         title: {},
         tooltip: {
           trigger: "axis",
+          confine: true,
           axisPointer: {
             type: "shadow",
           },

+ 2 - 0
src/views/BoutiqueColumn/views/urbanExpressNews.vue

@@ -187,6 +187,7 @@ export default {
       });
       let option = {
         tooltip: {
+          confine: true,
           trigger: "axis",
           axisPointer: {
             type: "cross",
@@ -309,6 +310,7 @@ export default {
       let option = {
         title: {},
         tooltip: {
+          confine: true,
           trigger: "axis",
           axisPointer: {
             type: "shadow",

+ 1 - 0
src/views/ChannelRanking/components/lineCharts.vue

@@ -94,6 +94,7 @@ export default {
       var option = {
         tooltip: {
           trigger: "axis",
+          confine: true,
           triggerOn: "mousemove",
           axisPointer: {
             type: "line",

+ 120 - 145
src/views/Channle/index.vue

@@ -1,5 +1,5 @@
 <template>
-  <div class="Content">
+  <div class="Channle">
     <el-breadcrumb separator-class="el-icon-arrow-right">
       <el-breadcrumb-item>新媒体</el-breadcrumb-item>
       <el-breadcrumb-item>应用分析</el-breadcrumb-item>
@@ -90,8 +90,20 @@
     <el-card class="box-card">
       <div style="text-align: right">
         <el-button-group>
-          <el-button size="small" type="primary"> 新用户数 </el-button>
-          <el-button size="small" type="primary"> 启动次数 </el-button>
+          <el-button
+            size="small"
+            :type="numType === 'newUser' ? 'primary' : 'plain'"
+            @click="() => selectNumType('newUser')"
+          >
+            新用户数
+          </el-button>
+          <el-button
+            size="small"
+            :type="numType === 'startTimes' ? 'primary' : 'plain'"
+            @click="() => selectNumType('startTimes')"
+          >
+            启动次数
+          </el-button>
         </el-button-group>
       </div>
       <br />
@@ -110,35 +122,22 @@
       <br />
       <br />
       <el-table
-        :data="table.records || []"
+        :data="table || []"
         style="width: 100%"
-        @sort-change="tableChange"
         :header-cell-style="{
           backgroundColor: '#f4f5f7',
           color: '#606266',
         }"
       >
         <el-table-column
-          prop="contentId"
-          header-align="center"
-          align="center"
-          label="内容ID"
-          show-overflow-tooltip
-        >
-          <template #default="scope">
-            <span v-text="scope.row.contentId || '-'"></span>
-          </template>
-        </el-table-column>
-        <el-table-column
-          prop="title"
+          prop="appVersion"
           header-align="center"
           align="center"
-          width="300"
-          label="标题"
+          label="渠道"
           show-overflow-tooltip
         >
           <template #default="scope">
-            <span v-text="scope.row.title || '-'"></span>
+            <span v-text="scope.row.appVersion || '-'"></span>
           </template>
         </el-table-column>
         <el-table-column
@@ -152,118 +151,62 @@
           </template>
         </el-table-column>
         <el-table-column
-          prop="publishTime"
+          prop="newUser"
           header-align="center"
           align="center"
-          label="发布时间"
+          label="本渠道新用户"
           show-overflow-tooltip
-        >
-          <template #default="scope">
-            <span v-text="scope.row.publishTime || '-'"></span>
-          </template>
-        </el-table-column>
-        <el-table-column
-          label="平均阅读时长"
-          header-align="center"
-          align="center"
-          sortable
-          :sort-orders="['descending', null]"
-          prop="cduration"
-        >
-          <template #default="scope">
-            <span v-text="timeFormat(scope.row.cduration)"></span>
-          </template>
-        </el-table-column>
-        <el-table-column
-          label="阅读次数"
-          header-align="center"
-          align="center"
-          sortable
-          :sort-orders="['descending', null]"
-          prop="cpv"
         >
           <template #default="scope">
             <countTo
-              :startVal="0"
-              :endVal="scope.row.cpv || 0"
+              :startVal="scope.row.newUser || 0"
+              :endVal="scope.row.newUser || 0"
               :duration="100"
             ></countTo>
           </template>
         </el-table-column>
         <el-table-column
-          label="点赞次数"
+          prop="startTimes"
           header-align="center"
           align="center"
-          sortable
-          :sort-orders="['descending', null]"
-          prop="csupport"
-        >
-          <template #default="scope">
-            <countTo
-              :startVal="0"
-              :endVal="scope.row.csupport || 0"
-              :duration="100"
-            ></countTo>
-          </template>
-        </el-table-column>
-        <el-table-column
-          label="收藏次数"
-          header-align="center"
-          align="center"
-          sortable
-          :sort-orders="['descending', null]"
-          prop="ccollect"
+          label="启动次数"
+          show-overflow-tooltip
         >
           <template #default="scope">
             <countTo
-              :startVal="0"
-              :endVal="scope.row.ccollect || 0"
+              :startVal="scope.row.startTimes || 0"
+              :endVal="scope.row.startTimes || 0"
               :duration="100"
             ></countTo>
           </template>
         </el-table-column>
         <el-table-column
-          label="分享次数"
+          prop="activeUser"
           header-align="center"
           align="center"
-          sortable
-          :sort-orders="['descending', null]"
-          prop="cshare"
+          label="启动户数"
+          show-overflow-tooltip
         >
           <template #default="scope">
             <countTo
-              :startVal="0"
-              :endVal="scope.row.cshare || 0"
+              :startVal="scope.row.activeUser || 0"
+              :endVal="scope.row.activeUser || 0"
               :duration="100"
             ></countTo>
           </template>
         </el-table-column>
         <el-table-column
-          label="观看用户数"
+          prop="distribution"
           header-align="center"
           align="center"
-          sortable
-          :sort-orders="['descending', null]"
-          prop="cuser"
+          label="平均使用时长"
+          show-overflow-tooltip
         >
           <template #default="scope">
-            <countTo
-              :startVal="0"
-              :endVal="scope.row.cuser || 0"
-              :duration="100"
-            ></countTo>
+            {{timeFormat(scope.row.distribution )}}
           </template>
         </el-table-column>
       </el-table>
-      <br />
-      <el-pagination
-        layout="prev, pager, next"
-        :page-size="form.size"
-        :current-page="form.page"
-        :total="table.total"
-        background
-        @current-change="changePage"
-      />
     </el-card>
   </div>
 </template>
@@ -273,8 +216,8 @@ import {
   getRule,
   getAppList,
   getSearchData,
-  getContentChart,
-  getContentPage,
+  getChannleChart,
+  getChannlePage,
 } from "@/api/index";
 
 import countTo from "@/components/counto/vue-countTo.vue";
@@ -298,14 +241,15 @@ echarts.use([
   LegendComponent,
 ]);
 
-import config from "@/config/index";
+// import config from "@/config/index";
 let chart = undefined;
 export default {
   name: "Version",
   data() {
     return {
       lastParams: {},
-      table: {},
+      table: [],
+      numType: "newUser",
       form: {
         app: "",
         version: [],
@@ -326,27 +270,26 @@ export default {
       value: "mname",
       label: "mname",
     };
+    const channel = [];
     this.cycle = this.verifyList(appli, source, keys, false);
-    this.channel = this.verifyList(appCLi, appC, keys, true);
+    this.channel = this.verifyList(appCLi, appC, keys, false);
     this.version = this.verifyList(appVLi, appV, keys, true);
+    for (let i = 0; i < this.channel.length; i++) {
+      if (i > 4) break;
+      const v = this.channel[i];
+      channel.push(v.value)
+    }
     this.form = {
       //   app: (this.cycle[0] || { value: "" }).value,
       app: "起点新闻",
       version: [(this.version[0] || { value: "" }).value],
-      channel: [(this.channel[0] || { value: "" }).value],
+      channel,
       date: [new Date(Date.now() - 604800000), new Date(Date.now() - 86400000)],
-      page: 1,
-      size: 20,
     };
     this.onSubmit();
   },
   computed: {},
   methods: {
-    tableChange() {
-      this.form.page = 1;
-      this.lastParams.page = 1;
-      getContentPage(this.lastParams).then(r => (this.table = r || {}));
-    },
     verifyList(list, verify, obj, more) {
       if (!obj) return;
       let li = list || [];
@@ -362,9 +305,23 @@ export default {
       }
       return out;
     },
-    changePage(e) {
-      this.form.page = e;
-      this.onSubmit();
+    selectNumType(type) {
+      this.numType = type;
+      getChannleChart(this.lastParams).then(resChart => {
+        const c = resChart || {};
+        let keyList = [],
+          valueList = [],
+          titles = [];
+        if ((resChart || []).length && chart && chart.clear)
+          return chart.clear();
+        for (let index = 0; index < (Object.keys(c) || []).length; index++) {
+          const v = (Object.keys(c) || [])[index];
+          valueList.push((c[v] || []).map(v => v[this.numType]));
+          titles.push(v);
+          if (!keyList.length) keyList = (c[v] || []).map(v => v.dt);
+        }
+        this.createImage(keyList, valueList, titles);
+      });
     },
     onSubmit() {
       this.lastParams = {
@@ -373,21 +330,21 @@ export default {
         end: this.FormData(this.form.date[1]),
         manufacturer: this.form.channel == -1 ? undefined : this.form.channel,
         version: this.form.version == -1 ? undefined : this.form.version,
-        page: this.form.page,
-        pageSize: this.form.size,
       };
-      getContentPage(this.lastParams).then(r => (this.table = r || {}));
-      getContentChart({
-        app: this.form.app,
-        start: this.FormData(this.form.date[0]),
-        end: this.FormData(this.form.date[1]),
-        version: this.form.version == -1 ? undefined : this.form.version,
-      }).then(resChart => {
+      getChannlePage(this.lastParams).then(r => (this.table = r || []));
+      getChannleChart(this.lastParams).then(resChart => {
+        const c = resChart || {};
         let keyList = [],
           valueList = [],
           titles = [];
         if ((resChart || []).length && chart && chart.clear)
           return chart.clear();
+        for (let index = 0; index < (Object.keys(c) || []).length; index++) {
+          const v = (Object.keys(c) || [])[index];
+          valueList.push((c[v] || []).map(v => v[this.numType]));
+          titles.push(v);
+          if (!keyList.length) keyList = (c[v] || []).map(v => v.dt);
+        }
         this.createImage(keyList, valueList, titles);
       });
     },
@@ -396,8 +353,10 @@ export default {
       chart.resize({
         height: (this.$refs.regionChart.offsetWidth * 4) / 16,
       });
+      chart.clear();
       chart.setOption({
         tooltip: {
+          confine: true,
           trigger: "axis",
         },
         toolbox: {
@@ -588,15 +547,10 @@ export default {
           gcode: "CHANNEL",
           source: this.form.app,
         }).then(r => {
-          let channel = [
-            {
-              label: "不限",
-              value: -1,
-            },
-          ];
+          let channel = [];
           r.map(v => {
             if ((appV.length && appV[v.mcode]) || appV.length === 0)
-            channel.push({
+              channel.push({
                 value: v.mname,
                 label: v.mname,
               });
@@ -640,24 +594,45 @@ export default {
       const E = this.form.date[1]
         ? this.FormData(this.form.date[1])
         : undefined;
-      const app = this.lastParams.app || this.form.app;
-      const version =
-        this.form.version == -1 ? undefined : this.form.version.join(",");
-      const manufacturer =
-        this.lastParams.manufacturer || this.form.channel.join(",");
-      let url =
-        config.base.leverAudience +
-        "/cxzx-program/new-media/content/export?start=" +
-        S +
-        "&end=" +
-        E +
-        "&app=" +
-        app;
-      version && (url += "&version=" + version);
-      manufacturer &&
-        manufacturer !== -1 &&
-        (url += "&manufacturer=" + manufacturer);
-      window.open(url);
+      let p = this.lastParams.app
+        ? this.lastParams
+        : {
+            app: this.form.app,
+            start: S,
+            end: E,
+            manufacturer:
+              this.form.channel == -1 ? undefined : this.form.channel,
+            version: this.form.version == -1 ? undefined : this.form.version,
+          };
+      getChannlePage(p).then(r => {
+        // 生成数据
+        let strcsv =
+          "data:text/csv;charset=utf-8,版本,应用,升级用户数,新用户数,活跃用户数,启动次数,启动用户(分布),平均使用时长\r\n";
+        (r || []).map(v => {
+          strcsv += [
+            v.appVersion,
+            p.app,
+            v.upgradeUser,
+            v.newUser,
+            v.activeUser,
+            v.startTimes,
+            v.distribution + "%",
+            this.timeFormat(v.duration),
+            "\r\n",
+          ].join(",");
+        });
+        // 导出
+        let link = document.createElement("a");
+        link.id = "download-csv";
+        link.setAttribute("href", encodeURI(strcsv));
+        link.setAttribute(
+          "download",
+          p.app + "版本分析" + S + "_" + E + ".csv"
+        );
+        // document.body.appendChild(link);
+        link.click();
+        link = undefined;
+      });
     },
   },
   components: {
@@ -667,7 +642,7 @@ export default {
 </script>
 
 <style>
-.Content {
+.Channle {
   margin: 10px 15px;
 }
 .libTitle {

+ 1 - 0
src/views/Content/index.vue

@@ -474,6 +474,7 @@ export default {
       chart.setOption({
         tooltip: {
           trigger: "axis",
+          confine: true,
         },
         toolbox: {
           feature: {

+ 1 - 0
src/views/Country/components/lineCharts.vue

@@ -89,6 +89,7 @@ export default {
       var option = {
         tooltip: {
           trigger: "axis",
+          confine: true,
           triggerOn: "mousemove",
           axisPointer: {
             type: "line",

+ 1 - 0
src/views/Country/components/lineCharts1.vue

@@ -80,6 +80,7 @@ export default {
       var option = {
         tooltip: {
           trigger: "axis",
+          confine: true,
           triggerOn: "mousemove",
           axisPointer: {
             type: "line",

+ 4 - 0
src/views/HardAdvertisement/HardAdvertisement.vue

@@ -855,6 +855,7 @@ export default {
         },
         color: ["#1b9ade", "#fd5555"],
         tooltip: {
+          confine: true,
           trigger: "axis",
           textStyle: {
             color: "#000000",
@@ -939,6 +940,7 @@ export default {
           },
         },
         tooltip: {
+          confine: true,
           trigger: "item",
           textStyle: {
             color: "#000000",
@@ -1002,6 +1004,7 @@ export default {
           },
         },
         tooltip: {
+          confine: true,
           trigger: "item",
           axisPointer: {
             type: "shadow",
@@ -1056,6 +1059,7 @@ export default {
       });
       var option = {
         tooltip: {
+          confine: true,
           trigger: "item",
           formatter: "{b} {d}%",
         },

+ 1 - 0
src/views/History/index.vue

@@ -383,6 +383,7 @@ export default {
       const _this = this;
       chart.setOption({
         tooltip: {
+          confine: true,
           trigger: "axis",
           formatter(v) {
             const item = v[0] || {};

+ 1 - 0
src/views/RealOnline/index.vue

@@ -196,6 +196,7 @@ export default {
       });
       chart.setOption({
         tooltip: {
+          confine: true,
           trigger: "axis",
         },
         toolbox: {

+ 1 - 0
src/views/Region/index.vue

@@ -305,6 +305,7 @@ export default {
       let min = list[list.length - 1].userSum;
       const p = {
         tooltip: {
+          confine: true,
           trigger: "item",
           formatter: "{b}<br/>{c}",
         },

+ 3 - 2
src/views/Version/index.vue

@@ -1,5 +1,5 @@
 <template>
-  <div class="Content">
+  <div class="Version">
     <el-breadcrumb separator-class="el-icon-arrow-right">
       <el-breadcrumb-item>新媒体</el-breadcrumb-item>
       <el-breadcrumb-item>应用分析</el-breadcrumb-item>
@@ -386,6 +386,7 @@ export default {
       chart.clear()
       chart.setOption({
         tooltip: {
+          confine: true,
           trigger: "axis",
         },
         toolbox: {
@@ -676,7 +677,7 @@ export default {
 </script>
 
 <style>
-.Content {
+.Version {
   margin: 10px 15px;
 }
 .libTitle {