怎么实现员工和工资大数据分析,echarts+js实现

前言

 现如今市场上的人事系统五花八门,可做了大数据分析的人事系统少之又少,最近本人花了一个星期好好研究了大数据展示方面的内容,图表主要用的是echarts来实现的,官网地址:https://echarts.apache.org/zh/index.html

 

 

下面两张图片展示出我实现的员工和工资的大数据分析界面:

员工大数据分析中心

 

工资大数据分析中心

如何实现漂亮的图表

地图实现

首先引入js文件,去官网可以下载到这几个文件,引入到项目中就好了。

<script type="text/javascript" src="~/showdata/js/jquery.js"></script>
<script type="text/javascript" src="~/showdata/js/echarts.min.js"></script>
<script type="text/javascript" src="~/showdata/js/china.js"></script>
<script type="text/javascript" src="~/showdata/js/area_echarts_hr.js">

图层引入

<div class="map4" id="map_1"></div>

 

地图实现的js

$(function () {
    map();
})
var lightProvince = [];
var provinceMap = {
    台湾: 'taiwan',
    河北: 'hebei',
    山西: 'shanxi',
    辽宁: 'liaoning',
    吉林: 'jilin',
    黑龙江: 'heilongjiang',
    江苏: 'jiangsu',
    浙江: 'zhejiang',
    安徽: 'anhui',
    福建: 'fujian',
    江西: 'jiangxi',
    山东: 'shandong',
    河南: 'henan',
    湖北: 'hubei',
    湖南: 'hunan',
    广东: 'guangdong',
    海南: 'hainan',
    四川: 'sichuan',
    贵州: 'guizhou',
    云南: 'yunnan',
    陕西: 'shanxi1',
    甘肃: 'gansu',
    青海: 'qinghai',
    新疆: 'xinjiang',
    广西: 'guangxi',
    内蒙古: 'neimenggu',
    宁夏: 'ningxia',
    西藏: 'xizang',
    北京: 'beijing',
    天津: 'tianjin',
    上海: 'shanghai',
    重庆: 'chongqing',
    香港: 'xianggang',
    澳门: 'aomen'
};
var py_provinceMap = {
    china: '全国',
    hebei: '河北',
    shanxi: '山西',
    liaoning: '辽宁',
    jilin: '吉林',
    heilongjiang: '黑龙江',
    jiangsu: '江苏',
    zhejiang: '浙江',
    anhui: '安徽',
    fujian: '福建',
    jiangxi: '江西',
    shandong: '山东',
    henan: '河南',
    hubei: '湖北',
    hunan: '湖南',
    guangdong: '广东',
    hainan: '海南',
    sichuan: '四川',
    guizhou: '贵州',
    yunnan: '云南',
    shanxi: '陕西',
    gansu: '甘肃',
    qinghai: '青海',
    xinjiang: '新疆',
    guangxi: '广西',
    neimenggu: '内蒙古',
    ningxia: '宁夏',
    xizang: '西藏',
    beijing: '北京',
    tianjin: '天津',
    shanghai: '上海',
    chongqing: '重庆'
};
var cityMap = {
    北京市: '110100',
    天津市: '120100',
    上海市: '310100',
    重庆市: '500100',
    崇明县: '310200',
    湖北省直辖县市: '429000',
    铜仁市: '522200',
    毕节市: '522400',
    石家庄市: '130100',
    唐山市: '130200',
    秦皇岛市: '130300',
    邯郸市: '130400',
    邢台市: '130500',
    保定市: '130600',
    张家口市: '130700',
    承德市: '130800',
    沧州市: '130900',
    廊坊市: '131000',
    衡水市: '131100',
    太原市: '140100',
    大同市: '140200',
    阳泉市: '140300',
    长治市: '140400',
    晋城市: '140500',
    朔州市: '140600',
    晋中市: '140700',
    运城市: '140800',
    忻州市: '140900',
    临汾市: '141000',
    吕梁市: '141100',
    呼和浩特市: '150100',
    包头市: '150200',
    乌海市: '150300',
    赤峰市: '150400',
    通辽市: '150500',
    鄂尔多斯市: '150600',
    呼伦贝尔市: '150700',
    巴彦淖尔市: '150800',
    乌兰察布市: '150900',
    兴安盟: '152200',
    锡林郭勒盟: '152500',
    阿拉善盟: '152900',
    沈阳市: '210100',
    大连市: '210200',
    鞍山市: '210300',
    抚顺市: '210400',
    本溪市: '210500',
    丹东市: '210600',
    锦州市: '210700',
    营口市: '210800',
    阜新市: '210900',
    辽阳市: '211000',
    盘锦市: '211100',
    铁岭市: '211200',
    朝阳市: '211300',
    葫芦岛市: '211400',
    长春市: '220100',
    吉林市: '220200',
    四平市: '220300',
    辽源市: '220400',
    通化市: '220500',
    白山市: '220600',
    松原市: '220700',
    白城市: '220800',
    延边朝鲜族自治州: '222400',
    哈尔滨市: '230100',
    齐齐哈尔市: '230200',
    鸡西市: '230300',
    鹤岗市: '230400',
    双鸭山市: '230500',
    大庆市: '230600',
    伊春市: '230700',
    佳木斯市: '230800',
    七台河市: '230900',
    牡丹江市: '231000',
    黑河市: '231100',
    绥化市: '231200',
    大兴安岭地区: '232700',
    南京市: '320100',
    无锡市: '320200',
    徐州市: '320300',
    常州市: '320400',
    苏州市: '320500',
    南通市: '320600',
    连云港市: '320700',
    淮安市: '320800',
    盐城市: '320900',
    扬州市: '321000',
    镇江市: '321100',
    泰州市: '321200',
    宿迁市: '321300',
    杭州市: '330100',
    宁波市: '330200',
    温州市: '330300',
    嘉兴市: '330400',
    湖州市: '330500',
    绍兴市: '330600',
    金华市: '330700',
    衢州市: '330800',
    舟山市: '330900',
    台州市: '331000',
    丽水市: '331100',
    合肥市: '340100',
    芜湖市: '340200',
    蚌埠市: '340300',
    淮南市: '340400',
    马鞍山市: '340500',
    淮北市: '340600',
    铜陵市: '340700',
    安庆市: '340800',
    黄山市: '341000',
    滁州市: '341100',
    阜阳市: '341200',
    宿州市: '341300',
    六安市: '341500',
    亳州市: '341600',
    池州市: '341700',
    宣城市: '341800',
    福州市: '350100',
    厦门市: '350200',
    莆田市: '350300',
    三明市: '350400',
    泉州市: '350500',
    漳州市: '350600',
    南平市: '350700',
    龙岩市: '350800',
    宁德市: '350900',
    南昌市: '360100',
    景德镇市: '360200',
    萍乡市: '360300',
    九江市: '360400',
    新余市: '360500',
    鹰潭市: '360600',
    赣州市: '360700',
    吉安市: '360800',
    宜春市: '360900',
    抚州市: '361000',
    上饶市: '361100',
    济南市: '370100',
    青岛市: '370200',
    淄博市: '370300',
    枣庄市: '370400',
    东营市: '370500',
    烟台市: '370600',
    潍坊市: '370700',
    济宁市: '370800',
    泰安市: '370900',
    威海市: '371000',
    日照市: '371100',
    莱芜市: '371200',
    临沂市: '371300',
    德州市: '371400',
    聊城市: '371500',
    滨州市: '371600',
    菏泽市: '371700',
    郑州市: '410100',
    开封市: '410200',
    洛阳市: '410300',
    平顶山市: '410400',
    安阳市: '410500',
    鹤壁市: '410600',
    新乡市: '410700',
    焦作市: '410800',
    濮阳市: '410900',
    许昌市: '411000',
    漯河市: '411100',
    三门峡市: '411200',
    南阳市: '411300',
    商丘市: '411400',
    信阳市: '411500',
    周口市: '411600',
    驻马店市: '411700',
    省直辖县级行政区划: '469000',
    武汉市: '420100',
    黄石市: '420200',
    十堰市: '420300',
    宜昌市: '420500',
    襄阳市: '420600',
    鄂州市: '420700',
    荆门市: '420800',
    孝感市: '420900',
    荆州市: '421000',
    黄冈市: '421100',
    咸宁市: '421200',
    随州市: '421300',
    恩施土家族苗族自治州: '422800',
    长沙市: '430100',
    株洲市: '430200',
    湘潭市: '430300',
    衡阳市: '430400',
    邵阳市: '430500',
    岳阳市: '430600',
    常德市: '430700',
    张家界市: '430800',
    益阳市: '430900',
    郴州市: '431000',
    永州市: '431100',
    怀化市: '431200',
    娄底市: '431300',
    湘西土家族苗族自治州: '433100',
    广州市: '440100',
    韶关市: '440200',
    深圳市: '440300',
    珠海市: '440400',
    汕头市: '440500',
    佛山市: '440600',
    江门市: '440700',
    湛江市: '440800',
    茂名市: '440900',
    肇庆市: '441200',
    惠州市: '441300',
    梅州市: '441400',
    汕尾市: '441500',
    河源市: '441600',
    阳江市: '441700',
    清远市: '441800',
    东莞市: '441900',
    中山市: '442000',
    潮州市: '445100',
    揭阳市: '445200',
    云浮市: '445300',
    南宁市: '450100',
    柳州市: '450200',
    桂林市: '450300',
    梧州市: '450400',
    北海市: '450500',
    防城港市: '450600',
    钦州市: '450700',
    贵港市: '450800',
    玉林市: '450900',
    百色市: '451000',
    贺州市: '451100',
    河池市: '451200',
    来宾市: '451300',
    崇左市: '451400',
    海口市: '460100',
    三亚市: '460200',
    三沙市: '460300',
    成都市: '510100',
    自贡市: '510300',
    攀枝花市: '510400',
    泸州市: '510500',
    德阳市: '510600',
    绵阳市: '510700',
    广元市: '510800',
    遂宁市: '510900',
    内江市: '511000',
    乐山市: '511100',
    南充市: '511300',
    眉山市: '511400',
    宜宾市: '511500',
    广安市: '511600',
    达州市: '511700',
    雅安市: '511800',
    巴中市: '511900',
    资阳市: '512000',
    阿坝藏族羌族自治州: '513200',
    甘孜藏族自治州: '513300',
    凉山彝族自治州: '513400',
    贵阳市: '520100',
    六盘水市: '520200',
    遵义市: '520300',
    安顺市: '520400',
    黔西南布依族苗族自治州: '522300',
    黔东南苗族侗族自治州: '522600',
    黔南布依族苗族自治州: '522700',
    昆明市: '530100',
    曲靖市: '530300',
    玉溪市: '530400',
    保山市: '530500',
    昭通市: '530600',
    丽江市: '530700',
    普洱市: '530800',
    临沧市: '530900',
    楚雄彝族自治州: '532300',
    红河哈尼族彝族自治州: '532500',
    文山壮族苗族自治州: '532600',
    西双版纳傣族自治州: '532800',
    大理白族自治州: '532900',
    德宏傣族景颇族自治州: '533100',
    怒江傈僳族自治州: '533300',
    迪庆藏族自治州: '533400',
    拉萨市: '540100',
    昌都地区: '542100',
    山南地区: '542200',
    日喀则地区: '542300',
    那曲地区: '542400',
    阿里地区: '542500',
    林芝地区: '542600',
    西安市: '610100',
    铜川市: '610200',
    宝鸡市: '610300',
    咸阳市: '610400',
    渭南市: '610500',
    延安市: '610600',
    汉中市: '610700',
    榆林市: '610800',
    安康市: '610900',
    商洛市: '611000',
    兰州市: '620100',
    嘉峪关市: '620200',
    金昌市: '620300',
    白银市: '620400',
    天水市: '620500',
    武威市: '620600',
    张掖市: '620700',
    平凉市: '620800',
    酒泉市: '620900',
    庆阳市: '621000',
    定西市: '621100',
    陇南市: '621200',
    临夏回族自治州: '622900',
    甘南藏族自治州: '623000',
    西宁市: '630100',
    海东地区: '632100',
    海北藏族自治州: '632200',
    黄南藏族自治州: '632300',
    海南藏族自治州: '632500',
    果洛藏族自治州: '632600',
    玉树藏族自治州: '632700',
    海西蒙古族藏族自治州: '632800',
    银川市: '640100',
    石嘴山市: '640200',
    吴忠市: '640300',
    固原市: '640400',
    中卫市: '640500',
    乌鲁木齐市: '650100',
    克拉玛依市: '650200',
    吐鲁番地区: '652100',
    哈密地区: '652200',
    昌吉回族自治州: '652300',
    博尔塔拉蒙古自治州: '652700',
    巴音郭楞蒙古自治州: '652800',
    阿克苏地区: '652900',
    克孜勒苏柯尔克孜自治州: '653000',
    喀什地区: '653100',
    和田地区: '653200',
    伊犁哈萨克自治州: '654000',
    塔城地区: '654200',
    阿勒泰地区: '654300',
    自治区直辖县级行政区划: '659000',
    台湾省: '710000',
    香港特别行政区: '810100',
    澳门特别行政区: '820000'
};

