|
@@ -2,7 +2,7 @@
|
|
|
<div class="customRanking">
|
|
|
<el-breadcrumb separator-class="el-icon-arrow-right">
|
|
|
<el-breadcrumb-item>传统媒体</el-breadcrumb-item>
|
|
|
- <el-breadcrumb-item>频道全天节目</el-breadcrumb-item>
|
|
|
+ <el-breadcrumb-item>自定义时段 频道收视排行</el-breadcrumb-item>
|
|
|
</el-breadcrumb>
|
|
|
<el-card class="box-card">
|
|
|
<el-form
|
|
@@ -13,6 +13,14 @@
|
|
|
label-width="120px"
|
|
|
class="demo-form-inline"
|
|
|
>
|
|
|
+ <el-form-item label="频道">
|
|
|
+ <el-autocomplete
|
|
|
+ v-model="form.program"
|
|
|
+ :fetch-suggestions="querySearchAsync"
|
|
|
+ placeholder="请输入频道"
|
|
|
+ @select="handleSelect"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
<el-form-item label="日期">
|
|
|
<el-date-picker
|
|
|
v-model="form.date"
|
|
@@ -30,37 +38,35 @@
|
|
|
v-model="form.rangeTime"
|
|
|
is-range
|
|
|
format="HH:mm"
|
|
|
- @change="() => (form.rangeTimeRange = [])"
|
|
|
+ @change="() => (form.filter.time = [])"
|
|
|
range-separator="-"
|
|
|
start-placeholder="开始时间"
|
|
|
+ value-format="HH:mm"
|
|
|
end-placeholder="结束时间"
|
|
|
>
|
|
|
</el-time-picker>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="时段">
|
|
|
+ <el-form-item :label="v.name" v-for="(v, i) in searchDate" :key="i">
|
|
|
<el-select
|
|
|
- v-model="form.rangeTimeRange"
|
|
|
- placeholder="请选择时段"
|
|
|
+ v-model="form.filter[v.key]"
|
|
|
+ :placeholder="'请选择' + v.name"
|
|
|
+ multiple
|
|
|
collapse-tags
|
|
|
- clearable
|
|
|
- @change="timeSelect"
|
|
|
+ @change="se => select(v, se)"
|
|
|
>
|
|
|
+ <el-option key="-1" v-if="v.id !== 'time'" label="全选" value="-1">
|
|
|
+ </el-option>
|
|
|
<el-option
|
|
|
- v-for="item in cycle"
|
|
|
- :key="item.value"
|
|
|
- :label="item.label"
|
|
|
- :value="item.value"
|
|
|
- :disabled="item.disabled"
|
|
|
+ v-for="item in v.list || []"
|
|
|
+ :key="item.id + ''"
|
|
|
+ :label="item.name"
|
|
|
+ :value="item.key + ''"
|
|
|
>
|
|
|
</el-option>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="频道组">
|
|
|
- <el-select
|
|
|
- v-model="form.channelGroup"
|
|
|
- placeholder="请选择频道组"
|
|
|
- @change="channelSelect"
|
|
|
- >
|
|
|
+ <el-select v-model="form.tv_type" placeholder="请选择频道组">
|
|
|
<el-option
|
|
|
v-for="item in channelList"
|
|
|
:key="item.value"
|
|
@@ -75,9 +81,8 @@
|
|
|
<el-cascader
|
|
|
v-model="form.region"
|
|
|
:options="region"
|
|
|
- :props="{children: 'options'}"
|
|
|
+ :props="{ children: 'options' }"
|
|
|
></el-cascader>
|
|
|
-
|
|
|
</el-form-item>
|
|
|
<el-form-item style="float: right">
|
|
|
<el-button type="primary" @click="onSubmit">查询</el-button>
|
|
@@ -140,20 +145,20 @@
|
|
|
|
|
|
<script>
|
|
|
// @ is an alias to /src
|
|
|
-// import { } from "@/api/index";
|
|
|
+import { overlapSearchTitle, selectDate, tvrange,tvrangeexport } from "@/api/kuyun";
|
|
|
+
|
|
|
import config from "@/config/index";
|
|
|
|
|
|
export default {
|
|
|
name: "CustomRanking",
|
|
|
data() {
|
|
|
return {
|
|
|
+ searchDate: [],
|
|
|
form: {
|
|
|
+ filter: {},
|
|
|
rangeTime: [],
|
|
|
- channelGroup: 0,
|
|
|
- date: [
|
|
|
- new Date(new Date() - 86400000),
|
|
|
- new Date(new Date() - 86400000),
|
|
|
- ],
|
|
|
+ tv_type: 0,
|
|
|
+ date: [],
|
|
|
region: -1,
|
|
|
},
|
|
|
total: {},
|
|
@@ -178,12 +183,33 @@ export default {
|
|
|
};
|
|
|
},
|
|
|
mounted() {
|
|
|
+ const d = new Date(Date.now() - 86400000);
|
|
|
+ let Y = d.getFullYear(),
|
|
|
+ M = d.getMonth() + 1,
|
|
|
+ D = d.getDate();
|
|
|
+ M > 9 ? "" : (M = "0" + M);
|
|
|
+ D > 9 ? "" : (D = "0" + D);
|
|
|
+ this.form.date = [[Y, M, D].join("-"), [Y, M, D].join("-")];
|
|
|
this.total = this.tableData[0] || {};
|
|
|
+ selectDate({
|
|
|
+ date: this.form.date,
|
|
|
+ key: "time",
|
|
|
+ org_id: 20,
|
|
|
+ }).then(r => {
|
|
|
+ let area = false;
|
|
|
+ this.searchDate = r || [];
|
|
|
+ for (let i = 0; i < this.searchDate.length; i++) {
|
|
|
+ const v = this.searchDate[i];
|
|
|
+ if (/area/.test(v.id)) {
|
|
|
+ if (area) continue;
|
|
|
+ area = true;
|
|
|
+ this.form.filter[v.id] = [v.list[0].key + ""];
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
},
|
|
|
computed: {
|
|
|
- cycle() {
|
|
|
- return config.cycle;
|
|
|
- },
|
|
|
channelList() {
|
|
|
return config.channelList;
|
|
|
},
|
|
@@ -192,59 +218,70 @@ export default {
|
|
|
},
|
|
|
},
|
|
|
methods: {
|
|
|
- rogressText(v, key) {
|
|
|
- return (v[key] * 100).toFixed(4) + "%";
|
|
|
+ handleSelect(item) {
|
|
|
+ this.form.tv_id = item.id || "";
|
|
|
},
|
|
|
- timeSelect(a) {
|
|
|
- let end = (a || [])[(a || []).length - 1];
|
|
|
- if (this.form.rangeTimeRange.length === config.cycle.length - 1) {
|
|
|
- this.form.rangeTimeRange = ["0000_2400"];
|
|
|
- } else {
|
|
|
- let n = (this.form.rangeTimeRange || []).sort((a, b) => {
|
|
|
- let aNum = a.split("_")[0];
|
|
|
- let bNum = b.split("_")[0];
|
|
|
- return aNum - bNum;
|
|
|
- });
|
|
|
- let isSelect = true;
|
|
|
- for (let i = 0; i < n.length - 1; i++) {
|
|
|
- let aNum = n[i].split("_")[1];
|
|
|
- let bNum = n[i + 1].split("_")[0];
|
|
|
- if (aNum !== bNum) {
|
|
|
- isSelect = false;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- if (!isSelect) {
|
|
|
- let arr = (n.join(",") + ",")
|
|
|
- .replace(end + ",", "")
|
|
|
- .replace(/,$/, "");
|
|
|
- this.form.rangeTimeRange = arr.split(",");
|
|
|
- }
|
|
|
+ querySearchAsync(queryString, cb) {
|
|
|
+ if (!queryString) {
|
|
|
+ cb([]);
|
|
|
+ return;
|
|
|
}
|
|
|
- if (!this.form.rangeTimeRange.length) return;
|
|
|
- let s = this.form.rangeTimeRange[0].split("_")[0];
|
|
|
- let e = this.form.rangeTimeRange[
|
|
|
- this.form.rangeTimeRange.length - 1
|
|
|
- ].split("_");
|
|
|
- e = e[e.length - 1];
|
|
|
- if (e == "2400") e = "2359";
|
|
|
- this.form.rangeTime = [
|
|
|
- new Date(1970, 1, 1, s[0] + s[1] - 0, s[2] + s[3] - 0),
|
|
|
- new Date(1970, 1, 1, e[0] + e[1] - 0, e[2] + e[3] - 0),
|
|
|
- ];
|
|
|
+ overlapSearchTitle("kw=" + queryString).then(r => {
|
|
|
+ let li = (r || []).map(v => {
|
|
|
+ return {
|
|
|
+ value: v.name,
|
|
|
+ id: v.id,
|
|
|
+ };
|
|
|
+ });
|
|
|
+ cb(li);
|
|
|
+ });
|
|
|
+ },
|
|
|
+ rogressText(v, key) {
|
|
|
+ return (v[key] * 100).toFixed(4) + "%";
|
|
|
},
|
|
|
|
|
|
- onExport() {},
|
|
|
+ onExport() {
|
|
|
+ let d = this.form.date || [];
|
|
|
+ let time =
|
|
|
+ this.form.filter.time && this.form.filter.time.length
|
|
|
+ ? this.form.filter.time
|
|
|
+ : (this.form.rangeTime || []).join("_");
|
|
|
+ tvrangeexport({
|
|
|
+ tv_id: this.form.tv_id,
|
|
|
+ area_id: this.form.region,
|
|
|
+ weekday: 0,
|
|
|
+ tv_type: this.form.tv_type,
|
|
|
+ start: d[0] ? d[0] + "+00:00:00" : "",
|
|
|
+ end: d[1] ? d[1] + "+23:59:59" : "",
|
|
|
+ time_range: time,
|
|
|
+ }, '自定义时段 频道收视排行.csv')
|
|
|
+ },
|
|
|
disabledDate(time) {
|
|
|
return time.getTime() > Date.now() - 86400000;
|
|
|
},
|
|
|
- onSubmit() {},
|
|
|
+ onSubmit() {
|
|
|
+ let d = this.form.date || [];
|
|
|
+ let time =
|
|
|
+ this.form.filter.time && this.form.filter.time.length
|
|
|
+ ? this.form.filter.time
|
|
|
+ : (this.form.rangeTime || []).join("_");
|
|
|
+ tvrange({
|
|
|
+ tv_id: this.form.tv_id,
|
|
|
+ area_id: this.form.region,
|
|
|
+ weekday: 0,
|
|
|
+ tv_type: this.form.tv_type,
|
|
|
+ start: d[0] ? d[0] + "+00:00:00" : "",
|
|
|
+ end: d[1] ? d[1] + "+23:59:59" : "",
|
|
|
+ time_range: time,
|
|
|
+ }).then(r => {
|
|
|
+ let li = r || { list: [] };
|
|
|
+ this.tableData = li.list;
|
|
|
+ this.total = this.tableData[0] || {};
|
|
|
+ });
|
|
|
+ },
|
|
|
matrer(row, column, cellValue) {
|
|
|
return (cellValue * 100).toFixed(4) + "%";
|
|
|
},
|
|
|
- channelSelect(a) {
|
|
|
- this.selectAll(a, "channelGroup", 0);
|
|
|
- },
|
|
|
selectAll(a, key, val) {
|
|
|
if (!a.length) return;
|
|
|
let select = a[a.length - 1];
|
|
@@ -255,6 +292,36 @@ export default {
|
|
|
.replace(/,$/, "")
|
|
|
.split(",");
|
|
|
},
|
|
|
+
|
|
|
+ select(v, se) {
|
|
|
+ this.timesSelect(se, v.id, "0000_2400");
|
|
|
+ this.rangeTime = [];
|
|
|
+ },
|
|
|
+
|
|
|
+ timesSelect(a, key, all) {
|
|
|
+ let ngx = new RegExp(all + ",?", "g");
|
|
|
+ let li = [];
|
|
|
+ let end = (a || [])[(a || []).length - 1],
|
|
|
+ s = (a || []).join(",").replace(ngx, "");
|
|
|
+ if (end !== all) li = s ? s.split(",") : [];
|
|
|
+ else li = [all];
|
|
|
+ li = li.sort((a, b) => {
|
|
|
+ let as = a.split("_");
|
|
|
+ let bs = b.split("_");
|
|
|
+ return as[0] - bs[0];
|
|
|
+ });
|
|
|
+ for (let i = 1; i < li.length; i++) {
|
|
|
+ const ov = li[i - 1].split("_");
|
|
|
+ const v = li[i].split("_");
|
|
|
+
|
|
|
+ if (ov[1] !== v[0]) {
|
|
|
+ break; // 时间不完整
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ this.form.filter[key] = li;
|
|
|
+ this.form.rangeTime = [];
|
|
|
+ },
|
|
|
},
|
|
|
components: {},
|
|
|
};
|