123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- <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) {
- let timeNow = time.getTime()
- return timeNow > Date.now() - 86400000 || timeNow < new Date('2021-12-31');
- },
- 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>
|