Семейная корзина Vue + Echarts + карта Baidu, создание системы визуализации данных

ECharts
Эта статья немного длинная и содержит много контента Большой парень может выборочно проверить в соответствии с каталогом Новички могут читать шаг за шагом

Добавить статью:Семейная корзина Vue + Echarts + карта Baidu, создание системы визуализации данных ([продолжение] интерфейс)

1. Введение

1.1 Бизнес-сценарий

Внезапно я получил продукт, который называется системой мониторинга данных. Линейные графики, гистограммы, карты, похожие на способ визуализации данных.

Я никогда не был в контакте сEcharts, а потом 2 недели ждать результата, немного паники 😂😂

1.2 Бизнес-анализ

Взгляните на требования

Поддержка имени пользователя и пароля для входа в систему, данные одного измерения отображаются по умолчанию, а затем щелкните, чтобы перейти к данным второго измерения, а затем щелкните, чтобы войти в отображение данных третьего измерения.

примерно прикинул. . .

  1. Строительство системыvue-cli
  2. vuexзаписать данные для входа
  3. vue-routerМаршрут прыжок
  4. Трехмерные страницы, извлечение общих компонентов
  5. Разработка отдельных компонентов
  6. Настройте стиль, увеличьте пользовательский интерфейс
  7. Добавить данные фонового интерфейса
  8. оптимизировать отображение
  9. тестовое задание
  10. онлайн

Конечно, это не должно быть сделано в течение 2 недель. Шаг 6 должен быть завершен.

По сравнению с компанией я фронтенд, и никогда к ней не прикасался.Echarts, без обсуждения вопроса. . .

Я до сих пор не могу не пожаловаться 😒😒😒

1.3 Отображение эффектов

Здесь перечислены стили для первой страницы измерения. Пожалуйста, не обращайте внимания на текст, ха-ха.

2 Установка системы

Тукао возвращается в Тукао, работа еще предстоит. 😎

Поскольку я хорошо знаком с vue, я по-прежнему предпочитаю использовать для этого ведро семейства vue. Эта часть может относиться кvue build

2.1 Установка среды узла

  • Загрузить и установитьnodeсреды, перейдите непосредственно на официальный сайт для загрузкиnode.js

После установки его можно запустить из командной строкиnode -v npm -vПроверьте успешность установки и версию

2.2 Установите проект Vue

2.2.1 Установка vue

Официальная документация:vuejs

Здесь мы используемnpmПуть

  • npm i vue

2.2.2 Установка Vue CLI

Официальная документация:vue CLI

  • npm i -g @vue/cli

После установки вы можете получить доступ к командам vue из командной строки. Вы можете проверить его версию с помощью этой команды.vue -V

2.2.3 Создать проект

При установке здесь обратите внимание на установку, которую мы хотим использовать.vuex,vue-router, другие могут быть добавлены по мере необходимости.

  1. метод первый
  • vue create hello-world

Обратитесь к официальному сайту здесь для подробного ознакомления. Ссылаться на:vue create

  1. Способ второй

Используйте графический интерфейс

  • vue ui

Интерфейс содержит китайский язык, которым легко управлять. Ссылаться на:vue ui

2.2.4 Установите плагин

  1. метод первый

Самый прямой и рекомендуемыйnpm i xxx

Вот введение-S -D -gразница

  • Файл npm i -S xxx записывается в зависимостях, используется для подключаемых модулей, используемых при разработке проекта, и будет выпущен в производственную среду, такую ​​как пользовательский интерфейс, JS и т. д.
  • Файл npm i -D xxx записывается в devDependencies, который используется для подключаемых модулей инженерной поддержки, и не будет выпущен в производственную среду, например gulp и другие инструменты сжатия и упаковки.
  • npm i -g xxx Установить глобально, например vue, ncu и т. д. Каталог установки: C:\Users\Users\AppData\Roaming\npm.
  1. Способ второй

vue uiГрафический интерфейс содержит несколько плагинов, которые можно установить по клику, но не обязательно последней версии.

В то же время он будет представлен в приветствии. Другие методы ничем не отличаются.

2.3 Установите Echarts

Здесь для удобства используемnpmПолные цитаты и отдельные цитаты можно сделать позже, чтобы упростить проект.

  • npm i echarts -S

затем вmain.jsдобавлено в

Здесь рекомендуется настроить заранееechartsстиля и внедрены в проект. Официальный пользовательский адрес:theme-builder

На странице мы можем процитировать следующее:var myChart = this.$echarts.init(document.getElementById("myid"),'temp')

