首页
归档
留言
友链
广告合作
壁纸
更多
美女主播
Search
1
博瑞GE车机升级/降级
5,614 阅读
2
Mac打印机设置黑白打印
4,966 阅读
3
修改elementUI中el-table树形结构图标
4,901 阅读
4
Mac客户端添加腾讯企业邮箱方法
4,681 阅读
5
intelliJ Idea 2022.2.X破解
4,362 阅读
后端开发
HarmonyOS Next
Web前端
微信开发
开发辅助
App开发
数据库
随笔日记
登录
/
注册
Search
标签搜索
Spring Boot
Java
Vue
Spring Cloud
Mac
MyBatis
WordPress
MacOS
asp.net
Element UI
Nacos
.Net
Spring Cloud Alibaba
MySQL
Mybatis-Plus
Typecho
jQuery
Java Script
IntelliJ IDEA
微信小程序
Laughing
累计撰写
627
篇文章
累计收到
1,422
条评论
首页
栏目
后端开发
HarmonyOS Next
Web前端
微信开发
开发辅助
App开发
数据库
随笔日记
页面
归档
留言
友链
广告合作
壁纸
美女主播
搜索到
29
篇与
的结果
2020-12-28
vue-big-screen: 一个基于 vue+datav+Echart 框架的大数据可视化(大屏展示)模板
一、项目描述React 版本请点击这里查看,全新界面超级好看!!!(o ゚ v ゚)ノ一个基于 Vue、Datav、Echart 框架的 " 数据大屏项目 ",通过 Vue 组件实现数据动态刷新渲染,内部图表可实现自由替换。部分图表使用 DataV 自带组件,可进行更改,详情请点击下方 DataV 文档。项目需要全屏展示(按 F11)。项目部分区域使用了全局注册方式,增加了打包体积,在实际运用中请使用 按需引入。拉取项目之后,建议按照自己的功能区域重命名文件,现以简单的位置进行区分。项目环境:Vue-cli-3.0、DataV-2.7.3、Echarts-4.6.0(如果5.x版本有问题,请切换到4.x版本)、Webpack-4.0、Npm-6.13、Node-v12.16。请拉取 master 分支的代码,其余是开发分支。友情链接:Vue 官方文档DataV 官方文档echarts 实例,echarts API 文档项目 gitee 地址(国内速度快)二、主要文件介绍文件作用/功能main.js主目录文件,引入 Echart/DataV 等文件utils工具函数与 mixins 函数等views/ index.vue项目主结构views/其余文件界面各个区域组件(按照位置来命名)assets静态资源目录,放置 logo 与背景图片assets / style.scss通用 CSS 文件,全局项目快捷样式调节assets / index.scssIndex 界面的 CSS 文件components/echart所有 echart 图表(按照位置来命名)common/...全局封装的 ECharts 和 flexible 插件代码(适配屏幕尺寸,可定制化修改)三、使用介绍启动项目需要提前安装好 nodejs 与 npm,下载项目后在项目主目录下运行 npm/cnpm install 拉取依赖包。安装完依赖包之后然后使用 vue-cli 或者直接使用命令npm run serve,就可以启动项目,启动项目后需要手动全屏(按 F11)。如果编译项目的时候提示没有 DataV 框架的依赖,输入 npm install @jiaminghi/data-view 或者 yarn add @jiaminghi/data-view 进行手动安装。封装组件渲染图表所有的 ECharts 图表都是基于 common/echart/index.vue 封装组件创建的,已经对数据和屏幕改动进行了监听,能够动态渲染图表数据和大小。在监听窗口小大的模块,使用了防抖函数来控制更新频率,节约浏览器性能。项目配置了默认的 ECharts 图表样式,文件地址:common/echart/theme.json。封装的渲染图表组件支持传入以下参数,可根据业务需求自行添加/删除。参数名称类型作用/功能 idString唯一 id,渲染图表的节点(非必填,使用了 $el)classNameStringclass样式名称(非必填)optionsObjectECharts 配置(必填)heightString图表高度(建议填)widthString图表宽度(建议填)动态渲染图表动态渲染图表案例为 components 目录下各个图表组件,index 文件负责数据获取和处理,chart 文件负责监听和数据渲染。chart 文件的主要逻辑为:<template> <div> <Echart :options="options" id="id" height="height" width="width" ></Echart> </div> </template> <script> // 引入封装组件 import Echart from '@/common/echart' export default { // 定义配置数据 data(){ return { options: {}}}, // 声明组件 components: { Echart}, // 接收数据 props: { cdata: { type: Object, default: () => ({}) }, }, // 进行监听,也可以使用 computed 计算属性实现此功能 watch: { cdata: { handler (newData) { this.options ={ // 这里编写 ECharts 配置 } }, // 立即监听 immediate: true, // 深度监听 deep: true } } }; </script>复用图表组件复用图表组件案例为中间部分的 任务通过率与任务达标率 模块,两个图表类似,区别在于颜色和主要渲染数据。只需要传入对应的唯一 id 和样式,然后在复用的组件 components/echart/center/centerChartRate 里进行接收并在对应位置赋值即可。如:在调用处 views/center.vue 里去定义好数据并传入组件//组件调用 <span>今日任务通过率</span> <centerChart :id="rate[0].id" :tips="rate[0].tips" :colorObj="rate[0].colorData" /> <span>今日任务达标率</span> <centerChart :id="rate[1].id" :tips="rate[1].tips" :colorObj="rate[1].colorData" /> ... import centerChart from "@/components/echart/center/centerChartRate"; data() { return { rate: [ { id: "centerRate1", tips: 60, ... }, { id: "centerRate2", tips: 40, colorData: { ... } } ] } }更换边框边框是使用了 DataV 自带的组件,只需要去 views 目录下去寻找对应的位置去查找并替换就可以,具体的种类请去 DavaV 官网查看如:<dv-border-box-1></dv-border-box-1> <dv-border-box-2></dv-border-box-2> <dv-border-box-3></dv-border-box-3>更换图表直接进入 components/echart 下的文件修改成你要的 echarts 模样,可以去echarts 官方社区里面查看案例。Mixins 解决自适应适配功能使用 mixins 注入解决了界面大小变动图表自适应适配的功能,函数在 utils/resizeMixins.js 中,应用在 common/echart/index.vue 的封装渲染组件,主要是对 this.chart 进行了功能注入。屏幕适配本项目借助了 flexible 插件,通过改变 rem 的值来进行适配,原设计为 1920px。 ,适配区间为:1366px ~ 2560px,本项目有根据实际情况进行源文件的更改,小屏幕(如:宽为 1366px)需要自己舍弃部分动态组件进行适配,如'动态文字变换组件'会影响布局,需要手动换成一般节点,// flexible文件位置: `common/flexible.js`,修改部分如下 function refreshRem() { var width = docEl.getBoundingClientRect().width; // 最小1366px,最大适配2560px if (width / dpr < 1366) { width = 1366 * dpr; } else if (width / dpr > 2560) { width = 2560 * dpr; } // 原项目是1920px我设置成24等份,这样1rem就是80px var rem = width / 24; docEl.style.fontSize = rem + 'px'; flexible.rem = win.rem = rem; }请求数据现在的项目未使用前后端数据请求,建议使用 axios 进行数据请求,在 main.js 位置进行全局配置。axios 的 main.js 配置参考范例(因人而异)import axios from 'axios'; //把方法放到vue的原型上,这样就可以全局使用了 Vue.prototype.$http = axios.create({ //设置20秒超时时间 timeout: 20000, baseURL: 'http://172.0.0.1:80080', //这里写后端地址 });四、更新情况增加了 Echart 组件复用的功能,如:中间任务达标率的两个百分比图使用的是同一个组件。修复了头部右侧的图案条不对称的问题。修复屏幕适配问题,更换了所有的尺寸单位,统一使用 rem。使用 Mixins 注入图表响应式代码。vue-awesome 改成按需引入的方式。封装渲染函数,抽离了数据使逻辑更加清晰。新增地图组件,并添加自动轮播功能五、其余这个项目是个人的作品,难免会有问题和 BUG,如果有问题请进行评论,我也会尽力去更新,自己也在前端学习的路上,欢迎交流,非常感谢!
2020年12月28日
1,827 阅读
0 评论
0 点赞
2020-10-31
vue工程关闭eslint严格语法检查
什么是eslinteslint是一个JavaScript的校验插件,通常用来校验语法或代码的书写风格。其实eslint本身是一个好东西,能够检查我们代码中的语法错误、规范我们的书写风格,但是水至清则无鱼,eslint的框框太死了(其实我是没怎么用过),所以,我们一般情况下,将eslint关闭就好了,一劳永逸。eslint的严格校验eslint会规范缩进、空格、空白行之类的代码,在开发过程中一直报错,未免太过于苛刻了。所以,我还是会选择关闭eslint校验。比如,我们对象中多了一个,,本身不是太大的问题,但是eslint就会报错。诸如此类的问题,肯定会让我们开发人员抓狂。关闭eslint校验1. 利用脚手架创建工程时关闭我们在创建vue工程时,会提示我们是否开启eslint,如果我们不需要使用,关闭即可。2. 已开启eslint的工程关闭如果我们打开的是别人的工程,或者在创建工程时,不小心开启了eslint,我们也可以修改已有工程,关闭eslint。关闭方法如下:找到工程build文件下的webpack.base.conf.js文件,注释掉createLintingRule()
2020年10月31日
2,177 阅读
0 评论
2 点赞
2020-10-28
vue-pdf通过流的方式在线预览Pdf文件
简介vue-pdf是一个支持在线预览pdf的vue插件。网上较少的比较多的是直接打开一个pdf文件的uri链接。本文另辟蹊径,通过流的方式在线展示Pdf文件。vue-pdf安装安装命令npm install --save vue-pdf如果注册了淘宝源,也可以使用以下命令cnpm install --save vue-pdf使用组件<template> <el-dialog :visible.sync="viewPdf" :show-close="false" width="40%" height="100%" :modal="true" :close-on-click-modal="true" :close-on-press-escape="true" @close='closeDialog' class="el_dialog"> <div v-show="fileType === 'pdf'" class="pdf"> <pdf :src="src" ref="pdf" @progress="loadedRatio = $event" @num-pages="pageTotalNum=$event" :page="pageNum"> </pdf> <el-button-group style="text-align: center"> <el-button type="primary" icon="el-icon-arrow-left" size="mini" @click="prePage">上一页</el-button> <el-button type="primary" size="mini" @click="nextPage">下一页<i class="el-icon-arrow-right el-icon--right"></i> </el-button> </el-button-group> <div style="marginTop: 10px; color: #409EFF">{{ pageNum }} / {{ pageTotalNum }}</div> </div> </el-dialog> </template> <script> import pdf from 'vue-pdf' import { fileView } from '@/api/store/detection/test' export default { components: { pdf }, props: ['attachmentId', 'viewPdf'], data() { return { fileType: 'pdf', src: '', pageNum: 1, pageTotalNum: 1, // 总页数 loadedRatio: 0 //当前页面的加载进度,范围是0 - 1 ,等于1的时候代表当前页已经完全加载完成了 } }, mounted() { this.getNumPages() }, methods: { // 上一页 prePage() { let page = this.pageNum page = page > 1 ? page - 1 : this.pageTotalNum this.pageNum = page }, // 下一页 nextPage() { let page = this.pageNum page = page < this.pageTotalNum ? page + 1 : 1 this.pageNum = page }, getNumPages() { var _this = this fileView({ attachmentId: this.attachmentId }).then(response => { let reader = new window.FileReader() // 使用readAsArrayBuffer读取文件, result属性中将包含一个 ArrayBuffer 对象以表示所读取文件的数据 reader.readAsArrayBuffer(response) reader.onload = function(e) { const result = e.target.result const contentType = response.type // 生成blob图片,需要参数(字节数组, 文件类型) const blob = new Blob([result], { type: 'application/pdf' }) // 使用 Blob 创建一个指向类型化数组的URL, URL.createObjectURL是new Blob文件的方法,可以生成一个普通的url,可以直接使用,比如用在img.src上 if (window.createObjectURL != undefined) { // basic _this.src = window.createObjectURL(blob) } else if (window.webkitURL != undefined) { // webkit or chrome try { _this.src = window.webkitURL.createObjectURL(blob) } catch (error) { } } else if (window.URL != undefined) { // mozilla(firefox) try { _this.src = window.URL.createObjectURL(blob) } catch (error) { } } let loadingTask = pdf.createLoadingTask(this.src) loadingTask.promise.then(pdf => { _this.pageTotalNum = pdf.numPages }).catch(err => { console.error('pdf 加载失败', err) }) } }) }, closeDialog() { this.$emit('resetViewPdf') } } } </script> <style scoped> .el-dialog { position: relative; margin: 0 auto 0px; background: #FFFFFF; border-radius: 2px; -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); -webkit-box-sizing: border-box; box-sizing: border-box; width: 50%; height: 60%; } .el-dialog__body { border-top: 1px solid #dcdfe6; border-bottom: 1px solid #dcdfe6; max-height: 85% !important; min-height: 70%; overflow-y: auto; } -webkit-scrollbar { width: 2px; background-color: #ccc; } -webkit-scrollbar-thumb { background-color: #0ae; } -webkit-scrollbar-track { background-color: #ccc; } </style> apitest.js//查看附件 export function fileView(data) { return request({ url: '/store/detection/test/fileView/', method: 'get', responseType: 'blob', params: data }) }
2020年10月28日
1,723 阅读
0 评论
0 点赞
2020-10-18
Vue列表渲染及视图不刷新问题解决
Vue中列表渲染主要使用v-for指令,v-for指令根据接收到的数组,重复渲染v-for绑定到的DOM元素及内部子元素,并且可以通过设置别名的方式,获取数组内数据渲染到节点中。简单演示<template> <div> <el-steps :active="active" finish-status="success" style="text-align: left"> <el-step v-for="step in steps" :title="step.name" :key="step.index"></el-step> </el-steps> <el-button style="margin-top: 12px;" @click="next">下一步</el-button> <el-button style="margin-top: 12px;" @click="restSteps">重置列表</el-button> <el-button style="margin-top: 12px;" @click="changeStep">修改列表不刷新</el-button> <el-button style="margin-top: 12px;" @click="changeStepRefresh">修改列表刷新</el-button> </div> </template> <script> export default { name: '列表渲染', data () { return { active: 0, steps: [ { name: '步骤一', index: 1 }, { name: '步骤二', index: 2 }, { name: '步骤三', index: 3 } ] } }, methods: { next: function () { if (this.active++ > 2) { this.active = 0 } }, restSteps: function () { }, changeStep: function () { }, changeStepRefresh: function () { } } } </script> <style scoped> </style> 列表元素修改重新渲染一般情况下,改变数组时,能自动触发视图更新,但是一下两种情况除外:通过索引直接修改数组元素直接修改数组的长度。俗话活得好,上帝给你关上一扇门,肯定会给你留下一扇窗。针对以上两种情况,我们都有办法对应解决:<template> <div> <el-steps :active="active" finish-status="success" style="text-align: left"> <el-step v-for="step in steps" :title="step.name" :key="step.index"></el-step> </el-steps> <el-button style="margin-top: 12px;" @click="next">下一步</el-button> <el-button style="margin-top: 12px;" @click="restSteps">重置列表不更新</el-button> <el-button style="margin-top: 12px;" @click="restStepsRefresh">重置列表更新</el-button> <el-button style="margin-top: 12px;" @click="changeStep">修改列表不刷新</el-button> <el-button style="margin-top: 12px;" @click="changeStepRefresh">修改列表刷新</el-button> </div> </template> <script> export default { name: '列表渲染', data () { return { active: 0, steps: [ { name: '步骤一', index: 1 }, { name: '步骤二', index: 2 }, { name: '步骤三', index: 3 } ] } }, methods: { next: function () { if (this.active++ > 2) { this.active = 0 } }, restSteps: function () { this.steps.length = 0 }, restStepsRefresh: function () { this.steps.splice(0, 3) }, changeStep: function () { this.steps[2] = { name: '步骤三山', index: 3 } }, changeStepRefresh: function () { this.$set(this.steps, 2, { name: '步骤三山', index: 3 }) } } } </script> <style scoped> </style>
2020年10月18日
1,308 阅读
0 评论
0 点赞
2020-10-10
超详细Vue+Spring Boot整合Shiro前后端分离架构-Shiro介绍(一)
其实网上关于spring boot整合shiro的例子并不少见,为什么我这里要重复\`造轮子\`,因为网上所谓的整合,基本上都是以Demo为主,很少能见到Vue+Spring Boot+Shiro完整整合的例子。Shiro概念Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。三个核心组件:Subject, SecurityManager 和 Realms.Subject:即“当前操作用户”。但是,在Shiro中,Subject这一概念并不仅仅指人,也可以是第三方进程、后台帐户(Daemon Account)或其他类似事物。它仅仅意味着“当前跟软件交互的东西”。Subject代表了当前用户的安全操作,SecurityManager则管理所有用户的安全操作。SecurityManager:它是Shiro框架的核心,典型的Facade模式,Shiro通过SecurityManager来管理内部组件实例,并通过它来提供安全管理的各种服务。Realm: Realm充当了Shiro与应用安全数据间的“桥梁”或者“连接器”。也就是说,当对用户执行认证(登录)和授权(访问控制)验证时,Shiro会从应用配置的Realm中查找用户及其权限信息。从这个意义上讲,Realm实质上是一个安全相关的DAO:它封装了数据源的连接细节,并在需要时将相关数据提供给Shiro。当配置Shiro时,你必须至少指定一个Realm,用于认证和(或)授权。配置多个Realm是可以的,但是至少需要一个。Shiro内置了可以连接大量安全数据源(又名目录)的Realm,如LDAP、关系数据库(JDBC)、类似INI的文本配置资源以及属性文件等。如果系统默认的Realm不能满足需求,你还可以插入代表自定义数据源的自己的Realm实现。
2020年10月10日
2,759 阅读
0 评论
2 点赞
1
2
3