liyongli 2 éve
szülő
commit
7e045120e7

+ 3 - 3
package.json

@@ -3,8 +3,8 @@
   "version": "0.1.0",
   "private": true,
   "scripts": {
-    "serve": "vue-cli-service serve",
-    "build": "vue-cli-service build",
+    "serve": "set NODE_OPTIONS=--openssl-legacy-provider & vue-cli-service serve",
+    "build": "set NODE_OPTIONS=--openssl-legacy-provider & vue-cli-service build",
     "lint": "vue-cli-service lint",
     "dll": "webpack --progress --config ./webpack.dll.js"
   },
@@ -17,11 +17,11 @@
     "echarts-wordcloud": "^2.0.0",
     "element-plus": "^1.0.2-beta.36",
     "js-sha256": "^0.9.0",
-    "typescript": "^4.3.5",
     "vue": "^3.0.0",
     "vue-router": "^4.0.0-0"
   },
   "devDependencies": {
+    "typescript": "^4.3.5",
     "@vue/cli-plugin-babel": "~4.5.0",
     "@vue/cli-plugin-eslint": "~4.5.0",
     "@vue/cli-plugin-router": "~4.5.0",

+ 940 - 0
src/api/dist/index.dev.js

@@ -0,0 +1,940 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.advertisementApi = advertisementApi;
+exports.inOutApi = inOutApi;
+exports.epgApi = epgApi;
+exports.liveRealDataMinApi = liveRealDataMinApi;
+exports.liveRealDataApi = liveRealDataApi;
+exports.liveDataApi = liveDataApi;
+exports.heightlightDataApi = heightlightDataApi;
+exports.heightlightApi = heightlightApi;
+exports.list = list;
+exports.listcsv = listcsv;
+exports.channel = channel;
+exports.channelcsv = channelcsv;
+exports.epgList = epgList;
+exports.epgDetail = epgDetail;
+exports.epgResult = epgResult;
+exports.defaultAjax = defaultAjax;
+exports.frequencyList = frequencyList;
+exports.PLList = PLList;
+exports.allDayEpg = allDayEpg;
+exports.overlapSearchTitle = overlapSearchTitle;
+exports.overlap = overlap;
+exports.adChannelList = adChannelList;
+exports.launchList = launchList;
+exports.trendList = trendList;
+exports.proportionList = proportionList;
+exports.customerList = customerList;
+exports.advantageousList = advantageousList;
+exports.potentialList = potentialList;
+exports.saturationList = saturationList;
+exports.allindustryList = allindustryList;
+exports.industryList = industryList;
+exports.byIndustryTrendHard = byIndustryTrendHard;
+exports.byIndustryTrendSoft = byIndustryTrendSoft;
+exports.smallIndustryProportion = smallIndustryProportion;
+exports.MediaShare = MediaShare;
+exports.ChannelDistribution = ChannelDistribution;
+exports.ProgramTypeDistribution = ProgramTypeDistribution;
+exports.ProgramTypeDistributionChart = ProgramTypeDistributionChart;
+exports.ImportantCustomer = ImportantCustomer;
+exports.LastWeekTrend = LastWeekTrend;
+exports.BrandTop = BrandTop;
+exports.ChannelTop = ChannelTop;
+exports.channelRank = channelRank;
+exports.platform = platform;
+exports.platformlistData = platformlistData;
+exports.platformList = platformList;
+exports.guijiLogin = guijiLogin;
+exports.guijiActivity = guijiActivity;
+exports.guijiTopic = guijiTopic;
+exports.guijiSpread = guijiSpread;
+exports.guijiTrend = guijiTrend;
+exports.guijiDepartment = guijiDepartment;
+exports.guijiHottopic = guijiHottopic;
+exports.guijiBumenList = guijiBumenList;
+exports.guijiFagao = guijiFagao;
+exports.leverAudience = leverAudience;
+exports.audioGet = audioGet;
+exports.audioList = audioList;
+
+var _request = _interopRequireDefault(require("@/utils/request.js"));
+
+var _request_axios = _interopRequireDefault(require("@/utils/request_axios.js"));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+/**
+ * 广告
+ * @returns {AxjxPromise}
+ */
+function advertisementApi(data) {
+  return (0, _request["default"])({
+    url: "/kuyun_eye_ad/cbd_public/perform",
+    method: "get",
+    data: data
+  });
+}
+/**
+ * 流入流出
+ * @returns {AxjxPromise}
+ */
+
+
+function inOutApi(data) {
+  return (0, _request["default"])({
+    url: "/api/recent_inout",
+    method: "get",
+    data: data
+  });
+}
+/**
+ * epg
+ * @returns {AxjxPromise}
+ */
+
+
+function epgApi(data) {
+  return (0, _request["default"])({
+    url: "/api/recent_epgs",
+    method: "get",
+    data: data
+  });
+}
+/**
+ * 直播实时 分
+ * @returns {AxjxPromise}
+ */
+
+
+function liveRealDataMinApi(data) {
+  return (0, _request["default"])({
+    url: "/api/sec_ratings",
+    method: "get",
+    data: data
+  });
+}
+/**
+ * 直播实时数据
+ * @returns {AxjxPromise}
+ */
+
+
+function liveRealDataApi(data) {
+  return (0, _request["default"])({
+    url: "/api/min_ratings",
+    method: "get",
+    data: data
+  });
+}
+/**
+ * 直播实时数据
+ * @returns {AxjxPromise}
+ */
+
+
+function liveDataApi(data) {
+  return (0, _request["default"])({
+    url: "/api/tvlb",
+    method: "get",
+    data: data
+  });
+}
+/**
+ * 高光数据
+ * @returns {AxjxPromise}
+ */
+
+
+function heightlightDataApi(data) {
+  return (0, _request["default"])({
+    url: "/api/hl/calendar",
+    method: "get",
+    data: data
+  });
+}
+/**
+ * 高光时刻
+ * @returns {AxjxPromise}
+ */
+
+
+function heightlightApi(data) {
+  return (0, _request["default"])({
+    url: "/api/hl/list-milestone",
+    method: "get",
+    data: data
+  });
+}
+/**
+ * 节目
+ * @returns {AxjxPromise}
+ */
+
+
+function list(data) {
+  return (0, _request["default"])({
+    url: "/api/proepglb",
+    method: "get",
+    data: data
+  });
+}
+/**
+ * 节目导出
+ * @returns {AxjxPromise}
+ */
+
+
+function listcsv(data) {
+  return (0, _request["default"])({
+    url: "/api/proepglb/csv",
+    method: "get",
+    downCsv: true,
+    data: data
+  });
+}
+/**
+ * 频道
+ * @returns {AxjxPromise}
+ */
+
+
+function channel(data) {
+  return (0, _request["default"])({
+    url: "/api/protvlb",
+    method: "get",
+    data: data
+  });
+}
+/**
+ * 频道导出
+ * @returns {AxjxPromise}
+ */
+
+
+function channelcsv(data) {
+  return (0, _request["default"])({
+    url: "/api/protvlb/csv",
+    method: "get",
+    downCsv: true,
+    data: data
+  });
+}
+/**
+ * 获取精品节目列表
+ * @props {}
+ * @returns {AxjxPromise}
+ */
+
+
+function epgList() {
+  return (0, _request["default"])({
+    urlType: "url2",
+    url: "/program",
+    method: "get"
+  });
+}
+/**
+ * 获取精品节目详情
+ * @props {}
+ * @returns {AxjxPromise}
+ */
+
+
+function epgDetail(data) {
+  return (0, _request["default"])({
+    urlType: "url2",
+    url: "/epg-detail",
+    method: "get",
+    target: data.target,
+    data: {
+      epgId: data.epgId
+    }
+  });
+}
+/**
+ * 获取精品节目指标
+ * @props {}
+ * @returns {AxjxPromise}
+ */
+
+
+function epgResult(data) {
+  return (0, _request["default"])({
+    urlType: "url2",
+    url: "/epg-result",
+    method: "get",
+    data: data
+  });
+}
+/**
+ * 自由接口
+ * @props {url, data}
+ * @return {AxjxPromise}
+ */
+
+
+function defaultAjax(props) {
+  return (0, _request["default"])({
+    urlType: "url3",
+    url: props.url,
+    method: "get",
+    notLoad: props.notLoad,
+    target: props.target,
+    data: props.data
+  });
+}
+/**
+ * 频率列表
+ * @props {}
+ * @return {AxjxPromise}
+ */
+
+
+function frequencyList() {
+  return (0, _request["default"])({
+    urlType: "url2",
+    url: "/broadcast/dict",
+    method: "get"
+  });
+}
+/**
+ * 频率查询
+ * @props {}
+ * @return {AxjxPromise}
+ */
+
+
+function PLList(data) {
+  return (0, _request["default"])({
+    urlType: "url2",
+    url: "/broadcast/list",
+    method: "get",
+    data: data
+  });
+} // 全国接口
+
+/**
+ * 频道全天节目
+ * 表格查询
+ * @props {}
+ * @return {AxjxPromise}
+ */
+
+
+function allDayEpg(data) {
+  return (0, _request["default"])({
+    urlType: "kuyunApi",
+    url: "/broadcast/list",
+    method: "get",
+    data: data
+  });
+} // 重叠度
+
+/**
+ * 节目查询
+ * 图表查询
+ * @props {}
+ * @return {AxjxPromise}
+ */
+
+
+function overlapSearchTitle(data) {
+  return (0, _request["default"])({
+    urlType: "kuyunApi",
+    url: "/api/evaluation/eye/search_suggest?" + data,
+    method: "GET"
+  });
+}
+/**
+ * 节目重叠度
+ * 图表查询
+ * @props {}
+ * @return {AxjxPromise}
+ */
+
+
+function overlap(data) {
+  return (0, _request["default"])({
+    urlType: "kuyunApi",
+    url: "/ProUserOverlapAction",
+    method: "GET",
+    data: data
+  });
+}
+/**
+ * 广告频道列表
+ * @props {}
+ * @return {AxjxPromise}
+ */
+
+
+function adChannelList() {
+  return (0, _request["default"])({
+    urlType: "adAPI",
+    url: "/ad/channel",
+    method: "GET"
+  });
+}
+/**
+ * 投放分析
+ * @props {string} channelId
+ * @props {string} start
+ * @props {string} end
+ * @return {AxjxPromise}
+ */
+
+
+function launchList(data) {
+  return (0, _request["default"])({
+    urlType: "adAPI",
+    url: "/ad/day",
+    method: "POST",
+    data: data
+  });
+}
+/**
+ * 时段分析
+ * @props {string} channelId
+ * @props {string} start
+ * @props {string} end
+ * @return {AxjxPromise}
+ */
+
+
+function trendList(data) {
+  return (0, _request["default"])({
+    urlType: "adAPI",
+    url: "/ad/hour",
+    method: "POST",
+    data: data
+  });
+}
+/**
+ * 行业占比
+ * @props {string} channelId
+ * @props {string} start
+ * @props {string} end
+ * @return {AxjxPromise}
+ */
+
+
+function proportionList(data) {
+  return (0, _request["default"])({
+    urlType: "adAPI",
+    url: "/ad/ratio",
+    method: "POST",
+    data: data
+  });
+}
+/**
+ * 客户投放详情
+ * @props {string} channelId
+ * @props {string} start
+ * @props {string} end
+ * @return {AxjxPromise}
+ */
+
+
+function customerList(data) {
+  return (0, _request["default"])({
+    urlType: "adAPI",
+    url: "/ad/detail",
+    method: "POST",
+    data: data
+  });
+}
+/**
+ * 优势客户
+ * @props {string} channelId
+ * @props {string} start
+ * @props {string} end
+ * @return {AxjxPromise}
+ */
+
+
+function advantageousList(data) {
+  return (0, _request["default"])({
+    urlType: "adAPI",
+    url: "/ad/youshi",
+    method: "POST",
+    data: data
+  });
+}
+/**
+ * 潜在客户
+ * @props {string} channelId
+ * @props {string} start
+ * @props {string} end
+ * @return {AxjxPromise}
+ */
+
+
+function potentialList(data) {
+  return (0, _request["default"])({
+    urlType: "adAPI",
+    url: "/ad/qianzai",
+    method: "POST",
+    data: data
+  });
+}
+/**
+ * 饱和度
+ * @props {string} channelId
+ * @props {string} start
+ * @props {string} end
+ * @return {AxjxPromise}
+ */
+
+
+function saturationList(data) {
+  return (0, _request["default"])({
+    urlType: "adAPI",
+    url: "/ad/saturation",
+    method: "POST",
+    data: data
+  });
+}
+/**
+ * 行业列表
+ * @return {AxjxPromise}
+ */
+
+
+function allindustryList(data) {
+  return (0, _request["default"])({
+    urlType: "adAPI",
+    url: "/ad/industry/list",
+    method: "GET",
+    data: data
+  });
+}
+/**
+ * 全行业
+ * @props {string} tableType
+ * @props {string} indexTime
+ * @props {string} dataType
+ * @return {AxjxPromise}
+ */
+
+
+function industryList(data) {
+  return (0, _request["default"])({
+    urlType: "adAPI",
+    url: "/ad/market",
+    method: "POST",
+    data: data
+  });
+}
+/***************************************分行业 */
+
+/**
+ * 分行业硬广
+ * @props {string} tableType
+ * @props {string} indexTime
+ * @props {string} dataType
+ * @return {AxjxPromise}
+ */
+
+
+function byIndustryTrendHard(data) {
+  return (0, _request["default"])({
+    urlType: "adAPI",
+    url: "/ad/industry/TrendHard",
+    method: "POST",
+    data: data
+  });
+}
+/**
+ * 分行业软广
+ * @props {string} tableType
+ * @props {string} indexTime
+ * @props {string} dataType
+ * @return {AxjxPromise}
+ */
+
+
+function byIndustryTrendSoft(data) {
+  return (0, _request["default"])({
+    urlType: "adAPI",
+    url: "/ad/industry/TrendSoft",
+    method: "POST",
+    data: data
+  });
+}
+/**
+ * 中小行业占比
+ * @props {string} tableType
+ * @props {string} indexTime
+ * @props {string} dataType
+ * @return {AxjxPromise}
+ */
+
+
+function smallIndustryProportion(data) {
+  return (0, _request["default"])({
+    urlType: "adAPI",
+    url: "/ad/industry/MSIndustryProportion",
+    method: "POST",
+    data: data
+  });
+}
+/**
+ * 媒体份额
+ * @props {string} tableType
+ * @props {string} indexTime
+ * @props {string} dataType
+ * @return {AxjxPromise}
+ */
+
+
+function MediaShare(data) {
+  return (0, _request["default"])({
+    urlType: "adAPI",
+    url: "/ad/industry/MediaShare",
+    method: "POST",
+    data: data
+  });
+}
+/**
+ * 频道份额
+ * @props {string} tableType
+ * @props {string} indexTime
+ * @props {string} dataType
+ * @return {AxjxPromise}
+ */
+
+
+function ChannelDistribution(data) {
+  return (0, _request["default"])({
+    urlType: "adAPI",
+    url: "/ad/industry/ChannelDistribution",
+    method: "POST",
+    data: data
+  });
+}
+/**
+ * 节目类型
+ * @props {string} tableType
+ * @props {string} indexTime
+ * @props {string} dataType
+ * @return {AxjxPromise}
+ */
+
+
+function ProgramTypeDistribution(data) {
+  return (0, _request["default"])({
+    urlType: "adAPI",
+    url: "/ad/industry/ProgramTypeDistribution",
+    method: "POST",
+    data: data
+  });
+}
+/**
+ * 节目类型
+ * @props {string} tableType
+ * @props {string} indexTime
+ * @props {string} dataType
+ * @return {AxjxPromise}
+ */
+
+
+function ProgramTypeDistributionChart(data) {
+  return (0, _request["default"])({
+    urlType: "adAPI",
+    url: "/ad/industry/ProgramTypeDistributionTable",
+    method: "POST",
+    data: data
+  });
+}
+/**
+ * 重点客户
+ * @props {string} tableType
+ * @props {string} indexTime
+ * @props {string} dataType
+ * @return {AxjxPromise}
+ */
+
+
+function ImportantCustomer(data) {
+  return (0, _request["default"])({
+    urlType: "adAPI",
+    url: "/ad/industry/ImportantCustomer",
+    method: "POST",
+    data: data
+  });
+}
+/**
+ * 周走势
+ * @props {string} tableType
+ * @props {string} indexTime
+ * @props {string} dataType
+ * @return {AxjxPromise}
+ */
+
+
+function LastWeekTrend(data) {
+  return (0, _request["default"])({
+    urlType: "adAPI",
+    url: "/ad/industry/LastWeekTrend",
+    method: "POST",
+    data: data
+  });
+}
+/**
+ * 品牌top
+ * @props {string} dataType
+ * @return {AxjxPromise}
+ */
+
+
+function BrandTop(data) {
+  return (0, _request["default"])({
+    urlType: "adAPI",
+    url: "/ad/index/brand",
+    method: "POST",
+    data: data
+  });
+}
+/**
+ * 品牌top
+ * @props {string} dataType
+ * @return {AxjxPromise}
+ */
+
+
+function ChannelTop(data) {
+  return (0, _request["default"])({
+    urlType: "adAPI",
+    url: "/ad/index/channel",
+    method: "POST",
+    data: data
+  });
+}
+/**
+ * 投放分析
+ * @props {string} channelId
+ * @props {string} start
+ * @props {string} end
+ * @return {AxjxPromise}
+ */
+
+
+function channelRank(data) {
+  return (0, _request["default"])({
+    urlType: "adAPI",
+    url: "/ad/channel/rank",
+    method: "POST",
+    data: data
+  });
+}
+/**
+ * 获取平台信息数据
+ * @props {string} end
+ * @return {AxjxPromise}
+ */
+
+
+function platform(data) {
+  return (0, _request["default"])({
+    urlType: "url2",
+    url: "/new-media/agg",
+    method: "POST",
+    data: data
+  });
+}
+/**
+ * 获取平台信息数据
+ * @props {string} end
+ * @return {AxjxPromise}
+ */
+
+
+function platformlistData(data) {
+  return (0, _request["default"])({
+    urlType: "url2",
+    url: "/new-media/list",
+    method: "POST",
+    data: data
+  });
+}
+/**
+ * 获取平台信息列表
+ * @props {string} end
+ * @return {AxjxPromise}
+ */
+
+
+function platformList(data) {
+  return (0, _request["default"])({
+    urlType: "url2",
+    url: "/new-media/platform",
+    method: "POST",
+    data: data
+  });
+}
+/**
+ * 归集登录
+ * @return {AxjxPromise}
+ */
+
+
+function guijiLogin(data) {
+  return (0, _request_axios["default"])({
+    url: "/login-v2",
+    method: "POST",
+    data: data
+  });
+}
+/**
+ * 归集活动接口
+ * @return {AxjxPromise}
+ */
+
+
+function guijiActivity(data) {
+  return (0, _request_axios["default"])({
+    url: "/activity/list",
+    method: "POST",
+    data: data
+  });
+}
+/**
+ * 归集话题
+ * @props {string} activityId
+ * @return {AxjxPromise}
+ */
+
+
+function guijiTopic(data) {
+  return (0, _request_axios["default"])({
+    url: "/topic/list",
+    method: "POST",
+    data: data
+  });
+}
+/**
+ * 传播数据
+ * @props {string} topic
+ * @return {AxjxPromise}
+ */
+
+
+function guijiSpread(data) {
+  return (0, _request_axios["default"])({
+    url: "/topic/overview?topic=" + data.topic,
+    method: "GET"
+  });
+}
+/**
+ * 传播量趋势
+ * @props {string} topic
+ * @return {AxjxPromise}
+ */
+
+
+function guijiTrend(data) {
+  return (0, _request_axios["default"])({
+    url: "/topic/history?topic=" + data.topic,
+    method: "GET"
+  });
+}
+/**
+ * 部门传播量排行
+ * @props {string} depRange
+ * @props {string} title
+ * @return {AxjxPromise}
+ */
+
+
+function guijiDepartment(data) {
+  return (0, _request_axios["default"])({
+    url: "/topic/read",
+    method: "POST",
+    data: data
+  });
+}
+/**
+ * 热点报道
+ * @props {string} topic
+ * @return {AxjxPromise}
+ */
+
+
+function guijiHottopic(data) {
+  return (0, _request_axios["default"])({
+    url: "/charts/hot-topic?topic=" + data.topic,
+    method: "GET"
+  });
+}
+/**
+ * 部门列表
+ * @return {AxjxPromise}
+ */
+
+
+function guijiBumenList() {
+  return (0, _request_axios["default"])({
+    url: "/topic/dep-dict",
+    method: "GET"
+  });
+}
+/**
+ * 发稿统计
+ * @return {AxjxPromise}
+ */
+
+
+function guijiFagao(data) {
+  return (0, _request_axios["default"])({
+    url: "/topic/detail",
+    method: "POST",
+    data: data
+  });
+}
+/**
+ * 发稿统计
+ * @return {AxjxPromise}
+ */
+
+
+function leverAudience(data) {
+  return (0, _request["default"])({
+    urlType: "leverAudience",
+    url: "/cxzx-program/flow/channels",
+    method: "GET",
+    data: data
+  });
+}
+/**
+ * 广播数据
+ * @return {AxjxPromise}
+ */
+
+
+function audioGet(data) {
+  return (0, _request["default"])({
+    urlType: "leverAudience",
+    url: "/cxzx-radio-rate/radio-rate",
+    method: "POST",
+    data: data
+  });
+}
+/**
+ * 广播列表
+ * @return {AxjxPromise}
+ */
+
+
+function audioList(data) {
+  return (0, _request["default"])({
+    urlType: "leverAudience",
+    url: "/cxzx-radio-rate/radio-names",
+    method: "GET",
+    data: data
+  });
+}

+ 26 - 0
src/api/index.js

@@ -771,3 +771,29 @@ export function leverAudience(data) {
     data
   });
 }
