prod
lily.zhang 3 years ago
parent 4fff89be22
commit b8f4a19ee0

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

@ -1,7 +1,7 @@
/*
* @Author: your name
* @Date: 2021-10-08 09:26:29
* @LastEditTime: 2021-11-08 18:38:19
* @LastEditTime: 2021-11-09 13:56:50
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/router/index.js
@ -35,6 +35,7 @@ import mcIndex from "@/views/MarketingComparison"
import ModelTailDetails from "@/views/ModelTailDetails"
import ModelEventDetails from "@/views/ModelEventDetails"
import ModelWeiboDetails from "@/views/ModelWeiboDetails"
import ModelForumDetails from "@/views/ModelForumDetails"
const router = [
{
path: '/login',
@ -137,6 +138,12 @@ const router = [
desc: "车型事件详情",
component: ModelEventDetails
},
{
path: '/modelForumDetails',
name: "modelForumDetails",
desc: "车型论坛详情",
component: ModelForumDetails
},
{
path: '/modelWeiboDetails',
name: "modelWeiboDetails",

@ -1,7 +1,7 @@
<!--
* @Author: your name
* @Date: 2021-10-08 16:44:08
* @LastEditTime: 2021-10-12 17:35:07
* @LastEditTime: 2021-11-09 16:25:31
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/components/v-ranking/index.vue
@ -134,7 +134,7 @@ export default {
text-align: center;
line-height: 48px;
.s1 {
color: #ffffff;
color: #99a2ad;
font-size: 16px;
line-height: 48px;
font-family: Bebas;

@ -1,7 +1,7 @@
<!--
* @Author: your name
* @Date: 2021-10-13 15:17:14
* @LastEditTime: 2021-11-09 13:26:17
* @LastEditTime: 2021-11-09 14:52:21
* @LastEditors: Please set LastEditors
* @Description: 论坛洞察详情
* @FilePath: /data-show/src/views/ForumDetails/index.vue
@ -50,7 +50,7 @@ export default {
load1: false,
load2: false,
opt1: {},
opt2: createOptD2(),
opt2: {},
msg: "",
form: {
sBrand: "",

@ -0,0 +1,48 @@
<!--
* @Author: your name
* @Date: 2021-11-09 16:02:50
* @LastEditTime: 2021-11-09 17:13:04
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/ModelForumDetails/MainPostIDModelAnalysis/index.vue
-->
<template>
<div class="mpma-outter">
<v-label-div title="跟帖ID车型分析" :showLine="false" :eStyle="{'border-style': 'none'}">
<v-tab-group :btns="['主帖ID', '认证ID']" @change="handlerTab"></v-tab-group>
</v-label-div>
<div class="mpma-inner">
<v-ranking-fpma num="1" label="奥迪A4" val="100"></v-ranking-fpma>
<v-ranking-fpma num="2" label="奥迪A4" val="100"></v-ranking-fpma>
<v-ranking-fpma num="3" label="奥迪A4" val="100"></v-ranking-fpma>
<v-ranking-fpma num="4" label="奥迪A4" val="100"></v-ranking-fpma>
<v-ranking-fpma num="5" label="奥迪A4" val="100"></v-ranking-fpma>
</div>
</div>
</template>
<script>
import vRankingFpma from "./v-ranking-fpma"
export default {
name: "FollowPostIDModelAnalysis",
components: {
vRankingFpma
},
methods: {
handlerTab() {
}
}
};
</script>
<style lang="less" scoped>
.mpma-outter {
width: 452px;
height: 412px;
.mpma-inner {
width: 100%;
height: calc(100% - 48px);
}
}
</style>

@ -0,0 +1,231 @@
<!--
* @Author: your name
* @Date: 2021-10-08 16:44:08
* @LastEditTime: 2021-11-09 17:12:38
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/components/v-ranking/index.vue
-->
<template>
<div class="v-r-container">
<div class="v-r-line" v-if="lineShow"></div>
<div class="v-r-inner">
<div :class="ls">
<span class="s1">{{ num|numStr }}</span>
</div>
<div :class="rs">
<span class="v-r-label">{{label}}</span>
<div class="v-r-res">
<span class="s1">数量</span>
<span class="s2">{{val}}</span>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
name: "v-ranking-fpma",
props: {
num: {
type: [String, Number],
default: 1,
},
val: {
type: [String, Number],
default: 0
},
label: {
type: String,
default: ""
},
lineShow: {
type: Boolean,
default: true
},
},
watch: {
num: {
handler(val) {
if(val == 1) {
this.ls = "v-r-left-1"
this.rs = "v-r-right-1"
} else if(val == 2) {
this.ls = "v-r-left-2"
this.rs = "v-r-right-2"
} else if(val == 3) {
this.ls = "v-r-left-3"
this.rs = "v-r-right-3"
} else {
this.ls = "v-r-left"
this.rs = "v-r-right"
}
},
immediate: true
}
},
data() {
return {
ls: "v-r-left",
rs: "v-r-right"
}
},
filters: {
numStr(val) {
let str = ""
if(0<val && val<10) {
str = '0' + val
} else {
str = val + ''
}
return str
}
}
};
</script>
<style lang="less" scoped>
.v-r-container {
width: 436px;
height: auto;
.v-r-line {
width: 100%;
height: 1px;
background:#0a1d3b;
margin-top: 11px;
margin-bottom: 10px;
}
.v-r-inner {
position: relative;
width: 100%;
height: 48px;
margin-top: 6px;
color: #fff;
background: #0a1d3b;
border-radius: 2px;
}
.v-r-label {
display: block;
font-size: 14px;
color: #FFFFFF;
margin-left: 40px;
font-weight: bold;
}
.v-r-res {
margin-right: 16px;
span {
display: inline-block;
text-align: right;
font-size: 12px;
}
.s1 {
color: #9ba4af;
margin-right: 8px;
}
.s2 {
color: #fff;
font-family: Bebas;
}
}
.v-r-left {
width: 48px;
height: 48px;
text-align: center;
line-height: 48px;
.s1 {
color: #99a2ad;
font-size: 16px;
line-height: 48px;
font-family: Bebas;
}
}
.v-r-right {
position: absolute;
width: 410px;
height: 48px;
border-top: 2px solid transparent;
top: 0px;
left: 24px;
display: flex;
justify-content: space-between;
align-items: center;
}
.v-r-left-1 {
width: 48px;
height: 48px;
text-align: center;
border: 2px solid #cc9d12;
border-radius: 48px;
.s1 {
color: #ffffff;
font-size: 16px;
line-height: 42px;
text-shadow: 0px 0px 8px #cc9d12;
font-family: Bebas;
}
}
.v-r-right-1 {
position: absolute;
width: 410px;
height: 48px;
border-top: 2px solid #CC9D12;
top: 0px;
left: 24px;
display: flex;
justify-content: space-between;
align-items: center;
}
.v-r-left-2 {
width: 48px;
height: 48px;
text-align: center;
border: 2px solid #3373CC;
border-radius: 48px;
.s1 {
color: #ffffff;
font-size: 16px;
line-height: 42px;
text-shadow: 0px 0px 8px #3373CC;
font-family: Bebas;
}
}
.v-r-right-2 {
position: absolute;
width: 410px;
height: 48px;
border-top: 2px solid #3373CC;
top: 0px;
left: 24px;
display: flex;
justify-content: space-between;
align-items: center;
}
.v-r-left-3 {
width: 48px;
height: 48px;
text-align: center;
border: 2px solid #54BF93;
border-radius: 48px;
.s1 {
color: #ffffff;
font-size: 16px;
line-height: 42px;
text-shadow: 0px 0px 8px #54BF93;
font-family: Bebas;
}
}
.v-r-right-3 {
position: absolute;
width: 410px;
height: 48px;
border-top: 2px solid #54BF93;
top: 0px;
left: 24px;
display: flex;
justify-content: space-between;
align-items: center;
}
}
</style>

@ -0,0 +1,105 @@
<!--
* @Author: your name
* @Date: 2021-10-14 11:25:20
* @LastEditTime: 2021-11-09 17:17:04
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/WeiboDetails/weiboUserActiveArea/index.vue
-->
<template>
<div class="wua-outter" v-loading="load">
<v-label-div title="跟帖ID区域分布" :showLine="false" :eStyle="{'border-style': 'none'}"> </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: "FollowPostUserActiveArea",
data() {
return {
load: false,
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);
this.load = false;
});
},
//
toArr(obj) {
let arr = [];
for (let key in obj) {
let o = {
name: key,
value: obj[key] * 1,
};
arr.push(o);
}
return arr;
},
},
};
</script>
<style lang="less" scoped>
.wua-outter {
width: 936px;
height: 412px;
.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-11-09 17:42:17
* @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: '#54BF93'
}]),
}
]
}
}

@ -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,46 @@
<!--
* @Author: your name
* @Date: 2021-11-09 16:27:20
* @LastEditTime: 2021-11-09 17:15:17
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/ModelForumDetails/MainPostUserAnalysis/index.vue
-->
<template>
<div class="mpua-outter">
<v-label-div title="跟帖用户分析" :showLine="false" :eStyle="{'border-style': 'none'}">
<v-tab-group :btns="['性别', '认证']" @change="handlerTab"></v-tab-group>
</v-label-div>
<div class="mpua-inner">
<v-echarts :opt="opt"></v-echarts>
</div>
</div>
</template>
<script>
import createData from "./opt"
export default {
name: "FollowPostUserAnalysis",
data() {
return {
opt: createData()
}
},
methods: {
handlerTab() {
}
}
}
</script>
<style lang="less" scoped>
.mpua-outter {
width: 472px;
height: 412px;
.mpua-inner {
width: 100%;
height: calc(100% - 48px);
}
}
</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,48 @@
<!--
* @Author: your name
* @Date: 2021-11-09 16:02:50
* @LastEditTime: 2021-11-09 16:33:52
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/ModelForumDetails/MainPostIDModelAnalysis/index.vue
-->
<template>
<div class="mpma-outter">
<v-label-div title="主帖ID车型分析" :showLine="false" :eStyle="{'border-style': 'none'}">
<v-tab-group :btns="['主帖ID', '认证ID']" @change="handlerTab"></v-tab-group>
</v-label-div>
<div class="mpma-inner">
<v-ranking-mpma num="1" label="奥迪A4" val="100"></v-ranking-mpma>
<v-ranking-mpma num="2" label="奥迪A4" val="100"></v-ranking-mpma>
<v-ranking-mpma num="3" label="奥迪A4" val="100"></v-ranking-mpma>
<v-ranking-mpma num="4" label="奥迪A4" val="100"></v-ranking-mpma>
<v-ranking-mpma num="5" label="奥迪A4" val="100"></v-ranking-mpma>
</div>
</div>
</template>
<script>
import vRankingMpma from "./v-ranking-mpma"
export default {
name: "MainPostIDModelAnalysis",
components: {
vRankingMpma
},
methods: {
handlerTab() {
}
}
};
</script>
<style lang="less" scoped>
.mpma-outter {
width: 452px;
height: 412px;
.mpma-inner {
width: 100%;
height: calc(100% - 48px);
}
}
</style>

@ -0,0 +1,231 @@
<!--
* @Author: your name
* @Date: 2021-10-08 16:44:08
* @LastEditTime: 2021-11-09 16:35:24
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/components/v-ranking/index.vue
-->
<template>
<div class="v-r-container">
<div class="v-r-line" v-if="lineShow"></div>
<div class="v-r-inner">
<div :class="ls">
<span class="s1">{{ num|numStr }}</span>
</div>
<div :class="rs">
<span class="v-r-label">{{label}}</span>
<div class="v-r-res">
<span class="s1">数量</span>
<span class="s2">{{val}}</span>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
name: "v-ranking-mpma",
props: {
num: {
type: [String, Number],
default: 1,
},
val: {
type: [String, Number],
default: 0
},
label: {
type: String,
default: ""
},
lineShow: {
type: Boolean,
default: true
},
},
watch: {
num: {
handler(val) {
if(val == 1) {
this.ls = "v-r-left-1"
this.rs = "v-r-right-1"
} else if(val == 2) {
this.ls = "v-r-left-2"
this.rs = "v-r-right-2"
} else if(val == 3) {
this.ls = "v-r-left-3"
this.rs = "v-r-right-3"
} else {
this.ls = "v-r-left"
this.rs = "v-r-right"
}
},
immediate: true
}
},
data() {
return {
ls: "v-r-left",
rs: "v-r-right"
}
},
filters: {
numStr(val) {
let str = ""
if(0<val && val<10) {
str = '0' + val
} else {
str = val + ''
}
return str
}
}
};
</script>
<style lang="less" scoped>
.v-r-container {
width: 436px;
height: auto;
.v-r-line {
width: 100%;
height: 1px;
background:#0a1d3b;
margin-top: 11px;
margin-bottom: 10px;
}
.v-r-inner {
position: relative;
width: 100%;
height: 48px;
margin-top: 6px;
color: #fff;
background: #0a1d3b;
border-radius: 2px;
}
.v-r-label {
display: block;
font-size: 14px;
color: #FFFFFF;
margin-left: 40px;
font-weight: bold;
}
.v-r-res {
margin-right: 16px;
span {
display: inline-block;
text-align: right;
font-size: 12px;
}
.s1 {
color: #9ba4af;
margin-right: 8px;
}
.s2 {
color: #fff;
font-family: Bebas;
}
}
.v-r-left {
width: 48px;
height: 48px;
text-align: center;
line-height: 48px;
.s1 {
color: #99a2ad;
font-size: 16px;
line-height: 48px;
font-family: Bebas;
}
}
.v-r-right {
position: absolute;
width: 410px;
height: 48px;
border-top: 2px solid transparent;
top: 0px;
left: 24px;
display: flex;
justify-content: space-between;
align-items: center;
}
.v-r-left-1 {
width: 48px;
height: 48px;
text-align: center;
border: 2px solid #cc9d12;
border-radius: 48px;
.s1 {
color: #ffffff;
font-size: 16px;
line-height: 42px;
text-shadow: 0px 0px 8px #cc9d12;
font-family: Bebas;
}
}
.v-r-right-1 {
position: absolute;
width: 410px;
height: 48px;
border-top: 2px solid #CC9D12;
top: 0px;
left: 24px;
display: flex;
justify-content: space-between;
align-items: center;
}
.v-r-left-2 {
width: 48px;
height: 48px;
text-align: center;
border: 2px solid #3373CC;
border-radius: 48px;
.s1 {
color: #ffffff;
font-size: 16px;
line-height: 42px;
text-shadow: 0px 0px 8px #3373CC;
font-family: Bebas;
}
}
.v-r-right-2 {
position: absolute;
width: 410px;
height: 48px;
border-top: 2px solid #3373CC;
top: 0px;
left: 24px;
display: flex;
justify-content: space-between;
align-items: center;
}
.v-r-left-3 {
width: 48px;
height: 48px;
text-align: center;
border: 2px solid #54BF93;
border-radius: 48px;
.s1 {
color: #ffffff;
font-size: 16px;
line-height: 42px;
text-shadow: 0px 0px 8px #54BF93;
font-family: Bebas;
}
}
.v-r-right-3 {
position: absolute;
width: 410px;
height: 48px;
border-top: 2px solid #54BF93;
top: 0px;
left: 24px;
display: flex;
justify-content: space-between;
align-items: center;
}
}
</style>

@ -0,0 +1,105 @@
<!--
* @Author: your name
* @Date: 2021-10-14 11:25:20
* @LastEditTime: 2021-11-09 17:06:29
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/WeiboDetails/weiboUserActiveArea/index.vue
-->
<template>
<div class="wua-outter" v-loading="load">
<v-label-div title="主帖ID区域分布" :showLine="false" :eStyle="{'border-style': 'none'}"> </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: "MainPostUserActiveArea",
data() {
return {
load: false,
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);
this.load = false;
});
},
//
toArr(obj) {
let arr = [];
for (let key in obj) {
let o = {
name: key,
value: obj[key] * 1,
};
arr.push(o);
}
return arr;
},
},
};
</script>
<style lang="less" scoped>
.wua-outter {
width: 936px;
height: 412px;
.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,46 @@
<!--
* @Author: your name
* @Date: 2021-11-09 16:27:20
* @LastEditTime: 2021-11-09 16:39:48
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/ModelForumDetails/MainPostUserAnalysis/index.vue
-->
<template>
<div class="mpua-outter">
<v-label-div title="主帖用户分析" :showLine="false" :eStyle="{'border-style': 'none'}">
<v-tab-group :btns="['性别', '认证']" @change="handlerTab"></v-tab-group>
</v-label-div>
<div class="mpua-inner">
<v-echarts :opt="opt"></v-echarts>
</div>
</div>
</template>
<script>
import createData from "./opt"
export default {
name: "MainPostUserAnalysis",
data() {
return {
opt: createData()
}
},
methods: {
handlerTab() {
}
}
}
</script>
<style lang="less" scoped>
.mpua-outter {
width: 472px;
height: 412px;
.mpua-inner {
width: 100%;
height: calc(100% - 48px);
}
}
</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,40 @@
<!--
* @Author: your name
* @Date: 2021-11-09 17:19:28
* @LastEditTime: 2021-11-09 17:26:17
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/ModelForumDetails/SuspectedCarBlackID/index.vue
-->
<template>
<div class="scb-outter">
<v-label-div title="疑似车黑ID"> </v-label-div>
<div class="scb-inner">
<v-echarts :opt="opt"></v-echarts>
</div>
</div>
</template>
<script>
import createOpt from "./opt"
export default {
name: "SuspectedCarBlackID",
data() {
return {
opt: createOpt()
}
}
}
</script>
<style lang="less" scoped>
.scb-outter {
width: 936px;
height: 460px;
border: 2px solid #0f2a4d;
.scb-inner {
width: 100%;
height: calc(100% - 48px);
}
}
</style>

@ -0,0 +1,90 @@
/*
* @Author: your name
* @Date: 2021-10-12 15:32:24
* @LastEditTime: 2021-11-09 17:33:49
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/BrandInsight/weiboVolumeTrend/opt.js
*/
export default function createOpt() {
return {
grid: {
top: 20,
left: 10,
right: '5%',
bottom: 10,
containLabel: true,
},
tooltip: {
trigger: "item",
backgroundColor: "#08182F",
color: "#fff",
borderColor: "#3373CC",
textStyle: {
color: "#fff", //设置文字颜色
},
extraCssText: "box-shadow: 0px 0px 10px 0px #3373CC;"
},
xAxis: {
axisTick: {
show: false,
},
axisLine: {
show: false,
lineStyle: {
color: "#fff",
},
},
splitLine: {
show: false,
}
},
yAxis: {
axisTick: {
show: false,
},
axisLine: {
show: false,
lineStyle: {
color: "#fff",
},
},
splitLine: {
lineStyle: {
type: "dashed", // y轴分割线类型
color: "#012b4b",
},
},
},
series: [
{
symbolSize: 20,
data: [
[10.0, 8.04],
[8.07, 6.95],
[13.0, 7.58],
[9.05, 8.81],
[11.0, 8.33],
[14.0, 7.66],
[13.4, 6.81],
[10.0, 6.33],
[14.0, 8.96],
[12.5, 6.82],
[9.15, 7.2],
[11.5, 7.2],
[3.03, 4.23],
[12.2, 7.83],
[2.02, 4.47],
[1.05, 3.33],
[4.05, 4.96],
[6.03, 7.24],
[12.0, 6.26],
[12.0, 8.84],
[7.08, 5.82],
[5.02, 5.68]
],
type: 'scatter'
}
]
};
}

