├── readme.md ├── .browserslistrc ├── babel.config.js ├── public ├── favicon.ico └── index.html ├── tests └── unit │ ├── .eslintrc.js │ ├── Row.spec.js │ └── Col.spec.js ├── postcss.config.js ├── src ├── assets │ └── theme-chalk │ │ ├── aside.scss │ │ ├── fonts │ │ ├── element-icons.ttf │ │ └── element-icons.woff │ │ ├── mixins │ │ ├── config.scss │ │ ├── utils.scss │ │ └── mixins.scss │ │ ├── footer.scss │ │ ├── header.scss │ │ ├── index.scss │ │ ├── main.scss │ │ ├── container.scss │ │ ├── display.scss │ │ ├── row.scss │ │ ├── col.scss │ │ ├── common │ │ └── var.scss │ │ └── icon.scss ├── components │ └── element │ │ ├── col │ │ ├── index.js │ │ └── src │ │ │ └── Col.js │ │ ├── row │ │ ├── index.js │ │ └── src │ │ │ └── Row.js │ │ ├── icon │ │ ├── index.js │ │ └── src │ │ │ └── Icon.vue │ │ ├── main │ │ ├── index.js │ │ └── src │ │ │ └── Main.vue │ │ ├── aside │ │ ├── index.js │ │ └── src │ │ │ └── Aside.vue │ │ ├── footer │ │ ├── index.js │ │ └── src │ │ │ └── Footer.vue │ │ ├── header │ │ ├── index.js │ │ └── src │ │ │ └── Header.vue │ │ ├── container │ │ ├── index.js │ │ └── src │ │ │ └── Container.vue │ │ └── index.js ├── plugins │ └── element.js ├── main.js └── App.vue ├── .editorconfig ├── .gitignore ├── vue.config.js ├── .eslintrc.js ├── jest.config.js └── package.json /readme.md: -------------------------------------------------------------------------------- 1 | # 学习编写element组件 -------------------------------------------------------------------------------- /.browserslistrc: -------------------------------------------------------------------------------- 1 | > 1% 2 | last 2 versions 3 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | '@vue/app', 4 | ], 5 | }; 6 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DuYi-Edu/DuYi-ElementUI/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /tests/unit/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | env: { 3 | jest: true, 4 | }, 5 | }; 6 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | autoprefixer: {}, 4 | }, 5 | }; 6 | -------------------------------------------------------------------------------- /src/assets/theme-chalk/aside.scss: -------------------------------------------------------------------------------- 1 | @import "./mixins/mixins.scss"; 2 | 3 | @include b(aside) { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/assets/theme-chalk/fonts/element-icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DuYi-Edu/DuYi-ElementUI/HEAD/src/assets/theme-chalk/fonts/element-icons.ttf -------------------------------------------------------------------------------- /src/assets/theme-chalk/fonts/element-icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DuYi-Edu/DuYi-ElementUI/HEAD/src/assets/theme-chalk/fonts/element-icons.woff -------------------------------------------------------------------------------- /src/assets/theme-chalk/mixins/config.scss: -------------------------------------------------------------------------------- 1 | $namespace: 'el'; 2 | $element-separator: '__'; 3 | $modifier-separator: '--'; 4 | $state-prefix: 'is-'; 5 | -------------------------------------------------------------------------------- /src/components/element/col/index.js: -------------------------------------------------------------------------------- 1 | import Col from './src/Col'; 2 | 3 | Col.install = (Vue) => { 4 | Vue.component(Col.name, Col); 5 | }; 6 | 7 | export default Col; 8 | -------------------------------------------------------------------------------- /src/components/element/row/index.js: -------------------------------------------------------------------------------- 1 | import Row from './src/Row'; 2 | 3 | Row.install = (Vue) => { 4 | Vue.component(Row.name, Row); 5 | }; 6 | 7 | export default Row; 8 | -------------------------------------------------------------------------------- /src/components/element/icon/index.js: -------------------------------------------------------------------------------- 1 | import Icon from './src/Icon.vue'; 2 | 3 | Icon.install = (Vue) => { 4 | Vue.component(Icon.name, Icon); 5 | }; 6 | 7 | export default Icon; 8 | -------------------------------------------------------------------------------- /src/components/element/main/index.js: -------------------------------------------------------------------------------- 1 | import Main from './src/Main.vue'; 2 | 3 | Main.install = (Vue) => { 4 | Vue.component(Main.name, Main); 5 | }; 6 | 7 | export default Main; 8 | -------------------------------------------------------------------------------- /src/components/element/aside/index.js: -------------------------------------------------------------------------------- 1 | import Aside from './src/Aside.vue'; 2 | 3 | Aside.install = (Vue) => { 4 | Vue.component(Aside.name, Aside); 5 | }; 6 | 7 | export default Aside; 8 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | [*.{js,jsx,ts,tsx,vue}] 2 | indent_style = space 3 | indent_size = 2 4 | end_of_line = lf 5 | trim_trailing_whitespace = true 6 | insert_final_newline = true 7 | max_line_length = 100 8 | -------------------------------------------------------------------------------- /src/components/element/footer/index.js: -------------------------------------------------------------------------------- 1 | import Footer from './src/Footer.vue'; 2 | 3 | Footer.install = (Vue) => { 4 | Vue.component(Footer.name, Footer); 5 | }; 6 | 7 | export default Footer; 8 | -------------------------------------------------------------------------------- /src/components/element/header/index.js: -------------------------------------------------------------------------------- 1 | import Header from './src/Header.vue'; 2 | 3 | Header.install = (Vue) => { 4 | Vue.component(Header.name, Header); 5 | }; 6 | 7 | export default Header; 8 | -------------------------------------------------------------------------------- /src/plugins/element.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import Element from '@element'; 3 | import '@/assets/theme-chalk/index.scss'; 4 | import '@/assets/theme-chalk/display.scss'; 5 | 6 | Vue.use(Element); 7 | -------------------------------------------------------------------------------- /src/components/element/container/index.js: -------------------------------------------------------------------------------- 1 | import Container from './src/Container.vue'; 2 | 3 | Container.install = (Vue) => { 4 | Vue.component(Container.name, Container); 5 | }; 6 | 7 | export default Container; 8 | -------------------------------------------------------------------------------- /src/assets/theme-chalk/footer.scss: -------------------------------------------------------------------------------- 1 | @import "./mixins/mixins.scss"; 2 | @import "./common/var.scss"; 3 | 4 | @include b(footer) { 5 | box-sizing: border-box; 6 | flex-shrink: 0; 7 | padding: $--footer-padding; 8 | } 9 | -------------------------------------------------------------------------------- /src/assets/theme-chalk/header.scss: -------------------------------------------------------------------------------- 1 | @import "./mixins/mixins.scss"; 2 | @import "./common/var.scss"; 3 | 4 | @include b(header) { 5 | box-sizing: border-box; 6 | padding: $--header-padding; 7 | flex-shrink: 0; 8 | } 9 | -------------------------------------------------------------------------------- /src/components/element/main/src/Main.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import App from './App.vue'; 3 | import './plugins/element'; 4 | 5 | Vue.config.productionTip = false; 6 | 7 | new Vue({ 8 | render: h => h(App), 9 | }).$mount('#app'); 10 | -------------------------------------------------------------------------------- /src/assets/theme-chalk/index.scss: -------------------------------------------------------------------------------- 1 | @import "./row.scss"; 2 | @import "./col.scss"; 3 | @import "./container.scss"; 4 | @import "./main.scss"; 5 | @import "./header.scss"; 6 | @import "./footer.scss"; 7 | @import "./aside.scss"; 8 | @import "./icon.scss"; 9 | -------------------------------------------------------------------------------- /src/components/element/icon/src/Icon.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 13 | -------------------------------------------------------------------------------- /src/assets/theme-chalk/main.scss: -------------------------------------------------------------------------------- 1 | @import "./mixins/mixins.scss"; 2 | @import "./common/var.scss"; 3 | 4 | @include b(main) { 5 | box-sizing: border-box; 6 | display: block; 7 | overflow: hidden; 8 | padding: $--main-padding; 9 | flex: 1; 10 | } 11 | -------------------------------------------------------------------------------- /src/assets/theme-chalk/container.scss: -------------------------------------------------------------------------------- 1 | @import "./mixins/mixins.scss"; 2 | 3 | @include b(container) { 4 | box-sizing: border-box; 5 | display: flex; 6 | flex-direction: row; 7 | flex: 1; 8 | 9 | @include when(vertical) { 10 | flex-direction: column; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/assets/theme-chalk/mixins/utils.scss: -------------------------------------------------------------------------------- 1 | @mixin utils-clearfix { 2 | $selector: &; 3 | 4 | @at-root { 5 | #{$selector}::after, 6 | #{$selector}::before { 7 | display: block; 8 | content: ''; 9 | } 10 | 11 | #{$selector}::after { 12 | clear: both; 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | 5 | # local env files 6 | .env.local 7 | .env.*.local 8 | 9 | # Log files 10 | npm-debug.log* 11 | yarn-debug.log* 12 | yarn-error.log* 13 | 14 | # Editor directories and files 15 | .idea 16 | .vscode 17 | *.suo 18 | *.ntvs* 19 | *.njsproj 20 | *.sln 21 | *.sw? 22 | -------------------------------------------------------------------------------- /src/assets/theme-chalk/display.scss: -------------------------------------------------------------------------------- 1 | @import "./mixins/mixins.scss"; 2 | 3 | .hidden { 4 | @each $break-points-name, $value in $--breakpoints-spec { 5 | &-#{$break-points-name} { 6 | @include res($break-points-name, $--breakpoints-spec) { 7 | display: none !important; 8 | } 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/components/element/aside/src/Aside.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 18 | -------------------------------------------------------------------------------- /src/components/element/footer/src/Footer.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 18 | -------------------------------------------------------------------------------- /src/components/element/header/src/Header.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 18 | -------------------------------------------------------------------------------- /vue.config.js: -------------------------------------------------------------------------------- 1 | // const path = require('path'); 2 | 3 | module.exports = { 4 | // chainWebpack: (config) => { 5 | // config.resolve.alias.set('@element', path.resolve(__dirname, 'src/components/element')); 6 | // }, 7 | configureWebpack: { 8 | resolve: { 9 | alias: { 10 | '@element': '@/components/element', 11 | }, 12 | }, 13 | }, 14 | }; 15 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | env: { 4 | node: true, 5 | }, 6 | extends: [ 7 | 'plugin:vue/essential', 8 | '@vue/airbnb', 9 | ], 10 | rules: { 11 | 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off', 12 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', 13 | }, 14 | parserOptions: { 15 | parser: 'babel-eslint', 16 | }, 17 | }; 18 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | duyi-elementui 9 | 10 | 11 | 14 |
15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | moduleFileExtensions: [ 3 | 'js', 4 | 'jsx', 5 | 'json', 6 | 'vue', 7 | ], 8 | transform: { 9 | '^.+\\.vue$': 'vue-jest', 10 | '.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$': 'jest-transform-stub', 11 | '^.+\\.jsx?$': 'babel-jest', 12 | }, 13 | transformIgnorePatterns: [ 14 | '/node_modules/', 15 | ], 16 | moduleNameMapper: { 17 | '^@/(.*)$': '/src/$1', 18 | '^@element/(.*)$': '/src/components/element/$1', 19 | }, 20 | snapshotSerializers: [ 21 | 'jest-serializer-vue', 22 | ], 23 | testMatch: [ 24 | '**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)', 25 | ], 26 | testURL: 'http://localhost/', 27 | watchPlugins: [ 28 | 'jest-watch-typeahead/filename', 29 | 'jest-watch-typeahead/testname', 30 | ], 31 | }; 32 | -------------------------------------------------------------------------------- /src/assets/theme-chalk/row.scss: -------------------------------------------------------------------------------- 1 | @import "./mixins/mixins.scss"; 2 | @import "./mixins/utils.scss"; 3 | 4 | @include b(row) { 5 | box-sizing: border-box; 6 | 7 | @include utils-clearfix; 8 | 9 | @include m(flex) { 10 | display: flex; 11 | 12 | &::after, 13 | &::before { 14 | display: none; 15 | } 16 | 17 | @include when(justify-end) { 18 | justify-content: flex-end; 19 | } 20 | 21 | @include when(justify-ecenter) { 22 | justify-content: center; 23 | } 24 | 25 | @include when(justify-space-between) { 26 | justify-content: space-between; 27 | } 28 | 29 | @include when(justify-space-around) { 30 | justify-content: space-around; 31 | } 32 | 33 | @include when(align-middle) { 34 | align-items: center; 35 | } 36 | 37 | @include when(align-bottom) { 38 | align-items: flex-end; 39 | } 40 | } 41 | }; 42 | -------------------------------------------------------------------------------- /src/components/element/container/src/Container.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 34 | -------------------------------------------------------------------------------- /src/components/element/index.js: -------------------------------------------------------------------------------- 1 | import Row from '@element/row'; 2 | import Col from '@element/col'; 3 | import Container from '@element/container'; 4 | import Main from '@element/main'; 5 | import Header from '@element/header'; 6 | import Footer from '@element/footer'; 7 | import Aside from '@element/aside'; 8 | import Icon from '@element/icon'; 9 | 10 | const components = [ 11 | Row, 12 | Col, 13 | Container, 14 | Main, 15 | Header, 16 | Footer, 17 | Aside, 18 | Icon, 19 | ]; 20 | 21 | const install = (Vue) => { 22 | components.forEach((component) => { 23 | Vue.component(component.name, component); 24 | }); 25 | }; 26 | 27 | 28 | export default { 29 | install, 30 | Row, 31 | Col, 32 | Container, 33 | Main, 34 | Header, 35 | Footer, 36 | Aside, 37 | Icon, 38 | }; 39 | 40 | export { 41 | install, 42 | Row, 43 | Col, 44 | Container, 45 | Main, 46 | Header, 47 | Footer, 48 | Aside, 49 | Icon, 50 | }; 51 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "duyi-elementui", 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 | "test:unit": "vue-cli-service test:unit --watch" 10 | }, 11 | "dependencies": { 12 | "core-js": "^2.6.5", 13 | "vue": "^2.6.10" 14 | }, 15 | "devDependencies": { 16 | "@vue/cli-plugin-babel": "^3.9.0", 17 | "@vue/cli-plugin-eslint": "^3.9.0", 18 | "@vue/cli-plugin-unit-jest": "^3.9.0", 19 | "@vue/cli-service": "^3.9.0", 20 | "@vue/eslint-config-airbnb": "^4.0.0", 21 | "@vue/test-utils": "1.0.0-beta.29", 22 | "babel-core": "7.0.0-bridge.0", 23 | "babel-eslint": "^10.0.1", 24 | "babel-jest": "^23.6.0", 25 | "eslint": "^5.16.0", 26 | "eslint-plugin-vue": "^5.0.0", 27 | "node-sass": "^4.9.0", 28 | "sass-loader": "^7.1.0", 29 | "vue-template-compiler": "^2.6.10" 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/assets/theme-chalk/mixins/mixins.scss: -------------------------------------------------------------------------------- 1 | @import "./config.scss"; 2 | @import "../common/var.scss"; 3 | 4 | /** BEM 5 | ----------------*/ 6 | @mixin b($block) { 7 | $B: $namespace + '-' + $block; 8 | 9 | .#{$B} { 10 | @content; 11 | } 12 | } 13 | 14 | @mixin m($modifier) { 15 | // &--flex 16 | $currentSelector: ""; 17 | 18 | @each $unit in $modifier { 19 | $currentSelector: $currentSelector + & + $modifier-separator + $unit + ','; 20 | } 21 | 22 | @at-root { 23 | #{$currentSelector} { 24 | @content; 25 | } 26 | } 27 | } 28 | 29 | @mixin when($state) { 30 | @at-root { 31 | &.#{$state-prefix + $state} { 32 | @content; 33 | } 34 | } 35 | } 36 | 37 | /* 断点 (break points) 38 | ------------------------*/ 39 | @mixin res($key, $map: $--breakpoints) { 40 | @if map-has-key($map, $key) { 41 | @media only screen and #{inspect(map-get($map, $key))} { 42 | @content; 43 | } 44 | } @else { 45 | @warn "undefined points: `#{$map}`" 46 | } 47 | }; 48 | -------------------------------------------------------------------------------- /tests/unit/Row.spec.js: -------------------------------------------------------------------------------- 1 | import Row from '@element/row'; 2 | import { shallowMount } from '@vue/test-utils'; 3 | 4 | describe('Row.vue', () => { 5 | let wrapper; 6 | let rowEle; 7 | 8 | beforeEach(() => { 9 | wrapper = shallowMount(Row); 10 | rowEle = wrapper.vm.$el; 11 | }); 12 | 13 | it('create', () => { 14 | expect(rowEle.classList).toContain('el-row'); 15 | }); 16 | 17 | it('gutter', () => { 18 | wrapper.setProps({ gutter: 20 }); 19 | expect(rowEle.style.marginLeft).toBe('-10px'); 20 | expect(rowEle.style.marginRight).toBe('-10px'); 21 | }); 22 | 23 | it('type', () => { 24 | wrapper.setProps({ type: 'flex' }); 25 | expect(rowEle.classList).toContain('el-row--flex'); 26 | }); 27 | 28 | it('justify', () => { 29 | wrapper.setProps({ justify: 'end' }); 30 | expect(rowEle.classList).toContain('is-justify-end'); 31 | }); 32 | 33 | it('align', () => { 34 | wrapper.setProps({ align: 'bottom' }); 35 | expect(rowEle.classList).toContain('is-align-bottom'); 36 | }); 37 | }); 38 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 17 | 18 | 53 | -------------------------------------------------------------------------------- /src/components/element/row/src/Row.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name: 'ElRow', 3 | props: { 4 | tag: { 5 | type: String, 6 | default: 'div', 7 | }, 8 | gutter: { 9 | type: Number, 10 | default: 0, 11 | }, 12 | type: String, 13 | justify: { 14 | type: String, 15 | default: 'start', 16 | validator: val => ['start', 'end', 'center', 'space-between', 'space-around'].includes(val), 17 | }, 18 | align: { 19 | type: String, 20 | default: 'top', 21 | validator: val => ['top', 'middle', 'bottom'].includes(val), 22 | }, 23 | }, 24 | computed: { 25 | style() { 26 | const style = {}; 27 | if (this.gutter) { 28 | style.marginLeft = `${-this.gutter / 2}px`; 29 | style.marginRight = style.marginLeft; 30 | } 31 | return style; 32 | }, 33 | }, 34 | render(h) { 35 | return h(this.tag, { 36 | class: [ 37 | 'el-row', 38 | { 'el-row--flex': this.type === 'flex' }, 39 | this.justify !== 'start' && `is-justify-${this.justify}`, 40 | this.align !== 'top' && `is-align-${this.align}`, 41 | ], 42 | style: this.style, 43 | }, this.$slots.default); 44 | }, 45 | }; 46 | -------------------------------------------------------------------------------- /tests/unit/Col.spec.js: -------------------------------------------------------------------------------- 1 | import Row from '@element/row'; 2 | import Col from '@element/col'; 3 | import { shallowMount } from '@vue/test-utils'; 4 | 5 | describe('Col.vue', () => { 6 | let wrapper; 7 | let colEle; 8 | 9 | beforeEach(() => { 10 | wrapper = shallowMount(Col, { 11 | parentComponent: Row, 12 | }); 13 | colEle = wrapper.vm.$el; 14 | }); 15 | 16 | it('create', () => { 17 | expect(colEle.classList).toContain('el-col'); 18 | }); 19 | 20 | it('span', () => { 21 | wrapper.setProps({ span: 12 }); 22 | expect(colEle.classList).toContain('el-col-12'); 23 | }); 24 | 25 | it('offset', () => { 26 | wrapper.setProps({ offset: 6 }); 27 | expect(colEle.classList).toContain('el-col-offset-6'); 28 | }); 29 | 30 | it('pull', () => { 31 | wrapper.setProps({ pull: 3 }); 32 | expect(colEle.classList).toContain('el-col-pull-3'); 33 | }); 34 | 35 | it('push', () => { 36 | wrapper.setProps({ push: 5 }); 37 | expect(colEle.classList).toContain('el-col-push-5'); 38 | }); 39 | 40 | it('respnsive', () => { 41 | wrapper.setProps({ 42 | sm: { span: 4, offset: 2 }, 43 | md: 8, 44 | lg: { span: 6, offset: 3 }, 45 | }); 46 | expect(colEle.classList).toContain('el-col-sm-4'); 47 | expect(colEle.classList).toContain('el-col-sm-offset-2'); 48 | expect(colEle.classList).toContain('el-col-md-8'); 49 | expect(colEle.classList).toContain('el-col-lg-6'); 50 | expect(colEle.classList).toContain('el-col-lg-offset-3'); 51 | }); 52 | 53 | it('gutter', () => { 54 | wrapper.vm.$parent.gutter = 20; 55 | expect(colEle.style.paddingLeft).toBe('10px'); 56 | expect(colEle.style.paddingRight).toBe('10px'); 57 | }); 58 | }); 59 | -------------------------------------------------------------------------------- /src/components/element/col/src/Col.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name: 'ElCol', 3 | props: { 4 | tag: { 5 | type: String, 6 | default: 'div', 7 | }, 8 | span: { 9 | type: Number, 10 | default: 24, 11 | }, 12 | offset: { 13 | type: Number, 14 | default: 0, 15 | }, 16 | push: { 17 | type: Number, 18 | default: 0, 19 | }, 20 | pull: { 21 | type: Number, 22 | default: 0, 23 | }, 24 | xs: [Number, Object], 25 | sm: [Number, Object], 26 | md: [Number, Object], 27 | lg: [Number, Object], 28 | xl: [Number, Object], 29 | }, 30 | computed: { 31 | gutter() { 32 | let parent = this.$parent; 33 | 34 | while (parent && parent.$options.name !== 'ElRow') { 35 | parent = parent.$parent; 36 | } 37 | 38 | return parent ? parent.gutter : 0; 39 | }, 40 | style() { 41 | const style = {}; 42 | 43 | if (this.gutter) { 44 | style.paddingLeft = `${this.gutter / 2}px`; 45 | style.paddingRight = style.paddingLeft; 46 | } 47 | 48 | return style; 49 | }, 50 | classList() { 51 | const classList = []; 52 | 53 | ['span', 'offset', 'push', 'pull'].forEach((prop) => { 54 | if (this[prop]) { 55 | classList.push( 56 | prop === 'span' 57 | ? `el-col-${this[prop]}` 58 | : `el-col-${prop}-${this[prop]}`, 59 | ); 60 | } 61 | }); 62 | 63 | ['xs', 'sm', 'md', 'lg', 'xl'].forEach((size) => { 64 | if (typeof this[size] === 'number') { 65 | classList.push(`el-col-${size}-${this[size]}`); 66 | } else if (typeof this[size] === 'object') { 67 | // { 68 | // span: 6, 69 | // offset: 8, 70 | // push: 7, 71 | // pull: 9 72 | // } 73 | // el-col-xs-6 74 | // el-col-xs-offset-8 75 | // el-col-xs-push-7 76 | // el-col-xs-pull-9 77 | const props = this[size]; 78 | Object.keys(props).forEach((prop) => { 79 | classList.push( 80 | prop === 'span' 81 | ? `el-col-${size}-${props[prop]}` 82 | : `el-col-${size}-${prop}-${props[prop]}`, 83 | ); 84 | }); 85 | } 86 | }); 87 | 88 | return classList; 89 | }, 90 | }, 91 | render(h) { 92 | return h(this.tag, { 93 | class: ['el-col', this.classList], 94 | style: this.style, 95 | }, this.$slots.default); 96 | }, 97 | }; 98 | -------------------------------------------------------------------------------- /src/assets/theme-chalk/col.scss: -------------------------------------------------------------------------------- 1 | @import "./mixins/mixins.scss"; 2 | 3 | @include b(col) { 4 | box-sizing: border-box; 5 | float: left; 6 | }; 7 | 8 | @for $i from 0 through 24 { 9 | .el-col-#{$i} { 10 | width: $i / 24 * 100%; 11 | } 12 | 13 | .el-col-offset-#{$i} { 14 | margin-left: $i / 24 * 100%; 15 | } 16 | 17 | .el-col-push-#{$i} { 18 | position: relative; 19 | left: $i / 24 * 100%; 20 | } 21 | 22 | .el-col-pull-#{$i} { 23 | position: relative; 24 | right: $i / 24 * 100%; 25 | } 26 | }; 27 | 28 | // xs < 768px 29 | .el-col-xs-0 { 30 | display: none; 31 | } 32 | @include res(xs) { 33 | @for $i from 0 through 24 { 34 | 35 | .el-col-xs-#{$i} { 36 | width: $i / 24 * 100%; 37 | } 38 | 39 | .el-col-xs-offset-#{$i} { 40 | margin-left: $i / 24 * 100%; 41 | } 42 | 43 | .el-col-xs-push-#{$i} { 44 | position: relative; 45 | left: $i / 24 * 100%; 46 | } 47 | 48 | .el-col-xs-pull-#{$i} { 49 | position: relative; 50 | right: $i / 24 * 100%; 51 | } 52 | } 53 | } 54 | 55 | // sm >= 768px 56 | .el-col-sm-0 { 57 | display: none; 58 | } 59 | @include res(sm) { 60 | @for $i from 0 through 24 { 61 | 62 | .el-col-sm-#{$i} { 63 | width: $i / 24 * 100%; 64 | } 65 | 66 | .el-col-sm-offset-#{$i} { 67 | margin-left: $i / 24 * 100%; 68 | } 69 | 70 | .el-col-sm-push-#{$i} { 71 | position: relative; 72 | left: $i / 24 * 100%; 73 | } 74 | 75 | .el-col-sm-pull-#{$i} { 76 | position: relative; 77 | right: $i / 24 * 100%; 78 | } 79 | } 80 | } 81 | 82 | // md >= 992px 83 | .el-col-md-0 { 84 | display: none; 85 | } 86 | @include res(md) { 87 | @for $i from 0 through 24 { 88 | 89 | .el-col-md-#{$i} { 90 | width: $i / 24 * 100%; 91 | } 92 | 93 | .el-col-md-offset-#{$i} { 94 | margin-left: $i / 24 * 100%; 95 | } 96 | 97 | .el-col-md-push-#{$i} { 98 | position: relative; 99 | left: $i / 24 * 100%; 100 | } 101 | 102 | .el-col-md-pull-#{$i} { 103 | position: relative; 104 | right: $i / 24 * 100%; 105 | } 106 | } 107 | } 108 | 109 | // lg >= 1200px 110 | .el-col-lg-0 { 111 | display: none; 112 | } 113 | 114 | @include res(lg) { 115 | @for $i from 0 through 24 { 116 | 117 | .el-col-lg-#{$i} { 118 | width: $i / 24 * 100%; 119 | } 120 | 121 | .el-col-lg-offset-#{$i} { 122 | margin-left: $i / 24 * 100%; 123 | } 124 | 125 | .el-col-lg-push-#{$i} { 126 | position: relative; 127 | left: $i / 24 * 100%; 128 | } 129 | 130 | .el-col-lg-pull-#{$i} { 131 | position: relative; 132 | right: $i / 24 * 100%; 133 | } 134 | } 135 | } 136 | 137 | // xl >= 1920px 138 | .el-col-xl-0 { 139 | display: none; 140 | } 141 | 142 | @include res(xl) { 143 | @for $i from 0 through 24 { 144 | 145 | .el-col-xl-#{$i} { 146 | width: $i / 24 * 100%; 147 | } 148 | 149 | .el-col-xl-offset-#{$i} { 150 | margin-left: $i / 24 * 100%; 151 | } 152 | 153 | .el-col-xl-push-#{$i} { 154 | position: relative; 155 | left: $i / 24 * 100%; 156 | } 157 | 158 | .el-col-xl-pull-#{$i} { 159 | position: relative; 160 | right: $i / 24 * 100%; 161 | } 162 | } 163 | } 164 | -------------------------------------------------------------------------------- /src/assets/theme-chalk/common/var.scss: -------------------------------------------------------------------------------- 1 | /* Header 2 | --------------------------*/ 3 | $--header-padding: 0 20px !default; 4 | 5 | /* Footer 6 | --------------------------*/ 7 | $--footer-padding: 0 20px !default; 8 | 9 | /* Main 10 | --------------------------*/ 11 | $--main-padding: 0 20px !default; 12 | 13 | /** Color 14 | ---------------------------*/ 15 | $--color-primary: #409eff !default; 16 | $--color-white: #ffffff !default; 17 | $--color-black: #000000 !default; 18 | $--color-primary-light-1: mix($--color-white, $--color-primary, 10%) !default; 19 | $--color-primary-light-2: mix($--color-white, $--color-primary, 20%) !default; 20 | $--color-primary-light-3: mix($--color-white, $--color-primary, 30%) !default; 21 | $--color-primary-light-4: mix($--color-white, $--color-primary, 40%) !default; 22 | $--color-primary-light-5: mix($--color-white, $--color-primary, 50%) !default; 23 | $--color-primary-light-6: mix($--color-white, $--color-primary, 60%) !default; 24 | $--color-primary-light-7: mix($--color-white, $--color-primary, 70%) !default; 25 | $--color-primary-light-8: mix($--color-white, $--color-primary, 80%) !default; 26 | $--color-primary-light-9: mix($--color-white, $--color-primary, 90%) !default; 27 | // 辅助色 28 | $--color-success: #67c23a !default; // 成功颜色 29 | $--color-success-light: mix($--color-white, $--color-success, 80%) !default; 30 | $--color-success-lighter: mix($--color-white, $--color-success, 90%) !default; 31 | $--color-warning: #e6a23c !default; // 警告颜色 32 | $--color-warning-light: mix($--color-white, $--color-warning, 80%) !default; 33 | $--color-warning-lighter: mix($--color-white, $--color-warning, 90%) !default; 34 | $--color-danger: #f56c6c !default; // 危险颜色 35 | $--color-danger-light: mix($--color-white, $--color-danger, 80%) !default; 36 | $--color-danger-lighter: mix($--color-white, $--color-danger, 90%) !default; 37 | $--color-info: #909399 !default; // 信息颜色 38 | $--color-info-light: mix($--color-white, $--color-info, 80%) !default; 39 | $--color-info-lighter: mix($--color-white, $--color-info, 90%) !default; 40 | // 中性色 41 | $--color-text-primary: #303133 !default; // 主要文字 42 | $--color-text-regular: #606266 !default; // 常规文字 43 | $--color-text-secondary: #909399 !default; // 次要文字 44 | $--color-text-placeholder: #c0c4cc !default; // 占位文字 45 | $--border-color-base: #dcdfe6 !default; // 一级边框 46 | $--border-color-light: #e4e7eD !default; // 二级边框 47 | $--border-color-lighter: #ebeef5 !default; // 三级边框 48 | $--border-color-extra-light: #f2f6fc !default; // 四级边框 49 | 50 | /** Typography 51 | -------------------------------*/ 52 | $--font-path: 'fonts'; // 字体路径 53 | $--font-size-extra-large: 20px !default; // 主标题 54 | $--font-size-large: 18px !default; // 标题 55 | $--font-size-medium: 16px !default; // 小标题 56 | $--font-size-base: 14px !default; // 正文 57 | $--font-size-small: 13px !default; // 正文(小) 58 | $--font-size-extra-small: 12px !default; // 正文(小) 59 | 60 | /** Border 61 | ----------------------------*/ 62 | $--border-width-base: 1px !default; 63 | $--border-style-base: solid !default; 64 | $--border-base: 1px solid $--border-color-base !default; 65 | $--border-radius-base: 4px !default; // 大圆角 66 | $--border-radius-small: 2px !default; // 小圆角 67 | $--border-radius-zero: 0 !default; // 无圆角 68 | $--box-shadow-base: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04) !default; 69 | $--box-shadow-light: 0 2px 12px 0 rgba(0, 0, 0, .1) !default; 70 | 71 | /* Break Point 72 | --------------------------*/ 73 | $--sm: 768px !default; 74 | $--md: 992px !default; 75 | $--lg: 1200px !default; 76 | $--xl: 1920px !default; 77 | 78 | $--breakpoints: ( 79 | 'xs': (max-width: $--sm - 1), 80 | 'sm': (min-width: $--sm), 81 | 'md': (min-width: $--md), 82 | 'lg': (min-width: $--lg), 83 | 'xl': (min-width: $--xl), 84 | ); 85 | 86 | $--breakpoints-spec: ( 87 | 'xs-only': (max-width: $--sm - 1), 88 | 'sm-and-up': (min-width: $--sm), 89 | 'sm-only': '(min-width: #{$--sm}) and (max-width: #{$--md -1})', 90 | 'sm-and-down': (max-width: $--md - 1), 91 | 'md-and-up': (min-width: $--md), 92 | 'md-only': '(min-width: #{$--md}) and (max-width: #{$--lg -1})', 93 | 'md-and-down': (max-width: $--lg - 1), 94 | 'lg-and-up': (min-width: $--lg), 95 | 'lg-only': '(min-width: #{$--lg}) and (max-width: #{$--xl - 1})', 96 | 'lg-and-down': (max-width: $--xl - 1), 97 | 'xl-only': (min-width: $--xl), 98 | ) -------------------------------------------------------------------------------- /src/assets/theme-chalk/icon.scss: -------------------------------------------------------------------------------- 1 | @import "./common/var.scss"; 2 | 3 | @font-face { 4 | font-family: 'element-icons'; 5 | src: url('#{$--font-path}/element-icons.woff') format('woff'), 6 | url('#{$--font-path}/element-icons.ttf') format('truetype'); 7 | } 8 | 9 | [class^="el-icon-"], [class*="el-icon-"] { 10 | font-family: 'element-icons' !important; 11 | display: inline-block; 12 | font-style: normal; 13 | -webkit-font-smoothing: antialiased; 14 | -moz-osx-font-smoothing: grayscale; 15 | } 16 | 17 | .el-icon-ice-cream-round:before { 18 | content: "\e6a0"; 19 | } 20 | 21 | .el-icon-ice-cream-square:before { 22 | content: "\e6a3"; 23 | } 24 | 25 | .el-icon-lollipop:before { 26 | content: "\e6a4"; 27 | } 28 | 29 | .el-icon-potato-strips:before { 30 | content: "\e6a5"; 31 | } 32 | 33 | .el-icon-milk-tea:before { 34 | content: "\e6a6"; 35 | } 36 | 37 | .el-icon-ice-drink:before { 38 | content: "\e6a7"; 39 | } 40 | 41 | .el-icon-ice-tea:before { 42 | content: "\e6a9"; 43 | } 44 | 45 | .el-icon-coffee:before { 46 | content: "\e6aa"; 47 | } 48 | 49 | .el-icon-orange:before { 50 | content: "\e6ab"; 51 | } 52 | 53 | .el-icon-pear:before { 54 | content: "\e6ac"; 55 | } 56 | 57 | .el-icon-apple:before { 58 | content: "\e6ad"; 59 | } 60 | 61 | .el-icon-cherry:before { 62 | content: "\e6ae"; 63 | } 64 | 65 | .el-icon-watermelon:before { 66 | content: "\e6af"; 67 | } 68 | 69 | .el-icon-grape:before { 70 | content: "\e6b0"; 71 | } 72 | 73 | .el-icon-refrigerator:before { 74 | content: "\e6b1"; 75 | } 76 | 77 | .el-icon-goblet-square-full:before { 78 | content: "\e6b2"; 79 | } 80 | 81 | .el-icon-goblet-square:before { 82 | content: "\e6b3"; 83 | } 84 | 85 | .el-icon-goblet-full:before { 86 | content: "\e6b4"; 87 | } 88 | 89 | .el-icon-goblet:before { 90 | content: "\e6b5"; 91 | } 92 | 93 | .el-icon-cold-drink:before { 94 | content: "\e6b6"; 95 | } 96 | 97 | .el-icon-coffee-cup:before { 98 | content: "\e6b8"; 99 | } 100 | 101 | .el-icon-water-cup:before { 102 | content: "\e6b9"; 103 | } 104 | 105 | .el-icon-hot-water:before { 106 | content: "\e6ba"; 107 | } 108 | 109 | .el-icon-ice-cream:before { 110 | content: "\e6bb"; 111 | } 112 | 113 | .el-icon-dessert:before { 114 | content: "\e6bc"; 115 | } 116 | 117 | .el-icon-sugar:before { 118 | content: "\e6bd"; 119 | } 120 | 121 | .el-icon-tableware:before { 122 | content: "\e6be"; 123 | } 124 | 125 | .el-icon-burger:before { 126 | content: "\e6bf"; 127 | } 128 | 129 | .el-icon-knife-fork:before { 130 | content: "\e6c1"; 131 | } 132 | 133 | .el-icon-fork-spoon:before { 134 | content: "\e6c2"; 135 | } 136 | 137 | .el-icon-chicken:before { 138 | content: "\e6c3"; 139 | } 140 | 141 | .el-icon-food:before { 142 | content: "\e6c4"; 143 | } 144 | 145 | .el-icon-dish-1:before { 146 | content: "\e6c5"; 147 | } 148 | 149 | .el-icon-dish:before { 150 | content: "\e6c6"; 151 | } 152 | 153 | .el-icon-moon-night:before { 154 | content: "\e6ee"; 155 | } 156 | 157 | .el-icon-moon:before { 158 | content: "\e6f0"; 159 | } 160 | 161 | .el-icon-cloudy-and-sunny:before { 162 | content: "\e6f1"; 163 | } 164 | 165 | .el-icon-partly-cloudy:before { 166 | content: "\e6f2"; 167 | } 168 | 169 | .el-icon-cloudy:before { 170 | content: "\e6f3"; 171 | } 172 | 173 | .el-icon-sunny:before { 174 | content: "\e6f6"; 175 | } 176 | 177 | .el-icon-sunset:before { 178 | content: "\e6f7"; 179 | } 180 | 181 | .el-icon-sunrise-1:before { 182 | content: "\e6f8"; 183 | } 184 | 185 | .el-icon-sunrise:before { 186 | content: "\e6f9"; 187 | } 188 | 189 | .el-icon-heavy-rain:before { 190 | content: "\e6fa"; 191 | } 192 | 193 | .el-icon-lightning:before { 194 | content: "\e6fb"; 195 | } 196 | 197 | .el-icon-light-rain:before { 198 | content: "\e6fc"; 199 | } 200 | 201 | .el-icon-wind-power:before { 202 | content: "\e6fd"; 203 | } 204 | 205 | .el-icon-baseball:before { 206 | content: "\e712"; 207 | } 208 | 209 | .el-icon-soccer:before { 210 | content: "\e713"; 211 | } 212 | 213 | .el-icon-football:before { 214 | content: "\e715"; 215 | } 216 | 217 | .el-icon-basketball:before { 218 | content: "\e716"; 219 | } 220 | 221 | .el-icon-ship:before { 222 | content: "\e73f"; 223 | } 224 | 225 | .el-icon-truck:before { 226 | content: "\e740"; 227 | } 228 | 229 | .el-icon-bicycle:before { 230 | content: "\e741"; 231 | } 232 | 233 | .el-icon-mobile-phone:before { 234 | content: "\e6d3"; 235 | } 236 | 237 | .el-icon-service:before { 238 | content: "\e6d4"; 239 | } 240 | 241 | .el-icon-key:before { 242 | content: "\e6e2"; 243 | } 244 | 245 | .el-icon-unlock:before { 246 | content: "\e6e4"; 247 | } 248 | 249 | .el-icon-lock:before { 250 | content: "\e6e5"; 251 | } 252 | 253 | .el-icon-watch:before { 254 | content: "\e6fe"; 255 | } 256 | 257 | .el-icon-watch-1:before { 258 | content: "\e6ff"; 259 | } 260 | 261 | .el-icon-timer:before { 262 | content: "\e702"; 263 | } 264 | 265 | .el-icon-alarm-clock:before { 266 | content: "\e703"; 267 | } 268 | 269 | .el-icon-map-location:before { 270 | content: "\e704"; 271 | } 272 | 273 | .el-icon-delete-location:before { 274 | content: "\e705"; 275 | } 276 | 277 | .el-icon-add-location:before { 278 | content: "\e706"; 279 | } 280 | 281 | .el-icon-location-information:before { 282 | content: "\e707"; 283 | } 284 | 285 | .el-icon-location-outline:before { 286 | content: "\e708"; 287 | } 288 | 289 | .el-icon-location:before { 290 | content: "\e79e"; 291 | } 292 | 293 | .el-icon-place:before { 294 | content: "\e709"; 295 | } 296 | 297 | .el-icon-discover:before { 298 | content: "\e70a"; 299 | } 300 | 301 | .el-icon-first-aid-kit:before { 302 | content: "\e70b"; 303 | } 304 | 305 | .el-icon-trophy-1:before { 306 | content: "\e70c"; 307 | } 308 | 309 | .el-icon-trophy:before { 310 | content: "\e70d"; 311 | } 312 | 313 | .el-icon-medal:before { 314 | content: "\e70e"; 315 | } 316 | 317 | .el-icon-medal-1:before { 318 | content: "\e70f"; 319 | } 320 | 321 | .el-icon-stopwatch:before { 322 | content: "\e710"; 323 | } 324 | 325 | .el-icon-mic:before { 326 | content: "\e711"; 327 | } 328 | 329 | .el-icon-copy-document:before { 330 | content: "\e718"; 331 | } 332 | 333 | .el-icon-full-screen:before { 334 | content: "\e719"; 335 | } 336 | 337 | .el-icon-switch-button:before { 338 | content: "\e71b"; 339 | } 340 | 341 | .el-icon-aim:before { 342 | content: "\e71c"; 343 | } 344 | 345 | .el-icon-crop:before { 346 | content: "\e71d"; 347 | } 348 | 349 | .el-icon-odometer:before { 350 | content: "\e71e"; 351 | } 352 | 353 | .el-icon-time:before { 354 | content: "\e71f"; 355 | } 356 | 357 | .el-icon-bangzhu:before { 358 | content: "\e724"; 359 | } 360 | 361 | .el-icon-close-notification:before { 362 | content: "\e726"; 363 | } 364 | 365 | .el-icon-microphone:before { 366 | content: "\e727"; 367 | } 368 | 369 | .el-icon-turn-off-microphone:before { 370 | content: "\e728"; 371 | } 372 | 373 | .el-icon-position:before { 374 | content: "\e729"; 375 | } 376 | 377 | .el-icon-postcard:before { 378 | content: "\e72a"; 379 | } 380 | 381 | .el-icon-message:before { 382 | content: "\e72b"; 383 | } 384 | 385 | .el-icon-chat-line-square:before { 386 | content: "\e72d"; 387 | } 388 | 389 | .el-icon-chat-dot-square:before { 390 | content: "\e72e"; 391 | } 392 | 393 | .el-icon-chat-dot-round:before { 394 | content: "\e72f"; 395 | } 396 | 397 | .el-icon-chat-square:before { 398 | content: "\e730"; 399 | } 400 | 401 | .el-icon-chat-line-round:before { 402 | content: "\e731"; 403 | } 404 | 405 | .el-icon-chat-round:before { 406 | content: "\e732"; 407 | } 408 | 409 | .el-icon-set-up:before { 410 | content: "\e733"; 411 | } 412 | 413 | .el-icon-turn-off:before { 414 | content: "\e734"; 415 | } 416 | 417 | .el-icon-open:before { 418 | content: "\e735"; 419 | } 420 | 421 | .el-icon-connection:before { 422 | content: "\e736"; 423 | } 424 | 425 | .el-icon-link:before { 426 | content: "\e737"; 427 | } 428 | 429 | .el-icon-cpu:before { 430 | content: "\e738"; 431 | } 432 | 433 | .el-icon-thumb:before { 434 | content: "\e739"; 435 | } 436 | 437 | .el-icon-female:before { 438 | content: "\e73a"; 439 | } 440 | 441 | .el-icon-male:before { 442 | content: "\e73b"; 443 | } 444 | 445 | .el-icon-guide:before { 446 | content: "\e73c"; 447 | } 448 | 449 | .el-icon-news:before { 450 | content: "\e73e"; 451 | } 452 | 453 | .el-icon-price-tag:before { 454 | content: "\e744"; 455 | } 456 | 457 | .el-icon-discount:before { 458 | content: "\e745"; 459 | } 460 | 461 | .el-icon-wallet:before { 462 | content: "\e747"; 463 | } 464 | 465 | .el-icon-coin:before { 466 | content: "\e748"; 467 | } 468 | 469 | .el-icon-money:before { 470 | content: "\e749"; 471 | } 472 | 473 | .el-icon-bank-card:before { 474 | content: "\e74a"; 475 | } 476 | 477 | .el-icon-box:before { 478 | content: "\e74b"; 479 | } 480 | 481 | .el-icon-present:before { 482 | content: "\e74c"; 483 | } 484 | 485 | .el-icon-sell:before { 486 | content: "\e6d5"; 487 | } 488 | 489 | .el-icon-sold-out:before { 490 | content: "\e6d6"; 491 | } 492 | 493 | .el-icon-shopping-bag-2:before { 494 | content: "\e74d"; 495 | } 496 | 497 | .el-icon-shopping-bag-1:before { 498 | content: "\e74e"; 499 | } 500 | 501 | .el-icon-shopping-cart-2:before { 502 | content: "\e74f"; 503 | } 504 | 505 | .el-icon-shopping-cart-1:before { 506 | content: "\e750"; 507 | } 508 | 509 | .el-icon-shopping-cart-full:before { 510 | content: "\e751"; 511 | } 512 | 513 | .el-icon-smoking:before { 514 | content: "\e752"; 515 | } 516 | 517 | .el-icon-no-smoking:before { 518 | content: "\e753"; 519 | } 520 | 521 | .el-icon-house:before { 522 | content: "\e754"; 523 | } 524 | 525 | .el-icon-table-lamp:before { 526 | content: "\e755"; 527 | } 528 | 529 | .el-icon-school:before { 530 | content: "\e756"; 531 | } 532 | 533 | .el-icon-office-building:before { 534 | content: "\e757"; 535 | } 536 | 537 | .el-icon-toilet-paper:before { 538 | content: "\e758"; 539 | } 540 | 541 | .el-icon-notebook-2:before { 542 | content: "\e759"; 543 | } 544 | 545 | .el-icon-notebook-1:before { 546 | content: "\e75a"; 547 | } 548 | 549 | .el-icon-files:before { 550 | content: "\e75b"; 551 | } 552 | 553 | .el-icon-collection:before { 554 | content: "\e75c"; 555 | } 556 | 557 | .el-icon-receiving:before { 558 | content: "\e75d"; 559 | } 560 | 561 | .el-icon-suitcase-1:before { 562 | content: "\e760"; 563 | } 564 | 565 | .el-icon-suitcase:before { 566 | content: "\e761"; 567 | } 568 | 569 | .el-icon-film:before { 570 | content: "\e763"; 571 | } 572 | 573 | .el-icon-collection-tag:before { 574 | content: "\e765"; 575 | } 576 | 577 | .el-icon-data-analysis:before { 578 | content: "\e766"; 579 | } 580 | 581 | .el-icon-pie-chart:before { 582 | content: "\e767"; 583 | } 584 | 585 | .el-icon-data-board:before { 586 | content: "\e768"; 587 | } 588 | 589 | .el-icon-data-line:before { 590 | content: "\e76d"; 591 | } 592 | 593 | .el-icon-reading:before { 594 | content: "\e769"; 595 | } 596 | 597 | .el-icon-magic-stick:before { 598 | content: "\e76a"; 599 | } 600 | 601 | .el-icon-coordinate:before { 602 | content: "\e76b"; 603 | } 604 | 605 | .el-icon-mouse:before { 606 | content: "\e76c"; 607 | } 608 | 609 | .el-icon-brush:before { 610 | content: "\e76e"; 611 | } 612 | 613 | .el-icon-headset:before { 614 | content: "\e76f"; 615 | } 616 | 617 | .el-icon-umbrella:before { 618 | content: "\e770"; 619 | } 620 | 621 | .el-icon-scissors:before { 622 | content: "\e771"; 623 | } 624 | 625 | .el-icon-mobile:before { 626 | content: "\e773"; 627 | } 628 | 629 | .el-icon-attract:before { 630 | content: "\e774"; 631 | } 632 | 633 | .el-icon-monitor:before { 634 | content: "\e775"; 635 | } 636 | 637 | .el-icon-search:before { 638 | content: "\e778"; 639 | } 640 | 641 | .el-icon-takeaway-box:before { 642 | content: "\e77a"; 643 | } 644 | 645 | .el-icon-paperclip:before { 646 | content: "\e77d"; 647 | } 648 | 649 | .el-icon-printer:before { 650 | content: "\e77e"; 651 | } 652 | 653 | .el-icon-document-add:before { 654 | content: "\e782"; 655 | } 656 | 657 | .el-icon-document:before { 658 | content: "\e785"; 659 | } 660 | 661 | .el-icon-document-checked:before { 662 | content: "\e786"; 663 | } 664 | 665 | .el-icon-document-copy:before { 666 | content: "\e787"; 667 | } 668 | 669 | .el-icon-document-delete:before { 670 | content: "\e788"; 671 | } 672 | 673 | .el-icon-document-remove:before { 674 | content: "\e789"; 675 | } 676 | 677 | .el-icon-tickets:before { 678 | content: "\e78b"; 679 | } 680 | 681 | .el-icon-folder-checked:before { 682 | content: "\e77f"; 683 | } 684 | 685 | .el-icon-folder-delete:before { 686 | content: "\e780"; 687 | } 688 | 689 | .el-icon-folder-remove:before { 690 | content: "\e781"; 691 | } 692 | 693 | .el-icon-folder-add:before { 694 | content: "\e783"; 695 | } 696 | 697 | .el-icon-folder-opened:before { 698 | content: "\e784"; 699 | } 700 | 701 | .el-icon-folder:before { 702 | content: "\e78a"; 703 | } 704 | 705 | .el-icon-edit-outline:before { 706 | content: "\e764"; 707 | } 708 | 709 | .el-icon-edit:before { 710 | content: "\e78c"; 711 | } 712 | 713 | .el-icon-date:before { 714 | content: "\e78e"; 715 | } 716 | 717 | .el-icon-c-scale-to-original:before { 718 | content: "\e7c6"; 719 | } 720 | 721 | .el-icon-view:before { 722 | content: "\e6ce"; 723 | } 724 | 725 | .el-icon-loading:before { 726 | content: "\e6cf"; 727 | } 728 | 729 | .el-icon-rank:before { 730 | content: "\e6d1"; 731 | } 732 | 733 | .el-icon-sort-down:before { 734 | content: "\e7c4"; 735 | } 736 | 737 | .el-icon-sort-up:before { 738 | content: "\e7c5"; 739 | } 740 | 741 | .el-icon-sort:before { 742 | content: "\e6d2"; 743 | } 744 | 745 | .el-icon-finished:before { 746 | content: "\e6cd"; 747 | } 748 | 749 | .el-icon-refresh-left:before { 750 | content: "\e6c7"; 751 | } 752 | 753 | .el-icon-refresh-right:before { 754 | content: "\e6c8"; 755 | } 756 | 757 | .el-icon-refresh:before { 758 | content: "\e6d0"; 759 | } 760 | 761 | .el-icon-video-play:before { 762 | content: "\e7c0"; 763 | } 764 | 765 | .el-icon-video-pause:before { 766 | content: "\e7c1"; 767 | } 768 | 769 | .el-icon-d-arrow-right:before { 770 | content: "\e6dc"; 771 | } 772 | 773 | .el-icon-d-arrow-left:before { 774 | content: "\e6dd"; 775 | } 776 | 777 | .el-icon-arrow-up:before { 778 | content: "\e6e1"; 779 | } 780 | 781 | .el-icon-arrow-down:before { 782 | content: "\e6df"; 783 | } 784 | 785 | .el-icon-arrow-right:before { 786 | content: "\e6e0"; 787 | } 788 | 789 | .el-icon-arrow-left:before { 790 | content: "\e6de"; 791 | } 792 | 793 | .el-icon-top-right:before { 794 | content: "\e6e7"; 795 | } 796 | 797 | .el-icon-top-left:before { 798 | content: "\e6e8"; 799 | } 800 | 801 | .el-icon-top:before { 802 | content: "\e6e6"; 803 | } 804 | 805 | .el-icon-bottom:before { 806 | content: "\e6eb"; 807 | } 808 | 809 | .el-icon-right:before { 810 | content: "\e6e9"; 811 | } 812 | 813 | .el-icon-back:before { 814 | content: "\e6ea"; 815 | } 816 | 817 | .el-icon-bottom-right:before { 818 | content: "\e6ec"; 819 | } 820 | 821 | .el-icon-bottom-left:before { 822 | content: "\e6ed"; 823 | } 824 | 825 | .el-icon-caret-top:before { 826 | content: "\e78f"; 827 | } 828 | 829 | .el-icon-caret-bottom:before { 830 | content: "\e790"; 831 | } 832 | 833 | .el-icon-caret-right:before { 834 | content: "\e791"; 835 | } 836 | 837 | .el-icon-caret-left:before { 838 | content: "\e792"; 839 | } 840 | 841 | .el-icon-d-caret:before { 842 | content: "\e79a"; 843 | } 844 | 845 | .el-icon-share:before { 846 | content: "\e793"; 847 | } 848 | 849 | .el-icon-menu:before { 850 | content: "\e798"; 851 | } 852 | 853 | .el-icon-s-grid:before { 854 | content: "\e7a6"; 855 | } 856 | 857 | .el-icon-s-check:before { 858 | content: "\e7a7"; 859 | } 860 | 861 | .el-icon-s-data:before { 862 | content: "\e7a8"; 863 | } 864 | 865 | .el-icon-s-opportunity:before { 866 | content: "\e7aa"; 867 | } 868 | 869 | .el-icon-s-custom:before { 870 | content: "\e7ab"; 871 | } 872 | 873 | .el-icon-s-claim:before { 874 | content: "\e7ad"; 875 | } 876 | 877 | .el-icon-s-finance:before { 878 | content: "\e7ae"; 879 | } 880 | 881 | .el-icon-s-comment:before { 882 | content: "\e7af"; 883 | } 884 | 885 | .el-icon-s-flag:before { 886 | content: "\e7b0"; 887 | } 888 | 889 | .el-icon-s-marketing:before { 890 | content: "\e7b1"; 891 | } 892 | 893 | .el-icon-s-shop:before { 894 | content: "\e7b4"; 895 | } 896 | 897 | .el-icon-s-open:before { 898 | content: "\e7b5"; 899 | } 900 | 901 | .el-icon-s-management:before { 902 | content: "\e7b6"; 903 | } 904 | 905 | .el-icon-s-ticket:before { 906 | content: "\e7b7"; 907 | } 908 | 909 | .el-icon-s-release:before { 910 | content: "\e7b8"; 911 | } 912 | 913 | .el-icon-s-home:before { 914 | content: "\e7b9"; 915 | } 916 | 917 | .el-icon-s-promotion:before { 918 | content: "\e7ba"; 919 | } 920 | 921 | .el-icon-s-operation:before { 922 | content: "\e7bb"; 923 | } 924 | 925 | .el-icon-s-unfold:before { 926 | content: "\e7bc"; 927 | } 928 | 929 | .el-icon-s-fold:before { 930 | content: "\e7a9"; 931 | } 932 | 933 | .el-icon-s-platform:before { 934 | content: "\e7bd"; 935 | } 936 | 937 | .el-icon-s-order:before { 938 | content: "\e7be"; 939 | } 940 | 941 | .el-icon-s-cooperation:before { 942 | content: "\e7bf"; 943 | } 944 | 945 | .el-icon-bell:before { 946 | content: "\e725"; 947 | } 948 | 949 | .el-icon-message-solid:before { 950 | content: "\e799"; 951 | } 952 | 953 | .el-icon-video-camera:before { 954 | content: "\e772"; 955 | } 956 | 957 | .el-icon-video-camera-solid:before { 958 | content: "\e796"; 959 | } 960 | 961 | .el-icon-camera:before { 962 | content: "\e779"; 963 | } 964 | 965 | .el-icon-camera-solid:before { 966 | content: "\e79b"; 967 | } 968 | 969 | .el-icon-download:before { 970 | content: "\e77c"; 971 | } 972 | 973 | .el-icon-upload2:before { 974 | content: "\e77b"; 975 | } 976 | 977 | .el-icon-upload:before { 978 | content: "\e7c3"; 979 | } 980 | 981 | .el-icon-picture-outline-round:before { 982 | content: "\e75f"; 983 | } 984 | 985 | .el-icon-picture-outline:before { 986 | content: "\e75e"; 987 | } 988 | 989 | .el-icon-picture:before { 990 | content: "\e79f"; 991 | } 992 | 993 | .el-icon-close:before { 994 | content: "\e6db"; 995 | } 996 | 997 | .el-icon-check:before { 998 | content: "\e6da"; 999 | } 1000 | 1001 | .el-icon-plus:before { 1002 | content: "\e6d9"; 1003 | } 1004 | 1005 | .el-icon-minus:before { 1006 | content: "\e6d8"; 1007 | } 1008 | 1009 | .el-icon-help:before { 1010 | content: "\e73d"; 1011 | } 1012 | 1013 | .el-icon-s-help:before { 1014 | content: "\e7b3"; 1015 | } 1016 | 1017 | .el-icon-circle-close:before { 1018 | content: "\e78d"; 1019 | } 1020 | 1021 | .el-icon-circle-check:before { 1022 | content: "\e720"; 1023 | } 1024 | 1025 | .el-icon-circle-plus-outline:before { 1026 | content: "\e723"; 1027 | } 1028 | 1029 | .el-icon-remove-outline:before { 1030 | content: "\e722"; 1031 | } 1032 | 1033 | .el-icon-zoom-out:before { 1034 | content: "\e776"; 1035 | } 1036 | 1037 | .el-icon-zoom-in:before { 1038 | content: "\e777"; 1039 | } 1040 | 1041 | .el-icon-error:before { 1042 | content: "\e79d"; 1043 | } 1044 | 1045 | .el-icon-success:before { 1046 | content: "\e79c"; 1047 | } 1048 | 1049 | .el-icon-circle-plus:before { 1050 | content: "\e7a0"; 1051 | } 1052 | 1053 | .el-icon-remove:before { 1054 | content: "\e7a2"; 1055 | } 1056 | 1057 | .el-icon-info:before { 1058 | content: "\e7a1"; 1059 | } 1060 | 1061 | .el-icon-question:before { 1062 | content: "\e7a4"; 1063 | } 1064 | 1065 | .el-icon-warning-outline:before { 1066 | content: "\e6c9"; 1067 | } 1068 | 1069 | .el-icon-warning:before { 1070 | content: "\e7a3"; 1071 | } 1072 | 1073 | .el-icon-goods:before { 1074 | content: "\e7c2"; 1075 | } 1076 | 1077 | .el-icon-s-goods:before { 1078 | content: "\e7b2"; 1079 | } 1080 | 1081 | .el-icon-star-off:before { 1082 | content: "\e717"; 1083 | } 1084 | 1085 | .el-icon-star-on:before { 1086 | content: "\e797"; 1087 | } 1088 | 1089 | .el-icon-more-outline:before { 1090 | content: "\e6cc"; 1091 | } 1092 | 1093 | .el-icon-more:before { 1094 | content: "\e794"; 1095 | } 1096 | 1097 | .el-icon-phone-outline:before { 1098 | content: "\e6cb"; 1099 | } 1100 | 1101 | .el-icon-phone:before { 1102 | content: "\e795"; 1103 | } 1104 | 1105 | .el-icon-user:before { 1106 | content: "\e6e3"; 1107 | } 1108 | 1109 | .el-icon-user-solid:before { 1110 | content: "\e7a5"; 1111 | } 1112 | 1113 | .el-icon-setting:before { 1114 | content: "\e6ca"; 1115 | } 1116 | 1117 | .el-icon-s-tools:before { 1118 | content: "\e7ac"; 1119 | } 1120 | 1121 | .el-icon-delete:before { 1122 | content: "\e6d7"; 1123 | } 1124 | 1125 | .el-icon-delete-solid:before { 1126 | content: "\e7c9"; 1127 | } 1128 | 1129 | .el-icon-eleme:before { 1130 | content: "\e7c7"; 1131 | } 1132 | 1133 | .el-icon-platform-eleme:before { 1134 | content: "\e7ca"; 1135 | } 1136 | 1137 | .el-icon-loading { 1138 | animation: rotating 2s linear infinite; 1139 | } 1140 | 1141 | @keyframes rotating { 1142 | 0% { 1143 | transform: rotateZ(0deg); 1144 | } 1145 | 100% { 1146 | transform: rotateZ(360deg); 1147 | } 1148 | } --------------------------------------------------------------------------------