commit
7b43f8c56a
@ -0,0 +1,79 @@
|
|||||||
|
<!--
|
||||||
|
* @Author: your name
|
||||||
|
* @Date: 2021-10-08 19:06:37
|
||||||
|
* @LastEditTime: 2021-10-28 11:11:13
|
||||||
|
* @LastEditors: Please set LastEditors
|
||||||
|
* @Description: In User Settings Edit
|
||||||
|
* @FilePath: /data-show/src/components/v-tab-group/index.vue
|
||||||
|
-->
|
||||||
|
<template>
|
||||||
|
<div class="v-t-g-container" ref="V-t-g">
|
||||||
|
<template v-for="(item,index) in btns">
|
||||||
|
<span v-if="active === index" class="v-g-item v-g-item-active" :key="index" @click="handlerClick(index)">{{item}}</span>
|
||||||
|
<span v-else class="v-g-item" :key="index" @click="handlerClick(index)">{{item}}</span>
|
||||||
|
</template>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "v-tab-group",
|
||||||
|
props: {
|
||||||
|
value: {
|
||||||
|
type: Number,
|
||||||
|
default: 0
|
||||||
|
},
|
||||||
|
btns: {
|
||||||
|
type: Array,
|
||||||
|
default: () => []
|
||||||
|
},
|
||||||
|
active: {
|
||||||
|
type: Number,
|
||||||
|
default: 0,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
value: {
|
||||||
|
handler(val) {
|
||||||
|
this.activeInex = val
|
||||||
|
},
|
||||||
|
immediate: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
activeInex: 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
handlerClick(n) {
|
||||||
|
this.activeInex = n;
|
||||||
|
// this.$emit('update:value', this.activeInex)
|
||||||
|
this.$emit('change', this.activeInex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.v-t-g-container {
|
||||||
|
display: inline-block;
|
||||||
|
background: #1B4163;
|
||||||
|
padding: 3px;
|
||||||
|
border-radius: 2px;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.v-g-item {
|
||||||
|
display: inline-block;
|
||||||
|
padding: 2px 10px;
|
||||||
|
color: #63AECC;
|
||||||
|
text-align: center;
|
||||||
|
cursor: pointer;
|
||||||
|
border-radius: 2px;
|
||||||
|
}
|
||||||
|
.v-g-item-active {
|
||||||
|
background: linear-gradient(180deg, #00498C 0%, #002343 100%);
|
||||||
|
border: 1px solid #63AECC;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,108 @@
|
|||||||
|
<!--
|
||||||
|
* @Author: xw
|
||||||
|
* @Date: 2021-10-12 10:50:44
|
||||||
|
* @LastEditTime: 2021-11-17 15:56:14
|
||||||
|
* @LastEditors: Please set LastEditors
|
||||||
|
* @Description: 热门事件列表
|
||||||
|
* @FilePath: /data-show/src/views/BrandInsight/popularEventsList/index.vue
|
||||||
|
-->
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div class="pe-ouuter" v-loading="load">
|
||||||
|
<v-label-div title="消息数据" :showLine="false" :eStyle="{'border-style': 'none'}"></v-label-div>
|
||||||
|
<div class="pe-inner">
|
||||||
|
<dv-scroll-board :config="config" :style="{ width: '100%', height: '25rem' }" @click="handlerItem"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// import { getHotEventsList0528 } from "@/api/BrandInsight";
|
||||||
|
import {getList} from "@/api/KeyMediaBrand/index.js"
|
||||||
|
export default {
|
||||||
|
name: "popularEventsList",
|
||||||
|
props: ["brand"],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
load: false,
|
||||||
|
form: {
|
||||||
|
sBrand: "",
|
||||||
|
token: "",
|
||||||
|
sSource: '',
|
||||||
|
ilimitType: 0,
|
||||||
|
iPageIndex: 1,
|
||||||
|
iPageSize: 100,
|
||||||
|
},
|
||||||
|
config: {},
|
||||||
|
darr: []
|
||||||
|
};
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.form.token = this.getToken;
|
||||||
|
this.form.sBrand = this.getBrand.brandname || "奥迪";
|
||||||
|
this.form.sSource = this.$route.query.source || "抖音";
|
||||||
|
if(this.form.sSource == '汽车之家') {
|
||||||
|
this.form.ilimitType = 1;
|
||||||
|
} else if (this.form.sSource == '懂车帝' && this.getCarCircle == 1) {
|
||||||
|
this.form.ilimitType = 2;
|
||||||
|
}
|
||||||
|
this.getData();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
getData() {
|
||||||
|
let obj = Object.assign({}, this.getCtime2, this.form);
|
||||||
|
// this.load = true;
|
||||||
|
getList(obj).then(res => {
|
||||||
|
let data = res.data;
|
||||||
|
let arr = [];
|
||||||
|
let arr2 = [];
|
||||||
|
data.forEach(ele => {
|
||||||
|
let a = [
|
||||||
|
`<span style='cursor: pointer;'>${ele._source.title}</span>`,
|
||||||
|
ele._source.user_author,
|
||||||
|
ele._source.sourcetime,
|
||||||
|
];
|
||||||
|
let b = [
|
||||||
|
`<span style='cursor: pointer;'>${ele._source.itle}</span>`,
|
||||||
|
ele._source.user_author,
|
||||||
|
ele._source.sourcetime,
|
||||||
|
ele._source.id
|
||||||
|
];
|
||||||
|
arr.push(a);
|
||||||
|
arr2.push(b);
|
||||||
|
this.darr = arr2;
|
||||||
|
this.config = {
|
||||||
|
headerBGC: "rgba(16,33,59)",
|
||||||
|
oddRowBGC: "#173b6d",
|
||||||
|
evenRowBGC: "rgba(69, 149, 244, 0)",
|
||||||
|
columnWidth: [500,180,180],
|
||||||
|
rowNum: 8,
|
||||||
|
header: ["消息列表", "作者", "时间"],
|
||||||
|
data: arr,
|
||||||
|
};
|
||||||
|
this.load = false;
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
handlerItem(row) {
|
||||||
|
let ele = this.darr[row.rowIndex];
|
||||||
|
if(row.columnIndex === 0) {
|
||||||
|
let id = ele[4];
|
||||||
|
this.$router.push({path: '/eventDEC', query: {events_id: id}});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.pe-ouuter {
|
||||||
|
width: 934px;
|
||||||
|
height: 459px;
|
||||||
|
border: 2px solid #0f2a4d;
|
||||||
|
.pe-inner {
|
||||||
|
width: 100%;
|
||||||
|
height: calc(100% - 48px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,135 @@
|
|||||||
|
<!--
|
||||||
|
* @Author: your name
|
||||||
|
* @Date: 2021-10-14 10:11:41
|
||||||
|
* @LastEditTime: 2021-11-09 13:16:55
|
||||||
|
* @LastEditors: Please set LastEditors
|
||||||
|
* @Description: In User Settings Edit
|
||||||
|
* @FilePath: /data-show/src/views/WeiboDetails/weiboCommunicationTrend/index.vue
|
||||||
|
-->
|
||||||
|
<template>
|
||||||
|
<div class="wct-outter" v-loading="load">
|
||||||
|
<v-label-div title="传播态势">
|
||||||
|
</v-label-div>
|
||||||
|
<div class="wct-inner">
|
||||||
|
<v-echarts :opt="opt"></v-echarts>
|
||||||
|
</div>
|
||||||
|
<!-- <div class="vshow" v-if="modelShow" :style="modelStyle">
|
||||||
|
<vLabel-div title="实时热点事件">
|
||||||
|
<a-button @click="closeBox">关闭</a-button>
|
||||||
|
</vLabel-div>
|
||||||
|
<div class="vshow-item" v-for="(item, index) in urlArr" :key="index">
|
||||||
|
<a class="vshow-link" :href="item.url" v-if="item.column == activeCol" target="tar">{{item.title}}</a>
|
||||||
|
</div>
|
||||||
|
</div> -->
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {getTimeCount} from "@/api/KeyMediaBrand/index.js"
|
||||||
|
import {doStr} from "@/utils/gol/dataTool"
|
||||||
|
import createOpt from "./opt"
|
||||||
|
export default {
|
||||||
|
name: "weibo-communication-trend",
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
//弹出框//
|
||||||
|
modelStyle:{
|
||||||
|
left: '',
|
||||||
|
top: ''
|
||||||
|
},
|
||||||
|
modelShow: false,
|
||||||
|
ecbox:{//图表宽高
|
||||||
|
width:618,
|
||||||
|
height:490
|
||||||
|
},
|
||||||
|
ecmodel:{//弹框宽高
|
||||||
|
width:300,
|
||||||
|
height:280
|
||||||
|
},
|
||||||
|
activeCol: 0,
|
||||||
|
//-*-//
|
||||||
|
load: false,
|
||||||
|
form: {
|
||||||
|
sBrand: "",
|
||||||
|
token: "",
|
||||||
|
sSource: '',
|
||||||
|
ilimitType: 0,
|
||||||
|
},
|
||||||
|
opt: createOpt(),
|
||||||
|
urlArr: []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.form.token = this.getToken;
|
||||||
|
this.form.sBrand = this.getBrand.brandname || "奥迪";
|
||||||
|
this.form.sSource = this.$route.query.source || "抖音";
|
||||||
|
if(this.form.sSource == '汽车之家') {
|
||||||
|
this.form.ilimitType = 1;
|
||||||
|
} else if (this.form.sSource == '懂车帝' && this.getCarCircle == 1) {
|
||||||
|
this.form.ilimitType = 2;
|
||||||
|
}
|
||||||
|
this.getData();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
//--弹出框--//
|
||||||
|
// clickMark(data) {
|
||||||
|
// this.activeCol = data.index
|
||||||
|
// this.modelShow = true;
|
||||||
|
// let mw = window.event;
|
||||||
|
// if((this.ecbox.width - mw.offsetX - 20) > this.ecmodel.width) {
|
||||||
|
// this.modelStyle.left = mw.offsetX + 20 + "px"
|
||||||
|
// } else {
|
||||||
|
// this.modelStyle.left = mw.offsetX - this.ecmodel.width - 20 + "px"
|
||||||
|
// }
|
||||||
|
// if((this.ecbox.height - mw.offsetY - 20) > this.ecmodel.height) {
|
||||||
|
// this.modelStyle.top = mw.offsetY + "px"
|
||||||
|
// } else {
|
||||||
|
// this.modelStyle.top = mw.offsetY - this.ecmodel.height + "px"
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// closeBox() {
|
||||||
|
// this.modelShow = false;
|
||||||
|
// },
|
||||||
|
//----//
|
||||||
|
getData() {
|
||||||
|
this.load = true;
|
||||||
|
let obj = Object.assign({}, this.getCtime2, this.form);
|
||||||
|
getTimeCount(obj).then(res => {
|
||||||
|
let data = res.data || [];
|
||||||
|
let dx = []; //time
|
||||||
|
let ds = []; //value
|
||||||
|
data.forEach(ele => {
|
||||||
|
dx.push(ele.Time);
|
||||||
|
ds.push(ele.value);
|
||||||
|
})
|
||||||
|
this.opt = createOpt(dx, ds)
|
||||||
|
this.load = false
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.wct-outter {
|
||||||
|
width: 1887px;
|
||||||
|
height: 460px;
|
||||||
|
border: 2px solid #0f2a4d;
|
||||||
|
.wct-inner {
|
||||||
|
width: 100%;
|
||||||
|
height: calc(100% - 48px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.vshow{
|
||||||
|
position: absolute;
|
||||||
|
width: 300px;
|
||||||
|
background: rgb(3, 18, 36);
|
||||||
|
border: 4px solid #0f2a4d;
|
||||||
|
.vshow-item {
|
||||||
|
padding: 11px;
|
||||||
|
width: 100%;
|
||||||
|
font-size: 15px;
|
||||||
|
color: rgb(54, 189, 239);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,116 @@
|
|||||||
|
/*
|
||||||
|
* @Author: your name
|
||||||
|
* @Date: 2021-10-12 15:32:24
|
||||||
|
* @LastEditTime: 2021-11-19 19:50:21
|
||||||
|
* @LastEditors: Please set LastEditors
|
||||||
|
* @Description: In User Settings Edit
|
||||||
|
* @FilePath: /data-show/src/views/BrandInsight/weiboVolumeTrend/opt.js
|
||||||
|
*/
|
||||||
|
import * as echarts from "echarts";
|
||||||
|
import { bigNumberTransform } from "@/utils/gol/dataTool"
|
||||||
|
export default function createOpt(dx = [], ds = [], hotIndex = []) {
|
||||||
|
let mark = [];
|
||||||
|
hotIndex.forEach(ele => {
|
||||||
|
let obj = {
|
||||||
|
name: 'Max',
|
||||||
|
xAxis: ele, yAxis: ds[ele],
|
||||||
|
symbol: 'pin',
|
||||||
|
symbolSize: 16,
|
||||||
|
symbolOffset: [0, '-70%'],
|
||||||
|
}
|
||||||
|
mark.push(obj)
|
||||||
|
})
|
||||||
|
return {
|
||||||
|
grid: {
|
||||||
|
top: 16,
|
||||||
|
left: 16,
|
||||||
|
right: "5%",
|
||||||
|
bottom: 10,
|
||||||
|
containLabel: true,
|
||||||
|
},
|
||||||
|
tooltip: {
|
||||||
|
trigger: "axis",
|
||||||
|
backgroundColor: "#08182F",
|
||||||
|
color: "#fff",
|
||||||
|
borderColor: "#3373CC",
|
||||||
|
textStyle: {
|
||||||
|
color: "#fff", //设置文字颜色
|
||||||
|
},
|
||||||
|
extraCssText: "box-shadow: 0px 0px 10px 0px #3373CC;"
|
||||||
|
},
|
||||||
|
xAxis: {
|
||||||
|
type: 'category',
|
||||||
|
boundaryGap: false,
|
||||||
|
axisTick: {
|
||||||
|
show: false,
|
||||||
|
},
|
||||||
|
axisLabel: {
|
||||||
|
formatter: (value) => {
|
||||||
|
let rex = "00:00:00";
|
||||||
|
let isCont = false;
|
||||||
|
let str = value;
|
||||||
|
for(let i = 0;i<dx.length-1;i++){
|
||||||
|
//连续两条带小时
|
||||||
|
if(dx[i].indexOf(rex) === -1 && dx[i+1].indexOf(rex) === -1){
|
||||||
|
isCont = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(isCont == true) {
|
||||||
|
str = value.substring(10, 16)
|
||||||
|
} else {
|
||||||
|
str = value.substring(5, 10)
|
||||||
|
}
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
axisLine: {
|
||||||
|
show: false,
|
||||||
|
lineStyle: {
|
||||||
|
color: "#fff",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
data: dx
|
||||||
|
},
|
||||||
|
yAxis: {
|
||||||
|
type: 'value',
|
||||||
|
axisLine: {
|
||||||
|
show: false,
|
||||||
|
lineStyle: {
|
||||||
|
color: "#FFF",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
axisLabel: {
|
||||||
|
formatter: (value) => {
|
||||||
|
let str = bigNumberTransform(value);
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
splitLine: {
|
||||||
|
lineStyle: {
|
||||||
|
type: "dashed", // y轴分割线类型
|
||||||
|
color: "#012b4b",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
series: [
|
||||||
|
{
|
||||||
|
data: ds,
|
||||||
|
type: 'line',
|
||||||
|
color: '#546fc5',
|
||||||
|
areaStyle: {normal: {
|
||||||
|
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
|
||||||
|
offset: 0,
|
||||||
|
color: '#546fc5'
|
||||||
|
}, {
|
||||||
|
offset: 1,
|
||||||
|
color: 'rgba(0,0,0,0)'
|
||||||
|
}]),
|
||||||
|
}},
|
||||||
|
markPoint: {
|
||||||
|
data: mark,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
}
|
@ -0,0 +1,38 @@
|
|||||||
|
<!--
|
||||||
|
* @Author: your name
|
||||||
|
* @Date: 2021-10-14 10:11:41
|
||||||
|
* @LastEditTime: 2021-11-09 13:16:55
|
||||||
|
* @LastEditors: Please set LastEditors
|
||||||
|
* @Description: In User Settings Edit
|
||||||
|
* @FilePath: /data-show/src/views/WeiboDetails/weiboCommunicationTrend/index.vue
|
||||||
|
-->
|
||||||
|
<template>
|
||||||
|
<div class="wct-outter">
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "weibo-communication-trend",
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
form: {
|
||||||
|
sBrand: "",
|
||||||
|
token: "",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.wct-outter {
|
||||||
|
width: 1872px;
|
||||||
|
height: 460px;
|
||||||
|
border: 2px solid #0f2a4d;
|
||||||
|
.wct-inner {
|
||||||
|
width: 100%;
|
||||||
|
height: calc(100% - 48px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,316 @@
|
|||||||
|
<!--
|
||||||
|
* @Author: your name
|
||||||
|
* @Date: 2021-10-14 09:00:09
|
||||||
|
* @LastEditTime: 2021-10-16 15:54:30
|
||||||
|
* @LastEditors: Please set LastEditors
|
||||||
|
* @Description: 微博详情
|
||||||
|
* @FilePath: /data-show/src/views/WeiboDetails/index.vue
|
||||||
|
-->
|
||||||
|
<template>
|
||||||
|
<div class="d-container">
|
||||||
|
<div class="wd-outter">
|
||||||
|
<div class="wd-d1">
|
||||||
|
<v-label-div title="详情数据">
|
||||||
|
<v-tab-group-control v-if="form.sSource == '懂车帝'"
|
||||||
|
:btns="['全部', '车友圈']"
|
||||||
|
:active="getCarCircle"
|
||||||
|
@change="handlerTab" style="margin-right: 24px"
|
||||||
|
></v-tab-group-control>
|
||||||
|
<v-btn @click="goback">返回车型洞察</v-btn>
|
||||||
|
</v-label-div>
|
||||||
|
<div class="wd-d1-bd">
|
||||||
|
<div class="d1"> {{ form.sSource }} </div>
|
||||||
|
<div class="d2" style="margin-left: 114px">
|
||||||
|
<img class="dd1" src="../../assets/images/BrandInsight/ic_xxzl.png" />
|
||||||
|
<div class="dd2">
|
||||||
|
<span class="s1">{{ total }}</span>
|
||||||
|
<span class="s2">信息总量</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="d2">
|
||||||
|
<img class="dd1" src="../../assets/images/BrandInsight/ic_dvsl.png" />
|
||||||
|
<div class="dd2">
|
||||||
|
<span class="s1">{{ totalRep }}</span>
|
||||||
|
<span class="s2">评论总数</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- <div class="d2">
|
||||||
|
<img class="dd1" src="../../assets/images/BrandInsight/ic_yhs.png" />
|
||||||
|
<div class="dd2">
|
||||||
|
<span class="s1">{{ countObj.userCount }}</span>
|
||||||
|
<span class="s2">参与用户数</span>
|
||||||
|
</div>
|
||||||
|
</div> -->
|
||||||
|
<div class="d2">
|
||||||
|
<img class="dd1" src="../../assets/images/BrandInsight/ic_yqdx.png" />
|
||||||
|
<a-popover title="舆情调性">
|
||||||
|
<template slot="content">
|
||||||
|
<template v-for="(item, key) in countObj2">
|
||||||
|
<div class="pd-item" :key="key">
|
||||||
|
<span >{{key}}</span>
|
||||||
|
<span>{{item}}</span>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</template>
|
||||||
|
<div class="dd3">
|
||||||
|
<span class="s3" :style="{ width: (countObj2['正面'] / total) * width + 'px' }" ></span>
|
||||||
|
<span class="s3" :style="{ width: (countObj2['中性'] / total) * width + 'px', background: '#54BF93',}"></span>
|
||||||
|
<span class="s3" :style="{ width: (countObj2['负面'] / total) * width + 'px', background: '#CC9D12',}"></span>
|
||||||
|
</div>
|
||||||
|
</a-popover>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="wd-d2" v-if="form.sSource == '新浪微博' || form.sSource == '汽车之家' || (form.sSource == '懂车帝' && getCarCircle == 1)">
|
||||||
|
<vue-lazy-component>
|
||||||
|
<weibo-communication-trend-long></weibo-communication-trend-long>
|
||||||
|
<weiboCommunicationTrendLongStoken slot="skeleton"></weiboCommunicationTrendLongStoken>
|
||||||
|
</vue-lazy-component>
|
||||||
|
</div>
|
||||||
|
<div class="wd-d2" v-else>
|
||||||
|
<vue-lazy-component>
|
||||||
|
<weibo-communication-trend></weibo-communication-trend>
|
||||||
|
<weiboCommunicationTrendStoken slot="skeleton"></weiboCommunicationTrendStoken>
|
||||||
|
</vue-lazy-component>
|
||||||
|
<vue-lazy-component>
|
||||||
|
<weiboContentTOPVolume></weiboContentTOPVolume>
|
||||||
|
<weiboContentTOPVolumeStoken slot="skeleton"></weiboContentTOPVolumeStoken>
|
||||||
|
</vue-lazy-component>
|
||||||
|
</div>
|
||||||
|
<div class="wd-d4">
|
||||||
|
<vue-lazy-component>
|
||||||
|
<weiboContentType></weiboContentType>
|
||||||
|
<weiboContentTypeStoken slot="skeleton"></weiboContentTypeStoken>
|
||||||
|
</vue-lazy-component>
|
||||||
|
<vue-lazy-component>
|
||||||
|
<weiboCharacters></weiboCharacters>
|
||||||
|
<weiboCharactersStoken slot="skeleton"></weiboCharactersStoken>
|
||||||
|
</vue-lazy-component>
|
||||||
|
<vue-lazy-component>
|
||||||
|
<weiboWordCloud></weiboWordCloud>
|
||||||
|
<weiboWordCloudStoken slot="skeleton"></weiboWordCloudStoken>
|
||||||
|
</vue-lazy-component>
|
||||||
|
</div>
|
||||||
|
<div class="wd-d3" v-if="form.sSource == '新浪微博' || form.sSource == '汽车之家' || (form.sSource == '懂车帝' && getCarCircle == 1)">
|
||||||
|
<vue-lazy-component v-if="form.sSource == '新浪微博' || form.sSource == '汽车之家'">
|
||||||
|
<weiboUserActiveArea></weiboUserActiveArea>
|
||||||
|
<weiboUserActiveAreaStoken slot="skeleton"></weiboUserActiveAreaStoken>
|
||||||
|
</vue-lazy-component>
|
||||||
|
<popularEventsList v-if="form.sSource == '懂车帝' && getCarCircle == 1"></popularEventsList>
|
||||||
|
<vue-lazy-component>
|
||||||
|
<weiboContentTOPVolume></weiboContentTOPVolume>
|
||||||
|
<weiboContentTOPVolumeStoken slot="skeleton"></weiboContentTOPVolumeStoken>
|
||||||
|
</vue-lazy-component>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import weiboCommunicationTrend from "./weiboCommunicationTrend";
|
||||||
|
import weiboCommunicationTrendLong from "./weiboCommunicationTrendLong";
|
||||||
|
import weiboContentType from "./weiboContentType";
|
||||||
|
import weiboCharacters from "./weiboCharacters";
|
||||||
|
import weiboUserActiveArea from "./weiboUserActiveArea";
|
||||||
|
import weiboContentTOPVolume from "./weiboContentTOPVolume";
|
||||||
|
import weiboWordCloud from "./weiboWordCloud";
|
||||||
|
import popularEventsList from "./popularEventsList";
|
||||||
|
//骨架屏
|
||||||
|
import weiboCommunicationTrendStoken from "./weiboCommunicationTrendStoken";
|
||||||
|
import weiboCommunicationTrendLongStoken from "./weiboCommunicationTrendLongStoken";
|
||||||
|
import weiboContentTypeStoken from "./weiboContentTypeStoken";
|
||||||
|
import weiboCharactersStoken from "./weiboCharactersStoken";
|
||||||
|
import weiboUserActiveAreaStoken from "./weiboUserActiveAreaStoken";
|
||||||
|
import weiboContentTOPVolumeStoken from "./weiboContentTOPVolumeStoken";
|
||||||
|
import weiboWordCloudStoken from "./weiboWordCloudStoken";
|
||||||
|
import {getCountAndaffections} from "@/api/KeyMediaSeries/index.js"
|
||||||
|
export default {
|
||||||
|
name: "KeyMediaSeries",
|
||||||
|
inject: ['reload'],
|
||||||
|
components: {
|
||||||
|
weiboCommunicationTrend, // 传播趋势
|
||||||
|
weiboCommunicationTrendLong,
|
||||||
|
weiboContentType, // 内容类型
|
||||||
|
weiboCharacters, // 人物画像
|
||||||
|
weiboUserActiveArea, // 用户活跃地区
|
||||||
|
weiboContentTOPVolume, // 内容TOP声量
|
||||||
|
weiboWordCloud, // 词云分布
|
||||||
|
popularEventsList, // 消息列表
|
||||||
|
//骨架屏
|
||||||
|
weiboCommunicationTrendStoken, // 传播趋势
|
||||||
|
weiboCommunicationTrendLongStoken,
|
||||||
|
weiboContentTypeStoken, // 内容类型
|
||||||
|
weiboCharactersStoken, // 人物画像
|
||||||
|
weiboUserActiveAreaStoken, // 用户活跃地区
|
||||||
|
weiboContentTOPVolumeStoken, // 内容TOP声量
|
||||||
|
weiboWordCloudStoken, // 词云分布
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
width: 200,
|
||||||
|
form: {
|
||||||
|
token: "",
|
||||||
|
sBrand: "",
|
||||||
|
sSource: '',
|
||||||
|
sSeriesName: '',
|
||||||
|
ilimitType: 0,
|
||||||
|
},
|
||||||
|
countObj: {
|
||||||
|
carseriesCount: 0,
|
||||||
|
count: 0,
|
||||||
|
userCount: 0,
|
||||||
|
vCount: 0,
|
||||||
|
},
|
||||||
|
countObj2: {
|
||||||
|
正面: 0,
|
||||||
|
中性: 0,
|
||||||
|
负面: 0,
|
||||||
|
},
|
||||||
|
total: 0,
|
||||||
|
totalRep: 0,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.form.token = this.getToken;
|
||||||
|
this.form.sBrand = this.getBrand.brandname || "奥迪";
|
||||||
|
this.form.sSeriesName = this.getModel.name;
|
||||||
|
this.form.sSource = this.$route.query.source || "抖音";
|
||||||
|
if(this.form.sSource == '汽车之家') {
|
||||||
|
this.form.ilimitType = 1;
|
||||||
|
} else if (this.form.sSource == '懂车帝' && this.getCarCircle == 1) {
|
||||||
|
this.form.ilimitType = 2;
|
||||||
|
}
|
||||||
|
this.getData();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
goback() {
|
||||||
|
this.$router.go(-1);
|
||||||
|
},
|
||||||
|
getData() {
|
||||||
|
let obj = Object.assign({}, this.getCtime2, this.form);
|
||||||
|
// getBrandWeiBoCount0528(obj).then((res) => {
|
||||||
|
// let data = res.data;
|
||||||
|
// this.countObj = Object.assign(this.countObj, data);
|
||||||
|
// });
|
||||||
|
getCountAndaffections(obj).then(res => {
|
||||||
|
let data = res.data.Affections || {};
|
||||||
|
this.total = res.data.Count;
|
||||||
|
this.totalRep = res.data.ReplyCount;
|
||||||
|
this.countObj2 = {
|
||||||
|
正面: data[0].Value,
|
||||||
|
中性: data[1].Value,
|
||||||
|
负面: data[2].Value,
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
handlerTab(val) {
|
||||||
|
this.setCarCircle(val);
|
||||||
|
this.reload();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.wd-outter {
|
||||||
|
padding: 0px 16px 16px 16px;
|
||||||
|
}
|
||||||
|
.wd-d1 {
|
||||||
|
width: 100%;
|
||||||
|
height: 222px;
|
||||||
|
border: 2px solid #0f2a4d;
|
||||||
|
.wd-d1-bd {
|
||||||
|
width: 100%;
|
||||||
|
height: calc(100% - 48px);
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-start;
|
||||||
|
align-items: center;
|
||||||
|
.d1 {
|
||||||
|
width: 150px;
|
||||||
|
height: 150px;
|
||||||
|
background-image: url("../../assets/images/BrandInsight/img_lq.png");
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-size: cover;
|
||||||
|
margin-left: 114px;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 150px;
|
||||||
|
font-size: 24px;
|
||||||
|
color: #b2daf7;
|
||||||
|
}
|
||||||
|
.d2 {
|
||||||
|
width: 378px;
|
||||||
|
height: 82px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-start;
|
||||||
|
.dd1 {
|
||||||
|
width: 80px;
|
||||||
|
height: 80px;
|
||||||
|
}
|
||||||
|
.dd2 {
|
||||||
|
margin-left: 20px;
|
||||||
|
height: 100%;
|
||||||
|
.s1 {
|
||||||
|
display: block;
|
||||||
|
font-size: 34px;
|
||||||
|
font-family: Bebas;
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
.s2 {
|
||||||
|
display: block;
|
||||||
|
font-size: 20px;
|
||||||
|
color: #8f969c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.dd3 {
|
||||||
|
margin-left: 20px;
|
||||||
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-start;
|
||||||
|
align-items: center;
|
||||||
|
.s3 {
|
||||||
|
width: 87px;
|
||||||
|
height: 33px;
|
||||||
|
display: inline-block;
|
||||||
|
margin-right: 2px;
|
||||||
|
background: #3373cc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.wd-d2 {
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-start;
|
||||||
|
margin-top: 16px;
|
||||||
|
}
|
||||||
|
.wd-d3 {
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-start;
|
||||||
|
margin-top: 16px;
|
||||||
|
}
|
||||||
|
.wd-d4 {
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-start;
|
||||||
|
margin-top: 16px;
|
||||||
|
}
|
||||||
|
.wd-d5 {
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-start;
|
||||||
|
margin-top: 16px;
|
||||||
|
}
|
||||||
|
.pd-item {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
color: #fff;
|
||||||
|
border-bottom: 1px solid #173b6d;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,109 @@
|
|||||||
|
<!--
|
||||||
|
* @Author: xw
|
||||||
|
* @Date: 2021-10-12 10:50:44
|
||||||
|
* @LastEditTime: 2021-11-17 15:56:14
|
||||||
|
* @LastEditors: Please set LastEditors
|
||||||
|
* @Description: 热门事件列表
|
||||||
|
* @FilePath: /data-show/src/views/BrandInsight/popularEventsList/index.vue
|
||||||
|
-->
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div class="pe-ouuter" v-loading="load">
|
||||||
|
<v-label-div title="消息数据" :showLine="false" :eStyle="{'border-style': 'none'}"></v-label-div>
|
||||||
|
<div class="pe-inner">
|
||||||
|
<dv-scroll-board :config="config" :style="{ width: '100%', height: '25rem' }" @click="handlerItem"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// import { getHotEventsList0528 } from "@/api/BrandInsight";
|
||||||
|
import {getList} from "@/api/KeyMediaSeries/index.js"
|
||||||
|
export default {
|
||||||
|
name: "popularEventsList",
|
||||||
|
props: ["brand"],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
load: false,
|
||||||
|
form: {
|
||||||
|
sBrand: "",
|
||||||
|
token: "",
|
||||||
|
sSource: '',
|
||||||
|
ilimitType: 0,
|
||||||
|
iPageIndex: 1,
|
||||||
|
iPageSize: 100,
|
||||||
|
},
|
||||||
|
config: {},
|
||||||
|
darr: []
|
||||||
|
};
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.form.token = this.getToken;
|
||||||
|
this.form.sBrand = this.getBrand.brandname || "奥迪";
|
||||||
|
this.form.sSeriesName = this.getModel.name;
|
||||||
|
this.form.sSource = this.$route.query.source || "抖音";
|
||||||
|
if(this.form.sSource == '汽车之家') {
|
||||||
|
this.form.ilimitType = 1;
|
||||||
|
} else if (this.form.sSource == '懂车帝' && this.getCarCircle == 1) {
|
||||||
|
this.form.ilimitType = 2;
|
||||||
|
}
|
||||||
|
this.getData();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
getData() {
|
||||||
|
let obj = Object.assign({}, this.getCtime2, this.form);
|
||||||
|
// this.load = true;
|
||||||
|
getList(obj).then(res => {
|
||||||
|
let data = res.data;
|
||||||
|
let arr = [];
|
||||||
|
let arr2 = [];
|
||||||
|
data.forEach(ele => {
|
||||||
|
let a = [
|
||||||
|
`<span style='cursor: pointer;'>${ele._source.title}</span>`,
|
||||||
|
ele._source.user_author,
|
||||||
|
ele._source.sourcetime,
|
||||||
|
];
|
||||||
|
let b = [
|
||||||
|
`<span style='cursor: pointer;'>${ele._source.itle}</span>`,
|
||||||
|
ele._source.user_author,
|
||||||
|
ele._source.sourcetime,
|
||||||
|
ele._source.id
|
||||||
|
];
|
||||||
|
arr.push(a);
|
||||||
|
arr2.push(b);
|
||||||
|
this.darr = arr2;
|
||||||
|
this.config = {
|
||||||
|
headerBGC: "rgba(16,33,59)",
|
||||||
|
oddRowBGC: "#173b6d",
|
||||||
|
evenRowBGC: "rgba(69, 149, 244, 0)",
|
||||||
|
columnWidth: [500,180,180],
|
||||||
|
rowNum: 8,
|
||||||
|
header: ["消息列表", "作者", "时间"],
|
||||||
|
data: arr,
|
||||||
|
};
|
||||||
|
this.load = false;
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
handlerItem(row) {
|
||||||
|
let ele = this.darr[row.rowIndex];
|
||||||
|
if(row.columnIndex === 0) {
|
||||||
|
let id = ele[4];
|
||||||
|
this.$router.push({path: '/eventDEC', query: {events_id: id}});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.pe-ouuter {
|
||||||
|
width: 934px;
|
||||||
|
height: 459px;
|
||||||
|
border: 2px solid #0f2a4d;
|
||||||
|
.pe-inner {
|
||||||
|
width: 100%;
|
||||||
|
height: calc(100% - 48px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,193 @@
|
|||||||
|
<!--
|
||||||
|
* @Author: your name
|
||||||
|
* @Date: 2021-10-14 10:48:56
|
||||||
|
* @LastEditTime: 2021-11-09 13:16:07
|
||||||
|
* @LastEditors: Please set LastEditors
|
||||||
|
* @Description: In User Settings Edit
|
||||||
|
* @FilePath: /data-show/src/views/WeiboDetails/weiboCharacters/index.vue
|
||||||
|
-->
|
||||||
|
<template>
|
||||||
|
<div class="wc-outter" v-loading="load">
|
||||||
|
<v-label-div title="内容分布">
|
||||||
|
<div>
|
||||||
|
<v-tab-group
|
||||||
|
:btns="['认证', '精华', '图文']"
|
||||||
|
@change="handlerTab"
|
||||||
|
></v-tab-group>
|
||||||
|
</div>
|
||||||
|
</v-label-div>
|
||||||
|
<div class="wc-inner">
|
||||||
|
<div class="d1">
|
||||||
|
<v-echarts :opt="opt"></v-echarts>
|
||||||
|
</div>
|
||||||
|
<div class="d2">
|
||||||
|
<div v-if="labelArr.length<=3">
|
||||||
|
<v-label-ctx
|
||||||
|
v-for="(item, index) in labelArr"
|
||||||
|
:key="index"
|
||||||
|
:label="item.Key"
|
||||||
|
:cont="item.Value"
|
||||||
|
:percentage="((item.Value / total) * 100).toFixed(2) + '%'"
|
||||||
|
:color="colors[index]"
|
||||||
|
:eStyle="{ height: '8.54rem' }"
|
||||||
|
></v-label-ctx>
|
||||||
|
</div>
|
||||||
|
<vue-scroll v-if="labelArr.length>3">
|
||||||
|
<v-label-ctx
|
||||||
|
v-for="(item, index) in labelArr"
|
||||||
|
:key="index"
|
||||||
|
:label="item.Key"
|
||||||
|
:cont="item.Value"
|
||||||
|
:percentage="((item.Value / total) * 100).toFixed(2) + '%'"
|
||||||
|
:color="colors[index]"
|
||||||
|
:eStyle="{ height: '5.14rem' }"
|
||||||
|
></v-label-ctx>
|
||||||
|
</vue-scroll>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {getUserAttestationGroupBy, getIsjingGroupBy, getPicboolGroupBy} from "@/api/KeyMediaSeries/index.js";
|
||||||
|
import createOpt from "./opt";
|
||||||
|
export default {
|
||||||
|
name: "weiboCharacters",
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
load: false,
|
||||||
|
form: {
|
||||||
|
sBrand: "",
|
||||||
|
token: "",
|
||||||
|
sSource: '',
|
||||||
|
sSeriesName: '',
|
||||||
|
ilimitType: 0,
|
||||||
|
},
|
||||||
|
RegionWeiBo: [],
|
||||||
|
attestation: [],
|
||||||
|
sex: [],
|
||||||
|
total: 0,
|
||||||
|
labelArr: [],
|
||||||
|
|
||||||
|
opt: createOpt(),
|
||||||
|
colors: [
|
||||||
|
"#54BF93",
|
||||||
|
"#3373CC",
|
||||||
|
"#CC9D12",
|
||||||
|
"#f15c80",
|
||||||
|
"#e4d354",
|
||||||
|
"#8085e8",
|
||||||
|
"#8d4653",
|
||||||
|
"#91e8e1",
|
||||||
|
"#f7a35c",
|
||||||
|
"#90ed7d",
|
||||||
|
"#54BF93",
|
||||||
|
"#3373CC",
|
||||||
|
"#CC9D12",
|
||||||
|
"#f15c80",
|
||||||
|
"#e4d354",
|
||||||
|
"#8085e8",
|
||||||
|
"#8d4653",
|
||||||
|
"#91e8e1",
|
||||||
|
"#f7a35c",
|
||||||
|
"#90ed7d",
|
||||||
|
],
|
||||||
|
};
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.form.token = this.getToken;
|
||||||
|
this.form.sBrand = this.getBrand.brandname || "奥迪";
|
||||||
|
this.form.sSeriesName = this.getModel.name;
|
||||||
|
this.form.sSource = this.$route.query.source || "抖音";
|
||||||
|
if(this.form.sSource == '汽车之家') {
|
||||||
|
this.form.ilimitType = 1;
|
||||||
|
} else if (this.form.sSource == '懂车帝' && this.getCarCircle == 1) {
|
||||||
|
this.form.ilimitType = 2;
|
||||||
|
}
|
||||||
|
this.getData();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 获取后台数据
|
||||||
|
getData() {
|
||||||
|
let obj = Object.assign({}, this.getCtime2, this.form);
|
||||||
|
// this.load = true;
|
||||||
|
getUserAttestationGroupBy(obj).then((res) => {
|
||||||
|
let data = res.data || {};
|
||||||
|
this.doVal(data)
|
||||||
|
this.load = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
// 将对象变成数组
|
||||||
|
toArr(obj) {
|
||||||
|
let arr = [];
|
||||||
|
for (let key in obj) {
|
||||||
|
let o = {
|
||||||
|
key: key,
|
||||||
|
value: obj[key],
|
||||||
|
};
|
||||||
|
arr.push(o);
|
||||||
|
}
|
||||||
|
return arr;
|
||||||
|
},
|
||||||
|
// 给页面变化值赋值
|
||||||
|
doVal(arr = []) {
|
||||||
|
let total = 0;
|
||||||
|
arr.forEach((ele) => {
|
||||||
|
total += ele.Value * 1;
|
||||||
|
});
|
||||||
|
this.total = total;
|
||||||
|
this.labelArr = arr;
|
||||||
|
this.opt = createOpt(this.labelArr, this.colors);
|
||||||
|
},
|
||||||
|
// 切换数据
|
||||||
|
handlerTab(n) {
|
||||||
|
switch (n) {
|
||||||
|
case 0:
|
||||||
|
getUserAttestationGroupBy(Object.assign({}, this.getCtime2, this.form)).then((res) => {
|
||||||
|
let data = res.data || {};
|
||||||
|
this.doVal(data)
|
||||||
|
this.load = false;
|
||||||
|
});
|
||||||
|
case 1:
|
||||||
|
getIsjingGroupBy(Object.assign({}, this.getCtime2, this.form)).then((res) => {
|
||||||
|
let data = res.data || {};
|
||||||
|
this.doVal(data)
|
||||||
|
this.load = false;
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
getPicboolGroupBy(Object.assign({}, this.getCtime2, this.form)).then((res) => {
|
||||||
|
let data = res.data || {};
|
||||||
|
this.doVal(data)
|
||||||
|
this.load = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.wc-outter {
|
||||||
|
width: 618px;
|
||||||
|
height: 460px;
|
||||||
|
border: 2px solid #0f2a4d;
|
||||||
|
margin-left: 16px;
|
||||||
|
overflow: hidden;
|
||||||
|
.wc-inner {
|
||||||
|
width: 100%;
|
||||||
|
height: calc(100% - 48px);
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-start;
|
||||||
|
.d1 {
|
||||||
|
width: 280px;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
.d2 {
|
||||||
|
width: 300px;
|
||||||
|
margin-left: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,72 @@
|
|||||||
|
/*
|
||||||
|
* @Author: your name
|
||||||
|
* @Date: 2021-10-09 09:49:50
|
||||||
|
* @LastEditTime: 2021-10-28 13:07:24
|
||||||
|
* @LastEditors: Please set LastEditors
|
||||||
|
* @Description: In User Settings Edit
|
||||||
|
* @FilePath: /data-show/src/views/Index/userPortrait/opt.js
|
||||||
|
*/
|
||||||
|
import * as echarts from "echarts";
|
||||||
|
// let colors = ['#3373CC', '#CC9D12', '#54BF93','#f15c80', '#e4d354', '#8085e8', '#8d4653', '#91e8e1','#f7a35c','#90ed7d']
|
||||||
|
function createData(ds = [], colors) {
|
||||||
|
let arr = [];
|
||||||
|
ds.map((ele, index) => {
|
||||||
|
let obj = {
|
||||||
|
value: ele.Value,
|
||||||
|
name: ele.Key,
|
||||||
|
itemStyle: {
|
||||||
|
color: colors[index]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
arr.push(obj)
|
||||||
|
})
|
||||||
|
return arr;
|
||||||
|
}
|
||||||
|
export default function createOpt(ds = [], color = []) {
|
||||||
|
const data = createData(ds, color);
|
||||||
|
return {
|
||||||
|
series: [
|
||||||
|
{
|
||||||
|
name: 'Access From0',
|
||||||
|
type: 'pie',
|
||||||
|
radius: ['65%', '80%'],
|
||||||
|
avoidLabelOverlap: false,
|
||||||
|
label: {
|
||||||
|
show: false,
|
||||||
|
position: 'center',
|
||||||
|
lineHeight: 36
|
||||||
|
},
|
||||||
|
emphasis: {
|
||||||
|
label: {
|
||||||
|
show: true,
|
||||||
|
fontSize: '20',
|
||||||
|
color: "#ffff",
|
||||||
|
fontWeight: 'bold',
|
||||||
|
formatter: function (p) {
|
||||||
|
return `${p.data.name}\n${p.percent}%\n${p.data.value}`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
labelLine: {
|
||||||
|
show: false
|
||||||
|
},
|
||||||
|
data: data
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Access From1',
|
||||||
|
type: 'pie',
|
||||||
|
radius: ['86%', '94%'],
|
||||||
|
avoidLabelOverlap: false,
|
||||||
|
label: {
|
||||||
|
show: false,
|
||||||
|
position: 'center'
|
||||||
|
},
|
||||||
|
labelLine: {
|
||||||
|
show: false
|
||||||
|
},
|
||||||
|
center: ['50%', '50%'],//边框位置
|
||||||
|
data: data
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,73 @@
|
|||||||
|
<!--
|
||||||
|
* @Author: your name
|
||||||
|
* @Date: 2021-10-14 10:48:56
|
||||||
|
* @LastEditTime: 2021-11-09 13:16:07
|
||||||
|
* @LastEditors: Please set LastEditors
|
||||||
|
* @Description: In User Settings Edit
|
||||||
|
* @FilePath: /data-show/src/views/WeiboDetails/weiboCharacters/index.vue
|
||||||
|
-->
|
||||||
|
<template>
|
||||||
|
<div class="wc-outter">
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "weiboCharacters",
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
form: {
|
||||||
|
sBrand: "",
|
||||||
|
token: "",
|
||||||
|
},
|
||||||
|
colors: [
|
||||||
|
"#54BF93",
|
||||||
|
"#3373CC",
|
||||||
|
"#CC9D12",
|
||||||
|
"#f15c80",
|
||||||
|
"#e4d354",
|
||||||
|
"#8085e8",
|
||||||
|
"#8d4653",
|
||||||
|
"#91e8e1",
|
||||||
|
"#f7a35c",
|
||||||
|
"#90ed7d",
|
||||||
|
"#54BF93",
|
||||||
|
"#3373CC",
|
||||||
|
"#CC9D12",
|
||||||
|
"#f15c80",
|
||||||
|
"#e4d354",
|
||||||
|
"#8085e8",
|
||||||
|
"#8d4653",
|
||||||
|
"#91e8e1",
|
||||||
|
"#f7a35c",
|
||||||
|
"#90ed7d",
|
||||||
|
],
|
||||||
|
};
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.wc-outter {
|
||||||
|
width: 618px;
|
||||||
|
height: 460px;
|
||||||
|
border: 2px solid #0f2a4d;
|
||||||
|
margin-left: 16px;
|
||||||
|
overflow: hidden;
|
||||||
|
.wc-inner {
|
||||||
|
width: 100%;
|
||||||
|
height: calc(100% - 48px);
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-start;
|
||||||
|
.d1 {
|
||||||
|
width: 280px;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
.d2 {
|
||||||
|
width: 300px;
|
||||||
|
margin-left: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,136 @@
|
|||||||
|
<!--
|
||||||
|
* @Author: your name
|
||||||
|
* @Date: 2021-10-14 10:11:41
|
||||||
|
* @LastEditTime: 2021-11-09 13:16:55
|
||||||
|
* @LastEditors: Please set LastEditors
|
||||||
|
* @Description: In User Settings Edit
|
||||||
|
* @FilePath: /data-show/src/views/WeiboDetails/weiboCommunicationTrend/index.vue
|
||||||
|
-->
|
||||||
|
<template>
|
||||||
|
<div class="wct-outter" v-loading="load">
|
||||||
|
<v-label-div title="传播态势">
|
||||||
|
</v-label-div>
|
||||||
|
<div class="wct-inner">
|
||||||
|
<v-echarts :opt="opt"></v-echarts>
|
||||||
|
</div>
|
||||||
|
<!-- <div class="vshow" v-if="modelShow" :style="modelStyle">
|
||||||
|
<vLabel-div title="实时热点事件">
|
||||||
|
<a-button @click="closeBox">关闭</a-button>
|
||||||
|
</vLabel-div>
|
||||||
|
<div class="vshow-item" v-for="(item, index) in urlArr" :key="index">
|
||||||
|
<a class="vshow-link" :href="item.url" v-if="item.column == activeCol" target="tar">{{item.title}}</a>
|
||||||
|
</div>
|
||||||
|
</div> -->
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {getTimeCount} from "@/api/KeyMediaSeries/index.js"
|
||||||
|
import createOpt from "./opt"
|
||||||
|
export default {
|
||||||
|
name: "weibo-communication-trend",
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
//弹出框//
|
||||||
|
modelStyle:{
|
||||||
|
left: '',
|
||||||
|
top: ''
|
||||||
|
},
|
||||||
|
modelShow: false,
|
||||||
|
ecbox:{//图表宽高
|
||||||
|
width:618,
|
||||||
|
height:490
|
||||||
|
},
|
||||||
|
ecmodel:{//弹框宽高
|
||||||
|
width:300,
|
||||||
|
height:280
|
||||||
|
},
|
||||||
|
activeCol: 0,
|
||||||
|
//-*-//
|
||||||
|
load: false,
|
||||||
|
form: {
|
||||||
|
sBrand: "",
|
||||||
|
token: "",
|
||||||
|
sSource: '',
|
||||||
|
sSeriesName: '',
|
||||||
|
ilimitType: 0,
|
||||||
|
},
|
||||||
|
opt: createOpt(),
|
||||||
|
urlArr: []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.form.token = this.getToken;
|
||||||
|
this.form.sBrand = this.getBrand.brandname || "奥迪";
|
||||||
|
this.form.sSeriesName = this.getModel.name;
|
||||||
|
this.form.sSource = this.$route.query.source || "抖音";
|
||||||
|
if(this.form.sSource == '汽车之家') {
|
||||||
|
this.form.ilimitType = 1;
|
||||||
|
} else if (this.form.sSource == '懂车帝' && this.getCarCircle == 1) {
|
||||||
|
this.form.ilimitType = 2;
|
||||||
|
}
|
||||||
|
this.getData();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
//--弹出框--//
|
||||||
|
// clickMark(data) {
|
||||||
|
// this.activeCol = data.index
|
||||||
|
// this.modelShow = true;
|
||||||
|
// let mw = window.event;
|
||||||
|
// if((this.ecbox.width - mw.offsetX - 20) > this.ecmodel.width) {
|
||||||
|
// this.modelStyle.left = mw.offsetX + 20 + "px"
|
||||||
|
// } else {
|
||||||
|
// this.modelStyle.left = mw.offsetX - this.ecmodel.width - 20 + "px"
|
||||||
|
// }
|
||||||
|
// if((this.ecbox.height - mw.offsetY - 20) > this.ecmodel.height) {
|
||||||
|
// this.modelStyle.top = mw.offsetY + "px"
|
||||||
|
// } else {
|
||||||
|
// this.modelStyle.top = mw.offsetY - this.ecmodel.height + "px"
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// closeBox() {
|
||||||
|
// this.modelShow = false;
|
||||||
|
// },
|
||||||
|
//----//
|
||||||
|
getData() {
|
||||||
|
this.load = true;
|
||||||
|
let obj = Object.assign({}, this.getCtime2, this.form);
|
||||||
|
getTimeCount(obj).then(res => {
|
||||||
|
let data = res.data || [];
|
||||||
|
let dx = []; //time
|
||||||
|
let ds = []; //value
|
||||||
|
data.forEach(ele => {
|
||||||
|
dx.push(ele.Time);
|
||||||
|
ds.push(ele.value);
|
||||||
|
})
|
||||||
|
this.opt = createOpt(dx, ds)
|
||||||
|
this.load = false
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.wct-outter {
|
||||||
|
width: 936px;
|
||||||
|
height: 460px;
|
||||||
|
border: 2px solid #0f2a4d;
|
||||||
|
.wct-inner {
|
||||||
|
width: 100%;
|
||||||
|
height: calc(100% - 48px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.vshow{
|
||||||
|
position: absolute;
|
||||||
|
width: 300px;
|
||||||
|
background: rgb(3, 18, 36);
|
||||||
|
border: 4px solid #0f2a4d;
|
||||||
|
.vshow-item {
|
||||||
|
padding: 11px;
|
||||||
|
width: 100%;
|
||||||
|
font-size: 15px;
|
||||||
|
color: rgb(54, 189, 239);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,116 @@
|
|||||||
|
/*
|
||||||
|
* @Author: your name
|
||||||
|
* @Date: 2021-10-12 15:32:24
|
||||||
|
* @LastEditTime: 2021-11-19 19:50:21
|
||||||
|
* @LastEditors: Please set LastEditors
|
||||||
|
* @Description: In User Settings Edit
|
||||||
|
* @FilePath: /data-show/src/views/BrandInsight/weiboVolumeTrend/opt.js
|
||||||
|
*/
|
||||||
|
import * as echarts from "echarts";
|
||||||
|
import { bigNumberTransform } from "@/utils/gol/dataTool"
|
||||||
|
export default function createOpt(dx = [], ds = [], hotIndex = []) {
|
||||||
|
let mark = [];
|
||||||
|
hotIndex.forEach(ele => {
|
||||||
|
let obj = {
|
||||||
|
name: 'Max',
|
||||||
|
xAxis: ele, yAxis: ds[ele],
|
||||||
|
symbol: 'pin',
|
||||||
|
symbolSize: 16,
|
||||||
|
symbolOffset: [0, '-70%'],
|
||||||
|
}
|
||||||
|
mark.push(obj)
|
||||||
|
})
|
||||||
|
return {
|
||||||
|
grid: {
|
||||||
|
top: 16,
|
||||||
|
left: 16,
|
||||||
|
right: "5%",
|
||||||
|
bottom: 10,
|
||||||
|
containLabel: true,
|
||||||
|
},
|
||||||
|
tooltip: {
|
||||||
|
trigger: "axis",
|
||||||
|
backgroundColor: "#08182F",
|
||||||
|
color: "#fff",
|
||||||
|
borderColor: "#3373CC",
|
||||||
|
textStyle: {
|
||||||
|
color: "#fff", //设置文字颜色
|
||||||
|
},
|
||||||
|
extraCssText: "box-shadow: 0px 0px 10px 0px #3373CC;"
|
||||||
|
},
|
||||||
|
xAxis: {
|
||||||
|
type: 'category',
|
||||||
|
boundaryGap: false,
|
||||||
|
axisTick: {
|
||||||
|
show: false,
|
||||||
|
},
|
||||||
|
axisLabel: {
|
||||||
|
formatter: (value) => {
|
||||||
|
let rex = "00:00:00";
|
||||||
|
let isCont = false;
|
||||||
|
let str = value;
|
||||||
|
for(let i = 0;i<dx.length-1;i++){
|
||||||
|
//连续两条带小时
|
||||||
|
if(dx[i].indexOf(rex) === -1 && dx[i+1].indexOf(rex) === -1){
|
||||||
|
isCont = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(isCont == true) {
|
||||||
|
str = value.substring(10, 16)
|
||||||
|
} else {
|
||||||
|
str = value.substring(5, 10)
|
||||||
|
}
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
axisLine: {
|
||||||
|
show: false,
|
||||||
|
lineStyle: {
|
||||||
|
color: "#fff",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
data: dx
|
||||||
|
},
|
||||||
|
yAxis: {
|
||||||
|
type: 'value',
|
||||||
|
axisLine: {
|
||||||
|
show: false,
|
||||||
|
lineStyle: {
|
||||||
|
color: "#FFF",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
axisLabel: {
|
||||||
|
formatter: (value) => {
|
||||||
|
let str = bigNumberTransform(value);
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
splitLine: {
|
||||||
|
lineStyle: {
|
||||||
|
type: "dashed", // y轴分割线类型
|
||||||
|
color: "#012b4b",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
series: [
|
||||||
|
{
|
||||||
|
data: ds,
|
||||||
|
type: 'line',
|
||||||
|
color: '#546fc5',
|
||||||
|
areaStyle: {normal: {
|
||||||
|
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
|
||||||
|
offset: 0,
|
||||||
|
color: '#546fc5'
|
||||||
|
}, {
|
||||||
|
offset: 1,
|
||||||
|
color: 'rgba(0,0,0,0)'
|
||||||
|
}]),
|
||||||
|
}},
|
||||||
|
markPoint: {
|
||||||
|
data: mark,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
}
|
@ -0,0 +1,137 @@
|
|||||||
|
<!--
|
||||||
|
* @Author: your name
|
||||||
|
* @Date: 2021-10-14 10:11:41
|
||||||
|
* @LastEditTime: 2021-11-09 13:16:55
|
||||||
|
* @LastEditors: Please set LastEditors
|
||||||
|
* @Description: In User Settings Edit
|
||||||
|
* @FilePath: /data-show/src/views/WeiboDetails/weiboCommunicationTrend/index.vue
|
||||||
|
-->
|
||||||
|
<template>
|
||||||
|
<div class="wct-outter" v-loading="load">
|
||||||
|
<v-label-div title="传播态势">
|
||||||
|
</v-label-div>
|
||||||
|
<div class="wct-inner">
|
||||||
|
<v-echarts :opt="opt"></v-echarts>
|
||||||
|
</div>
|
||||||
|
<!-- <div class="vshow" v-if="modelShow" :style="modelStyle">
|
||||||
|
<vLabel-div title="实时热点事件">
|
||||||
|
<a-button @click="closeBox">关闭</a-button>
|
||||||
|
</vLabel-div>
|
||||||
|
<div class="vshow-item" v-for="(item, index) in urlArr" :key="index">
|
||||||
|
<a class="vshow-link" :href="item.url" v-if="item.column == activeCol" target="tar">{{item.title}}</a>
|
||||||
|
</div>
|
||||||
|
</div> -->
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {getTimeCount} from "@/api/KeyMediaSeries/index.js"
|
||||||
|
import {doStr} from "@/utils/gol/dataTool"
|
||||||
|
import createOpt from "./opt"
|
||||||
|
export default {
|
||||||
|
name: "weibo-communication-trend",
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
//弹出框//
|
||||||
|
modelStyle:{
|
||||||
|
left: '',
|
||||||
|
top: ''
|
||||||
|
},
|
||||||
|
modelShow: false,
|
||||||
|
ecbox:{//图表宽高
|
||||||
|
width:618,
|
||||||
|
height:490
|
||||||
|
},
|
||||||
|
ecmodel:{//弹框宽高
|
||||||
|
width:300,
|
||||||
|
height:280
|
||||||
|
},
|
||||||
|
activeCol: 0,
|
||||||
|
//-*-//
|
||||||
|
load: false,
|
||||||
|
form: {
|
||||||
|
sBrand: "",
|
||||||
|
token: "",
|
||||||
|
sSource: '',
|
||||||
|
sSeriesName: '',
|
||||||
|
ilimitType: 0,
|
||||||
|
},
|
||||||
|
opt: createOpt(),
|
||||||
|
urlArr: []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.form.token = this.getToken;
|
||||||
|
this.form.sBrand = this.getBrand.brandname || "奥迪";
|
||||||
|
this.form.sSeriesName = this.getModel.name;
|
||||||
|
this.form.sSource = this.$route.query.source || "抖音";
|
||||||
|
if(this.form.sSource == '汽车之家') {
|
||||||
|
this.form.ilimitType = 1;
|
||||||
|
} else if (this.form.sSource == '懂车帝' && this.getCarCircle == 1) {
|
||||||
|
this.form.ilimitType = 2;
|
||||||
|
}
|
||||||
|
this.getData();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
//--弹出框--//
|
||||||
|
// clickMark(data) {
|
||||||
|
// this.activeCol = data.index
|
||||||
|
// this.modelShow = true;
|
||||||
|
// let mw = window.event;
|
||||||
|
// if((this.ecbox.width - mw.offsetX - 20) > this.ecmodel.width) {
|
||||||
|
// this.modelStyle.left = mw.offsetX + 20 + "px"
|
||||||
|
// } else {
|
||||||
|
// this.modelStyle.left = mw.offsetX - this.ecmodel.width - 20 + "px"
|
||||||
|
// }
|
||||||
|
// if((this.ecbox.height - mw.offsetY - 20) > this.ecmodel.height) {
|
||||||
|
// this.modelStyle.top = mw.offsetY + "px"
|
||||||
|
// } else {
|
||||||
|
// this.modelStyle.top = mw.offsetY - this.ecmodel.height + "px"
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// closeBox() {
|
||||||
|
// this.modelShow = false;
|
||||||
|
// },
|
||||||
|
//----//
|
||||||
|
getData() {
|
||||||
|
this.load = true;
|
||||||
|
let obj = Object.assign({}, this.getCtime2, this.form);
|
||||||
|
getTimeCount(obj).then(res => {
|
||||||
|
let data = res.data || [];
|
||||||
|
let dx = []; //time
|
||||||
|
let ds = []; //value
|
||||||
|
data.forEach(ele => {
|
||||||
|
dx.push(ele.Time);
|
||||||
|
ds.push(ele.value);
|
||||||
|
})
|
||||||
|
this.opt = createOpt(dx, ds)
|
||||||
|
this.load = false
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.wct-outter {
|
||||||
|
width: 1887px;
|
||||||
|
height: 460px;
|
||||||
|
border: 2px solid #0f2a4d;
|
||||||
|
.wct-inner {
|
||||||
|
width: 100%;
|
||||||
|
height: calc(100% - 48px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.vshow{
|
||||||
|
position: absolute;
|
||||||
|
width: 300px;
|
||||||
|
background: rgb(3, 18, 36);
|
||||||
|
border: 4px solid #0f2a4d;
|
||||||
|
.vshow-item {
|
||||||
|
padding: 11px;
|
||||||
|
width: 100%;
|
||||||
|
font-size: 15px;
|
||||||
|
color: rgb(54, 189, 239);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,116 @@
|
|||||||
|
/*
|
||||||
|
* @Author: your name
|
||||||
|
* @Date: 2021-10-12 15:32:24
|
||||||
|
* @LastEditTime: 2021-11-19 19:50:21
|
||||||
|
* @LastEditors: Please set LastEditors
|
||||||
|
* @Description: In User Settings Edit
|
||||||
|
* @FilePath: /data-show/src/views/BrandInsight/weiboVolumeTrend/opt.js
|
||||||
|
*/
|
||||||
|
import * as echarts from "echarts";
|
||||||
|
import { bigNumberTransform } from "@/utils/gol/dataTool"
|
||||||
|
export default function createOpt(dx = [], ds = [], hotIndex = []) {
|
||||||
|
let mark = [];
|
||||||
|
hotIndex.forEach(ele => {
|
||||||
|
let obj = {
|
||||||
|
name: 'Max',
|
||||||
|
xAxis: ele, yAxis: ds[ele],
|
||||||
|
symbol: 'pin',
|
||||||
|
symbolSize: 16,
|
||||||
|
symbolOffset: [0, '-70%'],
|
||||||
|
}
|
||||||
|
mark.push(obj)
|
||||||
|
})
|
||||||
|
return {
|
||||||
|
grid: {
|
||||||
|
top: 16,
|
||||||
|
left: 16,
|
||||||
|
right: "5%",
|
||||||
|
bottom: 10,
|
||||||
|
containLabel: true,
|
||||||
|
},
|
||||||
|
tooltip: {
|
||||||
|
trigger: "axis",
|
||||||
|
backgroundColor: "#08182F",
|
||||||
|
color: "#fff",
|
||||||
|
borderColor: "#3373CC",
|
||||||
|
textStyle: {
|
||||||
|
color: "#fff", //设置文字颜色
|
||||||
|
},
|
||||||
|
extraCssText: "box-shadow: 0px 0px 10px 0px #3373CC;"
|
||||||
|
},
|
||||||
|
xAxis: {
|
||||||
|
type: 'category',
|
||||||
|
boundaryGap: false,
|
||||||
|
axisTick: {
|
||||||
|
show: false,
|
||||||
|
},
|
||||||
|
axisLabel: {
|
||||||
|
formatter: (value) => {
|
||||||
|
let rex = "00:00:00";
|
||||||
|
let isCont = false;
|
||||||
|
let str = value;
|
||||||
|
for(let i = 0;i<dx.length-1;i++){
|
||||||
|
//连续两条带小时
|
||||||
|
if(dx[i].indexOf(rex) === -1 && dx[i+1].indexOf(rex) === -1){
|
||||||
|
isCont = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(isCont == true) {
|
||||||
|
str = value.substring(10, 16)
|
||||||
|
} else {
|
||||||
|
str = value.substring(5, 10)
|
||||||
|
}
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
axisLine: {
|
||||||
|
show: false,
|
||||||
|
lineStyle: {
|
||||||
|
color: "#fff",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
data: dx
|
||||||
|
},
|
||||||
|
yAxis: {
|
||||||
|
type: 'value',
|
||||||
|
axisLine: {
|
||||||
|
show: false,
|
||||||
|
lineStyle: {
|
||||||
|
color: "#FFF",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
axisLabel: {
|
||||||
|
formatter: (value) => {
|
||||||
|
let str = bigNumberTransform(value);
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
splitLine: {
|
||||||
|
lineStyle: {
|
||||||
|
type: "dashed", // y轴分割线类型
|
||||||
|
color: "#012b4b",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
series: [
|
||||||
|
{
|
||||||
|
data: ds,
|
||||||
|
type: 'line',
|
||||||
|
color: '#546fc5',
|
||||||
|
areaStyle: {normal: {
|
||||||
|
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
|
||||||
|
offset: 0,
|
||||||
|
color: '#546fc5'
|
||||||
|
}, {
|
||||||
|
offset: 1,
|
||||||
|
color: 'rgba(0,0,0,0)'
|
||||||
|
}]),
|
||||||
|
}},
|
||||||
|
markPoint: {
|
||||||
|
data: mark,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
}
|
@ -0,0 +1,38 @@
|
|||||||
|
<!--
|
||||||
|
* @Author: your name
|
||||||
|
* @Date: 2021-10-14 10:11:41
|
||||||
|
* @LastEditTime: 2021-11-09 13:16:55
|
||||||
|
* @LastEditors: Please set LastEditors
|
||||||
|
* @Description: In User Settings Edit
|
||||||
|
* @FilePath: /data-show/src/views/WeiboDetails/weiboCommunicationTrend/index.vue
|
||||||
|
-->
|
||||||
|
<template>
|
||||||
|
<div class="wct-outter">
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "weibo-communication-trend",
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
form: {
|
||||||
|
sBrand: "",
|
||||||
|
token: "",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.wct-outter {
|
||||||
|
width: 1872px;
|
||||||
|
height: 460px;
|
||||||
|
border: 2px solid #0f2a4d;
|
||||||
|
.wct-inner {
|
||||||
|
width: 100%;
|
||||||
|
height: calc(100% - 48px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,38 @@
|
|||||||
|
<!--
|
||||||
|
* @Author: your name
|
||||||
|
* @Date: 2021-10-14 10:11:41
|
||||||
|
* @LastEditTime: 2021-11-09 13:16:55
|
||||||
|
* @LastEditors: Please set LastEditors
|
||||||
|
* @Description: In User Settings Edit
|
||||||
|
* @FilePath: /data-show/src/views/WeiboDetails/weiboCommunicationTrend/index.vue
|
||||||
|
-->
|
||||||
|
<template>
|
||||||
|
<div class="wct-outter">
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "weibo-communication-trend",
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
form: {
|
||||||
|
sBrand: "",
|
||||||
|
token: "",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.wct-outter {
|
||||||
|
width: 618px;
|
||||||
|
height: 460px;
|
||||||
|
border: 2px solid #0f2a4d;
|
||||||
|
.wct-inner {
|
||||||
|
width: 100%;
|
||||||
|
height: calc(100% - 48px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,81 @@
|
|||||||
|
/*
|
||||||
|
* @Author: your name
|
||||||
|
* @Date: 2021-10-14 16:05:12
|
||||||
|
* @LastEditTime: 2021-11-04 17:05:41
|
||||||
|
* @LastEditors: Please set LastEditors
|
||||||
|
* @Description: In User Settings Edit
|
||||||
|
* @FilePath: /data-show/src/views/WeiboDetails/weiboContentTOPVolume/opt.js
|
||||||
|
* startAngle: 180,
|
||||||
|
*/
|
||||||
|
import * as echarts from "echarts";
|
||||||
|
export default function createOpt(name, color, num, maxVal) {
|
||||||
|
return {
|
||||||
|
tooltip: {
|
||||||
|
backgroundColor: "#08182F",
|
||||||
|
color: "#fff",
|
||||||
|
borderColor: "#3373CC",
|
||||||
|
textStyle: {
|
||||||
|
color: "#fff", //设置文字颜色
|
||||||
|
},
|
||||||
|
extraCssText: "box-shadow: 0px 0px 10px 0px #3373CC;",
|
||||||
|
formatter: function(param) {
|
||||||
|
let value = param.data.value;
|
||||||
|
let name = param.data.name;
|
||||||
|
return `<span>${name}</span><br><span>声量:${value}</span>`
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: [
|
||||||
|
{
|
||||||
|
name: name,
|
||||||
|
type: 'gauge',
|
||||||
|
startAngle: 180,
|
||||||
|
endAngle: 0,
|
||||||
|
min: 0,
|
||||||
|
max: maxVal * 5,
|
||||||
|
splitNumber: 5,
|
||||||
|
detail: { show: false, formatter: '{value}%' },
|
||||||
|
axisLine: {
|
||||||
|
show: true,
|
||||||
|
lineStyle: {
|
||||||
|
width: 7,
|
||||||
|
color: [
|
||||||
|
[1, new echarts.graphic.LinearGradient(0, 0, 1, 0, [
|
||||||
|
{
|
||||||
|
offset: 0,
|
||||||
|
color: "#020f1f"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
offset: 1,
|
||||||
|
color: color
|
||||||
|
}
|
||||||
|
])
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
axisLabel: {
|
||||||
|
distance: -30,
|
||||||
|
color: "#d8d8d8",
|
||||||
|
},
|
||||||
|
splitLine: {
|
||||||
|
distance: -6,
|
||||||
|
length: 12,
|
||||||
|
lineStyle: {
|
||||||
|
color: '#d8d8d8',
|
||||||
|
width: 2
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 刻度线
|
||||||
|
axisTick: {
|
||||||
|
show: true,
|
||||||
|
length: 15,
|
||||||
|
lineStyle: {
|
||||||
|
color: "auto",
|
||||||
|
width: 5
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: [{ value: num, name: name, title: {show: true, color: color,fontWeight: 'bold'},itemStyle:{color: color}}],
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
}
|
@ -0,0 +1,66 @@
|
|||||||
|
<!--
|
||||||
|
* @Author: your name
|
||||||
|
* @Date: 2021-10-14 15:54:06
|
||||||
|
* @LastEditTime: 2021-11-04 17:03:24
|
||||||
|
* @LastEditors: Please set LastEditors
|
||||||
|
* @Description: In User Settings Edit
|
||||||
|
* @FilePath: /data-show/src/views/WeiboDetails/weiboContentTOPVolume/index.vue
|
||||||
|
-->
|
||||||
|
<template>
|
||||||
|
<div class="wct-outter">
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "weiboContentTOPVolume",
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
form: {
|
||||||
|
sBrand: "",
|
||||||
|
token: "",
|
||||||
|
}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.wct-outter {
|
||||||
|
width: 936px;
|
||||||
|
height: 460px;
|
||||||
|
border: 2px solid #0f2a4d;
|
||||||
|
margin-left: 16px;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
.wct-inner {
|
||||||
|
width: 100%;
|
||||||
|
margin-top: 16px;
|
||||||
|
height: calc(100% - 48px);
|
||||||
|
.wct-d1 {
|
||||||
|
position: relative;
|
||||||
|
width: 233px;
|
||||||
|
height: 206px;
|
||||||
|
display: inline-block;
|
||||||
|
.wct-d1-dd1 {
|
||||||
|
position: absolute;
|
||||||
|
padding: 0px 16px;
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
top: 140px;
|
||||||
|
left: 0px;
|
||||||
|
span {
|
||||||
|
color: #d8d8d8;
|
||||||
|
font-size: 12px;
|
||||||
|
.ss1 {
|
||||||
|
font-family: Bebas;
|
||||||
|
font-size: 16px;
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,128 @@
|
|||||||
|
<!--
|
||||||
|
* @Author: your name
|
||||||
|
* @Date: 2021-10-14 10:24:56
|
||||||
|
* @LastEditTime: 2021-11-09 13:17:24
|
||||||
|
* @LastEditors: Please set LastEditors
|
||||||
|
* @Description: In User Settings Edit
|
||||||
|
* @FilePath: /data-show/src/views/WeiboDetails/weiboContentType/index.vue
|
||||||
|
-->
|
||||||
|
<template>
|
||||||
|
<div class="wct-outter" v-loading="load">
|
||||||
|
<v-label-div title="内容类型"> </v-label-div>
|
||||||
|
<div class="wct-inner">
|
||||||
|
<div class="d1">
|
||||||
|
<v-echarts :opt="opt"></v-echarts>
|
||||||
|
</div>
|
||||||
|
<div class="d2">
|
||||||
|
<v-label-ctx
|
||||||
|
v-for="(item, index) in labelArr"
|
||||||
|
:key="index"
|
||||||
|
:label="item.key"
|
||||||
|
:cont="item.value"
|
||||||
|
:percentage="((item.value / total) * 100).toFixed(2) + '%'"
|
||||||
|
:color="colors[index]"
|
||||||
|
:eStyle="{ height: '8.54rem' }"
|
||||||
|
></v-label-ctx>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {getWtypeWeiBo0528} from "@/api/KeyMediaSeries/index.js"
|
||||||
|
import createOpt from "./opt";
|
||||||
|
export default {
|
||||||
|
name: "weiboContentType",
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
load: false,
|
||||||
|
form: {
|
||||||
|
sBrand: "",
|
||||||
|
token: "",
|
||||||
|
sSource: '',
|
||||||
|
sSeriesName: '',
|
||||||
|
ilimitType: 0,
|
||||||
|
},
|
||||||
|
labelArr: [],
|
||||||
|
total: 0,
|
||||||
|
opt: createOpt(),
|
||||||
|
colors: [
|
||||||
|
"#54BF93",
|
||||||
|
"#3373CC",
|
||||||
|
"#CC9D12",
|
||||||
|
"#f15c80",
|
||||||
|
"#e4d354",
|
||||||
|
"#8085e8",
|
||||||
|
"#8d4653",
|
||||||
|
"#91e8e1",
|
||||||
|
"#f7a35c",
|
||||||
|
"#90ed7d",
|
||||||
|
"#54BF93",
|
||||||
|
"#3373CC",
|
||||||
|
"#CC9D12",
|
||||||
|
"#f15c80",
|
||||||
|
"#e4d354",
|
||||||
|
"#8085e8",
|
||||||
|
"#8d4653",
|
||||||
|
"#91e8e1",
|
||||||
|
"#f7a35c",
|
||||||
|
"#90ed7d",
|
||||||
|
],
|
||||||
|
};
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.form.token = this.getToken;
|
||||||
|
this.form.sBrand = this.getBrand.brandname || "奥迪";
|
||||||
|
this.form.sSeriesName = this.getModel.name;
|
||||||
|
this.form.sSource = this.$route.query.source || "抖音";
|
||||||
|
if(this.form.sSource == '汽车之家') {
|
||||||
|
this.form.ilimitType = 1;
|
||||||
|
} else if (this.form.sSource == '懂车帝' && this.getCarCircle == 1) {
|
||||||
|
this.form.ilimitType = 2;
|
||||||
|
}
|
||||||
|
this.getData();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
getData() {
|
||||||
|
this.load = true;
|
||||||
|
let obj = Object.assign({}, this.getCtime2, this.form);
|
||||||
|
getWtypeWeiBo0528(obj).then((res) => {
|
||||||
|
let data = res.data || [];
|
||||||
|
this.doVal(data);
|
||||||
|
this.load = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
doVal(arr = []) {
|
||||||
|
let total = 0;
|
||||||
|
arr.forEach((ele) => {
|
||||||
|
total += ele.value * 1;
|
||||||
|
});
|
||||||
|
this.total = total;
|
||||||
|
this.labelArr = arr;
|
||||||
|
this.opt = createOpt(this.labelArr, this.colors);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.wct-outter {
|
||||||
|
width: 618px;
|
||||||
|
height: 460px;
|
||||||
|
border: 2px solid #0f2a4d;
|
||||||
|
overflow: hidden;
|
||||||
|
.wct-inner {
|
||||||
|
width: 100%;
|
||||||
|
height: calc(100% - 48px);
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-start;
|
||||||
|
.d1 {
|
||||||
|
width: 280px;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
.d2 {
|
||||||
|
width: 300px;
|
||||||
|
margin-left: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,72 @@
|
|||||||
|
/*
|
||||||
|
* @Author: your name
|
||||||
|
* @Date: 2021-10-09 09:49:50
|
||||||
|
* @LastEditTime: 2021-10-28 13:07:24
|
||||||
|
* @LastEditors: Please set LastEditors
|
||||||
|
* @Description: In User Settings Edit
|
||||||
|
* @FilePath: /data-show/src/views/Index/userPortrait/opt.js
|
||||||
|
*/
|
||||||
|
import * as echarts from "echarts";
|
||||||
|
// let colors = ['#3373CC', '#CC9D12', '#54BF93','#f15c80', '#e4d354', '#8085e8', '#8d4653', '#91e8e1','#f7a35c','#90ed7d']
|
||||||
|
function createData(ds = [], colors) {
|
||||||
|
let arr = [];
|
||||||
|
ds.map((ele, index) => {
|
||||||
|
let obj = {
|
||||||
|
value: ele.value,
|
||||||
|
name: ele.key,
|
||||||
|
itemStyle: {
|
||||||
|
color: colors[index]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
arr.push(obj)
|
||||||
|
})
|
||||||
|
return arr;
|
||||||
|
}
|
||||||
|
export default function createOpt(ds = [], color = []) {
|
||||||
|
const data = createData(ds, color);
|
||||||
|
return {
|
||||||
|
series: [
|
||||||
|
{
|
||||||
|
name: 'Access From0',
|
||||||
|
type: 'pie',
|
||||||
|
radius: ['65%', '80%'],
|
||||||
|
avoidLabelOverlap: false,
|
||||||
|
label: {
|
||||||
|
show: false,
|
||||||
|
position: 'center',
|
||||||
|
lineHeight: 36
|
||||||
|
},
|
||||||
|
emphasis: {
|
||||||
|
label: {
|
||||||
|
show: true,
|
||||||
|
fontSize: '20',
|
||||||
|
color: "#ffff",
|
||||||
|
fontWeight: 'bold',
|
||||||
|
formatter: function (p) {
|
||||||
|
return `${p.data.name}\n${p.percent}%\n${p.data.value}`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
labelLine: {
|
||||||
|
show: false
|
||||||
|
},
|
||||||
|
data: data
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Access From1',
|
||||||
|
type: 'pie',
|
||||||
|
radius: ['86%', '94%'],
|
||||||
|
avoidLabelOverlap: false,
|
||||||
|
label: {
|
||||||
|
show: false,
|
||||||
|
position: 'center'
|
||||||
|
},
|
||||||
|
labelLine: {
|
||||||
|
show: false
|
||||||
|
},
|
||||||
|
center: ['50%', '50%'],//边框位置
|
||||||
|
data: data
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,50 @@
|
|||||||
|
<!--
|
||||||
|
* @Author: your name
|
||||||
|
* @Date: 2021-10-14 10:24:56
|
||||||
|
* @LastEditTime: 2021-11-09 13:17:24
|
||||||
|
* @LastEditors: Please set LastEditors
|
||||||
|
* @Description: In User Settings Edit
|
||||||
|
* @FilePath: /data-show/src/views/WeiboDetails/weiboContentType/index.vue
|
||||||
|
-->
|
||||||
|
<template>
|
||||||
|
<div class="wct-outter">
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "weiboContentType",
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
form: {
|
||||||
|
sBrand: "",
|
||||||
|
token: "",
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.wct-outter {
|
||||||
|
width: 618px;
|
||||||
|
height: 460px;
|
||||||
|
border: 2px solid #0f2a4d;
|
||||||
|
margin-left: 16px;
|
||||||
|
overflow: hidden;
|
||||||
|
.wct-inner {
|
||||||
|
width: 100%;
|
||||||
|
height: calc(100% - 48px);
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-start;
|
||||||
|
.d1 {
|
||||||
|
width: 280px;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
.d2 {
|
||||||
|
width: 300px;
|
||||||
|
margin-left: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,116 @@
|
|||||||
|
<!--
|
||||||
|
* @Author: your name
|
||||||
|
* @Date: 2021-10-14 11:25:20
|
||||||
|
* @LastEditTime: 2021-11-10 17:13:41
|
||||||
|
* @LastEditors: Please set LastEditors
|
||||||
|
* @Description: In User Settings Edit
|
||||||
|
* @FilePath: /data-show/src/views/WeiboDetails/weiboUserActiveArea/index.vue
|
||||||
|
-->
|
||||||
|
<template>
|
||||||
|
<div class="wua-outter" v-loading="load">
|
||||||
|
<v-label-div title="用户活跃地区"> </v-label-div>
|
||||||
|
<div class="wua-inner">
|
||||||
|
<div class="d1">
|
||||||
|
<v-echarts :opt="opt1"></v-echarts>
|
||||||
|
</div>
|
||||||
|
<div class="d2">
|
||||||
|
<v-echars-map :opt="opt2"></v-echars-map>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {getUserRegionGroupBy} from "@/api/KeyMediaSeries/index.js"
|
||||||
|
import createOptD1 from "./opt1";
|
||||||
|
import createOptD2 from "./opt2";
|
||||||
|
export default {
|
||||||
|
name: "weiboUserActiveArea",
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
load: false,
|
||||||
|
form: {
|
||||||
|
sBrand: "",
|
||||||
|
token: "",
|
||||||
|
sSource: '',
|
||||||
|
sSeriesName: '',
|
||||||
|
ilimitType: 0,
|
||||||
|
},
|
||||||
|
opt1: createOptD1(),
|
||||||
|
opt2: createOptD2(),
|
||||||
|
};
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.form.token = this.getToken;
|
||||||
|
this.form.sBrand = this.getBrand.brandname || "奥迪";
|
||||||
|
this.form.sSeriesName = this.getModel.name;
|
||||||
|
this.form.sSource = this.$route.query.source || "抖音";
|
||||||
|
if(this.form.sSource == '汽车之家') {
|
||||||
|
this.form.ilimitType = 1;
|
||||||
|
} else if (this.form.sSource == '懂车帝' && this.getCarCircle == 1) {
|
||||||
|
this.form.ilimitType = 2;
|
||||||
|
}
|
||||||
|
this.getData();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
getData() {
|
||||||
|
this.load = true;
|
||||||
|
let obj = Object.assign({}, this.getCtime2, this.form);
|
||||||
|
getUserRegionGroupBy(obj).then((res) => {
|
||||||
|
let data = res.data || {};
|
||||||
|
let dx = []; //省份
|
||||||
|
let ds = []; //数据
|
||||||
|
let arr = [];
|
||||||
|
data.forEach((ele) => {
|
||||||
|
dx.push(ele.Key);
|
||||||
|
ds.push(ele.Value);
|
||||||
|
let obj = {
|
||||||
|
name: ele.Key,
|
||||||
|
value: ele.Value,
|
||||||
|
};
|
||||||
|
arr.push(obj)
|
||||||
|
});
|
||||||
|
let dm = arr //省份和数据
|
||||||
|
this.opt1 = createOptD1(dx, ds);
|
||||||
|
this.opt2 = createOptD2(dm);
|
||||||
|
this.load = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
// 将对象变成数组
|
||||||
|
toArr(obj) {
|
||||||
|
let arr = [];
|
||||||
|
for (let key in obj) {
|
||||||
|
let o = {
|
||||||
|
name: key,
|
||||||
|
value: obj[key] * 1,
|
||||||
|
};
|
||||||
|
arr.push(o);
|
||||||
|
}
|
||||||
|
return arr;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.wua-outter {
|
||||||
|
width: 936px;
|
||||||
|
height: 460px;
|
||||||
|
border: 2px solid #0f2a4d;
|
||||||
|
.wua-inner {
|
||||||
|
width: 100%;
|
||||||
|
height: calc(100% - 48px);
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-start;
|
||||||
|
.d1 {
|
||||||
|
width: 479px;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
.d2 {
|
||||||
|
width: 420px;
|
||||||
|
height: 100%;
|
||||||
|
margin-left: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,82 @@
|
|||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @Author: your name
|
||||||
|
* @Date: 2021-10-09 12:38:34
|
||||||
|
* @LastEditTime: 2021-10-14 11:48:19
|
||||||
|
* @LastEditors: Please set LastEditors
|
||||||
|
* @Description: In User Settings Edit
|
||||||
|
* @FilePath: /data-show/src/views/Index/tailInsight/opt.js
|
||||||
|
*/
|
||||||
|
import * as echarts from "echarts";
|
||||||
|
import { bigNumberTransform } from "@/utils/gol/dataTool"
|
||||||
|
export default function createOptD1(dx=[],ds=[]) {
|
||||||
|
return {
|
||||||
|
grid: {
|
||||||
|
left: 16,
|
||||||
|
right: '5%',
|
||||||
|
bottom: 10,
|
||||||
|
top: "1%",
|
||||||
|
containLabel: true
|
||||||
|
},
|
||||||
|
tooltip: {
|
||||||
|
trigger: "axis",
|
||||||
|
backgroundColor: "#08182F",
|
||||||
|
color: "#fff",
|
||||||
|
borderColor: "#3373CC",
|
||||||
|
textStyle: {
|
||||||
|
color: "#fff", //设置文字颜色
|
||||||
|
},
|
||||||
|
extraCssText: "box-shadow: 0px 0px 10px 0px #3373CC;"
|
||||||
|
},
|
||||||
|
xAxis: {
|
||||||
|
type: 'value',
|
||||||
|
axisLine: {
|
||||||
|
show: false,
|
||||||
|
lineStyle: {
|
||||||
|
color: "#fff",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
axisLabel: {
|
||||||
|
formatter: (value) => {
|
||||||
|
let str = bigNumberTransform(value);
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
splitLine: {
|
||||||
|
lineStyle: {
|
||||||
|
type: "dashed", // y轴分割线类型
|
||||||
|
color: "#012b4b",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
yAxis: {
|
||||||
|
type: 'category',
|
||||||
|
data: dx,
|
||||||
|
axisTick: {
|
||||||
|
show: false,
|
||||||
|
},
|
||||||
|
axisLine: {
|
||||||
|
show: false,
|
||||||
|
lineStyle: {
|
||||||
|
color: "#fff",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
inverse: true
|
||||||
|
},
|
||||||
|
series: [
|
||||||
|
{
|
||||||
|
type: 'bar',
|
||||||
|
barWidth: 20,
|
||||||
|
data: ds,
|
||||||
|
color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [{
|
||||||
|
offset: 0,
|
||||||
|
color: 'rgba(59,106,179,0.4)'
|
||||||
|
}, {
|
||||||
|
offset: 1,
|
||||||
|
color: '#2f68b4'
|
||||||
|
}]),
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,94 @@
|
|||||||
|
/*
|
||||||
|
* @Author: your name
|
||||||
|
* @Date: 2021-10-14 11:53:16
|
||||||
|
* @LastEditTime: 2021-11-04 17:17:02
|
||||||
|
* @LastEditors: Please set LastEditors
|
||||||
|
* @Description: In User Settings Edit
|
||||||
|
* @FilePath: /data-show/src/views/WeiboDetails/weiboUserActiveArea/opt2.js
|
||||||
|
*/
|
||||||
|
|
||||||
|
export default function createOptD2(dm) {
|
||||||
|
return {
|
||||||
|
tooltip: {
|
||||||
|
trigger: "item",
|
||||||
|
backgroundColor: "#08182F",
|
||||||
|
color: "#fff",
|
||||||
|
borderColor: "#3373CC",
|
||||||
|
textStyle: {
|
||||||
|
color: "#fff", //设置文字颜色
|
||||||
|
},
|
||||||
|
extraCssText: "box-shadow: 0px 0px 10px 0px #3373CC;"
|
||||||
|
},
|
||||||
|
// geo: {
|
||||||
|
// show: true,
|
||||||
|
// map: 'china',
|
||||||
|
// roam: false,//地图设置不可拖拽,固定的
|
||||||
|
// itemStyle: {
|
||||||
|
// normal: {
|
||||||
|
// borderWidth: 0,
|
||||||
|
// shadowColor: 'rgba(0,54,255, 1)',
|
||||||
|
// shadowBlur: 100
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
visualMap: {
|
||||||
|
type: 'continuous',
|
||||||
|
show: false,
|
||||||
|
min: 0,
|
||||||
|
max: 2000,
|
||||||
|
text: ['高', '低'],
|
||||||
|
orient: 'horizontal',
|
||||||
|
itemWidth: 15,
|
||||||
|
itemHeight: 200,
|
||||||
|
right: 0,
|
||||||
|
bottom: 30,
|
||||||
|
inRange: {
|
||||||
|
color: ['#0393d2', '#75ddff']
|
||||||
|
},
|
||||||
|
textStyle: {
|
||||||
|
color: 'white'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: [
|
||||||
|
{
|
||||||
|
name: "微博区域",
|
||||||
|
type: "map",
|
||||||
|
mapType: "china",
|
||||||
|
roam: false,
|
||||||
|
zoom: 1,//默认地图在容器中显示zoom:1,可根据需求放大缩小地图
|
||||||
|
left: 16,
|
||||||
|
top: 20,
|
||||||
|
right: 10,
|
||||||
|
bottom: 10,
|
||||||
|
selectedMode:'multiple',
|
||||||
|
colorBy: 'data',
|
||||||
|
itemStyle: {
|
||||||
|
areaColor: '#001f5b',//地图区域背景颜色
|
||||||
|
borderColor: '#005cf9',//地图边界颜色
|
||||||
|
shadowColor: '#005cf9',
|
||||||
|
emphasis: {
|
||||||
|
areaColor: '#3066ba',//鼠标滑过区域颜色
|
||||||
|
label: {
|
||||||
|
color: '#fff'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
label: {
|
||||||
|
normal: {
|
||||||
|
show: false
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
// select: {
|
||||||
|
// label: {
|
||||||
|
// show: false
|
||||||
|
// },
|
||||||
|
// itemStyle: {
|
||||||
|
// areaColor: '#3edffe'
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
data: dm
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,49 @@
|
|||||||
|
<!--
|
||||||
|
* @Author: your name
|
||||||
|
* @Date: 2021-10-14 11:25:20
|
||||||
|
* @LastEditTime: 2021-11-10 17:13:41
|
||||||
|
* @LastEditors: Please set LastEditors
|
||||||
|
* @Description: In User Settings Edit
|
||||||
|
* @FilePath: /data-show/src/views/WeiboDetails/weiboUserActiveArea/index.vue
|
||||||
|
-->
|
||||||
|
<template>
|
||||||
|
<div class="wua-outter">
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "weiboUserActiveArea",
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
form: {
|
||||||
|
sBrand: "",
|
||||||
|
token: "",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.wua-outter {
|
||||||
|
width: 936px;
|
||||||
|
height: 460px;
|
||||||
|
border: 2px solid #0f2a4d;
|
||||||
|
.wua-inner {
|
||||||
|
width: 100%;
|
||||||
|
height: calc(100% - 48px);
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-start;
|
||||||
|
.d1 {
|
||||||
|
width: 479px;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
.d2 {
|
||||||
|
width: 420px;
|
||||||
|
height: 100%;
|
||||||
|
margin-left: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,89 @@
|
|||||||
|
<!--
|
||||||
|
* @Author: your name
|
||||||
|
* @Date: 2021-10-14 19:06:52
|
||||||
|
* @LastEditTime: 2021-10-14 19:14:42
|
||||||
|
* @LastEditors: Please set LastEditors
|
||||||
|
* @Description: In User Settings Edit
|
||||||
|
* @FilePath: /data-show/src/views/WeiboDetails/weiboWordCloud/index.vue
|
||||||
|
-->
|
||||||
|
<template>
|
||||||
|
<div class="wwc-outter" v-loading="load">
|
||||||
|
<v-label-div title="词云分布">
|
||||||
|
</v-label-div>
|
||||||
|
<div class="wwc-inner">
|
||||||
|
<v-echarts :opt="opt"></v-echarts>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {getHotWord} from "@/api/KeyMediaSeries/index.js"
|
||||||
|
import createWordCloud from "@/utils/gol/bubbleWord";
|
||||||
|
export default {
|
||||||
|
name: "weiboWordCloud",
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
opt: {},
|
||||||
|
load: false,
|
||||||
|
positiveData: {},
|
||||||
|
negativeData: {},
|
||||||
|
form: {
|
||||||
|
sBrand: "",
|
||||||
|
token: "",
|
||||||
|
sSource: '',
|
||||||
|
sSeriesName: '',
|
||||||
|
ilimitType: 0,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.form.token = this.getToken;
|
||||||
|
this.form.sBrand = this.getBrand.brandname || "奥迪";
|
||||||
|
this.form.sSeriesName = this.getModel.name;
|
||||||
|
this.form.sSource = this.$route.query.source || "抖音";
|
||||||
|
if(this.form.sSource == '汽车之家') {
|
||||||
|
this.form.ilimitType = 1;
|
||||||
|
} else if (this.form.sSource == '懂车帝' && this.getCarCircle == 1) {
|
||||||
|
this.form.ilimitType = 2;
|
||||||
|
}
|
||||||
|
this.getData();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
getData() {
|
||||||
|
this.load = true;
|
||||||
|
Promise.all([this.getH()]).then(() => {
|
||||||
|
// 什么也不执行
|
||||||
|
this.load = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
// 正面
|
||||||
|
getH() {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
let obj = Object.assign({}, this.getCtime2, this.form);
|
||||||
|
getHotWord(obj)
|
||||||
|
.then((res) => {
|
||||||
|
this.positiveData = res.data || {};
|
||||||
|
this.opt = createWordCloud(res.data);
|
||||||
|
resolve(res);
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
reject(false);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.wwc-outter {
|
||||||
|
width: 618px;
|
||||||
|
height: 460px;
|
||||||
|
border: 2px solid #0f2a4d;
|
||||||
|
margin-left: 16px;
|
||||||
|
.wwc-inner {
|
||||||
|
width: 100%;
|
||||||
|
height: calc(100% - 48px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,39 @@
|
|||||||
|
<!--
|
||||||
|
* @Author: your name
|
||||||
|
* @Date: 2021-10-14 19:06:52
|
||||||
|
* @LastEditTime: 2021-10-14 19:14:42
|
||||||
|
* @LastEditors: Please set LastEditors
|
||||||
|
* @Description: In User Settings Edit
|
||||||
|
* @FilePath: /data-show/src/views/WeiboDetails/weiboWordCloud/index.vue
|
||||||
|
-->
|
||||||
|
<template>
|
||||||
|
<div class="wwc-outter">
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "weiboWordCloud",
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
form: {
|
||||||
|
sBrand: "",
|
||||||
|
token: "",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.wwc-outter {
|
||||||
|
width: 460px;
|
||||||
|
height: 460px;
|
||||||
|
border: 2px solid #0f2a4d;
|
||||||
|
margin-left: 16px;
|
||||||
|
.wwc-inner {
|
||||||
|
width: 100%;
|
||||||
|
height: calc(100% - 48px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
Loading…
Reference in new issue