@ -0,0 +1,41 @@
<!--
* @Author: your name
* @Date: 2021-11-09 17:35:06
* @LastEditTime: 2021-11-09 17:40:59
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/ModelForumDetails/ThreadIDRegistrationTime/index.vue
-->
<template>
<div class="tdrt-outter">
<v-label-div title="跟帖ID注册时间"> </v-label-div>
<div class="tdrt-inner">
<v-echarts :opt="opt"></v-echarts>
</div>
</div>
</template>
<script>
import {createSingleColumnar} from "@/utils/gol/singleColumnar"
export default {
name: "ThreadIDRegistrationTime",
data() {
return {
opt: createSingleColumnar([2017, 2018, 2019, 2020, 2021], [20000, 18000, 15000, 14000, 11000])
}
}
};
</script>
<style lang="less" scoped>
.tdrt-outter {
width: 936px;
height: 460px;
border: 2px solid #0f2a4d;
margin-left: 16px;
.tdrt-inner {
width: 100%;
height: calc(100% - 48px);
}
}
</style>

@ -0,0 +1,69 @@
<!--
* @Author: your name
* @Date: 2021-11-09 13:49:27
* @LastEditTime: 2021-11-09 17:37:59
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/ModelForumDetails/index.vue
-->
<template>
<div class="d-container">
<div class="mfd-outter">
<mfdHeader></mfdHeader>
<div class="mfd-d1">
<mfdCommunicationTrend></mfdCommunicationTrend>
<mfdContentType></mfdContentType>
<mfdCharacters></mfdCharacters>
</div>
<div class="mfd-d1">
<mfdPositiveTopic></mfdPositiveTopic>
<mfdNegativeTopic></mfdNegativeTopic>
</div>
<mfdMainPost></mfdMainPost>
<mfdFollowPost></mfdFollowPost>
<div class="mfd-d1">
<SuspectedCarBlackID></SuspectedCarBlackID>
<ThreadIDRegistrationTime></ThreadIDRegistrationTime>
</div>
</div>
</div>
</template>
<script>
import mfdHeader from "./mfdHeader"
import mfdCommunicationTrend from "./mfdCommunicationTrend"
import mfdContentType from "./mfdContentType"
import mfdCharacters from "./mfdCharacters"
import mfdPositiveTopic from "./mfdPositiveTopic"
import mfdNegativeTopic from "./mfdNegativeTopic"
import mfdMainPost from "./mfdMainPost"
import mfdFollowPost from "./mfdFollowPost"
import SuspectedCarBlackID from "./SuspectedCarBlackID"
import ThreadIDRegistrationTime from "./ThreadIDRegistrationTime"
export default {
name: "ModelForumDetails",
components: {
mfdHeader, //
mfdCommunicationTrend, //
mfdContentType, //
mfdCharacters, //
mfdPositiveTopic, //
mfdNegativeTopic, //
mfdMainPost, // ID
mfdFollowPost, // ID
SuspectedCarBlackID, // ID
ThreadIDRegistrationTime // ID
}
};
</script>
<style lang="less" scoped>
.mfd-outter {
padding: 0px 16px 16px 16px;
}
.mfd-d1 {
margin-top: 16px;
display: flex;
justify-content: flex-start;
}
</style>

