prod
lily.zhang 3 years ago
parent 332ba5df1d
commit dc3ed4442b

File diff suppressed because one or more lines are too long

@ -0,0 +1,211 @@
/*
* @Author: your name
* @Date: 2021-11-10 09:50:36
* @LastEditTime: 2021-11-10 16:02:05
* @LastEditors: Please set LastEditors
* @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
* @FilePath: /data-show/src/api/ModelForumDetails/index.js
*/
import httpService from "@/request"
// 论坛洞察详情
export function getBbsCount(params) {
let obj = Object.assign({action: 'getBbsCount',sType: 'BbsSeries'}, params)
return httpService({
url: `/api/v6.ashx`,
method: 'post',
data: obj,
headers: {
'content-type': 'application/x-www-form-urlencoded'
}
})
}
// 主贴内容分析-论坛传播态势
export function getBbsVolumeTime(params) {
let obj = Object.assign({action: 'getBbsVolumeTime',sType: 'BbsSeries'}, 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: 'BbsSeries'}, params)
return httpService({
url: `/api/v6.ashx`,
method: 'post',
data: obj,
headers: {
'content-type': 'application/x-www-form-urlencoded'
}
})
}
// 主贴内容分析-阅读量
export function getClicksDistribution(params) {
let obj = Object.assign({action: 'getClicksDistribution',sType: 'BbsSeries'}, params)
return httpService({
url: `/api/v6.ashx`,
method: 'post',
data: obj,
headers: {
'content-type': 'application/x-www-form-urlencoded'
}
})
}
// 主贴内容分析-回复量
export function getReplyDistribution(params) {
let obj = Object.assign({action: 'getReplyDistribution',sType: 'BbsSeries'}, params)
return httpService({
url: `/api/v6.ashx`,
method: 'post',
data: obj,
headers: {
'content-type': 'application/x-www-form-urlencoded'
}
})
}
// 主贴内容分析-精华率
export function getJingHuaDistribution(params) {
let obj = Object.assign({action: 'getJingHuaDistribution',sType: 'BbsSeries'}, params)
return httpService({
url: `/api/v6.ashx`,
method: 'post',
data: obj,
headers: {
'content-type': 'application/x-www-form-urlencoded'
}
})
}
// 主贴内容分析-图文
export function getImgDistribution(params) {
let obj = Object.assign({action: 'getImgDistribution',sType: 'BbsSeries'}, params)
return httpService({
url: `/api/v6.ashx`,
method: 'post',
data: obj,
headers: {
'content-type': 'application/x-www-form-urlencoded'
}
})
}
// 正面话题分布-正面话题分布
export function getPositiveTopic(params) {
let obj = Object.assign({action: 'getPositiveTopic',sType: 'BbsSeries'}, params)
return httpService({
url: `/api/v6.ashx`,
method: 'post',
data: obj,
headers: {
'content-type': 'application/x-www-form-urlencoded'
}
})
}
// 负面话题分布-负面话题分布
export function getNegativeTopic(params) {
let obj = Object.assign({action: 'getNegativeTopic',sType: 'BbsSeries'}, params)
return httpService({
url: `/api/v6.ashx`,
method: 'post',
data: obj,
headers: {
'content-type': 'application/x-www-form-urlencoded'
}
})
}
// 主贴/跟帖ID车型分析-主贴/跟帖ID
export function getGuanZhuSeriesname(params) {
let obj = Object.assign({action: 'getGuanZhuSeriesname',sType: 'BbsSeries'}, params)
return httpService({
url: `/api/v6.ashx`,
method: 'post',
data: obj,
headers: {
'content-type': 'application/x-www-form-urlencoded'
}
})
}
// 主贴/跟帖ID车型分析-主贴/跟帖认证ID
export function getAttestationBuycars(params) {
let obj = Object.assign({action: 'getAttestationBuycars',sType: 'BbsSeries'}, params)
return httpService({
url: `/api/v6.ashx`,
method: 'post',
data: obj,
headers: {
'content-type': 'application/x-www-form-urlencoded'
}
})
}
// 主贴/跟帖用户分析-性别
export function getAttestationSex(params) {
let obj = Object.assign({action: 'getAttestationSex',sType: 'BbsSeries'}, params)
return httpService({
url: `/api/v6.ashx`,
method: 'post',
data: obj,
headers: {
'content-type': 'application/x-www-form-urlencoded'
}
})
}
// 主贴/跟帖用户分析-认证
export function getUserAttestation(params) {
let obj = Object.assign({action: 'getUserAttestation',sType: 'BbsSeries'}, params)
return httpService({
url: `/api/v6.ashx`,
method: 'post',
data: obj,
headers: {
'content-type': 'application/x-www-form-urlencoded'
}
})
}
// 主贴/跟帖区域分布-区域分布
export function getRegion(params) {
let obj = Object.assign({action: 'getRegion',sType: 'BbsSeries'}, params)
return httpService({
url: `/api/v6.ashx`,
method: 'post',
data: obj,
headers: {
'content-type': 'application/x-www-form-urlencoded'
}
})
}
// 疑似车黑ID-疑似车黑ID
export function getCarblackUserName(params) {
let obj = Object.assign({action: 'getCarblackUserName',sType: 'BbsSeries'}, params)
return httpService({
url: `/api/v6.ashx`,
method: 'post',
data: obj,
headers: {
'content-type': 'application/x-www-form-urlencoded'
}
})
}
// 跟帖ID注册时间-跟帖ID注册时间
export function getUserRegTime(params) {
let obj = Object.assign({action: 'getUserRegTime',sType: 'BbsSeries'}, params)
return httpService({
url: `/api/v6.ashx`,
method: 'post',
data: obj,
headers: {
'content-type': 'application/x-www-form-urlencoded'
}
})
}

