123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471 |
- import * as echarts from '../ec-canvas/echarts'
- import { mergeOptions } from '../ec-canvas/defaultOption'
- var util = require('../../../utils/util');
- var api = require('../../../config/api.js');
- let ecXdata, ecYdata, rateXdata, rateYdata, ec2Xdata, ec2Ydata, ec3Xdata, ec3Ydata
- const dayLength = 7
- Component({
- /**
- * 组件的初始数据
- */
- data: {
- userInfo: {},
- detail: {},
- activeType: 0,
- brandNameList: [],
- index: 0,
- // ec2: {
- // onInit: init2Chart
- // },
- // barEc: {
- // onInit: initBarChart
- // },
- dataNumList: [
- {
- value: 0,
- label: '店铺浏览量',
- key: 'pvTotalNum',
- bgColor: 'rgba(255, 205, 60, 0.1)',
- color: '#FFCD3C'
- },
- {
- value: 0,
- label: '用户访问量',
- key: 'uvTotalNum',
- bgColor: 'rgba(77,174,255,0.1)',
- color: '#4DAEFF'
- },
- {
- value: 0,
- label: '用户咨询量',
- bgColor: 'rgba(23,210,210,0.1)',
- color: '#17D2D2',
- key: 'totalTalkNum'
- },
- {
- value: 0,
- label: '店铺商品数',
- bgColor: 'rgba(246,151,88,0.1)',
- color: '#F69758',
- key: 'goodsNum'
- }
- ],
- chartTypes: [
- {
- icon: 'data_booth',
- name: '店铺数据',
- value: 0
- },
- {
- icon: 'data_visitor',
- name: '访客数据',
- value: 1
- },
- {
- icon: 'data_wares',
- name: '商品数据',
- value: 2
- },
- ]
- },
- lifetimes: {
-
- },
- async ready () {
- this.userInfo = wx.getStorageSync('userinfoDetail')
- this.brandList = this.userInfo.brandList
- this.setData({
- userInfo: this.userInfo,
- brandNameList: [this.userInfo.brandName]
- })
- await this.getBrandList()
- this.getData()
- },
- methods: {
- changeActiveType (e) {
- const { value } = e.currentTarget.dataset
- this.setData({
- activeType: value
- })
- },
- async getData () {
- let userInfo = this.userInfo
- if (!userInfo || !userInfo.userId) {
- return
- }
-
- let res = await util.request(api.SceneReport ,{
- guideId: userInfo.userId,
- brandId: this.brandList[this.data.index].brandId,
- startDate: fotmatDate(new Date(new Date().getTime() - 86000000), 'yyyy-MM-dd'),
- size: dayLength
- }, 'get')
- if (res.code !== 0) {
- wx.showModal({
- title: '未查询到店铺统计信息',
- })
- return
- }
- let data = res.data
- let hotVisitHistory = this.formatData(data.hotVisitHistory)
- ec3Xdata = hotVisitHistory.xaxis
- ec3Ydata = hotVisitHistory.result
- let sceneVisit = this.formatData(data.pvHistory)
- ecXdata = sceneVisit.xaxis
- ecYdata = sceneVisit.result
- let uvVisit = this.formatData(data.uvHistory)
- ec2Xdata = uvVisit.xaxis
- ec2Ydata = [uvVisit.result]
- let dealHistory = this.formatData(data.dealHistory)
- let goodsDetailVisitHistory = this.formatData(data.goodsDetailVisitHistory)
- rateXdata = goodsDetailVisitHistory.xaxis
- rateYdata = goodsDetailVisitHistory.result.map((item, index) => ((dealHistory.result[index] || 0) * 100 / (item || 1)).toFixed(1))
- let talkHistory = this.formatData(data.talkHistory)
- ec2Ydata[1] = talkHistory.result
- let dataNumList = this.data.dataNumList.map(item => {
- if (data[item.key]) {
- item.value = formatNum(data[item.key])
- }
- return item
- })
- this.setData({
- // detail: data,
- dataNumList,
- ec: {
- onInit: initChart
- },
- ec2: {
- onInit: init2Chart
- },
- ec3: {
- onInit: init3Chart
- },
- rateEc: {
- onInit: initRateChart
- }
- })
- },
- formatData (data) {
- if (typeof data === 'string') {
- data = JSON.parse(data)
- }
- if (!(data instanceof Array)) {
- data = []
- }
- let originData = []
- if (data.length < dayLength) {
- let today = new Date(fotmatDate(new Date(), 'yyyy-MM-dd')).getTime()
-
- for (let i =0; i < dayLength; i++) {
- let theDay = today - (dayLength - i) * 86400000
- let inData = {}
- let date = fotmatDate(new Date(theDay), 'yyyy-MM-dd')
- inData[date] = data.find(item => item[`${date} 00:00:00`]) ? data.find(item => item[`${date} 00:00:00`])[`${date} 00:00:00`] : 0
- originData.push(inData)
- }
- } else {
- originData = data
- }
- let xaxis = originData.map(item => Object.keys(item)[0].slice(5,10))
- let result = originData.map(item => item[Object.keys(item)[0]])
- return {
- result,
- xaxis,
- }
- },
- async getBrandList () {
- let res = await util.request(api.GetAdminBrands ,{
- userId: this.userInfo.userId,
- })
- let list = res.data
- let brandNameList = list.map(item => item.brandName.slice(0,15))
- this.brandList = list
- this.setData({
- brandNameList
- })
- },
- bindPickerChange (e) {
- let index = e.detail.value
- let brand = this.brandList[index]
- console.log(e)
- this.setData({
- index
- })
- this.reset()
- wx.nextTick(() => {
- this.getData()
- })
- },
- reset() {
- this.setData({
- ec: '',
- ec2: '',
- ec3: '',
- rateEc: '',
- dataNumList: [
- {
- value: 0,
- label: '店铺浏览量',
- key: 'pvTotalNum',
- bgColor: 'rgba(255, 205, 60, 0.1)',
- color: '#FFCD3C'
- },
- {
- value: 0,
- label: '用户访问量',
- key: 'uvTotalNum',
- bgColor: 'rgba(77,174,255,0.1)',
- color: '#4DAEFF'
- },
- {
- value: 0,
- label: '用户咨询量',
- bgColor: 'rgba(23,210,210,0.1)',
- color: '#17D2D2',
- key: 'totalTalkNum'
- },
- {
- value: 0,
- label: '店铺商品数',
- bgColor: 'rgba(246,151,88,0.1)',
- color: '#F69758',
- key: 'goodsNum'
- }
- ],
- })
- }
- }
- })
- function initChart(canvas, width, height, dpr) {
- const chart = echarts.init(canvas, null, {
- width: width,
- height: height,
- devicePixelRatio: dpr // new
- });
- canvas.setChart(chart);
-
- var option = {
- title: {
- text: ''
- },
- tooltip: {
- formatter: `{a}: {c} \n${new Date().getFullYear()}-{b}`,
- axisPointer: {
- lineStyle: {
- color: '#FFCD3C'
- }
- }
- },
- color: ['#FFCD3C'],
- xAxis: {
- boundaryGap: false,
- data: ecXdata
- },
- series: [
- {
- data: ecYdata,
- type: 'line',
- name: '浏览量',
- symbolSize: 2,
- showSymbol: false,
- symbol: 'circle',
- smooth: 0.5,
- areaStyle: {
- opacity: 0.1
- },
- },
- ]
- };
- chart.setOption(mergeOptions(option));
- return chart;
- }
- function init3Chart(canvas, width, height, dpr, xdata,) {
- const chart = echarts.init(canvas, null, {
- width: width,
- height: height,
- devicePixelRatio: dpr // new
- });
- canvas.setChart(chart);
-
- var option = {
- title: {
- text: ''
- },
- color: ['#ED5D18'],
- tooltip: {
- formatter: `{a}: {c} \n${new Date().getFullYear()}-{b}`,
- axisPointer: {
- type: 'shadow',
- shadowStyle: {
- color: 'rgba(255, 205, 60, 0.1)'
- },
- lineStyle: {
- color: 'rgba(255, 205, 60, 0.1)'
- }
- }
- },
- xAxis: {
- data: ec3Xdata,
- boundaryGap: true
- },
- series: [
- {
- data: ec3Ydata,
- type: 'bar',
- name: '浏览量',
- itemStyle: {
- barBorderRadius: [5,5,0,0],
- },
- barWidth: 10,
- emphasis: {
- itemStyle: {
- opacity: 1
- }
- }
- },
- ]
- };
- chart.setOption(mergeOptions(option));
- return chart;
- }
- function init2Chart(canvas, width, height, dpr) {
- const chart = echarts.init(canvas, null, {
- width: width,
- height: height,
- devicePixelRatio: dpr // new
- });
- canvas.setChart(chart);
- var option = {
- xAxis: {
- data: ec2Xdata
- },
- tooltip: {
- formatter: `访问量: {c0} \n咨询量: {c1} \n${new Date().getFullYear()}-{b}`,
- axisPointer: {
- lineStyle: {
- color: '#FFCD3C'
- }
- }
- },
- series: [
- {
- data: ec2Ydata[0] || [],
- type: 'line',
- name: '客户访问量',
- symbolSize: 2,
- showSymbol: false,
- symbol: 'circle',
- smooth: 0.5,
- color: '#ED5D18',
- areaStyle: {
- opacity: 0.1
- },
- },
- {
- data: ec2Ydata[1] || [],
- type: 'line',
- name: '客户咨询量',
- symbolSize: 2,
- showSymbol: false,
- symbol: 'circle',
- color: '#FFCD3C',
- smooth: 0.5,
- areaStyle: {
- opacity: 0.1
- },
- },
- ]
- };
- chart.setOption(mergeOptions(option));
- return chart;
- }
- function initRateChart(canvas, width, height, dpr,) {
- const chart = echarts.init(canvas, null, {
- width: width,
- height: height,
- devicePixelRatio: dpr // new
- });
- canvas.setChart(chart);
-
- var option = {
- title: {
- text: ''
- },
- color: ['#FFCD3C'],
- tooltip: {
- formatter: `{a}: {c}% \n ${new Date().getFullYear()}-{b}`
- },
- xAxis: {
- data: rateXdata,
- axisLine: {
- show: true
- }
- },
- // yAxis: {
- // max: 100
- // },
- series: [
- {
- data: rateYdata,
- type: 'line',
- name: '转化率',
- symbolSize: 2,
- showSymbol: false,
- symbol: 'circle'
- },
- ]
- };
- chart.setOption(mergeOptions(option));
- return chart;
- }
- function fotmatDate (date, fmt='yyyy.MM.dd') {
- if (!(date instanceof Date)) {
- date = changeDateFormat(date)
- }
- var o = {
- "M+" : date.getMonth()+1, //月份
- "d+" : date.getDate(), //日
- "h+" : date.getHours(), //小时
- "m+" : date.getMinutes(), //分
- "s+" : date.getSeconds(), //秒
- "q+" : Math.floor((date.getMonth()+3)/3), //季度
- "S" : date.getMilliseconds() //毫秒
- };
- if(/(y+)/.test(fmt))
- fmt=fmt.replace(RegExp.$1, (date.getFullYear()+"").substr(4 - RegExp.$1.length));
- for(var k in o)
- if(new RegExp("("+ k +")").test(fmt))
- fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
- return fmt;
- }
- // 转格式 否则IOS下会有问题
- function changeDateFormat(cellval) {
- var dateVal = cellval + "";
- if (cellval != null) {
- dateVal = dateVal.slice(0, 19)
- dateVal = dateVal.replace("T"," ").replace("Z","").replace(/-/g, "/");
- var date = new Date(dateVal);
-
- date = new Date(date.setHours(date.getHours()));
-
- return date
- }
- }
- // 数值太大转为带万的文字
- function formatNum (num) {
- return num >= 10000 ? num >= 1000000 ? `99W+` : `${(num/10000).toFixed(2).replace(/[.]?0+$/g,"")}W` : num
- }
|