@ -0,0 +1,171 @@
<!--
* @Author: your name
* @Date: 2021-10-14 10:48:56
* @LastEditTime: 2021-11-09 15:00:59
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/WeiboDetails/weiboCharacters/index.vue
-->
<template>
<div class="wc-outter" v-loading="load">
<v-label-div title="数据对比分析">
<div>
<v-tab-group
:btns="['阅读量', '回复量', '精华率', '图文']"
@change="handlerTab"
></v-tab-group>
</div>
</v-label-div>
<div class="wc-inner">
<div class="d1">
<v-echarts :opt="opt"></v-echarts>
</div>
<div class="d2">
<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: "mfdCharacters",
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);
this.load = true;
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);
this.load = false;
});
},
//
toArr(obj) {
let arr = [];
for (let key in obj) {
let o = {
key: key,
value: obj[key],
};
arr.push(o);
}
return arr;
},
//
doVal(arr = []) {
let total = 0;
arr.forEach((ele) => {
total += ele.value * 1;
});
this.total = total;
this.labelArr = arr;
this.opt = createOpt(this.labelArr, this.colors);
},
//
handlerTab(n) {
switch (n) {
case 0:
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-09 14:56:37
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/WeiboDetails/weiboCommunicationTrend/index.vue
-->
<template>
<div class="wct-outter" v-loading="load">
<v-label-div title="论坛传播趋势">
</v-label-div>
<div class="wct-inner">
<v-echarts :opt="opt"></v-echarts>
</div>
</div>
</template>
<script>
import {getCountTime0528} from "@/api/WeiboDetails"
import createOpt from "./opt"
export default {
name: "mfdCommunicationTrend",
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,119 @@
<!--
* @Author: your name
* @Date: 2021-10-14 10:24:56
* @LastEditTime: 2021-11-09 14:59:02
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/WeiboDetails/weiboContentType/index.vue
-->
<template>
<div class="wct-outter" v-loading="load">
<v-label-div title="论坛调性分布"> </v-label-div>
<div class="wct-inner">
<div class="d1">
<v-echarts :opt="opt"></v-echarts>
</div>
<div class="d2">
<v-label-ctx
v-for="(item, index) in labelArr"
:key="index"
:label="item.key"
:cont="item.value"
:percentage="((item.value / total) * 100).toFixed(2) + '%'"
:color="colors[index]"
:eStyle="{ height: '8.54rem' }"
></v-label-ctx>
</div>
</div>
</div>
</template>
<script>
import { getWtypeWeiBo0528 } from "@/api/WeiboDetails";
import createOpt from "./opt";
export default {
name: "mfdContentType",
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);
this.load = false;
});
},
doVal(arr = []) {
let total = 0;
arr.forEach((ele) => {
total += ele.value * 1;
});
this.total = total;
this.labelArr = arr;
this.opt = createOpt(this.labelArr, this.colors);
},
},
};
</script>
<style lang="less" scoped>
.wct-outter {
width: 618px;
height: 460px;
border: 2px solid #0f2a4d;
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,48 @@
<!--
* @Author: your name
* @Date: 2021-11-09 15:49:33
* @LastEditTime: 2021-11-09 17:17:49
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/ModelForumDetails/mfdMainPost/index.vue
-->
<template>
<div class="mmp-outter">
<v-label-div title="跟帖ID"> </v-label-div>
<div class="mmp-inner">
<FollowPostIDModelAnalysis></FollowPostIDModelAnalysis>
<FollowPostUserAnalysis></FollowPostUserAnalysis>
<FollowPostUserActiveArea></FollowPostUserActiveArea>
</div>
</div>
</template>
<script>
import FollowPostIDModelAnalysis from "../FollowPostIDModelAnalysis"
import FollowPostUserAnalysis from "../FollowPostUserAnalysis"
import FollowPostUserActiveArea from "../FollowPostUserActiveArea"
export default {
name: "mfdFollowPost",
components: {
FollowPostIDModelAnalysis, // ID
FollowPostUserAnalysis, //
FollowPostUserActiveArea
}
}
</script>
<style lang="less" scoped>
.mmp-outter {
width: 100%;
height: 460px;
border: 2px solid #0f2a4d;
margin-top: 16px;
.mmp-inner {
width: 100%;
height: calc(100% - 48px);
display: flex;
justify-content: flex-start;
}
}
</style>

@ -0,0 +1,122 @@
<!--
* @Author: your name
* @Date: 2021-11-09 13:51:57
* @LastEditTime: 2021-11-09 14:37:48
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/ModelForumDetails/mfdHeader/index.vue
-->
<template>
<div class="mfdh-outter">
<v-label-div title="论坛洞察详情">
<v-btn @click="goback"></v-btn>
</v-label-div>
<div class="mfdh-inner">
<div class="mfdh-in-d1">
奥迪
</div>
<span class="mfdh-in-d2">奥迪A8</span>
<div class="mfdh-in-d3" style="width: 20rem">
<img class="mfdh-m1" src="../../../assets/images/ModelInsight/ic_cbsj.png" />
<div class="mfdh-data">
<span class="s1">74,073,195</span>
<span class="s2">主贴发贴量()</span>
</div>
</div>
<div class="mfdh-in-d3" style="width: 35rem">
<img class="mfdh-m1" src="../../../assets/images/ModelInsight/ic_qrft.png" />
<div class="mfdh-data">
<span class="s1">100.23</span>
<span class="s2">品牌千人发帖量</span>
</div>
<div class="mfdh-data">
<span class="s1">1234.23</span>
<span class="s2">行业千人发帖量</span>
</div>
<div class="mfdh-data">
<span class="s1">5.45<a-icon type="question-circle" style="margin-left: 0.3rem;color: #5a9ebc;"/></span>
<span class="s2">量差</span>
</div>
</div>
<div class="mfdh-in-d3">
<img class="mfdh-m1" src="../../../assets/images/ModelInsight/ic_qrpl.png" />
<div class="mfdh-data">
<span class="s1">100.23</span>
<span class="s2">品牌千人发帖量</span>
</div>
<div class="mfdh-data">
<span class="s1">1234.23</span>
<span class="s2">行业千人发帖量</span>
</div>
<div class="mfdh-data">
<span class="s1">5.45<a-icon type="question-circle" style="margin-left: 0.3rem;color: #5a9ebc;"/></span>
<span class="s2">量差</span>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
name: "mfdHeader",
};
</script>
<style lang="less" scoped>
.mfdh-outter {
width: 100%;
height: 222px;
border: 2px solid #0f2a4d;
.mfdh-inner {
width: 100%;
height: calc(100% - 48px);
display: flex;
justify-content: flex-start;
align-items: center;
.mfdh-in-d1 {
width: 150px;
height: 150px;
background-image: url("../../../assets/images/BrandInsight/img_lq.png");
background-repeat: no-repeat;
background-size: cover;
text-align: center;
line-height: 150px;
color: #b2daf8;
font-size: 24px;
margin-left: 16px;
}
.mfdh-in-d2 {
display: block;
font-size: 24px;
color: #b2daf8;
margin-left: 16px;
width: 280px;
}
.mfdh-in-d3 {
display: flex;
justify-content: flex-start;
align-items: center;
}
}
}
.mfdh-m1 {
width: 80px;
height: 80px;
margin-right: 20px;
}
.mfdh-data {
.s1 {
font-size: 24px;
font-family: Bebas;
color: #ffffff;
display: block;
}
.s2 {
font-size: 14px;
color: #8b9299;
display: block;
}
margin-right: 40px;
}
</style>