myidэто то, что мы показываемechartsизid.

tempэто наш индивидуальный стиль, и официальный предоставляет несколько примеров стиля, вы можетеnode_modules\echarts\themeнайти в.

2.4 Установите element-ui

Здесь для удобства используемnpmПолные цитаты и отдельные цитаты можно сделать позже, чтобы упростить проект.

  • npm i element-ui -S

затем вmain.jsдобавлено в

2.5 Установите карты Baidu

Как правило, Vue может использовать карты Baidu двумя способами.

  • Один из них - применить его, как официальный сайт. Такие как:BMap

  • Второй заключается в использованииvue-baidu-map

В любом случае вам необходимо подать заявку на получение учетной записи и ключа. Адрес приложения:Ключ карты Baidu (ak)

Здесь я использую второй.документация vue-baidu-map

  • npm i vue-baidu-map -S

затем вmain.jsдобавлено в

xxxxxxxxВведите здесь ключ, на который вы подали заявку.

На странице обратитесь к документации, вы можете использовать теги<baidu-map/>звонить.

2.6 Стиль инициализации

cssПроще говоря, инициализация стилей предназначена для унификации различных браузеров.

Здесь я используюnormalize.css

После загрузки вmain.jsдобавлено в

Основные приготовления сделаны, и следующим шагом является конкретный код.

3 Строительство проекта

3.1 роутер, vuex

Я создал новый здесьrouter.js,store.js, примерно так:

Ах да, определение маршрутизации здесь для удобства просмотра, но оно все же определяется в соответствии с бизнесом.

здесьrouter.beforeEachЗащита маршрутизации используется для проверки входа в систему.

Тогда мыmain.jsпроцитировано в.

Для получения дополнительной информации, пожалуйста, обратитесь к официальной документации:Vue Router Vuex

3.2 Страница входа

Страница входа — это не что иное, как отправка формы из-за суждения в маршрутизации.user.id. Итак, давайте сохраним его, а затем перейдем на страницу индекса.

Вот только один способ, вы также можете использоватьCookieа такжеSession

3.3 Индексная страница

Страница анализа разделена на 2 части

  • Первая частьголова
  • Второй секторосновной корпус

Мы повторно используем заголовок как компонент.

Для повторного использования компонентов обратитесь к официальной документации:Talent.v UE JS.org/V2/expensive/co…

3.4 титульная страница

Голова относительно простая, помимо некоторых дисплеев есть еще и отображение текущего времени.

Здесь мы используемsetInterval, каждую 1 секунду, чтобы получить текущее время, назначенное вамv-modelПросто сделай это.

Так же при выходе со страницы сбрасываем таймер.

Здесь нам нужноVueизЖизненный циклИметь некоторые знания.

Метод может получить текущую привязку ко времени:data-module.js

3.5 Главная страница

Вот анализ страницы, которая в основном разделена на 3 части.

  1. осталось, который содержит 2 линейных графика.
  2. середина, который содержит рисунки и карты.
  3. правильно, который содержит гистограммы и таблицы.

Далее я в основном представлю некоторые из вещей, которые я исследовал за последние две недели.EchartsКонфигурация, подходящая для новичков, большие парни, легкий спрей.

Ее нужно часто читатьЭлемент конфигурации Echartsа такжеAPIохватывать

3.5.1 Основные электронные диаграммы

Здесь указан основной метод написания рендеринга, а конкретную графику и данные нужно только изменить.optionВот и все.

<template>
    <div id="myecharts" class="myecharts">
</template>

<script>
    export default {
        mounted(){
            this.drawECharts()
        },
        
        methods:{
            drawECharts(){
                // temp 是我们的自定义样式,上面安装Echarts时有介绍
                var myChart = this.$echarts.init(document.getElementById("myecharts"),'temp')
                var option = {}
                option = {
                    // 吧啦吧啦 一堆配置
                }
                // 执行渲染图形和数据的操作
                if (option && typeof option === "object") {
                    myChart.setOption(option, true)
                }
            }
        }
    }
</script>

<style>
    //  一定要设置大小,不然不出来,这玩意和canvas一样
    .myecharts{
        width : 500px;
        height : 300px;
    }
</style>

3.5.2 Линейный график

После большой практики вы найдете роль каждой конфигурации и ее параметров.

