张雄 3 years ago
commit 4fff89be22

@ -1,26 +1,34 @@
<!--
* @Author: your name
* @Date: 2021-10-08 08:41:57
* @LastEditTime: 2021-10-29 18:06:01
* @LastEditTime: 2021-11-09 11:14:52
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/public/index.html
-->
<!DOCTYPE html>
<html lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<meta name="referrer" content="no-referrer">
<link rel="icon" href="<%= BASE_URL %>sws_32.ico">
<title>硕为思汽车智能洞察系统</title>
</head>
<body>
<noscript>
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<meta name="referrer" content="no-referrer">
<link rel="icon" href="<%= BASE_URL %>sws_32.ico">
<title>硕为思汽车智能洞察系统</title>
</head>
<body>
<noscript>
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled.
Please enable it to continue.</strong>
</noscript>
<div id="appLoading">
<span>请耐心等待,正在加载中...</span>
</div>
<div id="app" style="display: none">
</div>
<!-- built files will be auto injected -->
</body>
</html>

@ -27,6 +27,9 @@ export default {
created() {
this.changeZoom()
},
mounted() {
document.getElementById('appLoading').style.display = 'none';
},
methods: {
changeZoom() {
let h = document.body.clientHeight; //

@ -0,0 +1,90 @@
import httpService from "@/request"
// 尾翼洞察详情-尾翼洞察详情
export function getWeiYiInsightAnalysis(params) {
let obj = Object.assign({action: 'getWeiYiInsightAnalysis', sType: 'BrandWeiYi'}, params)
return httpService({
url: `/api/v6.ashx`,
method: 'post',
data: obj,
headers: {
'content-type': 'application/x-www-form-urlencoded'
}
})
}
// 传播态势-传播态势
export function getWeiYiVolumeTime(params) {
let obj = Object.assign({action: 'getWeiYiVolumeTime', sType: 'BrandWeiYi'}, params)
return httpService({
url: `/api/v6.ashx`,
method: 'post',
data: obj,
headers: {
'content-type': 'application/x-www-form-urlencoded'
}
})
}
// 媒体分布-媒体分布
export function getSourcetype0528(params) {
let obj = Object.assign({action: 'getSourcetype0528', sType: 'BrandWeiYi'}, params)
return httpService({
url: `/api/v6.ashx`,
method: 'post',
data: obj,
headers: {
'content-type': 'application/x-www-form-urlencoded'
}
})
}
// 尾翼整体调性-尾翼整体调性
export function getAffections(params) {
let obj = Object.assign({action: 'getAffections', sType: 'BrandWeiYi'}, params)
return httpService({
url: `/api/v6.ashx`,
method: 'post',
data: obj,
headers: {
'content-type': 'application/x-www-form-urlencoded'
}
})
}
// 热门词云-正面词云
export function getPositive(params) {
let obj = Object.assign({action: 'getPositive', sType: 'BrandWeiYi'}, params)
return httpService({
url: `/api/v6.ashx`,
method: 'post',
data: obj,
headers: {
'content-type': 'application/x-www-form-urlencoded'
}
})
}
// 热门词云-负面词云
export function getNegative(params) {
let obj = Object.assign({action: 'getNegative', sType: 'BrandWeiYi'}, params)
return httpService({
url: `/api/v6.ashx`,
method: 'post',
data: obj,
headers: {
'content-type': 'application/x-www-form-urlencoded'
}
})
}
// 尾翼信息列表-尾翼信息列表
export function getList0528(params) {
let obj = Object.assign({action: 'getList0528', sType: 'BrandWeiYi'}, params)
return httpService({
url: `/api/v6.ashx`,
method: 'post',
data: obj,
headers: {
'content-type': 'application/x-www-form-urlencoded'
}
})
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

@ -1,7 +1,7 @@
/*
* @Author: your name
* @Date: 2021-10-12 10:28:00
* @LastEditTime: 2021-11-04 18:31:15
* @LastEditTime: 2021-11-09 09:57:50
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/components/index.js
@ -17,6 +17,7 @@ import vPagination from "@/components/v-pagination"
import vRanking from "@/components/v-ranking";
import vEcharsMap from "@/components/v-echars-map"
import vPercent from "@/components/v-percent"
import vCutsceneWaiting from "@/components/v-cutscene-waiting"
export default {
install(Vue) {
Vue.mixin({
@ -31,7 +32,8 @@ export default {
vPagination,
vRanking,
vEcharsMap,
vPercent
vPercent,
vCutsceneWaiting
}
})
}

@ -1,20 +1,49 @@
<!--
* @Author: your name
* @Date: 2021-11-08 09:46:59
* @LastEditTime: 2021-11-08 09:51:57
* @LastEditTime: 2021-11-09 10:57:21
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/components/v-cutscene-waiting/index.vue
-->
<template>
<div class="cw-outter">
<div class="cw-outter" v-show="show">
<div class="load-inner">
<span style="color: ">
<div class="loading">
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
</div>
</span>
</div>
</div>
</template>
<script>
export default {
name: "v-cutscene-waiting"
name: "v-cutscene-waiting",
props: {
visible: {
type: Boolean,
default: false
}
},
watch: {
visible: {
handler(val) {
this.show = val
},
immediate: true
}
},
data() {
return {
show: false,
}
}
}
</script>
@ -25,6 +54,57 @@ export default {
height: 100vh;
left: 0px;
top: 0px;
background: rgba(0,11, 26, 0.7);
background: rgba(0,11, 26, 0.9);
z-index: 2000;
.load-inner {
position: absolute;
width: auto;
height: auto;
left: 50%;
top: 38%;
color: #fff;
font-size: 14px;
transform: translate(-50%, -50%);
}
}
.loading{
width: 150px;
height: 15px;
margin: 0 auto;
position: relative;
margin-top:100px;
}
.loading span{
position: absolute;
width: 15px;
height: 100%;
border-radius: 50%;
background: lightgreen;
-webkit-animation: load 1.04s ease-in infinite alternate;
}
@-webkit-keyframes load{
0%{
opacity: 1;
-webkit-transform: translate(0px);
}
100%{
opacity: 0.2;
-webkit-transform: translate(150px);
}
}
.loading span:nth-child(1){
-webkit-animation-delay:0.13s;
}
.loading span:nth-child(2){
-webkit-animation-delay:0.26s;
}
.loading span:nth-child(3){
-webkit-animation-delay:0.39s;
}
.loading span:nth-child(4){
-webkit-animation-delay:0.52s;
}
.loading span:nth-child(5){
-webkit-animation-delay:0.65s;
}
</style>

@ -1,7 +1,7 @@
<!--
* @Author: your name
* @Date: 2021-10-13 14:25:26
* @LastEditTime: 2021-11-05 10:44:00
* @LastEditTime: 2021-11-09 11:11:48
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/lycomponents/iLayout/index.vue
@ -30,6 +30,7 @@ export default {
data() {
return {
isRouterAlive: true,
load: false,
headerStyle: {}
};
},
@ -39,9 +40,6 @@ export default {
this.$nextTick(() => {
this.isRouterAlive = true;
});
},
changeZoom() {
}
},
};

@ -1,7 +1,7 @@
/*
* @Author: your name
* @Date: 2021-10-12 13:56:13
* @LastEditTime: 2021-11-08 12:03:25
* @LastEditTime: 2021-11-09 10:24:25
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/mixins/index.js
@ -68,7 +68,7 @@ export default {
let h = style.height;
firstH = firstH || h;
if (height == wh) return
if(wh >= 760 && wh < 930 && b) {
if(wh >= 760 && wh < 900 && b) {
el.style.height = z * parseFloat(h) + 'px';
b = !b
} else {
@ -89,10 +89,10 @@ export default {
}
},
computed: {
...mapGetters(['getZoom', 'getToken', 'getUser', 'getAccount', 'getCommTime', 'getCtime', 'getCtime2', 'getHeaderType', 'getBrand', 'getModel','getSComparison','getBComparison'])
...mapGetters(['getZoom', 'getLoading','getToken', 'getUser', 'getAccount', 'getCommTime', 'getCtime', 'getCtime2', 'getHeaderType', 'getBrand', 'getModel','getSComparison','getBComparison'])
},
methods: {
...mapActions(["setZoom", 'setToken', 'setUser', 'setAccount', 'setCommTime', 'setCtime', 'setCtime2', 'setHeaderType', 'setBrand', 'setModel', 'setSComparison','setBComparison']),
...mapActions(["setZoom", 'setLoading', 'setToken', 'setUser', 'setAccount', 'setCommTime', 'setCtime', 'setCtime2', 'setHeaderType', 'setBrand', 'setModel', 'setSComparison','setBComparison']),
// 获取当前日期时间
getDatetime() {
let now = new Date();

@ -1,7 +1,7 @@
/*
* @Author: your name
* @Date: 2021-10-08 09:26:42
* @LastEditTime: 2021-10-25 10:48:19
* @LastEditTime: 2021-11-09 11:06:03
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/permission.js
@ -20,7 +20,6 @@ router.beforeEach((to, from, next) => {
} else {
next()
}
})
router.afterEach(() => {

@ -1,7 +1,7 @@
/*
* @Author: your name
* @Date: 2021-10-08 09:26:29
* @LastEditTime: 2021-11-08 10:03:10
* @LastEditTime: 2021-11-08 18:38:19
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/router/index.js
@ -33,6 +33,8 @@ import MarketingAnalysis from "@/views/MarketingAnalysis"
import ModelInsight from "@/views/ModelInsight"
import mcIndex from "@/views/MarketingComparison"
import ModelTailDetails from "@/views/ModelTailDetails"
import ModelEventDetails from "@/views/ModelEventDetails"
import ModelWeiboDetails from "@/views/ModelWeiboDetails"
const router = [
{
path: '/login',
@ -130,6 +132,18 @@ const router = [
component: ModelInsight
},
{
path: '/modelEventDetails',
name: "modelEventDetails",
desc: "车型事件详情",
component: ModelEventDetails
},
{
path: '/modelWeiboDetails',
name: "modelWeiboDetails",
desc: "车型微博详情",
component: ModelWeiboDetails
},
{
path: '/modelTailDetails',
name: "modelTailDetails",
desc: "车型尾翼详情",

@ -1,7 +1,7 @@
/*
* @Author: your name
* @Date: 2021-10-12 13:36:49
* @LastEditTime: 2021-11-05 14:03:18
* @LastEditTime: 2021-11-09 10:23:08
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/store/actions.js
@ -10,6 +10,9 @@ const actions = {
setZoom: ({commit}, log) => {
commit('setZoom', log)
},
setLoading: ({commit}, log) => {
commit('setLoading', log)
},
setToken: ({commit}, log) => {
commit('setToken', log)
},

@ -1,7 +1,7 @@
/*
* @Author: your name
* @Date: 2021-10-12 13:37:06
* @LastEditTime: 2021-11-05 14:04:53
* @LastEditTime: 2021-11-09 10:20:07
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/store/getters.js
@ -10,6 +10,9 @@ const getters = {
getZoom(state) {
return state.$zoom
},
getLoading(state) {
return state.loading
},
getToken(state) {
return state.token
},

@ -1,7 +1,7 @@
/*
* @Author: your name
* @Date: 2021-10-12 13:37:35
* @LastEditTime: 2021-11-05 14:04:03
* @LastEditTime: 2021-11-09 11:07:48
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/store/mutations.js
@ -10,6 +10,9 @@ const mutations = {
setZoom: (state, log) => {
state.$zoom = log;
},
setLoading: (state, log) => {
state.loading = log;
},
setToken: (state, log) => {
sessionStorage.setItem('token', log);
state.token = log

@ -1,7 +1,7 @@
/*
* @Author: your name
* @Date: 2021-10-12 13:37:50
* @LastEditTime: 2021-11-05 14:02:42
* @LastEditTime: 2021-11-09 10:19:08
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/store/state.js
@ -9,6 +9,7 @@
const state = {
$zoom: 1,
loading: false,
token: sessionStorage.getItem('token') || "",
user: JSON.parse(sessionStorage.getItem('user')) || {},
account: JSON.parse(localStorage.getItem('account')) || {},

@ -1,7 +1,7 @@
<!--
* @Author: xw
* @Date: 2021-10-11 17:59:49
* @LastEditTime: 2021-11-05 15:46:06
* @LastEditTime: 2021-11-09 11:08:10
* @LastEditors: Please set LastEditors
* @Description: 品牌洞察
* @FilePath: /data-show/src/views/BrandInsight/index.vue

@ -3,12 +3,13 @@
/*
* @Author: your name
* @Date: 2021-10-09 12:38:34
* @LastEditTime: 2021-11-01 19:02:50
* @LastEditTime: 2021-11-09 09:50:36
* @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 createOpt(dy = [], ds = []) {
return {
grid: {
@ -36,6 +37,12 @@ export default function createOpt(dy = [], ds = []) {
color: "#fff",
},
},
axisLabel: {
formatter: (value) => {
let str = bigNumberTransform(value);
return str;
}
},
splitLine: {
lineStyle: {
type: "dashed", // y轴分割线类型

@ -1,7 +1,7 @@
<!--
* @Author: your name
* @Date: 2021-10-15 13:41:17
* @LastEditTime: 2021-10-18 15:02:21
* @LastEditTime: 2021-11-08 17:45:57
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/BrandComparison/brandTonalDistribution/roundata/index.vue
@ -9,7 +9,7 @@
<template>
<div class="bd-item-round">
<div class="bd-item-r-cav">
<v-echarts :opt="opt" @echarsUpdate="echarsFun"></v-echarts>
<v-echarts :opt="opt"></v-echarts>
</div>
<span class="bd-item-r-c-s1" :style="{color: color}">{{title}}</span>
</div>
@ -34,32 +34,7 @@ export default {
};
},
methods: {
echarsFun(myChart) {
let index = 0;
myChart.dispatchAction({
type: "highlight",
seriesIndex: 0,
dataIndex: 0,
});
myChart.on("mouseover", function (e) {
if (e.dataIndex != index) {
myChart.dispatchAction({
type: "downplay",
seriesIndex: 0,
dataIndex: index,
});
}
});
myChart.on("mouseout", function (e) {
index = e.dataIndex;
myChart.dispatchAction({
type: "highlight",
seriesIndex: 0,
dataIndex: e.dataIndex,
});
});
},
},
};
</script>

@ -1,7 +1,7 @@
<!--
* @Author: your name
* @Date: 2021-10-19 10:22:54
* @LastEditTime: 2021-10-19 10:34:14
* @LastEditTime: 2021-11-08 17:46:14
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/EventComparison/wtcEc/index.vue
@ -13,7 +13,7 @@
<v-tab-group :btns="['事件1', '事件2']"></v-tab-group>
</v-label-div>
<div class="wtcEc-inner">
<v-echarts :opt="opt" @echarsUpdate="echarsFun"></v-echarts>
<v-echarts :opt="opt" ></v-echarts>
</div>
</div>
</template>
@ -28,32 +28,7 @@ export default {
}
},
methods: {
echarsFun(myChart) {
let index = 0;
myChart.dispatchAction({
type: "highlight",
seriesIndex: 0,
dataIndex: 0,
});
myChart.on("mouseover", function (e) {
if (e.dataIndex != index) {
myChart.dispatchAction({
type: "downplay",
seriesIndex: 0,
dataIndex: index,
});
}
});
myChart.on("mouseout", function (e) {
index = e.dataIndex;
myChart.dispatchAction({
type: "highlight",
seriesIndex: 0,
dataIndex: e.dataIndex,
});
});
},
}
}
</script>

@ -1,13 +1,13 @@
<!--
* @Author: your name
* @Date: 2021-10-13 14:14:49
* @LastEditTime: 2021-10-13 14:22:35
* @LastEditTime: 2021-11-09 11:52:04
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/EventDetails/distributionOfHotEventChannels/index.vue
-->
<template>
<div class="doe-outter">
<div class="doe-outter" v-loading="load">
<v-label-div title="热点事件渠道分布" :showLine="false" :eStyle="{ 'border-style': 'none' }" />
<div class="doe-inner">
<v-echarts :opt="opt"></v-echarts>
@ -22,6 +22,7 @@ export default {
name: "distributionOfHotEventChannels",
data() {
return {
load: false,
opt: {},
form: {
sBrand: "",
@ -38,6 +39,7 @@ export default {
//
getDdta(){
let obj = Object.assign({}, this.getCtime2, this.form);
this.load = true;
getEventsSourceTypeByEventsType0528(obj).then(res => {
let data = res.data || [];
let dx = [];
@ -49,6 +51,7 @@ export default {
ds.push(value);
})
this.opt = createOpt(dx, ds);
this.load = false;
})
}
}

@ -1,63 +1,64 @@
<!--
* @Author: your name
* @Date: 2021-10-13 13:47:46
* @LastEditTime: 2021-10-13 14:11:52
* @LastEditTime: 2021-11-09 11:53:04
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/EventDetails/distributionOfTOPModelsOfHotEvents/index.vue
-->
<template>
<div class="dotop-outter">
<v-label-div title="热点事件TOP车型分布" :showLine="false" :eStyle="{ 'border-style': 'none' }" />
<div class="dotop-inner">
<v-echarts :opt="opt"></v-echarts>
<v-pagination :style="{position: 'absolute', right: '5px', bottom: '6px'}"></v-pagination>
</div>
<div class="dotop-outter" v-loading="load">
<v-label-div title="热点事件TOP车型分布" :showLine="false" :eStyle="{ 'border-style': 'none' }" />
<div class="dotop-inner">
<v-echarts :opt="opt"></v-echarts>
<v-pagination :style="{position: 'absolute', right: '5px', bottom: '6px'}"></v-pagination>
</div>
</div>
</template>
<script>
import {getHotEventSseries} from '@/api/EventDetails'
import createOpt from "./opt"
import { getHotEventSseries } from "@/api/EventDetails";
import createOpt from "./opt";
export default {
name: "distributionOfTOPModelsOfHotEvents",
data() {
return {
opt: {},
form: {
load: false,
opt: {},
form: {
sQueryType: 1,
sBrand: "",
token: ""
}
}
token: "",
},
};
},
created() {
this.form.token = this.getToken;
this.form.sBrand = this.getBrand.brandname || '奥迪';
this.form.token = this.getToken;
this.form.sBrand = this.getBrand.brandname || "奥迪";
this.getDdta();
},
methods:{
methods: {
//
getDdta() {
let obj = Object.assign({}, this.getCtime2, this.form);
getHotEventSseries(obj).then(res => {
let obj = Object.assign({}, this.getCtime2, this.form);
this.load = true;
getHotEventSseries(obj).then((res) => {
let data = res.data || [];
let dx = [];
let ds = [];
data.forEach(ele => {
data.forEach((ele) => {
let key = ele.key;
let value = ele.data;
dx.push(key);
ds.push(value);
});
this.opt = createOpt(dx, ds);
})
}
}
}
this.load = false;
});
},
},
};
</script>
<style lang="less" scoped>

@ -7,7 +7,7 @@
* @FilePath: /data-show/src/views/EventDetails/eventCorrelation/index.vue
-->
<template>
<div class="ec-outter">
<div class="ec-outter" v-loading="load">
<div class="ec-top" align="center">
<v-btn @click="goback"></v-btn>
</div>
@ -39,6 +39,7 @@ export default {
data() {
return {
brand: "",
load: false,
form: {
sBrand: "",
token: "",
@ -56,10 +57,12 @@ export default {
getDdta() {
let obj = Object.assign({}, this.getCtime2, this.form);
this.load = true;
getBrandOverviewCount0528(obj).then((res) => {
let data = res.data;
this.zolNum = data.count;
this.list = data.data;
this.load = false;
});
},
goback() {

@ -1,14 +1,14 @@
<!--
* @Author: your name
* @Date: 2021-10-13 08:59:57
* @LastEditTime: 2021-10-13 09:18:58
* @LastEditTime: 2021-11-09 11:55:11
* @LastEditors: Please set LastEditors
* @Description: 热点事件传播导向
* @FilePath: /data-show/src/views/EventDetails/hotEventPropagationOriented/index.vue
-->
<template>
<div class="hepo-outter">
<div class="hepo-outter" v-loading="load">
<v-label-div title="热点事件传播导向" />
<div class="hepo-inner">
<v-echarts :opt="opt"></v-echarts>
@ -24,6 +24,7 @@ export default {
props: ["brand"],
data() {
return {
load: false,
opt: createOpt(),
form: {
sBrand: "",
@ -40,11 +41,13 @@ export default {
//
getDdta() {
let obj = Object.assign({}, this.getCtime2, this.form);
this.load = true;
getPropagationDirection0528(obj).then(res => {
let data = res.data;
let population = data.links;
let citylist = data.data;
this.opt = createOpt(citylist, population)
this.opt = createOpt(citylist, population);
this.load = false;
})
}

@ -1,13 +1,13 @@
<!--
* @Author: your name
* @Date: 2021-10-13 11:54:38
* @LastEditTime: 2021-11-03 11:32:04
* @LastEditTime: 2021-11-09 11:56:11
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/EventDetails/hotOther/index.vue
-->
<template>
<div class="ho-outter">
<div class="ho-outter" v-loading="load">
<v-label-div title="热点事件传播导向" />
<div class="ho-bd">
<dv-scroll-board :config="config" :style="{ width: '100%', height: '27rem' }" />
@ -26,6 +26,7 @@ export default {
data() {
return {
currentPage: 1,
load: false,
form: {
token: "",
ssBrand: "",
@ -46,6 +47,7 @@ export default {
//
getDdta() {
let obj = Object.assign({}, this.getCtime2, this.form);
this.load = true;
getHotEventsList(obj).then((res) => {
let data = res.data || [];
let totalNum = res.totalNum || 0;
@ -69,6 +71,7 @@ export default {
header: ["事件列表", "影响力", "时间", "关联品牌"],
data: arr,
};
this.load = false;
});
},
//

@ -1,15 +1,15 @@
<!--
* @Author: your name
* @Date: 2021-10-13 15:17:14
* @LastEditTime: 2021-10-14 09:01:07
* @LastEditTime: 2021-11-09 13:26:17
* @LastEditors: Please set LastEditors
* @Description: 论坛洞察详情
* @FilePath: /data-show/src/views/ForumDetails/index.vue
-->
<template>
<div class="d-container" v-loading="load">
<div class="d-container">
<div class="fd-outter">
<div class="fd-d1">
<div class="fd-d1" v-loading="load">
<v-label-div title="论坛洞察详情">
<v-btn @click="goback"></v-btn>
</v-label-div>
@ -22,13 +22,13 @@
</div>
</div>
</div>
<div class="fd-d2">
<div class="fd-d2" v-loading="load1">
<v-label-div title="传播态势"/>
<div class="fd-d2-inner">
<v-echarts :opt="opt1"></v-echarts>
</div>
</div>
<div class="fd-d2">
<div class="fd-d2" v-loading="load2">
<v-label-div title="TOP5车型传播态势"/>
<div class="fd-d2-inner">
<v-echarts :opt="opt2"></v-echarts>
@ -47,6 +47,8 @@ export default {
data() {
return {
load: false,
load1: false,
load2: false,
opt1: {},
opt2: createOptD2(),
msg: "",
@ -67,13 +69,16 @@ export default {
methods: {
getDdta1(){
let obj = Object.assign({}, this.getCtime2, this.form);
this.load = true;
getBbsInsightAnalysis(obj).then(res => {
let data = res.msg;
this.msg = data;
this.load = false;
})
},
getDdta2(){
let obj = Object.assign({}, this.getCtime2, this.form);
this.load1 = true;
getBbsCountTime(obj).then(res => {
let data = res.data || [];
let dx = [];
@ -85,10 +90,12 @@ export default {
ds.push(value);
});
this.opt1 = createOptD1(dx, ds);
this.load1 = false;
})
},
getDdta3(){
let obj = Object.assign({}, this.getCtime2, this.form);
this.load2 = true;
getBbsBrandTime(obj).then(res => {
let data = res.data || [];
let dx = [];
@ -100,10 +107,9 @@ export default {
ds.push(value);
});
this.opt2 = createOptD2(dx, ds);
this.load2 = false;
})
},
goback() {
this.$router.go(-1)
}

@ -1,7 +1,7 @@
/*
* @Author: your name
* @Date: 2021-10-12 10:11:24
* @LastEditTime: 2021-10-13 16:04:16
* @LastEditTime: 2021-11-09 09:47:08
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/BrandInsight/titsopo/opt.js
@ -23,7 +23,7 @@ function createData(ds = []) {
type: 'line',
symbol: 'none',
areaStyle: {
opacity: 0.2,
opacity: 0.1,
},
emphasis: {
focus: 'series'

@ -0,0 +1,69 @@
<!--
* @Author: your name
* @Date: 2021-10-13 14:14:49
* @LastEditTime: 2021-11-08 18:17:36
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/EventDetails/distributionOfHotEventChannels/index.vue
-->
<template>
<div class="doe-outter">
<div class="doe-inner">
<v-echarts :opt="opt"></v-echarts>
</div>
</div>
</template>
<script>
import {getEventsSourceTypeByEventsType0528} from '@/api/EventDetails'
import createOpt from "./opt";
export default {
name: "MEDDistributionOfHotEventChannels",
data() {
return {
opt: {},
form: {
sBrand: "",
token: ""
}
}
},
created() {
this.form.token = this.getToken;
this.form.sBrand = this.getBrand.brandname || '奥迪';
this.getDdta();
},
methods:{
//
getDdta(){
let obj = Object.assign({}, this.getCtime2, this.form);
getEventsSourceTypeByEventsType0528(obj).then(res => {
let data = res.data || [];
let dx = [];
let ds = [];
data.forEach(ele => {
let key = ele.key;
let value = ele.value;
dx.push(key);
ds.push(value);
})
this.opt = createOpt(dx, ds);
})
}
}
}
</script>
<style lang="less" scoped>
.doe-outter {
width: 100%;
height: 344px;
margin-left: 16px;
.doe-inner {
position: relative;
width: 100%;
height: 100%;
}
}
</style>

@ -0,0 +1,129 @@
/*
* @Author: your name
* @Date: 2021-10-09 11:01:19
* @LastEditTime: 2021-10-29 15:52:04
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/Index/spreadTheSound/opt.js
*/
import * as echarts from "echarts";
import { bigNumberTransform } from "@/utils/gol/dataTool"
let colors = ['rgba(203,118,58,1)', 'rgba(202,156,17,1)', 'rgba(90,203,156,1)', 'rgba(99,173,204,1)', 'rgba(55,113,190,1)', "rgba(138,191,66,1)", 'rgba(181,191,67,1)', 'rgba(203,91,65,1)']
let colors2 = ['rgba(203,118,58,0.6)', 'rgba(202,156,17,0.6)', 'rgba(90,203,156,0.6)', 'rgba(99,173,204,0.6)', 'rgba(55,113,190,0.6)', "rgba(138,191,66,0.6)", 'rgba(181,191,67,0.6)', 'rgba(203,91,65,0.6)']
function createData(ds = []) {
let arr = [];
for (let i = 0; i < ds.length; i++) {
let arr1 = ds[i];
for (let j = 0; j < arr1.length; j++) {
let n = arr.findIndex(ele => {
return ele.name === arr1[j].key;
})
if (n === -1) {
let obj =
{
name: arr1[j].key,
type: 'bar',
stack: 'total',
barWidth: 22,
barGap: "-100%",
emphasis: {
focus: 'series'
},
itemStyle: {
normal: {
//柱体的颜色
//右1000表示从正右开始向左渐变
color: function () {
return new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: colors[j]
},
{
offset: 1,
color: colors2[j]
}
], false);
}
}
},
data: [arr1[j].value]
}
arr.push(obj)
} else {
arr[n].data.push(arr1[j].value)
}
}
}
return arr;
}
export default function createOpt(dx = [], ds = []) {
const data = createData(ds);
return {
grid: {
left: 10,
right: 10,
bottom: 10,
top: 46,
containLabel: true
},
tooltip: {
trigger: "axis",
backgroundColor: "#08182F",
color: "#fff",
borderColor: "#3373CC",
textStyle: {
color: "#fff", //设置文字颜色
},
extraCssText: "box-shadow: 0px 0px 10px 0px #3373CC;"
},
color: colors,
legend: {
textStyle: { //图例文字的样式
color: '#fff',
fontSize:10
},
y: 10,
x: 10,
itemWidth: 10,
itemHeight: 10,
},
xAxis: {
type: 'category',
axisTick: {
show: false,
},
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
}
}

@ -0,0 +1,183 @@
<!--
* @Author: your name
* @Date: 2021-10-13 11:31:08
* @LastEditTime: 2021-11-08 18:15:07
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/EventDetails/eventCorrelation/index.vue
-->
<template>
<div class="ec-outter">
<div class="ec-top" align="center">
<v-btn @click="goback"></v-btn>
</div>
<div class="ec-inner">
<span class="ec-label">{{model}}</span>
<div class="ec-footer">
<img class="m1" src="../../../assets/images/BrandInsight/ic_glsl.png" />
<a-popover title="事件关联数量">
<template slot="content">
<div class="pd-item" v-for="(item,index) in list" :key="index">
<span>{{item.key}}</span>
<span>{{item.value}}</span>
</div>
</template>
<div class="d1">
<span class="s1">{{zolNum|formatMoney(0,'',',')}}</span>
<span class="s2">事件关联数量()</span>
</div>
</a-popover>
</div>
<div class="ec-footer-1">
<img class="m1" src="../../../assets/images/ModelInsight/ic_ppzb.png" />
<a-popover title="事件关联数量">
<template slot="content">
<div class="pd-item" v-for="(item,index) in list" :key="index">
<span>{{item.key}}</span>
<span>{{item.value}}</span>
</div>
</template>
<div class="d1">
<span class="s1">{{zolNum|formatMoney(0,'',',')}}</span>
<span class="s2">品牌传播占比</span>
</div>
</a-popover>
</div>
</div>
</div>
</template>
<script>
import { getBrandOverviewCount0528 } from "@/api/EventDetails";
export default {
name: "MEDEventCorrelation",
data() {
return {
brand: "",
model: "",
form: {
sBrand: "",
token: "",
},
zolNum: 0,
list: [],
};
},
created() {
this.form.token = this.getToken;
this.brand = this.getBrand.brandname || "奥迪";
this.model = this.getModel.name
this.getDdta();
},
methods: {
getDdta() {
let obj = Object.assign({}, this.getCtime2, this.form);
getBrandOverviewCount0528(obj).then((res) => {
let data = res.data;
this.zolNum = data.count;
this.list = data.data;
});
},
goback() {
this.$router.go(-1);
},
},
};
</script>
<style lang="less" scoped>
.ec-outter {
display: flex;
width: 620px;
height: 560px;
justify-content: center;
margin-left: 16px;
.ec-top {
position: absolute;
width: 100%;
height: auto;
top: 0px;
left: 0px;
}
.ec-inner {
position: relative;
width: 600px;
height: 520px;
margin-top: 38px;
background-image: url("../../../assets/images/BrandInsight/img_tz.png");
background-repeat: no-repeat;
background-size: contain;
background-position-x: 50%;
.ec-label {
text-align: center;
display: block;
font-size: 40px;
color: #b2daf7;
margin-top: 110px;
}
.ec-footer {
position: absolute;
width: auto;
height: auto;
display: flex;
justify-content: flex-start;
align-items: center;
bottom: 16px;
left: 0px;
.m1 {
width: 80px;
height: 80px;
}
.d1 {
margin-left: 20px;
.s1 {
display: block;
font-family: Bebas;
font-size: 38px;
color: #fff;
}
.s2 {
display: block;
font-size: 22px;
color: #afb2b7;
}
}
}
.ec-footer-1 {
position: absolute;
width: auto;
height: auto;
display: flex;
justify-content: flex-start;
align-items: center;
bottom: 16px;
right: 0px;
.m1 {
width: 80px;
height: 80px;
}
.d1 {
margin-left: 20px;
.s1 {
display: block;
font-family: Bebas;
font-size: 38px;
color: #fff;
}
.s2 {
display: block;
font-size: 22px;
color: #afb2b7;
}
}
}
}
}
.pd-item {
display: flex;
justify-content: space-between;
color: #fff;
border-bottom: 1px solid #173b6d;
padding: 10px;
}
</style>

@ -0,0 +1,65 @@
<!--
* @Author: your name
* @Date: 2021-10-13 08:59:57
* @LastEditTime: 2021-11-08 17:53:28
* @LastEditors: Please set LastEditors
* @Description: 热点事件传播导向
* @FilePath: /data-show/src/views/EventDetails/hotEventPropagationOriented/index.vue
-->
<template>
<div class="hepo-outter">
<v-label-div title="热点事件传播导向" />
<div class="hepo-inner">
<v-echarts :opt="opt"></v-echarts>
</div>
</div>
</template>
<script>
import {getPropagationDirection0528} from '@/api/EventDetails'
import createOpt from "./opt"
export default {
name: "MEDHotEventPropagationOriented",
props: ["brand"],
data() {
return {
opt: createOpt(),
form: {
sBrand: "",
token: ""
}
}
},
created() {
this.form.token = this.getToken;
this.form.sBrand = this.getBrand.brandname || '奥迪';
this.getDdta();
},
methods:{
//
getDdta() {
let obj = Object.assign({}, this.getCtime2, this.form);
getPropagationDirection0528(obj).then(res => {
let data = res.data;
let population = data.links;
let citylist = data.data;
this.opt = createOpt(citylist, population)
})
}
}
}
</script>
<style lang="less" scoped>
.hepo-outter {
width: 620px;
height: 560px;
border: 2px solid #0F2A4D;
.hepo-inner {
width: 100%;
height: calc(100% - 48px);
}
}
</style>

@ -0,0 +1,98 @@
/*
* @Author: your name
* @Date: 2021-10-13 09:09:51
* @LastEditTime: 2021-10-27 17:32:39
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/EventDetails/hotEventPropagationOriented/opt.js
*/
// const citylist = [
// {name: '领导人'},
// {name: '自然'},
// {name: '明星代言人'},
// {name: '车展'},
// {name: '新车上市'},
// {name: '新闻'},
// {name: '论坛'},
// {name: '微博'},
// {name: 'APP'},
// {name: '短视频'},
// {name: '吉利'},
// {name: '奔驰'},
// {name: '宝马'},
// {name: '特斯拉'},
// {name: '奥迪'},
// {name: '女车主表态'},
// {name: '广州车展'},
// {name: '销量大增'},
// ];
// const population=[
// {source: "领导人", target: "APP", value: 2000},
// {source: "APP", target: "宝马", value: 3000},
// //
// {source: "明星代言人", target: "论坛", value: 1000},
// //
// {source: "自然", target: "论坛", value: 2100},
// {source: "论坛", target: "宝马", value: 3100},
// {source: "宝马", target: "广州车展", value: 5100},
// //
// {source: "自然", target: "新闻", value: 3234},
// {source: "新闻", target: "吉利", value: 3000},
// {source: "吉利", target: "销量大增", value: 6000},
// //
// {source: "车展", target: "微博", value: 1234},
// {source: "微博", target: "特斯拉", value: 3234},
// {source: "特斯拉", target: "销量大增", value: 4234},
// //
// {source: "新车上市", target: "APP", value: 1234},
// {source: "APP", target: "宝马", value: 1234},
// //
// {source: "新车上市", target: "短视频", value: 2234},
// {source: "短视频", target: "奔驰", value: 2234},
// {source: "奔驰", target: "广州车展", value: 2234},
// //
// {source: "APP", target: "奥迪", value: 2234},
// {source: "奥迪", target: "销量大增", value: 2234},
// //
// {source: "奔驰", target: "女车主表态", value: 5234},
// ];
export default function createOpt(citylist=[],population=[]) {
return {
tooltip: {
trigger: "item",
backgroundColor: "#08182F",
color: "#fff",
borderColor: "#3373CC",
textStyle: {
color: "#fff", //设置文字颜色
},
triggerOn: 'mousemove',
extraCssText: "box-shadow: 0px 0px 10px 0px #3373CC;"
},
series: [
{
type: 'sankey',
data: citylist,
links: population,
focusNodeAdjacency: 'allEdges', //鼠标悬停到节点或边上,相邻接的节点和边高亮显示
left: 16,
right: 120,
top: 16,
bottom: 16,
itemStyle: {
borderWidth: 1,
},
lineStyle: {
color: 'target',
curveness: 0.5,
opacity:0.5
},
label: {
color: "#fff",
fontWeight: 'bold',
fontSize: 10
}
}
]
}
}

@ -0,0 +1,112 @@
<!--
* @Author: your name
* @Date: 2021-10-13 11:54:38
* @LastEditTime: 2021-11-08 17:52:40
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/EventDetails/hotOther/index.vue
-->
<template>
<div class="ho-outter">
<v-label-div title="热点事件传播导向" />
<div class="ho-bd">
<dv-scroll-board :config="config" :style="{ width: '100%', height: '27rem' }" />
</div>
<div class="ho-footer">
<span class="ho-f-s1"> <span style="color: #2c66b5;">{{total}}</span> </span>
<a-pagination v-model="form.iPageIndex" :total="total" show-less-items @change="handlerPagnation"/>
</div>
</div>
</template>
<script>
import { getHotEventsList } from "@/api/EventDetails";
export default {
name: "MEDHotOther",
data() {
return {
currentPage: 1,
form: {
token: "",
ssBrand: "",
iPageIndex: 1,
iPageSize: 20,
},
total: 0,
config: {
},
};
},
created() {
this.form.token = this.getToken;
this.form.sBrand = this.getBrand.brandname || "奥迪";
this.getDdta();
},
methods: {
//
getDdta() {
let obj = Object.assign({}, this.getCtime2, this.form);
getHotEventsList(obj).then((res) => {
let data = res.data || [];
let totalNum = res.totalNum || 0;
this.total = totalNum;
let arr = [];
data.forEach((ele) => {
let a = [
ele.events_title,
ele.events_influence,
ele.maxSourcetime,
ele.events_brand,
];
arr.push(a);
});
this.config = {
headerBGC: "#0c203b",
oddRowBGC: "#173b6d",
evenRowBGC: "rgba(69, 149, 244, 0)",
rowNum: 10,
columnWidth: [170,60,160],
header: ["事件列表", "影响力", "时间", "关联品牌"],
data: arr,
};
});
},
//
handlerPagnation(page) {
this.form.iPageIndex = page;
this.getDdta()
}
},
};
</script>
<style lang="less" scoped>
.ho-outter {
position: relative;
width: 620px;
height: 560px;
border: 2px solid #0f2a4d;
margin-left: 16px;
.ho-bd {
margin-top: 16px;
padding: 0px 16px;
width: 100%;
height: calc(100% - 120px);
}
.ho-footer {
position: absolute;
padding: 0px 16px;
width: 100%;
height: 34px;
left: 0px;
bottom: 14px;
display: flex;
justify-content: space-between;
align-items: center;
.ho-f-s1 {
color: #fff;
font-size: 14px;
}
}
}
</style>

@ -0,0 +1,72 @@
<!--
* @Author: your name
* @Date: 2021-10-13 08:53:49
* @LastEditTime: 2021-11-08 18:19:28
* @LastEditors: Please set LastEditors
* @Description: 事件详情
* @FilePath: /data-show/src/views/EventDetails/index.vue
-->
<template>
<div class="d-container">
<div class="ed-d1">
<MEDHotEventPropagationOriented></MEDHotEventPropagationOriented>
<MEDEventCorrelation></MEDEventCorrelation>
<MEDHotOther></MEDHotOther>
</div>
<div class="ed-d2">
<div class="ed-d2-inner">
<v-label-div title="热点事件渠道分布"/>
<div class="ed-d2-bd">
<MEDDistributionOfHotEventChannels></MEDDistributionOfHotEventChannels>
</div>
</div>
</div>
</div>
</template>
<script>
import MEDHotEventPropagationOriented from "./MEDHotEventPropagationOriented"
import MEDEventCorrelation from "./MEDEventCorrelation"
import MEDHotOther from "./MEDHotOther"
import MEDDistributionOfHotEventChannels from "./MEDDistributionOfHotEventChannels"
export default {
name: "ModelEventDetails",
data() {
return {
}
},
components: {
MEDHotEventPropagationOriented, //
MEDEventCorrelation, //
MEDHotOther, //
MEDDistributionOfHotEventChannels //
},
created() {
}
}
</script>
<style lang="less" scoped>
.ed-d1 {
display: flex;
padding: 0px 16px;
justify-content: flex-start;
}
.ed-d2 {
padding: 0px 16px;
height: 392px;
margin-top: 16px;
.ed-d2-inner {
width: 100%;
height: 100%;
border: 2px solid #0F2A4D;
.ed-d2-bd {
display: flex;
justify-content: flex-start;
height: auto;
}
}
}
</style>

@ -1,7 +1,7 @@
<!--
* @Author: your name
* @Date: 2021-10-25 13:12:20
* @LastEditTime: 2021-11-08 16:13:39
* @LastEditTime: 2021-11-08 18:39:56
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/ModelInsight/index.vue
@ -22,7 +22,7 @@
</div>
<div class="bdl-d2">
<v-label-div title="事件洞察">
<v-btn @click="goRouter('/eventDetails')"></v-btn>
<v-btn @click="goRouter('/modelEventDetails')"></v-btn>
</v-label-div>
<div class="bdl-d2-bd">
<ml-popular-events-list :brand="brand" :model="model"></ml-popular-events-list>
@ -31,7 +31,7 @@
</div>
<div class="bdl-d3">
<v-label-div title="微博洞察">
<v-btn @click="goRouter('/weiboDetails')"></v-btn>
<v-btn @click="goRouter('/modelWeiboDetails')"></v-btn>
</v-label-div>
<div class="bdl-d3-bd">
<ml-weibo-Kol :brand="brand" :model="model"></ml-weibo-Kol>
@ -118,7 +118,6 @@ export default {
},
//
modelData() {
let model = this.getModel.name || "";
if (!model) {
this.getUserSeriesName(this.brand);
@ -133,6 +132,7 @@ export default {
getUserSeriesName(this.form).then((res) => {
let data = res.data || [];
this.model = data[0].name;
this.setModel(data[0]);
});
},
//
@ -141,6 +141,10 @@ export default {
this.setModel(arr[1]);
this.reload();
},
//
goRouter(path) {
this.$router.push({path: path})
}
},
};
</script>

@ -1,7 +1,7 @@
<!--
* @Author: your name
* @Date: 2021-10-13 16:54:12
* @LastEditTime: 2021-11-08 13:31:01
* @LastEditTime: 2021-11-08 17:44:16
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/TailInsightDetails/mediaDistribution/index.vue
@ -10,48 +10,67 @@
<div class="md-outter">
<v-label-div title="媒体分布"></v-label-div>
<div class="md-inner">
<v-echarts :opt="opt" @echarsUpdate="echarsFun"></v-echarts>
<v-echarts :opt="opt" ></v-echarts>
</div>
</div>
</template>
<script>
import {getSourcetype0528} from '@/api/ModelTaildetails'
import createOpt from "./opt";
export default {
name: "MTDmediaDistribution",
data() {
return {
opt: createOpt(),
load: false,
opt: {},
form: {
sBrand: "",
sSeriesName: "",
token: "",
},
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.getDdta();
},
methods: {
echarsFun(myChart) {
let index = 0;
myChart.dispatchAction({
type: "highlight",
seriesIndex: 0,
dataIndex: 0,
});
myChart.on("mouseover", function (e) {
if (e.dataIndex != index) {
myChart.dispatchAction({
type: "downplay",
seriesIndex: 0,
dataIndex: index,
});
}
});
myChart.on("mouseout", function (e) {
index = e.dataIndex;
myChart.dispatchAction({
type: "highlight",
seriesIndex: 0,
dataIndex: e.dataIndex,
});
});
getDdta(){
let obj = Object.assign({}, this.getCtime2, this.form);
this.load = true;
getSourcetype0528(obj).then(res => {
let data = res.data || [];
this.labelData = data;
this.opt = createOpt(data, this.colors);
this.load = false;
})
},
},
};
</script>

@ -7,7 +7,30 @@
* @FilePath: /data-show/src/views/BrandInsight/weiboKol/opt.js
*/
import * as echarts from "echarts";
export default function createOpt() {
let colors = ['rgba(203,118,58,1)', 'rgba(202,156,17,1)', 'rgba(90,203,156,1)', 'rgba(99,173,204,1)', 'rgba(55,113,190,1)', "rgba(138,191,66,1)", 'rgba(181,191,67,1)', 'rgba(203,91,65,1)']
function createData(ds=[]) {
let arr = [];
for(let i = 0; i < ds.length; i++) {
let ele = ds[i];
if(ele.value*1 > 0) {
let obj = { value: ele.value*1, name: ele.key, itemStyle: {
color: new echarts.graphic.LinearGradient(0, 1, 1, 0, [{
//给颜色设置渐变色 前面4个参数给第一个设置1第四个设置0 ,就是水平渐变
//给第一个设置0第四个设置1就是垂直渐变
offset: 0,
color: 'black'
}, {
offset: 1,
color: colors[i]
}])
}};
arr.push(obj)
}
}
return arr;
}
export default function createOpt(ds = []) {
const data = createData(ds, colors)
return {
legend: {
y: 10,
@ -15,8 +38,7 @@ export default function createOpt() {
icon: 'roundRect',
textStyle: { //图例文字的样式
color: '#fff'
},
data: ["新闻","论坛","微信","微博","其他"]
}
},
series: [
{
@ -26,68 +48,23 @@ export default function createOpt() {
avoidLabelOverlap: false,
label: {
show: false,
position: 'center'
position: 'center',
lineHeight: 30
},
emphasis: {
label: {
show: true,
fontSize: '40',
fontSize: '20',
color: "#ffff",
formatter: (p)=>{
return p.data.name + '\n' + p.data.value;
},
formatter: function (p) {
return `${p.data.name}\n${p.percent}%\n${p.data.value}`
}
}
},
labelLine: {
show: false
},
data: [
{ value: 2000, name: '新闻', itemStyle: {color: new echarts.graphic.LinearGradient(0, 1, 1, 0, [{
//给颜色设置渐变色 前面4个参数给第一个设置1第四个设置0 ,就是水平渐变
//给第一个设置0第四个设置1就是垂直渐变
offset: 0,
color: 'black'
}, {
offset: 1,
color: '#3373CC'
}])} },
{ value: 2000, name: '论坛', itemStyle: {color: new echarts.graphic.LinearGradient(0, 1, 1, 0, [{
//给颜色设置渐变色 前面4个参数给第一个设置1第四个设置0 ,就是水平渐变
//给第一个设置0第四个设置1就是垂直渐变
offset: 0,
color: 'black'
}, {
offset: 1,
color: '#518ea9'
}])} },
{ value: 1000, name: '微信', itemStyle: {color: new echarts.graphic.LinearGradient(0, 1, 1, 0, [{
//给颜色设置渐变色 前面4个参数给第一个设置1第四个设置0 ,就是水平渐变
//给第一个设置0第四个设置1就是垂直渐变
offset: 0,
color: 'black'
}, {
offset: 1,
color: '#54BF93'
}])} },
{ value: 1000, name: '微博', itemStyle: {color: new echarts.graphic.LinearGradient(0, 1, 1, 0, [{
//给颜色设置渐变色 前面4个参数给第一个设置1第四个设置0 ,就是水平渐变
//给第一个设置0第四个设置1就是垂直渐变
offset: 0,
color: 'black'
}, {
offset: 1,
color: '#b38b14'
}])} },
{ value: 2000, name: '其他', itemStyle: {color: new echarts.graphic.LinearGradient(0, 1, 1, 0, [{
//给颜色设置渐变色 前面4个参数给第一个设置1第四个设置0 ,就是水平渐变
//给第一个设置0第四个设置1就是垂直渐变
offset: 0,
color: 'black'
}, {
offset: 1,
color: '#b56a2f'
}])} },
],
data: data,
},
{
@ -103,53 +80,7 @@ export default function createOpt() {
show: false
},
center: ['50%', '50%'],//边框位置
data: [
{ value: 2000, name: '新闻', itemStyle: {color: new echarts.graphic.LinearGradient(0, 1, 1, 0, [{
//给颜色设置渐变色 前面4个参数给第一个设置1第四个设置0 ,就是水平渐变
//给第一个设置0第四个设置1就是垂直渐变
offset: 0,
color: 'black'
}, {
offset: 1,
color: '#3373CC'
}])} },
{ value: 2000, name: '论坛', itemStyle: {color: new echarts.graphic.LinearGradient(0, 1, 1, 0, [{
//给颜色设置渐变色 前面4个参数给第一个设置1第四个设置0 ,就是水平渐变
//给第一个设置0第四个设置1就是垂直渐变
offset: 0,
color: 'black'
}, {
offset: 1,
color: '#518ea9'
}])} },
{ value: 1000, name: '微信', itemStyle: {color: new echarts.graphic.LinearGradient(0, 1, 1, 0, [{
//给颜色设置渐变色 前面4个参数给第一个设置1第四个设置0 ,就是水平渐变
//给第一个设置0第四个设置1就是垂直渐变
offset: 0,
color: 'black'
}, {
offset: 1,
color: '#54BF93'
}])} },
{ value: 1000, name: '微博', itemStyle: {color: new echarts.graphic.LinearGradient(0, 1, 1, 0, [{
//给颜色设置渐变色 前面4个参数给第一个设置1第四个设置0 ,就是水平渐变
//给第一个设置0第四个设置1就是垂直渐变
offset: 0,
color: 'black'
}, {
offset: 1,
color: '#b38b14'
}])} },
{ value: 2000, name: '其他', itemStyle: {color: new echarts.graphic.LinearGradient(0, 1, 1, 0, [{
//给颜色设置渐变色 前面4个参数给第一个设置1第四个设置0 ,就是水平渐变
//给第一个设置0第四个设置1就是垂直渐变
offset: 0,
color: 'black'
}, {
offset: 1,
color: '#b56a2f'
}])} },
],
data: data,
}
]

@ -10,7 +10,7 @@
<div class="rwl-outter">
<v-label-div title="尾翼信息列表"></v-label-div>
<div class="rwl-inner">
<a-form layout="inline" :form="form">
<!-- <a-form layout="inline" :form="form">
<a-form-item label="来源选择">
<a-select v-model="form.s1" style="width: 240px">
<a-select-option value="jack">
@ -24,75 +24,116 @@
</a-select-option>
</a-select>
</a-form-item>
</a-form>
<a-form-item label="车型">
<a-select v-model="form.sSeriesName" style="width: 240px" @change="handlerChangeModel">
<a-select-option :value="item.name" v-for="(item,index) in models" :key="index">
{{item.name}}
</a-select-option>
</a-select>
</a-form-item>
</a-form> -->
<div class="rwl-tb">
<v-table :columns="columns" :data="tdata" :pagination="pagination"></v-table>
</div>
<v-table :columns="columns" :loading="tableLoading" :data="tdata" :pagination="pagination" @change="handlerPage"></v-table>
</div>
</div>
</div>
</template>
<script>
import {getList0528} from '@/api/ModelTaildetails'
export default {
name: "MTDrearWingInformationList",
data() {
return {
load: false,
tableLoading: false,
form: {
s1: "",
s2: "",
sSource: "",
token: "",
sBrand: "",
iPageIndex: 1,
iPageSize: 20,
sSeriesName: "",
},
pagination: {
"show-total": total => `${total}`
current: 1,
pageSize: 20,
total: 0,
"show-total": (total) => `${total}`,
},
columns: [
{
title: "新闻标题",
key: "name",
dataIndex: "name",
key: "title",
dataIndex: "title",
},
{
title: "来源",
key: "a",
dataIndex: "a",
width: 120
key: "source",
dataIndex: "source",
width: 120,
},
{
{
title: "作者",
key: "b",
dataIndex: "b",
width: 200
key: "user_author",
dataIndex: "user_author",
width: 200,
},
{
{
title: "发布时间",
key: "c",
dataIndex: "c",
width: 180
key: "sourcetime",
dataIndex: "sourcetime",
width: 180,
},
{
{
title: "调性",
key: "d",
dataIndex: "d",
width: 100
},
{
title: "车型",
key: "e",
dataIndex: "e",
width: 100
key: "affectionstr",
dataIndex: "affectionstr",
width: 100,
},
],
tdata: [
{
name: '为了研究长城吉利谁更强,我们砸了台吉利,',
a: '微博',
b: '车二哥说车',
c: '2021-08-18 12:00:00',
d: '正面',
e: 'A4'
}
]
tdata: [],
};
},
created() {
this.form.token = this.getToken;
this.form.sBrand = this.getBrand.brandname || "奥迪";
this.form.sSeriesName = this.getModel.name;
this.getData();
},
methods: {
//
getData() {
let obj = Object.assign({}, this.getCtime2, this.form);
this.tableLoading = true;
getList0528(obj).then((res) => {
let data = res.data || [];
let arr = [];
data.forEach((ele) => {
let o = { ...ele._source };
if (o.affections === 1) {
o.affectionstr = "正面";
} else if (o.affections === 2) {
o.affectionstr = "负面";
} else {
o.affectionstr = "中性";
}
arr.push(o);
});
this.tdata = arr;
let totalNum = res.totalNum || 0;
this.pagination.total = totalNum;
this.tableLoading = false;
});
},
//
handlerPage(p) {
let iPageIndex = p.current;
this.form.iPageIndex = iPageIndex;
this.pagination.current = iPageIndex;
this.getData();
},
},
};
</script>

@ -16,13 +16,45 @@
</template>
<script>
import {getWeiYiVolumeTime} from '@/api/ModelTaildetails'
import createOpt from "./opt"
export default {
name: "MTDrearWingPropagationSituation",
data() {
return {
opt: createOpt()
load: false,
opt: {},
form: {
sBrand: "",
sSeriesName: "",
token: "",
},
}
},
created() {
this.form.token = this.getToken;
this.form.sBrand = this.getBrand.brandname || '奥迪';
this.form.sSeriesName = this.getModel.name;
this.getDdta();
},
methods: {
getDdta(){
let obj = Object.assign({}, this.getCtime2, this.form);
this.load = true;
getWeiYiVolumeTime(obj).then(res => {
let data = res.data || [];
let dx = [];
let ds = [];
data.forEach((ele) => {
let time = ele.Time;
let value = ele.value;
dx.push(time);
ds.push(value);
});
this.opt = createOpt(dx, ds);
this.load = false;
})
},
}
}
</script>

@ -7,7 +7,8 @@
* @FilePath: /data-show/src/views/BrandInsight/weiboVolumeTrend/opt.js
*/
import * as echarts from "echarts";
export default function createOpt() {
import { bigNumberTransform } from "@/utils/gol/dataTool"
export default function createOpt(dx = [], ds = []) {
return {
grid: {
top: "16px",
@ -38,7 +39,13 @@ export default function createOpt() {
color: "#fff",
},
},
data: ['00:00', '00:40', '00:80', '12:00', '16:00', '20:00', '24:00']
axisLabel: {
formatter: (value) => {
let str = value.substring(10, 16)
return str;
}
},
data: dx
},
yAxis: {
type: 'value',
@ -48,6 +55,12 @@ export default function createOpt() {
color: "#FFF",
},
},
axisLabel: {
formatter: (value) => {
let str = bigNumberTransform(value);
return str;
}
},
splitLine: {
lineStyle: {
type: "dashed", // y轴分割线类型
@ -57,7 +70,7 @@ export default function createOpt() {
},
series: [
{
data: [820, 932, 901, 934, 1290, 1330, 1320],
data: ds,
type: 'line',
color: '#546fc5',
areaStyle: {normal: {

@ -1,7 +1,7 @@
<!--
* @Author: your name
* @Date: 2021-10-13 17:42:57
* @LastEditTime: 2021-11-08 13:36:24
* @LastEditTime: 2021-11-08 17:46:38
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/TailInsightDetails/theOverallToneOfTheTail/index.vue
@ -10,47 +10,50 @@
<div class="tot-outter">
<v-label-div title="尾翼整体调性"></v-label-div>
<div class="tot-inner">
<v-echarts :opt="opt" @echarsUpdate="echarsFun"></v-echarts>
<v-echarts :opt="opt"></v-echarts>
</div>
</div>
</template>
<script>
import {getAffections} from '@/api/ModelTaildetails'
import createOpt from "./opt"
export default {
name: "MTDtheOverallToneOfTheTail",
data() {
return {
opt: createOpt()
load: false,
opt: {},
form: {
sBrand: "",
token: "",
sSeriesName: "",
},
}
},
created() {
this.form.token = this.getToken;
this.form.sBrand = this.getBrand.brandname || '奥迪';
this.form.sSeriesName = this.getModel.name;
this.getDdta();
},
methods: {
echarsFun(myChart) {
let index = 0;
myChart.dispatchAction({
type: "highlight",
seriesIndex: 0,
dataIndex: 0,
});
myChart.on("mouseover", function (e) {
if (e.dataIndex != index) {
myChart.dispatchAction({
type: "downplay",
seriesIndex: 0,
dataIndex: index,
});
getDdta(){
let obj = Object.assign({}, this.getCtime2, this.form);
this.load = true;
getAffections(obj).then(res => {
let data = res.data || {};
let arr = [];
for(let key in data) {
let obj = {
key: key,
value: data[key]
}
arr.push(obj)
}
});
myChart.on("mouseout", function (e) {
index = e.dataIndex;
myChart.dispatchAction({
type: "highlight",
seriesIndex: 0,
dataIndex: e.dataIndex,
});
});
this.opt = createOpt(arr);
this.load = false;
})
},
}
}

@ -1,11 +1,3 @@
/*
* @Author: your name
* @Date: 2021-10-13 17:48:55
* @LastEditTime: 2021-10-13 17:50:56
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/TailInsightDetails/theOverallToneOfTheTail/opt.js
*/
/*
* @Author: your name
* @Date: 2021-10-12 14:33:51
@ -15,7 +7,30 @@
* @FilePath: /data-show/src/views/BrandInsight/weiboKol/opt.js
*/
import * as echarts from "echarts";
export default function createOpt() {
let colors = ['#3373CC', '#CC9D12', '#54BF93', 'rgba(99,173,204,1)', 'rgba(55,113,190,1)', "rgba(138,191,66,1)", 'rgba(181,191,67,1)', 'rgba(203,91,65,1)']
function createData(ds=[]) {
let arr = [];
for(let i = 0; i < ds.length; i++) {
let ele = ds[i];
if(ele.value*1 > 0) {
let obj = { value: ele.value*1, name: ele.key, itemStyle: {
color: new echarts.graphic.LinearGradient(0, 1, 1, 0, [{
//给颜色设置渐变色 前面4个参数给第一个设置1第四个设置0 ,就是水平渐变
//给第一个设置0第四个设置1就是垂直渐变
offset: 0,
color: 'black'
}, {
offset: 1,
color: colors[i]
}])
}};
arr.push(obj)
}
}
return arr;
}
export default function createOpt(ds = []) {
const data = createData(ds, colors)
return {
legend: {
y: 10,
@ -23,8 +38,7 @@ export default function createOpt() {
icon: 'roundRect',
textStyle: { //图例文字的样式
color: '#fff'
},
data: ["正面","中性","负面"]
}
},
series: [
{
@ -34,50 +48,23 @@ export default function createOpt() {
avoidLabelOverlap: false,
label: {
show: false,
position: 'center'
position: 'center',
lineHeight: 30
},
emphasis: {
label: {
show: true,
fontSize: '40',
fontSize: '20',
color: "#ffff",
formatter: (p)=>{
return p.data.name + '\n' + p.data.value;
},
formatter: function (p) {
return `${p.data.name}\n${p.percent}%\n${p.data.value}`
}
}
},
labelLine: {
show: false
},
data: [
{ value: 2000, name: '正面', itemStyle: {color: new echarts.graphic.LinearGradient(0, 1, 1, 0, [{
//给颜色设置渐变色 前面4个参数给第一个设置1第四个设置0 ,就是水平渐变
//给第一个设置0第四个设置1就是垂直渐变
offset: 0,
color: 'black'
}, {
offset: 1,
color: '#3373CC'
}])} },
{ value: 2000, name: '中性', itemStyle: {color: new echarts.graphic.LinearGradient(0, 1, 1, 0, [{
//给颜色设置渐变色 前面4个参数给第一个设置1第四个设置0 ,就是水平渐变
//给第一个设置0第四个设置1就是垂直渐变
offset: 0,
color: 'black'
}, {
offset: 1,
color: '#518ea9'
}])} },
{ value: 1000, name: '负面', itemStyle: {color: new echarts.graphic.LinearGradient(0, 1, 1, 0, [{
//给颜色设置渐变色 前面4个参数给第一个设置1第四个设置0 ,就是水平渐变
//给第一个设置0第四个设置1就是垂直渐变
offset: 0,
color: 'black'
}, {
offset: 1,
color: '#54BF93'
}])} },
],
data: data,
},
{
@ -93,35 +80,7 @@ export default function createOpt() {
show: false
},
center: ['50%', '50%'],//边框位置
data: [
{ value: 2000, name: '正面', itemStyle: {color: new echarts.graphic.LinearGradient(0, 1, 1, 0, [{
//给颜色设置渐变色 前面4个参数给第一个设置1第四个设置0 ,就是水平渐变
//给第一个设置0第四个设置1就是垂直渐变
offset: 0,
color: 'black'
}, {
offset: 1,
color: '#3373CC'
}])} },
{ value: 2000, name: '中性', itemStyle: {color: new echarts.graphic.LinearGradient(0, 1, 1, 0, [{
//给颜色设置渐变色 前面4个参数给第一个设置1第四个设置0 ,就是水平渐变
//给第一个设置0第四个设置1就是垂直渐变
offset: 0,
color: 'black'
}, {
offset: 1,
color: '#518ea9'
}])} },
{ value: 1000, name: '负面', itemStyle: {color: new echarts.graphic.LinearGradient(0, 1, 1, 0, [{
//给颜色设置渐变色 前面4个参数给第一个设置1第四个设置0 ,就是水平渐变
//给第一个设置0第四个设置1就是垂直渐变
offset: 0,
color: 'black'
}, {
offset: 1,
color: '#54BF93'
}])} }
],
data: data,
}
]

@ -11,14 +11,15 @@
<div class="tid-outter">
<div class="tid-d1">
<v-label-div title="尾翼洞察详情">
<v-btn @click="goback"></v-btn>
<v-btn @click="goback"></v-btn>
</v-label-div>
<div class="tid-d1-bd">
<div class="d1">
奥迪
{{form.sBrand|doStr(4)}}
</div>
<span class="ss1">{{form.sSeriesName|doStr(8)}}</span>
<div class="d2">
洞察分析监测到尾翼信息5条,2021-06-15 10:00:00尾翼传播达到波峰值,共监测到1条信息.,尾翼信息主要分布在萝卜投研,微信等媒体平台媒体尾翼分布占比为萝卜投研 60%,微信 40%.,网民对于该品牌主要关注"上市,全新,不错,亮点,搭载"等信息.,通过对行业大数据的聚合分析,可以发现网民热议TOP10车型分别为奥迪h6,rav4荣放,博越".
洞察分析{{msg}}
</div>
</div>
</div>
@ -39,6 +40,7 @@ import MTDmediaDistribution from "./MTDmediaDistribution"
import MTDtheOverallToneOfTheTail from "./MTDtheOverallToneOfTheTail"
import mtdPopularWordCloud from "./mtd-popular-word-cloud"
import MTDrearWingInformationList from "./MTDrearWingInformationList"
import {getWeiYiInsightAnalysis} from '@/api/ModelTaildetails'
export default {
name: "ModelTailDetails",
components: {
@ -48,7 +50,33 @@ export default {
mtdPopularWordCloud, //
MTDrearWingInformationList //
},
data() {
return {
load: false,
msg: "",
form: {
sBrand: "",
token: "",
sSeriesName: "",
},
}
},
created() {
this.form.token = this.getToken;
this.form.sSeriesName = this.getModel.name;
this.form.sBrand = this.getBrand.brandname || '奥迪';
this.getDdta();
},
methods: {
getDdta(){
let obj = Object.assign({}, this.getCtime2, this.form);
this.load = true;
getWeiYiInsightAnalysis(obj).then(res => {
let data = res.msg;
this.msg = data;
this.load = false;
})
},
goback() {
this.$router.go(-1);
}
@ -83,13 +111,20 @@ export default {
font-size: 24px;
color: #b2daf7;
}
.ss1 {
display: block;
width: 110px;
font-size: 24px;
color: #b2daf7;
margin-left: 16px;
}
.d2 {
padding: 16px;
width: 1500px;
width: 1400px;
height: 100%;
font-size: 20px;
color: #fff;
margin-left: 114px;
margin-left: 110px;
}
}
}

@ -1,28 +1,74 @@
<!--
* @Author: your name
* @Date: 2021-10-13 17:54:56
* @LastEditTime: 2021-11-08 13:32:37
* @LastEditTime: 2021-11-08 17:46:30
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/TailInsightDetails/popular-word-cloud/index.vue
-->
<template>
<div class="pwc-outter">
<v-label-div title="热门词云"></v-label-div>
<v-label-div title="热门词云" :showLine="false" :eStyle="{'border-style': 'none'}">
<v-tab-group :btns="['正面', '负面']" @change="handlerChange"></v-tab-group>
</v-label-div>
<div class="pwc-inner">
<v-echarts :opt="opt" @echarsUpdate="echarsFun"></v-echarts>
<v-echarts :opt="opt" ></v-echarts>
</div>
</div>
</template>
<script>
import createOpt from "./opt"
import {getPositive,getNegative} from '@/api/ModelTaildetails'
import createWordCloud from "@/utils/gol/bubbleWord";
export default {
name: "mtdPopularWordCloud",
props: ["brand", "model"],
data() {
return {
opt: createOpt()
}
}
load: false,
type: 0,
form: {
sBrand: "",
sSeriesName: "",
token: "",
},
opt: {},
};
},
created() {
this.form.token = this.getToken;
this.form.sSeriesName = this.getModel.name;
this.form.sBrand = this.getBrand.brandname || "奥迪";
this.getData1();
},
methods: {
handlerChange(n) {
this.type = n;
if(n === 0) {
this.getData1();
} else {
this.getData2();
}
},
getData1() {
this.load = true;
let obj = Object.assign({}, this.getCtime2, this.form);
getPositive(obj).then((res) => {
let data = res.data;
this.opt = createWordCloud(data);
this.load = false;
});
},
getData2() {
this.load = true;
let obj = Object.assign({}, this.getCtime2, this.form);
getNegative(obj).then((res) => {
let data = res.data;
this.opt = createWordCloud(data);
this.load = false;
});
},
},
}
</script>

@ -1,136 +1,103 @@
/*
* @Author: your name
* @Date: 2021-10-09 13:35:13
* @LastEditTime: 2021-10-12 19:22:21
* @Date: 2021-10-21 11:36:36
* @LastEditTime: 2021-10-29 21:30:46
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/Index/hotDiscussionGraph/opt.js
* @FilePath: /data-show/src/utils/gol/bubbleWord.js
*/
// import * as echarts from "echarts";
const dataBJ = [
[1, 55, 9, 56, 0.46, 18, 6, '良'],
[2, 25, 11, 21, 0.65, 34, 9, '优'],
[3, 56, 7, 63, 0.3, 14, 5, '良'],
[4, 33, 7, 29, 0.33, 16, 6, '优'],
[5, 42, 24, 44, 0.76, 40, 16, '优'],
[6, 82, 58, 90, 1.77, 68, 33, '良'],
[7, 74, 49, 77, 1.46, 48, 27, '良'],
[8, 78, 55, 80, 1.29, 59, 29, '良'],
[9, 267, 216, 280, 4.8, 108, 64, '重度污染'],
// [10, 185, 127, 216, 2.52, 61, 27, '中度污染'],
// [11, 39, 19, 38, 0.57, 31, 15, '优'],
// [12, 41, 11, 40, 0.43, 21, 7, '优'],
// [13, 64, 38, 74, 1.04, 46, 22, '良'],
// [14, 108, 79, 120, 1.7, 75, 41, '轻度污染'],
// [15, 108, 63, 116, 1.48, 44, 26, '轻度污染'],
// [16, 33, 6, 29, 0.34, 13, 5, '优'],
// [17, 94, 66, 110, 1.54, 62, 31, '良'],
// [18, 186, 142, 192, 3.88, 93, 79, '中度污染'],
// [19, 57, 31, 54, 0.96, 32, 14, '良'],
// [20, 22, 8, 17, 0.48, 23, 10, '优'],
// [21, 39, 15, 36, 0.61, 29, 13, '优'],
// [22, 94, 69, 114, 2.08, 73, 39, '良'],
// [23, 99, 73, 110, 2.43, 76, 48, '良'],
// [24, 31, 12, 30, 0.5, 32, 16, '优'],
// [25, 42, 27, 43, 1, 53, 22, '优'],
// [26, 154, 117, 157, 3.05, 92, 58, '中度污染'],
// [27, 234, 185, 230, 4.09, 123, 69, '重度污染'],
// [28, 160, 120, 186, 2.77, 91, 50, '中度污染'],
// [29, 134, 96, 165, 2.76, 83, 41, '轻度污染'],
// [30, 52, 24, 60, 1.03, 50, 21, '良'],
// [31, 46, 5, 49, 0.28, 10, 6, '优']
];
const dataGZ = [
[1, 26, 37, 27, 1.163, 27, 13, '优'],
[2, 85, 62, 71, 1.195, 60, 8, '良'],
[3, 78, 38, 74, 1.363, 37, 7, '良'],
[4, 21, 21, 36, 0.634, 40, 9, '优'],
[5, 41, 42, 46, 0.915, 81, 13, '优'],
// [6, 56, 52, 69, 1.067, 92, 16, '良'],
// [7, 64, 30, 28, 0.924, 51, 2, '良'],
// [8, 55, 48, 74, 1.236, 75, 26, '良'],
// [9, 76, 85, 113, 1.237, 114, 27, '良'],
// [10, 91, 81, 104, 1.041, 56, 40, '良'],
// [11, 84, 39, 60, 0.964, 25, 11, '良'],
// [12, 64, 51, 101, 0.862, 58, 23, '良'],
// [13, 70, 69, 120, 1.198, 65, 36, '良'],
// [14, 77, 105, 178, 2.549, 64, 16, '良'],
// [15, 109, 68, 87, 0.996, 74, 29, '轻度污染'],
// [16, 73, 68, 97, 0.905, 51, 34, '良'],
// [17, 54, 27, 47, 0.592, 53, 12, '良'],
// [18, 51, 61, 97, 0.811, 65, 19, '良'],
// [19, 91, 71, 121, 1.374, 43, 18, '良'],
// [20, 73, 102, 182, 2.787, 44, 19, '良'],
// [21, 73, 50, 76, 0.717, 31, 20, '良'],
// [22, 84, 94, 140, 2.238, 68, 18, '良'],
// [23, 93, 77, 104, 1.165, 53, 7, '良'],
// [24, 99, 130, 227, 3.97, 55, 15, '良'],
// [25, 146, 84, 139, 1.094, 40, 17, '轻度污染'],
// [26, 113, 108, 137, 1.481, 48, 15, '轻度污染'],
// [27, 81, 48, 62, 1.619, 26, 3, '良'],
// [28, 56, 48, 68, 1.336, 37, 9, '良'],
// [29, 82, 92, 174, 3.29, 0, 13, '良'],
// [30, 106, 116, 188, 3.628, 101, 16, '轻度污染'],
// [31, 118, 50, 0, 1.383, 76, 11, '轻度污染']
];
const dataSH = [
[1, 91, 45, 125, 0.82, 34, 23, '良'],
[2, 65, 27, 78, 0.86, 45, 29, '良'],
[3, 83, 60, 84, 1.09, 73, 27, '良'],
[4, 109, 81, 121, 1.28, 68, 51, '轻度污染'],
[5, 106, 77, 114, 1.07, 55, 51, '轻度污染'],
// [6, 109, 81, 121, 1.28, 68, 51, '轻度污染'],
// [7, 106, 77, 114, 1.07, 55, 51, '轻度污染'],
// [8, 89, 65, 78, 0.86, 51, 26, '良'],
// [9, 53, 33, 47, 0.64, 50, 17, '良'],
// [10, 80, 55, 80, 1.01, 75, 24, '良'],
// [11, 117, 81, 124, 1.03, 45, 24, '轻度污染'],
// [12, 99, 71, 142, 1.1, 62, 42, '良'],
// [13, 95, 69, 130, 1.28, 74, 50, '良'],
// [14, 116, 87, 131, 1.47, 84, 40, '轻度污染'],
// [15, 108, 80, 121, 1.3, 85, 37, '轻度污染'],
// [16, 134, 83, 167, 1.16, 57, 43, '轻度污染'],
// [17, 79, 43, 107, 1.05, 59, 37, '良'],
// [18, 71, 46, 89, 0.86, 64, 25, '良'],
// [19, 97, 71, 113, 1.17, 88, 31, '良'],
// [20, 84, 57, 91, 0.85, 55, 31, '良'],
// [21, 87, 63, 101, 0.9, 56, 41, '良'],
// [22, 104, 77, 119, 1.09, 73, 48, '轻度污染'],
// [23, 87, 62, 100, 1, 72, 28, '良'],
// [24, 168, 128, 172, 1.49, 97, 56, '中度污染'],
// [25, 65, 45, 51, 0.74, 39, 17, '良'],
// [26, 39, 24, 38, 0.61, 47, 17, '优'],
// [27, 39, 24, 39, 0.59, 50, 19, '优'],
// [28, 93, 68, 96, 1.05, 79, 29, '良'],
// [29, 188, 143, 197, 1.66, 99, 51, '中度污染'],
// [30, 174, 131, 174, 1.55, 108, 50, '中度污染'],
// [31, 187, 143, 201, 1.39, 89, 53, '中度污染']
];
// const schema = [
// { name: 'date', index: 0, text: '日' },
// { name: 'AQIindex', index: 1, text: 'AQI指数' },
// { name: 'PM25', index: 2, text: 'PM2.5' },
// { name: 'PM10', index: 3, text: 'PM10' },
// { name: 'CO', index: 4, text: '一氧化碳CO' },
// { name: 'NO2', index: 5, text: '二氧化氮NO2' },
// { name: 'SO2', index: 6, text: '二氧化硫SO2' }
// ];
const itemStyle = {
opacity: 0.8,
shadowBlur: 10,
shadowOffsetX: 0,
shadowOffsetY: 0,
shadowColor: 'rgba(0,0,0,0.3)'
};
export default function createOpt() {
import {compare} from "./dataTool"
// 将后台数据转成数组
function doWordCloud(data) {
let arr1 = [];
for (let key in data) {
let obj = { name: key, value: data[key] };
arr1.push(obj);
}
return arr1;
}
// 创建词云的对象
function bubbleChart(data = [], format = []) {
let [maxValue, temp] = [0, []];
data.forEach((item) => {
temp.push(item[format[1]]);
});
maxValue = Math.max.apply(null, temp);
// 气泡颜色数组
let color = [
"#FFB600",
"#886CFF",
"#0084FF",
"#4CB690",
"#58B458",
"#6C6C6C",
"#F56161",
"#FC754C",
"#5F5EEC",
];
// 气泡颜色备份
let bakeColor = [...color];
// 气泡数据
let bubbleData = [];
// 气泡基础大小
let basicSize = 30;
// 节点之间的斥力因子,值越大,气泡间距越大
let repulsion = 380;
// 根据气泡数量配置基础大小和斥力因子(以实际情况进行适当调整,使气泡合理分布)
if (data.length >= 5 && data.length < 10) {
basicSize = 30;
repulsion = 230;
}
if (data.length >= 10 && data.length < 20) {
basicSize = 40;
repulsion = 150;
} else if (data.length >= 20) {
basicSize = 50;
repulsion = 65;
}
// 填充气泡数据数组bubbleData
for (let item of data) {
// 确保气泡数据条数少于或等于气泡颜色数组大小时,气泡颜色不重复
if (!bakeColor.length) bakeColor = [...color];
let colorSet = new Set(bakeColor);
let curIndex = Math.round(Math.random() * (colorSet.size - 1));
let curColor = bakeColor[curIndex];
colorSet.delete(curColor);
bakeColor = [...colorSet];
// 气泡大小设置
let size = (item[format[1]] * basicSize * 2) / maxValue;
if (size < basicSize) size = basicSize;
bubbleData.push({
name: item[format[0]],
value: item[format[1]],
symbolSize: size,
draggable: true,
itemStyle: {
normal: {
color: curColor,
opacity: 0.8,
shadowBlur: 10,
shadowOffsetX: 0,
shadowOffsetY: 0,
shadowColor: "rgba(0,0,0,0.3)",
},
},
});
}
return {
grid: {
top: "16px",
left: "16px",
right: "16px",
bottom: "16px",
containLabel: true,
},
bubbleData,
repulsion,
};
}
// 创建词云图
export default function createWordCloud(obj) {
let words = doWordCloud(obj);
words.sort(compare('value'));
let bubble = bubbleChart(words, ['name', 'value']);
return {
animationEasingUpdate: 'bounceIn',
tooltip: {
backgroundColor: "#08182F",
color: "#fff",
@ -140,76 +107,27 @@ export default function createOpt() {
},
extraCssText: "box-shadow: 0px 0px 10px 0px #3373CC;",
formatter: function(param) {
let value = param.value;
return `<span>${value[value.length - 1]}</span><br><span>${value[0]}</span>`
let data = param.data;
return `<span>${data.name}</span><br><span>${data.value}</span>`
}
},
xAxis: {
show: false,
type: 'value',
splitLine: {
lineStyle: {
type: 'dashed'
}
}
},
yAxis: {
show: false,
type: 'value',
splitLine: {
lineStyle: {
type: 'dashed'
}
},
scale: true
},
series: [{
name: '北京',
data: dataBJ,
type: 'scatter',
symbolSize: function (data) {
return data[2]
},
label: {
show: true,
color: "#FFF",
formatter: function (param) {
return param.data[param.data.length - 1];
},
},
itemStyle: itemStyle
}, {
name: '上海',
data: dataSH,
type: 'scatter',
symbolSize: function (data) {
return data[2]
},
type: 'graph',
layout: 'force',
label: {
show: true,
color: "#FFF",
formatter: function (param) {
return param.data[param.data.length - 1];
},
},
itemStyle: itemStyle
},
{
name: '广州',
data: dataGZ,
type: 'scatter',
symbolSize: function (data) {
return data[2]
show:true,
color:"#FFF",
fontSize:12,
},
label: {
show: true,
color: "#FFF",
formatter: function (param) {
return param.data[param.data.length - 1];
},
force: {
gravity:0.2,
repulsion: bubble.repulsion,
edgeLength: 10
},
itemStyle: itemStyle
}
]
// 是否开启鼠标缩放和平移漫游
roam: true,
data: bubble.bubbleData
}]
}
}
}

@ -0,0 +1,79 @@
<!--
* @Author: your name
* @Date: 2021-10-14 19:06:52
* @LastEditTime: 2021-11-09 13:41:16
* @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 { getPositive } from "@/api/WeiboDetails";
import createWordCloud from "@/utils/gol/bubbleWord";
//import createOpt from "./opt";
export default {
name: "MWDmodelPopularity",
data() {
return {
opt: {},
load: false,
positiveData: {},
negativeData: {},
form: {
sBrand: "",
token: "",
},
};
},
created() {
this.form.token = this.getToken;
this.form.sBrand = this.getBrand.brandname || this.brand;
this.getData();
},
methods: {
getData() {
this.load = true;
this.getH().then(() => {
this.load = false;
})
},
//
getH() {
return new Promise((resolve, reject) => {
let obj = Object.assign({}, this.getCtime2, this.form);
getPositive(obj)
.then((res) => {
this.positiveData = res.data || {};
this.opt = createWordCloud(this.positiveData);
resolve(res);
})
.catch(() => {
reject(false);
});
});
},
},
};
</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>

@ -0,0 +1,135 @@
<!--
* @Author: your name
* @Date: 2021-10-16 15:18:44
* @LastEditTime: 2021-11-08 18:27:24
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/WeiboDetails/positiveViewKOL/index.vue
-->
<template>
<div class="pv-outter">
<v-label-div title="负面观点KOL">
</v-label-div>
<div class="pv-inner">
<div class="pv-item" v-for="(item,index) in ds" :key="index">
<div class="dm">
<img class="dm-m1" :src="item.url"/>
</div>
<div class="d-f">
<div class="d1">{{item.title}}</div>
<div class="d2">粉丝数<span class="d2-s1">{{item.fans}}</span></div>
</div>
</div>
</div>
</div>
</template>
<script>
import {getCoreDiffuseWeiBo0528} from "@/api/WeiboDetails"
export default {
name: "MWDnegativeOpinionKOL",
data() {
return {
ds:[],
form: {
sBrand: "",
sQingGan: "2",
iSize: 6,
token: "",
},
}
},
created() {
this.form.token = this.getToken;
this.form.sBrand = this.getBrand.brandname || this.brand;
this.getData();
},
methods: {
getData() {
let obj = Object.assign({}, this.getCtime2, this.form);
getCoreDiffuseWeiBo0528(obj).then(res => {
let data = res.data || [];
//: data._sourse.user_author
//: data._sourse.weibofans
//: data._sourse.profileimgurl
let arr = [];
data.forEach((ele) => {
let o={
title: ele._source.user_author,
fans: ele._source.weibofans,
url: ele._source.profileimgurl
};
arr.push(o);
})
this.ds = arr;
});
},
}
};
</script>
<style lang="less" scoped>
.pv-outter {
width: 936px;
height: 246px;
border: 2px solid #0f2a4d;
margin-left: 16px;
.pv-inner {
width: 100%;
height: calc(100% - 48px);
padding: 0px 0px 16px 16px;
display: flex;
justify-content: flex-start;
flex-wrap: wrap;
.pv-item {
width: 285px;
height: 72px;
display: flex;
justify-content: flex-start;
align-items: center;
position: relative;
margin-right: 16px;
margin-top: 16px;
.dm {
position: absolute;
width: 72px;
height: 72px;
border-radius: 72px;
border: 1px solid #ccc;
left: 0px;
top: 0px;
background-color: #fff;
z-index: 10;
.dm-m1 {
width: 100%;
height: 100%;
border-radius: 100%;
}
}
.d-f {
position: absolute;
width: 249px;
height: 64px;
left: 36px;
padding-left: 65px;
background-image: url("../../../assets/images/BrandInsight/img_yhtx.png");
.d1 {
font-size: 14px;
color: #fff;
font-weight: 500;
margin-top: 10px;
}
.d2 {
color: #70869a;
font-size: 12px;
.d2-s1 {
font-size: 12px;
font-family: Bebas;
color: #f49847;
}
}
}
}
}
}
</style>

@ -0,0 +1,135 @@
<!--
* @Author: your name
* @Date: 2021-10-16 15:18:44
* @LastEditTime: 2021-11-08 18:28:28
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/WeiboDetails/positiveViewKOL/index.vue
-->
<template>
<div class="pv-outter">
<v-label-div title="正面观点KOL"> </v-label-div>
<div class="pv-inner">
<div class="pv-item" v-for="(item, index) in ds" :key="index">
<div class="dm">
<img class="dm-m1" :src="item.url"/>
</div>
<div class="d-f">
<div class="d1">{{ item.title }}</div>
<div class="d2">
粉丝数<span class="d2-s1">{{ item.fans }}</span>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import { getCoreDiffuseWeiBo0528 } from "@/api/WeiboDetails";
export default {
name: "MWDpositiveViewKOL",
data() {
return {
ds: [],
form: {
sBrand: "",
sQingGan: "1",
iSize: 6,
token: "",
},
};
},
created() {
this.form.token = this.getToken;
this.form.sBrand = this.getBrand.brandname || this.brand;
this.getData();
},
methods: {
getData() {
let obj = Object.assign({}, this.getCtime2, this.form);
getCoreDiffuseWeiBo0528(obj).then((res) => {
let data = res.data || [];
//: data._sourse.user_author
//: data._sourse.weibofans
//: data._sourse.profileimgurl
let arr = [];
data.forEach((ele) => {
let o = {
title: ele._source.user_author,
fans: ele._source.weibofans,
url: ele._source.profileimgurl,
};
arr.push(o);
});
this.ds = arr;
});
},
},
};
</script>
<style lang="less" scoped>
.pv-outter {
width: 936px;
height: 246px;
border: 2px solid #0f2a4d;
.pv-inner {
width: 100%;
height: calc(100% - 48px);
padding: 0px 0px 16px 16px;
display: flex;
justify-content: flex-start;
flex-wrap: wrap;
.pv-item {
width: 285px;
height: 72px;
display: flex;
justify-content: flex-start;
align-items: center;
position: relative;
margin-right: 16px;
margin-top: 16px;
.dm {
position: absolute;
width: 72px;
height: 72px;
border-radius: 72px;
border: 1px solid #ccc;
left: 0px;
top: 0px;
background-color: #fff;
z-index: 10;
.dm-m1 {
width: 100%;
height: 100%;
border-radius: 100%;
}
}
.d-f {
position: absolute;
width: 249px;
height: 64px;
left: 36px;
padding-left: 65px;
background-image: url("../../../assets/images/BrandInsight/img_yhtx.png");
.d1 {
font-size: 14px;
color: #fff;
font-weight: 500;
margin-top: 10px;
}
.d2 {
color: #70869a;
font-size: 12px;
.d2-s1 {
font-size: 12px;
font-family: Bebas;
color: #f49847;
}
}
}
}
}
}
</style>

@ -0,0 +1,169 @@
<!--
* @Author: your name
* @Date: 2021-10-14 10:48:56
* @LastEditTime: 2021-11-08 18:29:34
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/WeiboDetails/weiboCharacters/index.vue
-->
<template>
<div class="wc-outter">
<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">
<vue-scroll>
<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>
</vue-scroll>
</div>
</div>
</div>
</template>
<script>
import { getSexMergeWeiBo } from "@/api/WeiboDetails";
import createOpt from "./opt";
export default {
name: "MWDweiboCharacters",
data() {
return {
load: false,
form: {
sBrand: "",
token: "",
},
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.brand;
this.getData();
},
methods: {
//
getData() {
let obj = Object.assign({}, this.getCtime2, this.form);
getSexMergeWeiBo(obj).then((res) => {
let data = res.data || {};
let RegionWeiBo = data.RegionWeiBo;
let attestation = data.attestation;
let sex = data.sex;
this.RegionWeiBo = this.toArr(RegionWeiBo);
this.attestation = this.toArr(attestation);
this.sex = this.toArr(sex);
this.doVal(this.sex);
});
},
//
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:
this.doVal(this.sex);
break;
case 1:
this.doVal(this.attestation);
break;
case 2:
this.doVal(this.RegionWeiBo);
break;
default:
this.doVal(this.sex);
break;
}
},
},
};
</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,80 @@
/*
* @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: new echarts.graphic.LinearGradient(0, 1, 1, 0, [{
//给颜色设置渐变色 前面4个参数给第一个设置1第四个设置0 ,就是水平渐变
//给第一个设置0第四个设置1就是垂直渐变
offset: 0,
color: 'black'
}, {
offset: 1,
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: 30
},
emphasis: {
label: {
show: true,
fontSize: '16',
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,71 @@
<!--
* @Author: your name
* @Date: 2021-10-14 10:11:41
* @LastEditTime: 2021-11-08 18:30:57
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/WeiboDetails/weiboCommunicationTrend/index.vue
-->
<template>
<div class="wct-outter">
<v-label-div title="微博传播趋势">
</v-label-div>
<div class="wct-inner">
<v-echarts :opt="opt"></v-echarts>
</div>
</div>
</template>
<script>
import {getCountTime0528} from "@/api/WeiboDetails"
import createOpt from "./opt"
export default {
name: "MWDweiboCommunicationTrend",
data() {
return {
load: false,
form: {
sBrand: "",
token: "",
},
opt: createOpt()
}
},
created() {
this.form.token = this.getToken;
this.form.sBrand = this.getBrand.brandname || this.brand;
this.getData();
},
methods: {
getData() {
this.load = true;
let obj = Object.assign({}, this.getCtime2, this.form);
getCountTime0528(obj).then(res => {
let data = res.data || [];
let dx = []; //time
let ds = []; //value
data.forEach(ele => {
let key = ele.Time;
let value = ele.value;
dx.push(key);
ds.push(value);
})
this.opt = createOpt(dx, ds)
this.load = false
});
}
}
};
</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,88 @@
/*
* @Author: your name
* @Date: 2021-10-12 15:32:24
* @LastEditTime: 2021-10-14 10:21:55
* @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 = []) {
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 str = value.substring(10, 16)
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)'
}]),
}}
}
]
};
}

@ -0,0 +1,108 @@
<!--
* @Author: your name
* @Date: 2021-10-14 15:54:06
* @LastEditTime: 2021-11-08 18:31:58
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/WeiboDetails/weiboContentTOPVolume/index.vue
-->
<template>
<div class="wct-outter" v-loading="load">
<v-label-div title="微博内容TOP声量"> </v-label-div>
<div class="wct-inner">
<div class="wct-d1" v-for="(item,index) in list" :key="index">
<v-echarts :opt="item.opt"></v-echarts>
<div class="wct-d1-dd1">
<span>排名<span class="ss1">0{{index+1}}</span></span>
<span>声量<span class="ss1">{{item.value}}</span></span>
</div>
</div>
</div>
</div>
</template>
<script>
import {getDirectWeiBo0528} from "@/api/WeiboDetails"
import {comparePig} from "@/utils/gol/dataTool"
import createOpt from "./opt"
export default {
name: "MWDweiboContentTOPVolume",
data() {
return {
load: false,
form: {
sBrand: "",
token: "",
},
list: [],
colors: ['#3373CC', '#63AECC', '#54BF93', '#CC9D12', '#3373CC', '#63AECC', '#54BF93', '#CC9D12']
};
},
created() {
this.form.token = this.getToken;
this.form.sBrand = this.getBrand.brandname || this.brand;
this.getData();
},
methods: {
getData() {
this.load = true;
let obj = Object.assign({}, this.getCtime2, this.form);
getDirectWeiBo0528(obj).then(res => {
let data = res.data || [];
let arr = [];
data.sort(comparePig('value'));
let maxVal = data[0].value
data.forEach((ele,index) => {
let obj = {
value: ele.value,
opt: createOpt(ele.key,this.colors[index],ele.value, maxVal)
}
arr.push(obj)
})
this.list = arr;
this.load = false;
});
}
}
}
</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,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,119 @@
<!--
* @Author: your name
* @Date: 2021-10-14 10:24:56
* @LastEditTime: 2021-11-08 18:34:14
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/WeiboDetails/weiboContentType/index.vue
-->
<template>
<div class="wct-outter">
<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/WeiboDetails";
import createOpt from "./opt";
export default {
name: "MWDweiboContentType",
data() {
return {
load: false,
form: {
sBrand: "",
token: "",
},
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.brand;
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);
});
console.log();
},
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;
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,80 @@
/*
* @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: new echarts.graphic.LinearGradient(0, 1, 1, 0, [{
//给颜色设置渐变色 前面4个参数给第一个设置1第四个设置0 ,就是水平渐变
//给第一个设置0第四个设置1就是垂直渐变
offset: 0,
color: 'black'
}, {
offset: 1,
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: 30
},
emphasis: {
label: {
show: true,
fontSize: '16',
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,62 @@
<!--
* @Author: your name
* @Date: 2021-10-14 19:15:58
* @LastEditTime: 2021-11-08 18:36:34
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/WeiboDetails/weiboSpreadFission/index.vue
-->
<template>
<div class="wsf-outter">
<v-label-div title="微博传播裂变">
</v-label-div>
<div class="wsf-inner">
<v-echarts :opt="opt"></v-echarts>
</div>
</div>
</template>
<script>
import {getGraphData} from "@/api/getEchars";
//import {getDiffuseZhuTi} from "@/api/WeiboDetails";
import createOpt from "./opt"
export default {
name: "MWDweiboSpreadFission",
data() {
return {
opt: {},
form: {
token:"",
sBrand:""
}
}
},
created() {
this.form.token = this.getToken;
this.form.sBrand = this.getBrand.brandname || this.brand;
this.drawGraph();
},
methods: {
drawGraph() {
let obj = Object.assign({}, this.getCtime2, this.form);
getGraphData(obj).then(res => {
this.opt = createOpt(res.data)
});
}
}
}
</script>
<style lang="less" scoped>
.wsf-outter {
width: 460px;
height: 460px;
border: 2px solid #0f2a4d;
margin-left: 16px;
.wsf-inner {
width: 100%;
height: calc(100% - 48px);
}
}
</style>

@ -0,0 +1,57 @@
/*
* @Author: your name
* @Date: 2021-10-14 19:32:39
* @LastEditTime: 2021-10-14 19:40:03
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/WeiboDetails/weiboSpreadFission/opt.js
*/
export default function createOpt(data) {
return {
title: {
show: false,
text: 'NPM Dependencies'
},
animationDurationUpdate: 1500,
animationEasingUpdate: 'quinticInOut',
series: [
{
type: 'graph',
layout: 'none',
// progressiveThreshold: 700,
data: data.nodes.map(function (node) {
return {
x: node.x,
y: node.y,
id: node.id,
name: node.label,
symbolSize: node.size,
itemStyle: {
color: node.color
}
};
}),
edges: data.edges.map(function (edge) {
return {
source: edge.sourceID,
target: edge.targetID
};
}),
emphasis: {
focus: 'adjacency',
label: {
position: 'right',
show: true
}
},
roam: true,
lineStyle: {
width: 0.5,
curveness: 0.3,
opacity: 0.7
}
}
]
}
}

@ -0,0 +1,116 @@
<!--
* @Author: your name
* @Date: 2021-10-14 19:41:24
* @LastEditTime: 2021-11-08 18:37:34
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/WeiboDetails/weiboTonalDistribution/index.vue
-->
<template>
<div class="wtd-outter">
<v-label-div title="调性分布"> </v-label-div>
<div class="wtd-inner">
<div class="wtd-item" v-for="(value,key) in obj"
:key="key">
<v-percent :percentage="value.positive"></v-percent>
<span class="s1">{{value.show}}</span>
<v-percent color="#b78e11" :percentage="value.negative" reverse></v-percent>
</div>
</div>
</div>
</template>
<script>
import { getBoauthenAffectionsWeiBo0528 } from "@/api/WeiboDetails";
export default {
name: "MWDweiboTonalDistribution",
data() {
return {
form: {
token: "",
sBrand: "",
},
obj: {
bigV:{positive:0.1,negative:0.1,show:"个人大V"},
media:{positive:0.1,negative:0.1,show:"媒体"},
enterprice:{positive:0.1,negative:0.1,show:"企业"},
goverment:{positive:0.1,negative:0.1,show:"政府"},
famousPerson:{positive:0.1,negative:0.1,show:"名人"},
uncertified:{positive:0.1,negative:0.1,show:"未认证"},
certified:{positive:0.1,negative:0.1,show:"已认证"}
},
};
},
created() {
this.form.token = this.getToken;
this.form.sBrand = this.getBrand.brandname || this.Brand;
this.getData();
},
methods: {
getData() {
let obj = Object.assign({}, this.getCtime2, this.form);
getBoauthenAffectionsWeiBo0528(obj).then(res => {
let data = res.data;
data.forEach(ele => {
switch (ele.key) {
case ("个人大V"):
this.obj.bigV.positive = ele.value[0]/(ele.value[0].value+ele.value[2].value+0.1); //index[0]
this.obj.bigV.negative = ele.value[2].value/(ele.value[0].value+ele.value[2].value+0.1); //index[2]
break;
case ("媒体"):
this.obj.media.positive = ele.value[0].value/(ele.value[0].value+ele.value[2].value+0.1);
this.obj.media.negative = ele.value[2].value/(ele.value[0].value+ele.value[2].value+0.1);
break;
case ("企业"):
this.obj.enterprice.positive = ele.value[0].value/(ele.value[0].value+ele.value[2].value+0.1);
this.obj.enterprice.negative = ele.value[2].value/(ele.value[0].value+ele.value[2].value+0.1);
break;
case ("政府"):
this.obj.goverment.positive = ele.value[0].value/(ele.value[0].value+ele.value[2].value+0.1);
this.obj.goverment.negative = ele.value[2].value/(ele.value[0].value+ele.value[2].value+0.1);
break;
case ("名人"):
this.obj.famousPerson.positive = ele.value[0].value/(ele.value[0].value+ele.value[2].value+0.1);
this.obj.famousPerson.negative = ele.value[2].value/(ele.value[0].value+ele.value[2].value+0.1);
break;
case ("非认证"):
this.obj.uncertified.positive = ele.value[0].value/(ele.value[0].value+ele.value[2].value+0.1);
this.obj.uncertified.negative = ele.value[2].value/(ele.value[0].value+ele.value[2].value+0.1);
break;
case ("已认证"):
this.obj.certified.positive = ele.value[0].value/(ele.value[0].value+ele.value[2].value+0.1);
this.obj.certified.negative = ele.value[2].value/(ele.value[0].value+ele.value[2].value+0.1);
break;
default:
break;
}
})
});
},
},
};
</script>
<style lang="less" scoped>
.wtd-outter {
width: 460px;
height: 460px;
border: 2px solid #0f2a4d;
margin-left: 16px;
.wtd-inner {
width: 100%;
padding: 20px 16px;
.wtd-item {
display: flex;
justify-content: space-between;
margin-bottom: 36px;
.s1 {
display: block;
color: #fff;
font-size: 14px;
font-weight: 500;
}
}
}
}
</style>

@ -0,0 +1,112 @@
/*
* @Author: your name
* @Date: 2021-10-14 19:59:04
* @LastEditTime: 2021-10-14 20:58:54
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/WeiboDetails/weiboTonalDistribution/opt.js
*/
export default function createOpt() {
return {
grid: {
left: 16,
right: 16,
bottom: 0,
top: 40,
containLabel: true
},
tooltip: {
trigger: "axis",
backgroundColor: "#08182F",
color: "#fff",
borderColor: "#3373CC",
textStyle: {
color: "#fff", //设置文字颜色
},
extraCssText: "box-shadow: 0px 0px 10px 0px #3373CC;"
},
legend: {
position: 'center',
icon: 'roundRect',
y: 16,
textStyle: { //图例文字的样式
color: '#fff'
},
data: ['负面', '正面']
},
xAxis: {
type: 'value',
show: false,
splitLine: {
show: false,
lineStyle: {
type: 'dashed'
}
}
},
yAxis: {
type: 'category',
axisLine: { show: false },
axisLabel: { show: false },
axisTick: { show: false },
splitLine: { show: false },
data: [
'已认证',
'非认证',
'名人博主',
'政府',
'企业',
'媒体',
'个人大V',
]
},
series: [
{
name: '正面',
type: 'bar',
stack: '总量',
barWidth: 20,
label: {
show: true,
formatter: '{b}',
position: 'left',
color: '#fff',
fontWeight: 'bold'
},
data: [
{ value: 0.07 },
{ value: 0.09 },
{ value: 0.23 },
{ value: 0.17 },
{ value: 0.36 },
{ value: 0.26 },
{ value: 0.28 },
]
}, {
name: '负面',
type: 'bar',
stack: '总量',
barWidth: 20,
label: {
show: true,
formatter: '{b}',
position: 'right',
color: '#fff',
fontWeight: 'bold'
},
itemStyle: {
color: '#CC9D12',
},
data: [
{ value: -0.07 },
{ value: -0.09 },
{ value: -0.23 },
{ value: -0.17 },
{ value: -0.36 },
{ value: -0.26 },
{ value: -0.28 },
]
}
]
}
}

@ -0,0 +1,104 @@
<!--
* @Author: your name
* @Date: 2021-10-14 11:25:20
* @LastEditTime: 2021-11-08 18:33:13
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/WeiboDetails/weiboUserActiveArea/index.vue
-->
<template>
<div class="wua-outter">
<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 { getRegionWeiBo } from "@/api/WeiboDetails";
import createOptD1 from "./opt1";
import createOptD2 from "./opt2";
export default {
name: "MWDweiboUserActiveArea",
data() {
return {
form: {
sBrand: "",
token: "",
},
opt1: createOptD1(),
opt2: createOptD2(),
};
},
created() {
this.form.token = this.getToken;
this.form.sBrand = this.getBrand.brandname || this.brand;
this.getData();
},
methods: {
getData() {
this.load = true;
let obj = Object.assign({}, this.getCtime2, this.form);
getRegionWeiBo(obj).then((res) => {
let data = res.data || {};
let arr = this.toArr(data);
let dx = []; //
let ds = []; //
arr.forEach((ele) => {
let name = ele.name || "";
if(name.indexOf('省') === -1) {
ele.name = ele.name + '市'
}
let value = ele.value;
dx.push(ele.name);
ds.push(value);
});
let dm = arr //
this.opt1 = createOptD1(dx, ds);
this.opt2 = createOptD2(dm);
});
},
//
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,83 @@
/*
* @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: [
{
name: '2011',
type: 'bar',
barWidth: 20,
data: ds,
color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [{
offset: 0,
color: '#010B19'
}, {
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,79 @@
<!--
* @Author: your name
* @Date: 2021-10-14 19:06:52
* @LastEditTime: 2021-11-09 13:41:39
* @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 { getNegative } from "@/api/WeiboDetails";
import createWordCloud from "@/utils/gol/bubbleWord";
//import createOpt from "./opt";
export default {
name: "MWDweiboWordCloud",
data() {
return {
opt: {},
load: false,
positiveData: {},
negativeData: {},
form: {
sBrand: "",
token: "",
},
};
},
created() {
this.form.token = this.getToken;
this.form.sBrand = this.getBrand.brandname || this.brand;
this.getData();
},
methods: {
getData() {
this.load = true;
this.getF().then(() => {
this.load = false;
});
},
//
getF() {
return new Promise((resolve, reject) => {
let obj = Object.assign({}, this.getCtime2, this.form);
getNegative(obj)
.then((res) => {
this.negativeData = res.data || {};
this.opt = createWordCloud(this.negativeData);
resolve(res);
})
.catch(() => {
reject(false);
});
});
},
},
};
</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>

@ -0,0 +1,215 @@
/*
* @Author: your name
* @Date: 2021-10-09 13:35:13
* @LastEditTime: 2021-10-14 19:14:21
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/Index/hotDiscussionGraph/opt.js
*/
// import * as echarts from "echarts";
const dataBJ = [
[1, 55, 9, 56, 0.46, 18, 6, '良'],
[2, 25, 11, 21, 0.65, 34, 9, '优'],
[3, 56, 7, 63, 0.3, 14, 5, '良'],
[4, 33, 7, 29, 0.33, 16, 6, '优'],
[5, 42, 24, 44, 0.76, 40, 16, '优'],
[6, 82, 58, 90, 1.77, 68, 33, '良'],
[7, 74, 49, 77, 1.46, 48, 27, '良'],
[8, 78, 55, 80, 1.29, 59, 29, '良'],
[9, 267, 216, 280, 4.8, 108, 64, '重度污染'],
// [10, 185, 127, 216, 2.52, 61, 27, '中度污染'],
// [11, 39, 19, 38, 0.57, 31, 15, '优'],
// [12, 41, 11, 40, 0.43, 21, 7, '优'],
// [13, 64, 38, 74, 1.04, 46, 22, '良'],
// [14, 108, 79, 120, 1.7, 75, 41, '轻度污染'],
// [15, 108, 63, 116, 1.48, 44, 26, '轻度污染'],
// [16, 33, 6, 29, 0.34, 13, 5, '优'],
// [17, 94, 66, 110, 1.54, 62, 31, '良'],
// [18, 186, 142, 192, 3.88, 93, 79, '中度污染'],
// [19, 57, 31, 54, 0.96, 32, 14, '良'],
// [20, 22, 8, 17, 0.48, 23, 10, '优'],
// [21, 39, 15, 36, 0.61, 29, 13, '优'],
// [22, 94, 69, 114, 2.08, 73, 39, '良'],
// [23, 99, 73, 110, 2.43, 76, 48, '良'],
// [24, 31, 12, 30, 0.5, 32, 16, '优'],
// [25, 42, 27, 43, 1, 53, 22, '优'],
// [26, 154, 117, 157, 3.05, 92, 58, '中度污染'],
// [27, 234, 185, 230, 4.09, 123, 69, '重度污染'],
// [28, 160, 120, 186, 2.77, 91, 50, '中度污染'],
// [29, 134, 96, 165, 2.76, 83, 41, '轻度污染'],
// [30, 52, 24, 60, 1.03, 50, 21, '良'],
// [31, 46, 5, 49, 0.28, 10, 6, '优']
];
const dataGZ = [
[1, 26, 37, 27, 1.163, 27, 13, '优'],
[2, 85, 62, 71, 1.195, 60, 8, '良'],
[3, 78, 38, 74, 1.363, 37, 7, '良'],
[4, 21, 21, 36, 0.634, 40, 9, '优'],
[5, 41, 42, 46, 0.915, 81, 13, '优'],
// [6, 56, 52, 69, 1.067, 92, 16, '良'],
// [7, 64, 30, 28, 0.924, 51, 2, '良'],
// [8, 55, 48, 74, 1.236, 75, 26, '良'],
// [9, 76, 85, 113, 1.237, 114, 27, '良'],
// [10, 91, 81, 104, 1.041, 56, 40, '良'],
// [11, 84, 39, 60, 0.964, 25, 11, '良'],
// [12, 64, 51, 101, 0.862, 58, 23, '良'],
// [13, 70, 69, 120, 1.198, 65, 36, '良'],
// [14, 77, 105, 178, 2.549, 64, 16, '良'],
// [15, 109, 68, 87, 0.996, 74, 29, '轻度污染'],
// [16, 73, 68, 97, 0.905, 51, 34, '良'],
// [17, 54, 27, 47, 0.592, 53, 12, '良'],
// [18, 51, 61, 97, 0.811, 65, 19, '良'],
// [19, 91, 71, 121, 1.374, 43, 18, '良'],
// [20, 73, 102, 182, 2.787, 44, 19, '良'],
// [21, 73, 50, 76, 0.717, 31, 20, '良'],
// [22, 84, 94, 140, 2.238, 68, 18, '良'],
// [23, 93, 77, 104, 1.165, 53, 7, '良'],
// [24, 99, 130, 227, 3.97, 55, 15, '良'],
// [25, 146, 84, 139, 1.094, 40, 17, '轻度污染'],
// [26, 113, 108, 137, 1.481, 48, 15, '轻度污染'],
// [27, 81, 48, 62, 1.619, 26, 3, '良'],
// [28, 56, 48, 68, 1.336, 37, 9, '良'],
// [29, 82, 92, 174, 3.29, 0, 13, '良'],
// [30, 106, 116, 188, 3.628, 101, 16, '轻度污染'],
// [31, 118, 50, 0, 1.383, 76, 11, '轻度污染']
];
const dataSH = [
[1, 91, 45, 125, 0.82, 34, 23, '良'],
[2, 65, 27, 78, 0.86, 45, 29, '良'],
[3, 83, 60, 84, 1.09, 73, 27, '良'],
[4, 109, 81, 121, 1.28, 68, 51, '轻度污染'],
[5, 106, 77, 114, 1.07, 55, 51, '轻度污染'],
// [6, 109, 81, 121, 1.28, 68, 51, '轻度污染'],
// [7, 106, 77, 114, 1.07, 55, 51, '轻度污染'],
// [8, 89, 65, 78, 0.86, 51, 26, '良'],
// [9, 53, 33, 47, 0.64, 50, 17, '良'],
// [10, 80, 55, 80, 1.01, 75, 24, '良'],
// [11, 117, 81, 124, 1.03, 45, 24, '轻度污染'],
// [12, 99, 71, 142, 1.1, 62, 42, '良'],
// [13, 95, 69, 130, 1.28, 74, 50, '良'],
// [14, 116, 87, 131, 1.47, 84, 40, '轻度污染'],
// [15, 108, 80, 121, 1.3, 85, 37, '轻度污染'],
// [16, 134, 83, 167, 1.16, 57, 43, '轻度污染'],
// [17, 79, 43, 107, 1.05, 59, 37, '良'],
// [18, 71, 46, 89, 0.86, 64, 25, '良'],
// [19, 97, 71, 113, 1.17, 88, 31, '良'],
// [20, 84, 57, 91, 0.85, 55, 31, '良'],
// [21, 87, 63, 101, 0.9, 56, 41, '良'],
// [22, 104, 77, 119, 1.09, 73, 48, '轻度污染'],
// [23, 87, 62, 100, 1, 72, 28, '良'],
// [24, 168, 128, 172, 1.49, 97, 56, '中度污染'],
// [25, 65, 45, 51, 0.74, 39, 17, '良'],
// [26, 39, 24, 38, 0.61, 47, 17, '优'],
// [27, 39, 24, 39, 0.59, 50, 19, '优'],
// [28, 93, 68, 96, 1.05, 79, 29, '良'],
// [29, 188, 143, 197, 1.66, 99, 51, '中度污染'],
// [30, 174, 131, 174, 1.55, 108, 50, '中度污染'],
// [31, 187, 143, 201, 1.39, 89, 53, '中度污染']
];
// const schema = [
// { name: 'date', index: 0, text: '日' },
// { name: 'AQIindex', index: 1, text: 'AQI指数' },
// { name: 'PM25', index: 2, text: 'PM2.5' },
// { name: 'PM10', index: 3, text: 'PM10' },
// { name: 'CO', index: 4, text: '一氧化碳CO' },
// { name: 'NO2', index: 5, text: '二氧化氮NO2' },
// { name: 'SO2', index: 6, text: '二氧化硫SO2' }
// ];
const itemStyle = {
opacity: 0.8,
shadowBlur: 10,
shadowOffsetX: 0,
shadowOffsetY: 0,
shadowColor: 'rgba(0,0,0,0.3)'
};
export default function createOpt() {
return {
grid: {
top: "16px",
left: "16px",
right: "16px",
bottom: "16px",
containLabel: true,
},
tooltip: {
backgroundColor: "#08182F",
color: "#fff",
borderColor: "#3373CC",
textStyle: {
color: "#fff", //设置文字颜色
},
extraCssText: "box-shadow: 0px 0px 10px 0px #3373CC;",
formatter: function(param) {
let value = param.value;
return `<span>${value[value.length - 1]}</span><br><span>${value[0]}</span>`
}
},
xAxis: {
show: false,
type: 'value',
splitLine: {
lineStyle: {
type: 'dashed'
}
}
},
yAxis: {
show: false,
type: 'value',
splitLine: {
lineStyle: {
type: 'dashed'
}
},
scale: true
},
series: [{
name: '北京',
data: dataBJ,
type: 'scatter',
symbolSize: function (data) {
return data[2]
},
label: {
show: true,
color: "#FFF",
formatter: function (param) {
return param.data[param.data.length - 1];
},
},
itemStyle: itemStyle
}, {
name: '上海',
data: dataSH,
type: 'scatter',
symbolSize: function (data) {
return data[2]
},
label: {
show: true,
color: "#FFF",
formatter: function (param) {
return param.data[param.data.length - 1];
},
},
itemStyle: itemStyle
},
{
name: '广州',
data: dataGZ,
type: 'scatter',
symbolSize: function (data) {
return data[2]
},
label: {
show: true,
color: "#FFF",
formatter: function (param) {
return param.data[param.data.length - 1];
},
},
itemStyle: itemStyle
}
]
}
}

@ -0,0 +1,292 @@
<!--
* @Author: your name
* @Date: 2021-10-14 09:00:09
* @LastEditTime: 2021-11-08 18:37:49
* @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-btn @click="goback"></v-btn>
</v-label-div>
<div class="wd-d1-bd">
<div class="d1">
{{ form.sBrand }}
</div>
<div class="d2" style="margin-left: 114px">
<img
class="dd1"
src="../../assets/images/BrandInsight/ic_xxzl.png"
/>
<div class="dd2">
<span class="s1">{{ countObj.count }}</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">{{ countObj.vCount }}</span>
<span class="s2">参与大V数量</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">
<MWDweiboCommunicationTrend></MWDweiboCommunicationTrend>
<MWDweiboContentType></MWDweiboContentType>
<MWDweiboCharacters></MWDweiboCharacters>
</div>
<div class="wd-d3">
<MWDweiboUserActiveArea></MWDweiboUserActiveArea>
<MWDweiboContentTOPVolume></MWDweiboContentTOPVolume>
</div>
<div class="wd-d4">
<MWDmodelPopularity></MWDmodelPopularity>
<MWDweiboWordCloud></MWDweiboWordCloud>
<MWDweiboSpreadFission></MWDweiboSpreadFission>
<MWDweiboTonalDistribution></MWDweiboTonalDistribution>
</div>
<div class="wd-d5">
<MWDpositiveViewKOL></MWDpositiveViewKOL>
<MWDnegativeOpinionKOL></MWDnegativeOpinionKOL>
</div>
</div>
</div>
</template>
<script>
import MWDweiboCommunicationTrend from "./MWDweiboCommunicationTrend";
import MWDweiboContentType from "./MWDweiboContentType";
import MWDweiboCharacters from "./MWDweiboCharacters";
import MWDweiboUserActiveArea from "./MWDweiboUserActiveArea";
import MWDweiboContentTOPVolume from "./MWDweiboContentTOPVolume";
import MWDmodelPopularity from "./MWDmodelPopularity";
import MWDweiboWordCloud from "./MWDweiboWordCloud";
import MWDweiboSpreadFission from "./MWDweiboSpreadFission";
import MWDweiboTonalDistribution from "./MWDweiboTonalDistribution";
import MWDpositiveViewKOL from "./MWDpositiveViewKOL";
import MWDnegativeOpinionKOL from "./MWDnegativeOpinionKOL";
import { getBrandWeiBoCount0528 } from "@/api/WeiboDetails/index.js";
import { getAffections } from "@/api/WeiboDetails/index.js";
export default {
name: "ModelWeiboDetails",
components: {
MWDweiboCommunicationTrend, //
MWDweiboContentType, //
MWDweiboCharacters, //
MWDweiboUserActiveArea, //
MWDweiboContentTOPVolume, // TOP
MWDmodelPopularity, //
MWDweiboWordCloud, //
MWDweiboSpreadFission, //
MWDweiboTonalDistribution, //
MWDpositiveViewKOL, // KOL
MWDnegativeOpinionKOL, // KOL
},
data() {
return {
width: 200,
form: {
token: "",
sBrand: "",
},
countObj: {
carseriesCount: 0,
count: 0,
userCount: 0,
vCount: 0,
},
countObj2: {
正面: 0,
中性: 0,
负面: 0,
},
total: 0,
};
},
created() {
this.form.token = this.getToken;
this.form.sBrand = this.getBrand.brandname || "奥迪";
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);
});
getAffections(obj).then((res) => {
let data = res.data || {};
let total = 0;
for (let key in data) {
total += data[key] * 1;
}
this.countObj2 = Object.assign(this.countObj2, data);
this.total = total;
});
},
},
};
</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>

@ -1,14 +1,14 @@
<!--
* @Author: your name
* @Date: 2021-10-14 18:42:40
* @LastEditTime: 2021-10-14 18:59:42
* @LastEditTime: 2021-11-09 11:58:09
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/WeiboDetails/modelPopularity/index.vue
-->
<template>
<div class="mp-outter">
<div class="mp-outter" v-loading="load">
<v-label-div title="车型热度">
<div>
<v-tab-group
@ -37,6 +37,7 @@ export default {
name: "modelPopularity",
data() {
return {
load: false,
form: {
sBrand: "",
token: "",
@ -61,6 +62,7 @@ export default {
methods: {
getData() {
this.load = true;
Promise.all([
this.getHotSeries(),
this.getHotTypes(),
@ -69,6 +71,7 @@ export default {
]).then(() => {
//
this.handlerTab(0);
this.load = false;
});
},
//

@ -1,13 +1,13 @@
<!--
* @Author: your name
* @Date: 2021-10-16 15:18:44
* @LastEditTime: 2021-10-16 15:58:24
* @LastEditTime: 2021-11-09 13:14:13
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/WeiboDetails/positiveViewKOL/index.vue
-->
<template>
<div class="pv-outter">
<div class="pv-outter" v-loading="load">
<v-label-div title="负面观点KOL">
</v-label-div>
<div class="pv-inner">
@ -31,6 +31,7 @@ export default {
data() {
return {
ds:[],
load: false,
form: {
sBrand: "",
sQingGan: "2",
@ -47,6 +48,7 @@ export default {
methods: {
getData() {
let obj = Object.assign({}, this.getCtime2, this.form);
this.load = true;
getCoreDiffuseWeiBo0528(obj).then(res => {
let data = res.data || [];
//: data._sourse.user_author
@ -62,6 +64,7 @@ export default {
arr.push(o);
})
this.ds = arr;
this.load = false;
});
},
}

@ -1,13 +1,13 @@
<!--
* @Author: your name
* @Date: 2021-10-16 15:18:44
* @LastEditTime: 2021-10-16 15:56:52
* @LastEditTime: 2021-11-09 13:15:15
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/WeiboDetails/positiveViewKOL/index.vue
-->
<template>
<div class="pv-outter">
<div class="pv-outter" v-loading="load">
<v-label-div title="正面观点KOL"> </v-label-div>
<div class="pv-inner">
<div class="pv-item" v-for="(item, index) in ds" :key="index">
@ -32,6 +32,7 @@ export default {
data() {
return {
ds: [],
load: false,
form: {
sBrand: "",
sQingGan: "1",
@ -48,6 +49,7 @@ export default {
methods: {
getData() {
let obj = Object.assign({}, this.getCtime2, this.form);
this.load = true;
getCoreDiffuseWeiBo0528(obj).then((res) => {
let data = res.data || [];
//: data._sourse.user_author
@ -63,6 +65,7 @@ export default {
arr.push(o);
});
this.ds = arr;
this.load = false;
});
},
},

@ -1,13 +1,13 @@
<!--
* @Author: your name
* @Date: 2021-10-14 10:48:56
* @LastEditTime: 2021-10-14 11:00:50
* @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 class="wc-outter" v-loading="load">
<v-label-div title="微博人物画像">
<div>
<v-tab-group
@ -89,6 +89,7 @@ export default {
//
getData() {
let obj = Object.assign({}, this.getCtime2, this.form);
this.load = true;
getSexMergeWeiBo(obj).then((res) => {
let data = res.data || {};
let RegionWeiBo = data.RegionWeiBo;
@ -98,6 +99,7 @@ export default {
this.attestation = this.toArr(attestation);
this.sex = this.toArr(sex);
this.doVal(this.sex);
this.load = false;
});
},
//

@ -1,13 +1,13 @@
<!--
* @Author: your name
* @Date: 2021-10-14 10:11:41
* @LastEditTime: 2021-10-14 10:22:06
* @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 class="wct-outter" v-loading="load">
<v-label-div title="微博传播趋势">
</v-label-div>
<div class="wct-inner">

@ -1,13 +1,13 @@
<!--
* @Author: your name
* @Date: 2021-10-14 10:24:56
* @LastEditTime: 2021-10-14 10:46:41
* @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 class="wct-outter" v-loading="load">
<v-label-div title="微博内容类型"> </v-label-div>
<div class="wct-inner">
<div class="d1">
@ -79,8 +79,8 @@ export default {
getWtypeWeiBo0528(obj).then((res) => {
let data = res.data || [];
this.doVal(data);
this.load = false;
});
console.log();
},
doVal(arr = []) {
let total = 0;

@ -1,13 +1,13 @@
<!--
* @Author: your name
* @Date: 2021-10-14 19:15:58
* @LastEditTime: 2021-10-14 19:39:06
* @LastEditTime: 2021-11-09 13:18:14
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/WeiboDetails/weiboSpreadFission/index.vue
-->
<template>
<div class="wsf-outter">
<div class="wsf-outter" v-loading="load">
<v-label-div title="微博传播裂变">
</v-label-div>
<div class="wsf-inner">
@ -25,6 +25,7 @@ export default {
data() {
return {
opt: {},
load: false,
form: {
token:"",
sBrand:""
@ -39,8 +40,10 @@ export default {
methods: {
drawGraph() {
let obj = Object.assign({}, this.getCtime2, this.form);
this.load = true;
getGraphData(obj).then(res => {
this.opt = createOpt(res.data)
this.opt = createOpt(res.data);
this.load = false;
});
}
}

@ -1,13 +1,13 @@
<!--
* @Author: your name
* @Date: 2021-10-14 19:41:24
* @LastEditTime: 2021-11-05 10:02:09
* @LastEditTime: 2021-11-09 13:20:35
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/WeiboDetails/weiboTonalDistribution/index.vue
-->
<template>
<div class="wtd-outter">
<div class="wtd-outter" v-loading="load">
<v-label-div title="调性分布"> </v-label-div>
<div class="wtd-inner">
<div class="wtd-item" v-for="(value,key) in obj"
@ -26,6 +26,7 @@ export default {
name: "wtd-outter",
data() {
return {
load: false,
form: {
token: "",
sBrand: "",
@ -49,6 +50,7 @@ export default {
methods: {
getData() {
let obj = Object.assign({}, this.getCtime2, this.form);
this.load = true;
getBoauthenAffectionsWeiBo0528(obj).then(res => {
let data = res.data;
data.forEach(ele => {
@ -85,6 +87,7 @@ export default {
break;
}
})
this.load = false;
});
},
},

@ -1,13 +1,13 @@
<!--
* @Author: your name
* @Date: 2021-10-14 11:25:20
* @LastEditTime: 2021-10-14 15:06:40
* @LastEditTime: 2021-11-09 13:21:04
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/WeiboDetails/weiboUserActiveArea/index.vue
-->
<template>
<div class="wua-outter">
<div class="wua-outter" v-loading="load">
<v-label-div title="微博用户活跃地区"> </v-label-div>
<div class="wua-inner">
<div class="d1">
@ -28,6 +28,7 @@ export default {
name: "weiboUserActiveArea",
data() {
return {
load: false,
form: {
sBrand: "",
token: "",
@ -62,6 +63,7 @@ export default {
let dm = arr //
this.opt1 = createOptD1(dx, ds);
this.opt2 = createOptD2(dm);
this.load = false;
});
},
//

Loading…
Cancel
Save