@ -0,0 +1,48 @@
<!--
* @Author: your name
* @Date: 2021-11-09 15:49:33
* @LastEditTime: 2021-11-09 17:04:04
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/ModelForumDetails/mfdMainPost/index.vue
-->
<template>
<div class="mmp-outter">
<v-label-div title="主帖ID"> </v-label-div>
<div class="mmp-inner">
<MainPostIDModelAnalysis></MainPostIDModelAnalysis>
<MainPostUserAnalysis></MainPostUserAnalysis>
<MainPostUserActiveArea></MainPostUserActiveArea>
</div>
</div>
</template>
<script>
import MainPostIDModelAnalysis from "../MainPostIDModelAnalysis"
import MainPostUserAnalysis from "../MainPostUserAnalysis"
import MainPostUserActiveArea from "../MainPostUserActiveArea"
export default {
name: "mfdMainPost",
components: {
MainPostIDModelAnalysis, // ID
MainPostUserAnalysis, //
MainPostUserActiveArea
}
}
</script>
<style lang="less" scoped>
.mmp-outter {
width: 100%;
height: 460px;
border: 2px solid #0f2a4d;
margin-top: 16px;
.mmp-inner {
width: 100%;
height: calc(100% - 48px);
display: flex;
justify-content: flex-start;
}
}
</style>

