1. 程式人生 > >怎麼實現員工和工資大資料分析

怎麼實現員工和工資大資料分析

前言

 現如今市場上的人事系統五花八門,可做了大資料分析的人事系統少之又少,最近本人花了一個星期好好研究了大資料展示方面的內容,圖表主要用的是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