var lightColor = {
    河北: '#ffa259',
    山西: '#fe6845',
    辽宁: '#fa4252',
    吉林: '#3fc5f0',
    黑龙江: '#c72c41',
    江苏: '#f4efd3',
    浙江: '#c72c41',
    安徽: '#e13a9d',
    福建: '#e13a9d',
    江西: '#cf56a1',
    山东: '#fa697c',
    河南: '#a3f7bf',
    湖北: '#3ed4ff',
    湖南: '#9dab86',
    广东: '#a6c84c',
    海南: '#ffa259',
    四川: '#cfb495',
    贵州: '#f09595',
    云南: '#4f98ca',
    陕西: '#617be3',
    甘肃: '#9aceff',
    青海: '#9aceff',
    新疆: '#02a8a8',
    广西: '#fbdff0',
    内蒙古: '#42e6a4',
    宁夏: '#02a8a8',
    西藏: '#f6c3e5',
    北京: '#a278b5',
    天津: '#d6e5fa',
    上海: '#fbe3b9',
    重庆: '#bac7a7'
};

var geoCoordMap = {
    '新疆': [86.22, 44.30],
    '九江': [116.00, 29.70],
    '新乡': [116.402217, 35.311657],
    ' ': [79.92, 37.12],
    '  ': [86.85, 47.70],
    '若羌县': [88.17, 39.02],
    '上海': [121.4648, 31.2891],
    '东莞': [113.8953, 22.901],
    '东营': [118.7073, 37.5513],
    '中山': [113.4229, 22.478],
    '临汾': [111.4783, 36.1615],
    '临沂': [118.3118, 35.2936],
    '丹东': [124.541, 40.4242],
    '丽水': [119.5642, 28.1854],
    '乌鲁木齐': [87.9236, 43.5883],
    '佛山': [112.8955, 23.1097],
    '保定': [115.0488, 39.0948],
    '兰州': [103.5901, 36.3043],
    '包头': [110.3467, 41.4899],
    '北京': [116.4551, 40.2539],
    '北海': [109.314, 21.6211],
    '南京': [118.8062, 31.9208],
    '南宁': [108.479, 23.1152],
    '南昌': [116.0046, 28.6633],
    '南通': [121.1023, 32.1625],
    '厦门': [118.1689, 24.6478],
    '台州': [121.1353, 28.6688],
    '合肥': [117.29, 32.0581],
    '呼和浩特': [111.4124, 40.4901],
    '咸阳': [108.4131, 34.8706],
    '哈尔滨': [127.9688, 45.368],
    '唐山': [118.4766, 39.6826],
    '嘉兴': [120.9155, 30.6354],
    '大同': [113.7854, 39.8035],
    '大连': [122.2229, 39.4409],
    '天津': [117.4219, 39.4189],
    '太原': [112.3352, 37.9413],
    '威海': [121.9482, 37.1393],
    '宁波': [121.5967, 29.6466],
    '宝鸡': [107.1826, 34.3433],
    '宿迁': [118.5535, 33.7775],
    '常州': [119.4543, 31.5582],
    '广州': [113.5107, 23.2196],
    '廊坊': [116.521, 39.0509],
    '延安': [109.1052, 36.4252],
    '张家口': [115.1477, 40.8527],
    '徐州': [117.5208, 34.3268],
    '德州': [116.6858, 37.2107],
    '惠州': [114.6204, 23.1647],
    '成都': [103.9526, 30.7617],
    '扬州': [119.4653, 32.8162],
    '承德': [117.5757, 41.4075],
    '拉萨': [91.1865, 30.1465],
    '无锡': [120.3442, 31.5527],
    '日照': [119.2786, 35.5023],
    '昆明': [102.9199, 25.4663],
    '杭州': [119.5313, 29.8773],
    '枣庄': [117.323, 34.8926],
    '柳州': [109.3799, 24.9774],
    '株洲': [113.5327, 27.0319],
    '武汉': [114.3896, 30.6628],
    '汕头': [117.1692, 23.3405],
    '江门': [112.6318, 22.1484],
    '沈阳': [123.1238, 42.1216],
    '沧州': [116.8286, 38.2104],
    '河源': [114.917, 23.9722],
    '泉州': [118.3228, 25.1147],
    '泰安': [117.0264, 36.0516],
    '泰州': [120.0586, 32.5525],
    '济南': [117.1582, 36.8701],
    '济宁': [116.8286, 35.3375],
    '海口': [110.3893, 19.8516],
    '淄博': [118.0371, 36.6064],
    '淮安': [118.927, 33.4039],
    '深圳': [114.5435, 22.5439],
    '清远': [112.9175, 24.3292],
    '温州': [120.498, 27.8119],
    '渭南': [109.7864, 35.0299],
    '湖州': [119.8608, 30.7782],
    '湘潭': [112.5439, 27.7075],
    '滨州': [117.8174, 37.4963],
    '潍坊': [119.0918, 36.524],
    '烟台': [120.7397, 37.5128],
    '玉溪': [101.9312, 23.8898],
    '珠海': [113.7305, 22.1155],
    '盐城': [120.2234, 33.5577],
    '盘锦': [121.9482, 41.0449],
    '石家庄': [114.4995, 38.1006],
    '福州': [119.4543, 25.9222],
    '秦皇岛': [119.2126, 40.0232],
    '绍兴': [120.564, 29.7565],
    '聊城': [115.9167, 36.4032],
    '肇庆': [112.1265, 23.5822],
    '舟山': [122.2559, 30.2234],
    '苏州': [120.6519, 31.3989],
    '莱芜': [117.6526, 36.2714],
    '菏泽': [115.6201, 35.2057],
    '营口': [122.4316, 40.4297],
    '葫芦岛': [120.1575, 40.578],
    '衡水': [115.8838, 37.7161],
    '衢州': [118.6853, 28.8666],
    '西宁': [101.4038, 36.8207],
    '西安': [109.1162, 34.2004],
    '贵阳': [106.6992, 26.7682],
    '连云港': [119.1248, 34.552],
    '邢台': [114.8071, 37.2821],
    '邯郸': [114.4775, 36.535],
    '郑州': [113.4668, 34.6234],
    '鄂尔多斯': [108.9734, 39.2487],
    '重庆': [107.7539, 30.1904],
    '金华': [120.0037, 29.1028],
    '铜川': [109.0393, 35.1947],
    '银川': [106.3586, 38.1775],
    '镇江': [119.4763, 31.9702],
    '长春': [125.8154, 44.2584],
    '长沙': [113.0823, 28.2568],
    '长治': [112.8625, 36.4746],
    '阳泉': [113.4778, 38.0951],
    '青岛': [120.4651, 36.3373],
    '韶关': [113.7964, 24.7028]
};

