Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

vue2 + vue-router + vuex + webpack multiple pages framework,通过 vue 框架实现多页面和单页面应用。

Notifications You must be signed in to change notification settings

hacfins/vue2-multi-page

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

139 Commits

Repository files navigation

vue2-multi-page

简介

vue2-multi-page可用于webpack单页面及多页面的开发,它基于 vueelement-uimint-ui 实现。它使用了最新的前端技术栈,相信不管你的需求是什么,本项目都能帮助到你。

安装

# install dependencies
npm install
# serve with hot reload at localhost:8004
npm run dev
# build for production with minification
npm run build

技术构成

  • Web框架:Vue

  • UI框架:Element UI(pc)/Mint UI(mobile)

  • 构建工具:webpack+gulp

本产品采用 Vue 框架,主要使用了里面的 vue-route、vue-cookies、axios、pug页面继承、vuex等技术。

功能

  • 首页

  • 视频

    • video
    • video-hls
    • video-rtmp
  • 音频

    • audio
  • 上传

    • upload(webupload)
  • 表单验证

  • editor

    • editor(百度的富文本编辑器)
  • 后台管理(后台管理页面)

webm 及webm hdr 视频格式预览:除IE10外可支持webm及webm hdr 浏览,系统如果安装了插件WebMMFSetUp IE10 可以播放webm,但是webm hdr 仍然不支持。

目录结构

.
├── build // webpack 配置文件
├── config // webpack 生产及开发环境变量
├── dist // 线上文件夹
├── src // 开发目录
│  ├── api // api文件夹
│  │  ├── getdata.js // api接口js文件
│  ├── config // 基本配置文件夹
│  │  ├── ajax.js // Ajax请求js文件
│  │  ├── config.js // 引入公共的配置文件
│  │  ├── env.js // 环境配置文件
│  │  ├── utils.js // 公共的js文件
│  ├── directive // 指令文件夹
│  │  ├── el-drag-dialog // 某个指令文件夹
│  │  │  └── drag.js // 指令功能文件
│  │  │  └── index.js // 指令功能文件入口
│  ├── modules // 开发目录
│  │  ├── index // PC目录
│  │  │  ├── common // 基础模板
│  │  │  └── base.pug // 基础模板文件
│  │  │  └── commponents // 组件目录
│  │  │  └── common // 共用组件目录
│  │  │  └── audio.vue // 例如:音频组件
│  │  │  └── footer // 页面底部
│  │  │  └── header // 页面头部
│  │  │  └── pages // 页面目录
│  │  │  └── audio // 音频页面目录
│  │  │  └── children // 音频页面子组件目录
│  │  │  └── app.vue // 音频页面入口Vue
│  │  │  └── audio.js // 音频页面入口js
│  │  │  └── audio.pug // 音频页面入口pug文件
│  │  ├── phone // phone目录
│  ├── router // 路由文件夹
│  │  └── index.js // PC端路由配置文件
│  │  └── phone.js // Mobile端路由配置文件
│  └── script // 放置PC/Mobile分别共用及共同共用的JS文件
│  └── store // vuex目录文件
│  └── style // 放置PC/Mobile共用的Css文件
│  │  └── common // PC/Mobile共用的Css目录
│  │  └── index.scss // PC的Css文件
│  │  └── phone.scss // Mobile的Css文件
├── static // 静态目录
│  ├── assets // 第三方静态文件,主要放置不变的东西例如(Vue、Axios)
│  │  ├── axios-0.18.0 // 每一个第三方文件名增加版本号
│  ├── iconfont // 放置字体文件
│  ├── images // 放置图片
│  ├── lib // 放置自己封装的lib文件
│  ├── medias // 放置音频视频文件
.

编码命名规范

  1. 英文命名,不可使用汉语拼音

  2. 所有的文件夹名,采用 小写

  3. 所有的文件名,采用 小写

  4. URL请求地址 一律 小写

  5. 所有的文件位置按照上面目录结构进行进行放置,不可乱放

  6. 禁止使用Jquery及Jquery依赖的插件

