UNPKG

manage-client

Version:

经营管控模块前台组件

603 lines (574 loc) 17.7 kB
import {HttpResetClass} from 'vue-client' //请求当前公司的小区 export function select(self, param, condition) { var items = '\'f_residential_area\' value,F_RESIDENTIAL_AREA label' var tablename = 't_area' var sqlcondition = {items: items, tablename: tablename, condition: condition} let load = new HttpResetClass() load.load("POST", "/api/af-revenue/sql/singleTableParam", {data: sqlcondition}, {resolveMsg: null, rejectMsg: null}) .then((res) => { console.log(res.data, param, '返回数据') let children = [] res.data.forEach((area) => { var result = {label: area.label, value: Math.random(), name: area.value} children.push(result) }) for (var i = 0; i < self.drillparam.length; i++) { var s = self.drillparam[i] if (s.name == param) { self.drillparam[i] = {label: s.label, value: s.value, name: s.name, children: children} } } console.log(self.drillparam, '子列') }) } //请求后台数据 export function getData(self, sqlname,condition) { console.log("---------------echart的condition",condition) let load = new HttpResetClass(); load.load("POST", 'api/af-revenue/sql/jyd'+sqlname, {data: condition}, {resolveMsg: null, rejectMsg: null}) .then((res) => { console.log(res.data, '返回数据') self.sqlobtaindata = res.data }) } //时间类柱状图数据整合 export function DataIntegration(data) { var cachedata = data var param = [] console.log(cachedata, '待整合数据') param.push(cachedata[0].type) // 获取时间下的分类 for (var i = 1; i < cachedata.length; i++) { var l = 0 for (var j = 0; j < param.length; j++) { if (param[j] != cachedata[i].type) { l++ } } if (l == param.length) { param.push(cachedata[i].type) } } // 按照分类进行时间划分 var result = [] for (var i = 0; i < param.length; i++) { var item = {} var chilrenlist = [] data.forEach(function (s) { if (s.type == param[i]) { var h = {} h.name = s.name h.value = s.value chilrenlist.push(h) } }) item.name = param[i] item.value = chilrenlist result.push(item) } return result } //绘制饼状图 export function setPie(self, id, data) { console.log(data, '饼状图数据') // 获取显示区域 self.xc = self.$echarts.init(document.getElementById(id)) var scale = 0.8 // 获取图例 var legendname = [] data.forEach(function (s) { legendname.push(s.name) }) // 获取数据 var echartData = data // 自定义样式 var rich = { white: { color: "#fff", align: 'center', fontSize: 12 * scale, padding: [4, 0] }, blue: { color: '#e1e52a', fontSize: 12 * scale, align: 'center', padding: [6, 0] }, hr: { borderColor: '#64d8d4', width: '100%', borderWidth: 0.5, height: 0, }, } var total = 0; var result = '' // 数据求和 data.forEach(function (value) { total += value.value; }); // 数据进行处理,增加单位万 var index = total.toString().length if (index > 4) { var i = total.toString().substring(0, index - 4) var s = total.toString().substring(index - 4, index - 3) result = i + '.' + s + '万' } else { result = total } var s = "" for (var i = 4; i > 0; i--) { if (result.length < i) { s = "\t" + s } } result = s + result console.log(echartData, legendname, '绘图样式数据') // 绘图 self.xc.setOption({ title: [ { text: '总用户数', x: '44%', y: '33%', textStyle: { color: '#ffffff', fontSize: 12 * scale, } }, { text: result, x: '41%', y: '38%', padding: [15, 20], textStyle: { color: '#00e2ea', fontSize: 12 * scale, } }], legend: { orient: 'horizontal', icon: 'circle', x: 'center', y: '80%', itemWidth: 20 * scale, itemHeight: 10 * scale, textStyle: { fontSize: 12 * scale, padding: [0, 0, 0, 4], color: '#ffffff' }, data: legendname }, series: [ { name: 'Line 1', type: 'pie', animation: false, clockWise: false, radius: ['25%', '26%'], center: ['50%', '40%'], itemStyle: { normal: { label: { show: false }, labelLine: { show: false }, } }, hoverAnimation: false, tooltip: { trigger: 'axis' }, data: [{ value: 100, name: '02', itemStyle: { normal: { color: '#29b7ff',//未完成的圆环的颜色 label: { show: false }, labelLine: { show: false } } } }] }, { name: '总用户数', type: 'pie', radius: ['30%', '40%'], center: ['50%', '40%'], hoverAnimation: false, color: ['#6fd9d0', '#ede61f', '#6d9bdc'], minAngle: 15,//最小角度 startAngle: 60, //起始角度 label: { normal: { borderWidth: 1, borderRadius: 4, backgroundColor: '#004b5c', borderColor: '#64d8d4', formatter: function (params, ticket, callback) { var total = 0; //用户总数量 var percent = 0; echartData.forEach(function (value, index, array) { total += value.value; }); if( params.name.toString().length>6){ var s= params.name.toString().substring(6, params.name.toString().length) return '{white| ' + params.name.substring(0,6) + '\n'+s+'}\n{hr|}\n{yellow| ' + params.value + '}{blue| ' + percent + '%}'; } console.log(params.name,'cccccc') percent = ((params.value / total) * 100).toFixed(1); return '{white|' + params.name + '}\n{hr|}\n{blue| ' + params.value + '}{blue| ' + percent + '%}'; }, rich: rich, } }, labelLine: { normal: { length: 15 * scale, length2: 20 * scale, lineStyle: { formatter: function (params, ticket, callback) { var total = 0; //用户总数量 var percent = 0; //用户占比 echartData.forEach(function (value, index, array) { total += value.value; }); percent = ((params.value / total) * 100).toFixed(1); if( params.name.toString().length>6){ var s= params.name.toString().substring(6, params.name.toString().length) return '{white| ' + params.name.substring(0,6) + '\n'+s+'}\n{hr|}\n{yellow| ' + params.value + '}{blue| ' + percent + '%}'; } console.log(params.name,'cccccc') return '{white| ' + params.name + '}\n{hr|}\n{yellow| ' + params.value + '}\n{blue| ' + percent + '%}'; }, } } }, data: echartData }, { name: 'Line 2', type: 'pie', animation: false, clockWise: false, radius: ['44%', '45%'], center: ['50%', '40%'], itemStyle: { normal: {label: {show: false}, labelLine: {show: false},} }, hoverAnimation: false, tooltip: { show: false }, data: [{ value: 100, name: '02', itemStyle: { normal: {color: '#29b7ff', label: {show: false}, labelLine: {show: false}} } }] }] }, true) self.xc.on("click", self.eConsole) } //绘制柱状图 export function setBar(self, id, data, xname, yname, seriename, idname, namesubif) { console.log(data, '柱状图数据') self.xc = self.$echarts.init(document.getElementById(id)) var scale = 0.8 var xAxisData = []; var legendData = []; var serieData = []; var metaDate = [] var xlegen = [] for (var i = 0; i < data.length; i++) { legendData[i] = data[i].name metaDate.push(data[i].value) var xnamechildren = [] var cachedata = data[i].value cachedata.forEach(function (s) { xnamechildren.push(s.name) }) xlegen.push(xnamechildren) } xAxisData = xlegen[0] for (var i = 1; i < xlegen.length; i++) { if (xlegen[i].length > xAxisData.length) { xAxisData = xlegen[i] } } xAxisData.push("") var tooltype = '' console.log(xname) if (xname != '') { tooltype = xname.substring(0, 1) } console.log(xAxisData, '系列名') var h = [] metaDate.forEach(function (s) { var l = [] for (var i = 0; i < xAxisData.length; i++) { var flag = 0 for (var j = 0; j < s.length; j++) { if (s[j].name == xAxisData[i]) { flag++ l.push(s[j]) } } if (flag == 0) { l.push({name: xAxisData[i], value: 0}) } } h.push(l) }) metaDate = h var xname1 = ' ' + xname var color = [] color = getcolor(idname, xAxisData.length - 1) console.log(legendData,'图例名') if(typeof legendData[0]=="undefined"){ legendData=[] legendData.push(seriename) } if (JSON.stringify(color) == '[]') { color = ["#2EF7F3", '#ffe8cb', '#ff9000'] for (var v = 0; v < legendData.length; v++) { var serie = { name: legendData[v], type: "bar", barWidth: '30%', barGap: "15%", boundaryGap:true, itemStyle: { normal: { color: color[v], label: { show: true, textStyle: { color: "#fff" }, position: "top", formatter: function (p) { var index = p.value.toString().length if(p.value <= 0){ return "" } // if (index > 9) { // return p.value.toString().substring(0, index - 9) + '亿' // } else if (index > 4) { // return p.value.toString().substring(0, index - 4) + '万' // } return p.value } } } }, data: metaDate[v], } serieData.push(serie) } } else { for (var v = 0; v < legendData.length; v++) { var serie = { name: legendData[v], type: "bar", barWidth: '25%', barGap: "15%", itemStyle: { normal: { color: function (params) { let colorList = color; return colorList[params.dataIndex]; }, label: { show: true, textStyle: { color: "#fff" }, position: "top", formatter: function (p) { var index = p.value.toString().length if(p.value <= 0){ return "" } // if (index > 9) { // return p.value.toString().substring(0, index - 9) + '亿' // } else if (index > 4) { // return p.value.toString().substring(0, index - 4) + '万' // }else { // return p.value // } } } } }, data: metaDate[v], } serieData.push(serie) } } console.log(legendData, xAxisData, metaDate, serieData, '柱状图绘图参数') var colors = ["#036BC8", "#4A95FF", "#5EBEFC", "#2EF7F3", "#FFFFFF"] self.xc.setOption({ title: {text: '', textAlign: 'left', textStyle: {color: "#fff", fontSize: "16*scale", fontWeight: "normal"}}, color: colors, grid: {left: '5%', top: "18%", bottom: "8%", right: "5%", containLabel: true}, dataZoom: [{ type: 'inside', show: true, xAxisIndex: [0], left: '50%', bottom: -5, start: 2, end: 90 //初始化滚动条 }], legend: { top: 0, textStyle: { color: '#fff', }, data: legendData, }, tooltip: { formatter: function (params) { if (params[0].axisValue == '') { return '' } var result = '' params.forEach(function (item) { result += item.marker + " " + item.seriesName + " : " + item.value + "</br>"; }); return params[0].axisValue + tooltype + ' <br/> ' + result }, axisPointer: {type: 'line', lineStyle: {width: 0}}, trigger: 'axis', extraCssText: 'width: auto;height: auto;' }, xAxis: [ { name: xname1, type: 'category', nameTextStyle: { fontSize: 14 * scale, color: '#15dce2', padding: [40 * scale, 0, 0, -70 * scale], }, axisLine: {show: true, lineStyle: {color: '#04669e', width: 1}}, axisLabel: { interval: 0, textStyle: {color: '#ffffff', fontSize: 14 * scale}, formatter: function (value, index) { if (!namesubif) { return value } //进行客户名称截取换行 var s = '' // 长度超过4个字符进行换行 if (value.toString().length > 3 && value.toString().length < 8) { var s0 = value.toString().substring(0, 4) var s1 = value.toString().substring(4, value.toString().length) s = s0 + '\n' + s1 return s } // 长度超过8个字符进行再次换行 if (value.toString().length > 7 && value.toString().length < 12) { var s0 = value.toString().substring(0, 4) var s1 = value.toString().substring(4, 8) var s2 = value.toString().substring(8, value.toString().length) s = s0 + '\n' + s1 + '\n' + s2 return s } // 长度超过12个字符进行再次换行 if (value.toString().length > 11) { var s0 = value.toString().substring(0, 4) var s1 = value.toString().substring(4, 8) var s2 = value.toString().substring(8, 12) var s3 = value.toString().substring(12, value.toString().length) s = s0 + '\n' + s1 + '\n' + s2 + '\n' + s3 return s } s = value.toString() return s; } }, axisTick: {show: false}, data: xAxisData, }, ], yAxis: [ { name: yname, nameTextStyle: { fontSize: 14 * scale, padding: [-10 * scale, 35 * scale, 0, 0], }, axisTick: {show: false}, splitLine: {show: true, lineStyle: {type: 'dashed', color: '#004371'}}, axisLabel: {interval: 0, textStyle: {color: '#15dce2', fontSize: 14 * scale}, formatter: function (value) { var index = value.toString().length if (index > 9) { return value.toString().substring(0, index - 9) + '亿' } else if (index > 4) { return value.toString().substring(0, index - 4) + '万' } return value }}, axisLine: {show: false, lineStyle: {color: '#15dce2', fontSize: 14 * scale}}, }, ], series: serieData }, true) console.log('绘图成功') self.xc.on("click", self.eConsole) } var parseColor = function (hexStr) { return hexStr.length === 4 ? hexStr.substr(1).split('').map(function (s) { return 0x11 * parseInt(s, 16); }) : [hexStr.substr(1, 2), hexStr.substr(3, 2), hexStr.substr(5, 2)].map(function (s) { return parseInt(s, 16); }) }; var pad = function (s) { return (s.length === 1) ? '0' + s : s; }; // 获取渐变色值 export function gradientColors(start, end, steps, gamma) { var i, j, ms, me, output = [], so = []; gamma = gamma || 1; var normalize = function (channel) { return Math.pow(channel / 255, gamma); }; start = parseColor(start).map(normalize); end = parseColor(end).map(normalize); for (i = 0; i < steps; i++) { ms = i / (steps - 1); me = 1 - ms; for (j = 0; j < 3; j++) { so[j] = pad(Math.round(Math.pow(start[j] * me + end[j] * ms, 1 / gamma) * 255).toString(16)); } output.push('#' + so.join('')); } return output; } var getcolor = function (idname, num) { let color = { longnotbuygas: ['#ffe8cb', '#ff9000'], } if (typeof color[idname] != "undefined") { return gradientColors(color[idname][0], color[idname][1], num, 2.2) } return [] }