var provinces = ['shanghai', 'hebei', 'shanxi', 'neimenggu', 'liaoning', 'jilin', 'heilongjiang', 'jiangsu', 'zhejiang', 'anhui', 'fujian', 'jiangxi', 'shandong', 'henan', 'hubei', 'hunan', 'guangdong', 'guangxi', 'hainan', 'sichuan', 'guizhou', 'yunnan', 'xizang', 'shanxi1', 'gansu', 'qinghai', 'ningxia', 'xinjiang', 'beijing', 'tianjin', 'chongqing', 'xianggang', 'aomen', 'taiwan']
var provincesText = ['上海', '河北', '山西', '内蒙古', '辽宁', '吉林', '黑龙江', '江苏', '浙江', '安徽', '福建', '江西', '山东', '河南', '湖北', '湖南', '广东', '广西', '海南', '四川', '贵州', '云南', '西藏', '陕西', '甘肃', '青海', '宁夏', '新疆', '北京', '天津', '重庆', '香港', '澳门', '台湾']
var planePath = 'path://M.6,1318.313v-89.254l-319.9-221.799l0.073-208.063c0.521-84.662-26.629-121.796-63.961-121.491c-37.332-0.305-64.482,36.829-63.961,121.491l0.073,208.063l-319.9,221.799v89.254l330.343-157.288l12.238,241.308l-134.449,92.931l0.531,42.034l175.125-42.917l175.125,42.917l0.531-42.034l-134.449-92.931l12.238-241.308L1705';
var convertData = function (data) {
    var res = [];
    for (var i = 0; i < data.length; i++) {
        var dataItem = data[i];
        var fromCoord = geoCoordMap[dataItem.fromName];
        var toCoord = geoCoordMap[dataItem.toName];
        if (fromCoord && toCoord) {
            res.push({
                fromName: dataItem.fromName,
                toName: dataItem.toName,
                coords: [fromCoord, toCoord]
            });
        }
    }
    return res;
};
function SetMap() {
    var url = '../showdata/mapset.html';
    $("#iframeWin").show();
    //var name = 'add';
    //var iWidth = 500;
    //var iHeight = 500;
    ////获得窗口的垂直位置 
    //var iTop = (window.screen.availHeight - 30 - iHeight) / 2;
    ////获得窗口的水平位置 
    //var iLeft = (window.screen.availWidth - 10 - iWidth) / 2;
    //window.open(url, name, 'height=' + iHeight + ',,innerHeight=' + iHeight + ',width=' + iWidth + ',innerWidth=' + iWidth + ',top=' + iTop + ',left=' + iLeft + ',status=no,toolbar=no,menubar=no,location=no,resizable=no,scrollbars=0,titlebar=no');
};
var series = [];
var mapSelected = 'china';
var showMapText = false;
var count = 0;
var seriesIndex;
var dataLength;
var dataIndex;
var timeTicket;
var geoData = {};
var mapJsonData;
var color = ['#ffa259', '#fe6845', '#fa4252', '#3fc5f0', '#c72c41', '#f4efd3', '#c72c41', '#e13a9d', '#e13a9d', '#ffd800', '#51eaea', '#a3f7bf', '#3ed4ff', '#ffa022', '#a6c84c'];
var chartOption = {
    title: {
        show: true,
        text: '实时货量流向图',
        target: null,
        subtext: '地图设置',
        //sublink: '../showdata/mapset.html',
        sublink: 'javascript:SetMap();',
        subtarget: 'self',
        x: 'center',
        y: 'top',
        textAlign: null,
        backgroundColor: 'rgba(0,0,0,0)',
        borderColor: '#ccc',
        borderWidth: 0,
        padding: 5,
        itemGap: 10,
        textStyle: {
            fontSize: 30,
            fontStyle: 'normal',
            fontWeight: 'normal',
            color: 'white'
        }
    },
    tooltip: {
        trigger: 'item',
    },
    legend: {
        orient: 'vertical',
        top: 'bottom',
        left: 'right',
        data: [],
        textStyle: {
            color: '#fff'
        },
        selectedMode: 'single'
    },
    geo: {
        label: {
            normal: {
                show: showMapText,
                color: 'white',
                fontSize: 13
            },
            emphasis: {
                show: false
            }
        },
        roam: false,
        layoutCenter: ['50%', '50%'],
        layoutSize: "110%",
        itemStyle: {
            normal: {
                areaColor: '#101f32',
                borderColor: '#43d0d6'
            },
            emphasis: {
                areaColor: '#617be3'
            }
        },
        regions: []
    },
    series: []
};