@ -0,0 +1,76 @@
<!--
* @Author: your name
* @Date: 2021-11-09 15:03:36
* @LastEditTime: 2021-11-09 15:39:19
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/ModelForumDetails/mfdPositiveTopic/index.vue
-->
<template>
<div class="mpt-outter">
<v-label-div title="正面话题分布"> </v-label-div>
<div class="mpt-inner">
<div class="d1">
<v-echarts :opt="opt"></v-echarts>
</div>
<div class="d2">
<dv-scroll-board :config="config" :style="{ width: '100%', height: '100%' }" />
</div>
</div>
</div>
</template>
<script>
import createOpt from "./opt";
export default {
name: "mfdNegativeTopic",
data() {
return {
opt: createOpt(),
config: {
headerBGC: "#0c203b",
oddRowBGC: "#173b6d",
evenRowBGC: "rgba(69, 149, 244, 0)",
rowNum: 9,
header: ["TOP10发帖用户"],
data: [
['<span>用户名:懂车生活</span>', '<span>发帖量38291.6</span>'],
['<span>用户名:懂车生活</span>', '<span>发帖量38291.6</span>'],
['<span>用户名:懂车生活</span>', '<span>发帖量38291.6</span>'],
['<span>用户名:懂车生活</span>', '<span>发帖量38291.6</span>'],
['<span>用户名:懂车生活</span>', '<span>发帖量38291.6</span>'],
['<span>用户名:懂车生活</span>', '<span>发帖量38291.6</span>'],
['<span>用户名:懂车生活</span>', '<span>发帖量38291.6</span>'],
['<span>用户名:懂车生活</span>', '<span>发帖量38291.6</span>'],
['<span>用户名:懂车生活</span>', '<span>发帖量38291.6</span>'],
['<span>用户名:懂车生活</span>', '<span>发帖量38291.6</span>'],
['<span>用户名:懂车生活</span>', '<span>发帖量38291.6</span>']
],
},
};
},
};
</script>
<style lang="less" scoped>
.mpt-outter {
width: 936px;
height: 460px;
border: 2px solid #0f2a4d;
margin-left: 16px;
.mpt-inner {
width: 100%;
height: calc(100% - 48px);
display: flex;
justify-content: flex-start;
.d1 {
width: 450px;
height: 100%;
}
.d2 {
width: 485px;
height: 100%;
}
}
}
</style>