option = {
    // 提示框(就是鼠标放上去后出现的框)
    tooltip : {
        trigger: 'axis',
        axisPointer: {
            type: 'cross',
            label: {
                backgroundColor: '#6a7985'
            }
        }
    },
    
    //  右上角的组件,用于说明,也可进行点击筛选
    legend: {
        align : 'right',
        x : 'right',
        top : 25,
        selectedMode : 'single',    //  我这里设置的单选模式
        data:['好','坏']            //  显示的第一项和第二项,这里的颜色是根据自定义主题的颜色顺序来定的
    },
    
    //  x、y轴显示一些设置,比如刻度颜色显示什么的,可在自定义主题设置一部分
    xAxis: {
        type: 'category',
        boundaryGap: false,
        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
    },
    yAxis: {
        type: 'value'
    },
    // 具体配置项,根据具体项目查看官网配置项说明
    series: [
        {
            name : '好',
            data: [150, 132, 201, 534, 290, 530, 820],
            type: 'line',
            smooth: true,   //  是否平滑曲线
            areaStyle: {},
        },
        { 
            name : '坏',
            data: [82, 93, 90, 93, 129, 333, 432],
            type: 'line',
            smooth: true,
            areaStyle: {},
        }
    ]
}

// 查看Echarts的API,我们需要显示默认的一些数据,配置如下
// 默认显示坏的数据
myChart.dispatchAction({
    type: 'legendSelect',
    name: '坏',
})
//  默认显示第7个数据
myChart.dispatchAction({
    type: 'showTip',
    seriesIndex: 1,
    dataIndex: 6,
})

Предварительный просмотр:

3.5.3 Гистограмма

Здесь мы используем бипилос непосредственно для демонстрации.

Поскольку для имен и номеров требуются функции подсказки и щелчка, они не используются.echartsизyось.

иначеformatterПриходится их кучу писать.Хоть я и пользовался кастомным,но сначала пользовался им.formatter.

Один и тот же дисплей может быть достигнут, но не может быть манипулирован таким, как намеки на мыши и щелчки мыши.

<div class="left">
    <div v-for="it in its1" :key="it.id">
        <el-tooltip class="item"  effect="light" placement="bottom-start">
            <div slot="content">名称:{{it.name}}<br/>个数:{{it.num}}</div>
            <div class="name" @click="go"> {{ it.name.substring(0,4)+'...' }}</div>
        </el-tooltip>
        <div class="num">{{ it.num }}</div>
    </div>
</div>

<div class="right">
    <div v-for="it in its2" :key="it.id">
        <el-tooltip class="item"  effect="light" placement="bottom-start">
            <div slot="content">名称:{{it.name}}<br/>个数:{{it.num}}</div>
            <div class="name" @click="go"> {{ it.name.substring(0,4)+'...' }}</div>
        </el-tooltip>
        <div class="num">{{ it.num }}</div>
    </div>
</div>

<div id="myecharts" class="myecharts">

cssЭто не размещено здесь, эффект состоит в том, что эти 2 строки просто размещены перед 2-й строкой столбца.

Далееechartsконфигурация.