var isProvince = function (name) {
    return provincesText.some(function (province) {
        return province === name
    })
};
var isCity = function (name) {
    var cityvalue = cityMap[name];
    if (cityvalue != undefined) {
        return true;
    }
    return false;
};
var facheList = function () {
    series.push({
        type: 'lines',
        zlevel: 12,
        effect: {
            show: true,
            period: 3,
            trailLength: 0.7,
            color: '#fff',
            symbol: 'arrow',
            symbolSize: 8,
            xAxisIndex: 0,
            yAxisIndex: 0,
            polarIndex: 0,
            geoIndex: 0,
            calendarIndex: 0,
        },
        lineStyle: {
            normal: {
                color: 'white',
                width: 1,
                opacity: 0.8,
                curveness: 0.2
            }
        },
        data: convertData(geoData.facheList)
    }, {
        type: 'lines',
        zlevel: 12,
        effect: {
            show: true,
            period: 3,
            trailLength: 0,
            symbol: planePath,
            symbolSize: 8
        },
        lineStyle: {
            normal: {
                color: '#9b45e4',
                width: 1,
                opacity: 0.6,
                curveness: 0.2
            }
        },
        data: convertData(geoData.facheList)
    });

    playFaCheList(geoData.facheList);
};
var cityList = function () {
    for (let i = 0; i < geoData.cityList.length; i++) {
        var ci = geoData.cityList[i];
        series.push({
            name: ci.name,
            type: 'effectScatter',
            coordinateSystem: 'geo',
            zlevel: 2,
            rippleEffect: {
                period: 4,
                scale: 2.5,
                brushType: 'stroke'
            },
            label: {
                normal: {
                    //show: true,
                    position: 'right',
                    offset: [1, 0],
                    formatter: '{b}'
                }
            },
            symbolSize: 10,
            itemStyle: {
                normal: {
                    color: '#00ffff'
                },
                emphasis: {
                    color: 'green'
                }
            },
            tooltip: {
                trigger: 'item',
                padding: 0,
                enterable: true,
                transitionDuration: 1,
                textStyle: {
                    color: '#000',
                    decoration: 'none',
                },
                showDelay: 2,
                formatter: function (params) {
                    var tipHtml = '';
                    tipHtml = '<div style="width:200px;height:120px;background:rgba(22,80,158,0.8);border:1px solid rgba(7,166,255,0.7)">'
                        + '<div style="width:100%;height:40px;line-height:40px;border-bottom:2px solid rgba(7,166,255,0.7);padding:0 20px">' + '<i style="display:inline-block;width:8px;height:8px;background:#16d6ff;border-radius:40px;">' + '</i>'
                        + '<span style="margin-left:10px;color:#fff;font-size:16px;">' + params.name + '</span>' + '</div>'
                        + '<div style="padding:10px">'
                        + '<p style="color:#fff;font-size:15px;">发货库存:' + params.data.fhkc + '</p>'
                        + '<p style="color:#fff;font-size:15px;">在途库存:' + params.data.ztkc + '</p>'
                        + '<p style="color:#fff;font-size:15px;">到货库存:' + params.data.dhkc + '</p>'
                        + '</div>' + '</div>';
                    return tipHtml;
                },
                axisPointer: {
                    show: true,
                    type: 'cross',
                    lineStyle: {
                        type: 'dashed',
                        width: 1
                    }
                }
            },
            data: [{
                name: ci.name,
                value: geoCoordMap[ci.name],
                fhkc: ci.fhkc,
                ztkc: ci.ztkc,
                dhkc: ci.dhkc
            }]
        });
    };
};
var playList = function () {
    series.push({
        name: '',
        type: 'effectScatter',
        coordinateSystem: 'geo',
        zlevel: -2,
        rippleEffect: {
            period: 0,
            scale: 0,
            brushType: 'stroke'
        },
        label: {
            normal: {
                show: false,
                position: 'right',
                offset: [5, 0],
                formatter: '{b}'
            }
        },
        symbolSize: 0,
        itemStyle: {
            normal: {
                color: '#ffa259'
            },
            emphasis: {
                color: 'green'
            }
        },
        tooltip: {
            trigger: 'item',
            padding: 0,
            enterable: true,
            transitionDuration: 1,
            textStyle: {
                color: '#000',
                decoration: 'none',
            },
            showDelay: 2,
            formatter: function (params) {
                var tipHtml = '';
                tipHtml = '<div style="width:200px;height:120px;background:rgba(22,80,158,0.8);border:1px solid rgba(7,166,255,0.7)">'
                    + '<div style="width:100%;height:40px;line-height:40px;border-bottom:2px solid rgba(7,166,255,0.7);padding:0 20px">' + '<i style="display:inline-block;width:8px;height:8px;background:#16d6ff;border-radius:40px;">' + '</i>'
                    + '<span style="margin-left:10px;color:#fff;font-size:16px;">' + params.name + '</span>' + '</div>'
                    + '<div style="padding:10px">'
                    + '<p style="color:#fff;font-size:15px;">发货库存:' + params.data.fhkc + '</p>'
                    + '<p style="color:#fff;font-size:15px;">在途库存:' + params.data.ztkc + '</p>'
                    + '<p style="color:#fff;font-size:15px;">到货库存:' + params.data.dhkc + '</p>'
                    + '</div>' + '</div>';
                return tipHtml;
            },
            axisPointer: {
                show: true,
                type: 'cross',
                lineStyle: {
                    type: 'dashed',
                    width: 1
                }
            }
        },
        data: geoData.cityList.map(function (ci) {
            return {
                name: ci.name,
                value: geoCoordMap[ci.name],
                fhkc: ci.fhkc,
                ztkc: ci.ztkc,
                dhkc: ci.dhkc
            };
        })
    });
};