@ -0,0 +1,59 @@
/*
* @Author: your name
* @Date: 2021-10-12 15:32:24
* @LastEditTime: 2021-11-09 15:45:48
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/BrandInsight/weiboVolumeTrend/opt.js
*/
export default function createOpt() {
return {
title: {
text: 'Basic Radar Chart',
show: false
},
tooltip: {
trigger: "item",
backgroundColor: "#08182F",
color: "#fff",
borderColor: "#3373CC",
textStyle: {
color: "#fff", //设置文字颜色
},
extraCssText: "box-shadow: 0px 0px 10px 0px #3373CC;"
},
radar: {
// shape: 'circle',
indicator: [
{ name: '新车发布', max: 6500 },
{ name: '用车生活', max: 16000 },
{ name: '咨询请教', max: 30000 },
{ name: '本品讨论', max: 38000 },
{ name: '售后服务', max: 52000 },
{ name: '技术加持', max: 25000 },
{ name: '保养作业', max: 25000 },
{ name: '看车提车', max: 25000 },
{ name: '竞品对比', max: 25000 },
{ name: '销售问题', max: 25000 },
]
},
series: [
{
name: 'Budget vs spending',
type: 'radar',
data: [
{
value: [5000, 14000, 28000, 26000, 42000, 21000, 22000, 21000, 19000, 23000],
name: '负面话题分布:',
itemStyle: {
color: "rgba(194, 151, 22)",
},
areaStyle: {
color: 'rgba(194, 151, 22, 0.2)'
}
}
]
}
]
};
}

