热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

vue摸板大数据_用Vue构建一个github“可视化大数据平台”GitDataV,设计开发分享...

写在前面GitDataV,是一个github“大数据可视化平台”,通过它你可以更直观的看到你在github里的一些数据,(之所以打双引号&

写在前面

GitDataV,是一个github“大数据可视化平台”,通过它你可以更直观的看到你在github里的一些数据,(之所以打双引号,是因为我觉得这个还没到大数据可视化的程度)。其实我在 上篇文章 分享的时候已经提到了这个想法,通过github提供的接口,做一个自己的“大数据分析页面”,所以我就花了几天晚上的时间,把这想法从设计到开发构建出来了,那么下面我就我个人的账号测试看看效果如下

如果您感兴趣可以点击这里访问简单的:GitDataV网站 (目前打包后有些小bug,但不影响正常使用) ,看看你的github“大数据分析”详情。

推荐把GitDataV(github源码)项目下载下来,在本机运行项目,在本机浏览器打开网页,生成自己的“大数据分析”详情。

通过它你将看到你在github里的这些数据:个人信息(✔),仓库stars情况(✔),仓库语言分类(✔)仓库公开数量(✔)、粉丝数量(✔)、跟随数量(✔)、仓库数据(✔)、最近你的操作(✔)、最近的粉丝(✔)、最近的跟随(✔)、最新信息(✔),左上角箭头小彩蛋: 全屏(✔)、 国际化语言切换(开发中...)、皮肤切换(开发中..)

看着还不错吧(没有设计师,自己作为前端设计,审美[chou]就这样),有点小感(la)觉(ji)。下面步入正题,我将从下面几点:需求分析、开发准备、功能设计和代码实现,对我独立从设计到开发构建这个“可视化大数据平台”小玩意做个分享:

需求分析

信息数据时代,每个人对数据都是敏感的,对于你在github的数据,你除了看到github官方网站给你的数据之外,其实你还可以看到更多的数据。我当时的初心就是通过用户输入自己的github账号,可以获取自己在github里有用的数据。在上次做门户网站在前端页面交互应用和小技巧的时候偶然发现原来github提供了开发者API,地址传送门:(https://developer.github.com/...

点进一看发现新大陆,欣喜若狂的我感觉有了一个心血来潮,自己的想法还是自己实现吧,开搞!

开发准备

一、了解GitHub开发者文档

v3版API的文档链接、v3版API的官方教程

先看看github接口都能获取什么数据吧,先做个简单的测试我通过我自己的账号(hongqingcao)去请求/users接口(https://api.github.com/users/...)得到下面的数据,哇哇。从上往下看,真全面,连我都忘记自己GitHub注册时间,这里都有

当然你如果懒得去学习官方文档,网上一搜还真有人总结了Github API调用,传送门《一篇文章搞定Github API 调用 (v3)》

二、了解可视化相关的设计

首先进入百度了解了一哈,乍一眼看,基本上都是偏深蓝色调,当然不仅仅如此《大数据数据可视化的设计原则》,我也是有看的,具体资料有兴趣的同学可以自行研究。

阿里的DataV数据可视化是比较6的,自信到百度查出来的都是“双十一大屏展示”卖点啊(多次提到百度,阿里,哈哈)

看完这些,说实话心里对数据可视化的设计就有个谱了,没有设计师,前端一样可以好好玩耍。在这里声明一哈:整个项目背景图来自17素材网等网上平台(不用于商业用途)。

三、技术选型、知识准备

既然上篇文章被各路“扛精”,那我就继续用Vue来搞事情,这里想了一哈整个项目(回忆了功能),梳理列了下面几项技术栈和知识点:

1、vue(vue项目构建、指令的灵活运用、组件封装、组件之间通信)

2、vue-router(路由预备知识:hash和history区别、动态路由、路由切换传参)

3、网络请求axios(自己封装axios、跨域代理配置)

4、可视化工具echarts、v-charts处理图形(控制大小、布局、颜色、接受数据格式)

5、es6(基础语法,比如在梳理数据过程中用到map遍历数组、对象和数组转换等等)

6、scss(配置、语法)

7、bootstrap、iconfont(用于没有设计师,作为前端设计能力有限,所以引用这两个)

8、打包上线(一些小坑)

好的列完了以上开发准备,装备好以上技能,系好安全带,开始上路了

功能设计和代码实现

一、构建项目

直接用脚手架构建,把需要的axios、echarts、v-charts、scss、bootstrap,安装配置好,具体操作略,axios跨域代理配置可以在网上找到相关资源,主要看看我规划的src文件结构,这块其实我封装了很多公共组件,这里就不细讲了

├── src 源码目录

│ ├── main.js 入口js文件

│ ├── app.vue 根组件

│ ├── components 公共组件目录

│ │ └── index.js 把全部组件遍历出来

│ ├── assets 资源目录,这里的资源会被wabpack构建

│ │ └── css css基础重置

│ │ └── data 可视化界面需要的图片

│ │ └── iconfont 字体图标

│ │ └── bg.png

│ ├── routes 前端路由

│ │ └── index.js

│ └── pages 页面目录

│ ├── app 入口文件

│ └── data 可视化文件

二、入口首页设计

先看看效果图(没有设计师,一个前端的审美)

主要功能:

1、服务条款弹框,这里弹框我封装了一个首页的组件,有用bootstrap样式,这里有一个父子组件通讯,首先点击服务条款,父组件告诉子组件要显示了,子组件显示之后,点击“x”或者“知道了”,告诉父组件需要让子组件不显示了

首页(父组件)引用“服务条款弹框”组件

首页(父组件)控制弹框的 methods

showpm(){

this.isShow = true

},

sayhidden(sayhidden){

this.isShow = sayhidden

}

“服务条款弹框”组件,接收首页的是否显示弹框的命令,然后通过$emit点击关闭向首页传递“关闭”状态

export default {

name: 'pmodal',

props: {

isShow: null,

},

data () {

return {

sayhidden: false

}

},

methods:{

closebtn(){

this.$emit('sayhidden', this.sayhidden)

}

}

}

2、输入框表单验证,这里主要是两个判断,当输入框为空时候点“生成”按钮,提示不能为空,当用户输入的时候,提示消失、点击提交的时候,请求接口然后把信息反馈回来,如果用户有误,提示重新输入,如果正确,就带着参数跳到"大数据可视化"页面

主要代码:

generate(username){

let name = this.username

let self = this

if(name.length <&#61; 0){

this.namelg &#61; true

return

}else{

this.$axios.get(&#39;/api/users/&#39;&#43; name).then((response)&#61;>{

let res &#61; JSON.parse(JSON.stringify(response))

if(res.status &#61;&#61;&#61; 200){

this.$router.push({

name: &#39;data&#39;,

params: { user: name }

})

}

return

}).catch(err &#61;> {

this.nousename &#61; true

this.errname &#61; name

console.log(err.message);

})

}

}

3、首页背景和粒子动效(已经在前面一篇文章有讲)这里略

二、大数据页设计和开发

先看看效果图(没有设计师&#xff0c;一个前端的审美)&#xff0c;这里我用的尤雨溪大大账号进行查询的数据实例(向Vue作者致敬)&#xff0c;尤大大的各项数据杠杠的&#xff0c;膜拜脸.img

好了&#xff0c;通过我这个设计可以划分上、中(左中右)三个部分内容为&#xff1a;

【1】上面基本上一个标题&#xff0c;左上角有一个“彩蛋”(后头讲作用)

【2】中-左部分&#xff1a;个人信息&#xff0c;仓库stars情况&#xff0c;仓库语言分类

【3】中-中部分&#xff1a;仓库公开数量、粉丝数量、跟随数量、仓库数据、最近你的操作

【4】中-右&#xff1a;最近的粉丝、最近的跟随、最新信息

值得一说的是我这边每个功能都是一个模块组件&#xff0c;首先带边框的是一个组件盒子、图表都是一个组件盒子、数量数据模块也是一个组件盒子、粉丝和跟随一个组件盒子

下面我按功能模块讲&#xff1a;

1、个人信息、仓库公开数量、粉丝数量、跟随数量&#xff1a;个人头像、用户名、加入时间。这些都是可以通过接口(https://api.github.com/users)...&#xff0c;然后直接放上去就OK了

2、仓库stars情况&#xff0c;仓库语言分类&#xff0c;我这里用的是一个接口(https://api.github.com/users/...)例如&#xff0c;我这边用自己账号测的第一条数据

你会发现这个数据一条都有93行数据&#xff0c;看的你头皮发麻&#xff0c;其实这里你只需要&#xff0c;仓库名和获取的star数量和语言类型&#xff0c;这几个数据。

这个时候你就得研究一下v-charts官网了(对于有经验的同学直接跳过)&#xff0c;看看它要接受什么样类型的对象数据&#xff0c;然后你就按照他的要求去拼装成它能识别的数据格式&#xff0c;这样才能生成想要的可视化图表&#xff0c;看了一下&#xff0c;数据格式基本上就是这个样子&#xff0c;看到片这里&#xff0c;你可以顺便了解一下怎么设置v-charts 的外观和大小之类的设置&#xff0c;其中我总结这几个属性legend、grid、series用到的概率比较高。

export default {

data: function () {

return {

chartData: {

columns: [&#39;日期&#39;, &#39;访问用户&#39;, &#39;下单用户&#39;, &#39;下单率&#39;],

rows: [

{ &#39;日期&#39;: &#39;1/1&#39;, &#39;访问用户&#39;: 1393, &#39;下单用户&#39;: 1093, &#39;下单率&#39;: 0.32 },

{ &#39;日期&#39;: &#39;1/2&#39;, &#39;访问用户&#39;: 3530, &#39;下单用户&#39;: 3230, &#39;下单率&#39;: 0.26 },

{ &#39;日期&#39;: &#39;1/3&#39;, &#39;访问用户&#39;: 2923, &#39;下单用户&#39;: 2623, &#39;下单率&#39;: 0.76 },

{ &#39;日期&#39;: &#39;1/4&#39;, &#39;访问用户&#39;: 1723, &#39;下单用户&#39;: 1423, &#39;下单率&#39;: 0.49 },

{ &#39;日期&#39;: &#39;1/5&#39;, &#39;访问用户&#39;: 3792, &#39;下单用户&#39;: 3492, &#39;下单率&#39;: 0.323 },

{ &#39;日期&#39;: &#39;1/6&#39;, &#39;访问用户&#39;: 4593, &#39;下单用户&#39;: 4293, &#39;下单率&#39;: 0.78 }

]

}

}

}

}

所以你就一起抽离一下

data () {

this.extend &#61; {

legend:{

textStyle: {color: &#39;#fff&#39;},

},

grid: {

textStyle: {

color: "#fff"

}

},

series:{

radius:[&#39;0&#39;,&#39;40%&#39;],

center: [&#39;50%&#39;, &#39;50%&#39;]

}

}

return {

personalD:{},

starData:{

columns: [&#39;reposName&#39;, &#39;getStars&#39;],

rows: [

]

},

noStarData:false,

languageData:{

columns: [&#39;lang&#39;, &#39;number&#39;],

rows: [

]

},

nolanguageData:false

}

}

说明&#xff1a;starData、languageData,分别是仓库stars情况&#xff0c;仓库语言分类初始化数据对象

这里是请求数据和梳理仓库名和获取的star数量和语言类型的代码

getData(username){

let comUrl &#61; "https://api.github.com/users/"

axios.get(comUrl &#43; username &#43; &#39;/repos&#39;).then((response)&#61;>{

let data &#61; JSON.parse(JSON.stringify(response.data))

if(data.length<1){

this.noStarData &#61; true

}else{

let rowdata &#61; []

let languages &#61; {}

for(var i&#61;0;i

// 仓库和仓库star

let reposName &#61; data[i].name

let getStars &#61; data[i].stargazers_count

let obj &#61; {

reposName:reposName,

getStars:getStars

}

rowdata.push(obj)

//梳理语言&#xff0c;计算语言类型和各个语言的数量

let langData &#61;data[i].language

if (langData) {

if (langData in languages) {

languages[langData]&#43;&#43;;

}else {

languages[langData] &#61; 1;

}

}

}

//把值附到starData.rows

this.starData.rows &#61; rowdata

//console.log(this.starData.rows)

//重新组装语言封成对象

let objL &#61; JSON.parse(JSON.stringify(languages))

let dataL &#61;[]

for(var key in objL){

dataL.push({"lang":key,"number":objL[key]})

}

this.languageData.rows &#61; dataL

//console.log(objL)

//console.log(this.languageData.rows)

}

return

}).catch(err &#61;> {

console.log(err.message);

})

}

这里的代码不够优雅(别问我为什么不用map函数)&#xff0c;比如我计算具体语言的仓库的语言类型&#xff0c;每个仓库都有可能有几种语言&#xff0c;每条仓库的语言都不一样&#xff0c;我要统计全部仓库的各个语言的个数&#xff0c;然后再封装成v-charts可以识别的数据类型&#xff0c;所以分两步做了&#xff0c;首先把遍历出来的语言都放在一个对象里&#xff0c;如下

1、{"Javascript":2,"CSS":2,"less":2}

然后把这个数据转换成v-charts可以识别的数据类型&#xff0c;如下

[

{"lang":"Javascript",

"number":2

}

{"lang":"CSS",

"number":2

}

]

3、仓库数据、最近你的操作、最近的粉丝、最近的跟随 这个数据直接可以获取

4、最新信息&#xff0c;这里也是都做了&#xff0c;一个新闻滚动效果&#xff0c;具体实现可以移步我写的这篇文章这里

三、优化和体验交互的一些处理

1、在加载数据的时候会有一个遮罩层设计&#xff0c;数据加载出来了这个遮罩层消失、展现数据&#xff0c;实现原理就是v-if控制显示隐藏

2、当用户尴尬到&#xff0c;没有查找无数据的会有对应的提示没有数据选项

3、当用户在地址栏输入不存在的用户的查询会有个判断&#xff0c;然后弹框提示&#xff0c;点击关闭都会跳转到首页入口页面

四、小彩蛋

说是小彩蛋&#xff0c;其实&#xff0c;就是大概讲一下作为作者&#xff0c;我后面GitDataV后面的一些小展望吧&#xff0c;之前说的左上角左箭头图标&#xff0c;其实这里是做一个拓展功能&#xff0c;目前点击全屏已经实现&#xff0c;后面还会继续添加国际化处理、切换皮肤等功能。

最后&#xff1a;

到这里&#xff0c;GitDataV&#xff0c;Vue构建的github“可视化大数据平台”设计、开发分享到这里就告一段落&#xff0c;希望对初中级前端同学有所帮助。github提供了开发者API&#xff0c;能获取的数据远不止这些&#xff0c;如果要更全面的梳理数据&#xff0c;需要比较长的路要走&#xff0c;数据分析可以做的更好&#xff0c;目前这些功能和数据梳理在性能上和实用性上没有做过多的测试&#xff0c;包括文章写的仓促&#xff0c;描述有误之处&#xff0c;谢谢大家指正。

目前打包后的项目放在github通过网站访问有些Bug待解决&#xff0c;但不影响正常使用&#xff0c;推荐把GitDataV(github源码仓库)项目下载下来&#xff0c;在本机运行项目&#xff0c;然后通过自己的账号生成自己的github“可视化大数据平台”。(感觉还不错的话&#xff0c;老铁们是不是来github里赏个★Star鼓励一哈)

后续会持续更新和优化&#xff0c;分享一些新的功能在github仓库&#xff0c;也会发布更新在这篇文章和上&#xff0c;也期待大家的交流....



推荐阅读
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • 本文探讨了Java编程的核心要素,特别是其面向对象的特性,并详细介绍了Java虚拟机、类装载器体系结构、Java类文件和Java API等关键技术。这些技术使得Java成为一种功能强大且易于使用的编程语言。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 从零开始构建完整手机站:Vue CLI 3 实战指南(第一部分)
    本系列教程将引导您使用 Vue CLI 3 构建一个功能齐全的移动应用。我们将深入探讨项目中涉及的每一个知识点,并确保这些内容与实际工作中的需求紧密结合。 ... [详细]
  • 本文详细记录了在银河麒麟操作系统和龙芯架构上使用 Qt 5.15.2 进行项目打包时遇到的问题及解决方案,特别关注于 linuxdeployqt 工具的应用。 ... [详细]
  • 文件描述符、文件句柄与打开文件之间的关联解析
    本文详细探讨了文件描述符、文件句柄和打开文件之间的关系,通过具体示例解释了它们在操作系统中的作用及其相互影响。 ... [详细]
author-avatar
张三三
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有