var seriesData = function () {

    series = [];

    facheList();

    cityList();

    //playList();

    count = 0;
    timeTicket = null;
    seriesIndex = series.length - 1;
    dataLength = series[seriesIndex].data.length;
    dataIndex = 0;

    chartOption.series = series;
};

var loadMap = function (param) {
    var url = "../showdata/js/map/" + param + ".js";
    $.ajax({
        url: url,
        dataType: "json"
    }).done(function (data) {
        mapJsonData = data;
        echarts.registerMap(param, mapJsonData);

        if (param != 'china' && param != '全国') {
            showMapText = true;
        }
        else {
            showMapText = false;
        }

        chartOption.geo.map = param;
        chartOption.geo.label.normal.show = showMapText;

        for (let i = 0; i < lightProvince.length; i++) {
            let city = lightProvince[i];
            chartOption.geo.regions.push({
                name: city,
                itemStyle: {
                    normal: {
                        areaColor: lightColor[city]
                    }
                },
                label: {
                    normal: {
                        show: true
                    },
                    emphasis: {
                        show: true
                    },
                }
            });
        }
        myMapChart.hideLoading();
        myMapChart.setOption(chartOption);
    });
};

var playFaCheList = function (data) {
    //var html = '<!DOCTYPE html><html><head> <meta charset="utf-8"> <meta name="author" content="" /> <style type="text/css">  *{margin:10px;padding:10px;border:0px; }body{font-size:20px;color:"white";}  #demo{   overflow:hidden;   height:100px;   width:280px;   margin:90px auto;   position:relative;  }  #demo1{   height:auto;   text-align:left;  }  #demo1 li{   list-style-type:none;   height:22px;   text-align:left;   text-indent:15px;  } </style></head><body><div id="demo"> <ul id="demo1">  '
    //for (let i = 0 ; i < data.length; i++) {
    //    var item = data[i];
    //    html += '<li>' + item.fromName + '=>' + item.toName + '</li>'
    //}
    //html += '</li> </ul> <div id="demo2"></div></div><script type="text/javascript"> var speed=80 ;  var demo=document.getElementById("demo");    var demo1=document.getElementById("demo1");    function Marquee(){   if(demo.scrollTop>=demo1.offsetHeight){ demo.scrollTop=0;   }   else{    demo.scrollTop=demo.scrollTop+1;   } };var MyMar=setInterval(Marquee,speed);  demo.onmouseover=function(){clearInterval(MyMar)};  demo.onmouseout=function(){MyMar=setInterval(Marquee,speed)};</script></body></html>'
    //var x = document.getElementById("iframe_play_fc");
    //x.srcdoc = html;
    var ul = document.getElementById("fachelist_ul");
    for (let i = 0 ; i < data.length; i++) {
        let item = data[i];
        let li = document.createElement("li");
        li.innerHTML = '<li><a href="#">'
            + (i + 1) + ' . '
            + item.billdate + ' '
            //+ item.inonevehicleflag
            + ' 车牌:' + item.vehicleno + ' '
            + '<span style="color:#ff8ba7">' + item.fromName + '=》'
            + item.full_toName + '</span> '
            + '</a></li>';
        
        ul.appendChild(li);
    }
}
function map() {

    myMapChart = echarts.getInstanceByDom(document.getElementById('map_1'));
    if (myMapChart == undefined) {
        myMapChart = echarts.init(document.getElementById('map_1'));
    }

    myMapChart.showLoading({
        text: '正在加载数据.....',
        color: '#fff',
        textColor: '#fff',
        maskColor: '#46b3e6',
        zlevel: 0
    });

    $.ajax({
        url: "/BI/GetgeoCoordData",
        type: "GET",
        data: { cache: false },
        dataType: 'json',
        cache: false,
        success: function (result) {
            if (result.status) {
                if (result.data.length > 0) {
                    var data = JSON.parse(result.data);
                    geoCoordMap = $.extend(geoCoordMap, data);
                    lightProvince = data.provinceList;
                    
                    $.ajax({
                        url: "/BI/GetgeoData",
                        type: "GET",
                        data: { cache: false },
                        dataType: 'json',
                        cache: false,
                        success: function (result) {
                            if (result.status) {
                                if (result.data.length > 0) {
                                    var data = JSON.parse(result.data);
                                    geoData = data;


                                    seriesData();

                                    $.ajax({
                                        url: "/BI/GetProvinceCode",
                                        type: "GET",
                                        dataType: 'json',
                                        success: function (result) {
                                            if (result.status) {
                                                if (result.data.length > 0) {
                                                    if (result.data == 'china') {
                                                        mapSelected = 'china';
                                                    }
                                                    else {
                                                        mapSelected = py_provinceMap[result.data];
                                                    }
                                                    loadMap(result.data);
                                                }
                                            }
                                        },
                                        error: function (XMLHttpRequest, textStatus, errorThrown) {
                                            return;
                                        },
                                        dataType: "json"
                                    }).fail(function (jqXHR, textStatus) {
                                        console.log("Ajax Error: ", textStatus);
                                    });

                                    window.addEventListener("resize", function () {
                                        myMapChart.resize();
                                    });

                                    var setProvinceCode = function (provinceCode) {
                                        $.ajax({
                                            url: "/BI/SetProvinceCode",
                                            type: "GET",
                                            data: { provinceCode: provinceCode },
                                            dataType: 'json',
                                            cache: false,
                                            success: function (result) {
                                                return;
                                            },
                                            error: function (XMLHttpRequest, textStatus, errorThrown) {
                                                return;
                                            },
                                            dataType: "json"
                                        }).fail(function (jqXHR, textStatus) {
                                            console.log("Ajax Error: ", textStatus);
                                        });
                                    };

                                    myMapChart.on('click', function (ev) {
                                        if (isProvince(ev.name)) {
                                            mapSelected = ev.name
                                            console.log(mapSelected)
                                            loadMap(provinceMap[ev.name]);
                                        }
                                        else if (isCity(ev.name)) {
                                            mapSelected = ev.name;
                                            loadMap(cityMap[ev.name]);
                                        }
                                        else {
                                            mapSelected = 'china'
                                            loadMap(mapSelected)
                                        }
                                    });

                                    //timeTicket && clearInterval(timeTicket);
                                    //timeTicket = setInterval(function () {
                                    //    myMapChart.dispatchAction({
                                    //        type: 'showTip',
                                    //        seriesIndex: seriesIndex,
                                    //        dataIndex: dataIndex
                                    //    });
                                    //    count++;
                                    //    dataIndex++;
                                    //    if (dataIndex >= dataLength) {
                                    //        dataIndex = 0;
                                    //    }
                                    //}, 5000);

                                    //myMapChart.on('mouseover', function (params) {
                                    //    console.log(params)
                                    //    clearInterval(timeTicket);
                                    //    myMapChart.dispatchAction({
                                    //        type: 'showTip',
                                    //        seriesIndex: seriesIndex,
                                    //        dataIndex: dataIndex
                                    //    });
                                    //    count++;
                                    //    dataIndex++;
                                    //    if (dataIndex >= dataLength) {
                                    //        dataIndex = 0;
                                    //    }
                                    //}, 5000);

                                    //myMapChart.on('mouseout', function (params) {
                                    //    timeTicket && clearInterval(timeTicket);
                                    //    timeTicket = setInterval(function () {
                                    //        myMapChart.dispatchAction({
                                    //            type: 'showTip',
                                    //            seriesIndex: seriesIndex,
                                    //            dataIndex: dataIndex
                                    //        });
                                    //        count++;
                                    //        dataIndex++;
                                    //        if (dataIndex >= dataLength) {
                                    //            dataIndex = 0;
                                    //        }
                                    //    }, 5000)
                                    //});
                                }
                            }
                        },
                        error: function (XMLHttpRequest, textStatus, errorThrown) {
                            return;
                        },
                        dataType: "json"
                    }).fail(function (jqXHR, textStatus) {
                        console.log("Ajax Error: ", textStatus);
                    });
                }
            }
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            return;
        },
        dataType: "json"
    }).fail(function (jqXHR, status) {
        console.log("Ajax Error: ", status);
    });
}
View Code

 

 

 最后既可实现如上效果,点中相应的图例还进行预览。