@ -0,0 +1,75 @@
<!--
* @Author: your name
* @Date: 2021-11-09 15:03:36
* @LastEditTime: 2021-11-09 15:36:13
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/ModelForumDetails/mfdPositiveTopic/index.vue
-->
<template>
<div class="mpt-outter">
<v-label-div title="正面话题分布"> </v-label-div>
<div class="mpt-inner">
<div class="d1">
<v-echarts :opt="opt"></v-echarts>
</div>
<div class="d2">
<dv-scroll-board :config="config" :style="{ width: '100%', height: '100%' }" />
</div>
</div>
</div>
</template>
<script>
import createOpt from "./opt";
export default {
name: "mfdPositiveTopic",
data() {
return {
opt: createOpt(),
config: {
headerBGC: "#0c203b",
oddRowBGC: "#173b6d",
evenRowBGC: "rgba(69, 149, 244, 0)",
rowNum: 9,
header: ["TOP10发帖用户"],
data: [
['<span>用户名:懂车生活</span>', '<span>发帖量38291.6</span>'],
['<span>用户名:懂车生活</span>', '<span>发帖量38291.6</span>'],
['<span>用户名:懂车生活</span>', '<span>发帖量38291.6</span>'],
['<span>用户名:懂车生活</span>', '<span>发帖量38291.6</span>'],
['<span>用户名:懂车生活</span>', '<span>发帖量38291.6</span>'],
['<span>用户名:懂车生活</span>', '<span>发帖量38291.6</span>'],
['<span>用户名:懂车生活</span>', '<span>发帖量38291.6</span>'],
['<span>用户名:懂车生活</span>', '<span>发帖量38291.6</span>'],
['<span>用户名:懂车生活</span>', '<span>发帖量38291.6</span>'],
['<span>用户名:懂车生活</span>', '<span>发帖量38291.6</span>'],
['<span>用户名:懂车生活</span>', '<span>发帖量38291.6</span>']
],
},
};
},
};
</script>
<style lang="less" scoped>
.mpt-outter {
width: 936px;
height: 460px;
border: 2px solid #0f2a4d;
.mpt-inner {
width: 100%;
height: calc(100% - 48px);
display: flex;
justify-content: flex-start;
.d1 {
width: 450px;
height: 100%;
}
.d2 {
width: 485px;
height: 100%;
}
}
}
</style>