+
+/**
+ * 广播数据
+ * @return {AxjxPromise}
+ */
+export function audioGet(data) {
+  return ajax({
+    urlType: "leverAudience",
+    url: "/cxzx-radio-rate/radio-rate",
+    method: "POST",
+    data
+  });
+}
+
+/**
+ * 广播列表
+ * @return {AxjxPromise}
+ */
+export function audioList(data) {
+  return ajax({
+    urlType: "leverAudience",
+    url: "/cxzx-radio-rate/radio-names",
+    method: "GET",
+    data
+  });
+}

+ 49 - 36
src/components/bilateralBarChart.vue

@@ -1,17 +1,14 @@
 <template>
   <div>
     <el-button-group>
-      <el-button v-if="tab === '0'" size="small" type="primary">
-        收视率
-      </el-button>
-      <el-button v-else size="small" @click="() => change('0')">
-        收视率
-      </el-button>
-      <el-button v-if="tab === '1'" size="small" type="primary">
-        市占率
-      </el-button>
-      <el-button v-else size="small" @click="() => change('1')">
-        市占率
+      <el-button
+        v-for="(item, i) in tablist"
+        :key="i + 'b'"
+        size="small"
+        @click="() => tab !== i + '' && change(i + '')"
+        :type="tab === i + '' ? 'primary' : 'default'"
+      >
+        {{ item.name }}
       </el-button>
     </el-button-group>
     <div class="bilateralBarChart" ref="bilateralBarChart"></div>
