张雄 3 years ago
parent fb89433b7d
commit b7ef67189d

@ -0,0 +1,38 @@
import httpService from "@/request"
// 全车型竞争关系图谱
export function getSalesCompetitionALLList(params) {
let obj = Object.assign({action: 'getSalesCompetitionALLList', sType: 'Marketing'}, params)
return httpService({
url: `/api/v6.ashx`,
method: 'post',
data: obj,
headers: {
'content-type': 'application/x-www-form-urlencoded'
}
})
}
// 竞争分析
export function getSalesCompetitionList(params) {
let obj = Object.assign({action: 'getSalesCompetitionList', sType: 'Marketing'}, params)
return httpService({
url: `/api/v6.ashx`,
method: 'post',
data: obj,
headers: {
'content-type': 'application/x-www-form-urlencoded'
}
})
}
// 竞争分析单个车型添加
export function getSalesCompetitionAnalysis(params) {
let obj = Object.assign({action: 'getSalesCompetitionAnalysis', sType: 'Marketing'}, params)
return httpService({
url: `/api/v6.ashx`,
method: 'post',
data: obj,
headers: {
'content-type': 'application/x-www-form-urlencoded'
}
})
}

@ -0,0 +1,74 @@
import httpService from "@/request"
// 下拉-国别
export function getCountryS(params) {
let obj = Object.assign({action: 'getCountryS'}, params)
return httpService({
url: `/api/v6.ashx`,
method: 'post',
data: obj,
headers: {
'content-type': 'application/x-www-form-urlencoded'
}
})
}
// 下拉-能源类型
export function getEnergyS(params) {
let obj = Object.assign({action: 'getEnergyS'}, params)
return httpService({
url: `/api/v6.ashx`,
method: 'post',
data: obj,
headers: {
'content-type': 'application/x-www-form-urlencoded'
}
})
}
// 下拉-价格区间
export function getPriceRangeS(params) {
let obj = Object.assign({action: 'getPriceRangeS'}, params)
return httpService({
url: `/api/v6.ashx`,
method: 'post',
data: obj,
headers: {
'content-type': 'application/x-www-form-urlencoded'
}
})
}
// 下拉-级别
export function getSpecName1(params) {
let obj = Object.assign({action: 'getSpecName1'}, params)
return httpService({
url: `/api/v6.ashx`,
method: 'post',
data: obj,
headers: {
'content-type': 'application/x-www-form-urlencoded'
}
})
}
// 下拉-排量
export function getDisplacementS(params) {
let obj = Object.assign({action: 'getDisplacementS'}, params)
return httpService({
url: `/api/v6.ashx`,
method: 'post',
data: obj,
headers: {
'content-type': 'application/x-www-form-urlencoded'
}
})
}
// 下拉-座位数
export function getSeatS(params) {
let obj = Object.assign({action: 'getSeatS'}, params)
return httpService({
url: `/api/v6.ashx`,
method: 'post',
data: obj,
headers: {
'content-type': 'application/x-www-form-urlencoded'
}
})
}

