├── .browserslistrc ├── .env.development ├── .env.production ├── .eslintrc.js ├── .gitignore ├── .prettierrc ├── .travis.yml ├── LICENSE ├── README.md ├── babel.config.js ├── package.json ├── postcss.config.js ├── public ├── favicon.ico └── index.html ├── src ├── App.vue ├── api │ ├── index.js │ └── login.js ├── assets │ ├── images │ │ └── loginwallpaper.jpg │ └── styl │ │ ├── index.styl │ │ └── variables.styl ├── components │ ├── breadcrumb │ │ └── index.vue │ ├── fullscreen │ │ └── index.vue │ ├── langselect │ │ └── index.vue │ ├── linechart │ │ └── index.vue │ ├── notice │ │ └── index.vue │ ├── piechart │ │ └── index.vue │ └── seamlessList │ │ └── index.vue ├── lang │ ├── en.js │ ├── index.js │ └── zh.js ├── main.js ├── mock │ ├── index.js │ └── login.js ├── router │ ├── asyncRouterMap.js │ ├── index.js │ └── routerControl.js ├── store │ ├── getters.js │ ├── index.js │ ├── modules │ │ ├── app.js │ │ ├── permission.js │ │ ├── tagsView.js │ │ └── user.js │ └── mutaion-types.js ├── svg │ ├── category.svg │ ├── comp.svg │ ├── dashboard.svg │ ├── download.svg │ ├── earth.svg │ ├── eye.svg │ ├── fullscreen.svg │ ├── github.svg │ ├── notice.svg │ ├── ns.svg │ ├── panels.svg │ ├── table.svg │ ├── test.svg │ ├── tree.svg │ ├── user.svg │ └── widgets.svg ├── theme │ └── element-#41B883 │ │ ├── alert.css │ │ ├── aside.css │ │ ├── autocomplete.css │ │ ├── badge.css │ │ ├── base.css │ │ ├── breadcrumb-item.css │ │ ├── breadcrumb.css │ │ ├── button-group.css │ │ ├── button.css │ │ ├── card.css │ │ ├── carousel-item.css │ │ ├── carousel.css │ │ ├── cascader.css │ │ ├── checkbox-button.css │ │ ├── checkbox-group.css │ │ ├── checkbox.css │ │ ├── col.css │ │ ├── collapse-item.css │ │ ├── collapse.css │ │ ├── color-picker.css │ │ ├── container.css │ │ ├── date-picker.css │ │ ├── dialog.css │ │ ├── display.css │ │ ├── dropdown-item.css │ │ ├── dropdown-menu.css │ │ ├── dropdown.css │ │ ├── fonts │ │ ├── element-icons.ttf │ │ └── element-icons.woff │ │ ├── footer.css │ │ ├── form-item.css │ │ ├── form.css │ │ ├── header.css │ │ ├── icon.css │ │ ├── index.css │ │ ├── input-number.css │ │ ├── input.css │ │ ├── loading.css │ │ ├── main.css │ │ ├── menu-item-group.css │ │ ├── menu-item.css │ │ ├── menu.css │ │ ├── message-box.css │ │ ├── message.css │ │ ├── notification.css │ │ ├── option-group.css │ │ ├── option.css │ │ ├── pagination.css │ │ ├── popover.css │ │ ├── popper.css │ │ ├── progress.css │ │ ├── radio-button.css │ │ ├── radio-group.css │ │ ├── radio.css │ │ ├── rate.css │ │ ├── reset.css │ │ ├── row.css │ │ ├── scrollbar.css │ │ ├── select-dropdown.css │ │ ├── select.css │ │ ├── slider.css │ │ ├── spinner.css │ │ ├── step.css │ │ ├── steps.css │ │ ├── submenu.css │ │ ├── switch.css │ │ ├── tab-pane.css │ │ ├── table-column.css │ │ ├── table.css │ │ ├── tabs.css │ │ ├── tag.css │ │ ├── time-picker.css │ │ ├── time-select.css │ │ ├── tooltip.css │ │ ├── transfer.css │ │ ├── tree.css │ │ └── upload.css ├── utils │ ├── auth.js │ ├── filters.js │ ├── http.js │ ├── import.js │ ├── storage.js │ └── tools.js └── views │ ├── components │ ├── page1.vue │ ├── page2.vue │ └── page3.vue │ ├── dashboard │ └── index.vue │ ├── datatable │ └── index.vue │ ├── errorPage │ ├── 401.vue │ └── 404.vue │ ├── layout │ ├── AppMain.vue │ ├── Layout.vue │ ├── Navbar.vue │ ├── NavbarInfoDrop.vue │ ├── Sidebar.vue │ ├── SidebarItem.vue │ └── TagsView.vue │ ├── lock │ └── index.vue │ ├── login │ └── index.vue │ ├── panels │ └── index.vue │ ├── permission │ └── index.vue │ ├── profile │ └── index.vue │ └── widget │ └── index.vue └── vue.config.js /.browserslistrc: -------------------------------------------------------------------------------- 1 | > 1% 2 | last 2 versions 3 | not ie <= 8 4 | -------------------------------------------------------------------------------- /.env.development: -------------------------------------------------------------------------------- 1 | VUE_APP_TEST = 'test' -------------------------------------------------------------------------------- /.env.production: -------------------------------------------------------------------------------- 1 | outputDir = 'dist' 2 | baseUrl = '/vue-eden/' -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | env: { 4 | node: true 5 | }, 6 | extends: ["plugin:vue/essential", "@vue/prettier"], 7 | rules: { 8 | "generator-star-spacing": "off", 9 | "no-undef": "off", 10 | camelcase: "off", 11 | "jsx-quotes": "off", 12 | "no-console": process.env.NODE_ENV === "production" ? "error" : "off", 13 | "no-debugger": process.env.NODE_ENV === "production" ? "error" : "off" 14 | }, 15 | parserOptions: { 16 | parser: "babel-eslint" 17 | } 18 | }; 19 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | package-lock.json 5 | 6 | # local env files 7 | .env.local 8 | .env.*.local 9 | 10 | # Log files 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | 15 | # Editor directories and files 16 | .idea 17 | .vscode 18 | *.suo 19 | *.ntvs* 20 | *.njsproj 21 | *.sln 22 | *.sw* 23 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": false, 3 | "singleQuote": true 4 | } -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - '10' 4 | 5 | # Travis-CI Caching 6 | cache: 7 | directories: 8 | - node_modules 9 | 10 | # S: Build Lifecycle 11 | install: 12 | - npm install 13 | 14 | before_script: 15 | 16 | script: 17 | - npm run build 18 | 19 | after_script: 20 | - cd ./dist 21 | - git init 22 | - git config user.name "${U_NAME}" 23 | - git config user.email "${U_EMAIL}" 24 | - git add . 25 | - git commit -m "Update pages" 26 | - git push --force --quiet "https://${GH_TOKEN}@${GH_REF}" master:${P_BRANCH} 27 | # E: Build LifeCycle 28 | 29 | branches: 30 | only: 31 | - master 32 | 33 | env: 34 | global: 35 | #- GH_REF: github.com/yimogit/metools.git 36 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 人間開花 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 项目停止维护于2018年11月16日 2 | 3 | Vue Eden 是一个美观的后台管理系统/集成方案,简称伊甸园。Eden 在后台集成解决方案引入没有过于复杂,只包含最基础和最常用的功能。也易移除页面模块,当做基础样式模板进行开发。这使得理解 Eden 结构代码并修改都变得十分友好,代码有参考 vue-element-admin。 4 | 5 | 此项目主要使用了 vue、vuex、vue-router、element-ui、stylus 进行开发。并使用 ESLint 进行代码检查工具并配合 prettier 进行格式化,无需担心代码风格。而插件除了 echarts 外,没有引入另外的大型库。所以例如富文本编辑器、excel处理等等功能需自行添加。登陆页面参考 vue-manager,部分代码参考 vue-element-admin。 6 | 7 | 可以进[预览页面](https://bouquetrender.github.io/vue-eden/)查看 8 | 9 | ## 目录结构 10 | 11 | 一些说明:使用了 vue-svg-icon 组件,SVG 图标存放在 SVG 目录中。而主题色使用了官方推荐的[在线主题生成工具](https://elementui.github.io/theme-chalk-preview)生成的一套 css 直接在 main.js 中引入覆盖,当然你也可以通过修改使用其他方式动态更改主题色等。请求类选用了 axios,并且将请求方法逻辑分离存放在 api 目录下。 12 | 13 | ```markdown 14 | . 15 | ├── LICENSE 16 | ├── README.md 17 | ├── docs 18 | │   └── docs.md 19 | ├── package-lock.json 20 | ├── package.json 21 | ├── public 22 | │   ├── favicon.ico 23 | │   └── index.html 24 | ├── src 25 | │   ├── App.vue 26 | │   ├── api            请求接口 27 | │   ├── assets         静态资源 28 | │   ├── components     组件 29 | │   ├── lang           国际化 30 | │   ├── main.js        入口文件 31 | │   ├── mock           MOCK 数据 32 | │   ├── router         路由 33 | │   ├── store Store 34 | │   ├── svg           svg 存放目录 35 | │   ├── theme          主题色 css 36 | │   ├── utils          辅助工具方法 37 | │   └── views          页面 38 | ├── template 39 | │   └── index.vue 40 | └── vue.config.js     vue-cli3 配置文件 41 | ``` 42 | 43 | ## 特点/技术栈 44 | 45 | - 舒适配色与布局 46 | - 权限控制 47 | - 动态路由 48 | - MOCK 数据 49 | - 登录登出 50 | - 界面锁定 51 | - 伸缩侧边栏 52 | - 自适应布局 53 | - 页面标签控制 54 | - 国际化多语言 55 | - 个人中心 56 | 57 | 还有更多... 58 | 59 | 此项目主要使用了 `vue`、`vuex`、`vue-router`、`element-ui`、`stylus` 进行开发。并使用 `ESLint` 进行代码检查工具并配合 `prettier` 进行格式化,无需担心代码风格。而插件除了 echarts 外,没有引入另外的大型库。所以例如富文本编辑器、excel处理等等功能需自行添加。 60 | 61 | ## 开发环境 62 | 63 | nodejs 版本必须大于 8 以上。使用了 `vue-cli3` 脚手架进行基础搭建,这使得项目没有直接暴露 Webpack 配置文件而直接通过 vue.config.js 里配置进行更改。具体配置信息可到 [vue-cli 官方文档](https://github.com/vuejs/vue-cli/blob/dev/docs/README.md) 查看。 64 | 65 | ```js 66 | module.exports = { 67 | baseUrl: process.env.baseUrl, 68 | outputDir: process.env.outputDir, 69 | lintOnSave: true, 70 | chainWebpack: config => { 71 | config.resolve.alias 72 | .set('vue$', 'vue/dist/vue.esm.js') 73 | .set('@', resolve('src')) 74 | .set('assets', resolve('src/assets')) 75 | .set('components', resolve('src/components')) 76 | .set('api', resolve('src/api')) 77 | .set('utils', resolve('src/utils')) 78 | .set('store', resolve('src/store')) 79 | .set('router', resolve('src/router')) 80 | 81 | config.resolve.extensions 82 | .add('.js') 83 | .add('.vue') 84 | .add('.styl') 85 | } 86 | } 87 | ``` 88 | 89 | 最主要的配置如上,非常简单。目前通过 `.env.[mode]` 方式设置环境变量,你可以在目录看到 `.env.development` 与 `.env.production` 这两个文件。 90 | 91 | 92 | ## 样式 93 | 94 | 全局样式目录 `src/assets/styl/index.styl`,变量值可存放在同级目录的 `variables.styl`。而 `element-ui` 处理了主题色覆盖,覆盖样式文件存放在 `src/theme` 目录下。 95 | 96 | ## 请求联调 97 | 98 | Eden 将请求方法分离到了 api 目录下,由于使用的是 axios http 请求库所以返回的是一个 promise 对象。例子可查看 `src/views/login`,登录使用的是模拟请求。 99 | 100 | ```javascript 101 | import http from '@/utils/http' 102 | 103 | export function loginbyUser(username, password) { 104 | const data = { 105 | username, 106 | password 107 | } 108 | return http({ 109 | url: '/login/login', 110 | method: 'post', 111 | data 112 | }) 113 | } 114 | ``` 115 | 116 | 由于使用了 mock 所以会拦截请求并返回自己定义的数据。具体参考 `src/mock/index.js` 文件,每个页面的拦截方法根据路由名字写在同目录下并导入到 index.js。关闭 mock 仅需改一个变量值(有点蠢,我认为有更好的方法但目前不知如何做)。移除 mock 仅需在 `src/main.js` 中删除 `import './mock'`。 117 | 118 | ## 路由 / 权限控制 119 | 120 | 路由文件在 `src/router` 目录下。 121 | 122 | `index.js` 是最主要的路由配置,路由导入,主架构路由,可添加无需权限即可访问的路由例如404、登录页等。 123 | 124 | `asyncRouterMap.js` 是动态路由列表,新页面路由信息一般都加在这里。 125 | 126 | `routerControl.js` 是路由钩子函数处理,权限和动态路由的其中一部分代码,锁屏和跳转判断就在这里处理。 127 | 128 | 添加一个新单页十分简单,直接在 `asyncRouterMap.js` 添加即可,即使无动态路由需求也可直接添加,因为路由权限是由配置 meta 对象的 roles 实现。以下是路由配置项: 129 | 130 | ```js 131 | // 当设置 true 的时候该路由不会再侧边栏出现 132 | hidden: true 133 | 134 | // 当设置 true 的时候永远会显示根菜单,不设置的情况下只有当子路由个数大于一个时才会显示根菜单 135 | // 当一个路由下面的 children 声明的路由大于1个时,自动会变成嵌套的模式。只有一个时会将那个子路由当做根路由 136 | alwaysShow: true 137 | 138 | // 当设置 noredirect 的时候该路由不会在面包屑导航中出现 139 | redirect: 'noredirect' 140 | 141 | name:'router-name' // 设定路由的名字,必须填写 否则使用 时会出现各种问题 142 | meta : { 143 | roles: ['admin','editor'] // 设置该路由进入的权限,支持多个权限叠加 144 | title: 'title' // 设置该路由在侧边栏和面包屑中展示的名字 145 | icon: 'svg-name' // 设置该路由的图标 146 | noCache: true // 如果设置为false ,则不会被 缓存(默认 true) 147 | } 148 | ``` 149 | 150 | 侧边栏导航支持三级路由,所以你可以这样写 151 | 152 | ```js 153 | export const router = [ 154 | { 155 | path: '', 156 | component: Layout, 157 | redirect: 'test', 158 | children: [ 159 | { 160 | path: '/test', 161 | name: 'test', 162 | component: _import('test/index'), 163 | meta: { 164 | title: 'test', 165 | icon: 'svg-test', 166 | noCache: true 167 | }, 168 | children: [ 169 | // 加在这里 170 | ] 171 | } 172 | ] 173 | } 174 | ] 175 | ``` 176 | 177 | ## 构建发布 178 | 179 | 执行 `npm run build` 打包应用。如有测试预发布、正式环境等等可自行添加更改配置。环境变量分别在 `.env.development` 与 `.env.production` 这两个文件。 180 | 181 | 构建环境使用了 `webpack-bundle-analyzer` 插件不过由于我使用了 Travis ci 持续集成所以注释掉。有需要的可以将注释移除。 182 | 183 | ## 图标 184 | 185 | 可自行引用 iconfont、fontawesome、图片等等方式,这里主要是说明一下 svg 图标。svg 必须存放在 `src/svg` 目录下,因项目使用了 `vue-svg-icon` 库,可在代码中直接通过下面方式引入: 186 | 187 | ```html 188 | 189 | ``` 190 | 191 | scale 设置缩放比,name 则对应 `src/svg` 目录下想引入的 svg 的名字。可进具体的[官方演示文档](https://cenkai88.github.io/vue-svg-icon/demo/)查看 192 | 193 | ## 国际化 194 | 195 | 使用了 `vue-i18n` 来配置国际化功能,简单友好。中英文配置都在 `src/lang` 目录下。在代码中通过 `$t('app.test')` 引入对应语言文件中的 `app.test` 对象属性文字。 196 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ["@vue/app"] 3 | }; 4 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-eden", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "serve": "vue-cli-service serve", 7 | "build": "vue-cli-service build", 8 | "lint": "vue-cli-service lint" 9 | }, 10 | "repository": { 11 | "type": "git", 12 | "url": "https://github.com/Sakuyakun/vue-eden" 13 | }, 14 | "bugs": { 15 | "url": "https://github.com/Sakuyakun/vue-eden/issues" 16 | }, 17 | "dependencies": { 18 | "@tweenjs/tween.js": "^17.2.0", 19 | "axios": "^0.18.0", 20 | "dayjs": "^1.7.7", 21 | "echarts": "^4.2.0-rc.2", 22 | "element-ui": "^2.4.11", 23 | "js-cookie": "^2.2.0", 24 | "mockjs": "^1.0.1-beta3", 25 | "normalize.css": "^8.0.1", 26 | "nprogress": "^0.2.0", 27 | "query-string": "^6.2.0", 28 | "screenfull": "^3.3.3", 29 | "vue": "^2.5.17", 30 | "vue-i18n": "^8.3.2", 31 | "vue-router": "^3.0.2", 32 | "vue-seamless-scroll": "^1.1.16", 33 | "vuex": "^3.0.1" 34 | }, 35 | "devDependencies": { 36 | "@vue/cli-plugin-babel": "^3.2.0", 37 | "@vue/cli-plugin-eslint": "^3.2.1", 38 | "@vue/cli-service": "^3.2.0", 39 | "@vue/eslint-config-prettier": "^4.0.0", 40 | "babel-eslint": "^10.0.1", 41 | "eslint": "^5.8.0", 42 | "eslint-plugin-vue": "^5.0.0-0", 43 | "lint-staged": "^7.2.2", 44 | "postcss-import": "^12.0.1", 45 | "postcss-url": "^8.0.0", 46 | "stylus": "^0.54.5", 47 | "stylus-loader": "^3.0.2", 48 | "vue-svg-icon": "^1.2.9", 49 | "vue-template-compiler": "^2.5.17" 50 | }, 51 | "gitHooks": { 52 | "pre-commit": "lint-staged" 53 | }, 54 | "lint-staged": { 55 | "*.js": [ 56 | "vue-cli-service lint", 57 | "git add" 58 | ], 59 | "*.vue": [ 60 | "vue-cli-service lint", 61 | "git add" 62 | ] 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | "postcss-import": {}, 4 | "postcss-url": {}, 5 | autoprefixer: {} 6 | } 7 | }; 8 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bouquetrender/vue-eden/018cff12cb2062cef44cab3dbd5d4de34af2e4ba/public/favicon.ico -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | vue-eden 9 | 10 | 11 | 14 |
15 |
16 | loading vue-eden ... please wait a seconds 17 |
18 |
19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 13 | -------------------------------------------------------------------------------- /src/api/index.js: -------------------------------------------------------------------------------- 1 | import http from "@/utils/http"; 2 | 3 | export function login(params) { 4 | return http({ 5 | url: "", 6 | method: "post", 7 | data: params 8 | }); 9 | } 10 | 11 | export function uploadFileRequest(url, params) { 12 | return http({ 13 | method: "post", 14 | url: url, 15 | data: params, 16 | headers: { 17 | "Content-Type": "multipart/form-data" 18 | } 19 | }); 20 | } 21 | -------------------------------------------------------------------------------- /src/api/login.js: -------------------------------------------------------------------------------- 1 | import http from "@/utils/http"; 2 | 3 | export function loginbyUser(username, password) { 4 | const data = { 5 | username, 6 | password 7 | }; 8 | return http({ 9 | url: "/login/login", 10 | method: "post", 11 | data 12 | }); 13 | } 14 | 15 | export function logout() { 16 | return http({ 17 | url: "/login/logout", 18 | method: "post" 19 | }); 20 | } 21 | 22 | export function getUserInfo(username) { 23 | return http({ 24 | url: "/user/info", 25 | method: "get", 26 | params: { username } 27 | }); 28 | } 29 | -------------------------------------------------------------------------------- /src/assets/images/loginwallpaper.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bouquetrender/vue-eden/018cff12cb2062cef44cab3dbd5d4de34af2e4ba/src/assets/images/loginwallpaper.jpg -------------------------------------------------------------------------------- /src/assets/styl/index.styl: -------------------------------------------------------------------------------- 1 | @import "normalize.css" 2 | @import "./variables.styl" 3 | 4 | opacity(n) 5 | opacity n 6 | if support-for-ie 7 | filter unquote('progid:DXImageTransform.Microsoft.Alpha(Opacity=' + round(n * 100) + ')') 8 | 9 | html 10 | body 11 | @extend .edenfont 12 | width 100% 13 | height 100% 14 | background-color bg-color 15 | overflow hidden 16 | 17 | ul 18 | list-style none 19 | padding 0 20 | margin 0 21 | 22 | a 23 | a:hover 24 | a:focus 25 | cursor pointer 26 | text-decoration none 27 | 28 | 29 | .el-card.is-always-shadow, 30 | .el-card.is-hover-shadow:focus, 31 | .el-card.is-hover-shadow:hover 32 | box-shadow 0 1px 6px rgba(0,0,0,.2) !important 33 | 34 | .widget-card 35 | background white 36 | height 100% 37 | width 100% 38 | overflow hidden 39 | border-radius 4px 40 | transition box-shadow .4s 41 | &:hover 42 | box-shadow 0 1px 6px rgba(0,0,0,.2) 43 | 44 | .deleteline 45 | .el-checkbox__label 46 | text-decoration line-through 47 | 48 | #app 49 | height 100% 50 | min-width 1024px 51 | -webkit-font-smoothing antialiased 52 | 53 | .eden-card 54 | background eden-card-bg 55 | padding 20px 56 | box-sizing border-box 57 | @extend .widget-card 58 | 59 | // sidebar 60 | .sidebar-wrap 61 | .el-submenu__icon-arrow 62 | color white 63 | 64 | .el-submenu 65 | .el-menu-item 66 | background-color submenu-bg !important 67 | &:hover 68 | background-color menu-hover !important 69 | 70 | // sidebar scroll 71 | .sidebar-container 72 | height 100% 73 | z-index 1005 74 | .scrollbar-wrapper 75 | height 'calc(%s + %s)' % (100% 5px) 76 | .el-scrollbar__view 77 | height 100% 78 | .el-scrollbar__wrap 79 | overflow-x hidden 80 | .el-menu 81 | @extend .edenfont-content 82 | border none 83 | height 100% 84 | width 100% !important 85 | .el-menu--collapse 86 | .el-submenu__icon-arrow 87 | display none 88 | 89 | .el-notification__content p 90 | text-align left 91 | 92 | // nprogress style 93 | #nprogress 94 | .bar 95 | background main-color !important 96 | .peg 97 | box-shadow 0 0 10px main-color, 0 0 5px main-color !important 98 | .spinner-icon 99 | border-top-color main-color !important 100 | border-left-color main-color !important 101 | 102 | // scrollbar 103 | ::-webkit-scrollbar 104 | width 6px 105 | height 6px 106 | ::-webkit-scrollbar-track 107 | background 0 0 108 | ::-webkit-scrollbar-thumb 109 | background-color scrollbar-thumb-bg 110 | border-radius 5px 111 | ::-webkit-scrollbar-thumb:hover 112 | background-color scrollbar-thumb-hover-bg 113 | ::-webkit-scrollbar-corner 114 | background-color scrollbar-corner-bg 115 | ::-webkit-scrollbar-resizer 116 | background-color scrollbar-resizer-bg 117 | body::-webkit-scrollbar 118 | width 8px 119 | body::-webkit-scrollbar-thumb 120 | background-color body-scrollbar-thumb-bg -------------------------------------------------------------------------------- /src/assets/styl/variables.styl: -------------------------------------------------------------------------------- 1 | bg-color = #f1f2f7 2 | tags-bar-color = #f1f2f7 3 | main-color = #41b883 4 | sub-color = #2e5273 5 | submenu-bg = #374b63 6 | menu-hover = #1f2d3d 7 | eden-card-bg = #fff 8 | 9 | el-aside-bg = #556d84 10 | el-aside-color = #fff 11 | 12 | tag-border = #e9eaec 13 | tag-color = #4c4c4c 14 | tag-close = #659c84 15 | tag-active-bg = #32b177 16 | tag-active-color = #fff 17 | 18 | scrollbar-thumb-bg = #ccc 19 | scrollbar-thumb-hover-bg = #666 20 | scrollbar-corner-bg = #535353 21 | scrollbar-resizer-bg = #FF6E00 22 | body-scrollbar-thumb-bg = #ddd 23 | 24 | flex-center = @block { 25 | display flex 26 | align-items center 27 | justify-content flex-end 28 | } 29 | 30 | .edenfont 31 | font-family 'Avenir', "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "微软雅黑", Arial, sans-serif 32 | .edenfont-content 33 | font-family "PingFang SC", "Helvetica Neue", Helvetica, "Microsoft YaHei", "微软雅黑", Arial, sans-serif !important 34 | -------------------------------------------------------------------------------- /src/components/breadcrumb/index.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 58 | 59 | 75 | 76 | 77 | 90 | -------------------------------------------------------------------------------- /src/components/fullscreen/index.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 45 | 46 | 55 | -------------------------------------------------------------------------------- /src/components/langselect/index.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 36 | 37 | 49 | -------------------------------------------------------------------------------- /src/components/linechart/index.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 173 | -------------------------------------------------------------------------------- /src/components/notice/index.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 13 | 25 | -------------------------------------------------------------------------------- /src/components/piechart/index.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 81 | -------------------------------------------------------------------------------- /src/components/seamlessList/index.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 54 | 55 | 74 | -------------------------------------------------------------------------------- /src/lang/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | tags: { 3 | handle: "TagsConf", 4 | closeall: "Close All", 5 | closeother: "Close Other" 6 | }, 7 | route: { 8 | dashboard: "Dashboard", 9 | widget: "Widget", 10 | permission: "Permission", 11 | datatable: "Datatable", 12 | components: "Components", 13 | page1: "page1", 14 | page2: "page2", 15 | page3: "page3", 16 | profile: "Profile", 17 | panels: "Panels" 18 | }, 19 | app: { 20 | switchlang: "Switch Language Success", 21 | unlock: "UNLOCK" 22 | }, 23 | login: { 24 | edenPart1: "VUE", 25 | edenPart2: "EDEN", 26 | title: "Login Form", 27 | btn: "Login", 28 | radioEN: "English", 29 | radioZH: "Chinese", 30 | forgetpwd: "Forget Password", 31 | remember: "Remember", 32 | userplaceholder: "please enter lovely username", 33 | pwdplaceholder: "please enter lovely password", 34 | valid: { 35 | userexist: "please input username!", 36 | pwdexist: "please input password!" 37 | }, 38 | forget_email: "please enter email", 39 | forget_code: "please enter code", 40 | forget_passwrd: "please enter new password", 41 | confirm_passwrd: "confirm new password", 42 | forget_btn: "Confirm", 43 | forget_back: "Back", 44 | validfaild: "Login form does not pass !", 45 | pwdChanged: "Password Reset Successfully !" 46 | }, 47 | sidebarDropDown: { 48 | profile: "Profile", 49 | lock: "Lock", 50 | logout: "Logout" 51 | }, 52 | msg: { 53 | msg1: "You have a new message from Sakuya.", 54 | msg2: "Chekcout today eden system report.", 55 | msg3: "Eden system has some new update, check it." 56 | }, 57 | dashboard: { 58 | sr: "System Report", 59 | pch: "Pie Chart", 60 | todo: "ToDo" 61 | }, 62 | lock: { 63 | locked: "Eden system has been locked!", 64 | unlock: "Unlock Successfully!", 65 | topImg: "IMAGE HERE" 66 | } 67 | }; 68 | -------------------------------------------------------------------------------- /src/lang/index.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import VueI18n from "vue-i18n"; 3 | import Cookies from "js-cookie"; 4 | import elementEnLocale from "element-ui/lib/locale/lang/en"; // element-ui lang 5 | import elementZhLocale from "element-ui/lib/locale/lang/zh-CN"; // element-ui lang 6 | import enLocale from "./en"; 7 | import zhLocale from "./zh"; 8 | 9 | Vue.use(VueI18n); 10 | 11 | const messages = { 12 | en: { 13 | ...enLocale, 14 | ...elementEnLocale 15 | }, 16 | zh: { 17 | ...zhLocale, 18 | ...elementZhLocale 19 | } 20 | }; 21 | 22 | const i18n = new VueI18n({ 23 | locale: Cookies.get("language") || "zh", // set locale 24 | messages // set locale messages 25 | }); 26 | 27 | export default i18n; 28 | -------------------------------------------------------------------------------- /src/lang/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | tags: { 3 | handle: "标签操作", 4 | closeall: "关闭所有", 5 | closeother: "关闭其他" 6 | }, 7 | route: { 8 | dashboard: "首页", 9 | widget: "控件", 10 | permission: "权限控制", 11 | datatable: "表格", 12 | components: "组件", 13 | page1: "组件1", 14 | page2: "组件2", 15 | page3: "组件3", 16 | profile: "个人中心", 17 | panels: "卡片展示" 18 | }, 19 | app: { 20 | switchlang: "切换语言成功", 21 | unlock: "解锁" 22 | }, 23 | login: { 24 | edenPart1: "伊甸", 25 | edenPart2: "园", 26 | title: "系统登录", 27 | btn: "登录", 28 | radioEN: "英语", 29 | radioZH: "中文", 30 | forgetpwd: "忘记密码", 31 | remember: "记住我", 32 | userplaceholder: "请输入用户名", 33 | pwdplaceholder: "请输入密码", 34 | valid: { 35 | userexist: "用户名为空!", 36 | pwdexist: "密码为空!" 37 | }, 38 | forget_email: "请输入邮箱", 39 | forget_code: "请输入验证码", 40 | forget_passwrd: "请输入新密码", 41 | confirm_passwrd: "请输入确认密码", 42 | forget_btn: "重置", 43 | forget_back: "返回", 44 | validfaild: "登陆校验未通过,是不是哪里出问题了?", 45 | pwdChanged: "密码重置成功!" 46 | }, 47 | sidebarDropDown: { 48 | profile: "个人中心", 49 | lock: "锁定系统", 50 | logout: "退出登录" 51 | }, 52 | msg: { 53 | msg1: "你有一条来自管理员的新消息。", 54 | msg2: "查看本周伊甸园系统的监控汇报。", 55 | msg3: "伊甸园有一些新的升级,来一起看看吧。" 56 | }, 57 | dashboard: { 58 | sr: "系统报告", 59 | pch: "占比统计", 60 | todo: "待办事项" 61 | }, 62 | lock: { 63 | locked: "系统已被锁定!", 64 | unlock: "系统已解锁成功!", 65 | topImg: "图片展示区域" 66 | } 67 | }; 68 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import Element from "element-ui"; 3 | import scroll from "vue-seamless-scroll"; 4 | import Icon from "vue-svg-icon/Icon.vue"; 5 | import "@/theme/element-#41B883/index.css"; 6 | import "@/assets/styl/index"; 7 | import "@/mock"; 8 | 9 | import App from "@/App"; 10 | import { router } from "@/router"; 11 | import "@/router/routerControl"; 12 | import store from "@/store"; 13 | 14 | import i18n from "@/lang"; 15 | 16 | Vue.component("icon", Icon); 17 | 18 | Vue.use(scroll); 19 | Vue.use(Element, { 20 | size: "medium", 21 | i18n: (key, value) => i18n.t(key, value) 22 | }); 23 | 24 | Vue.config.productionTip = false; 25 | 26 | new Vue({ 27 | el: "#app", 28 | router, 29 | store, 30 | i18n, 31 | components: { App }, 32 | template: "" 33 | }); 34 | -------------------------------------------------------------------------------- /src/mock/index.js: -------------------------------------------------------------------------------- 1 | import Mock from "mockjs"; 2 | import loginAPI from "./login"; 3 | 4 | const openMock = true; 5 | 6 | if (openMock) { 7 | Mock.mock(/\/login\/login/, "post", loginAPI.loginbyUser); 8 | Mock.mock(/\/login\/logout/, "post", loginAPI.logout); 9 | Mock.mock(/\/user\/info/, "get", loginAPI.info); 10 | } 11 | 12 | export default Mock; 13 | -------------------------------------------------------------------------------- /src/mock/login.js: -------------------------------------------------------------------------------- 1 | import queryString from "query-string"; 2 | 3 | const userMap = { 4 | admin: { 5 | roles: ["admin"], 6 | token: "admin", 7 | introduction: "i am admin", 8 | avatar: "https://i.loli.net/2018/08/18/5b7819891bab1.jpg", 9 | name: "Admin" 10 | }, 11 | sakuya: { 12 | roles: ["sakuya"], 13 | token: "sakuya", 14 | introduction: "i am sakuya", 15 | avatar: "https://i.loli.net/2018/08/18/5b7819891bab1.jpg", 16 | name: "Sakuya" 17 | } 18 | }; 19 | 20 | export default { 21 | loginbyUser: config => { 22 | let { username } = JSON.parse(config.body); 23 | let response = {}; 24 | if (username in userMap) { 25 | response = { 26 | code: 200, 27 | data: userMap[username], 28 | message: "Login success, Welcome" 29 | }; 30 | } else { 31 | response = { 32 | code: 200, 33 | data: null, 34 | message: "Login failed, User does not exist" 35 | }; 36 | } 37 | return response; 38 | }, 39 | logout: () => { 40 | return { 41 | code: 200, 42 | data: { 43 | state: 1 44 | }, 45 | message: "Logout success" 46 | }; 47 | }, 48 | info: config => { 49 | let params = queryString.parse(config.url.replace(/^\S+(?=\?)/, "")); 50 | let response = { 51 | code: 200, 52 | data: userMap[params.username], 53 | message: "Login success, Welcome" 54 | }; 55 | return response; 56 | } 57 | }; 58 | -------------------------------------------------------------------------------- /src/router/asyncRouterMap.js: -------------------------------------------------------------------------------- 1 | import _import from "@/utils/import"; 2 | const Layout = _import("layout/Layout"); 3 | 4 | export const asyncRouterMap = [ 5 | // 个人中心 6 | { 7 | path: "/profile", 8 | component: Layout, 9 | hidden: true, 10 | children: [ 11 | { 12 | path: "index", 13 | component: _import("profile/index"), 14 | name: "profile", 15 | meta: { 16 | title: "profile", 17 | icon: "test" 18 | } 19 | } 20 | ] 21 | }, 22 | // 控件 23 | { 24 | path: "/widget", 25 | component: Layout, 26 | children: [ 27 | { 28 | path: "index", 29 | component: _import("widget/index"), 30 | name: "widget", 31 | meta: { 32 | title: "widget", 33 | icon: "widgets" 34 | } 35 | } 36 | ] 37 | }, 38 | // 卡片列表 39 | { 40 | path: "/panels", 41 | component: Layout, 42 | children: [ 43 | { 44 | path: "index", 45 | component: _import("panels/index"), 46 | name: "panels", 47 | meta: { 48 | title: "panels", 49 | icon: "panels" 50 | } 51 | } 52 | ] 53 | }, 54 | // 权限页面 只有 admin 用户才可访问 55 | { 56 | path: "/permission", 57 | component: Layout, 58 | redirect: "/permission/index", 59 | meta: { 60 | roles: ["admin"] 61 | }, 62 | children: [ 63 | { 64 | path: "index", 65 | component: _import("permission/index"), 66 | name: "permission", 67 | meta: { 68 | title: "permission", 69 | icon: "test", 70 | roles: ["admin"] 71 | } 72 | } 73 | ] 74 | }, 75 | // 表格 76 | { 77 | path: "/datatable", 78 | component: Layout, 79 | children: [ 80 | { 81 | path: "index", 82 | component: _import("datatable/index"), 83 | name: "datatable", 84 | meta: { 85 | title: "datatable", 86 | icon: "table" 87 | } 88 | } 89 | ] 90 | }, 91 | // 组件 92 | { 93 | path: "/components", 94 | component: Layout, 95 | redirect: "noredirect", 96 | name: "components", 97 | meta: { 98 | title: "components", 99 | icon: "comp" 100 | }, 101 | children: [ 102 | { 103 | path: "page1", 104 | component: _import("components/page1"), 105 | name: "page1", 106 | meta: { title: "page1" } 107 | }, 108 | { 109 | path: "page2", 110 | component: _import("components/page2"), 111 | name: "page2", 112 | meta: { title: "page2" } 113 | }, 114 | { 115 | path: "page3", 116 | component: _import("components/page3"), 117 | name: "page3", 118 | meta: { title: "page3" } 119 | } 120 | ] 121 | }, 122 | { path: "*", redirect: "/404", hidden: true } 123 | ]; 124 | -------------------------------------------------------------------------------- /src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import VueRouter from "vue-router"; 3 | import _import from "@/utils/import"; 4 | const Layout = _import("layout/Layout"); 5 | 6 | Vue.use(VueRouter); 7 | 8 | export const constantRouterMap = [ 9 | { 10 | path: "/401", 11 | component: _import("errorPage/401"), 12 | hidden: true 13 | }, 14 | { 15 | path: "/404", 16 | component: _import("errorPage/404"), 17 | hidden: true 18 | }, 19 | { 20 | path: "/login", 21 | component: _import("login/index"), 22 | hidden: true 23 | }, 24 | { 25 | path: "/lock", 26 | component: _import("lock/index"), 27 | name: "lock", 28 | hidden: true 29 | }, 30 | { 31 | path: "", 32 | component: Layout, 33 | redirect: "dashboard", 34 | children: [ 35 | { 36 | path: "dashboard", 37 | name: "dashboard", 38 | component: _import("dashboard/index"), 39 | meta: { 40 | title: "dashboard", 41 | icon: "dashboard", 42 | noCache: true 43 | } 44 | } 45 | ] 46 | } 47 | ]; 48 | 49 | export const router = new VueRouter({ 50 | routes: constantRouterMap, 51 | scrollBehavior: () => ({ y: 0 }) 52 | }); 53 | -------------------------------------------------------------------------------- /src/router/routerControl.js: -------------------------------------------------------------------------------- 1 | import { router } from "@/router"; 2 | import store from "@/store"; 3 | import nprogress from "nprogress"; 4 | import "nprogress/nprogress.css"; 5 | import { getToken } from "@/utils/auth"; 6 | import * as tools from "@/utils/tools"; 7 | 8 | const hasPermission = (roles, permissionRoles) => { 9 | if (roles.indexOf("admin") !== -1) return true; 10 | if (!permissionRoles) return true; 11 | return roles.some(role => permissionRoles.indexOf(role) !== -1); 12 | }; 13 | 14 | const whiteList = ["/login"]; 15 | 16 | router.beforeEach(async (to, from, next) => { 17 | nprogress.start(); 18 | if (store.getters.lockState === "lock" && to.name !== "lock") { 19 | next({ 20 | replace: true, 21 | name: "lock" 22 | }); 23 | } else if (store.getters.lockState === "unlock" && to.name === "lock") { 24 | next(false); 25 | } else if (getToken()) { 26 | // 如果登录过后访问登录页面则跳回主页 27 | if (to.path === "/login") { 28 | next({ path: "/" }); 29 | nprogress.done(); 30 | } else { 31 | // 请求用户信息,通过 roles 动态获取路由 32 | if (store.getters.roles.length === 0) { 33 | try { 34 | const infoResponse = await store.dispatch("getUserInfo"); 35 | const { roles } = infoResponse.data; 36 | // 根据 roles 权限生成路由表 37 | await store.dispatch("generateRoutes", roles); 38 | // 动态新生成的路由表 39 | router.addRoutes(store.getters.addRouters); 40 | next({ ...to, replace: true }); 41 | } catch (error) { 42 | await store.dispatch("felogout"); 43 | tools.notify({ 44 | type: "error", 45 | message: "Verification failed, please login again" 46 | }); 47 | next({ path: "/" }); 48 | } 49 | } else { 50 | // 如有 roles 则通过与路由 meta 的 roles 判断是否有访问该路由的权限 51 | if (hasPermission(store.getters.roles, to.meta.roles)) { 52 | next(); 53 | } else { 54 | next({ path: "/401", replace: true, query: { noGoBack: true } }); 55 | } 56 | } 57 | } 58 | } else { 59 | if (whiteList.indexOf(to.path) !== -1) { 60 | next(); 61 | } else { 62 | next("/login"); 63 | nprogress.done(); // 如果当前页是 login 则路由不会触发 after 钩子函数,需要手动处理 64 | } 65 | } 66 | }); 67 | 68 | router.afterEach(() => { 69 | nprogress.done(); 70 | }); 71 | -------------------------------------------------------------------------------- /src/store/getters.js: -------------------------------------------------------------------------------- 1 | const getters = { 2 | /* app */ 3 | sidebar: state => state.app.sidebar, 4 | getSliderStateWidth: state => { 5 | return state.app.sidebar.sliderState === "full" ? "240px" : "60px"; 6 | }, 7 | lockState: state => state.app.lock, 8 | /* permission */ 9 | permission_routers: state => state.permission.routers, 10 | addRouters: state => state.permission.addRouters, 11 | /* user */ 12 | roles: state => state.user.roles, 13 | userInfo: state => state.user 14 | }; 15 | export default getters; 16 | -------------------------------------------------------------------------------- /src/store/index.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import Vuex from "vuex"; 3 | 4 | Vue.use(Vuex); 5 | 6 | import app from "./modules/app"; 7 | import permission from "./modules/permission"; 8 | import user from "./modules/user"; 9 | import tagsView from "./modules/tagsView"; 10 | import getters from "./getters"; 11 | 12 | const store = new Vuex.Store({ 13 | modules: { 14 | app, 15 | permission, 16 | user, 17 | tagsView 18 | }, 19 | getters, 20 | strict: false 21 | }); 22 | 23 | export default store; 24 | -------------------------------------------------------------------------------- /src/store/modules/app.js: -------------------------------------------------------------------------------- 1 | import Cookies from "js-cookie"; 2 | import storage from "@/utils/storage"; 3 | import * as types from "../mutaion-types"; 4 | 5 | const app = { 6 | state: { 7 | firstLogin: storage.get("firstLogin") || "yep", 8 | version: "Alpha 1.0", 9 | language: Cookies.get("language") || "zh", 10 | sidebar: { 11 | sliderState: storage.get("sliderState") 12 | }, 13 | lock: storage.get("lock") || "unlock" 14 | }, 15 | mutations: { 16 | [types.SET_LANGUAGE]: (state, language) => { 17 | state.language = language; 18 | Cookies.set("language", language); 19 | }, 20 | [types.SET_FIRSTLOGIN]: state => { 21 | state.firstLogin = "nope"; 22 | storage.set("firstLogin", "nope"); 23 | }, 24 | [types.SET_SLIDERSTATE]: (state, newSliderState) => { 25 | state.sidebar.sliderState = newSliderState; 26 | storage.set("sliderState", newSliderState); 27 | }, 28 | [types.SET_LOCK_STATE]: (state, lockstate) => { 29 | state.lock = lockstate; 30 | storage.set("lock", lockstate); 31 | } 32 | }, 33 | actions: { 34 | toggleSideBar({ commit }) { 35 | let state = ""; 36 | storage.get("sliderState") === "full" 37 | ? (state = "collapse") 38 | : (state = "full"); 39 | commit(types.SET_SLIDERSTATE, state); 40 | }, 41 | setLanguage({ commit }, language) { 42 | commit(types.SET_LANGUAGE, language); 43 | }, 44 | setFirstLogin({ commit }) { 45 | commit(types.SET_FIRSTLOGIN); 46 | }, 47 | setSliderState({ commit }, newSliderState) { 48 | commit(types.SET_SLIDERSTATE, newSliderState); 49 | }, 50 | setLockState({ commit }, lockstate) { 51 | commit(types.SET_LOCK_STATE, lockstate); 52 | } 53 | } 54 | }; 55 | 56 | export default app; 57 | -------------------------------------------------------------------------------- /src/store/modules/permission.js: -------------------------------------------------------------------------------- 1 | import { constantRouterMap } from "@/router"; 2 | import { asyncRouterMap } from "@/router/asyncRouterMap"; 3 | import * as types from "../mutaion-types"; 4 | 5 | const routePermission = (roles, route) => { 6 | if (route.meta && route.meta.roles) { 7 | return roles.some(role => route.meta.roles.indexOf(role) > -1); 8 | } else { 9 | return true; 10 | } 11 | }; 12 | 13 | const filterAsyncRouter = (asyncRouterMap, roles) => { 14 | const routers = asyncRouterMap.filter(route => { 15 | if (routePermission(roles, route)) { 16 | if (route.children && route.children.length) { 17 | route.children = filterAsyncRouter(route.children, roles); 18 | } 19 | return true; 20 | } 21 | return false; 22 | }); 23 | return routers; 24 | }; 25 | 26 | const permission = { 27 | state: { 28 | routers: constantRouterMap, 29 | addRouters: [] 30 | }, 31 | mutations: { 32 | [types.SET_ROUTERS]: (state, routers) => { 33 | state.addRouters = routers; 34 | state.routers = constantRouterMap.concat(routers); 35 | } 36 | }, 37 | actions: { 38 | generateRoutes({ commit }, roles) { 39 | return new Promise(resolve => { 40 | let routers = null; 41 | // 如果 roles 角色中存在 admin 则直接返回所有路由, 否则进行路由过滤 42 | roles.indexOf("admin") > -1 43 | ? (routers = asyncRouterMap) 44 | : (routers = filterAsyncRouter(asyncRouterMap, roles)); 45 | commit(types.SET_ROUTERS, routers); 46 | resolve(); 47 | }); 48 | } 49 | } 50 | }; 51 | 52 | export default permission; 53 | -------------------------------------------------------------------------------- /src/store/modules/tagsView.js: -------------------------------------------------------------------------------- 1 | import * as types from "../mutaion-types"; 2 | import storage from "@/utils/storage"; 3 | 4 | const setViews = visitedViews => { 5 | storage.set("visitedViews", visitedViews); 6 | }; 7 | 8 | const tagView = { 9 | state: { 10 | visitedViews: storage.get("visitedViews") || [], 11 | cachedViews: [] 12 | }, 13 | mutations: { 14 | [types.ADD_VISITED_TAG]: (state, route) => { 15 | if (state.visitedViews.some(view => view.name === route.name)) return; 16 | state.visitedViews.push({ 17 | name: route.name, 18 | title: route.meta.title || "empty-name", 19 | path: route.path 20 | }); 21 | if (route.cache) { 22 | state.cachedViews.push(route.name); 23 | } 24 | setViews(state.visitedViews); 25 | }, 26 | [types.REMOVE_VISITED_TAG]: (state, tag) => { 27 | for (let [index, viewItem] of state.visitedViews.entries()) { 28 | if (viewItem.path === tag.path) { 29 | state.visitedViews.splice(index, 1); 30 | break; 31 | } 32 | } 33 | for (let [index, name] of state.cachedViews.entries()) { 34 | if (name === tag.name) { 35 | state.cachedViews.splice(index, 1); 36 | } 37 | } 38 | setViews(state.visitedViews); 39 | }, 40 | [types.CLOSE_OTHER_TAG]: (state, route) => { 41 | const newView = new Array({ 42 | name: route.name, 43 | title: route.meta.title || "empty-name", 44 | path: route.path 45 | }); 46 | state.visitedViews = newView; 47 | setViews(newView); 48 | }, 49 | [types.CLOSE_ALL_TAG]: state => { 50 | state.visitedViews = []; 51 | setViews([]); 52 | } 53 | }, 54 | actions: { 55 | addVisitedTag({ commit }, route) { 56 | commit(types.ADD_VISITED_TAG, route); 57 | }, 58 | removeVisitedTag({ commit, state }, tag) { 59 | return new Promise(resolve => { 60 | commit(types.REMOVE_VISITED_TAG, tag); 61 | resolve(state.visitedViews); 62 | }); 63 | }, 64 | closeOtherView({ commit }, route) { 65 | commit(types.CLOSE_OTHER_TAG, route); 66 | }, 67 | closeAllView({ commit }) { 68 | return new Promise(resolve => { 69 | commit(types.CLOSE_ALL_TAG); 70 | resolve(); 71 | }); 72 | } 73 | } 74 | }; 75 | 76 | export default tagView; 77 | -------------------------------------------------------------------------------- /src/store/modules/user.js: -------------------------------------------------------------------------------- 1 | import { loginbyUser, logout, getUserInfo } from "@/api/login"; 2 | import { setToken, removeToken } from "@/utils/auth"; 3 | import Cookies from "js-cookie"; 4 | import * as types from "../mutaion-types"; 5 | 6 | const user = { 7 | state: { 8 | token: "", 9 | roles: [], 10 | name: "", 11 | avatar: "", 12 | introduction: "" 13 | }, 14 | mutations: { 15 | [types.SET_TOKEN]: (state, token) => { 16 | state.token = token; 17 | }, 18 | [types.SET_ROLES]: (state, roles) => { 19 | state.roles = roles; 20 | }, 21 | [types.SET_INTRODUCTION]: (state, introduction) => { 22 | state.introduction = introduction; 23 | }, 24 | [types.SET_NAME]: (state, name) => { 25 | state.name = name; 26 | }, 27 | [types.SET_AVATAR]: (state, avatar) => { 28 | state.avatar = avatar; 29 | } 30 | }, 31 | actions: { 32 | loginbyUser({ commit }, { username, password }) { 33 | return new Promise(async (resolve, reject) => { 34 | try { 35 | const response = await loginbyUser(username, password); 36 | if (response.data) { 37 | commit(types.SET_TOKEN, response.data.token); 38 | setToken(response.data.token); 39 | Cookies.set("user", username); 40 | } 41 | resolve(response); 42 | } catch (error) { 43 | reject(error); 44 | } 45 | }); 46 | }, 47 | logout({ commit, state }) { 48 | return new Promise(async (resolve, reject) => { 49 | try { 50 | await logout(state.token); 51 | commit(types.SET_ROLES, ""); 52 | commit(types.SET_ROLES, []); 53 | Cookies.remove("user"); 54 | removeToken(); 55 | resolve(); 56 | } catch (error) { 57 | reject(error); 58 | } 59 | }); 60 | }, 61 | felogout({ commit }) { 62 | return new Promise(resolve => { 63 | commit(types.SET_TOKEN, ""); 64 | removeToken(); 65 | resolve(); 66 | }); 67 | }, 68 | getUserInfo({ commit }) { 69 | return new Promise(async (resolve, reject) => { 70 | try { 71 | const response = await getUserInfo(Cookies.get("user")); 72 | const { roles, name, avatar, introduction } = response.data; 73 | 74 | commit(types.SET_ROLES, roles); 75 | commit(types.SET_NAME, name); 76 | commit(types.SET_AVATAR, avatar); 77 | commit(types.SET_INTRODUCTION, introduction); 78 | 79 | resolve(response); 80 | } catch (error) { 81 | reject(error); 82 | } 83 | }); 84 | } 85 | } 86 | }; 87 | 88 | export default user; 89 | -------------------------------------------------------------------------------- /src/store/mutaion-types.js: -------------------------------------------------------------------------------- 1 | // app 2 | export const SET_LANGUAGE = "SET_LANGUAGE"; 3 | export const SET_FIRSTLOGIN = "SET_FIRSTLOGIN"; 4 | export const SET_SLIDERSTATE = "SET_SLIDERSTATE"; 5 | export const SET_LOCK_STATE = "SET_LOCK_STATE"; 6 | 7 | // user 8 | export const SET_TOKEN = "SET_TOKEN"; 9 | export const SET_ROLES = "SET_ROLES"; 10 | export const SET_INTRODUCTION = "SET_INTRODUCTION"; 11 | export const SET_NAME = "SET_NAME"; 12 | export const SET_AVATAR = "SET_AVATAR"; 13 | 14 | // permission 15 | export const SET_ROUTERS = "SET_ROUTERS"; 16 | 17 | // tagsview 18 | export const ADD_VISITED_TAG = "ADD_VISITED_TAG"; 19 | export const REMOVE_VISITED_TAG = "REMOVE_VISITED_TAG"; 20 | export const CLOSE_OTHER_TAG = "CLOSE_OTHER_TAG"; 21 | export const CLOSE_ALL_TAG = "CLOSE_ALL_TAG"; 22 | export const SET_VIEWS = "SET_VIEWS"; 23 | -------------------------------------------------------------------------------- /src/svg/category.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svg/comp.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svg/dashboard.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svg/download.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svg/earth.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svg/eye.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svg/fullscreen.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svg/github.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svg/notice.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svg/ns.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svg/panels.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svg/table.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svg/test.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svg/tree.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svg/user.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svg/widgets.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/theme/element-#41B883/alert.css: -------------------------------------------------------------------------------- 1 | .el-alert{width:100%;padding:8px 16px;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;position:relative;background-color:#fff;overflow:hidden;opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-transition:opacity .2s;transition:opacity .2s}.el-alert.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-alert--success{background-color:#f0f9eb;color:#67c23a}.el-alert--success .el-alert__description{color:#67c23a}.el-alert--info{background-color:#f4f4f5;color:#909399}.el-alert--info .el-alert__description{color:#909399}.el-alert--warning{background-color:#fdf6ec;color:#e6a23c}.el-alert--warning .el-alert__description{color:#e6a23c}.el-alert--error{background-color:#fef0f0;color:#f56c6c}.el-alert--error .el-alert__description{color:#f56c6c}.el-alert__content{display:table-cell;padding:0 8px}.el-alert__icon{font-size:16px;width:16px}.el-alert__icon.is-big{font-size:28px;width:28px}.el-alert__title{font-size:13px;line-height:18px}.el-alert__title.is-bold{font-weight:700}.el-alert .el-alert__description{font-size:12px;margin:5px 0 0}.el-alert__closebtn{font-size:12px;color:#c0c4cc;opacity:1;position:absolute;top:12px;right:15px;cursor:pointer}.el-alert__closebtn.is-customed{font-style:normal;font-size:13px;top:9px}.el-alert-fade-enter,.el-alert-fade-leave-active{opacity:0} -------------------------------------------------------------------------------- /src/theme/element-#41B883/aside.css: -------------------------------------------------------------------------------- 1 | .el-aside{overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0} -------------------------------------------------------------------------------- /src/theme/element-#41B883/badge.css: -------------------------------------------------------------------------------- 1 | .el-badge{position:relative;vertical-align:middle;display:inline-block}.el-badge__content{background-color:#f56c6c;border-radius:10px;color:#fff;display:inline-block;font-size:12px;height:18px;line-height:18px;padding:0 6px;text-align:center;white-space:nowrap;border:1px solid #fff}.el-badge__content.is-fixed{position:absolute;top:0;right:10px;-webkit-transform:translateY(-50%) translateX(100%);transform:translateY(-50%) translateX(100%)}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{height:8px;width:8px;padding:0;right:0;border-radius:50%} -------------------------------------------------------------------------------- /src/theme/element-#41B883/breadcrumb-item.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bouquetrender/vue-eden/018cff12cb2062cef44cab3dbd5d4de34af2e4ba/src/theme/element-#41B883/breadcrumb-item.css -------------------------------------------------------------------------------- /src/theme/element-#41B883/breadcrumb.css: -------------------------------------------------------------------------------- 1 | .el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb::after,.el-breadcrumb::before{display:table;content:""}.el-breadcrumb::after{clear:both}.el-breadcrumb__separator{margin:0 9px;font-weight:700;color:#c0c4cc}.el-breadcrumb__separator[class*=icon]{margin:0 6px;font-weight:400}.el-breadcrumb__item{float:left}.el-breadcrumb__inner{color:#606266}.el-breadcrumb__inner a,.el-breadcrumb__inner.is-link{font-weight:700;text-decoration:none;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1);color:#303133}.el-breadcrumb__inner a:hover,.el-breadcrumb__inner.is-link:hover{color:#41B883;cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover{font-weight:400;color:#606266;cursor:text}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none} -------------------------------------------------------------------------------- /src/theme/element-#41B883/button-group.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bouquetrender/vue-eden/018cff12cb2062cef44cab3dbd5d4de34af2e4ba/src/theme/element-#41B883/button-group.css -------------------------------------------------------------------------------- /src/theme/element-#41B883/card.css: -------------------------------------------------------------------------------- 1 | .el-card{border-radius:4px;border:1px solid #ebeef5;background-color:#fff;overflow:hidden;color:#303133;-webkit-transition:.3s;transition:.3s}.el-card.is-always-shadow,.el-card.is-hover-shadow:focus,.el-card.is-hover-shadow:hover{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-card__header{padding:18px 20px;border-bottom:1px solid #ebeef5;-webkit-box-sizing:border-box;box-sizing:border-box}.el-card__body{padding:20px} -------------------------------------------------------------------------------- /src/theme/element-#41B883/carousel-item.css: -------------------------------------------------------------------------------- 1 | .el-carousel__item,.el-carousel__mask{position:absolute;height:100%;top:0;left:0}.el-carousel__item{width:100%;display:inline-block;overflow:hidden;z-index:0}.el-carousel__item.is-active{z-index:2}.el-carousel__item.is-animating{-webkit-transition:-webkit-transform .4s ease-in-out;transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out}.el-carousel__item--card{width:50%;-webkit-transition:-webkit-transform .4s ease-in-out;transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out}.el-carousel__item--card.is-in-stage{cursor:pointer;z-index:1}.el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask,.el-carousel__item--card.is-in-stage:hover .el-carousel__mask{opacity:.12}.el-carousel__item--card.is-active{z-index:2}.el-carousel__mask{width:100%;background-color:#fff;opacity:.24;-webkit-transition:.2s;transition:.2s} -------------------------------------------------------------------------------- /src/theme/element-#41B883/carousel.css: -------------------------------------------------------------------------------- 1 | .el-carousel{overflow-x:hidden;position:relative}.el-carousel__container{position:relative;height:300px}.el-carousel__arrow{border:none;outline:0;padding:0;margin:0;height:36px;width:36px;cursor:pointer;-webkit-transition:.3s;transition:.3s;border-radius:50%;background-color:rgba(31,45,61,.11);color:#fff;position:absolute;top:50%;z-index:10;-webkit-transform:translateY(-50%);transform:translateY(-50%);text-align:center;font-size:12px}.el-carousel__arrow--left{left:16px}.el-carousel__arrow--right{right:16px}.el-carousel__arrow:hover{background-color:rgba(31,45,61,.23)}.el-carousel__arrow i{cursor:pointer}.el-carousel__indicators{position:absolute;list-style:none;bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);margin:0;padding:0;z-index:2}.el-carousel__indicators--outside{bottom:26px;text-align:center;position:static;-webkit-transform:none;transform:none}.el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:.64}.el-carousel__indicators--outside button{background-color:#c0c4cc;opacity:.24}.el-carousel__indicators--labels{left:0;right:0;-webkit-transform:none;transform:none;text-align:center}.el-carousel__indicators--labels .el-carousel__button{height:auto;width:auto;padding:2px 18px;font-size:12px}.el-carousel__indicators--labels .el-carousel__indicator{padding:6px 4px}.el-carousel__indicator{display:inline-block;background-color:transparent;padding:12px 4px;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.el-carousel__indicator.is-active button{opacity:1}.el-carousel__button{display:block;opacity:.48;width:30px;height:2px;background-color:#fff;border:none;outline:0;padding:0;margin:0;cursor:pointer;-webkit-transition:.3s;transition:.3s}.carousel-arrow-left-enter,.carousel-arrow-left-leave-active{-webkit-transform:translateY(-50%) translateX(-10px);transform:translateY(-50%) translateX(-10px);opacity:0}.carousel-arrow-right-enter,.carousel-arrow-right-leave-active{-webkit-transform:translateY(-50%) translateX(10px);transform:translateY(-50%) translateX(10px);opacity:0} -------------------------------------------------------------------------------- /src/theme/element-#41B883/checkbox-button.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bouquetrender/vue-eden/018cff12cb2062cef44cab3dbd5d4de34af2e4ba/src/theme/element-#41B883/checkbox-button.css -------------------------------------------------------------------------------- /src/theme/element-#41B883/checkbox-group.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bouquetrender/vue-eden/018cff12cb2062cef44cab3dbd5d4de34af2e4ba/src/theme/element-#41B883/checkbox-group.css -------------------------------------------------------------------------------- /src/theme/element-#41B883/checkbox.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-checkbox,.el-checkbox__input{display:inline-block;position:relative}.el-checkbox-button__inner,.el-checkbox__input{white-space:nowrap;vertical-align:middle;outline:0}.el-checkbox{color:#606266;font-weight:500;font-size:14px;cursor:pointer;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:normal;height:40px}.el-checkbox.is-bordered.is-checked{border-color:#41B883}.el-checkbox.is-bordered.is-disabled{border-color:#ebeef5;cursor:not-allowed}.el-checkbox.is-bordered+.el-checkbox.is-bordered{margin-left:10px}.el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px;height:36px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{padding:5px 15px 5px 10px;border-radius:3px;height:32px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox.is-bordered.el-checkbox--mini{padding:3px 15px 3px 10px;border-radius:3px;height:28px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox__input{cursor:pointer;line-height:1}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#dcdfe6;cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner::after{cursor:not-allowed;border-color:#c0c4cc}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{border-color:#c0c4cc}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before{background-color:#c0c4cc;border-color:#c0c4cc}.el-checkbox__input.is-checked .el-checkbox__inner,.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#41B883;border-color:#41B883}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:#c0c4cc;cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner::after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:#41B883}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#41B883}.el-checkbox__input.is-indeterminate .el-checkbox__inner::before{content:'';position:absolute;display:block;background-color:#fff;height:2px;-webkit-transform:scale(.5);transform:scale(.5);left:0;right:0;top:5px}.el-checkbox__input.is-indeterminate .el-checkbox__inner::after{display:none}.el-checkbox__inner{display:inline-block;position:relative;border:1px solid #dcdfe6;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box;width:14px;height:14px;background-color:#fff;z-index:1;-webkit-transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46);transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46)}.el-checkbox__inner:hover{border-color:#41B883}.el-checkbox__inner::after{-webkit-box-sizing:content-box;box-sizing:content-box;content:"";border:1px solid #fff;border-left:0;border-top:0;height:7px;left:4px;position:absolute;top:1px;-webkit-transform:rotate(45deg) scaleY(0);transform:rotate(45deg) scaleY(0);width:3px;-webkit-transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms,-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;-webkit-transform-origin:center;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;z-index:-1}.el-checkbox-button,.el-checkbox-button__inner{display:inline-block;position:relative}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox+.el-checkbox{margin-left:30px}.el-checkbox-button__inner{line-height:1;font-weight:500;cursor:pointer;background:#fff;border:1px solid #dcdfe6;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:0}.el-checkbox-button__inner.is-round{padding:12px 20px}.el-checkbox-button__inner:hover{color:#41B883}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;z-index:-1}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:#fff;background-color:#41B883;border-color:#41B883;-webkit-box-shadow:-1px 0 0 0 rgb(141, 212, 181);box-shadow:-1px 0 0 0 rgb(141, 212, 181)}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#41B883}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5;-webkit-box-shadow:none;box-shadow:none}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:#ebeef5}.el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#41B883}.el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px}.el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px}.el-checkbox-button--mini .el-checkbox-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:7px 15px}.el-checkbox-group{font-size:0} -------------------------------------------------------------------------------- /src/theme/element-#41B883/collapse-item.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bouquetrender/vue-eden/018cff12cb2062cef44cab3dbd5d4de34af2e4ba/src/theme/element-#41B883/collapse-item.css -------------------------------------------------------------------------------- /src/theme/element-#41B883/collapse.css: -------------------------------------------------------------------------------- 1 | .el-collapse{border-top:1px solid #ebeef5;border-bottom:1px solid #ebeef5}.el-collapse-item__header{height:48px;line-height:48px;background-color:#fff;color:#303133;cursor:pointer;border-bottom:1px solid #ebeef5;font-size:13px;font-weight:500;-webkit-transition:border-bottom-color .3s;transition:border-bottom-color .3s;outline:0}.el-collapse-item__arrow{margin-right:8px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;float:right;line-height:48px;font-weight:300}.el-collapse-item__arrow.is-active{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-collapse-item__header.focusing:focus:not(:hover){color:#41B883}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{will-change:height;background-color:#fff;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;border-bottom:1px solid #ebeef5}.el-collapse-item__content{padding-bottom:25px;font-size:13px;color:#303133;line-height:1.769230769230769}.el-collapse-item:last-child{margin-bottom:-1px} -------------------------------------------------------------------------------- /src/theme/element-#41B883/color-picker.css: -------------------------------------------------------------------------------- 1 | .el-color-predefine{display:-webkit-box;display:-ms-flexbox;display:flex;font-size:12px;margin-top:8px;width:280px}.el-color-predefine__colors{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-wrap:wrap;flex-wrap:wrap}.el-color-predefine__color-selector{margin:0 0 8px 8px;width:20px;height:20px;border-radius:4px;cursor:pointer}.el-color-predefine__color-selector:nth-child(10n+1){margin-left:0}.el-color-predefine__color-selector.selected{-webkit-box-shadow:0 0 3px 2px #41B883;box-shadow:0 0 3px 2px #41B883}.el-color-predefine__color-selector>div{display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;border-radius:3px}.el-color-predefine__color-selector.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-hue-slider{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;width:280px;height:12px;background-color:red;padding:0 2px}.el-color-hue-slider__bar{position:relative;background:-webkit-gradient(linear,left top,right top,from(red),color-stop(17%,#ff0),color-stop(33%,#0f0),color-stop(50%,#0ff),color-stop(67%,#00f),color-stop(83%,#f0f),to(red));background:linear-gradient(to right,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);height:100%}.el-color-hue-slider__thumb{position:absolute;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid #f0f0f0;-webkit-box-shadow:0 0 2px rgba(0,0,0,.6);box-shadow:0 0 2px rgba(0,0,0,.6);z-index:1}.el-color-hue-slider.is-vertical{width:12px;height:180px;padding:2px 0}.el-color-hue-slider.is-vertical .el-color-hue-slider__bar{background:-webkit-gradient(linear,left top,left bottom,from(red),color-stop(17%,#ff0),color-stop(33%,#0f0),color-stop(50%,#0ff),color-stop(67%,#00f),color-stop(83%,#f0f),to(red));background:linear-gradient(to bottom,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}.el-color-hue-slider.is-vertical .el-color-hue-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-svpanel{position:relative;width:280px;height:180px}.el-color-svpanel__black,.el-color-svpanel__white{position:absolute;top:0;left:0;right:0;bottom:0}.el-color-svpanel__white{background:-webkit-gradient(linear,left top,right top,from(#fff),to(rgba(255,255,255,0)));background:linear-gradient(to right,#fff,rgba(255,255,255,0))}.el-color-svpanel__black{background:-webkit-gradient(linear,left bottom,left top,from(#000),to(transparent));background:linear-gradient(to top,#000,transparent)}.el-color-svpanel__cursor{position:absolute}.el-color-svpanel__cursor>div{cursor:head;width:4px;height:4px;-webkit-box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);border-radius:50%;-webkit-transform:translate(-2px,-2px);transform:translate(-2px,-2px)}.el-color-alpha-slider{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;width:280px;height:12px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-alpha-slider__bar{position:relative;background:-webkit-gradient(linear,left top,right top,from(rgba(255,255,255,0)),to(white));background:linear-gradient(to right,rgba(255,255,255,0) 0,#fff 100%);height:100%}.el-color-alpha-slider__thumb{position:absolute;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid #f0f0f0;-webkit-box-shadow:0 0 2px rgba(0,0,0,.6);box-shadow:0 0 2px rgba(0,0,0,.6);z-index:1}.el-color-alpha-slider.is-vertical{width:20px;height:180px}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__bar{background:-webkit-gradient(linear,left top,left bottom,from(rgba(255,255,255,0)),to(white));background:linear-gradient(to bottom,rgba(255,255,255,0) 0,#fff 100%)}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-dropdown{width:300px}.el-color-dropdown__main-wrapper{margin-bottom:6px}.el-color-dropdown__main-wrapper::after{content:"";display:table;clear:both}.el-color-dropdown__btns{margin-top:6px;text-align:right}.el-color-dropdown__value{float:left;line-height:26px;font-size:12px;color:#000;width:160px}.el-color-dropdown__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:0;font-size:12px}.el-color-dropdown__btn[disabled]{color:#ccc;cursor:not-allowed}.el-color-dropdown__btn:hover{color:#41B883;border-color:#41B883}.el-color-dropdown__link-btn{cursor:pointer;color:#41B883;text-decoration:none;padding:15px;font-size:12px}.el-color-dropdown__link-btn:hover{color:tint(primary,20%)}.el-color-picker{display:inline-block;position:relative;line-height:normal;height:40px}.el-color-picker.is-disabled .el-color-picker__trigger{cursor:not-allowed}.el-color-picker--medium{height:36px}.el-color-picker--medium .el-color-picker__trigger{height:36px;width:36px}.el-color-picker--medium .el-color-picker__mask{height:34px;width:34px}.el-color-picker--small{height:32px}.el-color-picker--small .el-color-picker__trigger{height:32px;width:32px}.el-color-picker--small .el-color-picker__mask{height:30px;width:30px}.el-color-picker--small .el-color-picker__empty,.el-color-picker--small .el-color-picker__icon{-webkit-transform:translate3d(-50%,-50%,0) scale(.8);transform:translate3d(-50%,-50%,0) scale(.8)}.el-color-picker--mini{height:28px}.el-color-picker--mini .el-color-picker__trigger{height:28px;width:28px}.el-color-picker--mini .el-color-picker__mask{height:26px;width:26px}.el-color-picker--mini .el-color-picker__empty,.el-color-picker--mini .el-color-picker__icon{-webkit-transform:translate3d(-50%,-50%,0) scale(.8);transform:translate3d(-50%,-50%,0) scale(.8)}.el-color-picker__mask{height:38px;width:38px;border-radius:4px;position:absolute;top:1px;left:1px;z-index:1;cursor:not-allowed;background-color:rgba(255,255,255,.7)}.el-color-picker__trigger{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;height:40px;width:40px;padding:4px;border:1px solid #e6e6e6;border-radius:4px;font-size:0;position:relative;cursor:pointer}.el-color-picker__color{position:relative;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #999;border-radius:2px;width:100%;height:100%;text-align:center}.el-color-picker__color.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-picker__color-inner{position:absolute;left:0;top:0;right:0;bottom:0}.el-color-picker__empty,.el-color-picker__icon{top:50%;left:50%;font-size:12px;position:absolute}.el-color-picker__empty{color:#999;-webkit-transform:translate3d(-50%,-50%,0);transform:translate3d(-50%,-50%,0)}.el-color-picker__icon{display:inline-block;width:100%;-webkit-transform:translate3d(-50%,-50%,0);transform:translate3d(-50%,-50%,0);color:#fff;text-align:center}.el-color-picker__panel{position:absolute;z-index:10;padding:6px;-webkit-box-sizing:content-box;box-sizing:content-box;background-color:#fff;border:1px solid #ebeef5;border-radius:4px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)} -------------------------------------------------------------------------------- /src/theme/element-#41B883/container.css: -------------------------------------------------------------------------------- 1 | .el-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;-webkit-box-sizing:border-box;box-sizing:border-box;min-width:0}.el-container.is-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column} -------------------------------------------------------------------------------- /src/theme/element-#41B883/dialog.css: -------------------------------------------------------------------------------- 1 | .v-modal-enter{-webkit-animation:v-modal-in .2s ease;animation:v-modal-in .2s ease}.v-modal-leave{-webkit-animation:v-modal-out .2s ease forwards;animation:v-modal-out .2s ease forwards}@-webkit-keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-in{0%{opacity:0}}@-webkit-keyframes v-modal-out{100%{opacity:0}}@keyframes v-modal-out{100%{opacity:0}}.v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:.5;background:#000}.el-dialog{position:relative;margin:0 auto 50px;background:#fff;border-radius:2px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.3);box-shadow:0 1px 3px rgba(0,0,0,.3);-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.el-dialog.is-fullscreen{width:100%;margin-top:0;margin-bottom:0;height:100%;overflow:auto}.el-dialog__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;margin:0}.el-dialog__header{padding:20px 20px 10px}.el-dialog__headerbtn{position:absolute;top:20px;right:20px;padding:0;background:0 0;border:none;outline:0;cursor:pointer;font-size:16px}.el-dialog__headerbtn .el-dialog__close{color:#909399}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:#41B883}.el-dialog__title{line-height:24px;font-size:18px;color:#303133}.el-dialog__body{padding:30px 20px;color:#606266;line-height:24px;font-size:14px}.el-dialog__footer{padding:10px 20px 20px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial;padding:25px 25px 30px}.el-dialog--center .el-dialog__footer{text-align:inherit}.dialog-fade-enter-active{-webkit-animation:dialog-fade-in .3s;animation:dialog-fade-in .3s}.dialog-fade-leave-active{-webkit-animation:dialog-fade-out .3s;animation:dialog-fade-out .3s}@-webkit-keyframes dialog-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes dialog-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@-webkit-keyframes dialog-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes dialog-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}} -------------------------------------------------------------------------------- /src/theme/element-#41B883/display.css: -------------------------------------------------------------------------------- 1 | @media only screen and (max-width:767px){.hidden-xs-only{display:none!important}}@media only screen and (min-width:768px){.hidden-sm-and-up{display:none!important}}@media only screen and (min-width:768px) and (max-width:991px){.hidden-sm-only{display:none!important}}@media only screen and (max-width:991px){.hidden-sm-and-down{display:none!important}}@media only screen and (min-width:992px){.hidden-md-and-up{display:none!important}}@media only screen and (min-width:992px) and (max-width:1199px){.hidden-md-only{display:none!important}}@media only screen and (max-width:1199px){.hidden-md-and-down{display:none!important}}@media only screen and (min-width:1200px){.hidden-lg-and-up{display:none!important}}@media only screen and (min-width:1200px) and (max-width:1919px){.hidden-lg-only{display:none!important}}@media only screen and (max-width:1919px){.hidden-lg-and-down{display:none!important}}@media only screen and (min-width:1920px){.hidden-xl-only{display:none!important}} -------------------------------------------------------------------------------- /src/theme/element-#41B883/dropdown-item.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bouquetrender/vue-eden/018cff12cb2062cef44cab3dbd5d4de34af2e4ba/src/theme/element-#41B883/dropdown-item.css -------------------------------------------------------------------------------- /src/theme/element-#41B883/dropdown-menu.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bouquetrender/vue-eden/018cff12cb2062cef44cab3dbd5d4de34af2e4ba/src/theme/element-#41B883/dropdown-menu.css -------------------------------------------------------------------------------- /src/theme/element-#41B883/fonts/element-icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bouquetrender/vue-eden/018cff12cb2062cef44cab3dbd5d4de34af2e4ba/src/theme/element-#41B883/fonts/element-icons.ttf -------------------------------------------------------------------------------- /src/theme/element-#41B883/fonts/element-icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bouquetrender/vue-eden/018cff12cb2062cef44cab3dbd5d4de34af2e4ba/src/theme/element-#41B883/fonts/element-icons.woff -------------------------------------------------------------------------------- /src/theme/element-#41B883/footer.css: -------------------------------------------------------------------------------- 1 | .el-footer{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0} -------------------------------------------------------------------------------- /src/theme/element-#41B883/form-item.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bouquetrender/vue-eden/018cff12cb2062cef44cab3dbd5d4de34af2e4ba/src/theme/element-#41B883/form-item.css -------------------------------------------------------------------------------- /src/theme/element-#41B883/form.css: -------------------------------------------------------------------------------- 1 | .el-form--inline .el-form-item,.el-form--inline .el-form-item__content{display:inline-block;vertical-align:top}.el-form-item::after,.el-form-item__content::after{clear:both}.el-form--label-left .el-form-item__label{text-align:left}.el-form--label-top .el-form-item__label{float:none;display:inline-block;text-align:left;padding:0 0 10px}.el-form--inline .el-form-item{margin-right:10px}.el-form--inline .el-form-item__label{float:none;display:inline-block}.el-form-item__content .el-input-group,.el-form-item__label{vertical-align:middle}.el-form--inline.el-form--label-top .el-form-item__content{display:block}.el-form-item{margin-bottom:22px}.el-form-item::after,.el-form-item::before{display:table;content:""}.el-form-item .el-form-item{margin-bottom:0}.el-form-item--mini.el-form-item,.el-form-item--small.el-form-item{margin-bottom:18px}.el-form-item .el-input__validateIcon{display:none}.el-form-item--medium .el-form-item__content,.el-form-item--medium .el-form-item__label{line-height:36px}.el-form-item--small .el-form-item__content,.el-form-item--small .el-form-item__label{line-height:32px}.el-form-item--small .el-form-item__error{padding-top:2px}.el-form-item--mini .el-form-item__content,.el-form-item--mini .el-form-item__label{line-height:28px}.el-form-item--mini .el-form-item__error{padding-top:1px}.el-form-item__label{text-align:right;float:left;font-size:14px;color:#606266;line-height:40px;padding:0 12px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-form-item__content{line-height:40px;position:relative;font-size:14px}.el-form-item__content::after,.el-form-item__content::before{display:table;content:""}.el-form-item__error{color:#f56c6c;font-size:12px;line-height:1;padding-top:4px;position:absolute;top:100%;left:0}.el-form-item__error--inline{position:relative;top:auto;left:auto;display:inline-block;margin-left:10px}.el-form-item.is-required .el-form-item__label:before{content:'*';color:#f56c6c;margin-right:4px}.el-form-item.is-error .el-input__inner,.el-form-item.is-error .el-input__inner:focus,.el-form-item.is-error .el-textarea__inner,.el-form-item.is-error .el-textarea__inner:focus{border-color:#f56c6c}.el-form-item.is-error .el-input-group__append .el-input__inner,.el-form-item.is-error .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-error .el-input__validateIcon{color:#f56c6c}.el-form-item.is-success .el-input__inner,.el-form-item.is-success .el-input__inner:focus,.el-form-item.is-success .el-textarea__inner,.el-form-item.is-success .el-textarea__inner:focus{border-color:#67c23a}.el-form-item.is-success .el-input-group__append .el-input__inner,.el-form-item.is-success .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-success .el-input__validateIcon{color:#67c23a}.el-form-item--feedback .el-input__validateIcon{display:inline-block} -------------------------------------------------------------------------------- /src/theme/element-#41B883/header.css: -------------------------------------------------------------------------------- 1 | .el-header{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0} -------------------------------------------------------------------------------- /src/theme/element-#41B883/icon.css: -------------------------------------------------------------------------------- 1 | @font-face{font-family:element-icons;src:url(fonts/element-icons.woff) format("woff"),url(fonts/element-icons.ttf) format("truetype");font-weight:400;font-style:normal}[class*=" el-icon-"],[class^=el-icon-]{font-family:element-icons!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;vertical-align:baseline;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-icon-info:before{content:"\e61a"}.el-icon-error:before{content:"\e62c"}.el-icon-success:before{content:"\e62d"}.el-icon-warning:before{content:"\e62e"}.el-icon-question:before{content:"\e634"}.el-icon-back:before{content:"\e606"}.el-icon-arrow-left:before{content:"\e600"}.el-icon-arrow-down:before{content:"\e603"}.el-icon-arrow-right:before{content:"\e604"}.el-icon-arrow-up:before{content:"\e605"}.el-icon-caret-left:before{content:"\e60a"}.el-icon-caret-bottom:before{content:"\e60b"}.el-icon-caret-top:before{content:"\e60c"}.el-icon-caret-right:before{content:"\e60e"}.el-icon-d-arrow-left:before{content:"\e610"}.el-icon-d-arrow-right:before{content:"\e613"}.el-icon-minus:before{content:"\e621"}.el-icon-plus:before{content:"\e62b"}.el-icon-remove:before{content:"\e635"}.el-icon-circle-plus:before{content:"\e601"}.el-icon-remove-outline:before{content:"\e63c"}.el-icon-circle-plus-outline:before{content:"\e602"}.el-icon-close:before{content:"\e60f"}.el-icon-check:before{content:"\e611"}.el-icon-circle-close:before{content:"\e607"}.el-icon-circle-check:before{content:"\e639"}.el-icon-circle-close-outline:before{content:"\e609"}.el-icon-circle-check-outline:before{content:"\e63e"}.el-icon-zoom-out:before{content:"\e645"}.el-icon-zoom-in:before{content:"\e641"}.el-icon-d-caret:before{content:"\e615"}.el-icon-sort:before{content:"\e640"}.el-icon-sort-down:before{content:"\e630"}.el-icon-sort-up:before{content:"\e631"}.el-icon-tickets:before{content:"\e63f"}.el-icon-document:before{content:"\e614"}.el-icon-goods:before{content:"\e618"}.el-icon-sold-out:before{content:"\e63b"}.el-icon-news:before{content:"\e625"}.el-icon-message:before{content:"\e61b"}.el-icon-date:before{content:"\e608"}.el-icon-printer:before{content:"\e62f"}.el-icon-time:before{content:"\e642"}.el-icon-bell:before{content:"\e622"}.el-icon-mobile-phone:before{content:"\e624"}.el-icon-service:before{content:"\e63a"}.el-icon-view:before{content:"\e643"}.el-icon-menu:before{content:"\e620"}.el-icon-more:before{content:"\e646"}.el-icon-more-outline:before{content:"\e626"}.el-icon-star-on:before{content:"\e637"}.el-icon-star-off:before{content:"\e63d"}.el-icon-location:before{content:"\e61d"}.el-icon-location-outline:before{content:"\e61f"}.el-icon-phone:before{content:"\e627"}.el-icon-phone-outline:before{content:"\e628"}.el-icon-picture:before{content:"\e629"}.el-icon-picture-outline:before{content:"\e62a"}.el-icon-delete:before{content:"\e612"}.el-icon-search:before{content:"\e619"}.el-icon-edit:before{content:"\e61c"}.el-icon-edit-outline:before{content:"\e616"}.el-icon-rank:before{content:"\e632"}.el-icon-refresh:before{content:"\e633"}.el-icon-share:before{content:"\e636"}.el-icon-setting:before{content:"\e638"}.el-icon-upload:before{content:"\e60d"}.el-icon-upload2:before{content:"\e644"}.el-icon-download:before{content:"\e617"}.el-icon-loading:before{content:"\e61e"}.el-icon-loading{-webkit-animation:rotating 2s linear infinite;animation:rotating 2s linear infinite}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@-webkit-keyframes rotating{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}100%{-webkit-transform:rotateZ(360deg);transform:rotateZ(360deg)}}@keyframes rotating{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}100%{-webkit-transform:rotateZ(360deg);transform:rotateZ(360deg)}} -------------------------------------------------------------------------------- /src/theme/element-#41B883/input.css: -------------------------------------------------------------------------------- 1 | .el-textarea{display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.el-textarea__inner{display:block;resize:vertical;padding:5px 15px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;font-size:inherit;color:#606266;background-color:#fff;background-image:none;border:1px solid #dcdfe6;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea__inner:-ms-input-placeholder{color:#c0c4cc}.el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea__inner:hover{border-color:#c0c4cc}.el-textarea__inner:focus{outline:0;border-color:#41B883}.el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#c0c4cc}.el-input{position:relative;font-size:14px;display:inline-block;width:100%}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner{background:#fff}.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#c0c4cc;font-size:14px;line-height:16px;cursor:pointer;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-input .el-input__clear:hover{color:#909399}.el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:0;padding:0 15px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}.el-input__prefix,.el-input__suffix{position:absolute;top:0;-webkit-transition:all .3s;text-align:center;height:100%;color:#c0c4cc}.el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input__inner:-ms-input-placeholder{color:#c0c4cc}.el-input__inner::placeholder{color:#c0c4cc}.el-input__inner:hover{border-color:#c0c4cc}.el-input.is-active .el-input__inner,.el-input__inner:focus{border-color:#41B883;outline:0}.el-input__suffix{right:5px;transition:all .3s;pointer-events:none}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{left:5px;transition:all .3s}.el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner:-ms-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#f5f7fa;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #dcdfe6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group--prepend .el-input__inner,.el-input-group__append{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--append .el-input__inner,.el-input-group__prepend{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.el-input-group__prepend div.el-select:hover .el-input__inner{border-color:transparent;background-color:transparent;color:inherit;border-top:0;border-bottom:0}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0}.el-input-group__append{border-left:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner,.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input__inner::-ms-clear{display:none;width:0;height:0} -------------------------------------------------------------------------------- /src/theme/element-#41B883/loading.css: -------------------------------------------------------------------------------- 1 | .el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{position:absolute;z-index:2000;background-color:rgba(255,255,255,.9);margin:0;top:0;right:0;bottom:0;left:0;-webkit-transition:opacity .3s;transition:opacity .3s}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:-25px}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:50px;width:50px}.el-loading-spinner{top:50%;margin-top:-21px;width:100%;text-align:center;position:absolute}.el-loading-spinner .el-loading-text{color:#41B883;margin:3px 0;font-size:14px}.el-loading-spinner .circular{height:42px;width:42px;-webkit-animation:loading-rotate 2s linear infinite;animation:loading-rotate 2s linear infinite}.el-loading-spinner .path{-webkit-animation:loading-dash 1.5s ease-in-out infinite;animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:#41B883;stroke-linecap:round}.el-loading-spinner i{color:#41B883}.el-loading-fade-enter,.el-loading-fade-leave-active{opacity:0}@-webkit-keyframes loading-rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes loading-rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}100%{stroke-dasharray:90,150;stroke-dashoffset:-120px}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}100%{stroke-dasharray:90,150;stroke-dashoffset:-120px}} -------------------------------------------------------------------------------- /src/theme/element-#41B883/main.css: -------------------------------------------------------------------------------- 1 | .el-main{-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box;padding:20px} -------------------------------------------------------------------------------- /src/theme/element-#41B883/menu-item-group.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bouquetrender/vue-eden/018cff12cb2062cef44cab3dbd5d4de34af2e4ba/src/theme/element-#41B883/menu-item-group.css -------------------------------------------------------------------------------- /src/theme/element-#41B883/menu-item.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bouquetrender/vue-eden/018cff12cb2062cef44cab3dbd5d4de34af2e4ba/src/theme/element-#41B883/menu-item.css -------------------------------------------------------------------------------- /src/theme/element-#41B883/menu.css: -------------------------------------------------------------------------------- 1 | .el-menu,.el-menu--horizontal>.el-menu-item:not(.is-disabled):focus,.el-menu--horizontal>.el-menu-item:not(.is-disabled):hover,.el-menu--horizontal>.el-submenu .el-submenu__title:hover{background-color:#fff}.el-menu--collapse .el-menu .el-submenu,.el-menu--popup{min-width:200px}.el-menu{border-right:solid 1px #e6e6e6;list-style:none;position:relative;margin:0;padding-left:0}.el-menu::after,.el-menu::before{display:table;content:""}.el-menu::after{clear:both}.el-menu--horizontal{border-right:none;border-bottom:solid 1px #e6e6e6}.el-menu--horizontal>.el-menu-item{float:left;height:60px;line-height:60px;margin:0;border-bottom:2px solid transparent;color:#909399}.el-menu--horizontal>.el-menu-item a,.el-menu--horizontal>.el-menu-item a:hover{color:inherit}.el-menu--horizontal>.el-submenu{float:left}.el-menu--horizontal>.el-submenu:focus,.el-menu--horizontal>.el-submenu:hover{outline:0}.el-menu--horizontal>.el-submenu:focus .el-submenu__title,.el-menu--horizontal>.el-submenu:hover .el-submenu__title{color:#303133}.el-menu--horizontal>.el-submenu.is-active .el-submenu__title{border-bottom:2px solid #41B883;color:#303133}.el-menu--horizontal>.el-submenu .el-submenu__title{height:60px;line-height:60px;border-bottom:2px solid transparent;color:#909399}.el-menu--horizontal>.el-submenu .el-submenu__icon-arrow{position:static;vertical-align:middle;margin-left:8px;margin-top:-3px}.el-menu--horizontal .el-menu .el-menu-item,.el-menu--horizontal .el-menu .el-submenu__title{background-color:#fff;float:none;height:36px;line-height:36px;padding:0 10px;color:#909399}.el-menu--horizontal .el-menu .el-menu-item.is-active,.el-menu--horizontal .el-menu .el-submenu__title.is-active{color:#303133}.el-menu--horizontal .el-menu-item:not(.is-disabled):focus,.el-menu--horizontal .el-menu-item:not(.is-disabled):hover{outline:0;color:#303133}.el-menu--horizontal>.el-menu-item.is-active{border-bottom:2px solid #41B883;color:#303133}.el-menu--collapse{width:64px}.el-menu--collapse>.el-menu-item [class^=el-icon-],.el-menu--collapse>.el-submenu>.el-submenu__title [class^=el-icon-]{margin:0;vertical-align:middle;width:24px;text-align:center}.el-menu--collapse>.el-menu-item .el-submenu__icon-arrow,.el-menu--collapse>.el-submenu>.el-submenu__title .el-submenu__icon-arrow{display:none}.el-menu--collapse>.el-menu-item span,.el-menu--collapse>.el-submenu>.el-submenu__title span{height:0;width:0;overflow:hidden;visibility:hidden;display:inline-block}.el-menu--collapse>.el-menu-item.is-active i{color:inherit}.el-menu--collapse .el-submenu{position:relative}.el-menu--collapse .el-submenu .el-menu{position:absolute;margin-left:5px;top:0;left:100%;z-index:10;border:1px solid #e4e7ed;border-radius:2px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-menu-item,.el-submenu__title{height:56px;line-height:56px;list-style:none;position:relative;white-space:nowrap}.el-menu--collapse .el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-webkit-transform:none;transform:none}.el-menu--popup{z-index:100;border:none;padding:5px 0;border-radius:2px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-menu--popup-bottom-start{margin-top:5px}.el-menu--popup-right-start{margin-left:5px;margin-right:5px}.el-menu-item{font-size:14px;color:#303133;padding:0 20px;cursor:pointer;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;-webkit-box-sizing:border-box;box-sizing:border-box}.el-menu-item *{vertical-align:middle}.el-menu-item i{color:#909399}.el-menu-item:focus,.el-menu-item:hover{outline:0;background-color:rgb(236, 248, 243)}.el-menu-item.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-menu-item [class^=el-icon-]{margin-right:5px;width:24px;text-align:center;font-size:18px;vertical-align:middle}.el-menu-item.is-active{color:#41B883}.el-menu-item.is-active i{color:inherit}.el-submenu{list-style:none;margin:0;padding-left:0}.el-submenu__title{font-size:14px;color:#303133;padding:0 20px;cursor:pointer;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;-webkit-box-sizing:border-box;box-sizing:border-box}.el-submenu__title *{vertical-align:middle}.el-submenu__title i{color:#909399}.el-submenu__title:focus,.el-submenu__title:hover{outline:0;background-color:rgb(236, 248, 243)}.el-submenu__title.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu__title:hover{background-color:rgb(236, 248, 243)}.el-submenu .el-menu{border:none}.el-submenu .el-menu-item{height:50px;line-height:50px;padding:0 45px;min-width:200px}.el-submenu__icon-arrow{position:absolute;top:50%;right:20px;margin-top:-7px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-size:12px}.el-submenu.is-active .el-submenu__title{border-bottom-color:#41B883}.el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.el-submenu.is-disabled .el-menu-item,.el-submenu.is-disabled .el-submenu__title{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu [class^=el-icon-]{vertical-align:middle;margin-right:5px;width:24px;text-align:center;font-size:18px}.el-menu-item-group>ul{padding:0}.el-menu-item-group__title{padding:7px 0 7px 20px;line-height:normal;font-size:12px;color:#909399}.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow{-webkit-transition:.2s;transition:.2s;opacity:0} -------------------------------------------------------------------------------- /src/theme/element-#41B883/message.css: -------------------------------------------------------------------------------- 1 | .el-message__closeBtn:focus,.el-message__content:focus{outline-width:0}.el-message{min-width:380px;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;border-width:1px;border-style:solid;border-color:#ebeef5;position:fixed;left:50%;top:20px;-webkit-transform:translateX(-50%);transform:translateX(-50%);background-color:#edf2fc;-webkit-transition:opacity .3s,-webkit-transform .4s;transition:opacity .3s,-webkit-transform .4s;transition:opacity .3s,transform .4s;transition:opacity .3s,transform .4s,-webkit-transform .4s;overflow:hidden;padding:15px 15px 15px 20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-message.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-message.is-closable .el-message__content{padding-right:16px}.el-message p{margin:0}.el-message--info .el-message__content{color:#909399}.el-message--success{background-color:#f0f9eb;border-color:#e1f3d8}.el-message--success .el-message__content{color:#67c23a}.el-message--warning{background-color:#fdf6ec;border-color:#faecd8}.el-message--warning .el-message__content{color:#e6a23c}.el-message--error{background-color:#fef0f0;border-color:#fde2e2}.el-message--error .el-message__content{color:#f56c6c}.el-message__icon{margin-right:10px}.el-message__content{padding:0;font-size:14px;line-height:1}.el-message__closeBtn{position:absolute;top:50%;right:15px;-webkit-transform:translateY(-50%);transform:translateY(-50%);cursor:pointer;color:#c0c4cc;font-size:16px}.el-message__closeBtn:hover{color:#909399}.el-message .el-icon-success{color:#67c23a}.el-message .el-icon-error{color:#f56c6c}.el-message .el-icon-info{color:#909399}.el-message .el-icon-warning{color:#e6a23c}.el-message-fade-enter,.el-message-fade-leave-active{opacity:0;-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%)} -------------------------------------------------------------------------------- /src/theme/element-#41B883/notification.css: -------------------------------------------------------------------------------- 1 | .el-notification{display:-webkit-box;display:-ms-flexbox;display:flex;width:330px;padding:14px 26px 14px 13px;border-radius:8px;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #ebeef5;position:fixed;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;overflow:hidden}.el-notification.right{right:16px}.el-notification.left{left:16px}.el-notification__group{margin-left:13px}.el-notification__title{font-weight:700;font-size:16px;color:#303133;margin:0}.el-notification__content{font-size:14px;line-height:21px;margin:6px 0 0;color:#606266;text-align:justify}.el-notification__content p{margin:0}.el-notification__icon{height:24px;width:24px;font-size:24px}.el-notification__closeBtn{position:absolute;top:18px;right:15px;cursor:pointer;color:#909399;font-size:16px}.el-notification__closeBtn:hover{color:#606266}.el-notification .el-icon-success{color:#67c23a}.el-notification .el-icon-error{color:#f56c6c}.el-notification .el-icon-info{color:#909399}.el-notification .el-icon-warning{color:#e6a23c}.el-notification-fade-enter.right{right:0;-webkit-transform:translateX(100%);transform:translateX(100%)}.el-notification-fade-enter.left{left:0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}.el-notification-fade-leave-active{opacity:0} -------------------------------------------------------------------------------- /src/theme/element-#41B883/option-group.css: -------------------------------------------------------------------------------- 1 | .el-select-group{margin:0;padding:0}.el-select-group__wrap{position:relative;list-style:none;margin:0;padding:0}.el-select-group__wrap:not(:last-of-type){padding-bottom:24px}.el-select-group__wrap:not(:last-of-type)::after{content:'';position:absolute;display:block;left:20px;right:20px;bottom:12px;height:1px;background:#e4e7ed}.el-select-group__title{padding-left:20px;font-size:12px;color:#909399;line-height:30px}.el-select-group .el-select-dropdown__item{padding-left:20px} -------------------------------------------------------------------------------- /src/theme/element-#41B883/option.css: -------------------------------------------------------------------------------- 1 | .el-select-dropdown__item{font-size:14px;padding:0 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#606266;height:34px;line-height:34px;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer}.el-select-dropdown__item.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-select-dropdown__item.is-disabled:hover{background-color:#fff}.el-select-dropdown__item.hover,.el-select-dropdown__item:hover{background-color:#f5f7fa}.el-select-dropdown__item.selected{color:#41B883;font-weight:700}.el-select-dropdown__item span{line-height:34px!important} -------------------------------------------------------------------------------- /src/theme/element-#41B883/popover.css: -------------------------------------------------------------------------------- 1 | .el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popper .popper__arrow{border-width:6px;-webkit-filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03));filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03))}.el-popper .popper__arrow::after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.el-popover{position:absolute;background:#fff;min-width:150px;border-radius:4px;border:1px solid #ebeef5;padding:12px;z-index:2000;color:#606266;line-height:1.4;text-align:justify;font-size:14px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-popover--plain{padding:18px 20px}.el-popover__title{color:#303133;font-size:16px;line-height:1;margin-bottom:12px}.el-popover:focus,.el-popover:focus:active,.el-popover__reference:focus:hover,.el-popover__reference:focus:not(.focusing){outline-width:0} -------------------------------------------------------------------------------- /src/theme/element-#41B883/popper.css: -------------------------------------------------------------------------------- 1 | .el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popper .popper__arrow{border-width:6px;-webkit-filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03));filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03))}.el-popper .popper__arrow::after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff} -------------------------------------------------------------------------------- /src/theme/element-#41B883/progress.css: -------------------------------------------------------------------------------- 1 | .el-progress{position:relative;line-height:1}.el-progress__text{font-size:14px;color:#606266;display:inline-block;vertical-align:middle;margin-left:10px;line-height:1}.el-progress__text i{vertical-align:middle;display:block}.el-progress--circle{display:inline-block}.el-progress--circle .el-progress__text{position:absolute;top:50%;left:0;width:100%;text-align:center;margin:0;-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}.el-progress--circle .el-progress__text i{vertical-align:middle;display:inline-block}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{padding-right:0;margin-right:0;display:block}.el-progress-bar,.el-progress-bar__inner::after,.el-progress-bar__innerText{display:inline-block;vertical-align:middle}.el-progress--text-inside .el-progress-bar{padding-right:0;margin-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:#67c23a}.el-progress.is-success .el-progress__text{color:#67c23a}.el-progress.is-exception .el-progress-bar__inner{background-color:#f56c6c}.el-progress.is-exception .el-progress__text{color:#f56c6c}.el-progress-bar{padding-right:50px;width:100%;margin-right:-55px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-progress-bar__outer{height:6px;border-radius:100px;background-color:#ebeef5;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:#41B883;text-align:right;border-radius:100px;line-height:1;white-space:nowrap}.el-progress-bar__inner::after{content:"";height:100%}.el-progress-bar__innerText{color:#fff;font-size:12px;margin:0 5px}@-webkit-keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}}@keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}} -------------------------------------------------------------------------------- /src/theme/element-#41B883/radio-button.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-radio-button,.el-radio-button__inner{display:inline-block;position:relative;outline:0}.el-radio-button__inner{line-height:1;white-space:nowrap;vertical-align:middle;background:#fff;border:1px solid #dcdfe6;font-weight:500;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;cursor:pointer;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);padding:12px 20px;font-size:14px;border-radius:0}.el-radio-button__inner.is-round{padding:12px 20px}.el-radio-button__inner:hover{color:#41B883}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-radio-button__orig-radio{opacity:0;outline:0;position:absolute;z-index:-1}.el-radio-button__orig-radio:checked+.el-radio-button__inner{color:#fff;background-color:#41B883;border-color:#41B883;-webkit-box-shadow:-1px 0 0 0 #41B883;box-shadow:-1px 0 0 0 #41B883}.el-radio-button__orig-radio:disabled+.el-radio-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5;-webkit-box-shadow:none;box-shadow:none}.el-radio-button__orig-radio:disabled:checked+.el-radio-button__inner{background-color:#f2f6fc}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 4px 4px 0}.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:4px}.el-radio-button--medium .el-radio-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-radio-button--medium .el-radio-button__inner.is-round{padding:10px 20px}.el-radio-button--small .el-radio-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-radio-button--small .el-radio-button__inner.is-round{padding:9px 15px}.el-radio-button--mini .el-radio-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-radio-button--mini .el-radio-button__inner.is-round{padding:7px 15px}.el-radio-button:focus:not(.is-focus):not(:active){-webkit-box-shadow:0 0 2px 2px #41B883;box-shadow:0 0 2px 2px #41B883} -------------------------------------------------------------------------------- /src/theme/element-#41B883/radio-group.css: -------------------------------------------------------------------------------- 1 | .el-radio-group{display:inline-block;line-height:1;vertical-align:middle;font-size:0} -------------------------------------------------------------------------------- /src/theme/element-#41B883/radio.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-radio,.el-radio--medium.is-bordered .el-radio__label{font-size:14px}.el-radio,.el-radio__input{white-space:nowrap;line-height:1;outline:0}.el-radio,.el-radio__inner,.el-radio__input{position:relative;display:inline-block}.el-radio{color:#606266;font-weight:500;cursor:pointer;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.el-radio.is-bordered{padding:12px 20px 0 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;height:40px}.el-radio.is-bordered.is-checked{border-color:#41B883}.el-radio.is-bordered.is-disabled{cursor:not-allowed;border-color:#ebeef5}.el-radio__input.is-disabled .el-radio__inner,.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:#f5f7fa;border-color:#e4e7ed}.el-radio.is-bordered+.el-radio.is-bordered{margin-left:10px}.el-radio--medium.is-bordered{padding:10px 20px 0 10px;border-radius:4px;height:36px}.el-radio--mini.is-bordered .el-radio__label,.el-radio--small.is-bordered .el-radio__label{font-size:12px}.el-radio--medium.is-bordered .el-radio__inner{height:14px;width:14px}.el-radio--small.is-bordered{padding:8px 15px 0 10px;border-radius:3px;height:32px}.el-radio--small.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio--mini.is-bordered{padding:6px 15px 0 10px;border-radius:3px;height:28px}.el-radio--mini.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio+.el-radio{margin-left:30px}.el-radio__input{cursor:pointer;vertical-align:middle}.el-radio__input.is-disabled .el-radio__inner{cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner::after{cursor:not-allowed;background-color:#f5f7fa}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner::after{background-color:#c0c4cc}.el-radio__input.is-disabled+span.el-radio__label{color:#c0c4cc;cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{border-color:#41B883;background:#41B883}.el-radio__input.is-checked .el-radio__inner::after{-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:#41B883}.el-radio__input.is-focus .el-radio__inner{border-color:#41B883}.el-radio__inner{border:1px solid #dcdfe6;border-radius:100%;width:14px;height:14px;background-color:#fff;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box}.el-radio__inner:hover{border-color:#41B883}.el-radio__inner::after{width:4px;height:4px;border-radius:100%;background-color:#fff;content:"";position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%) scale(0);transform:translate(-50%,-50%) scale(0);-webkit-transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6);transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6);transition:transform .15s cubic-bezier(.71,-.46,.88,.6);transition:transform .15s cubic-bezier(.71,-.46,.88,.6),-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6)}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio:focus:not(.is-focus):not(:active) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #41B883;box-shadow:0 0 2px 2px #41B883}.el-radio__label{font-size:14px;padding-left:10px} -------------------------------------------------------------------------------- /src/theme/element-#41B883/rate.css: -------------------------------------------------------------------------------- 1 | .el-rate__icon,.el-rate__item{position:relative;display:inline-block}.el-rate{height:20px;line-height:1}.el-rate:active,.el-rate:focus{outline-width:0}.el-rate__item{font-size:0;vertical-align:middle}.el-rate__icon{font-size:18px;margin-right:6px;color:#c0c4cc;-webkit-transition:.3s;transition:.3s}.el-rate__decimal,.el-rate__icon .path2{position:absolute;top:0;left:0}.el-rate__icon.hover{-webkit-transform:scale(1.15);transform:scale(1.15)}.el-rate__decimal{display:inline-block;overflow:hidden}.el-rate__text{font-size:14px;vertical-align:middle} -------------------------------------------------------------------------------- /src/theme/element-#41B883/reset.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";body{font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif;font-weight:400;font-size:14px;color:#000;-webkit-font-smoothing:antialiased}a{color:#41B883;text-decoration:none}a:focus,a:hover{color:rgb(103, 198, 156)}a:active{color:rgb(59, 166, 118)}h1,h2,h3,h4,h5,h6{color:#606266;font-weight:inherit}h1:first-child,h2:first-child,h3:first-child,h4:first-child,h5:first-child,h6:first-child,p:first-child{margin-top:0}h1:last-child,h2:last-child,h3:last-child,h4:last-child,h5:last-child,h6:last-child,p:last-child{margin-bottom:0}h1{font-size:20px}h2{font-size:18px}h3{font-size:16px}h4,h5,h6,p{font-size:inherit}p{line-height:1.8}sub,sup{font-size:13px}small{font-size:12px}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee} -------------------------------------------------------------------------------- /src/theme/element-#41B883/row.css: -------------------------------------------------------------------------------- 1 | .el-row{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box}.el-row::after,.el-row::before{display:table;content:""}.el-row::after{clear:both}.el-row--flex{display:-webkit-box;display:-ms-flexbox;display:flex}.el-row--flex:after,.el-row--flex:before{display:none}.el-row--flex.is-justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-row--flex.is-justify-end{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.el-row--flex.is-justify-space-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.el-row--flex.is-justify-space-around{-ms-flex-pack:distribute;justify-content:space-around}.el-row--flex.is-align-middle{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-row--flex.is-align-bottom{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end} -------------------------------------------------------------------------------- /src/theme/element-#41B883/scrollbar.css: -------------------------------------------------------------------------------- 1 | .el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active>.el-scrollbar__bar,.el-scrollbar:focus>.el-scrollbar__bar,.el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.el-scrollbar__wrap{overflow:scroll;height:100%}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,147,153,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(144,147,153,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px;opacity:0;-webkit-transition:opacity 120ms ease-out;transition:opacity 120ms ease-out}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%} -------------------------------------------------------------------------------- /src/theme/element-#41B883/select-dropdown.css: -------------------------------------------------------------------------------- 1 | .el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popper .popper__arrow{border-width:6px;-webkit-filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03));filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03))}.el-popper .popper__arrow::after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.el-select-dropdown{position:absolute;z-index:1001;border:1px solid #e4e7ed;border-radius:4px;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:5px 0}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#41B883;background-color:#fff}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:#f5f7fa}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after{position:absolute;right:20px;font-family:element-icons;content:"\E611";font-size:12px;font-weight:700;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:#999;font-size:14px}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{list-style:none;padding:6px 0;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box} -------------------------------------------------------------------------------- /src/theme/element-#41B883/spinner.css: -------------------------------------------------------------------------------- 1 | .el-time-spinner{width:100%;white-space:nowrap}.el-spinner{display:inline-block;vertical-align:middle}.el-spinner-inner{-webkit-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite;width:50px;height:50px}.el-spinner-inner .path{stroke:#ececec;stroke-linecap:round;-webkit-animation:dash 1.5s ease-in-out infinite;animation:dash 1.5s ease-in-out infinite}@-webkit-keyframes rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}100%{stroke-dasharray:90,150;stroke-dashoffset:-124}}@keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}100%{stroke-dasharray:90,150;stroke-dashoffset:-124}} -------------------------------------------------------------------------------- /src/theme/element-#41B883/step.css: -------------------------------------------------------------------------------- 1 | .el-step{position:relative;-ms-flex-negative:1;flex-shrink:1}.el-step:last-of-type .el-step__line{display:none}.el-step:last-of-type.is-flex{-ms-flex-preferred-size:auto!important;flex-basis:auto!important;-ms-flex-negative:0;flex-shrink:0;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}.el-step:last-of-type .el-step__description,.el-step:last-of-type .el-step__main{padding-right:0}.el-step__head{position:relative;width:100%}.el-step__head.is-process{color:#303133;border-color:#303133}.el-step__head.is-wait{color:#c0c4cc;border-color:#c0c4cc}.el-step__head.is-success{color:#67c23a;border-color:#67c23a}.el-step__head.is-error{color:#f56c6c;border-color:#f56c6c}.el-step__head.is-finish{color:#41B883;border-color:#41B883}.el-step__icon{position:relative;z-index:1;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:24px;height:24px;font-size:14px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#fff;-webkit-transition:.15s ease-out;transition:.15s ease-out}.el-step__icon.is-text{border-radius:50%;border:2px solid;border-color:inherit}.el-step__icon.is-icon{width:40px}.el-step__icon-inner{display:inline-block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-align:center;font-weight:700;line-height:1;color:inherit}.el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:25px;font-weight:400}.el-step__icon-inner.is-status{-webkit-transform:translateY(1px);transform:translateY(1px)}.el-step__line{position:absolute;border-color:inherit;background-color:#c0c4cc}.el-step__line-inner{display:block;border-width:1px;border-style:solid;border-color:inherit;-webkit-transition:.15s ease-out;transition:.15s ease-out;-webkit-box-sizing:border-box;box-sizing:border-box;width:0;height:0}.el-step__main{white-space:normal;text-align:left}.el-step__title{font-size:16px;line-height:38px}.el-step__title.is-process{font-weight:700;color:#303133}.el-step__title.is-wait{color:#c0c4cc}.el-step__title.is-success{color:#67c23a}.el-step__title.is-error{color:#f56c6c}.el-step__title.is-finish{color:#41B883}.el-step__description{padding-right:10%;margin-top:-5px;font-size:12px;line-height:20px;font-weight:400}.el-step__description.is-process{color:#303133}.el-step__description.is-wait{color:#c0c4cc}.el-step__description.is-success{color:#67c23a}.el-step__description.is-error{color:#f56c6c}.el-step__description.is-finish{color:#41B883}.el-step.is-horizontal{display:inline-block}.el-step.is-horizontal .el-step__line{height:2px;top:11px;left:0;right:0}.el-step.is-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.el-step.is-vertical .el-step__head{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;width:24px}.el-step.is-vertical .el-step__main{padding-left:10px;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.el-step.is-vertical .el-step__title{line-height:24px;padding-bottom:8px}.el-step.is-vertical .el-step__line{width:2px;top:0;bottom:0;left:11px}.el-step.is-vertical .el-step__icon.is-icon{width:24px}.el-step.is-center .el-step__head,.el-step.is-center .el-step__main{text-align:center}.el-step.is-center .el-step__description{padding-left:20%;padding-right:20%}.el-step.is-center .el-step__line{left:50%;right:-50%}.el-step.is-simple{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-step.is-simple .el-step__head{width:auto;font-size:0;padding-right:10px}.el-step.is-simple .el-step__icon{background:0 0;width:16px;height:16px;font-size:12px}.el-step.is-simple .el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:18px}.el-step.is-simple .el-step__icon-inner.is-status{-webkit-transform:scale(.8) translateY(1px);transform:scale(.8) translateY(1px)}.el-step.is-simple .el-step__main{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.el-step.is-simple .el-step__title{font-size:16px;line-height:20px}.el-step.is-simple:not(:last-of-type) .el-step__title{max-width:50%;word-break:break-all}.el-step.is-simple .el-step__arrow{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-step.is-simple .el-step__arrow::after,.el-step.is-simple .el-step__arrow::before{content:'';display:inline-block;position:absolute;height:15px;width:1px;background:#c0c4cc}.el-step.is-simple .el-step__arrow::before{-webkit-transform:rotate(-45deg) translateY(-4px);transform:rotate(-45deg) translateY(-4px);-webkit-transform-origin:0 0;transform-origin:0 0}.el-step.is-simple .el-step__arrow::after{-webkit-transform:rotate(45deg) translateY(4px);transform:rotate(45deg) translateY(4px);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.el-step.is-simple:last-of-type .el-step__arrow{display:none} -------------------------------------------------------------------------------- /src/theme/element-#41B883/steps.css: -------------------------------------------------------------------------------- 1 | .el-steps{display:-webkit-box;display:-ms-flexbox;display:flex}.el-steps--simple{padding:13px 8%;border-radius:4px;background:#f5f7fa}.el-steps--horizontal{white-space:nowrap}.el-steps--vertical{height:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column} -------------------------------------------------------------------------------- /src/theme/element-#41B883/submenu.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bouquetrender/vue-eden/018cff12cb2062cef44cab3dbd5d4de34af2e4ba/src/theme/element-#41B883/submenu.css -------------------------------------------------------------------------------- /src/theme/element-#41B883/switch.css: -------------------------------------------------------------------------------- 1 | .el-switch{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;font-size:14px;line-height:20px;height:20px;vertical-align:middle}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__core,.el-switch__label{display:inline-block;cursor:pointer;vertical-align:middle}.el-switch__label{-webkit-transition:.2s;transition:.2s;height:20px;font-size:14px;font-weight:500;color:#303133}.el-switch__label.is-active{color:#41B883}.el-switch__label--left{margin-right:10px}.el-switch__label--right{margin-left:10px}.el-switch__label *{line-height:1;font-size:14px;display:inline-block}.el-switch__input{position:absolute;width:0;height:0;opacity:0;margin:0}.el-switch__input:focus~.el-switch__core{outline:#41B883 solid 1px}.el-switch__core{margin:0;position:relative;width:40px;height:20px;border:1px solid #dcdfe6;outline:0;border-radius:10px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#dcdfe6;-webkit-transition:border-color .3s,background-color .3s;transition:border-color .3s,background-color .3s}.el-switch__core .el-switch__button{position:absolute;top:1px;left:1px;border-radius:100%;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;width:16px;height:16px;background-color:#fff}.el-switch.is-checked .el-switch__core{border-color:#41B883;background-color:#41B883}.el-switch.is-disabled{opacity:.6}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.el-switch .label-fade-enter,.el-switch .label-fade-leave-active{opacity:0} -------------------------------------------------------------------------------- /src/theme/element-#41B883/tab-pane.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bouquetrender/vue-eden/018cff12cb2062cef44cab3dbd5d4de34af2e4ba/src/theme/element-#41B883/tab-pane.css -------------------------------------------------------------------------------- /src/theme/element-#41B883/tag.css: -------------------------------------------------------------------------------- 1 | .el-tag{background-color:rgba(64,158,255,.1);display:inline-block;padding:0 10px;height:32px;line-height:30px;font-size:12px;color:#41B883;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid rgba(64,158,255,.2);white-space:nowrap}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:16px;width:16px;line-height:16px;vertical-align:middle;top:-1px;right:-5px;color:#41B883}.el-tag .el-icon-close::before{display:block}.el-tag .el-icon-close:hover{background-color:#41B883;color:#fff}.el-tag--info,.el-tag--info .el-tag__close{color:#909399}.el-tag--info{background-color:rgba(144,147,153,.1);border-color:rgba(144,147,153,.2)}.el-tag--info.is-hit{border-color:#909399}.el-tag--info .el-tag__close:hover{background-color:#909399;color:#fff}.el-tag--success{background-color:rgba(103,194,58,.1);border-color:rgba(103,194,58,.2);color:#67c23a}.el-tag--success.is-hit{border-color:#67c23a}.el-tag--success .el-tag__close{color:#67c23a}.el-tag--success .el-tag__close:hover{background-color:#67c23a;color:#fff}.el-tag--warning{background-color:rgba(230,162,60,.1);border-color:rgba(230,162,60,.2);color:#e6a23c}.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--warning .el-tag__close:hover{background-color:#e6a23c;color:#fff}.el-tag--danger{background-color:rgba(245,108,108,.1);border-color:rgba(245,108,108,.2);color:#f56c6c}.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--danger .el-tag__close:hover{background-color:#f56c6c;color:#fff}.el-tag--medium{height:28px;line-height:26px}.el-tag--medium .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--small{height:24px;padding:0 8px;line-height:22px}.el-tag--small .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--mini{height:20px;padding:0 5px;line-height:19px}.el-tag--mini .el-icon-close{margin-left:-3px;-webkit-transform:scale(.7);transform:scale(.7)} -------------------------------------------------------------------------------- /src/theme/element-#41B883/tooltip.css: -------------------------------------------------------------------------------- 1 | .el-tooltip:focus:hover,.el-tooltip:focus:not(.focusing){outline-width:0}.el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2}.el-tooltip__popper .popper__arrow,.el-tooltip__popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-tooltip__popper .popper__arrow{border-width:6px}.el-tooltip__popper .popper__arrow::after{content:" ";border-width:5px}.el-tooltip__popper[x-placement^=top]{margin-bottom:12px}.el-tooltip__popper[x-placement^=top] .popper__arrow{bottom:-6px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-5px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=bottom]{margin-top:12px}.el-tooltip__popper[x-placement^=bottom] .popper__arrow{top:-6px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=right]{margin-left:12px}.el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=right] .popper__arrow::after{bottom:-5px;left:1px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=left]{margin-right:12px}.el-tooltip__popper[x-placement^=left] .popper__arrow{right:-6px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper.is-dark{background:#303133;color:#fff}.el-tooltip__popper.is-light{background:#fff;border:1px solid #303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:#303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow::after{border-top-color:#fff}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow{border-bottom-color:#303133}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow::after{border-bottom-color:#fff}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow{border-left-color:#303133}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow::after{border-left-color:#fff}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow{border-right-color:#303133}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow::after{border-right-color:#fff} -------------------------------------------------------------------------------- /src/theme/element-#41B883/tree.css: -------------------------------------------------------------------------------- 1 | .el-tree{position:relative;cursor:default;background:#fff;color:#606266}.el-tree__empty-block{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-tree__empty-text{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#6f7180}.el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:#41B883}.el-tree-node{white-space:nowrap;outline:0}.el-tree-node:focus>.el-tree-node__content{background-color:#f5f7fa}.el-tree-node.is-drop-inner>.el-tree-node__content .el-tree-node__label{background-color:#41B883;color:#fff}.el-tree-node__content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:26px;cursor:pointer}.el-tree-node__content>.el-tree-node__expand-icon{padding:6px}.el-tree-node__content>.el-checkbox{margin-right:8px}.el-tree-node__content:hover{background-color:#f5f7fa}.el-tree.is-dragging .el-tree-node__content{cursor:move}.el-tree.is-dragging .el-tree-node__content *{pointer-events:none}.el-tree.is-dragging.is-drop-not-allow .el-tree-node__content{cursor:not-allowed}.el-tree-node__expand-icon{cursor:pointer;color:#c0c4cc;font-size:12px;-webkit-transform:rotate(0);transform:rotate(0);-webkit-transition:-webkit-transform .3s ease-in-out;transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;transition:transform .3s ease-in-out,-webkit-transform .3s ease-in-out}.el-tree-node__expand-icon.expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{color:transparent;cursor:default}.el-tree-node__label{font-size:14px}.el-tree-node__loading-icon{margin-right:8px;font-size:14px;color:#c0c4cc}.el-tree-node>.el-tree-node__children{overflow:hidden;background-color:transparent}.el-tree-node.is-expanded>.el-tree-node__children{display:block}.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:#f0f7ff} -------------------------------------------------------------------------------- /src/utils/auth.js: -------------------------------------------------------------------------------- 1 | import Cookies from "js-cookie"; 2 | const TokenKey = "edentoken"; 3 | 4 | export function getToken() { 5 | return Cookies.get(TokenKey); 6 | } 7 | 8 | export function setToken(token) { 9 | return Cookies.set(TokenKey, token); 10 | } 11 | 12 | export function removeToken() { 13 | return Cookies.remove(TokenKey); 14 | } 15 | -------------------------------------------------------------------------------- /src/utils/filters.js: -------------------------------------------------------------------------------- 1 | export function toFixed(val, precision = 2) { 2 | let isNumber = Number(val); 3 | if (!isNaN(isNumber)) { 4 | return isNumber.toFixed(precision); 5 | } 6 | return val; 7 | } 8 | 9 | export const number = { 10 | add(a, b) { 11 | var c, d, e; 12 | try { 13 | c = a.toString().split(".")[1].length; 14 | } catch (f) { 15 | c = 0; 16 | } 17 | try { 18 | d = b.toString().split(".")[1].length; 19 | } catch (f) { 20 | d = 0; 21 | } 22 | return ( 23 | (e = Math.pow(10, Math.max(c, d))), (this.mul(a, e) + this.mul(b, e)) / e 24 | ); 25 | }, 26 | sub(a, b) { 27 | var c, d, e; 28 | try { 29 | c = a.toString().split(".")[1].length; 30 | } catch (f) { 31 | c = 0; 32 | } 33 | try { 34 | d = b.toString().split(".")[1].length; 35 | } catch (f) { 36 | d = 0; 37 | } 38 | return ( 39 | (e = Math.pow(10, Math.max(c, d))), (this.mul(a, e) - this.mul(b, e)) / e 40 | ); 41 | }, 42 | mul(a, b) { 43 | let c = 0; 44 | let d = a.toString(); 45 | let e = b.toString(); 46 | try { 47 | c += d.split(".")[1].length; 48 | } catch (f) { 49 | console.error(f); 50 | } 51 | try { 52 | c += e.split(".")[1].length; 53 | } catch (f) { 54 | console.error(f); 55 | } 56 | return ( 57 | (Number(d.replace(".", "")) * Number(e.replace(".", ""))) / 58 | Math.pow(10, c) 59 | ); 60 | }, 61 | div(a, b) { 62 | let c = 0; 63 | let d = 0; 64 | let e = 0; 65 | let f = 0; 66 | try { 67 | e = a.toString().split(".")[1].length; 68 | } catch (g) { 69 | console.error(g); 70 | } 71 | try { 72 | f = b.toString().split(".")[1].length; 73 | } catch (g) { 74 | console.error(g); 75 | } 76 | return ( 77 | (c = Number(a.toString().replace(".", ""))), 78 | (d = Number(b.toString().replace(".", ""))), 79 | this.mul(c / d, Math.pow(10, f - e)) 80 | ); 81 | } 82 | }; 83 | -------------------------------------------------------------------------------- /src/utils/http.js: -------------------------------------------------------------------------------- 1 | import axios from "axios"; 2 | import store from "@/store"; 3 | import { getToken } from "@/utils/auth"; 4 | import * as tools from "./tools"; 5 | 6 | const http = axios.create({ 7 | baseURL: "", 8 | timeout: 30000 9 | }); 10 | 11 | // request 拦截器 12 | http.interceptors.request.use( 13 | config => { 14 | if (store.getters.userInfo.token) { 15 | config.headers["eden-token"] = getToken(); 16 | } 17 | return config; 18 | }, 19 | error => { 20 | return Promise.reject(error); 21 | } 22 | ); 23 | 24 | // respone 拦截器 25 | http.interceptors.response.use( 26 | response => { 27 | const res = response.data; 28 | if (res.error) { 29 | tools.notify({ 30 | type: "error", 31 | message: res.error.message 32 | }); 33 | if (res.code === "") { 34 | // 接口自定义错误代码 35 | // 移除登陆token 显示接口错误消息 36 | } 37 | return Promise.reject(res); 38 | } 39 | return Promise.resolve(res); 40 | }, 41 | error => { 42 | tools.notify({ 43 | type: "error", 44 | message: error.message, 45 | duration: 5000 46 | }); 47 | return Promise.reject(error); 48 | } 49 | ); 50 | 51 | export default http; 52 | -------------------------------------------------------------------------------- /src/utils/import.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | export default function _import (file, viewPath = 'views') { 3 | if (process.env.NODE_ENV === 'development') { 4 | return require(`@/${viewPath}/${file}.vue`).default 5 | } else if (process.env.NODE_ENV === 'production') { 6 | return () => import(`@/${viewPath}/${file}.vue`) 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/utils/storage.js: -------------------------------------------------------------------------------- 1 | const localStorage = window.localStorage; 2 | 3 | function set(key, value) { 4 | if (typeof value === "object") { 5 | value = JSON.stringify(value); 6 | } 7 | localStorage.setItem(key, value); 8 | } 9 | 10 | function get(key) { 11 | const value = localStorage.getItem(key) || ""; 12 | 13 | try { 14 | return JSON.parse(value); 15 | } catch (e) { 16 | return value; 17 | } 18 | } 19 | 20 | function remove(key) { 21 | localStorage.removeItem(key); 22 | } 23 | 24 | export default { 25 | set, 26 | get, 27 | remove 28 | }; 29 | -------------------------------------------------------------------------------- /src/utils/tools.js: -------------------------------------------------------------------------------- 1 | import { Message } from "element-ui"; 2 | 3 | export const notify = function({ 4 | type = "info", 5 | message = "", 6 | duration = 2000, 7 | showClose = false, 8 | onClose = function() {} 9 | }) { 10 | Message({ 11 | type, 12 | message, 13 | duration, 14 | showClose, 15 | onClose 16 | }); 17 | }; 18 | 19 | export const closeNotify = function() { 20 | Message.close(); 21 | }; 22 | 23 | export function debounce(func, wait = 1000, immediate = true) { 24 | let timeout; 25 | let result; 26 | return function(...args) { 27 | const context = this; 28 | if (timeout) window.clearTimeout(timeout); 29 | if (immediate) { 30 | let callNow = !timeout; 31 | timeout = setTimeout(() => { 32 | timeout = false; 33 | }, wait); 34 | if (callNow) result = func.apply(context, args); 35 | } else { 36 | timeout = setTimeout(() => { 37 | func.apply(context, args); 38 | }, wait); 39 | } 40 | return result; 41 | }; 42 | } 43 | 44 | export const randomIntegerInRange = (min, max) => 45 | Math.floor(Math.random() * (max - min + 1)) + min; 46 | -------------------------------------------------------------------------------- /src/views/components/page1.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 13 | 16 | -------------------------------------------------------------------------------- /src/views/components/page2.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 13 | 16 | -------------------------------------------------------------------------------- /src/views/components/page3.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 13 | 16 | -------------------------------------------------------------------------------- /src/views/datatable/index.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 13 | 16 | -------------------------------------------------------------------------------- /src/views/errorPage/401.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 24 | 25 | 46 | -------------------------------------------------------------------------------- /src/views/errorPage/404.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 24 | 25 | 46 | -------------------------------------------------------------------------------- /src/views/layout/AppMain.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 21 | 22 | 29 | -------------------------------------------------------------------------------- /src/views/layout/Layout.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 41 | 42 | 68 | -------------------------------------------------------------------------------- /src/views/layout/Navbar.vue: -------------------------------------------------------------------------------- 1 | 36 | 37 | 91 | 92 | 166 | -------------------------------------------------------------------------------- /src/views/layout/NavbarInfoDrop.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 61 | 62 | 83 | -------------------------------------------------------------------------------- /src/views/layout/Sidebar.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 44 | -------------------------------------------------------------------------------- /src/views/layout/SidebarItem.vue: -------------------------------------------------------------------------------- 1 | 70 | 71 | 97 | 98 | 110 | -------------------------------------------------------------------------------- /src/views/lock/index.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 43 | 44 | 78 | -------------------------------------------------------------------------------- /src/views/panels/index.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 13 | 16 | -------------------------------------------------------------------------------- /src/views/permission/index.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 13 | 16 | -------------------------------------------------------------------------------- /src/views/profile/index.vue: -------------------------------------------------------------------------------- 1 | 87 | 88 | 148 | 149 | 232 | -------------------------------------------------------------------------------- /src/views/widget/index.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 13 | 16 | -------------------------------------------------------------------------------- /vue.config.js: -------------------------------------------------------------------------------- 1 | // https://cli.vuejs.org/ 2 | 3 | const path = require("path"); 4 | 5 | function resolve(dir) { 6 | return path.join(__dirname, dir); 7 | } 8 | 9 | module.exports = { 10 | baseUrl: process.env.baseUrl, 11 | outputDir: process.env.outputDir, 12 | lintOnSave: true, 13 | 14 | configureWebpack: () => { 15 | if (process.env.NODE_ENV === "production") { 16 | // 为生产环境修改配置... 17 | } else { 18 | // 为开发环境修改配置... 19 | } 20 | }, 21 | chainWebpack: config => { 22 | config.resolve.alias 23 | .set("vue$", "vue/dist/vue.esm.js") 24 | .set("@", resolve("src")) 25 | .set("assets", resolve("src/assets")) 26 | .set("components", resolve("src/components")) 27 | .set("api", resolve("src/api")) 28 | .set("utils", resolve("src/utils")) 29 | .set("store", resolve("src/store")) 30 | .set("router", resolve("src/router")); 31 | 32 | config.resolve.extensions 33 | .add(".js") 34 | .add(".vue") 35 | .add(".styl"); 36 | 37 | config.module.rule("svg").uses.clear(); 38 | config.module 39 | .rule("svg") 40 | .use("raw-loader") 41 | .loader("raw-loader"); 42 | }, 43 | 44 | productionSourceMap: false, 45 | css: { 46 | sourceMap: false 47 | }, 48 | 49 | devServer: { 50 | open: process.platform === "darwin", 51 | host: "0.0.0.0", 52 | port: 8863, 53 | https: false, 54 | hotOnly: false, 55 | proxy: null 56 | } 57 | }; 58 | --------------------------------------------------------------------------------