@@ -39,7 +36,7 @@ echarts.use([
 
 export default {
   name: "bilateralBarChart",
-  props: ["list", "keyName"],
+  props: ["list", "keyName", "tabs"],
   watch: {
     list() {
       if (this.chart) this.chart.dispose();
@@ -48,6 +45,7 @@ export default {
   },
   data: function() {
     return {
+      tablist: [],
       leftList: [],
       rightList: [],
       chart: undefined,
@@ -63,7 +61,7 @@ export default {
       this.chart.setOption({
         title: [
           {
-            text: this.tab === "0" ? "收视率" : "市占率",
+            text: this.tablist[this.tab].name,
             left: "center",
             textAlign: "center",
           },
@@ -72,12 +70,12 @@ export default {
           {
             type: "category",
             gridIndex: 0,
-            data: source[this.tab].texts.reverse(),
+            data: source.texts.reverse(),
           },
         ],
         series: [
           {
-            data: source[this.tab].value.reverse(),
+            data: source.value.reverse(),
             type: "bar",
             label: {
               show: true,
@@ -102,26 +100,19 @@ export default {
       return o;
     },
     formatte() {
-      let source = [
-        { texts: [], value: [] },
-        { texts: [], value: [] },
-      ];
+      let source = { texts: [], value: [] };
       let list = JSON.parse(JSON.stringify(this.list));
-      this.leftList = JSON.parse(
-        JSON.stringify(list.sort((a, b) => b.tv_ratings - a.tv_ratings))
-      ).splice(0, 30);
-      this.rightList = JSON.parse(
-        JSON.stringify(list.sort((a, b) => b.market_ratings - a.market_ratings))
+      let key = this.tablist[this.tab] || [];
+      let nList = JSON.parse(
+        JSON.stringify(list.sort((a, b) => b[key.key] - a[key.key]))
       ).splice(0, 30);
 
-      this.leftList.map(v => {
-        source[0].texts.push(v[this.keyName]);
-        source[0].value.push(v.tv_ratings * 100);
-      });
-      this.rightList.map(v => {
-        source[1].texts.push(v[this.keyName]);
-        source[1].value.push(v.market_ratings * 100);
-      });
+      for (let i = 0; i < nList.length; i++) {
+        const v = nList[i];
+        source.texts.push(v[this.keyName]);
+        source.value.push(v[key.key] * 100);
+      }
+
       return source;
     },
     createChart() {
@@ -134,7 +125,7 @@ export default {
       var option = {
         title: [
           {
-            text: this.tab === "0" ? "收视率" : "市占率",
+            text: this.tablist[this.tab].name,
             left: "center",
             textAlign: "center",
           },
@@ -148,15 +139,26 @@ export default {
           {
             type: "category",
             gridIndex: 0,
-            data: source[this.tab].texts.reverse(),
+            data: source.texts.reverse(),
             interval: 0,
+            axisLabel: {
+              color: "#000",
+            },
+          },
+        ],
+        xAxis: [
+          {
+            gridIndex: 0,
+            position: "top",
+            axisLabel: {
+              color: "#000",
+            },
           },
         ],
-        xAxis: [{ gridIndex: 0, position: "top" }],
         grid: { left: 150, top: "15%", buttom: 0, right: "10%" },
         series: [
           {
-            data: source[this.tab].value.reverse(),
+            data: source.value.reverse(),
             type: "bar",
             label: {
               show: true,
@@ -176,6 +178,17 @@ export default {
     },
   },
   mounted() {
+    this.tablist = [
+      {
+        name: "收视率",
+        key: "tv_ratings",
+      },
+      {
+        name: "占有率",
+        key: "market_ratings",
+      },
+    ];
+    if (this.tabs && this.tabs.length) this.tablist = this.tabs;
     this.createChart();
   },
   beforeUnmount: function() {

+ 1006 - 0
src/config/dist/index.dev.js

@@ -0,0 +1,1006 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports["default"] = void 0;
+
+var _tableCol = _interopRequireDefault(require("./tableCol"));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+var useApiUrl = "http://172.16.101.20:8762/cxzx-kuyun",
+    useApiUrl1 = "http://172.16.101.20:8762/cxzx-program",
+    kuyunApi = "http://172.16.101.20:8762/cxzx-fm",
+    guijiApi = "http://topic.smcic.net",
+    leverAudience = "http://172.16.101.20:8762";
+var base = ""; // let isRelease = false; //是否是线上发布版本
+
+if (process.env.NODE_ENV !== "development") {
+  base = window.parent.location.origin || "";
+  useApiUrl = base + "/cxzx-kuyun";
+  useApiUrl1 = base + "/cxzx-program";
+  kuyunApi = base + "/cxzx-fm";
+  leverAudience = base; //   isRelease = true;
+}
+
+var _default = {
+  base: {
+    url: useApiUrl,
+    url2: useApiUrl1,
+    url3: "",
+    leverAudience: leverAudience,
+    kuyunApi: kuyunApi,
+    guijiApi: guijiApi,
+    adAPI: "http://topic.smcic.net",
+    timeout: 60000,
+    // isRelease,
+    requestRetry: 4,
+    requestRetryDelay: 800,
+    token: ""
+  },
+  order: {
+    ascending: "ASC",
+    descending: "DESC"
+  },
+  tableCol: _tableCol["default"],
+  frequency: [{
+    label: "首播/重播",
+    value: 0
+  }, {
+    label: "首播",
+    value: 1
+  }, {
+    label: "重播",
+    value: 2
+  }],
+  weeks: [{
+    label: "星期一",
+    value: 1
+  }, {
+    label: "星期二",
+    value: 2
+  }, {
+    label: "星期三",
+    value: 3
+  }, {
+    label: "星期四",
+    value: 4
+  }, {
+    label: "星期五",
+    value: 5
+  }, {
+    label: "星期六",
+    value: 6
+  }, {
+    label: "星期日",
+    value: 7
+  }],
+  cycle: [{
+    label: "全天时段(00:00~24:00)",
+    value: "0000_2400"
+  }, {
+    label: "凌晨时段(00:00~06:00)",
+    value: "0000_0600"
+  }, {
+    label: "早晨时段(06:00~09:00)",
+    value: "0600_0900"
+  }, {
+    label: "上午时段(09:00~12:00)",
+    value: "0900_1200"
+  }, {
+    label: "中午时段(12:00~14:00)",
+    value: "1200_1400"
+  }, {
+    label: "下午时段(14:00~17:00)",
+    value: "1400_1700"
+  }, {
+    label: "傍晚时段(17:00~19:00)",
+    value: "1700_1900"
+  }, {
+    label: "黄金时段(19:00~22:00)",
+    value: "1900_2200"
+  }, {
+    label: "后黄金时段(22:00~24:00)",
+    value: "2200_2400"
+  }],
+  classification: [{
+    label: "全部节目",
+    options: [{
+      label: "全部节目",
+      value: "0"
+    }]
+  }, {
+    label: "电视剧",
+    options: [{
+      label: "电视剧",
+      value: "3"
+    }]
+  }, {
+    label: "节目",
+    options: [{
+      label: "生活服务",
+      value: "494"
+    }, {
+      label: "青少",
+      value: "493"
+    }, {
+      label: "专题",
+      value: "491"
+    }, {
+      label: "音乐戏曲",
+      value: "13"
+    }, {
+      label: "法制",
+      value: "9"
+    }, {
+      label: "财经",
+      value: "7"
+    }, {
+      label: "新闻",
+      value: "5"
+    }, {
+      label: "电影",
+      value: "4"
+    }, {
+      label: "综艺",
+      value: "2"
+    }, {
+      label: "体育",
+      value: "1"
+    }, {
+      label: "其他",
+      value: "492"
+    }]
+  }],
+  channelList: [{
+    label: "全部频道",
+    value: 0
+  }, {
+    label: "央视",
+    value: 1
+  }, {
+    label: "省级卫视",
+    value: 2
+  }, {
+    label: "其他卫视",
+    value: 3
+  }],
+  region: [{
+    label: "全国",
+    options: [{
+      label: "全国",
+      value: -1
+    }]
+  }, {
+    label: "行业分城",
+    options: [{
+      label: "34城",
+      value: 9,
+      options: [{
+        label: "北京",
+        value: 100
+      }, {
+        label: "上海",
+        value: 101
+      }, {
+        label: "天津",
+        value: 103
+      }, {
+        label: "石家庄",
+        value: 104
+      }, {
+        label: "太原",
+        value: 105
+      }, {
+        label: "呼和浩特",
+        value: 106
+      }, {
+        label: "济南",
+        value: 107
+      }, {
+        label: "哈尔滨",
+        value: 108
+      }, {
+        label: "长春",
+        value: 100
+      }, {
+        label: "沈阳",
+        value: 100
+      }, {
+        label: "西安",
+        value: 100
+      }, {
+        label: "兰州",
+        value: 100
+      }, {
+        label: "银川",
+        value: 100
+      }, {
+        label: "乌鲁木齐",
+        value: 100
+      }, {
+        label: "郑州",
+        value: 100
+      }, {
+        label: "长沙",
+        value: 100
+      }, {
+        label: "武汉",
+        value: 100
+      }, {
+        label: "南昌",
+        value: 100
+      }, {
+        label: "南京",
+        value: 100
+      }, {
+        label: "杭州",
+        value: 100
+      }, {
+        label: "合肥",
+        value: 100
+      }, {
+        label: "广州",
+        value: 100
+      }, {
+        label: "南宁",
+        value: 100
+      }, {
+        label: "福州",
+        value: 100
+      }, {
+        label: "海口",
+        value: 100
+      }, {
+        label: "昆明",
+        value: 100
+      }, {
+        label: "贵阳",
+        value: 100
+      }, {
+        label: "成都",
+        value: 100
+      }, {
+        label: "深圳",
+        value: 100
+      }, {
+        label: "大连",
+        value: 100
+      }, {
+        label: "青岛",
+        value: 100
+      }, {
+        label: "厦门",
+        value: 100
+      }, {
+        label: "重庆",
+        value: 100
+      }, {
+        label: "西宁",
+        value: 100
+      }]
+    }, {
+      label: "52城",
+      value: 10,
+      options: [{
+        label: "北京",
+        value: 100
+      }, {
+        label: "上海",
+        value: 101
+      }, {
+        label: "天津",
+        value: 103
+      }, {
+        label: "石家庄",
+        value: 104
+      }, {
+        label: "太原",
+        value: 105
+      }, {
+        label: "呼和浩特",
+        value: 106
+      }, {
+        label: "济南",
+        value: 107
+      }, {
+        label: "哈尔滨",
+        value: 108
+      }, {
+        label: "长春",
+        value: 100
+      }, {
+        label: "沈阳",
+        value: 100
+      }, {
+        label: "西安",
+        value: 100
+      }, {
+        label: "兰州",
+        value: 100
+      }, {
+        label: "银川",
+        value: 100
+      }, {
+        label: "乌鲁木齐",
+        value: 100
+      }, {
+        label: "郑州",
+        value: 100
+      }, {
+        label: "长沙",
+        value: 100
+      }, {
+        label: "武汉",
+        value: 100
+      }, {
+        label: "南昌",
+        value: 100
+      }, {
+        label: "南京",
+        value: 100
+      }, {
+        label: "杭州",
+        value: 100
+      }, {
+        label: "合肥",
+        value: 100
+      }, {
+        label: "广州",
+        value: 100
+      }, {
+        label: "南宁",
+        value: 100
+      }, {
+        label: "福州",
+        value: 100
+      }, {
+        label: "海口",
+        value: 100
+      }, {
+        label: "昆明",
+        value: 100
+      }, {
+        label: "贵阳",
+        value: 100
+      }, {
+        label: "成都",
+        value: 100
+      }, {
+        label: "深圳",
+        value: 100
+      }, {
+        label: "大连",
+        value: 100
+      }, {
+        label: "青岛",
+        value: 100
+      }, {
+        label: "厦门",
+        value: 100
+      }, {
+        label: "重庆",
+        value: 100
+      }, {
+        label: "西宁",
+        value: 100
+      }, {
+        label: "惠州",
+        value: 100
+      }, {
+        label: "锦州",
+        value: 100
+      }, {
+        label: "宁波",
+        value: 100
+      }, {
+        label: "韶关",
+        value: 100
+      }, {
+        label: "温州",
+        value: 100
+      }, {
+        label: "无锡",
+        value: 100
+      }, {
+        label: "湛江",
+        value: 100
+      }, {
+        label: "唐山",
+        value: 100
+      }, {
+        label: "三亚",
+        value: 100
+      }, {
+        label: "扬州",
+        value: 100
+      }, {
+        label: "烟台",
+        value: 100
+      }, {
+        label: "赣州",
+        value: 100
+      }, {
+        label: "济宁",
+        value: 100
+      }, {
+        label: "徐州",
+        value: 100
+      }, {
+        label: "宜昌",
+        value: 100
+      }, {
+        label: "九江",
+        value: 100
+      }, {
+        label: "拉萨",
+        value: 100
+      }]
+    }, {
+      label: "55城",
+      value: 17,
+      options: [{
+        label: "北京",
+        value: 100
+      }, {
+        label: "上海",
+        value: 101
+      }, {
+        label: "天津",
+        value: 103
+      }, {
+        label: "石家庄",
+        value: 104
+      }, {
+        label: "太原",
+        value: 105
+      }, {
+        label: "呼和浩特",
+        value: 106
+      }, {
+        label: "济南",
+        value: 107
+      }, {
+        label: "哈尔滨",
+        value: 108
+      }, {
+        label: "长春",
+        value: 100
+      }, {
+        label: "沈阳",
+        value: 100
+      }, {
+        label: "西安",
+        value: 100
+      }, {
+        label: "兰州",
+        value: 100
+      }, {
+        label: "银川",
+        value: 100
+      }, {
+        label: "乌鲁木齐",
+        value: 100
+      }, {
+        label: "郑州",
+        value: 100
+      }, {
+        label: "长沙",
+        value: 100
+      }, {
+        label: "武汉",
+        value: 100
+      }, {
+        label: "南昌",
+        value: 100
+      }, {
+        label: "南京",
+        value: 100
+      }, {
+        label: "杭州",
+        value: 100
+      }, {
+        label: "合肥",
+        value: 100
+      }, {
+        label: "广州",
+        value: 100
+      }, {
+        label: "南宁",
+        value: 100
+      }, {
+        label: "福州",
+        value: 100
+      }, {
+        label: "海口",
+        value: 100
+      }, {
+        label: "昆明",
+        value: 100
+      }, {
+        label: "贵阳",
+        value: 100
+      }, {
+        label: "成都",
+        value: 100
+      }, {
+        label: "深圳",
+        value: 100
+      }, {
+        label: "大连",
+        value: 100
+      }, {
+        label: "青岛",
+        value: 100
+      }, {
+        label: "厦门",
+        value: 100
+      }, {
+        label: "重庆",
+        value: 100
+      }, {
+        label: "西宁",
+        value: 100
+      }, {
+        label: "惠州",
+        value: 100
+      }, {
+        label: "锦州",
+        value: 100
+      }, {
+        label: "宁波",
+        value: 100
+      }, {
+        label: "韶关",
+        value: 100
+      }, {
+        label: "温州",
+        value: 100
+      }, {
+        label: "无锡",
+        value: 100
+      }, {
+        label: "湛江",
+        value: 100
+      }, {
+        label: "唐山",
+        value: 100
+      }, {
+        label: "三亚",
+        value: 100
+      }, {
+        label: "扬州",
+        value: 100
+      }, {
+        label: "烟台",
+        value: 100
+      }, {
+        label: "赣州",
+        value: 100
+      }, {
+        label: "济宁",
+        value: 100
+      }, {
+        label: "徐州",
+        value: 100
+      }, {
+        label: "宜昌",
+        value: 100
+      }, {
+        label: "九江",
+        value: 100
+      }, {
+        label: "拉萨",
+        value: 100
+      }]
+    }, {
+      label: "71城",
+      value: 11,
+      options: [{
+        label: "北京",
+        value: 100
+      }, {
+        label: "上海",
+        value: 101
+      }, {
+        label: "天津",
+        value: 103
+      }, {
+        label: "石家庄",
+        value: 104
+      }, {
+        label: "太原",
+        value: 105
+      }, {
+        label: "呼和浩特",
+        value: 106
+      }, {
+        label: "济南",
+        value: 107
+      }, {
+        label: "哈尔滨",
+        value: 108
+      }, {
+        label: "长春",
+        value: 100
+      }, {
+        label: "沈阳",
+        value: 100
+      }, {
+        label: "西安",
+        value: 100
+      }, {
+        label: "兰州",
+        value: 100
+      }, {
+        label: "银川",
+        value: 100
+      }, {
+        label: "乌鲁木齐",
+        value: 100
+      }, {
+        label: "郑州",
+        value: 100
+      }, {
+        label: "长沙",
+        value: 100
+      }, {
+        label: "武汉",
+        value: 100
+      }, {
+        label: "南昌",
+        value: 100
+      }, {
+        label: "南京",
+        value: 100
+      }, {
+        label: "杭州",
+        value: 100
+      }, {
+        label: "合肥",
+        value: 100
+      }, {
+        label: "广州",
+        value: 100
+      }, {
+        label: "南宁",
+        value: 100
+      }, {
+        label: "福州",
+        value: 100
+      }, {
+        label: "海口",
+        value: 100
+      }, {
+        label: "昆明",
+        value: 100
+      }, {
+        label: "贵阳",
+        value: 100
+      }, {
+        label: "成都",
+        value: 100
+      }, {
+        label: "深圳",
+        value: 100
+      }, {
+        label: "大连",
+        value: 100
+      }, {
+        label: "青岛",
+        value: 100
+      }, {
+        label: "厦门",
+        value: 100
+      }, {
+        label: "重庆",
+        value: 100
+      }, {
+        label: "西宁",
+        value: 100
+      }, {
+        label: "惠州",
+        value: 100
+      }, {
+        label: "锦州",
+        value: 100
+      }, {
+        label: "宁波",
+        value: 100
+      }, {
+        label: "韶关",
+        value: 100
+      }, {
+        label: "温州",
+        value: 100
+      }, {
+        label: "无锡",
+        value: 100
+      }, {
+        label: "湛江",
+        value: 100
+      }, {
+        label: "唐山",
+        value: 100
+      }, {
+        label: "三亚",
+        value: 100
+      }, {
+        label: "扬州",
+        value: 100
+      }, {
+        label: "烟台",
+        value: 100
+      }, {
+        label: "赣州",
+        value: 100
+      }, {
+        label: "济宁",
+        value: 100
+      }, {
+        label: "徐州",
+        value: 100
+      }, {
+        label: "宜昌",
+        value: 100
+      }, {
+        label: "九江",
+        value: 100
+      }, {
+        label: "拉萨",
+        value: 100
+      }]
+    }, {
+      label: "29省",
+      value: 1,
+      options: [{
+        label: "北京",
+        value: 100
+      }, {
+        label: "上海",
+        value: 100
+      }, {
+        label: "重庆",
+        value: 100
+      }, {
+        label: "天津",
+        value: 100
+      }, {
+        label: "河北",
+        value: 100
+      }, {
+        label: "陕西",
+        value: 100
+      }, {
+        label: "黑龙江",
+        value: 100
+      }]
+    }]
+  }, {
+    label: "城市等级",
+    options: [{
+      label: "一级城市",
+      value: 12
+    }, {
+      label: "二级城市",
+      value: 13
+    }, {
+      label: "三级城市",
+      value: 14
+    }]
+  }, {
+    label: "全国大区",
+    options: [{
+      label: "华东地区",
+      value: 2
+    }, {
+      label: "华南地区",
+      value: 3
+    }, {
+      label: "华中地区",
+      value: 4
+    }, {
+      label: "华北地区",
+      value: 5
+    }, {
+      label: "西北地区",
+      value: 6
+    }, {
+      label: "西南地区",
+      value: 7
+    }, {
+      label: "东北地区",
+      value: 8
+    }]
+  }],
+  channelNameList: [{
+    label: "CCTV-1",
+    value: 5
+  }, {
+    label: "CCTV-2",
+    value: 6
+  }, {
+    label: "CCTV-3",
+    value: 7
+  }, {
+    label: "CCTV-4",
+    value: 9
+  }, {
+    label: "CCTV-5",
+    value: 223
+  }, {
+    label: "CCTV-6",
+    value: 11
+  }, {
+    label: "CCTV-7",
+    value: 12
+  }, {
+    label: "CCTV-8",
+    value: 13
+  }, {
+    label: "CCTV-10",
+    value: 15
+  }, {
+    label: "CCTV-11",
+    value: 16
+  }, {
+    label: "CCTV-12",
+    value: 17
+  }, {
+    label: "CCTV-少儿",
+    value: 19
+  }, {
+    label: "CCTV-新闻",
+    value: 18
+  }, {
+    label: "CCTV-纪录",
+    value: 14
+  }, {
+    label: "CCTV-音乐",
+    value: 20
+  }, {
+    label: "CCTV-5+体育赛事频道",
+    value: 415
+  }, {
+    label: "北京卫视",
+    value: 21
+  }, {
+    label: "东方卫视",
+    value: 23
+  }, {
+    label: "湖南卫视",
+    value: 24
+  }, {
+    label: "江苏卫视",
+    value: 25
+  }, {
+    label: "广东卫视",
+    value: 26
+  }, {
+    label: "河南卫视",
+    value: 27
+  }, {
+    label: "浙江卫视",
+    value: 28
+  }, {
+    label: "重庆卫视",
+    value: 30
+  }, {
+    label: "安徽卫视",
+    value: 8
+  }, {
+    label: "东南卫视",
+    value: 31
+  }, {
+    label: "甘肃卫视",
+    value: 32
+  }, {
+    label: "广西卫视",
+    value: 34
+  }, {
+    label: "贵州卫视",
+    value: 35
+  }, {
+    label: "海南卫视",
+    value: 36
+  }, {
+    label: "河北卫视",
+    value: 37
+  }, {
+    label: "黑龙江卫视",
+    value: 38
+  }, {
+    label: "湖北卫视",
+    value: 39
+  }, {
+    label: "江西卫视",
+    value: 40
+  }, {
+    label: "吉林卫视",
+    value: 41
+  }, {
+    label: "辽宁卫视",
+    value: 42
+  }, {
+    label: "内蒙古卫视",
+    value: 43
+  }, {
+    label: "宁夏卫视",
+    value: 44
+  }, {
+    label: "山西卫视",
+    value: 45
+  }, {
+    label: "山东卫视",
+    value: 46
+  }, {
+    label: "陕西卫视",
+    value: 48
+  }, {
+    label: "四川卫视",
+    value: 49
+  }, {
+    label: "新疆卫视",
+    value: 51
+  }, {
+    label: "云南卫视",
+    value: 52
+  }, {
+    label: "青海卫视",
+    value: 53
+  }, {
+    label: "厦门卫视",
+    value: 107
+  }, {
+    label: "天津卫视",
+    value: 224
+  }, {
+    label: "深圳卫视",
+    value: 225
+  }, {
+    label: "西藏卫视",
+    value: 347
+  }, {
+    label: "中国教育电视台一套",
+    value: 209
+  }, {
+    label: "卡酷少儿",
+    value: 161
+  }, {
+    label: "湖南金鹰卡通频道",
+    value: 323
+  }, {
+    label: "上海电视台哈哈炫动卫视",
+    value: 273
+  }, {
+    label: "嘉佳卡通频道",
+    value: 292
+  }, {
+    label: "江苏优漫卡通频道",
+    value: 335
+  }, {
+    label: "广东南方卫视",
+    value: 33
+  }, {
+    label: "湖南金鹰纪实频道",
+    value: 596
+  }, {
+    label: "家庭理财",
+    value: 190
+  }, {
+    label: "中国教育电视台四套",
+    value: 399
+  }],
+  audioCycle: [{
+    label: '无',
+    value: 'None'
+  }, {
+    label: '日',
+    value: 'Day'
+  }, {
+    label: '月',
+    value: 'Month'
+  }]
+};
+exports["default"] = _default;

+ 15 - 0
src/config/index.js

@@ -1314,4 +1314,19 @@ export default {
       value: 399,
     },
   ],
+  audioCycle: [
+      {
+          label: '无',
+          value: 'None'
+      },
+      {
+          label: '日',
+          value: 'Day'
+      },
+      {
+          label: '月',
+          value: 'Month'
+      }
+
+  ]
 };

+ 5 - 0
src/router/index.js

@@ -66,6 +66,11 @@ const routes = [
       name: "ReportForm",
       component: () => import("../views/ReportForm/ReportForm.vue"),
   },
+  {
+      path: "/radioBroadcast",
+      name: "RadioBroadcast",
+      component: () => import("../views/RadioBroadcast.vue")
+  },
   {
     path: "/country",
     component: () => import("../views/Country/Index.vue"),

+ 63 - 0
src/utils/dist/request.dev.js

@@ -0,0 +1,63 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports["default"] = _default;
+
+var _index = _interopRequireDefault(require("../config/index"));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+function getdata(data) {
+  var text = "";
+
+  for (var key in data) {
+    text += key + "=" + data[key] + "&";
+  }
+
+  text ? text = "?" + text : "";
+  text = text.replace(/&$/, "");
+  return text;
+}
+
+function _default(ori) {
+  var method = ori.method.toUpperCase();
+  var baseurl = _index["default"].base[ori.urlType || "url"];
+  var url = baseurl + ori.url;
+  if (method === "GET") url += getdata(ori.data || {});
+  if (ori.downCsv) return window.open(url);
+  var d = {
+    lock: true,
+    background: "rgba(255, 255, 255, 0.7)"
+  };
+  ori.target && (d.target = ori.target);
+  return new Promise(function (resolve, reject) {
+    var xhttp;
+    if (window.XMLHttpRequest) xhttp = new XMLHttpRequest();else if (window.ActiveXObject) xhttp = new window.ActiveXObject("Microsoft.XMLHTTP");
+    xhttp.open(method, url, true);
+
+    if (method === "POST") {
+      xhttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
+      xhttp.send(JSON.stringify(ori.data));
+    } else {
+      xhttp.send();
+    }
+
+    xhttp.onreadystatechange = function () {
+      if (this.readyState != 4 || this.status != 200) return;
+      var data = {};
+
+      try {
+        data = this.responseText !== "null" ? JSON.parse(this.responseText || "{}") : {};
+      } catch (err) {
+        console.error(err);
+        reject(err);
+      }
+
+      data && data.response && (data = data.response);
+      if (!ori.urlType && !data.status) return reject(data.message);
+      resolve(data.data || data.response || data);
+    };
+  });
+}

+ 210 - 0
src/views/RadioBroadcast.vue

@@ -0,0 +1,210 @@
+<template>
+  <div class="RadioBroadcast">
+    <el-card class="box-card">
+      <el-form
+        ref="form"
+        :model="form"
+        size="small"
+        :inline="true"
+        label-width="120px"
+        class="demo-form-inline"
+      >
+        <el-form-item label="日期">
+          <el-date-picker
+            v-model="form.date"
+            type="daterange"
+            placeholder="日期"
+            value-format="YYYY-MM-DD"
+            :disabled-date="time => disabledDate(time)"
+          >
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="分析周期">
+          <el-select v-model="form.cycle" placeholder="请选择">
+            <el-option
+              v-for="item in cycleList"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+              :disabled="item.disabled"
+            >
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="电台">
+          <el-select
+            multiple
+            v-model="form.rb"
+            collapse-tags
+            clearable
+            placeholder="请选择"
+            @change="channelSelect"
+          >
+            <el-option
+              v-for="item in radioList"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+              :disabled="item.disabled"
+            >
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item style="float: right">
+          <el-button type="primary" @click="onSubmit">查询</el-button>
+        </el-form-item>
+      </el-form>
+    </el-card>
+    <br />
+    <el-card class="box-card">
+      <bilateral-bar-chart
+        ref="chart"
+        v-if="tableData.length"
+        keyName="name"
+        :list="tableData"
+        :tabs="[
+          {
+            name: '收听率',
+            key: 'radio_rate',
+          },
+          {
+            name: '占有率',
+            key: 'market_rate',
+          },
+        ]"
+      ></bilateral-bar-chart>
+      <el-table
+        :data="tableData"
+        :header-cell-style="{ backgroundColor: '#f4f5f7', color: '#606266' }"
+        style="width: 100%"
+      >
+        <el-table-column align="center" prop="" label="" width="30">
+        </el-table-column>
+        <el-table-column type="index" />
+        <el-table-column align="center" prop="name" label="广播" />
+        <el-table-column
+          align="center"
+          prop="radio_rate"
+          sortable
+          :formatter="
+            (row, column, cellValue) => (cellValue * 100).toFixed(4) + '%'
+          "
+          label="收听率"
+        />
+        <el-table-column
+          align="center"
+          prop="market_rate"
+          sortable
+          :formatter="
+            (row, column, cellValue) => (cellValue * 100).toFixed(4) + '%'
+          "
+          label="占有率"
+        />
+      </el-table>
+    </el-card>
+  </div>
+</template>
+
+<script>
+// @ is an alias to /src
+import bilateralBarChart from "@/components/bilateralBarChart";
+
+import { audioGet, audioList } from "@/api/index";
+import config from "@/config/index";
+export default {
+  name: "RadioBroadcast",
+  data() {
+    return {
+      form: {
+        rb: [],
+        cycle: "None",
+        date: [],
+      },
+      tableData: [],
+      radioList: [],
+    };
+  },
+  mounted() {
+    const t = new Date(Date.now() - 86400000),
+      y = t.getFullYear(),
+      m = t.getMonth() + 1 > 9 ? t.getMonth() + 1 : "0" + (t.getMonth() + 1),
+      d = t.getDate() > 9 ? t.getDate() : "0" + t.getDate(),
+      date = [y, m, d].join("-");
+    this.form.date = [date, date];
+    audioList().then(r => {
+      let radioList = [
+        {
+          name: "全部",
+          value: "全部",
+        },
+      ];
+      for (let i = 0; i < (r || []).length; i++) {
+        const v = (r || [])[i];
+        radioList.push({
+          name: v,
+          value: v,
+        });
+      }
+      this.radioList = radioList;
+      this.form.rb = [radioList[0].name];
+    });
+    this.onSubmit();
+  },
+  computed: {
+    cycleList() {
+      return config.audioCycle;
+    },
+  },
+  methods: {
+    playTime(row) {
+      return row.start_time.split(" ")[1] + "~" + row.end_time.split(" ")[1];
+    },
+    disabledDate(time) {
+      return time.getTime() > Date.now() - 86400000;
+    },
+    onSubmit() {
+      audioGet(this.formatListData())
+        .then(r => {
+          this.tableData = r || [];
+        })
+        .catch(() => {
+          this.tableData = [];
+        });
+    },
+    formatListData() {
+      let s = (this.form.date[0] || "").replace(/-/g, ""),
+        e = (this.form.date[1] || "").replace(/-/g, ""),
+        rb = [];
+      for (let i = 0; i < this.form.rb.length; i++) {
+        const v = this.form.rb[i];
+        if (v !== "全部") rb.push(v);
+      }
+      return {
+        start: s,
+        end: e,
+        range: this.form.cycle,
+        names: rb,
+      };
+    },
+    channelSelect(a) {
+      if (!a.length) return;
+      if (a[a.length - 1] === "全部") return (this.form.rb = ["全部"]);
+      let l = [];
+      for (let i = 0; i < a.length; i++) {
+        const v = a[i];
+        if (v === "全部") continue;
+        l.push(v);
+      }
+      this.form.rb = l;
+    },
+  },
+  beforeUnmount: function() {},
+  components: { bilateralBarChart },
+};
+</script>
+
+<style>
+.RadioBroadcast {
+  margin: 10px 15px;
+}
+</style>