@ -21,9 +21,9 @@ export function getEventsListH(params) {
})
}
// 首页_传播重点阵地
export function getWebsiteHome0528(params) {
let obj = Object.assign({action: 'getWebsiteHome0528',sType: 'Home'}, params)
// 首页_传播媒体TOP
export function getHomeSourceTop(params) {
let obj = Object.assign({action: 'getHomeSourceTop',sType: 'Home'}, params)
return httpService({
url: `/api/v6.ashx`,
method: 'post',

@ -307,6 +307,59 @@ const router = [
path: 'seriesInfo', //车型销量-销量
component: resolve => require(['@/views/SaleRank/SeriesInfo/index.vue'], resolve),
},
////////////////////
{
path: 'marketComp', //市场竞争格局图
component: resolve => require(['@/views/SaleRank/MarketComp/index.vue'], resolve),
},
{
path: 'mscTotal', //中国乘用车市场销量分析 - 总销量
component: resolve => require(['@/views/SaleRank/MarketSaleChina/mscTotal/index.vue'], resolve),
},
{
path: 'mscEnergyType', //中国乘用车市场销量分析 - 能源类型
component: resolve => require(['@/views/SaleRank/MarketSaleChina/mscEnergyType/index.vue'], resolve),
},
{
path: 'mscCompChart', //中国乘用车市场销量分析 - 全车型竞争关系图谱
component: resolve => require(['@/views/SaleRank/MarketSaleChina/mscCompChart/index.vue'], resolve),
},
{
path: 'mstCountryPercent', //传统燃油车市场销量分析 - 国别占比
component: resolve => require(['@/views/SaleRank/MarketSaleTraditional/mstCountryPercent/index.vue'], resolve),
},
{
path: 'mstSeriesType', //传统燃油车市场销量分析 - 车型类别
component: resolve => require(['@/views/SaleRank/MarketSaleTraditional/mstSeriesType/index.vue'], resolve),
},
{
path: 'mstPrecisionType', //传统燃油车市场销量分析 - 细分车型
component: resolve => require(['@/views/SaleRank/MarketSaleTraditional/mstPrecisionType/index.vue'], resolve),
},
{
path: 'mstMainPrice', //传统燃油车市场销量分析 - 主销价格区间
component: resolve => require(['@/views/SaleRank/MarketSaleTraditional/mstMainPrice/index.vue'], resolve),
},
{
path: 'mstMPPercent', //传统燃油车市场销量分析 - 车型主销价格占比
component: resolve => require(['@/views/SaleRank/MarketSaleTraditional/mstMPPercent/index.vue'], resolve),
},
{
path: 'mneEnergyType', //新能源车市场销量分析 - 能源类型
component: resolve => require(['@/views/SaleRank/MarketSaleNE/mneEnergyType/index.vue'], resolve),
},
{
path: 'mneCountryPercent', //新能源车市场销量分析 - 国别占比
component: resolve => require(['@/views/SaleRank/MarketSaleNE/mneCountryPercent/index.vue'], resolve),
},
{
path: 'mnePrecisionType', //新能源车市场销量分析 - 细分车型
component: resolve => require(['@/views/SaleRank/MarketSaleNE/mnePrecisionType/index.vue'], resolve),
},
{
path: 'mneMainPrice', //新能源车市场销量分析 - 主销价格区间
component: resolve => require(['@/views/SaleRank/MarketSaleNE/mneMainPrice/index.vue'], resolve),
},
]
},
{

@ -457,4 +457,14 @@ li.ant-calendar-time-picker-select-option-selected {
font-size: 0.875rem !important;
line-height: 1.5 !important;
word-wrap: break-word !important;
}
//多选
.ant-select-selection--multiple .ant-select-selection__choice {
color: #63AECC !important;
border: 0.0625rem solid #63AECC !important;
background-color: #1B4163 !important;
}
.ant-select-selection--multiple .ant-select-selection__choice__remove {
color: #63AECC !important;
}

@ -3,12 +3,12 @@
* @Date: 2021-10-08 16:37:30
* @LastEditTime: 2021-12-16 09:43:56
* @LastEditors: Please set LastEditors
* @Description: 传播重点阵地
* @Description: 传播媒体TOP
* @FilePath: /data-show/src/views/Index/key-communication-positions/index.vue
-->
<template>
<div class="kcp-outter" v-loading="load">
<v-label-div title="传播重点阵地"></v-label-div>
<v-label-div title="传播媒体TOP"></v-label-div>
<vue-scroll>
<div class="kcp-inner">
<div class="d1">

@ -8,7 +8,7 @@
-->
<template>
<div class="fhtd-outter" v-loading="load">
<v-label-div title="传播重点阵地" :eStyle="{ 'border-style': 'none' }" />
<v-label-div title="传播媒体TOP" :eStyle="{ 'border-style': 'none' }" />
<div class="fhtd-inner">
<div class="d1">
<v-ranking-fhtd :num="index + 1" :label="item.label" :val="item.val" :lineShow="index === 0 ?false : true" v-for="(item,index) in d1" :key="index"></v-ranking-fhtd>

@ -8,7 +8,7 @@
-->
<template>
<div class="fhtd-outter">
<v-label-div title="传播重点阵地" :showLine="false" :eStyle="{ 'border-style': 'none' }" />
<v-label-div title="传播媒体TOP" :showLine="false" :eStyle="{ 'border-style': 'none' }" />
<div class="fhtd-inner">
<div class="d1">
<v-ranking-fhtd :num="index + 1" :label="item.key" :val="item.value" :lineShow="index === 0 ?false : true" v-for="(item,index) in d1" :key="index"></v-ranking-fhtd>

@ -60,7 +60,7 @@ export default {
name: "index",
components: {
realTimeEvent, //
keyCommunicationPositions, //
keyCommunicationPositions, // TOP
salesRank, //
userPortrait, //
spreadTheSound, // TOP10

@ -3,7 +3,7 @@
* @Date: 2021-10-08 16:37:30
* @LastEditTime: 2021-12-16 09:43:56
* @LastEditors: Please set LastEditors
* @Description: 传播重点阵地
* @Description: 传播媒体TOP
* @FilePath: /data-show/src/views/Index/key-communication-positions/index.vue
-->
<template>
@ -21,7 +21,7 @@
</template>
<script>
import { getWebsiteHome0528 } from "@/api/home";
import { getHomeSourceTop } from "@/api/home";
export default {
name: "key-communication-positions",
data() {
@ -47,7 +47,7 @@ export default {
//
getData() {
this.load = true;
getWebsiteHome0528(this.getCommTime).then((res) => {
getHomeSourceTop(this.getCommTime).then((res) => {
let data = res.data;
let vals = [];
for (let key in data) {

@ -3,12 +3,12 @@
* @Date: 2021-10-08 16:37:30
* @LastEditTime: 2021-12-16 09:43:56
* @LastEditors: Please set LastEditors
* @Description: 传播重点阵地
* @Description: 传播媒体TOP
* @FilePath: /data-show/src/views/Index/key-communication-positions/index.vue
-->
<template>
<div class="kcp-outter" v-loading="load">
<v-label-div title="传播重点阵地"></v-label-div>
<v-label-div title="传播媒体TOP"></v-label-div>
<vue-scroll>
<div class="kcp-inner">
<div class="d1">

@ -0,0 +1,239 @@
<template>
<div class="mcomp-outter">
<v-label-div title="中国汽车市场竞争格局图"></v-label-div>
<div class="d2">
<a-form-model layout="inline">
<a-form-model-item label="数据筛选">
<a-select style="width: 200px" mode="multiple" v-model="countries" placeholder="选择国别" allowClear>
<a-select-option v-for="(item) in countryList" :value="item.key" :key="item.value">
{{item.value}}
</a-select-option>
</a-select>
<a-select style="width: 200px" mode="multiple" v-model="energies" placeholder="选择能源" allowClear>
<a-select-option v-for="(item) in energyList" :value="item.key" :key="item.value">
{{item.value}}
</a-select-option>
</a-select>
<a-select style="width: 200px" mode="multiple" v-model="prices" placeholder="选择价格" allowClear>
<a-select-option v-for="(item) in priceList" :value="item.key" :key="item.value">
{{item.value}}
</a-select-option>
</a-select>
<a-select style="width: 200px" mode="multiple" v-model="specs" placeholder="选择级别" allowClear>
<a-select-option v-for="(item) in specList" :value="item.key" :key="item.value">
{{item.value}}
</a-select-option>
</a-select>
<a-select style="width: 200px" mode="multiple" v-model="displacements" placeholder="选择排量" allowClear>
<a-select-option v-for="(item) in displacementList" :value="item.key" :key="item.value">
{{item.value}}
</a-select-option>
</a-select>
<a-select style="width: 200px" mode="multiple" v-model="seats" placeholder="选择座位数" allowClear>
<a-select-option v-for="(item) in seatList" :value="item.key" :key="item.value">
{{item.value}}
</a-select-option>
</a-select>
<a-button style="margin-left: 16px" @click="getData"></a-button>
</a-form-model-item>
</a-form-model>
</div>
<div class="d2">
<a-form-model layout="inline">
<a-form-model-item label="选择日期">
<a-month-picker style="width: 146px" :allowClear="false" v-model="selTime[0]" valueFormat="YYYY-MM" placeholder="开始日期"></a-month-picker>
<a-month-picker style="width: 146px" :allowClear="false" v-model="selTime[1]" valueFormat="YYYY-MM" placeholder="结束日期"></a-month-picker>
</a-form-model-item>
</a-form-model>
</div>
<div class="d2">
<div>
<span v-for="(item, index) in seriesList" :key="index">
<a-button style="margin-left: 12px" @click="onDelete(index)" type="primary">{{item}}<a-icon type="close" /></a-button>
</span>
<a-button style="margin-left: 12px" type="primary" icon="plus" @click="hanlderAddSeries"></a-button>
</div>
</div>
<iSaleModelChoose :brand="brand" :model="model" :visible.sync="modelShow" @change="handlerBrand"></iSaleModelChoose>
<div class="d3">
<v-echarts :opt="opt"></v-echarts>
</div>
</div>
</template>
<script>
import {getCountryS,getPriceRangeS,getSpecName1,getSeatS,getDisplacementS,getEnergyS} from "@/api/SaleRankMarketCommon";
import {getSalesCompetitionALLList,getSalesCompetitionList,getSalesCompetitionAnalysis} from "@/api/SaleRankMarket";
import createOpt from "./opt"
export default {
name: 'CitySale',
data() {
return {
form: {
token: '',
sCountryS: '',
sEnergyS: '',
sPriceRangeS: '',
sDisplacementS: '',
sSeatS: '',
sSpecName1: '',
sTimeType: 4,
sStartTime: '',
sEndTime:'',
},
//
countries: [],
energies: [],
prices: [],
specs: [],
specs2: [],
displacements: [],
seats: [],
selTime: ['2022-06','2022-06'],
seriesList: [],
//
countryList: [],
energyList: [],
priceList: [],
specList: [],
displacementList: [],
seatList: [],
//chart
opt: {},
totalData: [],
extraData: [],
//
modelShow: false,
brand: '奥迪',
model: '',
}
},
created() {
this.form.token = this.getToken;
this.getApi();
this.getData()
},
methods: {
getApi() {
getCountryS({token: this.getToken}).then(res => {
this.countryList = res.data
});
getEnergyS({token: this.getToken}).then(res => {
this.energyList = res.data
});
getPriceRangeS({token: this.getToken}).then(res => {
this.priceList = res.data
});
getSpecName1({token: this.getToken}).then(res => {
this.specList = res.data
});
getDisplacementS({token: this.getToken}).then(res => {
this.displacementList = res.data
});
getSeatS({token: this.getToken}).then(res => {
this.seatList = res.data
});
},
getData() {
let obj = {
token: this.form.token,
sCountryS: this.countries.join(','),
sEnergyS: this.energies.join(','),
sPriceRangeS: this.prices.join(','),
sDisplacementS: this.displacements.join(','),
sSeatS: this.seats.join(','),
sSpecName1: this.specs.join(','),
sSpecName2: this.specs2.join(','),
sTimeType: 4,
sStartTime: this.selTime[0],
sEndTime: this.selTime[1],
}
getSalesCompetitionALLList(obj).then(res => {
let data = res.data;
// [ ['total'],[] ]
let arr = [];
data.forEach(ele => {
if(ele.CheChang * 1 != 0) {
let item = [ele.CheChang * 1, ele.MainPrice, ele.Count, ele.Name, 'total'];
// let item = [ele.Count, ele.MainPrice, ele.CheChang * 1, ele.Name, 'total'];
arr.push(item);
}
});
this.totalData = arr;
this.opt = createOpt(this.totalData, this.extraData);
})
},
//
hanlderAddSeries() {
this.modelShow = true;
},
handlerBrand(val) {
if(val) { this.seriesList.push(val[1].name) };
let obj = {
token: this.form.token,
sSeriesName: this.seriesList.join(','),
sTimeType: 4,
sStartTime: this.selTime[0],
sEndTime: this.selTime[1],
};
getSalesCompetitionAnalysis(obj).then(res => {
let data = res.data;
let extraArr = [];
// [ ['extra'],[] ]
data.forEach(ele => {
let item = [ele.CheChang * 1, ele.MainPrice, ele.Count, ele.Name, 'extra'];
extraArr.push(item);
});
this.extraData = extraArr;
this.opt = createOpt(this.totalData, this.extraData);
})
this.modelShow = false;
},
//
onDelete(index) {
this.seriesList.splice(index,1);
if(this.seriesList.length == 0) {
this.extraData = [];
this.opt = createOpt(this.totalData, this.extraData);
} else {
let obj = {
token: this.form.token,
sSeriesName: this.seriesList.join(','),
sTimeType: 4,
sStartTime: this.selTime[0],
sEndTime: this.selTime[1],
};
getSalesCompetitionAnalysis(obj).then(res => {
let data = res.data;
let extraArr = [];
// [ ['extra'],[] ]
data.forEach(ele => {
let item = [ele.CheChang * 1, ele.MainPrice, ele.Count, ele.Name, 'extra'];
extraArr.push(item);
});
this.extraData = extraArr;
this.opt = createOpt(this.totalData, this.extraData);
})
}
},
}
}
</script>
<style lang="less">
.mcomp-outter {
width: 1552px;
// height: 460px;
border: 2px solid #0f2a4d;
.d2 {
display: flex;
justify-content: flex-start;
padding: 8px 16px 0px 16px;
}
.d3 {
// padding: 0px 16px 16px 16px;
width: 100%;
height: 1060px;
}
}
</style>

@ -0,0 +1,69 @@
import * as echarts from "echarts";
import { bigNumberTransform } from "@/utils/gol/dataTool"
export default function createOpt(data = [],extraData = []) {
return {
grid: {
left: '6%',
// top: '10%'
},
xAxis: {
splitLine: false,
scale: true,
axisLabel: {
color: '#FFF'
}
},
yAxis: {
splitLine: false,
scale: true,
axisLabel: {
formatter: function(value) {
return value / 10000 + '万元'
},
color: '#FFF'
}
},
series: [
{
name: 'total',
data: data,
type: 'scatter',
symbolSize: function (data) {
return data[2] / 600;
},
label: {
show: true,
formatter: function (param) {
return param.data[3];
},
color: '#FFF',
fontSize: 12,
fontWeight: 550,
position: 'inside'
},
itemStyle: {
color: '#3373CC',
}
},
{
name: 'extra',
data: extraData,
type: 'scatter',
symbolSize: function (data) {
return data[2] / 200;
},
label: {
show: true,
formatter: function (param) {
return param.data[3];
},
color: '##FFF',
position: 'inside'
},
itemStyle: {
color: '#CC9D12',
}
},
]
}
}

@ -0,0 +1,18 @@
<template>
<div>中国乘用车市场销量分析</div>
</template>
<script>
export default {
name: 'MarketSaleChina',
data() {
return {
}
}
}
</script>
<style lang="less">
</style>

@ -0,0 +1,18 @@
<template>
<div>中国乘用车市场销量分析-全车型竞争关系图谱</div>
</template>
<script>
export default {
name: 'mscEnergyType',
data() {
return {
}
}
}
</script>
<style lang="less">
</style>

@ -0,0 +1,18 @@
<template>
<div>中国乘用车市场销量分析-能源类型</div>
</template>
<script>
export default {
name: 'mscEnergyType',
data() {
return {
}
}
}
</script>
<style lang="less">
</style>

@ -0,0 +1,18 @@
<template>
<div>中国乘用车市场销量分析-总销量</div>
</template>
<script>
export default {
name: 'mscTotal',
data() {
return {
}
}
}
</script>
<style lang="less">
</style>

@ -0,0 +1,18 @@
<template>
<div>新能源车市场销量分析</div>
</template>
<script>
export default {
name: 'MarketSaleNE',
data() {
return {
}
}
}
</script>
<style lang="less">
</style>

@ -0,0 +1,18 @@
<template>
<div>新能源车市场销量分析-国别占比</div>
</template>
<script>
export default {
name: 'mneCountryPercent',
data() {
return {
}
}
}
</script>
<style lang="less">
</style>

@ -0,0 +1,18 @@
<template>
<div>新能源车市场销量分析-能源类型</div>
</template>
<script>
export default {
name: 'mneEnergyType',
data() {
return {
}
}
}
</script>
<style lang="less">
</style>

@ -0,0 +1,18 @@
<template>
<div>新能源车市场销量分析-主销价格区间</div>
</template>
<script>
export default {
name: 'mneMainPrice',
data() {
return {
}
}
}
</script>
<style lang="less">
</style>

@ -0,0 +1,18 @@
<template>
<div>新能源车市场销量分析-细分车型</div>
</template>
<script>
export default {
name: 'mnePrecisionType',
data() {
return {
}
}
}
</script>
<style lang="less">
</style>

@ -0,0 +1,18 @@
<template>
<div>传统燃油车市场销量分析</div>
</template>
<script>
export default {
name: 'MarketSaleTraditional',
data() {
return {
}
}
}
</script>
<style lang="less">
</style>

@ -0,0 +1,18 @@
<template>
<div>传统燃油车市场销量分析-国别占比</div>
</template>
<script>
export default {
name: 'mstCountryPercent',
data() {
return {
}
}
}
</script>
<style lang="less">
</style>

@ -0,0 +1,18 @@
<template>
<div>传统燃油车市场销量分析-主销价格占比</div>
</template>
<script>
export default {
name: 'mstMPPercent',
data() {
return {
}
}
}
</script>
<style lang="less">
</style>

@ -0,0 +1,18 @@
<template>
<div>传统燃油车市场销量分析-主销价格区间</div>
</template>
<script>
export default {
name: 'mstMainPrice',
data() {
return {
}
}
}
</script>
<style lang="less">
</style>

@ -0,0 +1,18 @@
<template>
<div>传统燃油车市场销量分析-细分车型</div>
</template>
<script>
export default {
name: 'mstPrecisionType',
data() {
return {
}
}
}
</script>
<style lang="less">
</style>

@ -0,0 +1,18 @@
<template>
<div>传统燃油车市场销量分析-车型类别</div>
</template>
<script>
export default {
name: 'mstSeriesType',
data() {
return {
}
}
}
</script>
<style lang="less">
</style>

@ -52,6 +52,51 @@
<a-menu-item key="citySale">
<router-link to="/saleRank/citySale">城市销量</router-link>
</a-menu-item>
<a-menu-item key="marketComp">
<router-link to="/saleRank/marketComp">市场竞争格局图</router-link>
</a-menu-item>
<a-sub-menu title="中国乘用车市场销量分析" key="sub4">
<a-menu-item key="mscTotal">
<router-link to="/saleRank/mscTotal">总销量</router-link>
</a-menu-item>
<a-menu-item key="mscEnergyType">
<router-link to="/saleRank/mscEnergyType">能源类型</router-link>
</a-menu-item>
<a-menu-item key="mscCompChart">
<router-link to="/saleRank/mscCompChart">全车型竞争关系图谱</router-link>
</a-menu-item>
</a-sub-menu>
<a-sub-menu title="传统燃油车市场销量分析" key="sub5">
<a-menu-item key="mstCountryPercent">
<router-link to="/saleRank/mstCountryPercent">国别占比</router-link>
</a-menu-item>
<a-menu-item key="mstSeriesType">
<router-link to="/saleRank/mstSeriesType">车型类别</router-link>
</a-menu-item>
<a-menu-item key="mstPrecisionType">
<router-link to="/saleRank/mstPrecisionType">细分车型</router-link>
</a-menu-item>
<a-menu-item key="mstMainPrice">
<router-link to="/saleRank/mstMainPrice">主销价格区间</router-link>
</a-menu-item>
<a-menu-item key="mstMPPercent">
<router-link to="/saleRank/mstMPPercent">车型主销价格占比</router-link>
</a-menu-item>
</a-sub-menu>
<a-sub-menu title="新能源车市场销量分析" key="sub6">
<a-menu-item key="mneEnergyType">
<router-link to="/saleRank/mneEnergyType">能源类型</router-link>
</a-menu-item>
<a-menu-item key="mneCountryPercent">
<router-link to="/saleRank/mneCountryPercent">国别占比</router-link>
</a-menu-item>
<a-menu-item key="mnePrecisionType">
<router-link to="/saleRank/mnePrecisionType">细分车型</router-link>
</a-menu-item>
<a-menu-item key="mneMainPrice">
<router-link to="/saleRank/mneMainPrice">主销价格区间</router-link>
</a-menu-item>
</a-sub-menu>
</a-menu>
</div>
<div class="sr-view">

Loading…
Cancel
Save