图表

 

 

 以这个图表为例,这个是柱状图。

同样先引入div图层

<div class="allnav" id="echart5_1"></div>

js调用实现

  //员工学历分布
    function echarts_GetXLData() {
        var myChart = echarts.init(document.getElementById('echart5_1'));

        var itemStyle = {
            normal: {
                color: new echarts.graphic.LinearGradient(
                    0, 1, 0, 0, [{
                        offset: 0,
                        color: '#2af598'
                    }, {
                        offset: 1,
                        color: '#009efd'
                    }]
                ),
                barBorderRadius: 4
            },
            emphasis: {
                color: new echarts.graphic.LinearGradient(
                    0, 1, 0, 0, [{
                        offset: 0,
                        color: '#2af598'
                    }, {
                        offset: 1,
                        color: '#009efd'
                    }]
                ),
                barBorderRadius: 4
            }
        };

        // 指定图表的配置项和数据
        var option = {
            options: []
        };
        myChart.setOption(option);

        $.ajax({
            url: "/paymentWelfare/GetSalaryBigDataBYXL",
            type: "GET",
            data: { cache: false },
            dataType: 'json',
            cache: false,
            success: function (result) {
                if (result.status) {
                    if (result.data.length > 0) {
                        var data = JSON.parse(result.data);
                        var namearr = [];
                        var valuearr = [];
                        for (let i in data) {
                            namearr.push(data[i].name);
                            valuearr.push(data[i].value);
                        }
                        myChart.setOption({
                            tooltip: {
                                trigger: 'axis',
                                textStyle: {
                                    color: "#ffffff"
                                },
                                formatter: function (data) {
                                    var x = data[0];
                                    if (x == undefined) {
                                        return "";
                                    }
                                    return x.name + "<br/>" + x.seriesName + ":" + x.data;
                                }
                            },
                            legend: {
                                show: true,
                                x: 'right',
                                top: 15,
                                data: ['学历'],
                                textStyle: {
                                    color: 'white',
                                    fontSize: 15
                                }
                            },
                            //calculable: true,
                            grid: {
                                y: 40,
                                y2: 80,
                                left: '12%',
                                right: '4%',
                                bottom: '10%'
                            },
                            xAxis: [{
                                type: 'category',
                                axisLabel: {
                                    interval: 0,
                                    rotate: 0,
                                    textStyle: { fontSize: 12, color: '#ffffff' }
                                },
                                axisLine: {
                                    lineStyle: {
                                        color: 'white',
                                        width: 1
                                    }
                                },
                                data: namearr
                            }],
                            yAxis: [{
                                "axisTick": {
                                    "show": false
                                },
                                //"splitLine": {
                                //    "show": false
                                //},
                                type: 'value',
                                nameTextStyle: {
                                    color: "white",
                                    fontSize: 15,
                                    padding: 10
                                },
                                axisLabel: {
                                    textStyle: { color: 'white', fontSize: 12 },
                                    title: { textStyle: { color: 'white' } }
                                },
                                axisLine: {
                                    lineStyle: {
                                        color: 'white',
                                        width: 1
                                    }
                                },
                                splitLine: {
                                    lineStyle: {
                                        type: 'dashed',
                                        color: '#0d48e0'
                                    }
                                },
                            }],
                            series: [{
                                name: '学历',
                                yAxisIndex: 0,
                                type: 'bar',
                                itemStyle: itemStyle,
                                barWidth: 25,
                                label: {
                                    normal: {
                                        show: true,
                                        position: 'top',
                                        //formatter: '{c}' + '万元',
                                        color: 'white'
                                    }
                                },
                                data: valuearr
                            }]
                        });
                    }
                }
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                return;
            },
            dataType: "json"
        }).fail(function (jqXHR, textStatus) {
            console.log("Ajax Error: ", textStatus);
        });

        window.addEventListener("resize", function () {
            myChart.resize();
        });
    }
