diff --git a/pages/commercialBI/businessPortrait.vue b/pages/commercialBI/businessPortrait.vue index 6d6be80..a6df6af 100644 --- a/pages/commercialBI/businessPortrait.vue +++ b/pages/commercialBI/businessPortrait.vue @@ -45,7 +45,7 @@

{{month}}月消费水平

-
+
@@ -191,15 +191,38 @@ export default { }, bindDateChange(e){ const date = new Date(e.detail.value) + const nowDate = new Date() let m = date.getMonth() + 1 - if (m<10){ - m = '0' + m + let nowMonth = nowDate.getMonth() + 1 + if (nowMonth === m){ + let y = nowDate.getFullYear() + let nowMonth = nowDate.getMonth() + 1 + let d = nowDate.getDate() - 1 + if (m<10){ + m = '0' + m + } + if (nowMonth<10){ + nowMonth = '0' + nowMonth + } + if (d<10){ + d = '0' + d + } + this.time =`${y}-${nowMonth}-${d}` + }else{ + let y = date.getFullYear() + if (m<10){ + m = '0' + m + } + let d = this.$util.getThisMonthDay(`${y}-${m}`) + this.time = `${y}-${m}-${d}` } + + + this.month = m this.single = e.detail.value let d = this.$util.getThisMonthDay(e.detail.value) this.endTime = e.detail.value + '-' + d - this.time = e.detail.value this.onRefresh() }, async nearestService(){ @@ -220,16 +243,49 @@ export default { uni.setStorageSync('currentService',res) }, async getTransactionList(){ + const nowDate = new Date() + const selectDate = new Date(this.time) + let selectMonth = selectDate.getMonth() + 1 + let nowDateMonth = nowDate.getMonth() + 1 + let time + if (selectMonth === nowDateMonth){ + let nowYear = nowDate.getFullYear() + let m + let nowDay = nowDate.getDate() - 1 + if (nowDateMonth<10){ + m = '0' + nowDateMonth + } + if (nowDay<10){ + nowDay = '0' + nowDay + } + time = `${nowYear}-${m}-${nowDay}` + }else{ + let selectYear = selectDate.getFullYear() + let m + if (selectMonth<10){ + m = '0' + selectMonth + } + let selectDay = this.$util.getThisMonthDay(`${selectYear}-${m}`) + time = `${selectYear}-${m}-${selectDay}` + } + + let req = { Province_Code:'340000', - Statistics_Date:this.time, + Statistics_Date:time, Serverpart_ID:this.serviceInfo.Serverpart_ID, ShowConsumptionLevel:true, ShowConvertRate:true } let totalData = await request.$webGet('CommercialApi/Revenue/GetTransactionAnalysis',req) - this.transactionList = totalData.Result_Data + if (totalData.Result_Data){ + this.transactionList = totalData.Result_Data + }else{ + this.transactionList = null + } + this.$forceUpdate() + console.log('this.transactionList',this.transactionList) }, async getTimePeriodList(){ let req = { @@ -238,44 +294,49 @@ export default { Serverpart_ID:this.serviceInfo.Serverpart_ID, TimeSpan:1 } - let totalData = await request.$webGet('CommercialApi/Revenue/GetTransactionTimeAnalysis',req) + let totalData = await request.$webGet('CommercialApi/Revenue/GetTransactionTimeAnalysis',req) let list = [] //客单占比 let numberList = [] //数量数组 let moneyList = [] // 金额数组 - totalData.Result_Data.CommonScatterList.forEach(item=>{ - list.push(item.value) - numberList.push(item.data) - moneyList.push(item.key) - }) - let res = { - categories: [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23], - series:[ - { - name:'客单占比', - data: list, - number: numberList, - money : moneyList - } - ] + if (totalData.Result_Data){ + totalData.Result_Data.CommonScatterList.forEach(item=>{ + list.push(item.value) + numberList.push(item.data) + moneyList.push(item.key) + }) + let res = { + categories: [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23], + series:[ + { + name:'客单占比', + data: list, + number: numberList, + money : moneyList + } + ] + } + // let res = { + // categories: ["2018","2019","2020","2021","2022","2023"], + // series: [ + // { + // name: "成交量A", + // data: [35,8,25,37,4,20] + // }, + // { + // name: "成交量B", + // data: [70,40,65,100,44,68] + // }, + // { + // name: "成交量C", + // data: [100,80,95,150,112,132] + // } + // ] + // }; + this.timePeriodList = res + }else{ + this.timePeriodList = [] } - // let res = { - // categories: ["2018","2019","2020","2021","2022","2023"], - // series: [ - // { - // name: "成交量A", - // data: [35,8,25,37,4,20] - // }, - // { - // name: "成交量B", - // data: [70,40,65,100,44,68] - // }, - // { - // name: "成交量C", - // data: [100,80,95,150,112,132] - // } - // ] - // }; - this.timePeriodList = res + }, async getLevelTopList(){ let req = { @@ -289,31 +350,36 @@ export default { series:[] } let totalData = await request.$webGet('CommercialApi/Revenue/GetBusinessTradeLevel',req) - res.categories = totalData.Result_Data.legend - totalData.Result_Data.ColumnList.forEach(item=>{ - res.series.push({name:item.name,data:item.data}) - }) - // let res = { - // categories:["商超","餐饮","水果饮品","小吃","连锁品牌","全业态"], - // series: [ - // { - // name: "低消费", - // textColor: "#FFFFFF", - // data: [20,27,21,24,6,28] - // }, - // { - // name: "普通消费", - // textColor: "#FFFFFF", - // data: [20,27,21,24,6,28] - // }, - // { - // name: "高消费", - // textColor: "#FFFFFF", - // data: [60,46,58,52,88,44] - // } - // ] - // } - this.levelTopList = res + if (totalData.Result_Data){ + res.categories = totalData.Result_Data.legend + totalData.Result_Data.ColumnList.forEach(item=>{ + res.series.push({name:item.name,data:item.data}) + }) + // let res = { + // categories:["商超","餐饮","水果饮品","小吃","连锁品牌","全业态"], + // series: [ + // { + // name: "低消费", + // textColor: "#FFFFFF", + // data: [20,27,21,24,6,28] + // }, + // { + // name: "普通消费", + // textColor: "#FFFFFF", + // data: [20,27,21,24,6,28] + // }, + // { + // name: "高消费", + // textColor: "#FFFFFF", + // data: [60,46,58,52,88,44] + // } + // ] + // } + this.levelTopList = res + }else{ + this.levelTopList = [] + } + }, async getBandLevelList(){ let req = { @@ -324,25 +390,30 @@ export default { } let res =[] let totalData = await request.$webGet('CommercialApi/Revenue/GetBusinessBrandLevel',req) - totalData.Result_Data.legend.forEach(item=>{ - res.push({name:item,small:0,normal:0,big:0}) - }) - res.forEach((item,index)=>{ - totalData.Result_Data.ColumnList.forEach((subItem,subIndex)=>{ - if (subItem.name==='低消费'){ - item.small = subItem.data[index] - }else if(subItem.name==='普通消费'){ - item.normal = subItem.data[index] - }else if(subItem.name==='高消费'){ - item.big = subItem.data[index] - } + if (totalData.Result_Data){ + totalData.Result_Data.legend.forEach(item=>{ + res.push({name:item,small:0,normal:0,big:0}) }) - }) - // let res=[{name:'五芳斋',big:'14.8',normal:'41.7',small:'43.5'}, - // {name:'驿佰购',big:'44.1',normal:'31.7',small:'24.2'}, - // {name:'老娘舅',big:'15.2',normal:'70.1',small:'14.5'}, - // {name:'吉祥馄饨',big:'25.2',normal:'39.9',small:'34.7'}] - this.bandLevelList = res + res.forEach((item,index)=>{ + totalData.Result_Data.ColumnList.forEach((subItem,subIndex)=>{ + if (subItem.name==='低消费'){ + item.small = subItem.data[index] + }else if(subItem.name==='普通消费'){ + item.normal = subItem.data[index] + }else if(subItem.name==='高消费'){ + item.big = subItem.data[index] + } + }) + }) + // let res=[{name:'五芳斋',big:'14.8',normal:'41.7',small:'43.5'}, + // {name:'驿佰购',big:'44.1',normal:'31.7',small:'24.2'}, + // {name:'老娘舅',big:'15.2',normal:'70.1',small:'14.5'}, + // {name:'吉祥馄饨',big:'25.2',normal:'39.9',small:'34.7'}] + this.bandLevelList = res + }else{ + this.bandLevelList = [] + } + }, async getBusinessTypeList(){ const req = { @@ -354,24 +425,29 @@ export default { const data = await request.$webGet('CommercialApi/Revenue/GetBusinessTradeRevenue',req) let res = [] let all = 0 - data.Result_Data.BusinessTradeRank.forEach((item,index)=>{ - if (index<=10){ - res.push({name:`${item.name} ${item.value}%`,value:Number(item.value),text:item.data}) - all+=Number(item.value) - }else if(index===11){ - if (all<100){ - res.push({name:`其他${(100-all).toFixed(2)}%`,value:Number((100 - all).toFixed(2)),text:item.data}) + if (data.Result_Data){ + data.Result_Data.BusinessTradeRank.forEach((item,index)=>{ + if (index<=10){ + res.push({name:`${item.name} ${item.value}%`,value:Number(item.value),text:item.data}) + all+=Number(item.value) + }else if(index===11){ + if (all<100){ + res.push({name:`其他${(100-all).toFixed(2)}%`,value:Number((100 - all).toFixed(2)),text:item.data}) + } } - } - }) - let result= { - series: [ - { - data:res - } - ] - }; - this.businessTypeList = result + }) + let result= { + series: [ + { + data:res + } + ] + }; + this.businessTypeList = result + }else{ + this.businessTypeList = [] + } + }, async getCompareList(){ const req = { @@ -384,7 +460,7 @@ export default { let customerMax = 0 let carLit = [] let carLitMax = 0 - if (data.Result_Data.TransactionList.data.length>0){ + if (data.Result_Data.TransactionList.data){ data.Result_Data.TransactionList.data.forEach((item,index)=>{ if (index % 2 === 1 && index!==data.Result_Data.TransactionList.data.length-1){ @@ -398,7 +474,7 @@ export default { }) } - if (data.Result_Data.BayonetList.data.length>0){ + if (data.Result_Data.BayonetList.data){ data.Result_Data.BayonetList.data.forEach((item,index)=>{ if (index % 2 === 1 && index!==data.Result_Data.BayonetList.data.length-1){ @@ -409,6 +485,8 @@ export default { carLit.push(item[1]) } }) + }else{ + carLit = [] } @@ -444,6 +522,7 @@ export default { // } // ] // } + console.log('res',res) this.compareList = res }, async getBestsellerList(){ diff --git a/pages/commercialBI/carPortrait.vue b/pages/commercialBI/carPortrait.vue index be8b53f..7d88777 100644 --- a/pages/commercialBI/carPortrait.vue +++ b/pages/commercialBI/carPortrait.vue @@ -50,11 +50,11 @@ {{time}}
-
+
- +
@@ -86,9 +86,14 @@

{{thisMonth?thisMonth:'-'}}月车辆归属地

+
+
+
{{item.name}}
+
+
- +

{{thisMonth?thisMonth:'-'}}月车型停留分析/日均

@@ -96,16 +101,15 @@
- +

{{thisMonth?thisMonth:'-'}}月车型停留分布图/日均

-
- +
@@ -123,7 +127,7 @@
- +
@@ -163,6 +167,7 @@ export default { selectTab: 0, tabIsTrue: true, tabList:[],//选项卡列表 + carTypeList:[],//车型选项卡 carNumAll : 0,//一共的入区车流数 monthTotalList:[],//月累计 carData:[],//入区车流的数据 @@ -185,6 +190,7 @@ export default { allEntry:'',//一共的入区率占比 addAllEntry:'',//相较上月增加的入区率 endData:'',//截止日期 + isFirst:true,//是不是第一次调用 } }, components: { @@ -199,6 +205,7 @@ export default { this.backType = option.type }, onShow(){ + this.isFirst = true // 总的来说商业bi的五个页面都是 往组件里面传值 就可以出现图表和要求的东西 // 外面的一层页面主要用于处理数据 let nowTime = new Date() @@ -256,6 +263,29 @@ export default { }, methods:{ + //车型选择 + handleCarType(selectItem){ + this.carTypeList.forEach(item=>{ + if (item.value === selectItem.value){ + if (item.select){ + item.select = false + }else{ + item.select = true + } + }else{ + item.select = false + } + }) + let type + this.carTypeList.forEach(item=>{ + if (item.select){ + type = item.value + } + }) + + + this.getHomeData(type) + }, //获取服务区基本信息 async getServiceInfo(){ let id = '' @@ -391,6 +421,32 @@ export default { }, async getMonthTotalList(){ + let time + let nowYear + let yerYear + if (this.endTime){ + const date = new Date(this.endTime) + let y = date.getFullYear() - 1 + let m = date.getMonth() + 1 + if (m<10){ + m = '0'+ m + } + let d = date.getDate() + time = `${y}-${m}-${d}` + nowYear = y + 1 + yerYear = y + }else{ + const date = new Date(this.time) + let y = date.getFullYear() - 1 + let m = date.getMonth() + 1 + if (m<10){ + m = '0'+ m + } + let d = date.getDate() + time = `${y}-${m}-${d}` + nowYear = y + 1 + yerYear = y + } const req = { StatisticsDate:this.endTime?this.endTime:this.time, Serverpart_ID:this.serviceInfo.Serverpart_ID @@ -421,13 +477,53 @@ export default { allCarCount : item.Vehicle_Count, region:item.RegionList, rate:item.Entry_Rate, - money:item.RevenueAmount + money:item.RevenueAmount, + year:nowYear }) }) + + + const reqYes = { + StatisticsDate:time, + Serverpart_ID:this.serviceInfo.Serverpart_ID + } + const dataYes = await request.$webGet('CommercialApi/BigData/GetMonthAnalysis',reqYes) + let monthListYes = [] + let carCountYes = [] + let carCountMaxYes = 0 + let moneyCountYes = [] + let monetCountMaxYes = 0 + let infoYes = [] + dataYes.Result_Data.List.forEach(item=>{ + monthListYes.push(item.Statistics_Month + '月') + if (carCountMaxYes{ + let req + if (type){ + req = { + StatisticsMonth:statistic, + Serverpart_ID:this.serviceInfo.Serverpart_ID, + ContainWhole:true, + VehicleType:type + } + }else{ + req = { + StatisticsMonth:statistic, + Serverpart_ID:this.serviceInfo.Serverpart_ID, + ContainWhole:true + } + } + request.$webGet('CommercialApi/Revenue/GetBayonetOAList',req).then(res=>{ + if (this.isFirst){ + let list = [] + res.Result_Data.OtherData.forEach(item=>{ + list.push({name:item,value:item,select:false}) + }) + this.carTypeList =list + this.isFirst = false + } + // 因为只让接口调用一次 所以要把全部和不同区域的内容要放在同一个列表里面 然后通过选项卡的点击来切换展示哪一块的数据 let result = res.Result_Data.List result.forEach(item=>{ @@ -569,6 +686,7 @@ export default { // this.timeAnalysisData = result let categories = [0,2,4,6,8,10,12,14,16,18,20,22] let series = [] + let max = 0 result.forEach(item=>{ let obj = {name:'',data:[]} obj.name = item.name @@ -577,11 +695,17 @@ export default { valueList.push(Number((subItem[1] * 60).toFixed(0))) }) obj.data = valueList + valueList.forEach(item=>{ + if (item>max){ + max = item + } + }) series.push(obj) }) let list = { categories:categories, - series:series + series:series, + max:max } this.timeAnalysisData = list }) @@ -954,6 +1078,38 @@ export default { } } } + .selectType{ + width: 100%; + display: flex; + align-items: center; + margin: 12px auto; + .item{ + border-radius: 4px; + padding:2px 6px; + margin-right: 6px; + margin-bottom: 6px; + box-sizing: border-box; + .icon{ + width: 10px; + height: 10px; + margin-right: 4px; + } + .text{ + font-size: 12px; + font-family: PingFangSC-Regular, PingFang SC; + font-weight: 400; + color: #786B6C; + } + } + .itemSelect{ + border:1px solid #ccc; + background: rgba(237, 239, 244, 0.2); + } + .itemUnSelect{ + border:1px solid #ccc; + background: rgba(202, 208, 218, 0.5); + } + } .tab{ width: 100%; height: 38px; diff --git a/pages/commercialBI/components/bussiness/consumptionCompare.vue b/pages/commercialBI/components/bussiness/consumptionCompare.vue index 0298109..8b311c6 100644 --- a/pages/commercialBI/components/bussiness/consumptionCompare.vue +++ b/pages/commercialBI/components/bussiness/consumptionCompare.vue @@ -34,10 +34,12 @@ export default { tap(e){ uChartsInstance[e.target.id].showToolTip(e, { formatter: (item, category, index, opts) => { + console.log('item',item) + console.log('opts',opts) if (item.name === '客单数'){ return item.name + ':'+ item.data + '笔' }else{ - return item.name + ':'+ item.data + '辆' + return item.name + ':'+ item.data + '辆,交易概率: ' + ((opts.series[0].data[index] / opts.series[1].data[index])*100).toFixed(2) + '%' } } diff --git a/pages/commercialBI/components/bussiness/transactionAnalysis.vue b/pages/commercialBI/components/bussiness/transactionAnalysis.vue index 646e084..1096d53 100644 --- a/pages/commercialBI/components/bussiness/transactionAnalysis.vue +++ b/pages/commercialBI/components/bussiness/transactionAnalysis.vue @@ -54,9 +54,19 @@ export default { watch: { data: { handler(value) { - this.info = value - } - } + if (value){ + console.log('bianle',value) + this.info = value + console.log('this.info',this.info) + this.$forceUpdate() + }else{ + this.info = {} + } + }, + deep:true, + immediate:true, + }, + }, methods: { } diff --git a/pages/commercialBI/components/car/monthTotal.vue b/pages/commercialBI/components/car/monthTotal.vue index 001a08b..04e1575 100644 --- a/pages/commercialBI/components/car/monthTotal.vue +++ b/pages/commercialBI/components/car/monthTotal.vue @@ -33,22 +33,52 @@ export default { handleTap(e){ uChartsInstance[e.target.id].showToolTip(e,{ formatter: (item, category, index, opts) => { + console.log('item',item) + console.log('index',index) + console.log('opts',opts) let text = '' - if (item.name === '车流量'){ - if (opts.series[0].info[index].allCarCount && opts.series[0].info[index].rate){ - text = `入区 ${opts.series[0].info[index].allCarCount?opts.series[0].info[index].allCarCount:''} 辆, 入区率 ${opts.series[0].info[index].rate?opts.series[0].info[index].rate:''} %` - }else if (!opts.series[0].info[index].allCarCount){ - text = `入区0辆` + console.log('item.name.slice(5,10)',item.name.slice(5,10)) + let type = item.name.slice(5,10) + let time = opts.series[0].info[index].year + if (type === '车流量'){ + if (`${time}年车流量` === item.name){ + let showTime = opts.series[0].info[index].year.toString().slice(2,5) + text = `${showTime}年入区 ${opts.series[0].info[index].allCarCount?this.$util.fmoney(opts.series[0].info[index].allCarCount):''} 辆` + }else{ + let showTime = opts.series[1].info[index].year.toString().slice(2,5) + text = `${showTime}年入区 ${opts.series[1].info[index].allCarCount?this.$util.fmoney(opts.series[1].info[index].allCarCount):''} 辆` } return text }else{ - if (opts.series[0].info[index].allCarCount){ - return `金额 ${opts.series[0].info[index].money?opts.series[0].info[index].money:''} 元, 单车消费 ${opts.series[0].info[index].allCarCount?((opts.series[0].info[index].money) / opts.series[0].info[index].allCarCount).toFixed(2):''} 元` + if (`${time}年交易额` === item.name){ + let showTime = opts.series[2].year.toString().slice(2,5) + console.log('showTime',showTime) + text = `${showTime}年金额 ${opts.series[2].info[index].money?this.$util.fmoney(opts.series[2].info[index].money):''} 元, 单车消费 ${opts.series[0].info[index].allCarCount?((opts.series[0].info[index].money) / opts.series[0].info[index].allCarCount).toFixed(2):''} 元` }else{ - return `金额 ${opts.series[0].info[index].money?opts.series[0].info[index].money:''} 元` - + let showTime = opts.series[3].year.toString().slice(2,5) + text = `${showTime}年金额 ${opts.series[3].info[index].money?this.$util.fmoney(opts.series[3].info[index].money):''} 元, 单车消费 ${opts.series[1].info[index].allCarCount?((opts.series[1].info[index].money) / opts.series[1].info[index].allCarCount).toFixed(2):''} 元` } + return text } + // if (item.name.slice(5,10) === '车流量'){ + // + // } + + // if (item.name === '车流量'){ + // if (opts.series[0].info[index].allCarCount && opts.series[0].info[index].rate){ + // text = `入区 ${opts.series[0].info[index].allCarCount?opts.series[0].info[index].allCarCount:''} 辆, 入区率 ${opts.series[0].info[index].rate?opts.series[0].info[index].rate:''} %` + // }else if (!opts.series[0].info[index].allCarCount){ + // text = `入区0辆` + // } + // return text + // }else{ + // if (opts.series[0].info[index].allCarCount){ + // return `金额 ${opts.series[0].info[index].money?opts.series[0].info[index].money:''} 元, 单车消费 ${opts.series[0].info[index].allCarCount?((opts.series[0].info[index].money) / opts.series[0].info[index].allCarCount).toFixed(2):''} 元` + // }else{ + // return `金额 ${opts.series[0].info[index].money?opts.series[0].info[index].money:''} 元` + // + // } + // } } }); @@ -60,8 +90,8 @@ export default { series: value.series } let config={ - carMax:this.getSplitNumber(value.series[0].max), - moneyMax:this.getSplitNumber(value.series[1].max) + carMax:value.series[0].max > value.series[1].max ? this.getSplitNumber(value.series[0].max):this.getSplitNumber(value.series[1].max), + moneyMax:value.series[2].max > value.series[3].max ? this.getSplitNumber(value.series[2].max):this.getSplitNumber(value.series[3].max) } this.drawCharts('monthTotal', res, config) }, @@ -131,7 +161,8 @@ export default { show: true, position: "bottom", lineHeight: 25, - float:'center' + float:'center', + itemGap: 30 }, extra: { mix:{ diff --git a/pages/commercialBI/components/car/timeAnalysis.vue b/pages/commercialBI/components/car/timeAnalysis.vue index 610ba8d..5c534e6 100644 --- a/pages/commercialBI/components/car/timeAnalysis.vue +++ b/pages/commercialBI/components/car/timeAnalysis.vue @@ -33,6 +33,7 @@ export default { watch: { data: { handler(value) { + console.log('value',value) this.handleCarData(value) }, immediate:true, @@ -40,6 +41,18 @@ export default { } }, methods: { + getSplitNumber(value){ + if (value === 0){ + return 5 + }else{ + let sum = value + value *0.2 + if (sum>0 && sum<5){ + return 5 + }else{ + return Number((sum / 5).toFixed(0)) * 5 + } + } + }, //点击事件 handleTap(e){ uChartsInstance[e.target.id].touchLegend(e); @@ -51,13 +64,15 @@ export default { }, // 处理传入的数据 handleCarData(value) { + console.log('handleCarData',value) let res = { categories:value.categories, series:value.series } - this.drawCharts('timeAnalysis', res) + let max = this.getSplitNumber(value.max) + this.drawCharts('timeAnalysis', res,max) }, - drawCharts(id, data) { + drawCharts(id, data,max) { const ctx = uni.createCanvasContext(id, this); let _this = this let phoneInfo = uni.getStorageSync('phoneInfo') @@ -100,7 +115,7 @@ export default { title:'单位: 分钟', titleOffsetY: -5, min:0, - max:180, + max:max, }] }, legend: { diff --git a/pages/commercialBI/components/guest/consumptionLevel.vue b/pages/commercialBI/components/guest/consumptionLevel.vue index 46e5010..39bad16 100644 --- a/pages/commercialBI/components/guest/consumptionLevel.vue +++ b/pages/commercialBI/components/guest/consumptionLevel.vue @@ -1,46 +1,57 @@