├── static ├── .gitkeep └── defaultCover.jpg ├── .idea ├── .name ├── misc.xml ├── vcs.xml ├── modules.xml └── clouddo-view.iml ├── config ├── prod.env.js ├── dev.env.js └── index.js ├── src ├── assets │ ├── logo.png │ ├── logotxt.png │ ├── images │ │ ├── index1.jpg │ │ └── index2.jpg │ ├── fonts │ │ ├── iconfont.eot │ │ ├── iconfont.ttf │ │ ├── iconfont.woff │ │ ├── FontAwesome.otf │ │ ├── fontawesome-webfont.eot │ │ ├── fontawesome-webfont.ttf │ │ ├── fontawesome-webfont.woff │ │ ├── fontawesome-webfont.woff2 │ │ └── iconfont.svg │ ├── styles │ │ └── main.scss │ ├── iconfont.css │ └── css │ │ └── font-awesome.min.css ├── bus.js ├── components │ ├── welcome │ │ ├── home.vue │ │ ├── bootdo.vue │ │ └── index.vue │ ├── Dashboard.vue │ ├── TreeTable │ │ ├── eval.js │ │ ├── readme.md │ │ └── index.vue │ ├── quill │ │ └── qeditor │ ├── user │ │ ├── changepwd.vue │ │ ├── profile.vue │ │ └── list.vue │ ├── log │ │ └── List.vue │ ├── file │ │ └── List.vue │ ├── Login.vue │ ├── Home.vue │ ├── menu │ │ └── list.vue │ ├── content │ │ └── blog.vue │ └── role │ │ └── list.vue ├── api │ ├── env.js │ ├── api_log.js │ ├── api_file.js │ ├── api_menu.js │ ├── api_role.js │ ├── api_user.js │ └── index.js ├── App.vue ├── main.js ├── common │ └── util.js └── router │ └── index.js ├── .gitignore ├── dist ├── static │ ├── defaultCover.jpg │ ├── index_backgroud.jpg │ ├── fonts │ │ ├── element-icons.6f0a763.ttf │ │ ├── fontawesome-webfont.674f50d.eot │ │ ├── fontawesome-webfont.af7ae50.woff2 │ │ ├── fontawesome-webfont.b06871f.ttf │ │ └── fontawesome-webfont.fee66e7.woff │ ├── js │ │ ├── manifest.1bff35b46d6bf4c63ff9.js │ │ ├── 0.98b04c084adca6662464.js │ │ ├── manifest.1bff35b46d6bf4c63ff9.js.map │ │ └── 0.98b04c084adca6662464.js.map │ └── img │ │ └── iconfont.5c9ad9e.svg └── index.html ├── .editorconfig ├── .postcssrc.js ├── index.html ├── .babelrc ├── README.md └── package.json /static/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.idea/.name: -------------------------------------------------------------------------------- 1 | clouddo-view -------------------------------------------------------------------------------- /config/prod.env.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | NODE_ENV: '"production"' 3 | } 4 | -------------------------------------------------------------------------------- /src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcg0124/clouddo-view/HEAD/src/assets/logo.png -------------------------------------------------------------------------------- /src/assets/logotxt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcg0124/clouddo-view/HEAD/src/assets/logotxt.png -------------------------------------------------------------------------------- /static/defaultCover.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcg0124/clouddo-view/HEAD/static/defaultCover.jpg -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | dist/ 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | -------------------------------------------------------------------------------- /dist/static/defaultCover.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcg0124/clouddo-view/HEAD/dist/static/defaultCover.jpg -------------------------------------------------------------------------------- /src/assets/images/index1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcg0124/clouddo-view/HEAD/src/assets/images/index1.jpg -------------------------------------------------------------------------------- /src/assets/images/index2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcg0124/clouddo-view/HEAD/src/assets/images/index2.jpg -------------------------------------------------------------------------------- /dist/static/index_backgroud.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcg0124/clouddo-view/HEAD/dist/static/index_backgroud.jpg -------------------------------------------------------------------------------- /src/assets/fonts/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcg0124/clouddo-view/HEAD/src/assets/fonts/iconfont.eot -------------------------------------------------------------------------------- /src/assets/fonts/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcg0124/clouddo-view/HEAD/src/assets/fonts/iconfont.ttf -------------------------------------------------------------------------------- /src/assets/fonts/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcg0124/clouddo-view/HEAD/src/assets/fonts/iconfont.woff -------------------------------------------------------------------------------- /src/bus.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by bootdo. 3 | */ 4 | import Vue from 'vue' 5 | 6 | export let bus = new Vue() 7 | -------------------------------------------------------------------------------- /src/assets/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcg0124/clouddo-view/HEAD/src/assets/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /src/assets/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcg0124/clouddo-view/HEAD/src/assets/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /src/assets/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcg0124/clouddo-view/HEAD/src/assets/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /src/assets/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcg0124/clouddo-view/HEAD/src/assets/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /dist/static/fonts/element-icons.6f0a763.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcg0124/clouddo-view/HEAD/dist/static/fonts/element-icons.6f0a763.ttf -------------------------------------------------------------------------------- /src/assets/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcg0124/clouddo-view/HEAD/src/assets/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /dist/static/fonts/fontawesome-webfont.674f50d.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcg0124/clouddo-view/HEAD/dist/static/fonts/fontawesome-webfont.674f50d.eot -------------------------------------------------------------------------------- /dist/static/fonts/fontawesome-webfont.af7ae50.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcg0124/clouddo-view/HEAD/dist/static/fonts/fontawesome-webfont.af7ae50.woff2 -------------------------------------------------------------------------------- /dist/static/fonts/fontawesome-webfont.b06871f.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcg0124/clouddo-view/HEAD/dist/static/fonts/fontawesome-webfont.b06871f.ttf -------------------------------------------------------------------------------- /dist/static/fonts/fontawesome-webfont.fee66e7.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcg0124/clouddo-view/HEAD/dist/static/fonts/fontawesome-webfont.fee66e7.woff -------------------------------------------------------------------------------- /config/dev.env.js: -------------------------------------------------------------------------------- 1 | var merge = require('webpack-merge') 2 | var prodEnv = require('./prod.env') 3 | 4 | module.exports = merge(prodEnv, { 5 | NODE_ENV: '"development"' 6 | }) 7 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/components/welcome/home.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 10 | 11 | 14 | -------------------------------------------------------------------------------- /src/api/env.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by bootdo 3 | * 设置api请求的baseURL 4 | * 实际项目中建议该文件不纳入版本管理 5 | */ 6 | export default { 7 | baseURL: 'http://localhost:8002', 8 | // baseURL: '', 9 | isDev: true 10 | } 11 | -------------------------------------------------------------------------------- /.postcssrc.js: -------------------------------------------------------------------------------- 1 | // https://github.com/michael-ciniawsky/postcss-load-config 2 | 3 | module.exports = { 4 | "plugins": { 5 | // to edit target browsers: use "browserlist" field in package.json 6 | "autoprefixer": {} 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/api/api_log.js: -------------------------------------------------------------------------------- 1 | import * as API from './' 2 | 3 | export default { 4 | list: params => { 5 | return API.GET('/api-base/log', params) 6 | }, 7 | remove: params => { 8 | return API.DELETE('/api-base/log', params) 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | clouddo 6 | 7 | 8 |
9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["env", { "modules": false }], 4 | "stage-2" 5 | ], 6 | "plugins": ["transform-runtime"], 7 | "comments": false, 8 | "env": { 9 | "test": { 10 | "presets": ["env", "stage-2"], 11 | "plugins": [ "istanbul" ] 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/components/welcome/bootdo.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 13 | 14 | 17 | -------------------------------------------------------------------------------- /src/components/Dashboard.vue: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /src/api/api_file.js: -------------------------------------------------------------------------------- 1 | import * as API from './' 2 | 3 | export default { 4 | files: params => { 5 | return API.GET('/api-cms/file', params) 6 | }, 7 | getToken:params =>{ 8 | return API.GET('/api-cms/file/getToken',params) 9 | }, 10 | remove: params=>{ 11 | return API.DELETE('/api-cms/file', params) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /dist/index.html: -------------------------------------------------------------------------------- 1 | clouddo
-------------------------------------------------------------------------------- /.idea/clouddo-view.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 13 | 29 | -------------------------------------------------------------------------------- /src/api/api_menu.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 菜单相关的api 3 | * @author bootdo 1992lcg@163.com 4 | */ 5 | import * as API from './' 6 | 7 | export default { 8 | 9 | menus: params=>{ 10 | return API.GET('/api-admin/menu',params) 11 | }, 12 | editMenu: params=>{ 13 | return API.PUT('/api-admin/menu',params) 14 | }, 15 | menuIdsByRoleId: params=>{ 16 | return API.GET('/api-admin/menu/roleId',params) 17 | }, 18 | add: params=>{ 19 | return API.POST('/api-admin/menu',params) 20 | }, 21 | remove: params=>{ 22 | return API.DELETE('/api-admin/menu',params) 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/api/api_role.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by bootdo. 3 | * 角色相关api 4 | */ 5 | import * as API from './' 6 | 7 | export default { 8 | 9 | //查询获取role列表(通过page分页) 10 | findList: params => { 11 | return API.GET('/api-admin/role', params) 12 | }, 13 | 14 | //查询获取一条role信息 15 | findById: id => { 16 | return API.GET('/api-admin/role/userId/'+id) 17 | }, 18 | 19 | add: params => { 20 | return API.POST(`/api-admin/role`, params) 21 | }, 22 | update: (id, params) => { 23 | return API.PUT('/api-admin/role', params) 24 | }, 25 | 26 | //单个删除role 27 | remove: id => { 28 | return API.DELETE(`/api/v1/roles/${id}`) 29 | }, 30 | 31 | //批量删除,传ids数组 32 | removeBatch: (ids) => { 33 | return API.DELETE(`/api/v1/roles/batch/${ids}`) 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /src/components/TreeTable/eval.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @Author: jianglei 3 | * @Date: 2017-10-12 12:06:49 4 | */ 5 | 'use strict' 6 | import Vue from 'vue' 7 | export default function treeToArray(data, expandAll, parent = null, level = null) { 8 | let tmp = [] 9 | Array.from(data).forEach(function(record) { 10 | if (record._expanded === undefined) { 11 | Vue.set(record, '_expanded', expandAll) 12 | } 13 | let _level = 1 14 | if (level !== undefined && level !== null) { 15 | _level = level + 1 16 | } 17 | Vue.set(record, '_level', _level) 18 | // 如果有父元素 19 | if (parent) { 20 | Vue.set(record, 'parent', parent) 21 | } 22 | tmp.push(record) 23 | if (record.children && record.children.length > 0) { 24 | const children = treeToArray(record.children, expandAll, record, _level) 25 | tmp = tmp.concat(children) 26 | } 27 | }) 28 | return tmp 29 | } 30 | -------------------------------------------------------------------------------- /src/components/quill/qeditor: -------------------------------------------------------------------------------- 1 | 2 | 7 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /src/api/api_user.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by bootdo. 3 | * 用户相关api 4 | */ 5 | import * as API from './' 6 | 7 | export default { 8 | //登录 9 | login: params => { 10 | return API.POST('/api-admin/login', params) 11 | }, 12 | //登出 13 | logout: params => { 14 | return API.GET('/api-admin/logout', params) 15 | }, 16 | tokenUser: params =>{ 17 | return API.GET('/api-admin/user/currentUser',params) 18 | }, 19 | //修改个人信息 20 | changeProfile: params => { 21 | return API.PATCH('/api/v1/users/profile', params) 22 | }, 23 | 24 | //查询获取user列表(通过page分页) 25 | findList: params => { 26 | return API.GET('/api-admin/user', params) 27 | }, 28 | 29 | //增加用户 30 | addUser:params =>{ 31 | return API.POST('/api-admin/user',params) 32 | }, 33 | //修改用户 34 | editUser:params =>{ 35 | return API.PUT('/api-admin/user',params) 36 | }, 37 | //删除用户 38 | removeUser:params =>{ 39 | return API.DELETE('/api-admin/user',params) 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | // The Vue build version to load with the `import` command 2 | // (runtime-only or standalone) has been set in webpack.base.conf with an alias. 3 | import Vue from 'vue' 4 | import App from './App' 5 | import router from './router' 6 | import ElementUI from 'element-ui' 7 | import 'element-ui/lib/theme-chalk/index.css' 8 | import '@/assets/iconfont.css' 9 | import '@/assets/styles/main.scss' 10 | import '@/assets/css/font-awesome.min.css' 11 | 12 | Vue.config.productionTip = false 13 | Vue.use(ElementUI) 14 | 15 | /* eslint-disable no-new */ 16 | new Vue({ 17 | el: '#app', 18 | router, 19 | template: '', 20 | components: {App} 21 | }) 22 | 23 | /**权限指令**/ 24 | Vue.directive('has', { 25 | bind: function(el, binding) { 26 | if (!Vue.prototype.$_has(binding.value)) { 27 | el.parentNode.removeChild(el); 28 | } 29 | } 30 | }); 31 | //权限检查方法 32 | Vue.prototype.$_has = function(value) { 33 | let isExist=false; 34 | let buttonpermsStr=localStorage.getItem("perms"); 35 | if(buttonpermsStr==undefined || buttonpermsStr==null){ 36 | return false; 37 | } 38 | let buttonperms=JSON.parse(buttonpermsStr); 39 | for(let i=0;i-1){ 41 | isExist=true; 42 | break; 43 | } 44 | } 45 | return isExist; 46 | }; 47 | 48 | -------------------------------------------------------------------------------- /src/assets/styles/main.scss: -------------------------------------------------------------------------------- 1 | body { 2 | padding: 0px; 3 | margin: 0px auto; 4 | } 5 | 6 | a { 7 | text-decoration: none; 8 | } 9 | 10 | #app { 11 | font-family: 'Avenir', Helvetica, Arial, sans-serif; 12 | -webkit-font-smoothing: antialiased; 13 | -moz-osx-font-smoothing: grayscale; 14 | text-align: left; 15 | color: #2c3e50; 16 | } 17 | 18 | //home.vue 19 | .el-menu-item, .el-submenu__title { 20 | color: #a7b1c2; 21 | } 22 | 23 | .el-menu .el-menu-item, .el-submenu .el-submenu__title { 24 | height: 46px; 25 | line-height: 46px; 26 | font-weight: 650; 27 | } 28 | 29 | .el-menu-item:hover, .el-submenu .el-menu-item:hover, .el-submenu__title:hover { 30 | background-color: #293846; 31 | color: #fff; 32 | } 33 | 34 | .el-submenu .el-menu-item { 35 | background-color: #2f4050 36 | } 37 | 38 | .el-submenu .el-menu-item:hover { 39 | background-color: #4A5064 40 | } 41 | 42 | .el-submenu .el-menu-item.is-active, .el-menu-item.is-active, 43 | .el-submenu .el-menu-item.is-active:hover, .el-menu-item.is-active:hover { 44 | //background-color: #293846; 45 | color: #fff; 46 | } 47 | 48 | .el-menu .iconfont { 49 | vertical-align: baseline; 50 | margin-right: 6px; 51 | } 52 | 53 | .el-menu .fa { 54 | vertical-align: middle; 55 | margin-right: 6px; 56 | font-size: 20px; 57 | } 58 | 59 | .warp-breadcrum{ 60 | margin: 5px 10px 15px 0px; 61 | } 62 | -------------------------------------------------------------------------------- /src/assets/iconfont.css: -------------------------------------------------------------------------------- 1 | 2 | @font-face {font-family: "iconfont"; 3 | src: url('fonts/iconfont.eot?t=1492137439402'); /* IE9*/ 4 | src: url('fonts/iconfont.eot?t=1492137439402#iefix') format('embedded-opentype'), /* IE6-IE8 */ 5 | url('fonts/iconfont.woff?t=1492137439402') format('woff'), /* chrome, firefox */ 6 | url('fonts/iconfont.ttf?t=1492137439402') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/ 7 | url('fonts/iconfont.svg?t=1492137439402#iconfont') format('svg'); /* iOS 4.1- */ 8 | } 9 | 10 | .iconfont { 11 | font-family:"iconfont" !important; 12 | font-size:16px; 13 | font-style:normal; 14 | -webkit-font-smoothing: antialiased; 15 | -moz-osx-font-smoothing: grayscale; 16 | } 17 | 18 | .icon-user:before { content: "\e600"; } 19 | 20 | .icon-home1:before { content: "\e635"; } 21 | 22 | .icon-home:before { content: "\e6a1"; } 23 | 24 | .icon-setting1:before { content: "\e601"; } 25 | 26 | .icon-setting:before { content: "\e664"; } 27 | 28 | .icon-down:before { content: "\e623"; } 29 | 30 | .icon-books1:before { content: "\e67f"; } 31 | 32 | .icon-leaf:before { content: "\e645"; } 33 | 34 | .icon-users1:before { content: "\e65a"; } 35 | 36 | .icon-menuunfold:before { content: "\eacc"; } 37 | 38 | .icon-menufold:before { content: "\eacd"; } 39 | 40 | .icon-books:before { content: "\e605"; } 41 | 42 | .icon-users:before { content: "\e883"; } 43 | 44 | .icon-books2:before { content: "\e7b9"; } 45 | 46 | -------------------------------------------------------------------------------- /src/components/user/changepwd.vue: -------------------------------------------------------------------------------- 1 | 29 | 47 | -------------------------------------------------------------------------------- /dist/static/js/manifest.1bff35b46d6bf4c63ff9.js: -------------------------------------------------------------------------------- 1 | !function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}var r=window.webpackJsonp;window.webpackJsonp=function(t,c,a){for(var i,u,f,s=0,l=[];s cloudo的前端系统 3 | 4 | ## 介绍 5 | 6 | 7 | ### 说明 8 | 9 |  这是一个用vuejs2.0和element-ui 2.x搭建的后台管理界面。 10 | 11 | 12 | ### 项目结构 13 | ``` 14 | ├── build #webpack编译相关文件目录,一般不用动 15 | ├── config #配置目录 16 | │ ├────dev.env.js #开发环境变量 17 | │ ├────index.js #主配置文件 18 | │ └────prod.env.js #生产环境变量 19 | ├── dist #生产环境下build后的文件存放目录(发布目录) 20 | ├── server #服务端代码目录,提供给前端接口 21 | ├── src #前端项目源码目录 22 | │ ├───—api #封装的接口文件目录 23 | │ ├───—assets #资源目录 24 | │ ├───—common #公用文件目录 25 | │ ├───—components #组件及页面文件目录 26 | │ ├───—router #路由目录 27 | │ ├───—App.vue #项目入口文件 28 | │ ├───—bus.js #公共通信组件 29 | │ └────main.js #项目的核心文件 30 | ├── static #开发模式下的静态资源目录 31 | ├── index.html #首页入口文件,你可以添加一些 meta 信息或同统计代码啥的 32 | ├── package.json #项目配置文件 33 | └── README.md #项目的说明文档,markdown 格式 34 | ``` 35 | 36 | ### 相关技术: 37 | 38 | * vuejs2.0:一套构建用户界面的渐进式框架,易用、灵活、高效。 39 | * element-ui:一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的组件库。 40 | * vue-router:官方的路由组件,配合vue.js创建单页应用(SPA)非常简单。 41 | * axios: 基于 Promise 的 HTTP 请求客户端,可同时在浏览器和 node.js 中使用。 42 | 43 | ## 项目编译和运行 44 | 45 | ``` bash 46 | 第一步: 先安装node v8.2.1环境,可以用nvm安装,支持多版本切换 47 | 48 | 49 | 第二步:下载项目 50 | 可以直接在git上下载项目源码。 51 | 或者通过git命令下载 52 | #git命令下载 53 | git clone 54 | 假定项目已经下载下来了。 55 | 56 | 第三步:启动服务端 57 | 58 | 59 | 60 | 第四步:启动前端 61 | (1)新开一个命令行窗口 62 | (2)定位到项目目录并安装依赖 63 | > cd 你自己的位置/clouddo-view 64 | > npm install 65 | (3)依赖安装成功后执行启动命令 66 | > npm run dev 67 | # 显示如下内容说明本地启动成功 68 | # DONE Compiled successfully in 7515ms 69 | # Listening at http://localhost:8081 70 | 71 | 72 | #正式环境编译命令 73 | # build for production with minification 74 | npm run build 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /config/index.js: -------------------------------------------------------------------------------- 1 | // see http://vuejs-templates.github.io/webpack for documentation. 2 | var path = require('path') 3 | 4 | module.exports = { 5 | build: { 6 | env: require('./prod.env'), 7 | index: path.resolve(__dirname, '../dist/index.html'), 8 | assetsRoot: path.resolve(__dirname, '../dist'), 9 | assetsSubDirectory: 'static', 10 | assetsPublicPath: '/', 11 | productionSourceMap: true, 12 | // Gzip off by default as many popular static hosts such as 13 | // Surge or Netlify already gzip all static assets for you. 14 | // Before setting to `true`, make sure to: 15 | // npm install --save-dev compression-webpack-plugin 16 | productionGzip: false, 17 | productionGzipExtensions: ['js', 'css'], 18 | // Run the build command with an extra argument to 19 | // View the bundle analyzer report after build finishes: 20 | // `npm run build --report` 21 | // Set to `true` or `false` to always turn it on or off 22 | bundleAnalyzerReport: process.env.npm_config_report 23 | }, 24 | dev: { 25 | env: require('./dev.env'), 26 | port: 8082, 27 | autoOpenBrowser: true, 28 | assetsSubDirectory: 'static', 29 | assetsPublicPath: '/', 30 | proxyTable: { 31 | // '/api': { 32 | // target: 'http://localhost:3000', 33 | // changeOrigin: true, 34 | // pathRewrite: { 35 | // '^/api': '/api' 36 | // } 37 | // } 38 | }, 39 | // CSS Sourcemaps off by default because relative paths are "buggy" 40 | // with this option, according to the CSS-Loader README 41 | // (https://github.com/webpack/css-loader#sourcemaps) 42 | // In our experience, they generally work as expected, 43 | // just be aware of this issue when enabling this option. 44 | cssSourceMap: false 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/api/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by bootdo. 3 | */ 4 | import Env from './env'; 5 | import axios from 'axios' 6 | import { 7 | bus 8 | } from '../bus.js' 9 | 10 | axios.defaults.withCredentials = true; 11 | // axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; 12 | // axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';//配置请求头 13 | 14 | 15 | //添加一个请求拦截器 16 | axios.interceptors.request.use( 17 | config => { 18 | if (window.localStorage.getItem('access-token')) { 19 | config.headers.Authorization = window.localStorage.getItem('access-token'); 20 | } 21 | return config 22 | }, 23 | error => { 24 | return Promise.reject(error) 25 | } 26 | ); 27 | // 添加一个响应拦截器 28 | axios.interceptors.response.use(function (response) { 29 | if (response.data && response.data.code) { 30 | if (parseInt(response.data.code) === 401) { 31 | //未登录 32 | bus.$emit('goto', '/login') 33 | } 34 | } 35 | 36 | return response; 37 | }, function (error) { 38 | // Do something with response error 39 | return Promise.reject(error); 40 | }); 41 | 42 | //基地址 43 | let base = Env.baseURL; 44 | 45 | //测试使用 46 | export const ISDEV = Env.isDev; 47 | 48 | 49 | //通用方法 50 | export const POST = (url, params) => { 51 | return axios.post(`${base}${url}`, params).then(res => res.data) 52 | } 53 | 54 | export const GET = (url, params) => { 55 | return axios.get(`${base}${url}`, { 56 | params: params 57 | }).then(res => res.data) 58 | } 59 | 60 | export const PUT = (url, params) => { 61 | return axios.put(`${base}${url}`, params).then(res => res.data) 62 | } 63 | 64 | export const DELETE = (url, params) => { 65 | return axios.delete(`${base}${url}`, { 66 | params: params 67 | }).then(res => res.data) 68 | } 69 | 70 | export const PATCH = (url, params) => { 71 | return axios.patch(`${base}${url}`, params).then(res => res.data) 72 | } 73 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "clouddo-view", 3 | "version": "1.2.0", 4 | "description": "A Vue.js project for admin", 5 | "author": "bootdo@163.com", 6 | "private": true, 7 | "scripts": { 8 | "server": "node server/bin/www", 9 | "dev": "node build/dev-server.js", 10 | "build": "node build/build.js" 11 | }, 12 | "dependencies": { 13 | "axios": "^0.16.2", 14 | "echarts": "^3.7.1", 15 | "element-ui": "^2.0.7", 16 | "lodash": "^4.17.4", 17 | "vue": "^2.5.9", 18 | "vue-router": "^2.8.1", 19 | "vue-template-compiler": "^2.5.9" 20 | }, 21 | "devDependencies": { 22 | "autoprefixer": "^6.7.2", 23 | "babel-core": "^6.26.0", 24 | "babel-loader": "^6.2.10", 25 | "babel-plugin-transform-runtime": "^6.22.0", 26 | "babel-preset-env": "^1.6.0", 27 | "babel-preset-stage-2": "^6.24.1", 28 | "babel-register": "^6.26.0", 29 | "chalk": "^1.1.3", 30 | "connect-history-api-fallback": "^1.3.0", 31 | "copy-webpack-plugin": "^4.0.1", 32 | "css-loader": "^0.26.4", 33 | "eventsource-polyfill": "^0.9.6", 34 | "express": "^4.15.4", 35 | "extract-text-webpack-plugin": "^2.1.2", 36 | "file-loader": "^0.10.0", 37 | "friendly-errors-webpack-plugin": "^1.1.3", 38 | "function-bind": "^1.1.1", 39 | "html-webpack-plugin": "^2.30.1", 40 | "http-proxy-middleware": "^0.17.3", 41 | "node-sass": "^4.5.3", 42 | "opn": "^4.0.2", 43 | "optimize-css-assets-webpack-plugin": "^1.3.2", 44 | "ora": "^1.3.0", 45 | "rimraf": "^2.6.2", 46 | "sass-loader": "^6.0.6", 47 | "semver": "^5.4.1", 48 | "style-loader": "^0.16.1", 49 | "url-loader": "^0.5.9", 50 | "vue-loader": "^11.1.4", 51 | "vue-style-loader": "^2.0.0", 52 | "webpack": "^2.7.0", 53 | "webpack-bundle-analyzer": "^2.9.0", 54 | "webpack-dev-middleware": "^1.12.0", 55 | "webpack-hot-middleware": "^2.19.1", 56 | "webpack-merge": "^2.6.1" 57 | }, 58 | "engines": { 59 | "node": ">= 4.0.0", 60 | "npm": ">= 3.0.0" 61 | }, 62 | "browserslist": [ 63 | "> 1%", 64 | "last 2 versions", 65 | "not ie <= 8" 66 | ] 67 | } 68 | -------------------------------------------------------------------------------- /src/components/log/List.vue: -------------------------------------------------------------------------------- 1 | 33 | 34 | 78 | 79 | 82 | -------------------------------------------------------------------------------- /src/common/util.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by bootdo. 3 | */ 4 | var SIGN_REGEXP = /([yMdhsm])(\1*)/g 5 | var DEFAULT_PATTERN = 'yyyy-MM-dd' 6 | 7 | function padding(s, len) { 8 | let l = len - (s + '').length 9 | for (var i = 0; i < l; i++) { 10 | s = '0' + s 11 | } 12 | return s 13 | }; 14 | 15 | export default { 16 | getQueryStringByName: function (name) { 17 | var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i') 18 | var r = window.location.search.substr(1).match(reg) 19 | var context = '' 20 | if (r != null) { 21 | context = r[2] 22 | } 23 | reg = null 24 | r = null 25 | return context === null || context === '' || context === 'undefined' ? '' : context 26 | }, 27 | formatDate: { 28 | 29 | format: function (date, pattern) { 30 | pattern = pattern || DEFAULT_PATTERN 31 | return pattern.replace(SIGN_REGEXP, function ($0) { 32 | switch ($0.charAt(0)) { 33 | case 'y': 34 | return padding(date.getFullYear(), $0.length) 35 | case 'M': 36 | return padding(date.getMonth() + 1, $0.length) 37 | case 'd': 38 | return padding(date.getDate(), $0.length) 39 | case 'w': 40 | return date.getDay() + 1 41 | case 'h': 42 | return padding(date.getHours(), $0.length) 43 | case 'm': 44 | return padding(date.getMinutes(), $0.length) 45 | case 's': 46 | return padding(date.getSeconds(), $0.length) 47 | } 48 | }) 49 | }, 50 | parse: function (dateString, pattern) { 51 | var matchs1 = pattern.match(SIGN_REGEXP) 52 | var matchs2 = dateString.match(/(\d)+/g) 53 | if (matchs1.length === matchs2.length) { 54 | var _date = new Date(1970, 0, 1) 55 | for (var i = 0; i < matchs1.length; i++) { 56 | var _int = parseInt(matchs2[i]) 57 | var sign = matchs1[i] 58 | switch (sign.charAt(0)) { 59 | case 'y': 60 | _date.setFullYear(_int); 61 | break 62 | case 'M': 63 | _date.setMonth(_int - 1); 64 | break 65 | case 'd': 66 | _date.setDate(_int); 67 | break 68 | case 'h': 69 | _date.setHours(_int); 70 | break 71 | case 'm': 72 | _date.setMinutes(_int); 73 | break 74 | case 's': 75 | _date.setSeconds(_int); 76 | break 77 | } 78 | } 79 | return _date 80 | } 81 | return null 82 | } 83 | 84 | } 85 | 86 | } 87 | -------------------------------------------------------------------------------- /src/components/TreeTable/readme.md: -------------------------------------------------------------------------------- 1 | ## 写在前面 2 | 此组件仅提供一个创建TreeTable的解决思路 3 | 4 | ## prop说明 5 | #### *data* 6 | **必填** 7 | 8 | 原始数据,要求是一个数组或者对象 9 | ```javascript 10 | [{ 11 | key1: value1, 12 | key2: value2, 13 | children: [{ 14 | key1: value1 15 | }, 16 | { 17 | key1: value1 18 | }] 19 | }, 20 | { 21 | key1: value1 22 | }] 23 | ``` 24 | 或者 25 | ```javascript 26 | { 27 | key1: value1, 28 | key2: value2, 29 | children: [{ 30 | key1: value1 31 | }, 32 | { 33 | key1: value1 34 | }] 35 | } 36 | ``` 37 | 38 | #### columns 39 | 列属性,要求是一个数组 40 | 41 | 1. text: 显示在表头的文字 42 | 2. value: 对应data的key。treeTable将显示相应的value 43 | 3. width: 每列的宽度,为一个数字(可选) 44 | 45 | 如果你想要每个字段都有自定义的样式或者嵌套其他组件,columns可不提供,直接像在el-table一样写即可,如果没有自定义内容,提供columns将更加的便捷方便 46 | 47 | 如果你有几个字段是需要自定义的,几个不需要,那么可以将不需要自定义的字段放入columns,将需要自定义的内容放入到slot中,详情见后文 48 | ```javascript 49 | [{ 50 | value:string, 51 | text:string, 52 | width:number 53 | },{ 54 | value:string, 55 | text:string, 56 | width:number 57 | }] 58 | ``` 59 | 60 | #### expandAll 61 | 是否默认全部展开,boolean值,默认为false 62 | 63 | #### evalFunc 64 | 解析函数,function,非必须 65 | 66 | 如果不提供,将使用默认的[evalFunc](./eval.js) 67 | 68 | 如果提供了evalFunc,那么会用提供的evalFunc去解析data,并返回treeTable渲染所需要的值。如何编写一个evalFunc,请参考[*eval.js*](https://github.com/PanJiaChen/vue-element-admin/blob/master/src/components/TreeTable/eval.js)或[*customEval.js*](https://github.com/PanJiaChen/vue-element-admin/blob/master/src/views/example/table/treeTable/customEval.js) 69 | 70 | #### evalArgs 71 | 解析函数的参数,是一个数组 72 | 73 | **请注意,自定义的解析函数参数第一个为this.data,第二个参数为, this.expandAll,你不需要在evalArgs填写。一定记住,这两个参数是强制性的,并且位置不可颠倒** *this.data为需要解析的数据,this.expandAll为是否默认展开* 74 | 75 | 如你的解析函数需要的参数为`(this.data, this.expandAll,1,2,3,4)`,那么你只需要将`[1,2,3,4]`赋值给`evalArgs`就可以了 76 | 77 | 如果你的解析函数参数只有`(this.data, this.expandAll)`,那么就可以不用填写evalArgs了 78 | 79 | 具体可参考[*customEval.js*](https://github.com/PanJiaChen/vue-element-admin/blob/master/src/views/example/table/treeTable/customEval.js)的函数参数和[customTreeTable](https://github.com/PanJiaChen/vue-element-admin/blob/master/src/views/example/table/treeTable/customTreeTable.vue)的`evalArgs`属性值 80 | 81 | ## slot 82 | 这是一个自定义列的插槽。 83 | 84 | 默认情况下,treeTable只有一行行展示数据的功能。但是一般情况下,我们会要给行加上一个操作按钮或者根据当行数据展示不同的样式,这时我们就需要自定义列了。请参考[customTreeTable](https://github.com/PanJiaChen/vue-element-admin/blob/master/src/views/example/table/treeTable/customTreeTable.vue),[实例效果](http://panjiachen.github.io/vue-element-admin/#/example/table/custom-tree-table) 85 | 86 | `slot`和`columns属性`可同时存在,columns里面的数据列会在slot自定义列的左边展示 87 | 88 | ## 其他 89 | 如果有其他的需求,请参考[el-table](http://element-cn.eleme.io/#/en-US/component/table)的api自行修改index.vue 90 | -------------------------------------------------------------------------------- /src/components/welcome/index.vue: -------------------------------------------------------------------------------- 1 | 77 | 78 | 88 | 89 | 105 | -------------------------------------------------------------------------------- /src/components/TreeTable/index.vue: -------------------------------------------------------------------------------- 1 | 26 | 27 | 83 | 93 | 94 | 125 | -------------------------------------------------------------------------------- /src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Router from 'vue-router' 3 | import Home from '@/components/Home' 4 | import Dashboard from '@/components/Dashboard' 5 | import Index from '@/components/welcome/index.vue' 6 | 7 | import BookList from '@/components/role/list' 8 | 9 | import UserList from '@/components/user/list' 10 | import UserChangePwd from '@/components/user/changepwd' 11 | import UserProfile from '@/components/user/profile' 12 | 13 | import MenuList from '@/components/menu/list' 14 | 15 | import FileList from '../components/file/List.vue' 16 | 17 | import LogList from '../components/log/List' 18 | 19 | 20 | // 懒加载方式,当路由被访问的时候才加载对应组件 21 | const Login = resolve => require(['@/components/Login'], resolve) 22 | 23 | Vue.use(Router) 24 | 25 | let router = new Router({ 26 | mode: 'history', 27 | routes: [ 28 | { 29 | path: '/index', 30 | name: '首页', 31 | component: Index 32 | }, 33 | { 34 | path: '/login', 35 | name: '登录', 36 | component: Login 37 | }, 38 | { 39 | path: '/', 40 | name: 'home', 41 | component: Home, 42 | redirect: '/dashboard', 43 | leaf: true, // 只有一个节点 44 | menuShow: true, 45 | iconCls: 'fa fa-home', // 图标样式class 46 | children: [ 47 | {path: '/dashboard', component: Dashboard, name: '首页', menuShow: true} 48 | ] 49 | }, 50 | { 51 | path: '/', 52 | component: Home, 53 | name: '用户管理', 54 | menuShow: true, 55 | leaf: true, // 只有一个节点 56 | iconCls: 'fa fa-user', // 图标样式class 57 | children: [ 58 | {path: '/admin/user', component: UserList, name: '用户列表', menuShow: true} 59 | ] 60 | }, 61 | { 62 | path: '/', 63 | component: Home, 64 | name: '菜单管理', 65 | menuShow: true, 66 | leaf: true, // 只有一个节点 67 | iconCls: 'fa fa-server', // 图标样式class 68 | children: [ 69 | {path: '/admin/menu', component: MenuList, name: '菜单列表', menuShow: true} 70 | ] 71 | }, 72 | { 73 | path: '/', 74 | component: Home, 75 | name: '角色管理', 76 | menuShow: true, 77 | leaf: true, 78 | iconCls: 'fa fa-group', 79 | children: [ 80 | {path: '/admin/role', component: BookList, name: '角色管理', menuShow: true}, 81 | ] 82 | }, 83 | 84 | { 85 | path: '/', 86 | component: Home, 87 | name: '文件管理', 88 | menuShow: true, 89 | leaf: true, 90 | iconCls: 'fa fa-group', 91 | children: [ 92 | {path: '/cms/file', component: FileList, name: '文件管理', menuShow: true}, 93 | ] 94 | }, 95 | { 96 | path: '/', 97 | component: Home, 98 | name: '日志管理', 99 | menuShow: true, 100 | leaf: true, 101 | iconCls: 'fa fa-group', 102 | children: [ 103 | {path: '/base/log', component: LogList, name: '日志管理', menuShow: true}, 104 | ] 105 | }, 106 | { 107 | path: '/', 108 | component: Home, 109 | name: '设置', 110 | menuShow: true, 111 | iconCls: 'iconfont icon-setting1', 112 | children: [ 113 | {path: '/user/profile', component: UserProfile, name: '个人信息', menuShow: true}, 114 | {path: '/user/changepwd', component: UserChangePwd, name: '修改密码', menuShow: true} 115 | ] 116 | }, 117 | 118 | 119 | ] 120 | }) 121 | 122 | router.beforeEach((to, from, next) => { 123 | // console.log('to:' + to.path) 124 | if (to.path.startsWith('/login')) { 125 | window.localStorage.removeItem('access-token') 126 | //window.localStorage.removeItem('access-user') 127 | next() 128 | } else if (to.path.startsWith('/index')) { 129 | next() 130 | } else { 131 | //let user = JSON.parse(window.localStorage.getItem('access-token')) 132 | let user = window.localStorage.getItem('access-token'); 133 | if (!user) { 134 | next({path: '/login'}) 135 | } else { 136 | next() 137 | } 138 | } 139 | }) 140 | 141 | export default router 142 | -------------------------------------------------------------------------------- /src/components/user/profile.vue: -------------------------------------------------------------------------------- 1 | 32 | 33 | 107 | -------------------------------------------------------------------------------- /src/components/file/List.vue: -------------------------------------------------------------------------------- 1 | 53 | 54 | 121 | 122 | 125 | -------------------------------------------------------------------------------- /dist/static/js/0.98b04c084adca6662464.js: -------------------------------------------------------------------------------- 1 | webpackJsonp([0],{264:function(e,o,n){n(268),n(269);var t=n(7)(n(265),n(270),"data-v-1048794c",null);e.exports=t.exports},265:function(e,o,n){"use strict";Object.defineProperty(o,"__esModule",{value:!0});var t=n(104),a=n.n(t),r=n(32);o.default={data:function(){return{loading:!1,account:{username:"admin",pwd:"123456"},rules:{username:[{required:!0,message:"请输入账号",trigger:"blur"}],pwd:[{required:!0,message:"请输入密码",trigger:"blur"}]},checked:!0}},methods:{handleLogin:function(){var e=this,o=this;this.$refs.AccountFrom.validate(function(n){if(n){e.loading=!0;var t={username:e.account.username,pwd:e.account.pwd};r.a.login(t).then(function(e){o.loading=!1,e&&0===e.code?(localStorage.setItem("access-token",e.token),console.log(e.router),localStorage.setItem("menus",a()(e.router)),localStorage.setItem("perms",a()(e.perms)),o.$router.push({path:"/"})):o.$message.error({showClose:!0,message:e.msg||"登录失败",duration:2e3})},function(e){o.loading=!1,o.$message.error({showClose:!0,message:e.toString(),duration:2e3})}).catch(function(e){o.loading=!1,console.log(e),o.$message.error({showClose:!0,message:"请求出现异常",duration:2e3})})}})}}}},266:function(e,o,n){o=e.exports=n(262)(),o.push([e.i,"body{background:#dfe9fb}","",{version:3,sources:["C:/Users/bootdo/opensource/clouddo-view/src/components/Login.vue"],names:[],mappings:"AACA,KACE,kBAAoB,CACrB",file:"Login.vue",sourcesContent:["\nbody {\n background: #dfe9fb;\n}\n"],sourceRoot:""}])},267:function(e,o,n){o=e.exports=n(262)(),o.push([e.i,".login-container[data-v-1048794c]{border-radius:5px;-moz-border-radius:5px;background-clip:padding-box;margin:160px auto;width:350px;padding:35px 35px 15px;background:#fff;border:1px solid #eaeaea;box-shadow:0 0 25px #cac6c6;background:-o-linear-gradient(top,#ace,#00c1de)}.login-container .title[data-v-1048794c]{margin:0 auto 40px;text-align:center;color:#505458}.login-container .remember[data-v-1048794c]{margin:0 0 35px}","",{version:3,sources:["C:/Users/bootdo/opensource/clouddo-view/src/components/Login.vue"],names:[],mappings:"AAEA,kCAEE,kBAAmB,AACnB,uBAAwB,AACxB,4BAA6B,AAC7B,kBAAmB,AACnB,YAAa,AACb,uBAA6B,AAC7B,gBAAiB,AACjB,yBAA0B,AAC1B,4BAA6B,AAK7B,+CAAmD,CAEpD,AACD,yCACI,mBAA2B,AAC3B,kBAAmB,AACnB,aAAe,CAClB,AACD,4CACI,eAAyB,CAC5B",file:"Login.vue",sourcesContent:['\n@charset "UTF-8";\n.login-container[data-v-1048794c] {\n /*box-shadow: 0 0px 8px 0 rgba(0, 0, 0, 0.06), 0 1px 0px 0 rgba(0, 0, 0, 0.02);*/\n border-radius: 5px;\n -moz-border-radius: 5px;\n background-clip: padding-box;\n margin: 160px auto;\n width: 350px;\n padding: 35px 35px 15px 35px;\n background: #fff;\n border: 1px solid #eaeaea;\n box-shadow: 0 0 25px #cac6c6;\n /* IE 10 */\n /*火狐*/\n /*谷歌*/\n /*Safari5.1 Chrome 10+*/\n background: -o-linear-gradient(top, #ace, #00c1de);\n /*Opera 11.10+*/\n}\n.login-container .title[data-v-1048794c] {\n margin: 0px auto 40px auto;\n text-align: center;\n color: #505458;\n}\n.login-container .remember[data-v-1048794c] {\n margin: 0px 0px 35px 0px;\n}\n'],sourceRoot:""}])},268:function(e,o,n){var t=n(266);"string"==typeof t&&(t=[[e.i,t,""]]),t.locals&&(e.exports=t.locals);n(263)("012a3c38",t,!0)},269:function(e,o,n){var t=n(267);"string"==typeof t&&(t=[[e.i,t,""]]),t.locals&&(e.exports=t.locals);n(263)("eb8f2b52",t,!0)},270:function(e,o){e.exports={render:function(){var e=this,o=e.$createElement,n=e._self._c||o;return n("el-form",{ref:"AccountFrom",staticClass:"demo-ruleForm login-container",attrs:{model:e.account,rules:e.rules,"label-position":"left","label-width":"0px"}},[n("h3",{staticClass:"title"},[e._v("管理员登录")]),e._v(" "),n("el-form-item",{attrs:{prop:"username"}},[n("el-input",{attrs:{type:"text","auto-complete":"off",placeholder:"账号"},model:{value:e.account.username,callback:function(o){e.$set(e.account,"username",o)},expression:"account.username"}})],1),e._v(" "),n("el-form-item",{attrs:{prop:"pwd"}},[n("el-input",{attrs:{type:"password","auto-complete":"off",placeholder:"密码"},model:{value:e.account.pwd,callback:function(o){e.$set(e.account,"pwd",o)},expression:"account.pwd"}})],1),e._v(" "),n("el-form-item",{staticStyle:{width:"100%"}},[n("el-button",{staticStyle:{width:"100%"},attrs:{type:"primary",loading:e.loading},nativeOn:{click:function(o){o.preventDefault(),e.handleLogin(o)}}},[e._v("登录")])],1)],1)},staticRenderFns:[]}}}); 2 | //# sourceMappingURL=0.98b04c084adca6662464.js.map -------------------------------------------------------------------------------- /src/components/Login.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 102 | 107 | 147 | -------------------------------------------------------------------------------- /src/components/Home.vue: -------------------------------------------------------------------------------- 1 | 72 | 73 | 150 | 151 | 282 | -------------------------------------------------------------------------------- /src/assets/fonts/iconfont.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Created by FontForge 20120731 at Fri Apr 14 10:37:19 2017 6 | By admin 7 | 8 | 9 | 10 | 24 | 26 | 28 | 30 | 32 | 34 | 38 | 41 | 44 | 47 | 50 | 55 | 57 | 62 | 68 | 73 | 76 | 79 | 83 | 88 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /dist/static/img/iconfont.5c9ad9e.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Created by FontForge 20120731 at Fri Apr 14 10:37:19 2017 6 | By admin 7 | 8 | 9 | 10 | 24 | 26 | 28 | 30 | 32 | 34 | 38 | 41 | 44 | 47 | 50 | 55 | 57 | 62 | 68 | 73 | 76 | 79 | 83 | 88 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /src/components/menu/list.vue: -------------------------------------------------------------------------------- 1 | 116 | 117 | 283 | -------------------------------------------------------------------------------- /src/components/content/blog.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | -------------------------------------------------------------------------------- /src/components/role/list.vue: -------------------------------------------------------------------------------- 1 | 100 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | -------------------------------------------------------------------------------- /src/components/user/list.vue: -------------------------------------------------------------------------------- 1 | 119 | 120 | 351 | 352 | 355 | -------------------------------------------------------------------------------- /dist/static/js/manifest.1bff35b46d6bf4c63ff9.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["webpack:///static/js/manifest.1bff35b46d6bf4c63ff9.js","webpack:///webpack/bootstrap c53fd2980a10e39cae7c"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","parentJsonpFunction","window","chunkIds","moreModules","executeModules","chunkId","result","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","shift","s","3","e","onScriptComplete","script","onerror","onload","clearTimeout","timeout","chunk","Error","undefined","installedChunkData","Promise","resolve","promise","reject","head","document","getElementsByTagName","createElement","type","charset","async","nc","setAttribute","src","p","0","1","2","setTimeout","appendChild","m","c","value","d","name","getter","o","defineProperty","configurable","enumerable","get","n","__esModule","object","property","oe","err","console","error"],"mappings":"CAAS,SAAUA,GCuCnB,QAAAC,GAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAE,OAGA,IAAAC,GAAAF,EAAAD,IACAI,EAAAJ,EACAK,GAAA,EACAH,WAUA,OANAJ,GAAAE,GAAAM,KAAAH,EAAAD,QAAAC,IAAAD,QAAAH,GAGAI,EAAAE,GAAA,EAGAF,EAAAD,QA1DA,GAAAK,GAAAC,OAAA,YACAA,QAAA,sBAAAC,EAAAC,EAAAC,GAIA,IADA,GAAAX,GAAAY,EAAAC,EAAAT,EAAA,EAAAU,KACQV,EAAAK,EAAAM,OAAoBX,IAC5BQ,EAAAH,EAAAL,GACAY,EAAAJ,IACAE,EAAAG,KAAAD,EAAAJ,GAAA,IAEAI,EAAAJ,GAAA,CAEA,KAAAZ,IAAAU,GACAQ,OAAAC,UAAAC,eAAAd,KAAAI,EAAAV,KACAF,EAAAE,GAAAU,EAAAV,GAIA,KADAO,KAAAE,EAAAC,EAAAC,GACAG,EAAAC,QACAD,EAAAO,SAEA,IAAAV,EACA,IAAAP,EAAA,EAAYA,EAAAO,EAAAI,OAA2BX,IACvCS,EAAAd,IAAAuB,EAAAX,EAAAP,GAGA,OAAAS,GAIA,IAAAZ,MAGAe,GACAO,EAAA,EA6BAxB,GAAAyB,EAAA,SAAAZ,GA+BA,QAAAa,KAEAC,EAAAC,QAAAD,EAAAE,OAAA,KACAC,aAAAC,EACA,IAAAC,GAAAf,EAAAJ,EACA,KAAAmB,IACAA,GACAA,EAAA,MAAAC,OAAA,iBAAApB,EAAA,aAEAI,EAAAJ,OAAAqB,IAvCA,GAAAC,GAAAlB,EAAAJ,EACA,QAAAsB,EACA,UAAAC,SAAA,SAAAC,GAA0CA,KAI1C,IAAAF,EACA,MAAAA,GAAA,EAIA,IAAAG,GAAA,GAAAF,SAAA,SAAAC,EAAAE,GACAJ,EAAAlB,EAAAJ,IAAAwB,EAAAE,IAEAJ,GAAA,GAAAG,CAGA,IAAAE,GAAAC,SAAAC,qBAAA,WACAf,EAAAc,SAAAE,cAAA,SACAhB,GAAAiB,KAAA,kBACAjB,EAAAkB,QAAA,QACAlB,EAAAmB,OAAA,EACAnB,EAAAI,QAAA,KAEA/B,EAAA+C,IACApB,EAAAqB,aAAA,QAAAhD,EAAA+C,IAEApB,EAAAsB,IAAAjD,EAAAkD,EAAA,aAAArC,EAAA,KAAwEsC,EAAA,uBAAAC,EAAA,uBAAAC,EAAA,wBAAiFxC,GAAA,KACzJ,IAAAkB,GAAAuB,WAAA5B,EAAA,KAgBA,OAfAC,GAAAC,QAAAD,EAAAE,OAAAH,EAaAc,EAAAe,YAAA5B,GAEAW,GAIAtC,EAAAwD,EAAAzD,EAGAC,EAAAyD,EAAAvD,EAGAF,EAAAK,EAAA,SAAAqD,GAA2C,MAAAA,IAG3C1D,EAAA2D,EAAA,SAAAxD,EAAAyD,EAAAC,GACA7D,EAAA8D,EAAA3D,EAAAyD,IACAzC,OAAA4C,eAAA5D,EAAAyD,GACAI,cAAA,EACAC,YAAA,EACAC,IAAAL,KAMA7D,EAAAmE,EAAA,SAAA/D,GACA,GAAAyD,GAAAzD,KAAAgE,WACA,WAA2B,MAAAhE,GAAA,SAC3B,WAAiC,MAAAA,GAEjC,OADAJ,GAAA2D,EAAAE,EAAA,IAAAA,GACAA,GAIA7D,EAAA8D,EAAA,SAAAO,EAAAC,GAAsD,MAAAnD,QAAAC,UAAAC,eAAAd,KAAA8D,EAAAC,IAGtDtE,EAAAkD,EAAA,IAGAlD,EAAAuE,GAAA,SAAAC,GAA8D,KAApBC,SAAAC,MAAAF,GAAoBA","file":"static/js/manifest.1bff35b46d6bf4c63ff9.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// install a JSONP callback for chunk loading\n/******/ \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n/******/ \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) {\n/******/ \t\t// add \"moreModules\" to the modules object,\n/******/ \t\t// then flag all \"chunkIds\" as loaded and fire callback\n/******/ \t\tvar moduleId, chunkId, i = 0, resolves = [], result;\n/******/ \t\tfor(;i < chunkIds.length; i++) {\n/******/ \t\t\tchunkId = chunkIds[i];\n/******/ \t\t\tif(installedChunks[chunkId]) {\n/******/ \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n/******/ \t\t\t}\n/******/ \t\t\tinstalledChunks[chunkId] = 0;\n/******/ \t\t}\n/******/ \t\tfor(moduleId in moreModules) {\n/******/ \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n/******/ \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n/******/ \t\t\t}\n/******/ \t\t}\n/******/ \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules);\n/******/ \t\twhile(resolves.length) {\n/******/ \t\t\tresolves.shift()();\n/******/ \t\t}\n/******/ \t\tif(executeModules) {\n/******/ \t\t\tfor(i=0; i < executeModules.length; i++) {\n/******/ \t\t\t\tresult = __webpack_require__(__webpack_require__.s = executeModules[i]);\n/******/ \t\t\t}\n/******/ \t\t}\n/******/ \t\treturn result;\n/******/ \t};\n/******/\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// objects to store loaded and loading chunks\n/******/ \tvar installedChunks = {\n/******/ \t\t3: 0\n/******/ \t};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/ \t// This file contains only the entry chunk.\n/******/ \t// The chunk loading function for additional chunks\n/******/ \t__webpack_require__.e = function requireEnsure(chunkId) {\n/******/ \t\tvar installedChunkData = installedChunks[chunkId];\n/******/ \t\tif(installedChunkData === 0) {\n/******/ \t\t\treturn new Promise(function(resolve) { resolve(); });\n/******/ \t\t}\n/******/\n/******/ \t\t// a Promise means \"currently loading\".\n/******/ \t\tif(installedChunkData) {\n/******/ \t\t\treturn installedChunkData[2];\n/******/ \t\t}\n/******/\n/******/ \t\t// setup Promise in chunk cache\n/******/ \t\tvar promise = new Promise(function(resolve, reject) {\n/******/ \t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n/******/ \t\t});\n/******/ \t\tinstalledChunkData[2] = promise;\n/******/\n/******/ \t\t// start chunk loading\n/******/ \t\tvar head = document.getElementsByTagName('head')[0];\n/******/ \t\tvar script = document.createElement('script');\n/******/ \t\tscript.type = 'text/javascript';\n/******/ \t\tscript.charset = 'utf-8';\n/******/ \t\tscript.async = true;\n/******/ \t\tscript.timeout = 120000;\n/******/\n/******/ \t\tif (__webpack_require__.nc) {\n/******/ \t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n/******/ \t\t}\n/******/ \t\tscript.src = __webpack_require__.p + \"static/js/\" + chunkId + \".\" + {\"0\":\"98b04c084adca6662464\",\"1\":\"85f050d87ccf9607a7e8\",\"2\":\"62aa9549640ebf351371\"}[chunkId] + \".js\";\n/******/ \t\tvar timeout = setTimeout(onScriptComplete, 120000);\n/******/ \t\tscript.onerror = script.onload = onScriptComplete;\n/******/ \t\tfunction onScriptComplete() {\n/******/ \t\t\t// avoid mem leaks in IE.\n/******/ \t\t\tscript.onerror = script.onload = null;\n/******/ \t\t\tclearTimeout(timeout);\n/******/ \t\t\tvar chunk = installedChunks[chunkId];\n/******/ \t\t\tif(chunk !== 0) {\n/******/ \t\t\t\tif(chunk) {\n/******/ \t\t\t\t\tchunk[1](new Error('Loading chunk ' + chunkId + ' failed.'));\n/******/ \t\t\t\t}\n/******/ \t\t\t\tinstalledChunks[chunkId] = undefined;\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t\thead.appendChild(script);\n/******/\n/******/ \t\treturn promise;\n/******/ \t};\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/\";\n/******/\n/******/ \t// on error function for async loading\n/******/ \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n/******/ })\n/************************************************************************/\n/******/ ([]);\n\n\n// WEBPACK FOOTER //\n// static/js/manifest.1bff35b46d6bf4c63ff9.js"," \t// install a JSONP callback for chunk loading\n \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) {\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [], result;\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules);\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n \t\tif(executeModules) {\n \t\t\tfor(i=0; i < executeModules.length; i++) {\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = executeModules[i]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t};\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// objects to store loaded and loading chunks\n \tvar installedChunks = {\n \t\t3: 0\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData === 0) {\n \t\t\treturn new Promise(function(resolve) { resolve(); });\n \t\t}\n\n \t\t// a Promise means \"currently loading\".\n \t\tif(installedChunkData) {\n \t\t\treturn installedChunkData[2];\n \t\t}\n\n \t\t// setup Promise in chunk cache\n \t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t});\n \t\tinstalledChunkData[2] = promise;\n\n \t\t// start chunk loading\n \t\tvar head = document.getElementsByTagName('head')[0];\n \t\tvar script = document.createElement('script');\n \t\tscript.type = 'text/javascript';\n \t\tscript.charset = 'utf-8';\n \t\tscript.async = true;\n \t\tscript.timeout = 120000;\n\n \t\tif (__webpack_require__.nc) {\n \t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t}\n \t\tscript.src = __webpack_require__.p + \"static/js/\" + chunkId + \".\" + {\"0\":\"98b04c084adca6662464\",\"1\":\"85f050d87ccf9607a7e8\",\"2\":\"62aa9549640ebf351371\"}[chunkId] + \".js\";\n \t\tvar timeout = setTimeout(onScriptComplete, 120000);\n \t\tscript.onerror = script.onload = onScriptComplete;\n \t\tfunction onScriptComplete() {\n \t\t\t// avoid mem leaks in IE.\n \t\t\tscript.onerror = script.onload = null;\n \t\t\tclearTimeout(timeout);\n \t\t\tvar chunk = installedChunks[chunkId];\n \t\t\tif(chunk !== 0) {\n \t\t\t\tif(chunk) {\n \t\t\t\t\tchunk[1](new Error('Loading chunk ' + chunkId + ' failed.'));\n \t\t\t\t}\n \t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t}\n \t\t};\n \t\thead.appendChild(script);\n\n \t\treturn promise;\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap c53fd2980a10e39cae7c"],"sourceRoot":""} -------------------------------------------------------------------------------- /dist/static/js/0.98b04c084adca6662464.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["webpack:///static/js/0.98b04c084adca6662464.js","webpack:///./src/components/Login.vue","webpack:///Login.vue","webpack:///./src/components/Login.vue?14f3","webpack:///./src/components/Login.vue?56dc","webpack:///./src/components/Login.vue?4e64","webpack:///./src/components/Login.vue?09de","webpack:///./src/components/Login.vue?e145"],"names":["webpackJsonp","264","module","exports","__webpack_require__","Component","265","__webpack_exports__","Object","defineProperty","value","__WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_json_stringify__","__WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_json_stringify___default","n","__WEBPACK_IMPORTED_MODULE_1__api_api_user__","data","loading","account","username","pwd","rules","required","message","trigger","checked","methods","handleLogin","_this","this","that","$refs","AccountFrom","validate","valid","loginParams","login","then","result","code","localStorage","setItem","token","console","log","router","perms","$router","push","path","$message","error","showClose","msg","duration","err","toString","catch","266","i","version","sources","names","mappings","file","sourcesContent","sourceRoot","267","268","content","locals","269","270","render","_vm","_h","$createElement","_c","_self","ref","staticClass","attrs","model","label-position","label-width","_v","prop","type","auto-complete","placeholder","callback","$$v","$set","expression","staticStyle","width","nativeOn","click","$event","preventDefault","staticRenderFns"],"mappings":"AAAAA,cAAc,IAERC,IACA,SAAUC,EAAQC,EAASC,GCDjCA,EAAA,KACAA,EAAA,IAEA,IAAAC,GAAAD,EAAA,GAEAA,EAAA,KAEAA,EAAA,KAEA,kBAEA,KAGAF,GAAAC,QAAAE,EAAAF,SDUMG,IACA,SAAUJ,EAAQK,EAAqBH,GAE7C,YACAI,QAAOC,eAAeF,EAAqB,cAAgBG,OAAO,GAC7C,IAAIC,GAAqEP,EAAoB,KACzFQ,EAA6ER,EAAoBS,EAAEF,GACnGG,EAA8CV,EAAoB,GEb3FG,GAAA,SFoBEQ,KAAM,WACJ,OACEC,SElBN,EFmBMC,SACEC,SElBR,QFmBQC,IEjBR,UFmBMC,OACEF,WElBRG,UAAA,EAAAC,QAAA,QAAAC,QAGA,SFgBQJ,MEfRE,UAAA,EAAAC,QAAA,QAAAC,QAIA,UFaMC,SEXN,IFeEC,SACEC,YAAa,WEbjB,GAAAC,GAAAC,KFgBUC,EEfVD,IFgBMA,MAAKE,MAAMC,YAAYC,SAAS,SAAUC,GACxC,GAAIA,EEfZ,CFgBUN,EAAMX,SEfhB,CFgBU,IAAIkB,IACFhB,SAAUS,EAAMV,QEf5BC,SFgBYC,IAAKQ,EAAMV,QEdvBE,IFgBUL,GAA6D,EAAEqB,MEfzED,GACAE,KAAA,SAAAC,GFeYR,EAAKb,SEbjB,EFcgBqB,GAA0B,IAAhBA,EAAOC,MACnBC,aAAaC,QAAQ,eAAgBH,EETnDI,OFUcC,QAAQC,IAAIN,EET1BO,QFUcL,aAAaC,QAAQ,QAAS5B,IAA6EyB,EETzHO,SFUcL,aAAaC,QAAQ,QAAS5B,IAA6EyB,EELzHQ,QFOchB,EAAKiB,QAAQC,MAAOC,KENlC,OFQcnB,EAAKoB,SAASC,OACZC,WENhB,EFOgB7B,QAASe,EAAOe,KENhC,OFOgBC,SELhB,OAEA,SAAAC,GFOYzB,EAAKb,SELjB,EFMYa,EAAKoB,SAASC,OACZC,WELd,EFMc7B,QAASgC,EELvBC,WFMcF,SEJd,QAEAG,MAAA,SAAAN,GFKYrB,EAAKb,SEHjB,EFIY0B,QAAQC,IEHpBO,GFIYrB,EAAKoB,SAASC,OACZC,WEHd,EFIc7B,QEHd,SFIc+B,SEFd,eFaMI,IACA,SAAUvD,EAAQC,EAASC,GG5GjCD,EAAAD,EAAAC,QAAAC,EAAA,OAKAD,EAAA4C,MAAA7C,EAAAwD,EAAA,2BAAkD,IAAQC,QAAA,EAAAC,SAAA,oEAAAC,SAAAC,SAAA,yBAAAC,KAAA,YAAAC,gBAAA,yCAAmNC,WAAA,OHqHvQC,IACA,SAAUhE,EAAQC,EAASC,GI3HjCD,EAAAD,EAAAC,QAAAC,EAAA,OAKAD,EAAA4C,MAAA7C,EAAAwD,EAAA,4aAAmc,IAAQC,QAAA,EAAAC,SAAA,oEAAAC,SAAAC,SAAA,mNAAAC,KAAA,YAAAC,gBAAA,guBAAskCC,WAAA,OJoI3gDE,IACA,SAAUjE,EAAQC,EAASC,GKvIjC,GAAAgE,GAAAhE,EAAA,IACA,iBAAAgE,SAAAlE,EAAAwD,EAAAU,EAAA,MACAA,EAAAC,SAAAnE,EAAAC,QAAAiE,EAAAC,OAEAjE,GAAA,gBAAAgE,GAAA,ILgJME,IACA,SAAUpE,EAAQC,EAASC,GMrJjC,GAAAgE,GAAAhE,EAAA,IACA,iBAAAgE,SAAAlE,EAAAwD,EAAAU,EAAA,MACAA,EAAAC,SAAAnE,EAAAC,QAAAiE,EAAAC,OAEAjE,GAAA,gBAAAgE,GAAA,IN8JMG,IACA,SAAUrE,EAAQC,GOtKxBD,EAAAC,SAAgBqE,OAAA,WAAmB,GAAAC,GAAA7C,KAAa8C,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,CAC1E,OAAAE,GAAA,WACAE,IAAA,cACAC,YAAA,gCACAC,OACAC,MAAAR,EAAAxD,QACAG,MAAAqD,EAAArD,MACA8D,iBAAA,OACAC,cAAA,SAEGP,EAAA,MACHG,YAAA,UACGN,EAAAW,GAAA,WAAAX,EAAAW,GAAA,KAAAR,EAAA,gBACHI,OACAK,KAAA,cAEGT,EAAA,YACHI,OACAM,KAAA,OACAC,gBAAA,MACAC,YAAA,MAEAP,OACAvE,MAAA+D,EAAAxD,QAAA,SACAwE,SAAA,SAAAC,GACAjB,EAAAkB,KAAAlB,EAAAxD,QAAA,WAAAyE,IAEAE,WAAA,uBAEG,GAAAnB,EAAAW,GAAA,KAAAR,EAAA,gBACHI,OACAK,KAAA,SAEGT,EAAA,YACHI,OACAM,KAAA,WACAC,gBAAA,MACAC,YAAA,MAEAP,OACAvE,MAAA+D,EAAAxD,QAAA,IACAwE,SAAA,SAAAC,GACAjB,EAAAkB,KAAAlB,EAAAxD,QAAA,MAAAyE,IAEAE,WAAA,kBAEG,GAAAnB,EAAAW,GAAA,KAAAR,EAAA,gBACHiB,aACAC,MAAA,UAEGlB,EAAA,aACHiB,aACAC,MAAA,QAEAd,OACAM,KAAA,UACAtE,QAAAyD,EAAAzD,SAEA+E,UACAC,MAAA,SAAAC,GACAA,EAAAC,iBACAzB,EAAA/C,YAAAuE,OAGGxB,EAAAW,GAAA,iBACFe","file":"static/js/0.98b04c084adca6662464.js","sourcesContent":["webpackJsonp([0],{\n\n/***/ 264:\n/***/ (function(module, exports, __webpack_require__) {\n\n\n/* styles */\n__webpack_require__(268)\n__webpack_require__(269)\n\nvar Component = __webpack_require__(7)(\n /* script */\n __webpack_require__(265),\n /* template */\n __webpack_require__(270),\n /* scopeId */\n \"data-v-1048794c\",\n /* cssModules */\n null\n)\n\nmodule.exports = Component.exports\n\n\n/***/ }),\n\n/***/ 265:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_json_stringify__ = __webpack_require__(104);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_json_stringify___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_json_stringify__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__api_api_user__ = __webpack_require__(32);\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n data: function data() {\n return {\n loading: false,\n account: {\n username: \"admin\",\n pwd: \"123456\"\n },\n rules: {\n username: [{ required: true, message: \"请输入账号\", trigger: \"blur\" }],\n pwd: [{ required: true, message: \"请输入密码\", trigger: \"blur\" }]\n },\n checked: true\n };\n },\n\n methods: {\n handleLogin: function handleLogin() {\n var _this = this;\n\n var that = this;\n this.$refs.AccountFrom.validate(function (valid) {\n if (valid) {\n _this.loading = true;\n var loginParams = {\n username: _this.account.username,\n pwd: _this.account.pwd\n };\n __WEBPACK_IMPORTED_MODULE_1__api_api_user__[\"a\" /* default */].login(loginParams).then(function (result) {\n that.loading = false;\n if (result && result.code === 0) {\n localStorage.setItem(\"access-token\", result.token);\n console.log(result.router);\n localStorage.setItem(\"menus\", __WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_json_stringify___default()(result.router));\n localStorage.setItem(\"perms\", __WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_json_stringify___default()(result.perms));\n\n that.$router.push({ path: \"/\" });\n } else {\n that.$message.error({\n showClose: true,\n message: result.msg || \"登录失败\",\n duration: 2000\n });\n }\n }, function (err) {\n that.loading = false;\n that.$message.error({\n showClose: true,\n message: err.toString(),\n duration: 2000\n });\n }).catch(function (error) {\n that.loading = false;\n console.log(error);\n that.$message.error({\n showClose: true,\n message: \"请求出现异常\",\n duration: 2000\n });\n });\n }\n });\n }\n }\n});\n\n/***/ }),\n\n/***/ 266:\n/***/ (function(module, exports, __webpack_require__) {\n\nexports = module.exports = __webpack_require__(262)();\n// imports\n\n\n// module\nexports.push([module.i, \"body{background:#dfe9fb}\", \"\", {\"version\":3,\"sources\":[\"C:/Users/bootdo/opensource/clouddo-view/src/components/Login.vue\"],\"names\":[],\"mappings\":\"AACA,KACE,kBAAoB,CACrB\",\"file\":\"Login.vue\",\"sourcesContent\":[\"\\nbody {\\n background: #dfe9fb;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n\n// exports\n\n\n/***/ }),\n\n/***/ 267:\n/***/ (function(module, exports, __webpack_require__) {\n\nexports = module.exports = __webpack_require__(262)();\n// imports\n\n\n// module\nexports.push([module.i, \".login-container[data-v-1048794c]{border-radius:5px;-moz-border-radius:5px;background-clip:padding-box;margin:160px auto;width:350px;padding:35px 35px 15px;background:#fff;border:1px solid #eaeaea;box-shadow:0 0 25px #cac6c6;background:-o-linear-gradient(top,#ace,#00c1de)}.login-container .title[data-v-1048794c]{margin:0 auto 40px;text-align:center;color:#505458}.login-container .remember[data-v-1048794c]{margin:0 0 35px}\", \"\", {\"version\":3,\"sources\":[\"C:/Users/bootdo/opensource/clouddo-view/src/components/Login.vue\"],\"names\":[],\"mappings\":\"AAEA,kCAEE,kBAAmB,AACnB,uBAAwB,AACxB,4BAA6B,AAC7B,kBAAmB,AACnB,YAAa,AACb,uBAA6B,AAC7B,gBAAiB,AACjB,yBAA0B,AAC1B,4BAA6B,AAK7B,+CAAmD,CAEpD,AACD,yCACI,mBAA2B,AAC3B,kBAAmB,AACnB,aAAe,CAClB,AACD,4CACI,eAAyB,CAC5B\",\"file\":\"Login.vue\",\"sourcesContent\":[\"\\n@charset \\\"UTF-8\\\";\\n.login-container[data-v-1048794c] {\\n /*box-shadow: 0 0px 8px 0 rgba(0, 0, 0, 0.06), 0 1px 0px 0 rgba(0, 0, 0, 0.02);*/\\n border-radius: 5px;\\n -moz-border-radius: 5px;\\n background-clip: padding-box;\\n margin: 160px auto;\\n width: 350px;\\n padding: 35px 35px 15px 35px;\\n background: #fff;\\n border: 1px solid #eaeaea;\\n box-shadow: 0 0 25px #cac6c6;\\n /* IE 10 */\\n /*火狐*/\\n /*谷歌*/\\n /*Safari5.1 Chrome 10+*/\\n background: -o-linear-gradient(top, #ace, #00c1de);\\n /*Opera 11.10+*/\\n}\\n.login-container .title[data-v-1048794c] {\\n margin: 0px auto 40px auto;\\n text-align: center;\\n color: #505458;\\n}\\n.login-container .remember[data-v-1048794c] {\\n margin: 0px 0px 35px 0px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n\n// exports\n\n\n/***/ }),\n\n/***/ 268:\n/***/ (function(module, exports, __webpack_require__) {\n\n// style-loader: Adds some css to the DOM by adding a \n\n\n\n\n// WEBPACK FOOTER //\n// Login.vue?1fd81355","exports = module.exports = require(\"../../node_modules/css-loader/lib/css-base.js\")();\n// imports\n\n\n// module\nexports.push([module.id, \"body{background:#dfe9fb}\", \"\", {\"version\":3,\"sources\":[\"C:/Users/bootdo/opensource/clouddo-view/src/components/Login.vue\"],\"names\":[],\"mappings\":\"AACA,KACE,kBAAoB,CACrB\",\"file\":\"Login.vue\",\"sourcesContent\":[\"\\nbody {\\n background: #dfe9fb;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n\n// exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/css-loader?{\"minimize\":true,\"sourceMap\":true}!./~/vue-loader/lib/style-compiler?{\"id\":\"data-v-1048794c\",\"scoped\":false,\"hasInlineConfig\":false}!./~/vue-loader/lib/selector.js?type=styles&index=0!./src/components/Login.vue\n// module id = 266\n// module chunks = 0","exports = module.exports = require(\"../../node_modules/css-loader/lib/css-base.js\")();\n// imports\n\n\n// module\nexports.push([module.id, \".login-container[data-v-1048794c]{border-radius:5px;-moz-border-radius:5px;background-clip:padding-box;margin:160px auto;width:350px;padding:35px 35px 15px;background:#fff;border:1px solid #eaeaea;box-shadow:0 0 25px #cac6c6;background:-o-linear-gradient(top,#ace,#00c1de)}.login-container .title[data-v-1048794c]{margin:0 auto 40px;text-align:center;color:#505458}.login-container .remember[data-v-1048794c]{margin:0 0 35px}\", \"\", {\"version\":3,\"sources\":[\"C:/Users/bootdo/opensource/clouddo-view/src/components/Login.vue\"],\"names\":[],\"mappings\":\"AAEA,kCAEE,kBAAmB,AACnB,uBAAwB,AACxB,4BAA6B,AAC7B,kBAAmB,AACnB,YAAa,AACb,uBAA6B,AAC7B,gBAAiB,AACjB,yBAA0B,AAC1B,4BAA6B,AAK7B,+CAAmD,CAEpD,AACD,yCACI,mBAA2B,AAC3B,kBAAmB,AACnB,aAAe,CAClB,AACD,4CACI,eAAyB,CAC5B\",\"file\":\"Login.vue\",\"sourcesContent\":[\"\\n@charset \\\"UTF-8\\\";\\n.login-container[data-v-1048794c] {\\n /*box-shadow: 0 0px 8px 0 rgba(0, 0, 0, 0.06), 0 1px 0px 0 rgba(0, 0, 0, 0.02);*/\\n border-radius: 5px;\\n -moz-border-radius: 5px;\\n background-clip: padding-box;\\n margin: 160px auto;\\n width: 350px;\\n padding: 35px 35px 15px 35px;\\n background: #fff;\\n border: 1px solid #eaeaea;\\n box-shadow: 0 0 25px #cac6c6;\\n /* IE 10 */\\n /*火狐*/\\n /*谷歌*/\\n /*Safari5.1 Chrome 10+*/\\n background: -o-linear-gradient(top, #ace, #00c1de);\\n /*Opera 11.10+*/\\n}\\n.login-container .title[data-v-1048794c] {\\n margin: 0px auto 40px auto;\\n text-align: center;\\n color: #505458;\\n}\\n.login-container .remember[data-v-1048794c] {\\n margin: 0px 0px 35px 0px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n\n// exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/css-loader?{\"minimize\":true,\"sourceMap\":true}!./~/vue-loader/lib/style-compiler?{\"id\":\"data-v-1048794c\",\"scoped\":true,\"hasInlineConfig\":false}!./~/sass-loader/lib/loader.js?{\"sourceMap\":true}!./~/vue-loader/lib/selector.js?type=styles&index=1!./src/components/Login.vue\n// module id = 267\n// module chunks = 0","// style-loader: Adds some css to the DOM by adding a