@ -1,7 +1,7 @@
<!--
* @Author: your name
* @Date: 2021-10-14 13:08:10
* @LastEditTime: 2021-10-14 16:07:31
* @LastEditTime: 2021-11-10 15:16:30
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/components/v-echars-map/index.vue

@ -253,3 +253,10 @@ li.ant-calendar-time-picker-select-option-selected {
background: #3373CC !important;
}
}
.ant-tooltip {
box-shadow: 0px 0px 10px 0px #3373CC !important;
background: #08182e !important;
}
.ant-tooltip-inner {
background: #08182e !important;
}

@ -1,37 +1,117 @@
<!--
* @Author: your name
* @Date: 2021-11-09 16:02:50
* @LastEditTime: 2021-11-09 17:13:04
* @LastEditTime: 2021-11-10 16:45:34
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/ModelForumDetails/MainPostIDModelAnalysis/index.vue
-->
<template>
<div class="mpma-outter">
<div class="mpma-outter" v-loading="load">
<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>
<vue-scroll>
<v-ranking-fpma :num="index + 1" :label="item.key" :val="item.value" v-for="(item,index) in list" :key="index"></v-ranking-fpma>
</vue-scroll>
</div>
</div>
</template>
<script>
import {
getGuanZhuSeriesname,
getAttestationBuycars,
} from "@/api/ModelForumDetails";
import vRankingFpma from "./v-ranking-fpma"
export default {
name: "FollowPostIDModelAnalysis",
components: {
vRankingFpma
},
methods: {
handlerTab() {
data() {
return {
load: false,
form: {
sBrand: "",
token: "",
sSeriesName: "",
iBBsType: 3,
},
zIds: [],
aIds: [],
list: [],
}
},
created() {
this.form.token = this.getToken;
this.form.sBrand = this.getBrand.brandname || '奥迪';
this.form.sSeriesName = this.getModel.name;
this.load = true;
Promise.all([this.getGuanZhuSeriesname(), this.getAttestationBuycars()]).then(() => {
this.handlerTab(0);
this.load = false;
})
},
methods: {
// ID
getGuanZhuSeriesname() {
return new Promise((resolve, reject) => {
let obj = Object.assign({}, this.getCtime2, this.form);
getGuanZhuSeriesname(obj)
.then((res) => {
let data = res.data || {};
let arr = [];
for (let key in data) {
let o = {
key: key,
value: data[key],
};
arr.push(o);
}
this.zIds = arr;
resolve(true);
})
.catch(() => {
reject(false);
});
});
},
// ID
getAttestationBuycars() {
return new Promise((resolve, reject) => {
let obj = Object.assign({}, this.getCtime2, this.form);
getAttestationBuycars(obj).then(res => {
let data = res.data || {};
let arr = [];
for (let key in data) {
let o = {
key: key,
value: data[key],
};
arr.push(o);
}
this.aIds = arr;
resolve(true);
}).catch(() => {
reject(false);
})
})
},
handlerTab(n) {
switch (n) {
case 0:
this.list = this.zIds;
break;
case 1:
this.list = this.aIds;
break;
default:
this.list = this.zIds;
break;
}
},
}
};
</script>

@ -1,7 +1,7 @@
<!--
* @Author: your name
* @Date: 2021-10-14 11:25:20
* @LastEditTime: 2021-11-09 17:17:04
* @LastEditTime: 2021-11-10 17:02:24
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/WeiboDetails/weiboUserActiveArea/index.vue
@ -21,7 +21,7 @@
</template>
<script>
import { getRegionWeiBo } from "@/api/WeiboDetails";
import { getRegion } from "@/api/ModelForumDetails";
import createOptD1 from "./opt1";
import createOptD2 from "./opt2";
export default {
@ -32,30 +32,29 @@ export default {
form: {
sBrand: "",
token: "",
sSeriesName: "",
iBBsType: 3
},
opt1: createOptD1(),
opt2: createOptD2(),
opt1: {},
opt2: {},
};
},
created() {
this.form.token = this.getToken;
this.form.sBrand = this.getBrand.brandname || this.brand;
this.form.sBrand = this.getBrand.brandname || '奥迪';
this.form.sSeriesName = this.getModel.name;
this.getData();
},
methods: {
getData() {
this.load = true;
let obj = Object.assign({}, this.getCtime2, this.form);
getRegionWeiBo(obj).then((res) => {
getRegion(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);

@ -1,13 +1,13 @@
<!--
* @Author: your name
* @Date: 2021-11-09 16:27:20
* @LastEditTime: 2021-11-09 17:15:17
* @LastEditTime: 2021-11-10 14:56:15
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/ModelForumDetails/MainPostUserAnalysis/index.vue
-->
<template>
<div class="mpua-outter">
<div class="mpua-outter" v-loading="load">
<v-label-div title="跟帖用户分析" :showLine="false" :eStyle="{'border-style': 'none'}">
<v-tab-group :btns="['性别', '认证']" @change="handlerTab"></v-tab-group>
</v-label-div>
@ -18,18 +18,115 @@
</template>
<script>
import createData from "./opt"
import { getAttestationSex, getUserAttestation } from "@/api/ModelForumDetails";
import createOpt from "./opt"
export default {
name: "FollowPostUserAnalysis",
data() {
return {
opt: createData()
load: false,
form: {
sBrand: "",
token: "",
sSeriesName: "",
iBBsType: 3,
},
sex: [],
rz: [],
opt: {},
colors: [
"#3373CC",
"#54BF93",
"#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.load = true;
Promise.all([this.getAttestationSex(), this.getUserAttestation()]).then(() => {
this.handlerTab(0);
this.load = false;
})
},
methods: {
handlerTab() {
}
//
getAttestationSex() {
return new Promise((resolve, reject) => {
let obj = Object.assign({}, this.getCtime2, this.form);
getAttestationSex(obj)
.then((res) => {
let data = res.data || {};
let arr = [];
for (let key in data) {
let o = {
key: key,
value: data[key],
};
arr.push(o);
}
this.sex = arr;
resolve(true);
})
.catch(() => {
reject(false);
});
});
},
//
getUserAttestation() {
return new Promise((resolve, reject) => {
let obj = Object.assign({}, this.getCtime2, this.form);
getUserAttestation(obj)
.then((res) => {
let data = res.data || {};
let arr = [];
for (let key in data) {
let o = {
key: key,
value: data[key],
};
arr.push(o);
}
this.rz = arr;
resolve(true);
})
.catch(() => {
reject(false);
});
});
},
handlerTab(n) {
switch (n) {
case 0:
this.opt = createOpt(this.sex, this.colors)
break;
case 1:
this.opt = createOpt(this.rz, this.colors)
break;
default:
break;
}
},
}
}
</script>

@ -1,38 +1,118 @@
<!--
* @Author: your name
* @Date: 2021-11-09 16:02:50
* @LastEditTime: 2021-11-09 16:33:52
* @LastEditTime: 2021-11-10 16:44:33
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/ModelForumDetails/MainPostIDModelAnalysis/index.vue
-->
<template>
<div class="mpma-outter">
<div class="mpma-outter" v-loading="load">
<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>
<vue-scroll>
<v-ranking-mpma :num="index + 1" :label="item.key" :val="item.value" v-for="(item,index) in list" :key="index"></v-ranking-mpma>
</vue-scroll>
</div>
</div>
</template>
<script>
import vRankingMpma from "./v-ranking-mpma"
import {
getGuanZhuSeriesname,
getAttestationBuycars,
} from "@/api/ModelForumDetails";
import vRankingMpma from "./v-ranking-mpma";
export default {
name: "MainPostIDModelAnalysis",
components: {
vRankingMpma
vRankingMpma,
},
data() {
return {
load: false,
form: {
sBrand: "",
token: "",
sSeriesName: "",
iBBsType: 2,
},
zIds: [],
aIds: [],
list: [],
};
},
created() {
this.form.token = this.getToken;
this.form.sBrand = this.getBrand.brandname || '奥迪';
this.form.sSeriesName = this.getModel.name;
this.load = true;
Promise.all([this.getGuanZhuSeriesname(), this.getAttestationBuycars()]).then(() => {
this.handlerTab(0);
this.load = false;
})
},
methods: {
handlerTab() {
}
}
// ID
getGuanZhuSeriesname() {
return new Promise((resolve, reject) => {
let obj = Object.assign({}, this.getCtime2, this.form);
getGuanZhuSeriesname(obj)
.then((res) => {
let data = res.data || {};
let arr = [];
for (let key in data) {
let o = {
key: key,
value: data[key],
};
arr.push(o);
}
this.zIds = arr;
resolve(true);
})
.catch(() => {
reject(false);
});
});
},
// ID
getAttestationBuycars() {
return new Promise((resolve, reject) => {
let obj = Object.assign({}, this.getCtime2, this.form);
getAttestationBuycars(obj).then(res => {
let data = res.data || {};
let arr = [];
for (let key in data) {
let o = {
key: key,
value: data[key],
};
arr.push(o);
}
this.aIds = arr;
resolve(true);
}).catch(() => {
reject(false);
})
})
},
handlerTab(n) {
switch (n) {
case 0:
this.list = this.zIds;
break;
case 1:
this.list = this.aIds;
break;
default:
this.list = this.zIds;
break;
}
},
},
};
</script>

@ -1,7 +1,7 @@
<!--
* @Author: your name
* @Date: 2021-10-14 11:25:20
* @LastEditTime: 2021-11-09 17:06:29
* @LastEditTime: 2021-11-10 17:01:24
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/WeiboDetails/weiboUserActiveArea/index.vue
@ -21,7 +21,7 @@
</template>
<script>
import { getRegionWeiBo } from "@/api/WeiboDetails";
import { getRegion } from "@/api/ModelForumDetails";
import createOptD1 from "./opt1";
import createOptD2 from "./opt2";
export default {
@ -32,30 +32,29 @@ export default {
form: {
sBrand: "",
token: "",
sSeriesName: "",
iBBsType: 2
},
opt1: createOptD1(),
opt2: createOptD2(),
opt1: {},
opt2: {},
};
},
created() {
this.form.token = this.getToken;
this.form.sBrand = this.getBrand.brandname || this.brand;
this.form.sBrand = this.getBrand.brandname || '奥迪';
this.form.sSeriesName = this.getModel.name;
this.getData();
},
methods: {
getData() {
this.load = true;
let obj = Object.assign({}, this.getCtime2, this.form);
getRegionWeiBo(obj).then((res) => {
getRegion(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);

@ -3,7 +3,7 @@
/*
* @Author: your name
* @Date: 2021-10-09 12:38:34
* @LastEditTime: 2021-10-14 11:48:19
* @LastEditTime: 2021-11-10 14:53:44
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/Index/tailInsight/opt.js
@ -66,9 +66,9 @@ export default function createOptD1(dx=[],ds=[]) {
},
series: [
{
name: '2011',
name: '',
type: 'bar',
barWidth: 20,
barWidth: 16,
data: ds,
color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [{
offset: 0,

@ -1,14 +1,14 @@
<!--
* @Author: your name
* @Date: 2021-11-09 16:27:20
* @LastEditTime: 2021-11-09 16:39:48
* @LastEditTime: 2021-11-10 14:56:39
* @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'}">
<div class="mpua-outter" v-loading="load">
<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">
@ -18,20 +18,117 @@
</template>
<script>
import createData from "./opt"
import { getAttestationSex, getUserAttestation } from "@/api/ModelForumDetails";
import createOpt from "./opt";
export default {
name: "MainPostUserAnalysis",
data() {
return {
opt: createData()
}
load: false,
form: {
sBrand: "",
token: "",
sSeriesName: "",
iBBsType: 2,
},
sex: [],
rz: [],
opt: {},
colors: [
"#3373CC",
"#54BF93",
"#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.load = true;
Promise.all([this.getAttestationSex(), this.getUserAttestation()]).then(() => {
this.handlerTab(0)
this.load = false;
})
},
methods: {
handlerTab() {
}
}
}
//
getAttestationSex() {
return new Promise((resolve, reject) => {
let obj = Object.assign({}, this.getCtime2, this.form);
getAttestationSex(obj)
.then((res) => {
let data = res.data || {};
let arr = [];
for (let key in data) {
let o = {
key: key,
value: data[key],
};
arr.push(o);
}
this.sex = arr;
resolve(true);
})
.catch(() => {
reject(false);
});
});
},
//
getUserAttestation() {
return new Promise((resolve, reject) => {
let obj = Object.assign({}, this.getCtime2, this.form);
getUserAttestation(obj)
.then((res) => {
let data = res.data || {};
let arr = [];
for (let key in data) {
let o = {
key: key,
value: data[key],
};
arr.push(o);
}
this.rz = arr;
resolve(true);
})
.catch(() => {
reject(false);
});
});
},
handlerTab(n) {
switch (n) {
case 0:
this.opt = createOpt(this.sex, this.colors)
break;
case 1:
this.opt = createOpt(this.rz, this.colors)
break;
default:
break;
}
},
},
};
</script>
<style lang="less" scoped>

@ -1,13 +1,13 @@
<!--
* @Author: your name
* @Date: 2021-11-09 17:19:28
* @LastEditTime: 2021-11-09 17:26:17
* @LastEditTime: 2021-11-10 15:58:05
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/ModelForumDetails/SuspectedCarBlackID/index.vue
-->
<template>
<div class="scb-outter">
<div class="scb-outter" v-loading="load">
<v-label-div title="疑似车黑ID"> </v-label-div>
<div class="scb-inner">
<v-echarts :opt="opt"></v-echarts>
@ -16,13 +16,44 @@
</template>
<script>
import {getCarblackUserName} from "@/api/ModelForumDetails"
import createOpt from "./opt"
export default {
name: "SuspectedCarBlackID",
data() {
return {
load: false,
form: {
sBrand: "",
token: "",
sSeriesName: "",
},
opt: createOpt()
}
},
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.load = true;
getCarblackUserName(obj).then(res => {
let data = res.data || {};
let arr = [];
let n = 1;
for(let key in data) {
n++;
let a = [n, data[key], key];
arr.push(a);
}
this.opt = createOpt(arr)
this.load = false;
})
}
}
}
</script>

@ -1,12 +1,13 @@
/*
* @Author: your name
* @Date: 2021-10-12 15:32:24
* @LastEditTime: 2021-11-09 17:33:49
* @LastEditTime: 2021-11-10 16:54:01
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/BrandInsight/weiboVolumeTrend/opt.js
*/
export default function createOpt() {
export default function createOpt(ds = []) {
return {
grid: {
top: 20,
@ -23,7 +24,11 @@ export default function createOpt() {
textStyle: {
color: "#fff", //设置文字颜色
},
extraCssText: "box-shadow: 0px 0px 10px 0px #3373CC;"
extraCssText: "box-shadow: 0px 0px 10px 0px #3373CC;",
formatter: (p) => {
let data = p.data;
return `<span>${data[2]}</span><br><span>数量:${data[1]}</span>`;
}
},
xAxis: {
axisTick: {
@ -58,31 +63,30 @@ export default function createOpt() {
},
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]
],
symbolSize: function (data) {
let x = 100;
if(data[1]*1 <= 8) {
x = 8
} else if(data[1]*1 >= 100) {
x = 100
} else {
x = data[1]*1
}
return x
},
itemStyle: {
normal: {
color: '#564f2d',
opacity: 0.8,
shadowBlur: 10,
shadowOffsetX: 0,
shadowOffsetY: 0,
borderType : 'solid',
borderColor: '#CC7733',
borderWidth: 1
},
},
data: ds,
type: 'scatter'
}
]

@ -1,13 +1,13 @@
<!--
* @Author: your name
* @Date: 2021-11-09 17:35:06
* @LastEditTime: 2021-11-09 17:40:59
* @LastEditTime: 2021-11-10 16:56:03
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/ModelForumDetails/ThreadIDRegistrationTime/index.vue
-->
<template>
<div class="tdrt-outter">
<div class="tdrt-outter" v-loading="load">
<v-label-div title="跟帖ID注册时间"> </v-label-div>
<div class="tdrt-inner">
<v-echarts :opt="opt"></v-echarts>
@ -16,12 +16,42 @@
</template>
<script>
import {getUserRegTime} from "@/api/ModelForumDetails"
import {createSingleColumnar} from "@/utils/gol/singleColumnar"
export default {
name: "ThreadIDRegistrationTime",
data() {
return {
opt: createSingleColumnar([2017, 2018, 2019, 2020, 2021], [20000, 18000, 15000, 14000, 11000])
load: false,
form: {
sBrand: "",
token: "",
sSeriesName: "",
},
opt: {}
}
},
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.load = true;
getUserRegTime(obj).then(res => {
let data = res.data || {};
let dx = [];
let ds = []
for(let key in data) {
dx.push(key);
ds.push(data[key])
}
this.opt = createSingleColumnar(dx, ds);
this.load = false;
})
}
}
};

@ -1,171 +1,272 @@
<!--
* @Author: your name
* @Date: 2021-10-14 10:48:56
* @LastEditTime: 2021-11-09 15:00:59
* @LastEditTime: 2021-11-10 11:38:07
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/WeiboDetails/weiboCharacters/index.vue
-->
<template>
<div class="wc-outter" v-loading="load">
<v-label-div title="数据对比分析">
<div>
<v-tab-group
:btns="['阅读量', '回复量', '精华率', '图文']"
@change="handlerTab"
></v-tab-group>
</div>
</v-label-div>
<div class="wc-inner">
<div class="d1">
<v-echarts :opt="opt"></v-echarts>
</div>
<div class="d2">
<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 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>
</div>
</template>
<script>
import { getSexMergeWeiBo } from "@/api/WeiboDetails";
import {
getClicksDistribution,
getReplyDistribution,
getJingHuaDistribution,
getImgDistribution,
} from "@/api/ModelForumDetails";
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],
name: "mfdCharacters",
data() {
return {
load: false,
form: {
sBrand: "",
token: "",
sSeriesName: "",
},
clicksDistributio: [],
replyDistribution: [],
jingHuaDistribution: [],
imgDistribution: [],
ctotal: 0,
rtotal: 0,
jtotal: 0,
itotal: 0,
total: 0,
labelArr: [],
opt: {},
colors: [
"#3373CC",
"#54BF93",
"#CC9D12",
"#f15c80",
"#e4d354",
"#8085e8",
"#8d4653",
"#91e8e1",
"#f7a35c",
"#90ed7d",
"#54BF93",
"#3373CC",
"#CC9D12",
"#f15c80",
"#e4d354",
"#8085e8",
"#8d4653",
"#91e8e1",
"#f7a35c",
"#90ed7d",
],
};
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);
created() {
this.form.token = this.getToken;
this.form.sBrand = this.getBrand.brandname || this.brand;
this.form.sSeriesName = this.getModel.name;
this.load = true;
Promise.all([
this.getClicksDistribution(),
this.getReplyDistribution(),
this.getJingHuaDistribution(),
this.getImgDistribution(),
]).then(() => {
this.handlerTab(0)
this.load = false;
});
},
//
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;
}
methods: {
//
toArr(obj) {
let arr = [];
for (let key in obj) {
let o = {
key: key,
value: obj[key],
};
arr.push(o);
}
return arr;
},
//
handlerTab(n) {
switch (n) {
case 0:
this.labelArr = this.clicksDistributio;
this.total = this.ctotal;
this.opt = createOpt(this.labelArr, this.colors);
break;
case 1:
this.labelArr = this.replyDistribution;
this.total = this.rtotal;
this.opt = createOpt(this.labelArr, this.colors);
break;
case 2:
this.labelArr = this.jingHuaDistribution;
this.total = this.jtotal;
this.opt = createOpt(this.labelArr, this.colors);
break;
case 3:
this.labelArr = this.imgDistribution;
this.total = this.itotal;
this.opt = createOpt(this.labelArr, this.colors);
break;
default:
this.labelArr = this.clicksDistributio;
this.total = this.ctotal;
this.opt = createOpt(this.labelArr, this.colors);
break;
}
},
//
getClicksDistribution() {
return new Promise((resolve, reject) => {
let obj = Object.assign({}, this.getCtime2, this.form);
getClicksDistribution(obj)
.then((res) => {
let data = res.data || [];
let arr = [];
let ctotal = 0;
data.forEach((ele) => {
let o = {
key: ele.name,
value: ele.value,
};
ctotal += ele.value * 1;
arr.push(o);
});
this.clicksDistributio = arr;
this.ctotal = ctotal;
resolve(true);
})
.catch(() => {
reject(false);
});
});
},
//
getReplyDistribution() {
return new Promise((resolve, reject) => {
let obj = Object.assign({}, this.getCtime2, this.form);
getReplyDistribution(obj)
.then((res) => {
let data = res.data || [];
let arr = [];
let rtotal = 0;
data.forEach((ele) => {
let o = {
key: ele.name,
value: ele.value,
};
rtotal += ele.value * 1;
arr.push(o);
});
this.replyDistribution = arr;
this.rtotal = rtotal;
resolve(true);
})
.catch(() => {
reject(false);
});
});
},
//
getJingHuaDistribution() {
return new Promise((resolve, reject) => {
let obj = Object.assign({}, this.getCtime2, this.form);
getJingHuaDistribution(obj)
.then((res) => {
let data = res.data || {};
let arr = [];
let jtotal = 0;
for (let key in data) {
let o = {
key: key,
value: data[key],
};
arr.push(o);
jtotal += data[key] * 1;
}
this.jingHuaDistribution = arr;
this.jtotal = jtotal;
resolve(true);
})
.catch(() => {
reject(false);
});
});
},
//
getImgDistribution() {
return new Promise((resolve, reject) => {
let obj = Object.assign({}, this.getCtime2, this.form);
getImgDistribution(obj)
.then((res) => {
let data = res.data || {};
let arr = [];
let itotal = 0;
for (let key in data) {
let o = {
key: key,
value: data[key],
};
arr.push(o);
itotal += data[key] * 1;
}
this.imgDistribution = arr;
this.itotal = itotal;
resolve(true);
})
.catch(() => {
reject(false);
});
});
},
},
},
};
</script>
<style lang="less" scoped>
.wc-outter {
width: 618px;
height: 460px;
border: 2px solid #0f2a4d;
margin-left: 16px;
overflow: hidden;
.wc-inner {
width: 100%;
height: calc(100% - 48px);
display: flex;
justify-content: flex-start;
.d1 {
width: 280px;
height: 100%;
}
.d2 {
width: 300px;
margin-left: 16px;
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>

@ -1,7 +1,7 @@
<!--
* @Author: your name
* @Date: 2021-10-14 10:11:41
* @LastEditTime: 2021-11-09 14:56:37
* @LastEditTime: 2021-11-10 10:40:17
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/WeiboDetails/weiboCommunicationTrend/index.vue
@ -17,7 +17,7 @@
</template>
<script>
import {getCountTime0528} from "@/api/WeiboDetails"
import {getBbsVolumeTime} from "@/api/ModelForumDetails"
import createOpt from "./opt"
export default {
name: "mfdCommunicationTrend",
@ -27,6 +27,7 @@ export default {
form: {
sBrand: "",
token: "",
sSeriesName: ""
},
opt: createOpt()
}
@ -34,13 +35,14 @@ export default {
created() {
this.form.token = this.getToken;
this.form.sBrand = this.getBrand.brandname || this.brand;
this.form.sSeriesName = this.getModel.name;
this.getData();
},
methods: {
getData() {
this.load = true;
let obj = Object.assign({}, this.getCtime2, this.form);
getCountTime0528(obj).then(res => {
getBbsVolumeTime(obj).then(res => {
let data = res.data || [];
let dx = []; //time
let ds = []; //value

@ -1,119 +1,99 @@
<!--
* @Author: your name
* @Date: 2021-10-14 10:24:56
* @LastEditTime: 2021-11-09 14:59:02
* @LastEditTime: 2021-11-10 10:53:19
* @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 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>
</div>
</template>
<script>
import { getWtypeWeiBo0528 } from "@/api/WeiboDetails";
import { getAffections } from "@/api/ModelForumDetails";
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;
});
name: "mfdContentType",
data() {
return {
load: false,
form: {
sBrand: "",
token: "",
sSeriesName: "",
},
labelArr: [],
total: 0,
opt: createOpt(),
colors: [
"#3373CC",
"#54BF93",
"#CC9D12",
],
};
},
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);
created() {
this.form.token = this.getToken;
this.form.sBrand = this.getBrand.brandname || this.brand;
this.form.sSeriesName = this.getModel.name;
this.getData();
},
methods: {
getData() {
this.load = true;
let obj = Object.assign({}, this.getCtime2, this.form);
getAffections(obj).then((res) => {
let data = res.data || {};
let arr = [];
let total = 0;
for (let key in data) {
let o = {
key: key,
value: data[key],
};
total += data[key]*1;
arr.push(o);
}
this.labelArr = arr;
this.total = total;
this.opt = createOpt(arr, this.colors);
this.load = false;
});
}
},
},
};
</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;
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>

@ -1,55 +1,75 @@
<!--
* @Author: your name
* @Date: 2021-11-09 13:51:57
* @LastEditTime: 2021-11-09 14:37:48
* @LastEditTime: 2021-11-10 16:08:58
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/ModelForumDetails/mfdHeader/index.vue
-->
<template>
<div class="mfdh-outter">
<div class="mfdh-outter" v-loading="load">
<v-label-div title="论坛洞察详情">
<v-btn @click="goback"></v-btn>
<v-btn @click="goback"></v-btn>
</v-label-div>
<div class="mfdh-inner">
<div class="mfdh-in-d1">
奥迪
{{this.form.sBrand|doStr(4)}}
</div>
<span class="mfdh-in-d2">奥迪A8</span>
<span class="mfdh-in-d2">{{this.form.sSeriesName|doStr(8)}}</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="s1">{{Count}}</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="s1">{{qrCount}}</span>
<span class="s2">品牌千人发帖量</span>
</div>
<div class="mfdh-data">
<span class="s1">1234.23</span>
<span class="s1">{{hyqrCount}}</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="s1">{{(qrCount-hyqrCount).toFixed(2)}}
<a-tooltip placement="topRight">
<template slot="title">
<div>千人发帖量算法</div>
<div>行业千人发帖量=[(行业所有车型主贴量*1000 ÷ 所有阅读量] ÷ 车型数量</div>
<div>千人发帖量=(车型主贴量*1000 ÷ 阅读量</div>
<div>千人发帖量量差=品牌千人发贴量-行业千人发帖量</div>
</template>
<a-icon type="question-circle" style="margin-left: 0.3rem;color: #5a9ebc;" />
</a-tooltip>
</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="s1">{{replyCount}}</span>
<span class="s2">品牌千人发帖量</span>
</div>
<div class="mfdh-data">
<span class="s1">1234.23</span>
<div class="mfdh-data">
<span class="s1">{{hyreplyCount}}</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="s1">{{(replyCount-hyreplyCount).toFixed(2)}}
<a-tooltip placement="topRight">
<template slot="title">
<div>千人发帖量算法</div>
<div>行业千人评论量=[(行业所有车型评论量*1000 ÷ 所有阅读量] ÷ 车型数量</div>
<div>千人评论量=(车型主贴量*1000 ÷ 阅读量</div>
<div>千人评论量量差=品牌千人评论量-行业千人评论量</div>
</template>
<a-icon type="question-circle" style="margin-left: 0.3rem;color: #5a9ebc;" />
</a-tooltip>
</span>
<span class="s2">量差</span>
</div>
</div>
@ -58,8 +78,48 @@
</template>
<script>
import { getBbsCount } from "@/api/ModelForumDetails";
export default {
name: "mfdHeader",
data() {
return {
load: false,
form: {
token: "",
sBrand: "",
sSeriesName: "",
},
Count: 0,
qrCount: 0,
hyqrCount: 0,
replyCount: 0,
hyreplyCount: 0,
};
},
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.load = true;
getBbsCount(obj).then((res) => {
let data = res.data;
this.Count = data.Count || 0;
this.qrCount = data.qrCount || 0;
this.hyqrCount = data.hyqrCount || 0;
this.replyCount = data.replyCount || 0;
this.hyreplyCount = data.hyreplyCount || 0;
this.load = false;
});
},
goback() {
this.$router.go(-1)
}
},
};
</script>

@ -1,14 +1,14 @@
<!--
* @Author: your name
* @Date: 2021-11-09 15:03:36
* @LastEditTime: 2021-11-09 15:39:19
* @LastEditTime: 2021-11-10 13:55:27
* @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-outter" v-loading="load">
<v-label-div title="面话题分布"> </v-label-div>
<div class="mpt-inner">
<div class="d1">
<v-echarts :opt="opt"></v-echarts>
@ -21,34 +21,70 @@
</template>
<script>
import {getNegativeTopic} from "@/api/ModelForumDetails"
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>']
],
load: false,
form: {
sBrand: "",
token: "",
sSeriesName: "",
},
opt: {},
config: {},
};
},
created() {
this.form.token = this.getToken;
this.form.sBrand = this.getBrand.brandname || this.brand;
this.form.sSeriesName = this.getModel.name;
this.getData();
},
methods: {
getData() {
let obj = Object.assign({}, this.getCtime2, this.form);
this.load = true;
getNegativeTopic(obj).then((res) => {
let data = res.data;
let optData = data.Data || {};
let UserTo10 = data.UserTo10 || [];
let ds = [];
let dx = [];
let list = [];
let max = 10;
for (let key in optData) {
max = optData[key]*1 > max ? optData[key]*1 : max;
let o = {
name: key,
max: max
}
dx.push(o)
ds.push(optData[key] * 1);
}
this.opt = createOpt(dx, ds);
UserTo10.forEach((ele) => {
let a = [
`<span>用户名:${ele.key}</span>`,
`<span>发帖量:${ele.value}</span>`,
];
list.push(a);
});
this.config = {
headerBGC: "#0c203b",
oddRowBGC: "#173b6d",
evenRowBGC: "rgba(69, 149, 244, 0)",
rowNum: 9,
header: ["TOP10发帖用户"],
data: list,
};
this.load = false;
});
},
}
};
</script>

@ -6,7 +6,7 @@
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/BrandInsight/weiboVolumeTrend/opt.js
*/
export default function createOpt() {
export default function createOpt(dx=[], ds=[]) {
return {
title: {
text: 'Basic Radar Chart',
@ -24,18 +24,7 @@ export default function createOpt() {
},
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 },
]
indicator:dx
},
series: [
{
@ -43,7 +32,7 @@ export default function createOpt() {
type: 'radar',
data: [
{
value: [5000, 14000, 28000, 26000, 42000, 21000, 22000, 21000, 19000, 23000],
value: ds,
name: '负面话题分布:',
itemStyle: {
color: "rgba(194, 151, 22)",

@ -1,13 +1,13 @@
<!--
* @Author: your name
* @Date: 2021-11-09 15:03:36
* @LastEditTime: 2021-11-09 15:36:13
* @LastEditTime: 2021-11-10 15:23:05
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/ModelForumDetails/mfdPositiveTopic/index.vue
-->
<template>
<div class="mpt-outter">
<div class="mpt-outter" v-loading="load">
<v-label-div title="正面话题分布"> </v-label-div>
<div class="mpt-inner">
<div class="d1">
@ -21,34 +21,69 @@
</template>
<script>
import { getPositiveTopic } from "@/api/ModelForumDetails";
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>']
],
load: false,
form: {
sBrand: "",
token: "",
sSeriesName: "",
},
opt: {},
config: {},
};
},
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);
let max = 10;
this.load = true;
getPositiveTopic(obj).then((res) => {
let data = res.data;
let optData = data.Data || {};
let UserTo10 = data.UserTo10 || [];
let ds = [];
let dx = [];
let list = [];
for (let key in optData) {
max = optData[key]*1 > max ? optData[key]*1 : max;
let o = {
name: key,
max: max
}
dx.push(o)
ds.push(optData[key] * 1);
}
this.opt = createOpt(dx, ds);
UserTo10.forEach((ele) => {
let a = [
`<span>用户名:${ele.key}</span>`,
`<span>发帖量:${ele.value}</span>`,
];
list.push(a);
});
this.config = {
headerBGC: "#0c203b",
oddRowBGC: "#173b6d",
evenRowBGC: "rgba(69, 149, 244, 0)",
rowNum: 9,
header: ["TOP10发帖用户"],
data: list,
};
this.load = false;
});
},
},
};
</script>

@ -1,12 +1,12 @@
/*
* @Author: your name
* @Date: 2021-10-12 15:32:24
* @LastEditTime: 2021-11-09 15:46:21
* @LastEditTime: 2021-11-10 11:55:50
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/BrandInsight/weiboVolumeTrend/opt.js
*/
export default function createOpt() {
export default function createOpt(dx=[], ds=[]) {
return {
title: {
text: 'Basic Radar Chart',
@ -24,18 +24,7 @@ export default function createOpt() {
},
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 },
]
indicator: dx
},
series: [
{
@ -43,7 +32,7 @@ export default function createOpt() {
type: 'radar',
data: [
{
value: [5000, 14000, 28000, 26000, 42000, 21000, 22000, 21000, 19000, 23000],
value: ds,
name: '正面话题分布:',
itemStyle: {
color: "rgba(48, 110, 195)",

@ -1,7 +1,7 @@
<!--
* @Author: your name
* @Date: 2021-10-12 16:48:36
* @LastEditTime: 2021-11-01 17:56:17
* @LastEditTime: 2021-11-10 09:34:24
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/BrandInsight/forumHotTopicDirection/index.vue
@ -14,8 +14,8 @@
<v-echarts :opt="opt"></v-echarts>
</div>
<div class="wp-in-d2">
<vue-scroll>
<v-label-ctx v-for="(item,index) in labelData" :key="index" :label="item.key" :cont="item.value" :percentage="(item.value/totalData*100).toFixed(2) +'%'" :color="colors[index]" :eStyle="{ height: '7.6rem' }"></v-label-ctx>
<vue-scroll>
<v-label-ctx v-for="(item,index) in labelData" :key="index" :label="item.key" :cont="item.value" :percentage="(item.value/totalData*100).toFixed(2) +'%'" :color="item.color" :eStyle="{ height: '7.6rem' }"></v-label-ctx>
</vue-scroll>
</div>
</div>
@ -23,9 +23,8 @@
</template>
<script>
import {getAffections2} from "@/api/ModelInsight"
import createOpt from "./opt"
import { getAffections2 } from "@/api/ModelInsight";
import createOpt from "./opt";
export default {
name: "mlForumHotTopicDirection",
props: ["brand", "model"],
@ -40,29 +39,7 @@ export default {
opt: {},
labelData: [],
totalData: 0,
colors: [
"#54BF93",
"#3373CC",
"#CC9D12",
"#f15c80",
"#e4d354",
"#8085e8",
"#8d4653",
"#91e8e1",
"#f7a35c",
"#90ed7d",
"#54BF93",
"#3373CC",
"#CC9D12",
"#f15c80",
"#e4d354",
"#8085e8",
"#8d4653",
"#91e8e1",
"#f7a35c",
"#90ed7d",
],
}
};
},
watch: {
model: {
@ -81,30 +58,30 @@ export default {
getData() {
this.load = true;
let obj = Object.assign({}, this.getCtime2, this.form);
getAffections2(obj).then(res => {
getAffections2(obj).then((res) => {
let data = res.data;
let arr = [];
let total = 0;
for(let key in data) {
let color = "";
for (let key in data) {
if (key === "正面") color = "#3373CC";
else if (key === "负面") color = "#CC9D12";
else color = "#54BF93";
let obj = {
key: key,
value: data[key]
}
value: data[key],
color: color,
};
total += data[key] * 1;
arr.push(obj)
arr.push(obj);
}
this.totalData = total;
this.labelData = arr;
this.opt = createOpt(this.labelData, [
"#54BF93",
"#3373CC",
"#CC9D12",
]);
this.opt = createOpt(this.labelData);
this.load = false;
})
}
}
});
},
},
};
</script>

@ -1,78 +1,88 @@
/*
* @Author: your name
* @Date: 2021-10-12 15:14:58
* @LastEditTime: 2021-11-01 15:36:27
* @LastEditTime: 2021-11-10 09:29:27
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/BrandInsight/weiboPortraits/opt.js
*/
import * as echarts from "echarts";
function createData(ds=[], colors=[]) {
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)
}
for (let i = 0; i < ds.length; i++) {
let ele = ds[i];
let color = "";
if (ele.key === '正面') {
color = "#3273cc";
} else if (ele.key === '负面') {
color = "#cc9d10";
} else {
color = "#53bf92";
}
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: color
}])
}
};
arr.push(obj)
}
}
return arr;
}
export default function createOpt(ds=[], colors=[]) {
const data = createData(ds,colors)
return {
series: [
{
name: 'Access From0',
type: 'pie',
radius: ['65%', '80%'],
avoidLabelOverlap: false,
label: {
show: false,
position: 'center',
color: "#ffff",
lineHeight: 30
},
emphasis: {
label: {
show: true,
fontSize: '20',
color: "#ffff",
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
}
]
}
export default function createOpt(ds = []) {
const data = createData(ds)
return {
series: [
{
name: 'Access From0',
type: 'pie',
radius: ['65%', '80%'],
avoidLabelOverlap: false,
label: {
show: false,
position: 'center',
color: "#ffff",
lineHeight: 30
},
emphasis: {
label: {
show: true,
fontSize: '20',
color: "#ffff",
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
}
]
}
}

@ -1,7 +1,7 @@
<!--
* @Author: your name
* @Date: 2021-10-12 15:06:47
* @LastEditTime: 2021-11-01 18:02:48
* @LastEditTime: 2021-11-10 09:42:52
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/BrandInsight/weiboPortraits/index.vue
@ -16,7 +16,7 @@
<v-echarts :opt="opt"></v-echarts>
</div>
<div class="wp-in-d2">
<vue-scroll>
<vue-scroll>
<v-label-ctx v-for="(item,index) in labelData" :key="index" :label="item.key" :cont="item.value" :percentage="(item.value/totalData*100).toFixed(2) +'%'" :color="colors[index]" :eStyle="{ height: '7.6rem' }"></v-label-ctx>
</vue-scroll>
</div>
@ -44,10 +44,10 @@ export default {
opt: {},
labelData: [],
totalData: 0,
colors: [
"#54BF93",
colors: [
"#3373CC",
"#CC9D12",
"#54BF93",
"#f15c80",
"#e4d354",
"#8085e8",
@ -68,7 +68,7 @@ export default {
],
};
},
watch: {
watch: {
model: {
handler(val) {
if (val) {
@ -91,16 +91,12 @@ export default {
total += ele.value * 1;
});
this.totalData = total;
this.opt = createOpt(this.sex, [
"#54BF93",
"#3373CC",
"#CC9D12",
]);
this.opt = createOpt(this.sex, this.colors);
} else if (n === 1) {
this.labelData = this.attestation;
let total = 0;
this.attestation.forEach((ele) => {
total += ele.value * 1;
total += ele.value * 1;
});
this.totalData = total;
this.opt = createOpt(this.attestation, this.colors);

@ -1,7 +1,7 @@
/*
* @Author: your name
* @Date: 2021-10-12 15:14:58
* @LastEditTime: 2021-11-01 15:36:27
* @LastEditTime: 2021-11-10 09:38:52
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/BrandInsight/weiboPortraits/opt.js
@ -9,6 +9,7 @@
import * as echarts from "echarts";
function createData(ds=[], colors=[]) {
let arr = [];
console.log(ds)
for(let i = 0; i < ds.length; i++) {
let ele = ds[i];
if(ele.value*1 > 0) {

@ -1,7 +1,7 @@
<!--
* @Author: your name
* @Date: 2021-10-14 11:25:20
* @LastEditTime: 2021-11-09 13:21:04
* @LastEditTime: 2021-11-10 17:03:43
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/views/WeiboDetails/weiboUserActiveArea/index.vue
@ -53,8 +53,8 @@ export default {
let ds = []; //
arr.forEach((ele) => {
let name = ele.name || "";
if(name.indexOf('省') === -1) {
ele.name = ele.name + '市'
if(name.indexOf('省') != -1) {
ele.name = ele.name.replace('省','')
}
let value = ele.value;
dx.push(ele.name);

Loading…
Cancel
Save