View Code

后端代码调用,获取数据

        /// <summary>
        /// 学历
        /// </summary>
        /// <param name="cache"></param>
        /// <returns></returns>
        public ActionResult GetSalaryBigDataBYXL(bool cache = false)
        {
            string fileName = "xl.json";

            if (cache == true)
            {
                string jsonData = GetData(fileName);
                if (string.IsNullOrEmpty(jsonData) == false)
                {
                    return Json(new { status = true, data = jsonData }, JsonRequestBehavior.AllowGet);
                }
            }

            DataTable dt = GetHrBigData().Tables[3];
            List<nameValue> data = new List<nameValue> { };

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                data.Add(new nameValue(dt.GetFieldValue<string>("name", i).ToStr(),
                    decimal.Round(dt.GetFieldValue<decimal>("count", i).ToDecimal(), 1)));
            }

            string json = data.ToJson();
            SaveData(fileName, json);

            return Json(new { status = true, data = json }, JsonRequestBehavior.AllowGet);
        }

以上完成既可实现漂亮的图表了,其他饼图,折线图等等即同理实现,更新的实现效果多看看官网的帮助文档,你也可以实现漂亮的图表了,一起来交流学习吧!

消息滚动

 <div class="xpanel xpanel-r-t">
                        <div class="title"><span>员工提醒信息播报</span></div>
                        <div class="scrollDiv" id="fachelist_div" style="height:70%;">
                            <ul id="fachelist_ul"></ul>
                        </div>
                    </div>
 (function ($) {
            $.fn.extend({
                Scroll: function (opt, callback) {
                    //参数初始化
                    if (!opt) var opt = {};
                    var _this = this.eq(0).find("ul:first");
                    var lineH = _this.find("li:first").height(),
                        //line = opt.line ? parseInt(opt.line, 10) : parseInt(this.height() / lineH, 10),
                        line = 1,
                        speed = opt.speed ? parseInt(opt.speed, 10) : 2000,
                        timer = opt.timer ? parseInt(opt.timer, 10) : 3000;
                    if (line == 0) line = 1;
                    var upHeight = 0 - line * lineH;
                    scrollUp = function () {
                        _this.animate({
                            marginTop: upHeight
                        }, speed, function () {
                            for (i = 1; i <= line; i++) {
                                _this.find("li:first").appendTo(_this);
                            }
                            _this.css({
                                marginTop: 0
                            });
                        });
                    }
                    _this.hover(function () {
                        clearInterval(timerID);
                    }, function () {
                        timerID = setInterval("scrollUp()", timer);
                    }).mouseout();
                }
            });
        })(jQuery);

        $(document).ready(function () {
            $("#fachelist_div").Scroll({
                line: 4,
                speed: 500,
                timer: 4000
            });
        });