@ -0,0 +1,59 @@
/*
* @Author: your name
* @Date: 2021-10-12 15:32:24
* @LastEditTime: 2021-11-09 15:46:21
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/BrandInsight/weiboVolumeTrend/opt.js
*/
export default function createOpt() {
return {
title: {
text: 'Basic Radar Chart',
show: false
},
tooltip: {
trigger: "item",
backgroundColor: "#08182F",
color: "#fff",
borderColor: "#3373CC",
textStyle: {
color: "#fff", //设置文字颜色
},
extraCssText: "box-shadow: 0px 0px 10px 0px #3373CC;"
},
radar: {
// shape: 'circle',
indicator: [
{ name: '新车发布', max: 6500 },
{ name: '用车生活', max: 16000 },
{ name: '咨询请教', max: 30000 },
{ name: '本品讨论', max: 38000 },
{ name: '售后服务', max: 52000 },
{ name: '技术加持', max: 25000 },
{ name: '保养作业', max: 25000 },
{ name: '看车提车', max: 25000 },
{ name: '竞品对比', max: 25000 },
{ name: '销售问题', max: 25000 },
]
},
series: [
{
name: 'Budget vs spending',
type: 'radar',
data: [
{
value: [5000, 14000, 28000, 26000, 42000, 21000, 22000, 21000, 19000, 23000],
name: '正面话题分布:',
itemStyle: {
color: "rgba(48, 110, 195)",
},
areaStyle: {
color: 'rgba(48, 110, 195, 0.2)'
}
}
]
}
]
};
}

@ -1,7 +1,7 @@
<!--
* @Author: your name
* @Date: 2021-10-25 13:12:20
* @LastEditTime: 2021-11-08 18:39:56
* @LastEditTime: 2021-11-09 13:59:59
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/ModelInsight/index.vue
@ -41,7 +41,7 @@
</div>
<div class="bdl-d4">
<v-label-div title="论坛洞察">
<v-btn @click="goRouter('/forumDetails')"></v-btn>
<v-btn @click="goRouter('/modelForumDetails')"></v-btn>
</v-label-div>
<div class="bdl-d4-bd">
<mlForumCommunicationTrend :brand="brand" :model="model"></mlForumCommunicationTrend>

Loading…
Cancel
Save