option = {
    // 鼠标提示框
    tooltip: {
        trigger: 'axis',
        axisPointer: {
            type: 'shadow'
        }
    },
    
    // 右边显示
    legend: {
        selectedMode:false,
        data: ['好', '坏'],
        top:5,
        right:8,
    },
    
    // 两个图坐标的位置
    grid: [
        {left: '16%', top:'10%', width: '22%', height: '86%'},
        {left: '65%', top:'10%', width: '22%', height: '86%'}
    ],
    
    // 两个图x轴的设置,这里的gridIndex就是个序号,用于区分
    xAxis: [
        {gridIndex : 0, show : false},
        {gridIndex : 1, show : false},
    ],
    
    // 两个图y轴的设置,注释的部分是用echarts本身的y轴来显示名称和数量的
    yAxis: [
        {
            gridIndex: 0,
            type: 'category',
            show : false,
            data : ['广东/12','杭州/13','北京北京/14','天津/16'],
            // axisLabel: {
            //   formatter : function(value){
            //     let arr = value.split('/')
            //     return '{a|'+arr[0]+'}\n{b|'+ arr[1]+'}';
            //   },
            //   rich: {
            //     a: {
            //       color : '#ffffff',
            //       lineHeight : 19,
            //       fontSize : 14,
            //       align: 'right',
            //     },
            //     b:{
            //       fontSize : 18,
            //       lineHeight : 19,
            //       fontWeight : 'bold',
            //       align: 'right',
            //       fontFamily : 'Digital',
            //     }
            //   }
            // }
        },
        {
            gridIndex: 1,
            show : false,
            type: 'category',
            data : ['海南/12','三亚/13','哈尔滨/14','西双版纳/16'],
            // axisLabel: {
            //   formatter : function(value){
            //     let arr = value.split('/')
            //     return '{a|'+arr[0]+'}\n{b|'+ arr[1]+'}';
            //   },
            //   rich: {
            //     a: {
            //       color : '#ffffff',
            //       lineHeight : 19,
            //       fontSize : 14,
            //       align: 'right',
            //     },
            //     b:{
            //       fontSize : 18,
            //       lineHeight : 19,
            //       fontWeight : 'bold',
            //       align: 'right',
            //       fontFamily : 'Digital',
            //     }
            //   }
            // }
        },
    ],
    
    //  渲染图形和数据,bar是柱状图
    //  barWidth 柱状的宽度
    //  两类两套,所以有4组数据,使用xAxisIndex、yAxisIndex来区分。
    series: [
        {
            name: '好',
            type: 'bar',
            barWidth  : 5,
            barMinHeight : 5,
            barGap : '100%',
            xAxisIndex: 0,
            yAxisIndex: 0,
            data: [0, 3489, 9022234, 922228],
            label: {
                normal: {
                    position: 'right',
                    show: true
                }
            },
        },
        
        {
            name: '坏',
            type: 'bar',
            barWidth  : 5,
            barMinHeight : 5,
            xAxisIndex: 0,
            yAxisIndex: 0,
            data: [0, 2438, 3300, 1594],
            label: {
                normal: {
                    position: 'right',
                    show: true
                }
             },
        },
        {
            name: '好',
            type: 'bar',
            barWidth  : 5,
            barMinHeight : 10,
            barGap : '100%',
            xAxisIndex: 1,
            yAxisIndex: 1,
            data: [8203, 3489, 9034, 222],
            label: {
                normal: {
                    position: 'right',
                    show: true
                }
            },
        },
        {
            name: '坏',
            type: 'bar',
            barWidth  : 5,
            barMinHeight : 5,
            xAxisIndex: 1,
            yAxisIndex: 1,
            data: [445, 2438, 3300, 555],
            label: {
                normal: {
                    position: 'right',
                    show: true
                }
            },
        },
    ]
}

Предварительный просмотр:

3.5.4 Таблицы

tableя использовал здесьelement-uiПлюс изменить пользовательский интерфейс по умолчаниюcssи полосы прокруткиcss.

Один пункт указан здесь, другие пишутся аналогично.

<el-table
    :data="tableData"
    height="252"
    style="min-width: 100%;">
    <el-table-column
        prop="date"
        min-width="12"
        header-align="center"
        label="时间">
        <template slot-scope="scope">
            <template v-if="scope.row.if == '1'">
                <img src="../../assets/img/new.png"/>
                <div style="color:#E63136;margin-top:-27px;margin-left:35px;">
                    {{scope.row.date}}
                </div>
            </template>
            <template v-else>
                <div style="margin-left:35px;">
                    {{ scope.row.date }}
                </div>
            </template>
        </template>
    </el-table-column>
</el-table>
  • стиль пользовательского интерфейса

UI cssМодификация, здесь я использовал кастомный шрифт, полная копия не работает.

Остальные пункты настройки не поясняются, включается F12, можно играть невзначай.

.el-table thead {
    color: #FFFFFF;
}

.el-table {
    color: #00A5F6;
    font-family: 'Regular';
    background-color: rgba(0, 0, 0, 0.03);
    th {
        padding: 2px 0;
        background-color: #003260; 
    }
    th.is-leaf {
        border-bottom: 0px solid #EBEEF5;
    }
    tr {
        background-color: rgba(0, 0, 0, 0.03);
    }
    td {
        border-bottom: 1px solid #2c3547;
        padding: 2px 0;
    }
    
    .el-table::before {
        height: 0px;
        z-index: 0;
        background-color: #2c3547;
    }
}
  • стиль полосы прокрутки

Не стесняйтесь изменить его и увидеть эффект, Google Chrome 😅

/* scrollbar */

::-webkit-scrollbar {
  width: 8px;
  height: 1px;
  background-color:transparent;
}
::-webkit-scrollbar-thumb {
  border-radius: 10px;
  background: #adabab;
}
::-webkit-scrollbar-track {
  border-radius: 10px;
  background:#394d63;
}

Предварительный просмотр:

3.5.5 Карта Байду

vue-baidu-map Документация

