Quellcode durchsuchen

传统媒体和传播力

liyongli vor 3 Jahren
Ursprung
Commit
dd1cb13ebe

+ 1 - 0
package.json

@@ -21,6 +21,7 @@
     "@vue/cli-service": "~4.5.0",
     "@vue/compiler-sfc": "^3.0.0",
     "babel-eslint": "^10.1.0",
+    "compression-webpack-plugin": "5.0.1",
     "eslint": "^6.7.2",
     "eslint-plugin-vue": "^7.0.0",
     "unplugin-element-plus": "^0.1.0",

+ 4 - 1
src/App.vue

@@ -1,7 +1,7 @@
 <template>
   <el-config-provider :locale="locale">
     <el-scrollbar height="100vh" always wrap-class="scorll">
-      <div id="nav">
+      <div id="nav" >
         <!-- <router-link to="/">栏目</router-link> |
       <router-link to="/channel">频道</router-link> |
       <router-link to="/realData">直播数据</router-link> -->
@@ -38,6 +38,9 @@ export default {
   -moz-osx-font-smoothing: grayscale;
   color: #2c3e50;
 }
+body{
+  position: relative;
+}
 body .el-date-table td.current:not(.disabled) span,
 body .el-date-table td.end-date span, body .el-date-table td.start-date span{
   background-color: #313759 

+ 8 - 1
src/utils/request.js

@@ -1,5 +1,7 @@
 import config from "../config/index";
 
+import { ElLoading } from 'element-plus'
+
 function getdata(data) {
   let text = "";
   for (const key in data) {
@@ -11,9 +13,13 @@ function getdata(data) {
 }
 
 export default function(ori) {
-  let baseurl = config.base[ori.urlType || 'url'];
+  let baseurl = config.base[ori.urlType || "url"];
   let url = baseurl + ori.url + getdata(ori.data || {});
   if (ori.downCsv) return window.open(url);
+  let load = ElLoading.service({
+    lock: true,
+    background: 'rgba(255, 255, 255, 0.7)',
+  })
   return new Promise((resolve, reject) => {
     var xhttp;
     if (window.XMLHttpRequest) xhttp = new XMLHttpRequest();
@@ -23,6 +29,7 @@ export default function(ori) {
     xhttp.open(method, url, true);
     method === "GET" ? xhttp.send() : xhttp.send(JSON.stringify(ori.data));
     xhttp.onreadystatechange = function() {
+      if (this.readyState === 4) load.close()
       if (this.readyState != 4 || this.status != 200) return;
       let data = {};
       try {

+ 37 - 14
src/views/BoutiqueColumn/BoutiqueColumn.vue

@@ -1,20 +1,28 @@
 <template>
-  <div class="boutiqueColumn">
-    <el-tabs tab-position="left" style="max-height: 100%;">
+  <div class="boutiqueColumn" >
+    <el-loading></el-loading>
+    <el-tabs
+      tab-position="top"
+      style="max-height: 100%;"
+      @tab-click="selectTab"
+    >
       <el-tab-pane
         v-for="(item, i) in columnNames"
+        v-model="select"
         :key="i"
         :label="item.programName"
       >
-        <el-scrollbar height="100vh" always wrap-class="scorll">
-          <div class="tab-body">
-            <keep-alive>
-              <component
-                v-if="item.component"
-                :is="item.component"
-                :item="item"
-              ></component>
-            </keep-alive>
+        <el-scrollbar
+          height="100%"
+          always
+          wrap-class="scorll"
+          :name="item.component"
+        >
+          <div
+            class="tab-body"
+            v-if="item.component === select || selectA[item.component]"
+          >
+            <component :is="item.component" :item="item" ></component>
           </div>
         </el-scrollbar>
       </el-tab-pane>
@@ -25,7 +33,7 @@
 <script>
 // @ is an alias to /src
 import { epgList } from "@/api/index";
-
+// 重点栏目分析
 import huashanlunjian from "./views/huashanlunjian.vue";
 import dialogueSecretary from "./views/dialogueSecretary.vue";
 import policeStory from "./views/policeStory.vue";
@@ -38,15 +46,28 @@ export default {
   data() {
     return {
       columnNames: [],
+      select: "",
+      selectA: {},
     };
   },
   mounted() {
     epgList().then(programList => {
       this.columnNames = programList || [];
+      this.select = (this.columnNames[0] || {}).component;
+      this.selectA[this.select] = true;
     });
   },
   computed: {},
-  methods: {},
+  methods: {
+    selectTab(tab) {
+      try {
+        this.select = this.columnNames[tab.index].component;
+        this.selectA[this.select] = true;
+      } catch (err) {
+        console.log(err);
+      }
+    },
+  },
   beforeUnmount: function() {},
   components: {
     huashanlunjian,
@@ -62,7 +83,9 @@ export default {
 <style>
 .boutiqueColumn {
   padding: 10px 15px;
-  height: 100vh;
   box-sizing: border-box;
 }
+.tab-body {
+  padding-bottom: 20px;
+}
 </style>

+ 74 - 0
src/views/BoutiqueColumn/components/watchrate.vue

@@ -0,0 +1,74 @@
+<template>
+  <el-row>
+    <el-col :span="4">{{watchrate}}%</el-col>
+    <el-col :span="20">
+      <div class="Watchrate">
+        <div class="nei" :style="'width:' + (watchrate/(zoom || 1)*100) + '%'"></div>
+      </div>
+    </el-col>
+  </el-row>
+</template>
+
+<script>
+// @ is an alias to /src
+import * as echarts from "echarts/core";
+import { LineChart, BarChart } from "echarts/charts";
+import {
+  TitleComponent,
+  TooltipComponent,
+  GridComponent,
+  ToolboxComponent,
+  VisualMapComponent,
+} from "echarts/components";
+import { LabelLayout, UniversalTransition } from "echarts/features";
+import { CanvasRenderer } from "echarts/renderers";
+echarts.use([
+  TitleComponent,
+  TooltipComponent,
+  GridComponent,
+  LineChart,
+  BarChart,
+  CanvasRenderer,
+  ToolboxComponent,
+  VisualMapComponent,
+  LabelLayout,
+  UniversalTransition,
+]);
+export default {
+  name: "Watchrate",
+  props: ["watchrate",'zoom'],
+  data() {
+    return {
+      tableData: [],
+      size: 10,
+      current: 1,
+      total: 1000,
+    };
+  },
+  mounted() {},
+  computed: {},
+  methods: {},
+
+  beforeUnmount: function() {},
+  components: {},
+};
+</script>
+
+<style>
+.Watchrate {
+  width: 100%;
+  height: 1.5em;
+  line-height: 1.5em;
+  background-color: #eee;
+  border-radius: 3px;
+  overflow: hidden;
+  text-align: left;
+}
+.nei {
+  height: 1.5em;
+  background: #398dee;
+  border-radius: 3px;
+  display: inline-block;
+  vertical-align: middle;
+}
+</style>

+ 70 - 27
src/views/BoutiqueColumn/views/dialogueSecretary.vue

@@ -1,10 +1,16 @@
 <template>
-  <div class="dialogueSecretary">
-    <el-table :data="tableData" @expand-change="rowClick" style="width: 100%">
+  <div class="huashanlunjian">
+    <el-table
+      :data="tableData"
+      :header-cell-style="{ backgroundColor: '#f4f5f7',color: '#606266' }"
+      v-if="tableData.length"
+      @expand-change="rowClick"
+      style="width: 100%"
+    >
       <el-table-column type="expand">
         <template #default="props">
           <div>
-            <el-row>
+            <el-row v-if="item.programType !== 'simple'">
               <el-col :span="20">
                 <div :ref="'huashanChart' + props.row.index"></div>
               </el-col>
@@ -12,13 +18,26 @@
                 <div :ref="'huashanListChart' + props.row.index"></div>
               </el-col>
             </el-row>
+            <div v-else :ref="'huashanChart' + props.row.index"></div>
           </div>
         </template>
       </el-table-column>
-      <el-table-column label="日期" prop="stadate" />
-      <el-table-column label="标题" prop="program_name" />
-      <!-- <el-table-column label="主题" prop="tagging" /> -->
+      <el-table-column align="center" label="日期" prop="stadate" />
+      <el-table-column align="center" label="标题" prop="program_name" />
+      <el-table-column align="center" label="收视率" prop="watchrate">
+        <template #default="scope">
+          <watchrate-ele :watchrate="scope.row.watchrate" :zoom="item.maxRate"/>
+        </template>
+      </el-table-column>
     </el-table>
+    <el-pagination
+      :page-size="size"
+      v-if="total/size > 1"
+      v-model:current-page="current"
+      @current-change="changePage"
+      :total="total"
+    >
+    </el-pagination>
   </div>
 </template>
 
@@ -26,6 +45,8 @@
 // @ is an alias to /src
 import { epgDetail, epgResult } from "@/api/index";
 
+import watchrateEle from "../components/watchrate.vue";
+
 import * as echarts from "echarts/core";
 import { LineChart, BarChart } from "echarts/charts";
 import {
@@ -57,32 +78,50 @@ export default {
   data() {
     return {
       tableData: [],
+      size: 10,
+      current: 1,
+      total: 1,
     };
   },
   mounted() {
-    epgResult({ programId: this.item.id }).then(programList => {
-      this.tableData = programList;
+    epgResult({
+      programId: this.item.id,
+      page: this.current,
+      pageSize: this.size,
+    }).then(programList => {
+      this.total = programList.total;
+      this.tableData = programList.data;
     });
   },
   computed: {},
   methods: {
+    changePage(newPage) {
+      this.current = newPage;
+      epgResult({
+        programId: this.item.id,
+        page: this.current,
+        pageSize: this.size,
+      }).then(programList => {
+        this.total = programList.total;
+        this.tableData = programList.data;
+      });
+    },
     rowClick(row) {
-      if (
-        openList[row.index] !== undefined ||
-        openLi[row.index] !== undefined
+       if (
+        openList[row.epg_id] !== undefined ||
+        openLi[row.epg_id] !== undefined
       ) {
-        if (openList[row.index]) {
-          openList[row.index].dispose();
-          openList[row.index] = undefined;
+        if (openList[row.epg_id]) {
+          openList[row.epg_id].dispose();
+          openList[row.epg_id] = undefined;
         }
-        if (openLi[row.index]) {
-          openLi[row.index].dispose();
-          openLi[row.index] = undefined;
+        if (openLi[row.epg_id]) {
+          openLi[row.epg_id].dispose();
+          openLi[row.epg_id] = undefined;
         }
-        return;
+        return
       }
       epgDetail({ epgId: row.epg_id }).then(res => {
-        console.log(res);
         let more = this.createChart(
           this.$refs["huashanChart" + row.index],
           res
@@ -108,11 +147,8 @@ export default {
           axisPointer: {
             type: "cross",
           },
-        },
-        toolbox: {
-          show: true,
-          feature: {
-            saveAsImage: {},
+          formatter: function(data) {
+            return data[0].value;
           },
         },
         grid: {
@@ -125,7 +161,7 @@ export default {
         xAxis: {
           type: "category",
           boundaryGap: false,
-          data: list.map(v=> v.metric)
+          data: list.map(v => v.metric),
         },
         yAxis: {
           type: "value",
@@ -169,7 +205,6 @@ export default {
         },
         series: [
           {
-            name: "Electricity",
             type: "line",
             smooth: true,
             data: list.map(v => v.watchrate),
@@ -213,6 +248,10 @@ export default {
           },
         ],
       };
+      if (this.item.programType === "simple") {
+        delete option.visualMap;
+        option.series[0].markArea = undefined;
+      }
       option && chart.setOption(option);
       return { chart, height };
     },
@@ -260,8 +299,12 @@ export default {
   },
 
   beforeUnmount: function() {},
-  components: {},
+  components: {
+    watchrateEle,
+  },
 };
 </script>
 
 <style></style>
+
+

+ 73 - 35
src/views/BoutiqueColumn/views/huashanlunjian.vue

@@ -1,24 +1,45 @@
 <template>
   <div class="huashanlunjian">
-    <el-table :data="tableData" @expand-change="rowClick" style="width: 100%">
+    <el-table
+      :header-cell-style="{ backgroundColor: '#f4f5f7', color: '#606266' }"
+      :data="tableData"
+      @expand-change="rowClick"
+      style="width: 100%"
+    >
       <el-table-column type="expand">
         <template #default="props">
           <div>
-            <el-row>
+            <el-row v-if="item.programType !== 'simple'">
               <el-col :span="20">
-                <div :ref="'huashanChart' + props.row.index"></div>
+                <div :ref="'huashanChart' + props.row.epg_id"></div>
               </el-col>
               <el-col :span="4">
-                <div :ref="'huashanListChart' + props.row.index"></div>
+                <div :ref="'huashanListChart' + props.row.epg_id"></div>
               </el-col>
             </el-row>
+            <div v-else :ref="'huashanChart' + props.row.epg_id"></div>
           </div>
         </template>
       </el-table-column>
-      <el-table-column label="日期" prop="stadate" />
-      <el-table-column label="标题" prop="program_name" />
-      <!-- <el-table-column label="主题" prop="tagging" /> -->
+      <el-table-column align="center" label="日期" prop="stadate" />
+      <el-table-column align="center" label="标题" prop="program_name" />
+      <el-table-column align="center" label="收视率" prop="watchrate">
+        <template #default="scope">
+          <watchrate-ele
+            :watchrate="scope.row.watchrate"
+            :zoom="item.maxRate"
+          />
+        </template>
+      </el-table-column>
     </el-table>
+    <el-pagination
+      :page-size="size"
+      v-if="total/size > 1"
+      v-model:current-page="current"
+      @current-change="changePage"
+      :total="total"
+    >
+    </el-pagination>
   </div>
 </template>
 
@@ -26,6 +47,8 @@
 // @ is an alias to /src
 import { epgDetail, epgResult } from "@/api/index";
 
+import watchrateEle from "../components/watchrate.vue";
+
 import * as echarts from "echarts/core";
 import { LineChart, BarChart } from "echarts/charts";
 import {
@@ -57,39 +80,57 @@ export default {
   data() {
     return {
       tableData: [],
+      size: 10,
+      current: 1,
+      total: 1,
     };
   },
   mounted() {
-    epgResult({ programId: this.item.id }).then(programList => {
-      this.tableData = programList;
+    epgResult({
+      programId: this.item.id,
+      page: this.current,
+      pageSize: this.size,
+    }).then(programList => {
+      this.total = programList.total;
+      this.tableData = programList.data;
     });
   },
   computed: {},
   methods: {
+    changePage(newPage) {
+      this.current = newPage;
+      epgResult({
+        programId: this.item.id,
+        page: this.current,
+        pageSize: this.size,
+      }).then(programList => {
+        this.total = programList.total;
+        this.tableData = programList.data;
+      });
+    },
     rowClick(row) {
       if (
-        openList[row.index] !== undefined ||
-        openLi[row.index] !== undefined
+        openList[row.epg_id] !== undefined ||
+        openLi[row.epg_id] !== undefined
       ) {
-        if (openList[row.index]) {
-          openList[row.index].dispose();
-          openList[row.index] = undefined;
+        if (openList[row.epg_id]) {
+          openList[row.epg_id].dispose();
+          openList[row.epg_id] = undefined;
         }
-        if (openLi[row.index]) {
-          openLi[row.index].dispose();
-          openLi[row.index] = undefined;
+        if (openLi[row.epg_id]) {
+          openLi[row.epg_id].dispose();
+          openLi[row.epg_id] = undefined;
         }
         return;
       }
       epgDetail({ epgId: row.epg_id }).then(res => {
-        console.log(res);
         let more = this.createChart(
-          this.$refs["huashanChart" + row.index],
+          this.$refs["huashanChart" + row.epg_id],
           res
         );
-        openList[row.index] = more.chart;
-        openLi[row.index] = this.createBarChart(
-          this.$refs["huashanListChart" + row.index],
+        openList[row.epg_id] = more.chart;
+        openLi[row.epg_id] = this.createBarChart(
+          this.$refs["huashanListChart" + row.epg_id],
           more.height
         );
       });
@@ -108,11 +149,8 @@ export default {
           axisPointer: {
             type: "cross",
           },
-        },
-        toolbox: {
-          show: true,
-          feature: {
-            saveAsImage: {},
+          formatter: function(data) {
+            return data[0].value;
           },
         },
         grid: {
@@ -125,7 +163,7 @@ export default {
         xAxis: {
           type: "category",
           boundaryGap: false,
-          data: list.map(v=> v.metric)
+          data: list.map(v => v.metric),
         },
         yAxis: {
           type: "value",
@@ -169,7 +207,6 @@ export default {
         },
         series: [
           {
-            name: "Electricity",
             type: "line",
             smooth: true,
             data: list.map(v => v.watchrate),
@@ -213,6 +250,10 @@ export default {
           },
         ],
       };
+      if (this.item.programType === "simple") {
+        delete option.visualMap;
+        option.series[0].markArea = undefined;
+      }
       option && chart.setOption(option);
       return { chart, height };
     },
@@ -227,9 +268,6 @@ export default {
         title: {},
         tooltip: {
           trigger: "axis",
-          axisPointer: {
-            type: "shadow",
-          },
         },
         grid: {
           top: 0,
@@ -244,7 +282,6 @@ export default {
         },
         yAxis: {
           type: "category",
-          data: ["Brazil", "Indonesia", "USA", "India", "China", "World"],
         },
         series: [
           {
@@ -258,9 +295,10 @@ export default {
       return chart;
     },
   },
-
   beforeUnmount: function() {},
-  components: {},
+  components: {
+    watchrateEle,
+  },
 };
 </script>
 

+ 71 - 27
src/views/BoutiqueColumn/views/hundredBrokenPlays.vue

@@ -1,10 +1,16 @@
 <template>
-  <div class="HundredBrokenPlays">
-    <el-table :data="tableData" @expand-change="rowClick" style="width: 100%">
+  <div class="huashanlunjian">
+    <el-table
+      :data="tableData"
+      v-if="tableData.length"
+      :header-cell-style="{ backgroundColor: '#f4f5f7',color: '#606266' }"
+      @expand-change="rowClick"
+      style="width: 100%"
+    >
       <el-table-column type="expand">
         <template #default="props">
           <div>
-            <el-row>
+            <el-row v-if="item.programType !== 'simple'">
               <el-col :span="20">
                 <div :ref="'huashanChart' + props.row.index"></div>
               </el-col>
@@ -12,13 +18,26 @@
                 <div :ref="'huashanListChart' + props.row.index"></div>
               </el-col>
             </el-row>
+            <div v-else :ref="'huashanChart' + props.row.index"></div>
           </div>
         </template>
       </el-table-column>
-      <el-table-column label="日期" prop="stadate" />
-      <el-table-column label="标题" prop="program_name" />
-      <!-- <el-table-column label="主题" prop="tagging" /> -->
+      <el-table-column align="center" label="日期" prop="stadate" />
+      <el-table-column align="center" label="标题" prop="program_name" />
+      <el-table-column align="center" label="收视率" prop="watchrate">
+        <template #default="scope">
+          <watchrate-ele :watchrate="scope.row.watchrate" :zoom="item.maxRate"/>
+        </template>
+      </el-table-column>
     </el-table>
+    <el-pagination
+      :page-size="size"
+      v-if="total/size > 1"
+      v-model:current-page="current"
+      @current-change="changePage"
+      :total="total"
+    >
+    </el-pagination>
   </div>
 </template>
 
@@ -26,6 +45,8 @@
 // @ is an alias to /src
 import { epgDetail, epgResult } from "@/api/index";
 
+import watchrateEle from "../components/watchrate.vue";
+
 import * as echarts from "echarts/core";
 import { LineChart, BarChart } from "echarts/charts";
 import {
@@ -57,32 +78,50 @@ export default {
   data() {
     return {
       tableData: [],
+      size: 10,
+      current: 1,
+      total: 1,
     };
   },
   mounted() {
-    epgResult({ programId: this.item.id }).then(programList => {
-      this.tableData = programList;
+    epgResult({
+      programId: this.item.id,
+      page: this.current,
+      pageSize: this.size,
+    }).then(programList => {
+      this.total = programList.total;
+      this.tableData = programList.data;
     });
   },
   computed: {},
   methods: {
+    changePage(newPage) {
+      this.current = newPage;
+      epgResult({
+        programId: this.item.id,
+        page: this.current,
+        pageSize: this.size,
+      }).then(programList => {
+        this.total = programList.total;
+        this.tableData = programList.data;
+      });
+    },
     rowClick(row) {
-      if (
-        openList[row.index] !== undefined ||
-        openLi[row.index] !== undefined
+     if (
+        openList[row.epg_id] !== undefined ||
+        openLi[row.epg_id] !== undefined
       ) {
-        if (openList[row.index]) {
-          openList[row.index].dispose();
-          openList[row.index] = undefined;
+        if (openList[row.epg_id]) {
+          openList[row.epg_id].dispose();
+          openList[row.epg_id] = undefined;
         }
-        if (openLi[row.index]) {
-          openLi[row.index].dispose();
-          openLi[row.index] = undefined;
+        if (openLi[row.epg_id]) {
+          openLi[row.epg_id].dispose();
+          openLi[row.epg_id] = undefined;
         }
-        return;
+        return
       }
       epgDetail({ epgId: row.epg_id }).then(res => {
-        console.log(res);
         let more = this.createChart(
           this.$refs["huashanChart" + row.index],
           res
@@ -108,11 +147,8 @@ export default {
           axisPointer: {
             type: "cross",
           },
-        },
-        toolbox: {
-          show: true,
-          feature: {
-            saveAsImage: {},
+          formatter: function(data) {
+            return data[0].value;
           },
         },
         grid: {
@@ -125,7 +161,7 @@ export default {
         xAxis: {
           type: "category",
           boundaryGap: false,
-          data: list.map(v=> v.metric)
+          data: list.map(v => v.metric),
         },
         yAxis: {
           type: "value",
@@ -169,7 +205,6 @@ export default {
         },
         series: [
           {
-            name: "Electricity",
             type: "line",
             smooth: true,
             data: list.map(v => v.watchrate),
@@ -213,6 +248,10 @@ export default {
           },
         ],
       };
+      if (this.item.programType === "simple") {
+        delete option.visualMap;
+        option.series[0].markArea = undefined;
+      }
       option && chart.setOption(option);
       return { chart, height };
     },
@@ -260,8 +299,13 @@ export default {
   },
 
   beforeUnmount: function() {},
-  components: {},
+  components: {
+    watchrateEle,
+  },
 };
 </script>
 
 <style></style>
+
+
+

+ 73 - 27
src/views/BoutiqueColumn/views/policeStory.vue

@@ -1,10 +1,16 @@
 <template>
-  <div class="policeStory">
-    <el-table :data="tableData" @expand-change="rowClick" style="width: 100%">
+  <div class="huashanlunjian">
+    <el-table
+      :data="tableData"
+      v-if="tableData.length"
+      :header-cell-style="{ backgroundColor: '#f4f5f7',color: '#606266' }"
+      @expand-change="rowClick"
+      style="width: 100%"
+    >
       <el-table-column type="expand">
         <template #default="props">
           <div>
-            <el-row>
+            <el-row v-if="item.programType !== 'simple'">
               <el-col :span="20">
                 <div :ref="'huashanChart' + props.row.index"></div>
               </el-col>
@@ -12,13 +18,26 @@
                 <div :ref="'huashanListChart' + props.row.index"></div>
               </el-col>
             </el-row>
+            <div v-else :ref="'huashanChart' + props.row.index"></div>
           </div>
         </template>
       </el-table-column>
-      <el-table-column label="日期" prop="stadate" />
-      <el-table-column label="标题" prop="program_name" />
-      <!-- <el-table-column label="主题" prop="tagging" /> -->
+      <el-table-column align="center" label="日期" prop="stadate" />
+      <el-table-column align="center" label="标题" prop="program_name" />
+      <el-table-column align="center" label="收视率" prop="watchrate">
+        <template #default="scope">
+          <watchrate-ele :watchrate="scope.row.watchrate" :zoom="item.maxRate"/>
+        </template>
+      </el-table-column>
     </el-table>
+    <el-pagination
+      :page-size="size"
+      v-if="total/size > 1"
+      v-model:current-page="current"
+      @current-change="changePage"
+      :total="total"
+    >
+    </el-pagination>
   </div>
 </template>
 
@@ -26,6 +45,8 @@
 // @ is an alias to /src
 import { epgDetail, epgResult } from "@/api/index";
 
+import watchrateEle from "../components/watchrate.vue";
+
 import * as echarts from "echarts/core";
 import { LineChart, BarChart } from "echarts/charts";
 import {
@@ -57,32 +78,50 @@ export default {
   data() {
     return {
       tableData: [],
+      size: 10,
+      current: 1,
+      total: 1,
     };
   },
   mounted() {
-    epgResult({ programId: this.item.id }).then(programList => {
-      this.tableData = programList;
+    epgResult({
+      programId: this.item.id,
+      page: this.current,
+      pageSize: this.size,
+    }).then(programList => {
+      this.total = programList.total;
+      this.tableData = programList.data;
     });
   },
   computed: {},
   methods: {
+    changePage(newPage) {
+      this.current = newPage;
+      epgResult({
+        programId: this.item.id,
+        page: this.current,
+        pageSize: this.size,
+      }).then(programList => {
+        this.total = programList.total;
+        this.tableData = programList.data;
+      });
+    },
     rowClick(row) {
-      if (
-        openList[row.index] !== undefined ||
-        openLi[row.index] !== undefined
+     if (
+        openList[row.epg_id] !== undefined ||
+        openLi[row.epg_id] !== undefined
       ) {
-        if (openList[row.index]) {
-          openList[row.index].dispose();
-          openList[row.index] = undefined;
+        if (openList[row.epg_id]) {
+          openList[row.epg_id].dispose();
+          openList[row.epg_id] = undefined;
         }
-        if (openLi[row.index]) {
-          openLi[row.index].dispose();
-          openLi[row.index] = undefined;
+        if (openLi[row.epg_id]) {
+          openLi[row.epg_id].dispose();
+          openLi[row.epg_id] = undefined;
         }
-        return;
+        return
       }
       epgDetail({ epgId: row.epg_id }).then(res => {
-        console.log(res);
         let more = this.createChart(
           this.$refs["huashanChart" + row.index],
           res
@@ -108,11 +147,8 @@ export default {
           axisPointer: {
             type: "cross",
           },
-        },
-        toolbox: {
-          show: true,
-          feature: {
-            saveAsImage: {},
+          formatter: function(data) {
+            return data[0].value;
           },
         },
         grid: {
@@ -125,7 +161,7 @@ export default {
         xAxis: {
           type: "category",
           boundaryGap: false,
-          data: list.map(v=> v.metric)
+          data: list.map(v => v.metric),
         },
         yAxis: {
           type: "value",
@@ -169,7 +205,6 @@ export default {
         },
         series: [
           {
-            name: "Electricity",
             type: "line",
             smooth: true,
             data: list.map(v => v.watchrate),
@@ -213,6 +248,10 @@ export default {
           },
         ],
       };
+      if (this.item.programType === "simple") {
+        delete option.visualMap;
+        option.series[0].markArea = undefined;
+      }
       option && chart.setOption(option);
       return { chart, height };
     },
@@ -260,8 +299,15 @@ export default {
   },
 
   beforeUnmount: function() {},
-  components: {},
+  components: {
+    watchrateEle,
+  },
 };
 </script>
 
 <style></style>
+
+
+
+
+

+ 69 - 25
src/views/BoutiqueColumn/views/shaanxiNewsSimulcast.vue

@@ -1,10 +1,16 @@
 <template>
-  <div class="shaanxiNewsSimulcast">
-    <el-table :data="tableData" @expand-change="rowClick" style="width: 100%">
+  <div class="huashanlunjian">
+    <el-table
+      :data="tableData"
+      v-if="tableData.length"
+      :header-cell-style="{ backgroundColor: '#f4f5f7', color: '#606266' }"
+      @expand-change="rowClick"
+      style="width: 100%"
+    >
       <el-table-column type="expand">
         <template #default="props">
           <div>
-            <el-row>
+            <el-row v-if="item.programType !== 'simple'">
               <el-col :span="20">
                 <div :ref="'huashanChart' + props.row.index"></div>
               </el-col>
@@ -12,13 +18,29 @@
                 <div :ref="'huashanListChart' + props.row.index"></div>
               </el-col>
             </el-row>
+            <div v-else :ref="'huashanChart' + props.row.index"></div>
           </div>
         </template>
       </el-table-column>
-      <el-table-column label="日期" prop="stadate" />
-      <el-table-column label="标题" prop="program_name" />
-      <!-- <el-table-column label="主题" prop="tagging" /> -->
+      <el-table-column align="center" label="日期" prop="stadate" />
+      <el-table-column align="center" label="标题" prop="program_name" />
+      <el-table-column align="center" label="收视率" prop="watchrate">
+        <template #default="scope">
+          <watchrate-ele
+            :watchrate="scope.row.watchrate"
+            :zoom="item.maxRate"
+          />
+        </template>
+      </el-table-column>
     </el-table>
+    <el-pagination
+      v-if="total/size > 1"
+      :page-size="size"
+      v-model:current-page="current"
+      @current-change="changePage"
+      :total="total"
+    >
+    </el-pagination>
   </div>
 </template>
 
@@ -26,6 +48,8 @@
 // @ is an alias to /src
 import { epgDetail, epgResult } from "@/api/index";
 
+import watchrateEle from "../components/watchrate.vue";
+
 import * as echarts from "echarts/core";
 import { LineChart, BarChart } from "echarts/charts";
 import {
@@ -57,32 +81,50 @@ export default {
   data() {
     return {
       tableData: [],
+      size: 10,
+      current: 1,
+      total: 1,
     };
   },
   mounted() {
-    epgResult({ programId: this.item.id }).then(programList => {
-      this.tableData = programList;
+    epgResult({
+      programId: this.item.id,
+      page: this.current,
+      pageSize: this.size,
+    }).then(programList => {
+      this.total = programList.total;
+      this.tableData = programList.data;
     });
   },
   computed: {},
   methods: {
+    changePage(newPage) {
+      this.current = newPage;
+      epgResult({
+        programId: this.item.id,
+        page: this.current,
+        pageSize: this.size,
+      }).then(programList => {
+        this.total = programList.total;
+        this.tableData = programList.data;
+      });
+    },
     rowClick(row) {
       if (
-        openList[row.index] !== undefined ||
-        openLi[row.index] !== undefined
+        openList[row.epg_id] !== undefined ||
+        openLi[row.epg_id] !== undefined
       ) {
-        if (openList[row.index]) {
-          openList[row.index].dispose();
-          openList[row.index] = undefined;
+        if (openList[row.epg_id]) {
+          openList[row.epg_id].dispose();
+          openList[row.epg_id] = undefined;
         }
-        if (openLi[row.index]) {
-          openLi[row.index].dispose();
-          openLi[row.index] = undefined;
+        if (openLi[row.epg_id]) {
+          openLi[row.epg_id].dispose();
+          openLi[row.epg_id] = undefined;
         }
         return;
       }
       epgDetail({ epgId: row.epg_id }).then(res => {
-        console.log(res);
         let more = this.createChart(
           this.$refs["huashanChart" + row.index],
           res
@@ -108,11 +150,8 @@ export default {
           axisPointer: {
             type: "cross",
           },
-        },
-        toolbox: {
-          show: true,
-          feature: {
-            saveAsImage: {},
+          formatter: function(data) {
+            return data[0].value;
           },
         },
         grid: {
@@ -125,7 +164,7 @@ export default {
         xAxis: {
           type: "category",
           boundaryGap: false,
-          data: list.map(v=> v.metric)
+          data: list.map(v => v.metric),
         },
         yAxis: {
           type: "value",
@@ -169,7 +208,6 @@ export default {
         },
         series: [
           {
-            name: "Electricity",
             type: "line",
             smooth: true,
             data: list.map(v => v.watchrate),
@@ -213,6 +251,10 @@ export default {
           },
         ],
       };
+      if (this.item.programType === "simple") {
+        delete option.visualMap;
+        option.series[0].markArea = undefined;
+      }
       option && chart.setOption(option);
       return { chart, height };
     },
@@ -260,7 +302,9 @@ export default {
   },
 
   beforeUnmount: function() {},
-  components: {},
+  components: {
+    watchrateEle,
+  },
 };
 </script>
 

+ 69 - 25
src/views/BoutiqueColumn/views/urbanExpressNews.vue

@@ -1,10 +1,16 @@
 <template>
-  <div class="urbanExpressNews">
-    <el-table :data="tableData" @expand-change="rowClick" style="width: 100%">
+  <div class="huashanlunjian">
+    <el-table
+      :data="tableData"
+      v-if="tableData.length"
+      :header-cell-style="{ backgroundColor: '#f4f5f7', color: '#606266' }"
+      @expand-change="rowClick"
+      style="width: 100%"
+    >
       <el-table-column type="expand">
         <template #default="props">
           <div>
-            <el-row>
+            <el-row v-if="item.programType !== 'simple'">
               <el-col :span="20">
                 <div :ref="'huashanChart' + props.row.index"></div>
               </el-col>
@@ -12,13 +18,29 @@
                 <div :ref="'huashanListChart' + props.row.index"></div>
               </el-col>
             </el-row>
+            <div v-else :ref="'huashanChart' + props.row.index"></div>
           </div>
         </template>
       </el-table-column>
-      <el-table-column label="日期" prop="stadate" />
-      <el-table-column label="标题" prop="program_name" />
-      <!-- <el-table-column label="主题" prop="tagging" /> -->
+      <el-table-column align="center" label="日期" prop="stadate" />
+      <el-table-column align="center" label="标题" prop="program_name" />
+      <el-table-column align="center" label="收视率" prop="watchrate">
+        <template #default="scope">
+          <watchrate-ele
+            :watchrate="scope.row.watchrate"
+            :zoom="item.maxRate"
+          />
+        </template>
+      </el-table-column>
     </el-table>
+    <el-pagination
+      :page-size="size"
+      v-if="total/size > 1"
+      v-model:current-page="current"
+      @current-change="changePage"
+      :total="total"
+    >
+    </el-pagination>
   </div>
 </template>
 
@@ -26,6 +48,8 @@
 // @ is an alias to /src
 import { epgDetail, epgResult } from "@/api/index";
 
+import watchrateEle from "../components/watchrate.vue";
+
 import * as echarts from "echarts/core";
 import { LineChart, BarChart } from "echarts/charts";
 import {
@@ -57,32 +81,50 @@ export default {
   data() {
     return {
       tableData: [],
+      size: 10,
+      current: 1,
+      total: 1,
     };
   },
   mounted() {
-    epgResult({ programId: this.item.id }).then(programList => {
-      this.tableData = programList;
+    epgResult({
+      programId: this.item.id,
+      page: this.current,
+      pageSize: this.size,
+    }).then(programList => {
+      this.total = programList.total;
+      this.tableData = programList.data;
     });
   },
   computed: {},
   methods: {
+    changePage(newPage) {
+      this.current = newPage;
+      epgResult({
+        programId: this.item.id,
+        page: this.current,
+        pageSize: this.size,
+      }).then(programList => {
+        this.total = programList.total;
+        this.tableData = programList.data;
+      });
+    },
     rowClick(row) {
       if (
-        openList[row.index] !== undefined ||
-        openLi[row.index] !== undefined
+        openList[row.epg_id] !== undefined ||
+        openLi[row.epg_id] !== undefined
       ) {
-        if (openList[row.index]) {
-          openList[row.index].dispose();
-          openList[row.index] = undefined;
+        if (openList[row.epg_id]) {
+          openList[row.epg_id].dispose();
+          openList[row.epg_id] = undefined;
         }
-        if (openLi[row.index]) {
-          openLi[row.index].dispose();
-          openLi[row.index] = undefined;
+        if (openLi[row.epg_id]) {
+          openLi[row.epg_id].dispose();
+          openLi[row.epg_id] = undefined;
         }
         return;
       }
       epgDetail({ epgId: row.epg_id }).then(res => {
-        console.log(res);
         let more = this.createChart(
           this.$refs["huashanChart" + row.index],
           res
@@ -108,11 +150,8 @@ export default {
           axisPointer: {
             type: "cross",
           },
-        },
-        toolbox: {
-          show: true,
-          feature: {
-            saveAsImage: {},
+          formatter: function(data) {
+            return data[0].value;
           },
         },
         grid: {
@@ -125,7 +164,7 @@ export default {
         xAxis: {
           type: "category",
           boundaryGap: false,
-          data: list.map(v=> v.metric)
+          data: list.map(v => v.metric),
         },
         yAxis: {
           type: "value",
@@ -169,7 +208,6 @@ export default {
         },
         series: [
           {
-            name: "Electricity",
             type: "line",
             smooth: true,
             data: list.map(v => v.watchrate),
@@ -213,6 +251,10 @@ export default {
           },
         ],
       };
+      if (this.item.programType === "simple") {
+        delete option.visualMap;
+        option.series[0].markArea = undefined;
+      }
       option && chart.setOption(option);
       return { chart, height };
     },
@@ -260,7 +302,9 @@ export default {
   },
 
   beforeUnmount: function() {},
-  components: {},
+  components: {
+    watchrateEle,
+  },
 };
 </script>
 

+ 12 - 0
vue.config.js

@@ -1,10 +1,22 @@
 const Components = require("unplugin-vue-components/webpack");
 const { ElementPlusResolver } = require("unplugin-vue-components/resolvers");
 
+const CompressionPlugin = require('compression-webpack-plugin');
 
 module.exports = {
   productionSourceMap: false,
   publicPath: "./",
+  chainWebpack: config => {
+    if (process.env.NODE_ENV === "production") {
+      config.plugin("compressionPlugin").use(
+        new CompressionPlugin({
+          test: /\.js$|\.css|\.less/, // 匹配文件名
+          threshold: 1024000, // 对超过10k的数据压缩
+          deleteOriginalAssets: false, // 不删除源文件
+        })
+      );
+    }
+  },
   configureWebpack: {
     plugins: [
       Components({

+ 163 - 3
yarn.lock

@@ -915,6 +915,11 @@
   resolved "https://registry.nlark.com/@element-plus/icons/download/@element-plus/icons-0.0.11.tgz#9b187c002774548b911850d17fa5fc2f9a515f57"
   integrity sha1-mxh8ACd0VIuRGFDRf6X8L5pRX1c=
 
+"@gar/promisify@^1.0.1":
+  version "1.1.2"
+  resolved "https://registry.nlark.com/@gar/promisify/download/@gar/promisify-1.1.2.tgz#30aa825f11d438671d585bd44e7fd564535fc210"
+  integrity sha1-MKqCXxHUOGcdWFvUTn/VZFNfwhA=
+
 "@hapi/address@2.x.x":
   version "2.1.4"
   resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5"
@@ -990,6 +995,22 @@
     "@nodelib/fs.scandir" "2.1.5"
     fastq "^1.6.0"
 
+"@npmcli/fs@^1.0.0":
+  version "1.0.0"
+  resolved "https://registry.nlark.com/@npmcli/fs/download/@npmcli/fs-1.0.0.tgz#589612cfad3a6ea0feafcb901d29c63fd52db09f"
+  integrity sha1-WJYSz606bqD+r8uQHSnGP9UtsJ8=
+  dependencies:
+    "@gar/promisify" "^1.0.1"
+    semver "^7.3.5"
+
+"@npmcli/move-file@^1.0.1":
+  version "1.1.2"
+  resolved "https://registry.nlark.com/@npmcli/move-file/download/@npmcli/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674"
+  integrity sha1-GoLD43L3yuklPrZtclQ9a4aFxnQ=
+  dependencies:
+    mkdirp "^1.0.4"
+    rimraf "^3.0.2"
+
 "@popperjs/core@^2.4.4":
   version "2.10.1"
   resolved "https://registry.nlark.com/@popperjs/core/download/@popperjs/core-2.10.1.tgz?cache=0&sync_timestamp=1630646793367&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40popperjs%2Fcore%2Fdownload%2F%40popperjs%2Fcore-2.10.1.tgz#728ecd95ab207aab8a9a4e421f0422db329232be"
@@ -1736,6 +1757,14 @@ address@^1.1.2:
   resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6"
   integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==
 
+aggregate-error@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.nlark.com/aggregate-error/download/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
+  integrity sha1-kmcP9Q9TWb23o+DUDQ7DDFc3aHo=
+  dependencies:
+    clean-stack "^2.0.0"
+    indent-string "^4.0.0"
+
 ajv-errors@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d"
@@ -2333,6 +2362,30 @@ cacache@^12.0.2, cacache@^12.0.3:
     unique-filename "^1.1.1"
     y18n "^4.0.0"
 
+cacache@^15.0.5:
+  version "15.3.0"
+  resolved "https://registry.nlark.com/cacache/download/cacache-15.3.0.tgz?cache=0&sync_timestamp=1630000121314&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcacache%2Fdownload%2Fcacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb"
+  integrity sha1-3IU4D7L1Vv492kxxm/oOyHWn8es=
+  dependencies:
+    "@npmcli/fs" "^1.0.0"
+    "@npmcli/move-file" "^1.0.1"
+    chownr "^2.0.0"
+    fs-minipass "^2.0.0"
+    glob "^7.1.4"
+    infer-owner "^1.0.4"
+    lru-cache "^6.0.0"
+    minipass "^3.1.1"
+    minipass-collect "^1.0.2"
+    minipass-flush "^1.0.5"
+    minipass-pipeline "^1.2.2"
+    mkdirp "^1.0.3"
+    p-map "^4.0.0"
+    promise-inflight "^1.0.1"
+    rimraf "^3.0.2"
+    ssri "^8.0.1"
+    tar "^6.0.2"
+    unique-filename "^1.1.1"
+
 cache-base@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
@@ -2508,6 +2561,11 @@ chownr@^1.1.1:
   resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
   integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
 
+chownr@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.nlark.com/chownr/download/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
+  integrity sha1-Fb++U9LqtM9w8YqM1o6+Wzyx3s4=
+
 chrome-trace-event@^1.0.2:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac"
@@ -2543,6 +2601,11 @@ clean-css@4.2.x:
   dependencies:
     source-map "~0.6.0"
 
+clean-stack@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.nlark.com/clean-stack/download/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
+  integrity sha1-7oRy27Ep5yezHooQpCfe6d/kAIs=
+
 cli-cursor@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
@@ -2716,6 +2779,17 @@ compressible@~2.0.16:
   dependencies:
     mime-db ">= 1.43.0 < 2"
 
+compression-webpack-plugin@5.0.1:
+  version "5.0.1"
+  resolved "https://registry.nlark.com/compression-webpack-plugin/download/compression-webpack-plugin-5.0.1.tgz#316c1a4e4ccc94510a978c967fc143581d1e3643"
+  integrity sha1-MWwaTkzMlFEKl4yWf8FDWB0eNkM=
+  dependencies:
+    cacache "^15.0.5"
+    find-cache-dir "^3.3.1"
+    schema-utils "^2.7.0"
+    serialize-javascript "^4.0.0"
+    webpack-sources "^1.4.3"
+
 compression@^1.7.4:
   version "1.7.4"
   resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f"
@@ -4167,6 +4241,13 @@ fs-extra@^7.0.1:
     jsonfile "^4.0.0"
     universalify "^0.1.0"
 
+fs-minipass@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.nlark.com/fs-minipass/download/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
+  integrity sha1-f1A2/b8SxjwWkZDL5BmchSJx+fs=
+  dependencies:
+    minipass "^3.0.0"
+
 fs-write-stream-atomic@^1.0.8:
   version "1.0.10"
   resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9"
@@ -4745,12 +4826,17 @@ imurmurhash@^0.1.4:
   resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
   integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
 
+indent-string@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.nlark.com/indent-string/download/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
+  integrity sha1-Yk+PRJfWGbLZdoUx1Y9BIoVNclE=
+
 indexes-of@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
   integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc=
 
-infer-owner@^1.0.3:
+infer-owner@^1.0.3, infer-owner@^1.0.4:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467"
   integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==
@@ -5478,6 +5564,13 @@ lru-cache@^5.1.1:
   dependencies:
     yallist "^3.0.2"
 
+lru-cache@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.nlark.com/lru-cache/download/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
+  integrity sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ=
+  dependencies:
+    yallist "^4.0.0"
+
 magic-string@^0.25.7:
   version "0.25.7"
   resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051"
@@ -5683,13 +5776,42 @@ minimist@^1.2.0, minimist@^1.2.5:
   resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
   integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
 
-minipass@^3.1.1:
+minipass-collect@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.nlark.com/minipass-collect/download/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617"
+  integrity sha1-IrgTv3Rdxu26JXa5QAIq1u3Ixhc=
+  dependencies:
+    minipass "^3.0.0"
+
+minipass-flush@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.nlark.com/minipass-flush/download/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373"
+  integrity sha1-gucTXX6JpQ/+ZGEKeHlTxMTLs3M=
+  dependencies:
+    minipass "^3.0.0"
+
+minipass-pipeline@^1.2.2:
+  version "1.2.4"
+  resolved "https://registry.nlark.com/minipass-pipeline/download/minipass-pipeline-1.2.4.tgz?cache=0&sync_timestamp=1624607876910&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fminipass-pipeline%2Fdownload%2Fminipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c"
+  integrity sha1-aEcveXEcCEZXwGfFxq2Tzd6oIUw=
+  dependencies:
+    minipass "^3.0.0"
+
+minipass@^3.0.0, minipass@^3.1.1:
   version "3.1.5"
   resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.5.tgz#71f6251b0a33a49c01b3cf97ff77eda030dff732"
   integrity sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==
   dependencies:
     yallist "^4.0.0"
 
+minizlib@^2.1.1:
+  version "2.1.2"
+  resolved "https://registry.nlark.com/minizlib/download/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931"
+  integrity sha1-6Q00Zrogm5MkUVCKEc49NjIUWTE=
+  dependencies:
+    minipass "^3.0.0"
+    yallist "^4.0.0"
+
 mississippi@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022"
@@ -5726,6 +5848,11 @@ mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1:
   dependencies:
     minimist "^1.2.5"
 
+mkdirp@^1.0.3, mkdirp@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.npmmirror.com/mkdirp/download/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
+  integrity sha1-PrXtYmInVteaXw4qIh3+utdcL34=
+
 move-concurrently@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
@@ -6200,6 +6327,13 @@ p-map@^2.0.0:
   resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175"
   integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==
 
+p-map@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmmirror.com/p-map/download/p-map-4.0.0.tgz?cache=0&sync_timestamp=1635931916150&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fp-map%2Fdownload%2Fp-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b"
+  integrity sha1-uy+Vpe2i7BaOySdOBqdHw+KQTSs=
+  dependencies:
+    aggregate-error "^3.0.0"
+
 p-retry@^3.0.1:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328"
@@ -7261,6 +7395,13 @@ rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3:
   dependencies:
     glob "^7.1.3"
 
+rimraf@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.nlark.com/rimraf/download/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
+  integrity sha1-8aVAK6YiCtUswSgrrBrjqkn9Bho=
+  dependencies:
+    glob "^7.1.3"
+
 ripemd160@^2.0.0, ripemd160@^2.0.1:
   version "2.0.2"
   resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
@@ -7367,6 +7508,13 @@ semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0:
   resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
   integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
 
+semver@^7.3.5:
+  version "7.3.5"
+  resolved "https://registry.nlark.com/semver/download/semver-7.3.5.tgz?cache=0&sync_timestamp=1624607961409&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsemver%2Fdownload%2Fsemver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
+  integrity sha1-C2Ich5NI2JmOSw5L6Us/EuYBjvc=
+  dependencies:
+    lru-cache "^6.0.0"
+
 send@0.17.1:
   version "0.17.1"
   resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8"
@@ -7958,6 +8106,18 @@ tapable@^1.0.0, tapable@^1.1.3:
   resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
   integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
 
+tar@^6.0.2:
+  version "6.1.11"
+  resolved "https://registry.nlark.com/tar/download/tar-6.1.11.tgz?cache=0&sync_timestamp=1629994977916&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftar%2Fdownload%2Ftar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621"
+  integrity sha1-Z2CjjwA6+hsv/Q/+npq70Oqz1iE=
+  dependencies:
+    chownr "^2.0.0"
+    fs-minipass "^2.0.0"
+    minipass "^3.0.0"
+    minizlib "^2.1.1"
+    mkdirp "^1.0.3"
+    yallist "^4.0.0"
+
 terser-webpack-plugin@^1.4.3, terser-webpack-plugin@^1.4.4:
   version "1.4.5"
   resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b"
@@ -8644,7 +8804,7 @@ webpack-merge@^4.2.2:
   dependencies:
     lodash "^4.17.15"
 
-webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1:
+webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3:
   version "1.4.3"
   resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933"
   integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==