如果文件名及文件夹名称由多个字母构成使用中划线的方式,例如:header-top! 如果有修改,需要在该文件中详细说明!

源码修改说明

1. element-ui

(1)为了实现 el-tree 组件 是不是叶子节点 原UI 只有在lazy 模式下 data中的isLeaf 属性值设置才生效,

但是lazy 模式下 无法动态添加的节点 及节点的排序,所以将不是lazy模式也可以通过isLeaf 设置是否是叶子节点

由: e.prototype.updateLeafState=function(){if(!0!==this.store.lazy||!0===this.loaded||void 0===this.isLeafByUser)
改为:e.prototype.updateLeafState=function(){if(!0===this.loaded||void 0===this.isLeafByUser)

(2)为了解决fireFox nodeClick event 拿不到,导致无法区分点击的元素,无法对点击添加编辑等按钮时禁止展开操作,及禁用的节点还可以选中的问题及el-tree禁用的节点还可以点击的问题

由: handleClick(){... this.tree.$emit("node-click",this.node.data,this.node,this)} 
改为:handleClick(event){if(this.node.disabled) return;... this.tree.$emit("node-click",this.node.data,this.node,this,event)

(3)为了解决IE10分页组件Jumper输入数字后回车第一次成功,然后接着输入数字回车没有反应的问题

由: handleChange:function(e){this.$parent.internalCurrentPage=this.$parent.getValidCurrentPage(e),this.$parent.emitChange(),this.oldValue=null,this.resetValueIfNeed(e)}
改为:handleChange:function(e){this.$parent.internalCurrentPage=this.$parent.getValidCurrentPage(e),this.$parent.emitChange(),this.oldValue=this.$parent.internalCurrentPage,this.resetValueIfNeed(e)}

(4)为了实现el-select 分组的标题可以自定义

由: i("li",{staticClass:"el-select-group__title"},[e._v(e._s(e.label))])
改为:i("li",{staticClass:"el-select-group__title"},[e._t("group_title", [e._v(e._s(e.label))])],2)

(5)为了实现el-rate小于半数及大于半数星星点亮的不正确的问题

由: this.rateDisabled&&(e=(this.valueDecimal<50?0:50)+"%")
改为:this.rateDisabled&&(e=this.valueDecimal+"%")

(6)为了解决el-tree禁用的节点还可以点击的问题

由: handleClick:function(){var e=this.tree.store;e.setCurrentNode(this.node)
改为:handleClick:function(){var e=this.tree.store;if(this.node.disabled)return;e.setCurrentNode(this.node)

(7)为了解决级联菜单禁用的不能展开的问题

由: n.__IS__FLAT__OPTIONS&&(o=!0),n.disabled||(h.on.keydown=function(e){var i=e.keyCode;if(!([37,38,39,40,13,9,27].indexOf(i)<0))
改为:n.__IS__FLAT__OPTIONS&&(o=!0),(h.on.keydown=function(e){var i=e.keyCode;if(!([37,38,39,40,13,9,27].indexOf(i)<0))

2. mint-ui

(1)为了支持datetimepicker type=time 类型 可以控制开始分钟与结束分钟

由: startHour:{type:Number,default:0},endHour:{type:Number,default:23}}和
computed:{rims:function(){if(!this.currentValue)return{year:[],month:[],date:[],hour:[],min:[]};var t;return"time"===this.type?t={hour:[this.startHour,this.endHour],min:[0,59]}
改为:startHour:{type:Number,default:0},endHour:{type:Number,default:23},startMinute:{type:Number,default:0},endMinute:{type:Number,default:59}
computed:{rims:function(){if(!this.currentValue)return{year:[],month:[],date:[],hour:[],min:[]};var t;return"time"===this.type?t={hour:[this.startHour,this.endHour],min:[this.startMinute,this.endMinute]}

(2)为了解决移动端MintUI picker 不能禁用某一项

由: {staticClass:"picker-item",class:{"picker-selected":e===t.currentValue}
改为:{staticClass:"picker-item",class:{"picker-selected":e===t.currentValue,'picker-disabled':e['disabled']}

3. videojs

(1)为了解决IE10 视频播放时不在当前页再回来IE10 卡死的问题

由: this.updateInterval=this.setInterval(function(){e.requestAnimationFrame(e.update)},30)}
改为:this.updateInterval=this.setInterval(function(){e.rafId_&&e.cancelAnimationFrame(e.rafId_),e.rafId_=e.requestAnimationFrame(e.update)},30)}

4. webupload

(1)为了添加button可以选择接受类型及增加文件夹上传

由: addBtn:function(b){var e=this,f=e.options,g=f.accept
改为:addBtn:function(b,acceptopt){var e=this,f=e.options,g=acceptopt||f.accept
由: acceptFile:function(a){var b=!a||!a.size||this.accept&&h.exec(a.name)&&!this.accept.test(a.name);return!b}
改为:acceptFile:function(a){this.accept = this.owner.accept||this.accept;var b=!a||!a.size||this.accept&&h.exec(a.name)&&!this.accept.test(a.name);return!b}
由: j.multiple&&l.attr("multiple","multiple"),j.accept&&j.accept.length>0){for(a=[],b=0,d=j.accept.length;d>b;b++)a.push(j.accept[b].mimeTypes);l.attr("accept",a.join(","))
改为:j.multiple&&l.attr("multiple","multiple"),j.is_fold&&l.attr("webkitdirectory",""),j.accept&&j.accept.length>0){for(a=[],b=0,d=j.accept.length;d>b;b++)a.push(j.accept[b].mimeTypes);l.attr("accept",a.join(","))

5.vee-validate

(1) disabled 不进行验证的问题

由: Ot.isDisabled.get=function(){return!(!this.component||!this.component.disabled)||!(!this.el||!this.el.disabled)}
改为:Ot.isDisabled.get=function(){return false}

6.vue-clipboards.es.js

(1)为了解决IE粘贴板弹出对话框将其禁止还弹复制成功的问题

由: try {
 succeeded = document.execCommand(this.action)
 } catch (err) {
 succeeded = false
 }
改为:try {
 succeeded = window.clipboardData ? window.clipboardData.setData('Text', this.selectedText) : document.execCommand(this.action)
 } catch (err) {
 succeeded = false
 }

webpack打包说明

1. js打包:

(1)将配置文件打包到js/common/config.js

(2)api、config、script中的文件打包到js/common/env.js

(3)将PC端及Mobile端入口产生的runtime单独打包到js/common/runtime.js(为了更改某个文件缓存失效的问题)

(4)将入口文件中router、store的配置打包到entry-com.js(PC、Mobile 已区分)

(5)将所有chunks只要共用大于等于3就将其打包到async-com.js(PC、Mobile 已区分)

(6)分别将入口文件及异步chunks打包到对应模块中

(7)将nodemodule中的第三方插件打包到vendor.js

2. css打包:

(1)将引用nodeModule中的css按照PC/Mobile 打包到css/(index|phone)/vendor.css

(2)将reset CSS按照PC/Mobile打包到css/(index|phone)/entry-com.css及css/phone/entry-com.css

(3)将chunks中的css按照PC/Mobile打包到css/(index|phone)async-com.css

由于升级到webpack4在开发模式下热更新比较慢,是由于html-webpack-plugin3.2.0版本的问题,改为使用4.0.0-beta.8

Browsers support

Modern browsers and Internet Explorer 10.

IE / Edge
IE / Edge
Firefox
Firefox
Chrome
Chrome
Safari
Safari
IE10, IE11, Edge last 2 versions last 2 versions last 2 versions

License

copyright © 2019 北京华科飞扬科技股份公司

About

vue2 + vue-router + vuex + webpack multiple pages framework,通过 vue 框架实现多页面和单页面应用。

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

AltStyle によって変換されたページ (->オリジナル) /