<baidu-map 
    :center="map.center"        //  地图中心经纬 {lng: 114.023598, lat: 33.589299}
    :scroll-wheel-zoom="true"   //  地图是否滚轮缩放
    :zoom="map.zoom"            //  默认地图尺寸
    :mapStyle="mapStyle"        //  地图样式
    class="baidumap">           //  地图宽高
    <template v-for="(it,index) in ms">     //  标点
        <bm-marker 
            :key="it.id" 
            :position="it.position"         //  标点位置
            @click="markclick(it,index)"    //  标点点击事件
            @mouseover="markover(it,index)" //  鼠标移动到标点上的事件
            :icon="it.if? iocn:newincon"    //  标点的样式
            @mouseout="markout(it,index)">  //  鼠标从标点移走的事件
            <bm-info-window
                :show="it.show"             //  标点提示框的显示true/false
                :position="it.position">    //  提示框坐标
                <p v-text="it.mess"></p>    //  提示框内容
            </bm-info-window>
        </bm-marker>
    </template>
</baidu-map>

Предварительный просмотр:

3.5.6 Векторная карта

Типы векторных карт Echarts:

  • type:'scatter'Точечная пузырьковая диаграмма, которая отображает точки на карте с различной степенью цвета.
  • type:'effectScatter'Точечная диаграмма с анимацией эффекта пульсации
  • type:'map'Визуализация данных для географических областей
  • type:'lines'Визуализация карт маршрутов и маршрутов

импортировать карту

require('echarts/map/js/china.js')
require('echarts/map/js/province/beijing.js')

У меня тут проблема.Если я хочу представить провинции страны, то мне нужно написать еще более 30require, может кто подскажет лучше?

Найдите способ получить полную справку

const rjs = require.context('echarts/map/js/province')
rjs.keys().forEach(rjs)

можно заменить

require('echarts/map/js/province/beijing.js')
require('echarts/map/js/province/shanxi.js')
require('echarts/map/js/province/neimenggu.js')
等等等。。。

Конфигурация карты:

option = {
    //  鼠标提示
    tooltip : {
        trigger: 'item',
        formatter : function(params){
            var val = params.data
            return '名称:'+val.name+',个数:'+val.value[2]+'<br/>'+'总数:'+val.tol+',个数:'+val.un
        },
    },
    
    //  不同颜色的点
    visualMap: [
        {
            min: 0,
            max: 1,
            show : false,
            inRange: {
                color: ['#01cae2', '#e63136',]
            },
            dimension : 3,
        },
    ],

    // 地图样式
    geo: {
        map: 'china',   // 地图样式,当为‘北京’时,会显示北京地图   
        roam : true,    
        label: {
            emphasis: {
                show: true
            }
        },
        zoom : 1.2,     //  初始大小
        scaleLimit : {
            min : 1.2,  //  最小缩放
            max : 6     //  最大缩放
        },
        regions : regions(data)     // 省份样式方法
    },

    series : [
        {
            name: '分布',
            type: 'scatter',
            coordinateSystem: 'geo',    //  地图配置
            data: convertData(data.sort(function (a, b) {   //  数据方法
                return b.value - a.value;
            })),
            encode: {
                value : 2
            },
            hoverAnimation: true,
            itemStyle: {
                normal: {
                    // color: '#FF3030',
                    shadowBlur: 1,
                }
            },
        }
    ]
};

При нажатии на карту провинции мы можем войти в векторную карту карты провинции

myChart.on('click',function(params){
    option.geo.map =  '北京'
    myChart.setOption(option, true);
})

Предварительный просмотр:


4 Постскриптум

В настоящее время нет доступа к внутренним данным, которые представляют собой отображение всего внешнего интерфейса. Многие из них вводятся полностью, и их можно постепенно упрощать после их освоения.

В заключение:Начало работы с Vue + Начало работы с электронными диаграммами, я надеюсь, что это может быть полезно для вас! ! ! 😜😜😜

Спасибо за поддержку. Если есть какие-то недостатки, пожалуйста, указывайте на них и поощряйте друг друга.

Если вы думаете, что это хорошо, не забудьте поставить лайк, спасибо😂

Приветствую мое внимание: 【Гитхаб】【Наггетс】【Краткая книга】【CSDN】【ОЩИНА】【СФ】

知识共享许可协议
В этой статье используетсяCreative Commons Attribution-NonCommercial-ShareAlike 4.0 Международная лицензияЛицензия.

Источник:GitHub.com/подсолнух ветер пейзаж свет/тоже…