js文件获取数据代码

    //消息提醒数据
    function echarts_GetMsgData() {
        var ul = document.getElementById("fachelist_ul");
        $.ajax({
            url: "/paymentWelfare/GetSalaryBigDataBYMsg",
            type: "GET",
            data: { cache: false },
            dataType: 'json',
            cache: false,
            success: function (result) {
                if (result.status) {
                    if (result.data.length > 0) {
                        var data = JSON.parse(result.data);
                        for (let i = 0 ; i < data.length; i++) {
                            let item = data[i];
                            let li = document.createElement("li");
                            li.innerHTML = '<li>' + '<span style="color:#FFFFFF">'
                                + (i + 1) + ' . '
                               + item.name + ' ' + '</span> '
                                + '</li>';
                            ul.appendChild(li);
                        }
                    }
                }
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                return;
            },
            dataType: "json"
        }).fail(function (jqXHR, textStatus) {
            console.log("Ajax Error: ", textStatus);
        });
    }

后台获取数据

        /// <summary>
        /// 获取消息
        /// </summary>
        /// <param name="cache"></param>
        /// <returns></returns>
        public ActionResult GetSalaryBigDataBYMsg(bool cache = false)
        {
            string fileName = "msg.json";

            if (cache == true)
            {
                string jsonData = GetData(fileName);
                if (string.IsNullOrEmpty(jsonData) == false)
                {
                    return Json(new { status = true, data = jsonData }, JsonRequestBehavior.AllowGet);
                }
            }

            DataTable dt = GetHrBigData().Tables[5];
            List<nameValue> data = new List<nameValue> { };

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                data.Add(new nameValue(dt.GetFieldValue<string>("name", i).ToStr(),
                    decimal.Round(dt.GetFieldValue<decimal>("count", i).ToDecimal(), 1)));
            }

            string json = data.ToJson();

            SaveData(fileName, json);

            return Json(new { status = true, data = json }, JsonRequestBehavior.AllowGet);
        }

以上完成既可以实现消息的滚屏显示

 

 

 以上从代码实现的角度介绍了我是怎么实现的这样一个效果的过程,工资大数据实现同人事一样,都是相同的控件去实现。

结束语

做好大数据分析任重道远,本人也是今年在这方面投入了大力气去学习,之前用WPF实现了一个,可以看我上一篇写的博文,就有介绍过,实现以上两个界面的大数据是用BS来实现的,图表全部用的是echarts,实现出来的图表费用漂亮,其实在做好这样的一个效果出来首先还得去网上找一个好的模板,再去做调整,完成从一个全新开发可能难度较大,样式布局啥的都不会这么专业,我其实是省去了前面部分的工作了,只花了三四天时间既完成了以上效果,速度还是挺快的,公司领导层对这效果也是非常满意的,以后会加强在这方面的研发,让公司的业务,财务数据都能很好在图表方面进行呈现出来,这样客户也会非常喜欢的。

 

以上个人愚见,一起加强学习进步!

附件:工资模块实现的最初模板。

https://files.cnblogs.com/files/luoyuhao/echartssjmoban8947202005210009.zip

 

可加QQ群:186841119

 

posted @ 2020-08-21 16:03  气宇轩昂_2017  阅读(3272)  评论(11编辑  收藏  举报